ZGlmZiAtLWdpdCBhL0FkYTk1L01ha2VmaWxlLmluIGIvQWRhOTUvTWFrZWZpbGUuaW4KaW5kZXggYjE3NDNjZi4uNGQ4MGZlMyAxMDA2NDQKLS0tIGEvQWRhOTUvTWFrZWZpbGUuaW4KKysrIGIvQWRhOTUvTWFrZWZpbGUuaW4KQEAgLTEsNSArMSw2IEBACisjICRJZDogTWFrZWZpbGUuaW4sdiAxLjIyIDIwMTUvMDgvMDUgMjM6MTU6NDEgdG9tIEV4cCAkCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBDb3B5cmlnaHQgKGMpIDE5OTgtMjAxMCwyMDE1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAjCiAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKICMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAgIwogIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCAjCkBAIC0yOSw5ICszMCwxMCBAQAogIyAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CiAjCiAjICBWZXJzaW9uIENvbnRyb2wKLSMgICRSZXZpc2lvbjogMS4xNSAkCisjICAkUmV2aXNpb246IDEuMjIgJAogIwotU0hFTEwJCT0gL2Jpbi9zaAorU0hFTEwJCT0gQFNIRUxMQAorVlBBVEgJCT0gQHNyY2RpckAKIFRISVMJCT0gTWFrZWZpbGUKIAogU1VCRElSUyAgICAgICAgID0gQEFEQV9TVUJESVJTQApAQCAtNjEsNyArNjMsMTkgQEAKIAlmb3IgZCBpbiAkKFNVQkRJUlMpOyBkbyBcCiAJCShjZCAkJGQgOyAkKE1BS0UpICQoQ0ZfTUZMQUdTKSAkQCkgO1wKIAlkb25lCi0Jcm0gLWYgTWFrZWZpbGUKKwlybSAtcmYgbGliCisJZm9yIGxpYl9raW5kIGluIHN0YXRpYyBkeW5hbWljOyBkbyBcCisJCXJtIC1yZiAkJHtsaWJfa2luZH0tYWxpOyBcCisJCXJtIC1yZiAkJHtsaWJfa2luZH0tb2JqOyBcCisJZG9uZQorCS1ybSAtZiBjb25maWcuY2FjaGUgY29uZmlnLmxvZyBjb25maWcuc3RhdHVzIGluY2x1ZGUvbmN1cnNlc19jZmcuaAorCS1ybSAtZiBNYWtlZmlsZQorCit0YWdzIDoKKwlACisKK3ByZWluc3RhbGwgOgorCUAKIAogaW5zdGFsbC5kYXRhIDoKIAlACmRpZmYgLS1naXQgYS9BZGE5NS9hY2xvY2FsLm00IGIvQWRhOTUvYWNsb2NhbC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODNmNmFjCi0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvYWNsb2NhbC5tNApAQCAtMCwwICsxLDM5NjYgQEAKK2RubCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZG5sIENvcHlyaWdodCAoYykgMjAxMC0yMDE0LDIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCitkbmwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKK2RubCBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorZG5sIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCitkbmwgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKK2RubCB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorZG5sIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCitkbmwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKK2RubCBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorZG5sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCitkbmwgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKK2RubCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorZG5sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCitkbmwgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKK2RubCBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorZG5sIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCitkbmwgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKK2RubCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorZG5sIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCitkbmwgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKK2RubCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorZG5sIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCitkbmwgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKK2RubCBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorZG5sIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCitkbmwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2RubAorZG5sIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleQorZG5sCitkbmwgJElkOiBhY2xvY2FsLm00LHYgMS4xMDUgMjAxNS8wOC8wOCAxNDoyNTo0MCB0b20gRXhwICQKK2RubCBNYWNyb3MgdXNlZCBpbiBOQ1VSU0VTIEFkYTk1IGF1dG8tY29uZmlndXJhdGlvbiBzY3JpcHQuCitkbmwKK2RubCBUaGVzZSBtYWNyb3MgYXJlIG1haW50YWluZWQgc2VwYXJhdGVseSBmcm9tIE5DVVJTRVMuICBUaGUgY29weXJpZ2h0IG9uCitkbmwgdGhpcyBmaWxlIGFwcGxpZXMgdG8gdGhlIGFnZ3JlZ2F0aW9uIG9mIG1hY3JvcyBhbmQgZG9lcyBub3QgYWZmZWN0IHVzZSBvZgorZG5sIHRoZXNlIG1hY3JvcyBpbiBvdGhlciBhcHBsaWNhdGlvbnMuCitkbmwKK2RubCBTZWUgaHR0cDovL2ludmlzaWJsZS1pc2xhbmQubmV0L2F1dG9jb25mLyBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KK2RubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0FDVkVSU0lPTl9DSEVDSyB2ZXJzaW9uOiA1IHVwZGF0ZWQ6IDIwMTQvMDYvMDQgMTk6MTE6NDkKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDb25kaXRpb25hbGx5IGdlbmVyYXRlIHNjcmlwdCBhY2NvcmRpbmcgdG8gd2hldGhlciB3ZSdyZSB1c2luZyBhIGdpdmVuIGF1dG9jb25mLgorZG5sCitkbmwgJDEgPSB2ZXJzaW9uIHRvIGNvbXBhcmUgYWdhaW5zdAorZG5sICQyID0gY29kZSB0byB1c2UgaWYgQUNfQUNWRVJTSU9OIGlzIGF0IGxlYXN0IGFzIGhpZ2ggYXMgJDEuCitkbmwgJDMgPSBjb2RlIHRvIHVzZSBpZiBBQ19BQ1ZFUlNJT04gaXMgb2xkZXIgdGhhbiAkMS4KK2RlZmluZShbQ0ZfQUNWRVJTSU9OX0NIRUNLXSwKK1sKK2lmZGVmKFtBQ19BQ1ZFUlNJT05dLCAsW2lmZGVmKFtBQ19BVVRPQ09ORl9WRVJTSU9OXSxbbTRfY29weShbQUNfQVVUT0NPTkZfVkVSU0lPTl0sW0FDX0FDVkVSU0lPTl0pXSxbbTRfY29weShbbTRfUEFDS0FHRV9WRVJTSU9OXSxbQUNfQUNWRVJTSU9OXSldKV0pZG5sCitpZmRlZihbbTRfdmVyc2lvbl9jb21wYXJlXSwKK1ttNF9pZihtNF92ZXJzaW9uX2NvbXBhcmUobTRfZGVmbihbQUNfQUNWRVJTSU9OXSksIFskMV0pLCAtMSwgWyQzXSwgWyQyXSldLAorW0NGX0FDVkVSU0lPTl9DT01QQVJFKAorQUNfUFJFUkVRX0NBTk9OKEFDX1BSRVJFUV9TUExJVChbJDFdKSksCitBQ19QUkVSRVFfQ0FOT04oQUNfUFJFUkVRX1NQTElUKEFDX0FDVkVSU0lPTikpLCBBQ19BQ1ZFUlNJT04sIFskMl0sIFskM10pXSldKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0FDVkVSU0lPTl9DT01QQVJFIHZlcnNpb246IDMgdXBkYXRlZDogMjAxMi8xMC8wMyAxODozOTo1MworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfQUNWRVJTSU9OX0NPTVBBUkUoTUFKT1IxLCBNSU5PUjEsIFRFUk5BUlkxLAorZG5sICAgICAgICAgICAgICAgICAgICAgIE1BSk9SMiwgTUlOT1IyLCBURVJOQVJZMiwKK2RubCAgICAgICAgICAgICAgICAgICAgICBQUklOVEFCTEUyLCBub3QgRk9VTkQsIEZPVU5EKQorZGVmaW5lKFtDRl9BQ1ZFUlNJT05fQ09NUEFSRV0sCitbaWZlbHNlKGJ1aWx0aW4oW2V2YWxdLCBbJDIgPCAkNV0pLCAxLAorW2lmZWxzZShbJDhdLCAsICxbJDhdKV0sCitbaWZlbHNlKFskOV0sICwgLFskOV0pXSldKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0FEQV9JTkNMVURFX0RJUlMgdmVyc2lvbjogOCB1cGRhdGVkOiAyMDEzLzEwLzE0IDA0OjI0OjA3CitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENvbnN0cnVjdCB0aGUgbGlzdCBvZiBpbmNsdWRlLW9wdGlvbnMgZm9yIHRoZSBDIHByb2dyYW1zIGluIHRoZSBBZGE5NQorZG5sIGJpbmRpbmcuCitBQ19ERUZVTihbQ0ZfQURBX0lOQ0xVREVfRElSU10sCitbCitBQ1BQRkxBR1M9Ii1JLiAtSS4uL2luY2x1ZGUgLUkuLi8uLi9pbmNsdWRlICRBQ1BQRkxBR1MiCitpZiB0ZXN0ICIkc3JjZGlyIiAhPSAiLiI7IHRoZW4KKwlBQ1BQRkxBR1M9Ii1JXCR7c3JjZGlyfS8uLi8uLi9pbmNsdWRlICRBQ1BQRkxBR1MiCitmaQoraWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisJQUNQUEZMQUdTPSIkQUNQUEZMQUdTIC1JXCR7aW5jbHVkZWRpcn0iCitlbGlmIHRlc3QgIiRpbmNsdWRlZGlyIiAhPSAiL3Vzci9pbmNsdWRlIjsgdGhlbgorCWlmIHRlc3QgIiRpbmNsdWRlZGlyIiA9ICcke3ByZWZpeH0vaW5jbHVkZScgOyB0aGVuCisJCWlmIHRlc3QgeCRwcmVmaXggIT0geC91c3IgOyB0aGVuCisJCQlBQ1BQRkxBR1M9IiRBQ1BQRkxBR1MgLUlcJHtpbmNsdWRlZGlyfSIKKwkJZmkKKwllbHNlCisJCUFDUFBGTEFHUz0iJEFDUFBGTEFHUyAtSVwke2luY2x1ZGVkaXJ9IgorCWZpCitmaQorQUNfU1VCU1QoQUNQUEZMQUdTKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9BRERfQURBRkxBR1MgdmVyc2lvbjogMSB1cGRhdGVkOiAyMDEwLzA2LzE5IDE1OjIyOjE4CitkbmwgLS0tLS0tLS0tLS0tLS0tCitkbmwgQWRkIHRvICRBREFGTEFHUywgd2hpY2ggaXMgc3Vic3RpdHV0ZWQgaW50byBtYWtlZmlsZSBhbmQgc2NyaXB0cy4KK0FDX0RFRlVOKFtDRl9BRERfQURBRkxBR1NdLFsKKyAJQURBRkxBR1M9IiRBREFGTEFHUyAkMSIKKwlBQ19TVUJTVChBREFGTEFHUykKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfQUREX0NGTEFHUyB2ZXJzaW9uOiAxMiB1cGRhdGVkOiAyMDE1LzA0LzEyIDE1OjM5OjAwCitkbmwgLS0tLS0tLS0tLS0tLQorZG5sIENvcHkgbm9uLXByZXByb2Nlc3NvciBmbGFncyB0byAkQ0ZMQUdTLCBwcmVwcm9jZXNzb3IgZmxhZ3MgdG8gJENQUEZMQUdTCitkbmwgVGhlIHNlY29uZCBwYXJhbWV0ZXIgaWYgZ2l2ZW4gbWFrZXMgdGhpcyBtYWNybyB2ZXJib3NlLgorZG5sCitkbmwgUHV0IGFueSBwcmVwcm9jZXNzb3IgZGVmaW5pdGlvbnMgdGhhdCB1c2UgcXVvdGVkIHN0cmluZ3MgaW4gJEVYVFJBX0NQUEZMQUdTLAorZG5sIHRvIHNpbXBsaWZ5IHVzZSBvZiAkQ1BQRkxBR1MgaW4gY29tcGlsZXIgY2hlY2tzLCBldGMuLCB0aGF0IGFyZSBlYXNpbHkKK2RubCBjb25mdXNlZCBieSB0aGUgcXVvdGVzICh3aGljaCByZXF1aXJlIGJhY2tzbGFzaGVzIHRvIGtlZXAgdGhlbSB1c2FibGUpLgorQUNfREVGVU4oW0NGX0FERF9DRkxBR1NdLAorWworY2ZfZml4X2NwcGZsYWdzPW5vCitjZl9uZXdfY2ZsYWdzPQorY2ZfbmV3X2NwcGZsYWdzPQorY2ZfbmV3X2V4dHJhX2NwcGZsYWdzPQorCitmb3IgY2ZfYWRkX2NmbGFncyBpbiAkMQorZG8KK2Nhc2UgJGNmX2ZpeF9jcHBmbGFncyBpbgorKG5vKQorCWNhc2UgJGNmX2FkZF9jZmxhZ3MgaW4KKwkoLXVuZGVmfC1ub3N0ZGluYyp8LUkqfC1EKnwtVSp8LUV8LVB8LUMpCisJCWNhc2UgJGNmX2FkZF9jZmxhZ3MgaW4KKwkJKC1EKikKKwkJCWNmX3RzdF9jZmxhZ3M9YGVjaG8gJHtjZl9hZGRfY2ZsYWdzfSB8c2VkIC1lICdzL14tRFtbXj1dXSo9J1wnJ1wiW1teIl1dKi8vJ2AKKworCQkJdGVzdCAieCR7Y2ZfYWRkX2NmbGFnc30iICE9ICJ4JHtjZl90c3RfY2ZsYWdzfSIgXAorCQkJCSYmIHRlc3QgLXogIiR7Y2ZfdHN0X2NmbGFnc30iIFwKKwkJCQkmJiBjZl9maXhfY3BwZmxhZ3M9eWVzCisKKwkJCWlmIHRlc3QgJGNmX2ZpeF9jcHBmbGFncyA9IHllcyA7IHRoZW4KKwkJCQljZl9uZXdfZXh0cmFfY3BwZmxhZ3M9IiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MgJGNmX2FkZF9jZmxhZ3MiCisJCQkJY29udGludWUKKwkJCWVsaWYgdGVzdCAiJHtjZl90c3RfY2ZsYWdzfSIgPSAiXCInIiA7IHRoZW4KKwkJCQljZl9uZXdfZXh0cmFfY3BwZmxhZ3M9IiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MgJGNmX2FkZF9jZmxhZ3MiCisJCQkJY29udGludWUKKwkJCWZpCisJCQk7OworCQllc2FjCisJCWNhc2UgIiRDUFBGTEFHUyIgaW4KKwkJKCokY2ZfYWRkX2NmbGFncykKKwkJCTs7CisJCSgqKQorCQkJY2FzZSAkY2ZfYWRkX2NmbGFncyBpbgorCQkJKC1EKikKKwkJCQljZl90c3RfY3BwZmxhZ3M9YGVjaG8gIngkY2ZfYWRkX2NmbGFncyIgfCBzZWQgLWUgJ3MvXi4uLi8vJyAtZSAncy89LiovLydgCisJCQkJQ0ZfUkVNT1ZFX0RFRklORShDUFBGTEFHUywkQ1BQRkxBR1MsJGNmX3RzdF9jcHBmbGFncykKKwkJCQk7OworCQkJZXNhYworCQkJY2ZfbmV3X2NwcGZsYWdzPSIkY2ZfbmV3X2NwcGZsYWdzICRjZl9hZGRfY2ZsYWdzIgorCQkJOzsKKwkJZXNhYworCQk7OworCSgqKQorCQljZl9uZXdfY2ZsYWdzPSIkY2ZfbmV3X2NmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJOzsKKwllc2FjCisJOzsKKyh5ZXMpCisJY2ZfbmV3X2V4dHJhX2NwcGZsYWdzPSIkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzICRjZl9hZGRfY2ZsYWdzIgorCisJY2ZfdHN0X2NmbGFncz1gZWNobyAke2NmX2FkZF9jZmxhZ3N9IHxzZWQgLWUgJ3MvXltbXiJdXSoiJ1wnJy8vJ2AKKworCXRlc3QgIngke2NmX2FkZF9jZmxhZ3N9IiAhPSAieCR7Y2ZfdHN0X2NmbGFnc30iIFwKKwkJJiYgdGVzdCAteiAiJHtjZl90c3RfY2ZsYWdzfSIgXAorCQkmJiBjZl9maXhfY3BwZmxhZ3M9bm8KKwk7OworZXNhYworZG9uZQorCitpZiB0ZXN0IC1uICIkY2ZfbmV3X2NmbGFncyIgOyB0aGVuCisJaWZlbHNlKFskMl0sLCxbQ0ZfVkVSQk9TRShhZGQgdG8gXCRDRkxBR1MgJGNmX25ld19jZmxhZ3MpXSkKKwlDRkxBR1M9IiRDRkxBR1MgJGNmX25ld19jZmxhZ3MiCitmaQorCitpZiB0ZXN0IC1uICIkY2ZfbmV3X2NwcGZsYWdzIiA7IHRoZW4KKwlpZmVsc2UoWyQyXSwsLFtDRl9WRVJCT1NFKGFkZCB0byBcJENQUEZMQUdTICRjZl9uZXdfY3BwZmxhZ3MpXSkKKwlDUFBGTEFHUz0iJENQUEZMQUdTICRjZl9uZXdfY3BwZmxhZ3MiCitmaQorCitpZiB0ZXN0IC1uICIkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzIiA7IHRoZW4KKwlpZmVsc2UoWyQyXSwsLFtDRl9WRVJCT1NFKGFkZCB0byBcJEVYVFJBX0NQUEZMQUdTICRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MpXSkKKwlFWFRSQV9DUFBGTEFHUz0iJGNmX25ld19leHRyYV9jcHBmbGFncyAkRVhUUkFfQ1BQRkxBR1MiCitmaQorCitBQ19TVUJTVChFWFRSQV9DUFBGTEFHUykKKworXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9BRERfSU5DRElSIHZlcnNpb246IDE0IHVwZGF0ZWQ6IDIwMTUvMDUvMjUgMjA6NTM6MDQKK2RubCAtLS0tLS0tLS0tLS0tCitkbmwgQWRkIGFuIGluY2x1ZGUtZGlyZWN0b3J5IHRvICRDUFBGTEFHUy4gIERvbid0IGFkZCAvdXNyL2luY2x1ZGUsIHNpbmNlIGl0J3MKK2RubCByZWR1bmRhbnQuICBXZSBkb24ndCBub3JtYWxseSBuZWVkIHRvIGFkZCAtSS91c3IvbG9jYWwvaW5jbHVkZSBmb3IgZ2NjLAorZG5sIGJ1dCBvbGQgdmVyc2lvbnMgKGFuZCBzb21lIG1pc2luc3RhbGxlZCBvbmVzKSBuZWVkIHRoYXQuICBUbyBtYWtlIHRoaW5ncworZG5sIHdvcnNlLCBnY2MgMy54IG1heSBnaXZlIGVycm9yIG1lc3NhZ2VzIGlmIC1JL3Vzci9sb2NhbC9pbmNsdWRlIGlzIGFkZGVkIHRvCitkbmwgdGhlIGluY2x1ZGUtcGF0aCkuCitBQ19ERUZVTihbQ0ZfQUREX0lOQ0RJUl0sCitbCitpZiB0ZXN0IC1uICIkMSIgOyB0aGVuCisgIGZvciBjZl9hZGRfaW5jZGlyIGluICQxCisgIGRvCisJd2hpbGUgdGVzdCAkY2ZfYWRkX2luY2RpciAhPSAvdXNyL2luY2x1ZGUKKwlkbworCSAgaWYgdGVzdCAtZCAkY2ZfYWRkX2luY2RpcgorCSAgdGhlbgorCQljZl9oYXZlX2luY2Rpcj1ubworCQlpZiB0ZXN0IC1uICIkQ0ZMQUdTJENQUEZMQUdTIiA7IHRoZW4KKwkJICAjIGEgbG9vcCBpcyBuZWVkZWQgdG8gZW5zdXJlIHdlIGNhbiBhZGQgc3ViZGlycyBvZiBleGlzdGluZyBkaXJzCisJCSAgZm9yIGNmX3Rlc3RfaW5jZGlyIGluICRDRkxBR1MgJENQUEZMQUdTIDsgZG8KKwkJCWlmIHRlc3QgIi4kY2ZfdGVzdF9pbmNkaXIiID0gIi4tSSRjZl9hZGRfaW5jZGlyIiA7IHRoZW4KKwkJCSAgY2ZfaGF2ZV9pbmNkaXI9eWVzOyBicmVhaworCQkJZmkKKwkJICBkb25lCisJCWZpCisKKwkJaWYgdGVzdCAiJGNmX2hhdmVfaW5jZGlyIiA9IG5vIDsgdGhlbgorCQkgIGlmIHRlc3QgIiRjZl9hZGRfaW5jZGlyIiA9IC91c3IvbG9jYWwvaW5jbHVkZSA7IHRoZW4KKwkJCWlmIHRlc3QgIiRHQ0MiID0geWVzCisJCQl0aGVuCisJCQkgIGNmX3NhdmVfQ1BQRkxBR1M9JENQUEZMQUdTCisJCQkgIENQUEZMQUdTPSIkQ1BQRkxBR1MgLUkkY2ZfYWRkX2luY2RpciIKKwkJCSAgQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxzdGRpby5oPl0sCisJCQkJICBbcHJpbnRmKCJIZWxsbyIpXSwKKwkJCQkgIFtdLAorCQkJCSAgW2NmX2hhdmVfaW5jZGlyPXllc10pCisJCQkgIENQUEZMQUdTPSRjZl9zYXZlX0NQUEZMQUdTCisJCQlmaQorCQkgIGZpCisJCWZpCisKKwkJaWYgdGVzdCAiJGNmX2hhdmVfaW5jZGlyIiA9IG5vIDsgdGhlbgorCQkgIENGX1ZFUkJPU0UoYWRkaW5nICRjZl9hZGRfaW5jZGlyIHRvIGluY2x1ZGUtcGF0aCkKKwkJICBpZmVsc2UoWyQyXSwsQ1BQRkxBR1MsWyQyXSk9IiRpZmVsc2UoWyQyXSwsQ1BQRkxBR1MsWyQyXSkgLUkkY2ZfYWRkX2luY2RpciIKKworCQkgIGNmX3RvcF9pbmNkaXI9YGVjaG8gJGNmX2FkZF9pbmNkaXIgfCBzZWQgLWUgJ3MlL2luY2x1ZGUvLiokJS9pbmNsdWRlJSdgCisJCSAgdGVzdCAiJGNmX3RvcF9pbmNkaXIiID0gIiRjZl9hZGRfaW5jZGlyIiAmJiBicmVhaworCQkgIGNmX2FkZF9pbmNkaXI9IiRjZl90b3BfaW5jZGlyIgorCQllbHNlCisJCSAgYnJlYWsKKwkJZmkKKwkgIGVsc2UKKwkJYnJlYWsKKwkgIGZpCisJZG9uZQorICBkb25lCitmaQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9BRERfTElCIHZlcnNpb246IDIgdXBkYXRlZDogMjAxMC8wNi8wMiAwNTowMzowNQorZG5sIC0tLS0tLS0tLS0KK2RubCBBZGQgYSBsaWJyYXJ5LCB1c2VkIHRvIGVuZm9yY2UgY29uc2lzdGVuY3kuCitkbmwKK2RubCAkMSA9IGxpYnJhcnkgdG8gYWRkLCB3aXRob3V0IHRoZSAiLWwiCitkbmwgJDIgPSB2YXJpYWJsZSB0byB1cGRhdGUgKGRlZmF1bHQgJExJQlMpCitBQ19ERUZVTihbQ0ZfQUREX0xJQl0sW0NGX0FERF9MSUJTKC1sJDEsaWZlbHNlKCQyLCxMSUJTLFskMl0pKV0pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfQUREX0xJQkRJUiB2ZXJzaW9uOiAxMCB1cGRhdGVkOiAyMDE1LzA0LzE4IDA4OjU2OjU3CitkbmwgLS0tLS0tLS0tLS0tLQorZG5sCUFkZHMgdG8gdGhlIGxpYnJhcnktcGF0aAorZG5sCitkbmwJU29tZSBtYWNoaW5lcyBoYXZlIHRyb3VibGUgd2l0aCBtdWx0aXBsZSAtTCBvcHRpb25zLgorZG5sCitkbmwgJDEgaXMgdGhlIChsaXN0IG9mKSBkaXJlY3RvcnkocykgdG8gYWRkCitkbmwgJDIgaXMgdGhlIG9wdGlvbmFsIG5hbWUgb2YgdGhlIHZhcmlhYmxlIHRvIHVwZGF0ZSAoZGVmYXVsdCBMREZMQUdTKQorZG5sCitBQ19ERUZVTihbQ0ZfQUREX0xJQkRJUl0sCitbCitpZiB0ZXN0IC1uICIkMSIgOyB0aGVuCisJZm9yIGNmX2FkZF9saWJkaXIgaW4gJDEKKwlkbworCQlpZiB0ZXN0ICRjZl9hZGRfbGliZGlyID0gL3Vzci9saWIgOyB0aGVuCisJCQk6CisJCWVsaWYgdGVzdCAtZCAkY2ZfYWRkX2xpYmRpcgorCQl0aGVuCisJCQljZl9oYXZlX2xpYmRpcj1ubworCQkJaWYgdGVzdCAtbiAiJExERkxBR1MkTElCUyIgOyB0aGVuCisJCQkJIyBhIGxvb3AgaXMgbmVlZGVkIHRvIGVuc3VyZSB3ZSBjYW4gYWRkIHN1YmRpcnMgb2YgZXhpc3RpbmcgZGlycworCQkJCWZvciBjZl90ZXN0X2xpYmRpciBpbiAkTERGTEFHUyAkTElCUyA7IGRvCisJCQkJCWlmIHRlc3QgIi4kY2ZfdGVzdF9saWJkaXIiID0gIi4tTCRjZl9hZGRfbGliZGlyIiA7IHRoZW4KKwkJCQkJCWNmX2hhdmVfbGliZGlyPXllczsgYnJlYWsKKwkJCQkJZmkKKwkJCQlkb25lCisJCQlmaQorCQkJaWYgdGVzdCAiJGNmX2hhdmVfbGliZGlyIiA9IG5vIDsgdGhlbgorCQkJCUNGX1ZFUkJPU0UoYWRkaW5nICRjZl9hZGRfbGliZGlyIHRvIGxpYnJhcnktcGF0aCkKKwkJCQlpZmVsc2UoWyQyXSwsTERGTEFHUyxbJDJdKT0iLUwkY2ZfYWRkX2xpYmRpciAkaWZlbHNlKFskMl0sLExERkxBR1MsWyQyXSkiCisJCQlmaQorCQlmaQorCWRvbmUKK2ZpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0FERF9MSUJTIHZlcnNpb246IDIgdXBkYXRlZDogMjAxNC8wNy8xMyAxNDozMzoyNworZG5sIC0tLS0tLS0tLS0tCitkbmwgQWRkIG9uZSBvciBtb3JlIGxpYnJhcmllcywgdXNlZCB0byBlbmZvcmNlIGNvbnNpc3RlbmN5LiAgTGlicmFyaWVzIGFyZQorZG5sIHByZXBlbmRlZCB0byBhbiBleGlzdGluZyBsaXN0LCBzaW5jZSB0aGVpciBkZXBlbmRlbmNpZXMgYXJlIGFzc3VtZWQgdG8KK2RubCBhbHJlYWR5IGV4aXN0IGluIHRoZSBsaXN0LgorZG5sCitkbmwgJDEgPSBsaWJyYXJpZXMgdG8gYWRkLCB3aXRoIHRoZSAiLWwiLCBldGMuCitkbmwgJDIgPSB2YXJpYWJsZSB0byB1cGRhdGUgKGRlZmF1bHQgJExJQlMpCitBQ19ERUZVTihbQ0ZfQUREX0xJQlNdLFsKK2NmX2FkZF9saWJzPSIkMSIKKyMgRmlsdGVyIG91dCBkdXBsaWNhdGVzIC0gdGhpcyBoYXBwZW5zIHdpdGggYmFkbHktZGVzaWduZWQgIi5wYyIgZmlsZXMuLi4KK2ZvciBjZl9hZGRfMWxpYiBpbiBbJF1pZmVsc2UoJDIsLExJQlMsWyQyXSkKK2RvCisJZm9yIGNmX2FkZF8ybGliIGluICRjZl9hZGRfbGlicworCWRvCisJCWlmIHRlc3QgIngkY2ZfYWRkXzFsaWIiID0gIngkY2ZfYWRkXzJsaWIiCisJCXRoZW4KKwkJCWNmX2FkZF8xbGliPQorCQkJYnJlYWsKKwkJZmkKKwlkb25lCisJdGVzdCAtbiAiJGNmX2FkZF8xbGliIiAmJiBjZl9hZGRfbGlicz0iJGNmX2FkZF9saWJzICRjZl9hZGRfMWxpYiIKK2RvbmUKK2lmZWxzZSgkMiwsTElCUyxbJDJdKT0iJGNmX2FkZF9saWJzIgorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9BRERfU1VCRElSX1BBVEggdmVyc2lvbjogNCB1cGRhdGVkOiAyMDEzLzEwLzA4IDE3OjQ3OjA1CitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQXBwZW5kIHRvIGEgc2VhcmNoLWxpc3QgZm9yIGEgbm9uc3RhbmRhcmQgaGVhZGVyL2xpYi1maWxlCitkbmwJJDEgPSB0aGUgdmFyaWFibGUgdG8gcmV0dXJuIGFzIHJlc3VsdAorZG5sCSQyID0gdGhlIHBhY2thZ2UgbmFtZQorZG5sCSQzID0gdGhlIHN1YmRpcmVjdG9yeSwgZS5nLiwgYmluLCBpbmNsdWRlIG9yIGxpYgorZG5sICQ0ID0gdGhlIGRpcmVjdG9yeSB1bmRlciB3aGljaCB3ZSB3aWxsIHRlc3QgZm9yIHN1YmRpcmVjdG9yaWVzCitkbmwgJDUgPSBhIGRpcmVjdG9yeSB0aGF0IHdlIGRvIG5vdCB3YW50ICQ0IHRvIG1hdGNoCitBQ19ERUZVTihbQ0ZfQUREX1NVQkRJUl9QQVRIXSwKK1sKK3Rlc3QgIngkNCIgIT0gIngkNSIgJiYgXAordGVzdCAtZCAiJDQiICYmIFwKK2lmZWxzZShbJDVdLE5PTkUsLFsodGVzdCAteiAiJDUiIHx8IHRlc3QgeCQ1ID0geE5PTkUgfHwgdGVzdCAieCQ0IiAhPSAieCQ1IikgJiZdKSB7CisJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIgkuLi4gdGVzdGluZyBmb3IgJDMtZGlyZWN0b3JpZXMgdW5kZXIgJDQiCisJdGVzdCAtZCAkNC8kMyAmJiAgICAgICAgICAkMT0iWyRdJDEgJDQvJDMiCisJdGVzdCAtZCAkNC8kMy8kMiAmJiAgICAgICAkMT0iWyRdJDEgJDQvJDMvJDIiCisJdGVzdCAtZCAkNC8kMy8kMi8kMyAmJiAgICAkMT0iWyRdJDEgJDQvJDMvJDIvJDMiCisJdGVzdCAtZCAkNC8kMi8kMyAmJiAgICAgICAkMT0iWyRdJDEgJDQvJDIvJDMiCisJdGVzdCAtZCAkNC8kMi8kMy8kMiAmJiAgICAkMT0iWyRdJDEgJDQvJDIvJDMvJDIiCit9CitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0FSR19ESVNBQkxFIHZlcnNpb246IDMgdXBkYXRlZDogMTk5OS8wMy8zMCAxNzoyNDozMQorZG5sIC0tLS0tLS0tLS0tLS0tCitkbmwgQWxsb3cgdXNlciB0byBkaXNhYmxlIGEgbm9ybWFsbHktb24gb3B0aW9uLgorQUNfREVGVU4oW0NGX0FSR19ESVNBQkxFXSwKK1tDRl9BUkdfT1BUSU9OKCQxLFskMl0sWyQzXSxbJDRdLHllcyldKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0FSR19PUFRJT04gdmVyc2lvbjogNSB1cGRhdGVkOiAyMDE1LzA1LzEwIDE5OjUyOjE0CitkbmwgLS0tLS0tLS0tLS0tLQorZG5sIFJlc3RyaWN0ZWQgZm9ybSBvZiBBQ19BUkdfRU5BQkxFIHRoYXQgZW5zdXJlcyB1c2VyIGRvZXNuJ3QgZ2l2ZSBib2d1cworZG5sIHZhbHVlcy4KK2RubAorZG5sIFBhcmFtZXRlcnM6CitkbmwgJDEgPSBvcHRpb24gbmFtZQorZG5sICQyID0gaGVscC1zdHJpbmcKK2RubCAkMyA9IGFjdGlvbiB0byBwZXJmb3JtIGlmIG9wdGlvbiBpcyBub3QgZGVmYXVsdAorZG5sICQ0ID0gYWN0aW9uIGlmIHBlcmZvcm0gaWYgb3B0aW9uIGlzIGRlZmF1bHQKK2RubCAkNSA9IGRlZmF1bHQgb3B0aW9uIHZhbHVlIChlaXRoZXIgJ3llcycgb3IgJ25vJykKK0FDX0RFRlVOKFtDRl9BUkdfT1BUSU9OXSwKK1tBQ19BUkdfRU5BQkxFKFskMV0sWyQyXSxbdGVzdCAiJGVuYWJsZXZhbCIgIT0gaWZlbHNlKFskNV0sbm8seWVzLG5vKSAmJiBlbmFibGV2YWw9aWZlbHNlKFskNV0sbm8sbm8seWVzKQorCWlmIHRlc3QgIiRlbmFibGV2YWwiICE9ICIkNSIgOyB0aGVuCitpZmVsc2UoWyQzXSwsWyAgICA6XWRubAorLFsgICAgJDNdKSBpZmVsc2UoWyQ0XSwsLFsKKwllbHNlCisJCSQ0XSkKKwlmaV0sW2VuYWJsZXZhbD0kNSBpZmVsc2UoWyQ0XSwsLFsKKwkkNAorXSlkbmwKK10pXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9BUl9GTEFHUyB2ZXJzaW9uOiA1IHVwZGF0ZWQ6IDIwMTAvMDUvMjAgMjA6MjQ6MjkKK2RubCAtLS0tLS0tLS0tLQorZG5sIENoZWNrIGZvciBzdWl0YWJsZSAiYXIiIChhcmNoaXZlcikgb3B0aW9ucyBmb3IgdXBkYXRpbmcgYW4gYXJjaGl2ZS4KK0FDX0RFRlVOKFtDRl9BUl9GTEFHU10sWworQUNfUkVRVUlSRShbQ0ZfUFJPR19BUl0pCisKK0FDX0NBQ0hFX0NIRUNLKGZvciBvcHRpb25zIHRvIHVwZGF0ZSBhcmNoaXZlcywgY2ZfY3ZfYXJfZmxhZ3MsWworCWNmX2N2X2FyX2ZsYWdzPXVua25vd24KKwlmb3IgY2ZfYXJfZmxhZ3MgaW4gLWN1cnYgY3VydiAtY3J2IGNydiAtY3F2IGNxdiAtcnYgcnYKKwlkbworCisJCSMgY2hlY2sgaWYgJEFSRkxBR1MgYWxyZWFkeSBjb250YWlucyB0aGlzIGNob2ljZQorCQlpZiB0ZXN0ICJ4JEFSRkxBR1MiICE9ICJ4IiA7IHRoZW4KKwkJCWNmX2NoZWNrX2FyX2ZsYWdzPWBlY2hvICJ4JEFSRkxBR1MiIHwgc2VkIC1lICJzLyRjZl9hcl9mbGFnc1wkLy8iIC1lICJzLyRjZl9hcl9mbGFncyAvIC8iYAorCQkJaWYgdGVzdCAieCRBUkZMQUdTIiAhPSAiJGNmX2NoZWNrX2FyX2ZsYWdzIiA7IHRoZW4KKwkJCQljZl9jdl9hcl9mbGFncz0KKwkJCQlicmVhaworCQkJZmkKKwkJZmkKKworCQlybSAtZiBjb25mdGVzdC4kYWNfY3Zfb2JqZXh0CisJCXJtIC1mIGNvbmZ0ZXN0LmEKKworCQljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIF9fb2xpbmVfXyAiY29uZmlndXJlIgoraW50CXRlc3RkYXRhW1szXV0gPSB7IDEyMywgNDU2LCA3ODkgfTsKK0VPRgorCQlpZiBBQ19UUllfRVZBTChhY19jb21waWxlKSA7IHRoZW4KKwkJCWVjaG8gIiRBUiAkQVJGTEFHUyAkY2ZfYXJfZmxhZ3MgY29uZnRlc3QuYSBjb25mdGVzdC4kYWNfY3Zfb2JqZXh0IiA+JkFDX0ZEX0NDCisJCQkkQVIgJEFSRkxBR1MgJGNmX2FyX2ZsYWdzIGNvbmZ0ZXN0LmEgY29uZnRlc3QuJGFjX2N2X29iamV4dCAyPiZBQ19GRF9DQyAxPi9kZXYvbnVsbAorCQkJaWYgdGVzdCAtZiBjb25mdGVzdC5hIDsgdGhlbgorCQkJCWNmX2N2X2FyX2ZsYWdzPSRjZl9hcl9mbGFncworCQkJCWJyZWFrCisJCQlmaQorCQllbHNlCisJCQlDRl9WRVJCT1NFKGNhbm5vdCBjb21waWxlIHRlc3QtcHJvZ3JhbSkKKwkJCWJyZWFrCisJCWZpCisJZG9uZQorCXJtIC1mIGNvbmZ0ZXN0LmEgY29uZnRlc3QuJGFjX2V4dCBjb25mdGVzdC4kYWNfY3Zfb2JqZXh0CitdKQorCitpZiB0ZXN0IC1uICIkQVJGTEFHUyIgOyB0aGVuCisJaWYgdGVzdCAtbiAiJGNmX2N2X2FyX2ZsYWdzIiA7IHRoZW4KKwkJQVJGTEFHUz0iJEFSRkxBR1MgJGNmX2N2X2FyX2ZsYWdzIgorCWZpCitlbHNlCisJQVJGTEFHUz0kY2ZfY3ZfYXJfZmxhZ3MKK2ZpCisKK0FDX1NVQlNUKEFSRkxBR1MpCitdKQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0JVSUxEX0NDIHZlcnNpb246IDcgdXBkYXRlZDogMjAxMi8xMC8wNiAxNTozMTo1NQorZG5sIC0tLS0tLS0tLS0tCitkbmwgSWYgd2UncmUgY3Jvc3MtY29tcGlsaW5nLCBhbGxvdyB0aGUgdXNlciB0byBvdmVycmlkZSB0aGUgdG9vbHMgYW5kIHRoZWlyCitkbmwgb3B0aW9ucy4gIFRoZSBjb25maWd1cmUgc2NyaXB0IGlzIG9yaWVudGVkIHRvd2FyZCBpZGVudGlmeWluZyB0aGUgaG9zdAorZG5sIGNvbXBpbGVyLCBldGMuLCBidXQgd2UgbmVlZCBhIGJ1aWxkIGNvbXBpbGVyIHRvIGdlbmVyYXRlIHBhcnRzIG9mIHRoZQorZG5sIHNvdXJjZS4KK2RubAorZG5sICQxID0gZGVmYXVsdCBmb3IgJENQUEZMQUdTCitkbmwgJDIgPSBkZWZhdWx0IGZvciAkTElCUworQUNfREVGVU4oW0NGX0JVSUxEX0NDXSxbCitDRl9BQ1ZFUlNJT05fQ0hFQ0soMi41MiwsCisJW0FDX1JFUVVJUkUoW0NGX1BST0dfRVhUXSldKQoraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXMgOyB0aGVuCisKKwkjIGRlZmF1bHRzIHRoYXQgd2UgbWlnaHQgd2FudCB0byBvdmVycmlkZQorCTogJHtCVUlMRF9DRkxBR1M6PScnfQorCTogJHtCVUlMRF9DUFBGTEFHUzo9J2lmZWxzZShbJDFdLCwsWyQxXSknfQorCTogJHtCVUlMRF9MREZMQUdTOj0nJ30KKwk6ICR7QlVJTERfTElCUzo9J2lmZWxzZShbJDJdLCwsWyQyXSknfQorCTogJHtCVUlMRF9FWEVFWFQ6PSckeCd9CisJOiAke0JVSUxEX09CSkVYVDo9J28nfQorCisJQUNfQVJHX1dJVEgoYnVpbGQtY2MsCisJCVsgIC0td2l0aC1idWlsZC1jYz1YWFggICAgIHRoZSBidWlsZCBDIGNvbXBpbGVyICgkQlVJTERfQ0MpXSwKKwkJW0JVSUxEX0NDPSIkd2l0aHZhbCJdLAorCQlbQUNfQ0hFQ0tfUFJPR1MoQlVJTERfQ0MsIGdjYyBjYyBjbCldKQorCUFDX01TR19DSEVDS0lORyhmb3IgbmF0aXZlIGJ1aWxkIEMgY29tcGlsZXIpCisJQUNfTVNHX1JFU1VMVCgkQlVJTERfQ0MpCisKKwlBQ19NU0dfQ0hFQ0tJTkcoZm9yIG5hdGl2ZSBidWlsZCBDIHByZXByb2Nlc3NvcikKKwlBQ19BUkdfV0lUSChidWlsZC1jcHAsCisJCVsgIC0td2l0aC1idWlsZC1jcHA9WFhYICAgIHRoZSBidWlsZCBDIHByZXByb2Nlc3NvciAoJEJVSUxEX0NQUCldLAorCQlbQlVJTERfQ1BQPSIkd2l0aHZhbCJdLAorCQlbQlVJTERfQ1BQPScke0JVSUxEX0NDfSAtRSddKQorCUFDX01TR19SRVNVTFQoJEJVSUxEX0NQUCkKKworCUFDX01TR19DSEVDS0lORyhmb3IgbmF0aXZlIGJ1aWxkIEMgZmxhZ3MpCisJQUNfQVJHX1dJVEgoYnVpbGQtY2ZsYWdzLAorCQlbICAtLXdpdGgtYnVpbGQtY2ZsYWdzPVhYWCB0aGUgYnVpbGQgQyBjb21waWxlci1mbGFncyAoJEJVSUxEX0NGTEFHUyldLAorCQlbQlVJTERfQ0ZMQUdTPSIkd2l0aHZhbCJdKQorCUFDX01TR19SRVNVTFQoJEJVSUxEX0NGTEFHUykKKworCUFDX01TR19DSEVDS0lORyhmb3IgbmF0aXZlIGJ1aWxkIEMgcHJlcHJvY2Vzc29yLWZsYWdzKQorCUFDX0FSR19XSVRIKGJ1aWxkLWNwcGZsYWdzLAorCQlbICAtLXdpdGgtYnVpbGQtY3BwZmxhZ3M9WFhYIHRoZSBidWlsZCBDIHByZXByb2Nlc3Nvci1mbGFncyAoJEJVSUxEX0NQUEZMQUdTKV0sCisJCVtCVUlMRF9DUFBGTEFHUz0iJHdpdGh2YWwiXSkKKwlBQ19NU0dfUkVTVUxUKCRCVUlMRF9DUFBGTEFHUykKKworCUFDX01TR19DSEVDS0lORyhmb3IgbmF0aXZlIGJ1aWxkIGxpbmtlci1mbGFncykKKwlBQ19BUkdfV0lUSChidWlsZC1sZGZsYWdzLAorCQlbICAtLXdpdGgtYnVpbGQtbGRmbGFncz1YWFggdGhlIGJ1aWxkIGxpbmtlci1mbGFncyAoJEJVSUxEX0xERkxBR1MpXSwKKwkJW0JVSUxEX0xERkxBR1M9IiR3aXRodmFsIl0pCisJQUNfTVNHX1JFU1VMVCgkQlVJTERfTERGTEFHUykKKworCUFDX01TR19DSEVDS0lORyhmb3IgbmF0aXZlIGJ1aWxkIGxpbmtlci1saWJyYXJpZXMpCisJQUNfQVJHX1dJVEgoYnVpbGQtbGlicywKKwkJWyAgLS13aXRoLWJ1aWxkLWxpYnM9WFhYICAgdGhlIGJ1aWxkIGxpYnJhcmllcyAoJHtCVUlMRF9MSUJTfSldLAorCQlbQlVJTERfTElCUz0iJHdpdGh2YWwiXSkKKwlBQ19NU0dfUkVTVUxUKCRCVUlMRF9MSUJTKQorCisJIyB0aGlzIGFzc3VtZXMgd2UncmUgb24gVW5peC4KKwlCVUlMRF9FWEVFWFQ9CisJQlVJTERfT0JKRVhUPW8KKworCTogJHtCVUlMRF9DQzo9JyR7Q0N9J30KKworCWlmICggdGVzdCAiJEJVSUxEX0NDIiA9ICIkQ0MiIHx8IHRlc3QgIiRCVUlMRF9DQyIgPSAnJHtDQ30nICkgOyB0aGVuCisJCUFDX01TR19FUlJPUihbQ3Jvc3MtYnVpbGQgcmVxdWlyZXMgdHdvIGNvbXBpbGVycy4KK1VzZSAtLXdpdGgtYnVpbGQtY2MgdG8gc3BlY2lmeSB0aGUgbmF0aXZlIGNvbXBpbGVyLl0pCisJZmkKKworZWxzZQorCTogJHtCVUlMRF9DQzo9JyR7Q0N9J30KKwk6ICR7QlVJTERfQ1BQOj0nJHtDUFB9J30KKwk6ICR7QlVJTERfQ0ZMQUdTOj0nJHtDRkxBR1N9J30KKwk6ICR7QlVJTERfQ1BQRkxBR1M6PScke0NQUEZMQUdTfSd9CisJOiAke0JVSUxEX0xERkxBR1M6PScke0xERkxBR1N9J30KKwk6ICR7QlVJTERfTElCUzo9JyR7TElCU30nfQorCTogJHtCVUlMRF9FWEVFWFQ6PSckeCd9CisJOiAke0JVSUxEX09CSkVYVDo9J28nfQorZmkKKworQUNfU1VCU1QoQlVJTERfQ0MpCitBQ19TVUJTVChCVUlMRF9DUFApCitBQ19TVUJTVChCVUlMRF9DRkxBR1MpCitBQ19TVUJTVChCVUlMRF9DUFBGTEFHUykKK0FDX1NVQlNUKEJVSUxEX0xERkxBR1MpCitBQ19TVUJTVChCVUlMRF9MSUJTKQorQUNfU1VCU1QoQlVJTERfRVhFRVhUKQorQUNfU1VCU1QoQlVJTERfT0JKRVhUKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9DQ19FTlZfRkxBR1MgdmVyc2lvbjogMiB1cGRhdGVkOiAyMDE1LzA0LzEyIDE1OjM5OjAwCitkbmwgLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgZm9yIHVzZXIncyBlbnZpcm9ubWVudC1icmVha2FnZSBieSBzdHVmZmluZyBDRkxBR1MvQ1BQRkxBR1MgY29udGVudAorZG5sIGludG8gQ0MuICBUaGlzIHdpbGwgbm90IGhlbHAgd2l0aCBicm9rZW4gc2NyaXB0cyB0aGF0IHdyYXAgdGhlIGNvbXBpbGVyIHdpdGgKK2RubCBvcHRpb25zLCBidXQgZWxpbWluYXRlcyBhIG1vcmUgY29tbW9uIGNhdGVnb3J5IG9mIHVzZXIgY29uZnVzaW9uLgorQUNfREVGVU4oW0NGX0NDX0VOVl9GTEFHU10sCitbCisjIFRoaXMgc2hvdWxkIGhhdmUgYmVlbiBkZWZpbmVkIGJ5IEFDX1BST0dfQ0MKKzogJHtDQzo9Y2N9CisKK0FDX01TR19DSEVDS0lORyhcJENDIHZhcmlhYmxlKQorY2FzZSAiJENDIiBpbgorKCpbW1wgXAldXS1bW0lVRF1dKikKKwlBQ19NU0dfUkVTVUxUKGJyb2tlbikKKwlBQ19NU0dfV0FSTih5b3VyIGVudmlyb25tZW50IG1pc3VzZXMgdGhlIENDIHZhcmlhYmxlIHRvIGhvbGQgQ0ZMQUdTL0NQUEZMQUdTIG9wdGlvbnMpCisJIyBodW1vciBoaW0uLi4KKwljZl9mbGFncz1gZWNobyAiJENDIiB8IHNlZCAtZSAncy9eW1teIAldXSpbWyAJXV0vLydgCisJQ0M9YGVjaG8gIiRDQyIgfCBzZWQgLWUgJ3MvW1sgCV1dLiovLydgCisJQ0ZfQUREX0NGTEFHUygkY2ZfZmxhZ3MpCisJOzsKKygqKQorCUFDX01TR19SRVNVTFQob2spCisJOzsKK2VzYWMKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfQ0ZHX0RFRkFVTFRTIHZlcnNpb246IDExIHVwZGF0ZWQ6IDIwMTUvMDQvMTcgMjE6MTM6MDQKK2RubCAtLS0tLS0tLS0tLS0tLS0KK2RubCBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBpbnRvIHdoaWNoIHdlJ2xsIGluc3RhbGwgbmN1cnNlcy4gIFRoaXMKK2RubCBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgdXNlcidzIGNvbW1hbmQtbGluZSBvcHRpb25zLiAgVGhlcmUncyB0d28gaXRlbXMgdG8KK2RubCBsb29rIGZvcjoKK2RubAkxLiB0aGUgcHJlZml4IChlLmcuLCAvdXNyKQorZG5sCTIuIHRoZSBoZWFkZXIgZmlsZXMgKGUuZy4sIC91c3IvaW5jbHVkZS9uY3Vyc2VzKQorZG5sIFdlJ2xsIGxvb2sgZm9yIGEgcHJldmlvdXMgaW5zdGFsbGF0aW9uIG9mIG5jdXJzZXMgYW5kIHVzZSB0aGUgc2FtZSBkZWZhdWx0cy4KK2RubAorZG5sIFdlIGRvbid0IHVzZSBBQ19QUkVGSVhfREVGQVVMVCwgYmVjYXVzZSBpdCBnZXRzIGV2YWx1YXRlZCB0b28gc29vbiwgYW5kCitkbmwgd2UgZG9uJ3QgdXNlIEFDX1BSRUZJWF9QUk9HUkFNLCBiZWNhdXNlIHdlIGNhbm5vdCBkaXN0aW5ndWlzaCBuY3Vyc2VzJ3MKK2RubCBwcm9ncmFtcyBmcm9tIGEgdmVuZG9yJ3MuCitBQ19ERUZVTihbQ0ZfQ0ZHX0RFRkFVTFRTXSwKK1sKK0FDX01TR19DSEVDS0lORyhmb3IgcHJlZml4KQoraWYgdGVzdCAieCRwcmVmaXgiID0gInhOT05FIiA7IHRoZW4KKwljYXNlICIkY2ZfY3Zfc3lzdGVtX25hbWUiIGluCisJCSMgbm9uLXZlbmRvciBzeXN0ZW1zIGRvbid0IGhhdmUgYSBjb25mbGljdAorCShvcGVuYnNkKnxmcmVlYnNkKnxtaXJic2QqfGxpbnV4KnxjeWd3aW4qfG1zeXMqfGsqYnNkKi1nbnV8bWluZ3cqKQorCQlwcmVmaXg9L3VzcgorCQk7OworCSgqKQlwcmVmaXg9JGFjX2RlZmF1bHRfcHJlZml4CisJCTs7CisJZXNhYworZmkKK0FDX01TR19SRVNVTFQoJHByZWZpeCkKKworaWYgdGVzdCAieCRwcmVmaXgiID0gInhOT05FIiA7IHRoZW4KK0FDX01TR19DSEVDS0lORyhmb3IgZGVmYXVsdCBpbmNsdWRlLWRpcmVjdG9yeSkKK3Rlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvIDE+JkFDX0ZEX01TRworZm9yIGNmX3N5bWJvbCBpbiBcCisJJGluY2x1ZGVkaXIgXAorCSRpbmNsdWRlZGlyL25jdXJzZXMgXAorCSRwcmVmaXgvaW5jbHVkZSBcCisJJHByZWZpeC9pbmNsdWRlL25jdXJzZXMgXAorCS91c3IvbG9jYWwvaW5jbHVkZSBcCisJL3Vzci9sb2NhbC9pbmNsdWRlL25jdXJzZXMgXAorCS91c3IvaW5jbHVkZSBcCisJL3Vzci9pbmNsdWRlL25jdXJzZXMKK2RvCisJY2ZfZGlyPWBldmFsIGVjaG8gJGNmX3N5bWJvbGAKKwlpZiB0ZXN0IC1mICRjZl9kaXIvY3Vyc2VzLmggOyB0aGVuCisJaWYgKCBmZ3JlcCBOQ1VSU0VTX1ZFUlNJT04gJGNmX2Rpci9jdXJzZXMuaCAyPiYxID4vZGV2L251bGwgKSA7IHRoZW4KKwkJaW5jbHVkZWRpcj0iJGNmX3N5bWJvbCIKKwkJdGVzdCAtbiAiJHZlcmJvc2UiICAmJiBlY2hvICRhY19uICIJZm91bmQgIiAxPiZBQ19GRF9NU0cKKwkJYnJlYWsKKwlmaQorCWZpCisJdGVzdCAtbiAiJHZlcmJvc2UiICAmJiBlY2hvICIJdGVzdGVkICRjZl9kaXIiIDE+JkFDX0ZEX01TRworZG9uZQorQUNfTVNHX1JFU1VMVCgkaW5jbHVkZWRpcikKK2ZpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0NIRUNLX0NBQ0hFIHZlcnNpb246IDEyIHVwZGF0ZWQ6IDIwMTIvMTAvMDIgMjA6NTU6MDMKK2RubCAtLS0tLS0tLS0tLS0tLQorZG5sIENoZWNrIGlmIHdlJ3JlIGFjY2lkZW50YWxseSB1c2luZyBhIGNhY2hlIGZyb20gYSBkaWZmZXJlbnQgbWFjaGluZS4KK2RubCBEZXJpdmUgdGhlIHN5c3RlbSBuYW1lLCBhcyBhIGNoZWNrIGZvciByZXVzaW5nIHRoZSBhdXRvY29uZiBjYWNoZS4KK2RubAorZG5sIElmIHdlJ3ZlIHBhY2thZ2VkIGNvbmZpZy5ndWVzcyBhbmQgY29uZmlnLnN1YiwgcnVuIHRoYXQgKHNpbmNlIGl0IGRvZXMgYQorZG5sIGJldHRlciBqb2IgdGhhbiB1bmFtZSkuICBOb3JtYWxseSB3ZSdsbCB1c2UgQUNfQ0FOT05JQ0FMX0hPU1QsIGJ1dCBhbGxvdworZG5sIGFuIGV4dHJhIHBhcmFtZXRlciB0aGF0IHdlIG1heSBvdmVycmlkZSwgZS5nLiwgZm9yIEFDX0NBTk9OSUNBTF9TWVNURU0KK2RubCB3aGljaCBpcyB1c2VmdWwgaW4gY3Jvc3MtY29tcGlsZXMuCitkbmwKK2RubCBOb3RlOiB3ZSB3b3VsZCB1c2UgJGFjX2NvbmZpZ19zdWIsIGJ1dCB0aGF0IGlzIG9uZSBvZiB0aGUgcGxhY2VzIHdoZXJlCitkbmwgYXV0b2NvbmYgMi41eCBicm9rZSBjb21wYXRpYmlsaXR5IHdpdGggYXV0b2NvbmYgMi4xMworQUNfREVGVU4oW0NGX0NIRUNLX0NBQ0hFXSwKK1sKK2lmIHRlc3QgLWYgJHNyY2Rpci9jb25maWcuZ3Vlc3MgfHwgdGVzdCAtZiAkYWNfYXV4X2Rpci9jb25maWcuZ3Vlc3MgOyB0aGVuCisJaWZlbHNlKFskMV0sLFtBQ19DQU5PTklDQUxfSE9TVF0sWyQxXSkKKwlzeXN0ZW1fbmFtZT0iJGhvc3Rfb3MiCitlbHNlCisJc3lzdGVtX25hbWU9ImAodW5hbWUgLXMgLXIpIDI+L2Rldi9udWxsYCIKKwlpZiB0ZXN0IC16ICIkc3lzdGVtX25hbWUiIDsgdGhlbgorCQlzeXN0ZW1fbmFtZT0iYChob3N0bmFtZSkgMj4vZGV2L251bGxgIgorCWZpCitmaQordGVzdCAtbiAiJHN5c3RlbV9uYW1lIiAmJiBBQ19ERUZJTkVfVU5RVU9URUQoU1lTVEVNX05BTUUsIiRzeXN0ZW1fbmFtZSIsW0RlZmluZSB0byB0aGUgc3lzdGVtIG5hbWUuXSkKK0FDX0NBQ0hFX1ZBTChjZl9jdl9zeXN0ZW1fbmFtZSxbY2ZfY3Zfc3lzdGVtX25hbWU9IiRzeXN0ZW1fbmFtZSJdKQorCit0ZXN0IC16ICIkc3lzdGVtX25hbWUiICYmIHN5c3RlbV9uYW1lPSIkY2ZfY3Zfc3lzdGVtX25hbWUiCit0ZXN0IC1uICIkY2ZfY3Zfc3lzdGVtX25hbWUiICYmIEFDX01TR19SRVNVTFQoQ29uZmlndXJpbmcgZm9yICRjZl9jdl9zeXN0ZW1fbmFtZSkKKworaWYgdGVzdCAiLiRzeXN0ZW1fbmFtZSIgIT0gIi4kY2ZfY3Zfc3lzdGVtX25hbWUiIDsgdGhlbgorCUFDX01TR19SRVNVTFQoQ2FjaGVkIHN5c3RlbSBuYW1lICgkc3lzdGVtX25hbWUpIGRvZXMgbm90IGFncmVlIHdpdGggYWN0dWFsICgkY2ZfY3Zfc3lzdGVtX25hbWUpKQorCUFDX01TR19FUlJPUigiUGxlYXNlIHJlbW92ZSBjb25maWcuY2FjaGUgYW5kIHRyeSBhZ2Fpbi4iKQorZmkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfQ0xBTkdfQ09NUElMRVIgdmVyc2lvbjogMiB1cGRhdGVkOiAyMDEzLzExLzE5IDE5OjIzOjM1CitkbmwgLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDaGVjayBpZiB0aGUgZ2l2ZW4gY29tcGlsZXIgaXMgcmVhbGx5IGNsYW5nLiAgY2xhbmcncyBDIGRyaXZlciBkZWZpbmVzCitkbmwgX19HTlVDX18gKGZvb2xpbmcgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgaW50byBzZXR0aW5nICRHQ0MgdG8geWVzKSBidXQgZG9lcworZG5sIG5vdCBpZ25vcmUgc29tZSBnY2Mgb3B0aW9ucy4KK2RubAorZG5sIFRoaXMgbWFjcm8gc2hvdWxkIGJlIHJ1biAic29vbiIgYWZ0ZXIgQUNfUFJPR19DQyBvciBBQ19QUk9HX0NQTFVTUExVUywgdG8KK2RubCBlbnN1cmUgdGhhdCBpdCBpcyBub3QgbWlzdGFrZW4gZm9yIGdjYy9nKysuICBJdCBpcyBub3JtYWxseSBpbnZva2VkIGZyb20KK2RubCB0aGUgd3JhcHBlcnMgZm9yIGdjYyBhbmQgZysrIHdhcm5pbmdzLgorZG5sCitkbmwgJDEgPSBHQ0MgKGRlZmF1bHQpIG9yIEdYWAorZG5sICQyID0gQ0xBTkdfQ09NUElMRVIgKGRlZmF1bHQpCitkbmwgJDMgPSBDRkxBR1MgKGRlZmF1bHQpIG9yIENYWEZMQUdTCitBQ19ERUZVTihbQ0ZfQ0xBTkdfQ09NUElMRVJdLFsKK2lmZWxzZShbJDJdLCxDTEFOR19DT01QSUxFUixbJDJdKT1ubworCitpZiB0ZXN0ICIkaWZlbHNlKFskMV0sLFskMV0sR0NDKSIgPSB5ZXMgOyB0aGVuCisJQUNfTVNHX0NIRUNLSU5HKGlmIHRoaXMgaXMgcmVhbGx5IENsYW5nIGlmZWxzZShbJDFdLEdYWCxDKyssQykgY29tcGlsZXIpCisJY2Zfc2F2ZV9DRkxBR1M9IiRpZmVsc2UoWyQzXSwsQ0ZMQUdTLFskM10pIgorCWlmZWxzZShbJDNdLCxDRkxBR1MsWyQzXSk9IiRpZmVsc2UoWyQzXSwsQ0ZMQUdTLFskM10pIC1RdW51c2VkLWFyZ3VtZW50cyIKKwlBQ19UUllfQ09NUElMRShbXSxbCisjaWZkZWYgX19jbGFuZ19fCisjZWxzZQorbWFrZSBhbiBlcnJvcgorI2VuZGlmCitdLFtpZmVsc2UoWyQyXSwsQ0xBTkdfQ09NUElMRVIsWyQyXSk9eWVzCitjZl9zYXZlX0NGTEFHUz0iJGNmX3NhdmVfQ0ZMQUdTIC1RdW51c2VkLWFyZ3VtZW50cyIKK10sW10pCisJaWZlbHNlKFskM10sLENGTEFHUyxbJDNdKT0iJGNmX3NhdmVfQ0ZMQUdTIgorCUFDX01TR19SRVNVTFQoJGlmZWxzZShbJDJdLCxDTEFOR19DT01QSUxFUixbJDJdKSkKK2ZpCitdKQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0NVUlNFU19IRUFERVIgdmVyc2lvbjogNSB1cGRhdGVkOiAyMDE1LzA0LzIzIDIwOjM1OjMwCitkbmwgLS0tLS0tLS0tLS0tLS0tLQorZG5sIEZpbmQgYSAiY3Vyc2VzIiBoZWFkZXIgZmlsZSwgZS5nLC4gImN1cnNlcy5oIiwgb3Igb25lIG9mIHRoZSBtb3JlIGNvbW1vbgorZG5sIHZhcmlhdGlvbnMgb2YgbmN1cnNlcycgaW5zdGFsbHMuCitkbmwKK2RubCAkMSA9IG5jdXJzZXMgd2hlbiBsb29raW5nIGZvciBuY3Vyc2VzLCBvciBpcyBlbXB0eQorQUNfREVGVU4oW0NGX0NVUlNFU19IRUFERVJdLFsKK0FDX0NBQ0hFX0NIRUNLKGlmIHdlIGhhdmUgaWRlbnRpZmllZCBjdXJzZXMgaGVhZGVycyxjZl9jdl9uY3Vyc2VzX2hlYWRlcixbCitjZl9jdl9uY3Vyc2VzX2hlYWRlcj1ub25lCitmb3IgY2ZfaGVhZGVyIGluIFwKKwluY3Vyc2VzLmggaWZlbHNlKCQxLCwsWyQxL25jdXJzZXMuaF0pIFwKKwljdXJzZXMuaCBpZmVsc2UoJDEsLCxbJDEvY3Vyc2VzLmhdKSBpZmVsc2UoJDEsLFtuY3Vyc2VzL25jdXJzZXMuaCBuY3Vyc2VzL2N1cnNlcy5oXSkKK2RvCitBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPCR7Y2ZfaGVhZGVyfT5dLAorCVtpbml0c2NyKCk7IHRnb3RvKCI/IiwgMCwwKV0sCisJW2NmX2N2X25jdXJzZXNfaGVhZGVyPSRjZl9oZWFkZXI7IGJyZWFrXSxbXSkKK2RvbmUKK10pCisKK2lmIHRlc3QgIiRjZl9jdl9uY3Vyc2VzX2hlYWRlciIgPSBub25lIDsgdGhlbgorCUFDX01TR19FUlJPUihObyBjdXJzZXMgaGVhZGVyLWZpbGVzIGZvdW5kKQorZmkKKworIyBjaGVhdCwgdG8gZ2V0IHRoZSByaWdodCAjZGVmaW5lJ3MgZm9yIEhBVkVfTkNVUlNFU19ILCBldGMuCitBQ19DSEVDS19IRUFERVJTKCRjZl9jdl9uY3Vyc2VzX2hlYWRlcikKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfRElSTkFNRSB2ZXJzaW9uOiA0IHVwZGF0ZWQ6IDIwMDIvMTIvMjEgMTk6MjU6NTIKK2RubCAtLS0tLS0tLS0tCitkbmwgImRpcm5hbWUiIGlzIG5vdCBwb3J0YWJsZSwgc28gd2UgZmFrZSBpdCB3aXRoIGEgc2hlbGwgc2NyaXB0LgorQUNfREVGVU4oW0NGX0RJUk5BTUVdLFskMT1gZWNobyAkMiB8IHNlZCAtZSAncyUvW1teL11dKiQlJSdgXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9ESVNBQkxFX0VDSE8gdmVyc2lvbjogMTMgdXBkYXRlZDogMjAxNS8wNC8xOCAwODo1Njo1NworZG5sIC0tLS0tLS0tLS0tLS0tLQorZG5sIFlvdSBjYW4gYWx3YXlzIHVzZSAibWFrZSAtbiIgdG8gc2VlIHRoZSBhY3R1YWwgb3B0aW9ucywgYnV0IGl0J3MgaGFyZCB0bworZG5sIHBpY2sgb3V0L2FuYWx5emUgd2FybmluZyBtZXNzYWdlcyB3aGVuIHRoZSBjb21waWxlLWxpbmUgaXMgbG9uZy4KK2RubAorZG5sIFNldHM6CitkbmwJRUNIT19MVCAtIHN5bWJvbCB0byBjb250cm9sIGlmIGxpYnRvb2wgaXMgdmVyYm9zZQorZG5sCUVDSE9fTEQgLSBzeW1ib2wgdG8gcHJlZml4ICJjYyAtbyIgbGluZXMKK2RubAlSVUxFX0NDIC0gc3ltYm9sIHRvIHB1dCBiZWZvcmUgaW1wbGljaXQgImNjIC1jIiBsaW5lcyAoZS5nLiwgLmMubykKK2RubAlTSE9XX0NDIC0gc3ltYm9sIHRvIHB1dCBiZWZvcmUgZXhwbGljaXQgImNjIC1jIiBsaW5lcworZG5sCUVDSE9fQ0MgLSBzeW1ib2wgdG8gcHV0IGJlZm9yZSBhbnkgImNjIiBsaW5lCitkbmwKK0FDX0RFRlVOKFtDRl9ESVNBQkxFX0VDSE9dLFsKK0FDX01TR19DSEVDS0lORyhpZiB5b3Ugd2FudCB0byBzZWUgbG9uZyBjb21waWxpbmcgbWVzc2FnZXMpCitDRl9BUkdfRElTQUJMRShlY2hvLAorCVsgIC0tZGlzYWJsZS1lY2hvICAgICAgICAgIGRvIG5vdCBkaXNwbGF5ICJjb21waWxpbmciIGNvbW1hbmRzXSwKKwlbCisJRUNIT19MVD0nLS1zaWxlbnQnCisJRUNIT19MRD0nQGVjaG8gbGlua2luZyBbJF1AOycKKwlSVUxFX0NDPSdAZWNobyBjb21waWxpbmcgWyRdPCcKKwlTSE9XX0NDPSdAZWNobyBjb21waWxpbmcgWyRdQCcKKwlFQ0hPX0NDPSdAJworXSxbCisJRUNIT19MVD0nJworCUVDSE9fTEQ9JycKKwlSVUxFX0NDPScnCisJU0hPV19DQz0nJworCUVDSE9fQ0M9JycKK10pCitBQ19NU0dfUkVTVUxUKCRlbmFibGV2YWwpCitBQ19TVUJTVChFQ0hPX0xUKQorQUNfU1VCU1QoRUNIT19MRCkKK0FDX1NVQlNUKFJVTEVfQ0MpCitBQ19TVUJTVChTSE9XX0NDKQorQUNfU1VCU1QoRUNIT19DQykKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfRElTQUJMRV9HTkFUX1BST0pFQ1RTIHZlcnNpb246IDEgdXBkYXRlZDogMjAxNC8wNi8wMSAxMTozNDowMAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0NGX0RJU0FCTEVfR05BVF9QUk9KRUNUU10sWworQUNfTVNHX0NIRUNLSU5HKGlmIHdlIHdhbnQgdG8gdXNlIEdOQVQgcHJvamVjdHMpCitDRl9BUkdfRElTQUJMRShnbmF0LXByb2plY3RzLAorCVsgIC0tZGlzYWJsZS1nbmF0LXByb2plY3RzIHRlc3Q6IGRpc2FibGUgR05BVCBwcm9qZWN0cyBldmVuIGlmIHVzYWJsZV0sCisJW2VuYWJsZV9nbmF0X3Byb2plY3RzPW5vXSwKKwlbZW5hYmxlX2duYXRfcHJvamVjdHM9eWVzXSkKK0FDX01TR19SRVNVTFQoJGVuYWJsZV9nbmF0X3Byb2plY3RzKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9FTkFCTEVfUENfRklMRVMgdmVyc2lvbjogMTIgdXBkYXRlZDogMjAxNS8wNC8xNyAyMToxMzowNAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFRoaXMgaXMgdGhlICItLWVuYWJsZS1wYy1maWxlcyIgb3B0aW9uLCB3aGljaCBpcyBhdmFpbGFibGUgaWYgdGhlcmUgaXMgYQorZG5sIHBrZy1jb25maWcgY29uZmlndXJhdGlvbiBvbiB0aGUgbG9jYWwgbWFjaGluZS4KK0FDX0RFRlVOKFtDRl9FTkFCTEVfUENfRklMRVNdLFsKK0FDX1JFUVVJUkUoW0NGX1BLR19DT05GSUddKQorQUNfUkVRVUlSRShbQ0ZfV0lUSF9QS0dfQ09ORklHX0xJQkRJUl0pCisKK2lmIHRlc3QgIngkUEtHX0NPTkZJRyIgIT0geG5vbmUKK3RoZW4KKwlBQ19NU0dfQ0hFQ0tJTkcoaWYgd2Ugc2hvdWxkIGluc3RhbGwgLnBjIGZpbGVzIGZvciAkUEtHX0NPTkZJRykKK2Vsc2UKKwlBQ19NU0dfQ0hFQ0tJTkcoaWYgd2Ugc2hvdWxkIGluc3RhbGwgLnBjIGZpbGVzKQorZmkKKworQUNfQVJHX0VOQUJMRShwYy1maWxlcywKKwlbICAtLWVuYWJsZS1wYy1maWxlcyAgICAgICBnZW5lcmF0ZSBhbmQgaW5zdGFsbCAucGMgZmlsZXMgZm9yIHBrZy1jb25maWddLAorCVtlbmFibGVfcGNfZmlsZXM9JGVuYWJsZXZhbF0sCisJW2VuYWJsZV9wY19maWxlcz1ub10pCitBQ19NU0dfUkVTVUxUKCRlbmFibGVfcGNfZmlsZXMpCisKK2lmIHRlc3QgIngkZW5hYmxlX3BjX2ZpbGVzIiAhPSB4bm8KK3RoZW4KKwljYXNlICJ4JFBLR19DT05GSUdfTElCRElSIiBpbgorCSh4bm98eHllcykKKwkJQUNfTVNHX1dBUk4obm8gUEtHX0NPTkZJR19MSUJESVIgd2FzIGZvdW5kKQorCQlNQUtFX1BDX0ZJTEVTPSIjIgorCQk7OworCSgqKQorCQlDRl9QQVRIX1NZTlRBWChQS0dfQ09ORklHX0xJQkRJUikKKwkJTUFLRV9QQ19GSUxFUz0KKwkJOzsKKwllc2FjCitlbHNlCisJTUFLRV9QQ19GSUxFUz0iIyIKK2ZpCitBQ19TVUJTVChNQUtFX1BDX0ZJTEVTKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9GSU5EX0xJQlJBUlkgdmVyc2lvbjogOSB1cGRhdGVkOiAyMDA4LzAzLzIzIDE0OjQ4OjU0CitkbmwgLS0tLS0tLS0tLS0tLS0tCitkbmwgTG9vayBmb3IgYSBub24tc3RhbmRhcmQgbGlicmFyeSwgZ2l2ZW4gcGFyYW1ldGVycyBmb3IgQUNfVFJZX0xJTksuICBXZQorZG5sIHByZWZlciBhIHN0YW5kYXJkIGxvY2F0aW9uLCBhbmQgdXNlIC1MIG9wdGlvbnMgb25seSBpZiB3ZSBkbyBub3QgZmluZCB0aGUKK2RubCBsaWJyYXJ5IGluIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IGxvY2F0aW9uKHMpLgorZG5sCSQxID0gbGlicmFyeSBuYW1lCitkbmwJJDIgPSBsaWJyYXJ5IGNsYXNzLCB1c3VhbGx5IHRoZSBzYW1lIGFzIGxpYnJhcnkgbmFtZQorZG5sCSQzID0gaW5jbHVkZXMKK2RubAkkNCA9IGNvZGUgZnJhZ21lbnQgdG8gY29tcGlsZS9saW5rCitkbmwJJDUgPSBjb3JyZXNwb25kaW5nIGZ1bmN0aW9uLW5hbWUKK2RubAkkNiA9IGZsYWcsIG5vbm51bGwgaWYgZmFpbHVyZSBzaG91bGQgbm90IGNhdXNlIGFuIGVycm9yLWV4aXQKK2RubAorZG5sIFNldHMgdGhlIHZhcmlhYmxlICIkY2ZfbGliZGlyIiBhcyBhIHNpZGUtZWZmZWN0LCBzbyB3ZSBjYW4gc2VlIGlmIHdlIGhhZAorZG5sIHRvIHVzZSBhIC1MIG9wdGlvbi4KK0FDX0RFRlVOKFtDRl9GSU5EX0xJQlJBUlldLAorWworCWV2YWwgJ2NmX2N2X2hhdmVfbGliXyckMSc9bm8nCisJY2ZfbGliZGlyPSIiCisJQUNfQ0hFQ0tfRlVOQygkNSwKKwkJZXZhbCAnY2ZfY3ZfaGF2ZV9saWJfJyQxJz15ZXMnLFsKKwkJY2Zfc2F2ZV9MSUJTPSIkTElCUyIKKwkJQUNfTVNHX0NIRUNLSU5HKGZvciAkNSBpbiAtbCQxKQorCQlMSUJTPSItbCQxICRMSUJTIgorCQlBQ19UUllfTElOSyhbJDNdLFskNF0sCisJCQlbQUNfTVNHX1JFU1VMVCh5ZXMpCisJCQkgZXZhbCAnY2ZfY3ZfaGF2ZV9saWJfJyQxJz15ZXMnCisJCQldLAorCQkJW0FDX01TR19SRVNVTFQobm8pCisJCQlDRl9MSUJSQVJZX1BBVEgoY2Zfc2VhcmNoLCQyKQorCQkJZm9yIGNmX2xpYmRpciBpbiAkY2Zfc2VhcmNoCisJCQlkbworCQkJCUFDX01TR19DSEVDS0lORyhmb3IgLWwkMSBpbiAkY2ZfbGliZGlyKQorCQkJCUxJQlM9Ii1MJGNmX2xpYmRpciAtbCQxICRjZl9zYXZlX0xJQlMiCisJCQkJQUNfVFJZX0xJTksoWyQzXSxbJDRdLAorCQkJCQlbQUNfTVNHX1JFU1VMVCh5ZXMpCisJCQkgCQkgZXZhbCAnY2ZfY3ZfaGF2ZV9saWJfJyQxJz15ZXMnCisJCQkJCSBicmVha10sCisJCQkJCVtBQ19NU0dfUkVTVUxUKG5vKQorCQkJCQkgTElCUz0iJGNmX3NhdmVfTElCUyJdKQorCQkJZG9uZQorCQkJXSkKKwkJXSkKK2V2YWwgJ2NmX2ZvdW5kX2xpYnJhcnk9WyRdY2ZfY3ZfaGF2ZV9saWJfJyQxCitpZmVsc2UoJDYsLFsKK2lmIHRlc3QgJGNmX2ZvdW5kX2xpYnJhcnkgPSBubyA7IHRoZW4KKwlBQ19NU0dfRVJST1IoQ2Fubm90IGxpbmsgJDEgbGlicmFyeSkKK2ZpCitdKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9GSU5EX0xJTktBR0UgdmVyc2lvbjogMjAgdXBkYXRlZDogMjAxNS8wNC8xOCAwODo1Njo1NworZG5sIC0tLS0tLS0tLS0tLS0tLQorZG5sIEZpbmQgYSBsaWJyYXJ5IChzcGVjaWZpY2FsbHkgdGhlIGxpbmthZ2UgdXNlZCBpbiB0aGUgY29kZSBmcmFnbWVudCksCitkbmwgc2VhcmNoaW5nIGZvciBpdCBpZiBpdCBpcyBub3QgYWxyZWFkeSBpbiB0aGUgbGlicmFyeSBwYXRoLgorZG5sIFNlZSBhbHNvIENGX0FERF9TRUFSQ0hQQVRILgorZG5sCitkbmwgUGFyYW1ldGVycyAoNC1vbiBhcmUgb3B0aW9uYWwpOgorZG5sICAgICAkMSA9IGhlYWRlcnMgZm9yIGxpYnJhcnkgZW50cnlwb2ludAorZG5sICAgICAkMiA9IGNvZGUgZnJhZ21lbnQgZm9yIGxpYnJhcnkgZW50cnlwb2ludAorZG5sICAgICAkMyA9IHRoZSBsaWJyYXJ5IG5hbWUgd2l0aG91dCB0aGUgIi1sIiBvcHRpb24gb3IgIi5zbyIgc3VmZml4LgorZG5sICAgICAkNCA9IGFjdGlvbiB0byBwZXJmb3JtIGlmIHN1Y2Nlc3NmdWwgKGRlZmF1bHQ6IHVwZGF0ZSBDUFBGTEFHUywgZXRjKQorZG5sICAgICAkNSA9IGFjdGlvbiB0byBwZXJmb3JtIGlmIG5vdCBzdWNjZXNzZnVsCitkbmwgICAgICQ2ID0gbW9kdWxlIG5hbWUsIGlmIG5vdCB0aGUgc2FtZSBhcyB0aGUgbGlicmFyeSBuYW1lCitkbmwgICAgICQ3ID0gZXh0cmEgbGlicmFyaWVzCitkbmwKK2RubCBTZXRzIHRoZXNlIHZhcmlhYmxlczoKK2RubCAgICAgJGNmX2N2X2ZpbmRfbGlua2FnZV8kMyAtIHllcy9ubyBhY2NvcmRpbmcgdG8gd2hldGhlciBsaW5rYWdlIGlzIGZvdW5kCitkbmwgICAgICRjZl9jdl9oZWFkZXJfcGF0aF8kMyAtIGluY2x1ZGUtZGlyZWN0b3J5IGlmIG5lZWRlZAorZG5sICAgICAkY2ZfY3ZfbGlicmFyeV9wYXRoXyQzIC0gbGlicmFyeS1kaXJlY3RvcnkgaWYgbmVlZGVkCitkbmwgICAgICRjZl9jdl9saWJyYXJ5X2ZpbGVfJDMgLSBsaWJyYXJ5LWZpbGUgaWYgbmVlZGVkLCBlLmcuLCAtbCQzCitBQ19ERUZVTihbQ0ZfRklORF9MSU5LQUdFXSxbCisKKyMgSWYgdGhlIGxpbmthZ2UgaXMgbm90IGFscmVhZHkgaW4gdGhlICRDUFBGTEFHUy8kTERGTEFHUyBjb25maWd1cmF0aW9uLCB0aGVzZQorIyB3aWxsIGJlIHNldCBvbiBjb21wbGV0aW9uIG9mIHRoZSBBQ19UUllfTElOSyBiZWxvdy4KK2NmX2N2X2hlYWRlcl9wYXRoXyQzPQorY2ZfY3ZfbGlicmFyeV9wYXRoXyQzPQorCitDRl9NU0dfTE9HKFtTdGFydGluZyBbRklORF9MSU5LQUdFXSgkMywkNildKQorCitjZl9zYXZlX0xJQlM9IiRMSUJTIgorCitBQ19UUllfTElOSyhbJDFdLFskMl0sWworCWNmX2N2X2ZpbmRfbGlua2FnZV8kMz15ZXMKKwljZl9jdl9oZWFkZXJfcGF0aF8kMz0vdXNyL2luY2x1ZGUKKwljZl9jdl9saWJyYXJ5X3BhdGhfJDM9L3Vzci9saWIKK10sWworCitMSUJTPSItbCQzICQ3ICRjZl9zYXZlX0xJQlMiCisKK0FDX1RSWV9MSU5LKFskMV0sWyQyXSxbCisJY2ZfY3ZfZmluZF9saW5rYWdlXyQzPXllcworCWNmX2N2X2hlYWRlcl9wYXRoXyQzPS91c3IvaW5jbHVkZQorCWNmX2N2X2xpYnJhcnlfcGF0aF8kMz0vdXNyL2xpYgorCWNmX2N2X2xpYnJhcnlfZmlsZV8kMz0iLWwkMyIKK10sWworCWNmX2N2X2ZpbmRfbGlua2FnZV8kMz1ubworCUxJQlM9IiRjZl9zYXZlX0xJQlMiCisKKwlDRl9WRVJCT1NFKGZpbmQgbGlua2FnZSBmb3IgJDMgbGlicmFyeSkKKwlDRl9NU0dfTE9HKFtTZWFyY2hpbmcgZm9yIGhlYWRlcnMgaW4gW0ZJTkRfTElOS0FHRV0oJDMsJDYpXSkKKworCWNmX3NhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKwljZl90ZXN0X0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisKKwlDRl9IRUFERVJfUEFUSChjZl9zZWFyY2gsaWZlbHNlKFskNl0sLFskM10sWyQ2XSkpCisJZm9yIGNmX2N2X2hlYWRlcl9wYXRoXyQzIGluICRjZl9zZWFyY2gKKwlkbworCQlpZiB0ZXN0IC1kICRjZl9jdl9oZWFkZXJfcGF0aF8kMyA7IHRoZW4KKwkJCUNGX1ZFUkJPU0UoLi4uIHRlc3RpbmcgJGNmX2N2X2hlYWRlcl9wYXRoXyQzKQorCQkJQ1BQRkxBR1M9IiRjZl9zYXZlX0NQUEZMQUdTIC1JJGNmX2N2X2hlYWRlcl9wYXRoXyQzIgorCQkJQUNfVFJZX0NPTVBJTEUoWyQxXSxbJDJdLFsKKwkJCQlDRl9WRVJCT1NFKC4uLiBmb3VuZCAkMyBoZWFkZXJzIGluICRjZl9jdl9oZWFkZXJfcGF0aF8kMykKKwkJCQljZl9jdl9maW5kX2xpbmthZ2VfJDM9bWF5YmUKKwkJCQljZl90ZXN0X0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisJCQkJYnJlYWtdLFsKKwkJCQlDUFBGTEFHUz0iJGNmX3NhdmVfQ1BQRkxBR1MiCisJCQkJXSkKKwkJZmkKKwlkb25lCisKKwlpZiB0ZXN0ICIkY2ZfY3ZfZmluZF9saW5rYWdlXyQzIiA9IG1heWJlIDsgdGhlbgorCisJCUNGX01TR19MT0coW1NlYXJjaGluZyBmb3IgJDMgbGlicmFyeSBpbiBbRklORF9MSU5LQUdFXSgkMywkNildKQorCisJCWNmX3NhdmVfTElCUz0iJExJQlMiCisJCWNmX3NhdmVfTERGTEFHUz0iJExERkxBR1MiCisKKwkJaWZlbHNlKFskNl0sLCxbCisJCUNQUEZMQUdTPSIkY2ZfdGVzdF9DUFBGTEFHUyIKKwkJTElCUz0iLWwkMyAkNyAkY2Zfc2F2ZV9MSUJTIgorCQlBQ19UUllfTElOSyhbJDFdLFskMl0sWworCQkJQ0ZfVkVSQk9TRSguLi4gZm91bmQgJDMgbGlicmFyeSBpbiBzeXN0ZW0pCisJCQljZl9jdl9maW5kX2xpbmthZ2VfJDM9eWVzXSkKKwkJCUNQUEZMQUdTPSIkY2Zfc2F2ZV9DUFBGTEFHUyIKKwkJCUxJQlM9IiRjZl9zYXZlX0xJQlMiCisJCQldKQorCisJCWlmIHRlc3QgIiRjZl9jdl9maW5kX2xpbmthZ2VfJDMiICE9IHllcyA7IHRoZW4KKwkJCUNGX0xJQlJBUllfUEFUSChjZl9zZWFyY2gsJDMpCisJCQlmb3IgY2ZfY3ZfbGlicmFyeV9wYXRoXyQzIGluICRjZl9zZWFyY2gKKwkJCWRvCisJCQkJaWYgdGVzdCAtZCAkY2ZfY3ZfbGlicmFyeV9wYXRoXyQzIDsgdGhlbgorCQkJCQlDRl9WRVJCT1NFKC4uLiB0ZXN0aW5nICRjZl9jdl9saWJyYXJ5X3BhdGhfJDMpCisJCQkJCUNQUEZMQUdTPSIkY2ZfdGVzdF9DUFBGTEFHUyIKKwkJCQkJTElCUz0iLWwkMyAkNyAkY2Zfc2F2ZV9MSUJTIgorCQkJCQlMREZMQUdTPSIkY2Zfc2F2ZV9MREZMQUdTIC1MJGNmX2N2X2xpYnJhcnlfcGF0aF8kMyIKKwkJCQkJQUNfVFJZX0xJTksoWyQxXSxbJDJdLFsKKwkJCQkJQ0ZfVkVSQk9TRSguLi4gZm91bmQgJDMgbGlicmFyeSBpbiAkY2ZfY3ZfbGlicmFyeV9wYXRoXyQzKQorCQkJCQljZl9jdl9maW5kX2xpbmthZ2VfJDM9eWVzCisJCQkJCWNmX2N2X2xpYnJhcnlfZmlsZV8kMz0iLWwkMyIKKwkJCQkJYnJlYWtdLFsKKwkJCQkJQ1BQRkxBR1M9IiRjZl9zYXZlX0NQUEZMQUdTIgorCQkJCQlMSUJTPSIkY2Zfc2F2ZV9MSUJTIgorCQkJCQlMREZMQUdTPSIkY2Zfc2F2ZV9MREZMQUdTIgorCQkJCQldKQorCQkJCWZpCisJCQlkb25lCisJCQlDUFBGTEFHUz0iJGNmX3NhdmVfQ1BQRkxBR1MiCisJCQlMREZMQUdTPSIkY2Zfc2F2ZV9MREZMQUdTIgorCQlmaQorCisJZWxzZQorCQljZl9jdl9maW5kX2xpbmthZ2VfJDM9bm8KKwlmaQorCV0sJDcpCitdKQorCitMSUJTPSIkY2Zfc2F2ZV9MSUJTIgorCitpZiB0ZXN0ICIkY2ZfY3ZfZmluZF9saW5rYWdlXyQzIiA9IHllcyA7IHRoZW4KK2lmZWxzZShbJDRdLCxbCisJQ0ZfQUREX0lOQ0RJUigkY2ZfY3ZfaGVhZGVyX3BhdGhfJDMpCisJQ0ZfQUREX0xJQkRJUigkY2ZfY3ZfbGlicmFyeV9wYXRoXyQzKQorCUNGX0FERF9MSUIoJDMpCitdLFskNF0pCitlbHNlCitpZmVsc2UoWyQ1XSwsQUNfTVNHX1dBUk4oQ2Fubm90IGZpbmQgJDMgbGlicmFyeSksWyQ1XSkKK2ZpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0ZJWFVQX0FEQUZMQUdTIHZlcnNpb246IDIgdXBkYXRlZDogMjAxNS8wNC8xNyAyMToxMzowNAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tCitkbmwgbWFrZSBBREFGTEFHUyBjb25zaXN0ZW50IHdpdGggQ0ZMQUdTCitBQ19ERUZVTihbQ0ZfRklYVVBfQURBRkxBR1NdLFsKKwlBQ19NU0dfQ0hFQ0tJTkcob3B0aW1pemF0aW9uIG9wdGlvbnMgZm9yIEFEQUZMQUdTKQorCWNhc2UgIiRDRkxBR1MiIGluCisJKCotZyopCisJCUNGX0FERF9BREFGTEFHUygtZykKKwkJOzsKKwllc2FjCisJY2FzZSAiJENGTEFHUyIgaW4KKwkoKi1PKikKKwkJY2ZfT19mbGFnPWBlY2hvICIkQ0ZMQUdTIiB8c2VkIC1lICdzL14uKi1PLy1PLycgLWUgJ3MvW1sgCV1dLiovLydgCisJCUNGX0FERF9BREFGTEFHUygkY2ZfT19mbGFnKQorCQk7OworCWVzYWMKKwlBQ19NU0dfUkVTVUxUKCRBREFGTEFHUykKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfR0NDX0FUVFJJQlVURVMgdmVyc2lvbjogMTcgdXBkYXRlZDogMjAxNS8wNC8xMiAxNTozOTowMAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVGVzdCBmb3IgYXZhaWxhYmlsaXR5IG9mIHVzZWZ1bCBnY2MgX19hdHRyaWJ1dGVfXyBkaXJlY3RpdmVzIHRvIHF1aWV0CitkbmwgY29tcGlsZXIgd2FybmluZ3MuICBUaG91Z2ggdXNlZnVsLCBub3QgYWxsIGFyZSBzdXBwb3J0ZWQgLS0gYW5kIGNvbnRyYXJ5CitkbmwgdG8gZG9jdW1lbnRhdGlvbiwgdW5yZWNvZ25pemVkIGRpcmVjdGl2ZXMgY2F1c2Ugb2xkZXIgY29tcGlsZXJzIHRvIGJhcmYuCitBQ19ERUZVTihbQ0ZfR0NDX0FUVFJJQlVURVNdLAorWworaWYgdGVzdCAiJEdDQyIgPSB5ZXMKK3RoZW4KK2NhdCA+IGNvbmZ0ZXN0LmkgPDxFT0YKKyNpZm5kZWYgR0NDX1BSSU5URgorI2RlZmluZSBHQ0NfUFJJTlRGIDAKKyNlbmRpZgorI2lmbmRlZiBHQ0NfU0NBTkYKKyNkZWZpbmUgR0NDX1NDQU5GIDAKKyNlbmRpZgorI2lmbmRlZiBHQ0NfTk9SRVRVUk4KKyNkZWZpbmUgR0NDX05PUkVUVVJOIC8qIG5vdGhpbmcgKi8KKyNlbmRpZgorI2lmbmRlZiBHQ0NfVU5VU0VECisjZGVmaW5lIEdDQ19VTlVTRUQgLyogbm90aGluZyAqLworI2VuZGlmCitFT0YKK2lmIHRlc3QgIiRHQ0MiID0geWVzCit0aGVuCisJQUNfQ0hFQ0tJTkcoW2ZvciAkQ0MgX19hdHRyaWJ1dGVfXyBkaXJlY3RpdmVzXSkKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIF9fb2xpbmVfXyAiJHthc19tZTotY29uZmlndXJlfSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgImNvbmZ0ZXN0LmgiCisjaW5jbHVkZSAiY29uZnRlc3QuaSIKKyNpZglHQ0NfUFJJTlRGCisjZGVmaW5lIEdDQ19QUklOVEZMSUtFKGZtdCx2YXIpIF9fYXR0cmlidXRlX18oKGZvcm1hdChwcmludGYsZm10LHZhcikpKQorI2Vsc2UKKyNkZWZpbmUgR0NDX1BSSU5URkxJS0UoZm10LHZhcikgLypub3RoaW5nKi8KKyNlbmRpZgorI2lmCUdDQ19TQ0FORgorI2RlZmluZSBHQ0NfU0NBTkZMSUtFKGZtdCx2YXIpICBfX2F0dHJpYnV0ZV9fKChmb3JtYXQoc2NhbmYsZm10LHZhcikpKQorI2Vsc2UKKyNkZWZpbmUgR0NDX1NDQU5GTElLRShmbXQsdmFyKSAgLypub3RoaW5nKi8KKyNlbmRpZgorZXh0ZXJuIHZvaWQgd293KGNoYXIgKiwuLi4pIEdDQ19TQ0FORkxJS0UoMSwyKTsKK2V4dGVybiB2b2lkIG9vcHMoY2hhciAqLC4uLikgR0NDX1BSSU5URkxJS0UoMSwyKSBHQ0NfTk9SRVRVUk47CitleHRlcm4gdm9pZCBmb28odm9pZCkgR0NDX05PUkVUVVJOOworaW50IG1haW4oaW50IGFyZ2MgR0NDX1VOVVNFRCwgY2hhciAqYXJndltbXV0gR0NDX1VOVVNFRCkgeyByZXR1cm4gMDsgfQorRU9GCisJY2ZfcHJpbnRmX2F0dHJpYnV0ZT1ubworCWNmX3NjYW5mX2F0dHJpYnV0ZT1ubworCWZvciBjZl9hdHRyaWJ1dGUgaW4gc2NhbmYgcHJpbnRmIHVudXNlZCBub3JldHVybgorCWRvCisJCUNGX1VQUEVSKGNmX0FUVFJJQlVURSwkY2ZfYXR0cmlidXRlKQorCQljZl9kaXJlY3RpdmU9Il9fYXR0cmlidXRlX18oKCRjZl9hdHRyaWJ1dGUpKSIKKwkJZWNobyAiY2hlY2tpbmcgZm9yICRDQyAkY2ZfZGlyZWN0aXZlIiAxPiZBQ19GRF9DQworCisJCWNhc2UgJGNmX2F0dHJpYnV0ZSBpbgorCQkocHJpbnRmKQorCQkJY2ZfcHJpbnRmX2F0dHJpYnV0ZT15ZXMKKwkJCWNhdCA+Y29uZnRlc3QuaCA8PEVPRgorI2RlZmluZSBHQ0NfJGNmX0FUVFJJQlVURSAxCitFT0YKKwkJCTs7CisJCShzY2FuZikKKwkJCWNmX3NjYW5mX2F0dHJpYnV0ZT15ZXMKKwkJCWNhdCA+Y29uZnRlc3QuaCA8PEVPRgorI2RlZmluZSBHQ0NfJGNmX0FUVFJJQlVURSAxCitFT0YKKwkJCTs7CisJCSgqKQorCQkJY2F0ID5jb25mdGVzdC5oIDw8RU9GCisjZGVmaW5lIEdDQ18kY2ZfQVRUUklCVVRFICRjZl9kaXJlY3RpdmUKK0VPRgorCQkJOzsKKwkJZXNhYworCisJCWlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisJCQl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgQUNfTVNHX1JFU1VMVCguLi4gJGNmX2F0dHJpYnV0ZSkKKwkJCWNhdCBjb25mdGVzdC5oID4+Y29uZmRlZnMuaAorCQkJY2FzZSAkY2ZfYXR0cmlidXRlIGluCisJCQkobm9yZXR1cm4pCisJCQkJQUNfREVGSU5FX1VOUVVPVEVEKEdDQ19OT1JFVFVSTiwkY2ZfZGlyZWN0aXZlLFtEZWZpbmUgdG8gbm9yZXR1cm4tYXR0cmlidXRlIGZvciBnY2NdKQorCQkJCTs7CisJCQkocHJpbnRmKQorCQkJCWNmX3ZhbHVlPScvKiBub3RoaW5nICovJworCQkJCWlmIHRlc3QgIiRjZl9wcmludGZfYXR0cmlidXRlIiAhPSBubyA7IHRoZW4KKwkJCQkJY2ZfdmFsdWU9J19fYXR0cmlidXRlX18oKGZvcm1hdChwcmludGYsZm10LHZhcikpKScKKwkJCQkJQUNfREVGSU5FKEdDQ19QUklOVEYsMSxbRGVmaW5lIHRvIDEgaWYgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIGdjYy1saWtlIHByaW50ZiBhdHRyaWJ1dGUuXSkKKwkJCQlmaQorCQkJCUFDX0RFRklORV9VTlFVT1RFRChHQ0NfUFJJTlRGTElLRShmbXQsdmFyKSwkY2ZfdmFsdWUsW0RlZmluZSB0byBwcmludGYtYXR0cmlidXRlIGZvciBnY2NdKQorCQkJCTs7CisJCQkoc2NhbmYpCisJCQkJY2ZfdmFsdWU9Jy8qIG5vdGhpbmcgKi8nCisJCQkJaWYgdGVzdCAiJGNmX3NjYW5mX2F0dHJpYnV0ZSIgIT0gbm8gOyB0aGVuCisJCQkJCWNmX3ZhbHVlPSdfX2F0dHJpYnV0ZV9fKChmb3JtYXQoc2NhbmYsZm10LHZhcikpKScKKwkJCQkJQUNfREVGSU5FKEdDQ19TQ0FORiwxLFtEZWZpbmUgdG8gMSBpZiB0aGUgY29tcGlsZXIgc3VwcG9ydHMgZ2NjLWxpa2Ugc2NhbmYgYXR0cmlidXRlLl0pCisJCQkJZmkKKwkJCQlBQ19ERUZJTkVfVU5RVU9URUQoR0NDX1NDQU5GTElLRShmbXQsdmFyKSwkY2ZfdmFsdWUsW0RlZmluZSB0byBzc2NhbmYtYXR0cmlidXRlIGZvciBnY2NdKQorCQkJCTs7CisJCQkodW51c2VkKQorCQkJCUFDX0RFRklORV9VTlFVT1RFRChHQ0NfVU5VU0VELCRjZl9kaXJlY3RpdmUsW0RlZmluZSB0byB1bnVzZWQtYXR0cmlidXRlIGZvciBnY2NdKQorCQkJCTs7CisJCQllc2FjCisJCWZpCisJZG9uZQorZWxzZQorCWZncmVwIGRlZmluZSBjb25mdGVzdC5pID4+Y29uZmRlZnMuaAorZmkKK3JtIC1yZiBjb25mdGVzdCoKK2ZpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0dDQ19WRVJTSU9OIHZlcnNpb246IDcgdXBkYXRlZDogMjAxMi8xMC8xOCAwNjo0NjozMworZG5sIC0tLS0tLS0tLS0tLS0tCitkbmwgRmluZCB2ZXJzaW9uIG9mIGdjYworQUNfREVGVU4oW0NGX0dDQ19WRVJTSU9OXSxbCitBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSkKK0dDQ19WRVJTSU9OPW5vbmUKK2lmIHRlc3QgIiRHQ0MiID0geWVzIDsgdGhlbgorCUFDX01TR19DSEVDS0lORyh2ZXJzaW9uIG9mICRDQykKKwlHQ0NfVkVSU0lPTj0iYCR7Q0N9IC0tdmVyc2lvbiAyPi9kZXYvbnVsbCB8IHNlZCAtZSAnMiwkZCcgLWUgJ3MvXi4qKEdDQ1tbXildXSopIC8vJyAtZSAncy9eLiooRGViaWFuW1teKV1dKikgLy8nIC1lICdzL15bW14wLTkuXV0qLy8nIC1lICdzL1tbXjAtOS5dXS4qLy8nYCIKKwl0ZXN0IC16ICIkR0NDX1ZFUlNJT04iICYmIEdDQ19WRVJTSU9OPXVua25vd24KKwlBQ19NU0dfUkVTVUxUKCRHQ0NfVkVSU0lPTikKK2ZpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0dDQ19XQVJOSU5HUyB2ZXJzaW9uOiAzMiB1cGRhdGVkOiAyMDE1LzA0LzEyIDE1OjM5OjAwCitkbmwgLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgaWYgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIHVzZWZ1bCB3YXJuaW5nIG9wdGlvbnMuICBUaGVyZSdzIGEgZmV3IHRoYXQKK2RubCB3ZSBkb24ndCB1c2UsIHNpbXBseSBiZWNhdXNlIHRoZXkncmUgdG9vIG5vaXN5OgorZG5sCitkbmwJLVdjb252ZXJzaW9uICh1c2VmdWwgaW4gb2xkZXIgdmVyc2lvbnMgb2YgZ2NjLCBidXQgbm90IGluIGdjYyAyLjcueCkKK2RubAktV3JlZHVuZGFudC1kZWNscyAoc3lzdGVtIGhlYWRlcnMgbWFrZSB0aGlzIHRvbyBub2lzeSkKK2RubAktV3RyYWRpdGlvbmFsIChjb21iaW5lcyB0b28gbWFueSB1bnJlbGF0ZWQgbWVzc2FnZXMsIG9ubHkgYSBmZXcgdXNlZnVsKQorZG5sCS1Xd3JpdGUtc3RyaW5ncyAodG9vIG5vaXN5LCBidXQgc2hvdWxkIHJldmlldyBvY2Nhc2lvbmFsbHkpLiAgVGhpcworZG5sCQlpcyBlbmFibGVkIGZvciBuY3Vyc2VzIHVzaW5nICItLWVuYWJsZS1jb25zdCIuCitkbmwJLXBlZGFudGljCitkbmwKK2RubCBQYXJhbWV0ZXI6CitkbmwJJDEgaXMgYW4gb3B0aW9uYWwgbGlzdCBvZiBnY2Mgd2FybmluZyBmbGFncyB0aGF0IGEgcGFydGljdWxhcgorZG5sCQlhcHBsaWNhdGlvbiBtaWdodCB3YW50IHRvIHVzZSwgZS5nLiwgIm5vLXVudXNlZCIgZm9yCitkbmwJCS1Xbm8tdW51c2VkCitkbmwgU3BlY2lhbDoKK2RubAlJZiAkd2l0aF9leHRfY29uc3QgaXMgInllcyIsIGFkZCBhIGNoZWNrIGZvciAtV3dyaXRlLXN0cmluZ3MKK2RubAorQUNfREVGVU4oW0NGX0dDQ19XQVJOSU5HU10sCitbCitBQ19SRVFVSVJFKFtDRl9HQ0NfVkVSU0lPTl0pCitDRl9JTlRFTF9DT01QSUxFUihHQ0MsSU5URUxfQ09NUElMRVIsQ0ZMQUdTKQorQ0ZfQ0xBTkdfQ09NUElMRVIoR0NDLENMQU5HX0NPTVBJTEVSLENGTEFHUykKKworY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgX19vbGluZV9fICIke2FzX21lOi1jb25maWd1cmV9IgoraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbW11dKSB7IHJldHVybiAoYXJndltbYXJnYy0xXV0gPT0gMCkgOyB9CitFT0YKKworaWYgdGVzdCAiJElOVEVMX0NPTVBJTEVSIiA9IHllcwordGhlbgorIyBUaGUgIi13ZFhYWCIgb3B0aW9ucyBzdXBwcmVzcyB3YXJuaW5nczoKKyMgcmVtYXJrICMxNDE5OiBleHRlcm5hbCBkZWNsYXJhdGlvbiBpbiBwcmltYXJ5IHNvdXJjZSBmaWxlCisjIHJlbWFyayAjMTY4MzogZXhwbGljaXQgY29udmVyc2lvbiBvZiBhIDY0LWJpdCBpbnRlZ3JhbCB0eXBlIHRvIGEgc21hbGxlciBpbnRlZ3JhbCB0eXBlIChwb3RlbnRpYWwgcG9ydGFiaWxpdHkgcHJvYmxlbSkKKyMgcmVtYXJrICMxNjg0OiBjb252ZXJzaW9uIGZyb20gcG9pbnRlciB0byBzYW1lLXNpemVkIGludGVncmFsIHR5cGUgKHBvdGVudGlhbCBwb3J0YWJpbGl0eSBwcm9ibGVtKQorIyByZW1hcmsgIzE5MzogemVybyB1c2VkIGZvciB1bmRlZmluZWQgcHJlcHJvY2Vzc2luZyBpZGVudGlmaWVyCisjIHJlbWFyayAjNTkzOiB2YXJpYWJsZSAiY3Vyc19zYl9sZWZ0X2Fycm93IiB3YXMgc2V0IGJ1dCBuZXZlciB1c2VkCisjIHJlbWFyayAjODEwOiBjb252ZXJzaW9uIGZyb20gImludCIgdG8gIkRpbWVuc2lvbj17dW5zaWduZWQgc2hvcnR9IiBtYXkgbG9zZSBzaWduaWZpY2FudCBiaXRzCisjIHJlbWFyayAjODY5OiBwYXJhbWV0ZXIgInR3IiB3YXMgbmV2ZXIgcmVmZXJlbmNlZAorIyByZW1hcmsgIzk4MTogb3BlcmFuZHMgYXJlIGV2YWx1YXRlZCBpbiB1bnNwZWNpZmllZCBvcmRlcgorIyB3YXJuaW5nICMyNzk6IGNvbnRyb2xsaW5nIGV4cHJlc3Npb24gaXMgY29uc3RhbnQKKworCUFDX0NIRUNLSU5HKFtmb3IgJENDIHdhcm5pbmcgb3B0aW9uc10pCisJY2Zfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisJRVhUUkFfQ0ZMQUdTPSItV2FsbCIKKwlmb3IgY2Zfb3B0IGluIFwKKwkJd2QxNDE5IFwKKwkJd2QxNjgzIFwKKwkJd2QxNjg0IFwKKwkJd2QxOTMgXAorCQl3ZDU5MyBcCisJCXdkMjc5IFwKKwkJd2Q4MTAgXAorCQl3ZDg2OSBcCisJCXdkOTgxCisJZG8KKwkJQ0ZMQUdTPSIkY2Zfc2F2ZV9DRkxBR1MgJEVYVFJBX0NGTEFHUyAtJGNmX29wdCIKKwkJaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKwkJCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBBQ19NU0dfUkVTVUxUKC4uLiAtJGNmX29wdCkKKwkJCUVYVFJBX0NGTEFHUz0iJEVYVFJBX0NGTEFHUyAtJGNmX29wdCIKKwkJZmkKKwlkb25lCisJQ0ZMQUdTPSIkY2Zfc2F2ZV9DRkxBR1MiCisKK2VsaWYgdGVzdCAiJEdDQyIgPSB5ZXMKK3RoZW4KKwlBQ19DSEVDS0lORyhbZm9yICRDQyB3YXJuaW5nIG9wdGlvbnNdKQorCWNmX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorCUVYVFJBX0NGTEFHUz0KKwljZl93YXJuX0NPTlNUPSIiCisJdGVzdCAiJHdpdGhfZXh0X2NvbnN0IiA9IHllcyAmJiBjZl93YXJuX0NPTlNUPSJXd3JpdGUtc3RyaW5ncyIKKwljZl9nY2Nfd2FybmluZ3M9IldpZ25vcmVkLXF1YWxpZmllcnMgV2xvZ2ljYWwtb3AgV3ZhcmFyZ3MiCisJdGVzdCAieCRDTEFOR19DT01QSUxFUiIgPSB4eWVzICYmIGNmX2djY193YXJuaW5ncz0KKwlmb3IgY2Zfb3B0IGluIFcgV2FsbCBcCisJCVdiYWQtZnVuY3Rpb24tY2FzdCBcCisJCVdjYXN0LWFsaWduIFwKKwkJV2Nhc3QtcXVhbCBcCisJCVdkZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQgXAorCQlXZXh0cmEgXAorCQlXaW5saW5lIFwKKwkJV21pc3NpbmctZGVjbGFyYXRpb25zIFwKKwkJV21pc3NpbmctcHJvdG90eXBlcyBcCisJCVduZXN0ZWQtZXh0ZXJucyBcCisJCVdwb2ludGVyLWFyaXRoIFwKKwkJV3NoYWRvdyBcCisJCVdzdHJpY3QtcHJvdG90eXBlcyBcCisJCVd1bmRlZiAkY2ZfZ2NjX3dhcm5pbmdzICRjZl93YXJuX0NPTlNUICQxCisJZG8KKwkJQ0ZMQUdTPSIkY2Zfc2F2ZV9DRkxBR1MgJEVYVFJBX0NGTEFHUyAtJGNmX29wdCIKKwkJaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKwkJCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBBQ19NU0dfUkVTVUxUKC4uLiAtJGNmX29wdCkKKwkJCWNhc2UgJGNmX29wdCBpbgorCQkJKFdjYXN0LXF1YWwpCisJCQkJQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRFhUU1RSSU5HREVGSU5FUyIKKwkJCQk7OworCQkJKFdpbmxpbmUpCisJCQkJY2FzZSAkR0NDX1ZFUlNJT04gaW4KKwkJCQkoW1szNF1dLiopCisJCQkJCUNGX1ZFUkJPU0UoZmVhdHVyZSBpcyBicm9rZW4gaW4gZ2NjICRHQ0NfVkVSU0lPTikKKwkJCQkJY29udGludWU7OworCQkJCWVzYWMKKwkJCQk7OworCQkJKFdwb2ludGVyLWFyaXRoKQorCQkJCWNhc2UgJEdDQ19WRVJTSU9OIGluCisJCQkJKFtbMTJdXS4qKQorCQkJCQlDRl9WRVJCT1NFKGZlYXR1cmUgaXMgYnJva2VuIGluIGdjYyAkR0NDX1ZFUlNJT04pCisJCQkJCWNvbnRpbnVlOzsKKwkJCQllc2FjCisJCQkJOzsKKwkJCWVzYWMKKwkJCUVYVFJBX0NGTEFHUz0iJEVYVFJBX0NGTEFHUyAtJGNmX29wdCIKKwkJZmkKKwlkb25lCisJQ0ZMQUdTPSIkY2Zfc2F2ZV9DRkxBR1MiCitmaQorcm0gLXJmIGNvbmZ0ZXN0KgorCitBQ19TVUJTVChFWFRSQV9DRkxBR1MpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0dOQVRQUkVQX09QVF9UIHZlcnNpb246IDEgdXBkYXRlZDogMjAxNC8wOC8wMiAxODozNzoyNQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbQ0ZfR05BVFBSRVBfT1BUX1RdLFsKK0FDX0NBQ0hFX0NIRUNLKGlmIEdOQVRQUkVQIHN1cHBvcnRzIC1UIG9wdGlvbixjZl9jdl9nbmF0cHJlcF9vcHRfdCxbCitjZl9jdl9nbmF0cHJlcF9vcHRfdD1ubworZ25hdHByZXAgLVQgMj4vZGV2L251bGwgPi9kZXYvbnVsbCAmJiBjZl9jdl9nbmF0cHJlcF9vcHRfdD15ZXMKK10pCit0ZXN0ICIkY2ZfY3ZfZ25hdHByZXBfb3B0X3QiID0geWVzICYmIEdOQVRQUkVQX09QVFM9Ii1UICRHTkFUUFJFUF9PUFRTIgorQUNfU1VCU1QoR05BVFBSRVBfT1BUUykKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfR05BVF9HRU5FUklDUyB2ZXJzaW9uOiAzIHVwZGF0ZWQ6IDIwMTUvMDQvMTcgMjE6MTM6MDQKK2RubCAtLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbQ0ZfR05BVF9HRU5FUklDU10sCitbCitBQ19SRVFVSVJFKFtDRl9HTkFUX1ZFUlNJT05dKQorCitBQ19NU0dfQ0hFQ0tJTkcoaWYgR05BVCBzdXBwb3J0cyBnZW5lcmljcykKK2Nhc2UgJGNmX2duYXRfdmVyc2lvbiBpbgorKDMuW1sxLTldXSp8W1s0LTldXS4qKQorCWNmX2duYXRfZ2VuZXJpY3M9eWVzCisJOzsKKygqKQorCWNmX2duYXRfZ2VuZXJpY3M9bm8KKwk7OworZXNhYworQUNfTVNHX1JFU1VMVCgkY2ZfZ25hdF9nZW5lcmljcykKKworaWYgdGVzdCAiJGNmX2duYXRfZ2VuZXJpY3MiID0geWVzCit0aGVuCisJY2ZfY29tcGlsZV9nZW5lcmljcz1nZW5lcmljcworCWNmX2dlbmVyaWNfb2JqZWN0cz0iXCR7R0VOT0JKU30iCitlbHNlCisJY2ZfY29tcGlsZV9nZW5lcmljcz0KKwljZl9nZW5lcmljX29iamVjdHM9CitmaQorCitBQ19TVUJTVChjZl9jb21waWxlX2dlbmVyaWNzKQorQUNfU1VCU1QoY2ZfZ2VuZXJpY19vYmplY3RzKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9HTkFUX1BST0pFQ1RTIHZlcnNpb246IDggdXBkYXRlZDogMjAxNS8wNC8xNyAyMToxMzowNAorZG5sIC0tLS0tLS0tLS0tLS0tLS0KK2RubCBHTkFUIHByb2plY3RzIGFyZSBjb25maWd1cmVkIHdpdGggIi5ncHIiIHByb2plY3QgZmlsZXMuCitkbmwgR05BVCBsaWJyYXJpZXMgYXJlIGEgZnVydGhlciBkZXZlbG9wbWVudCwgdXNpbmcgdGhlIHByb2plY3QgZmVhdHVyZS4KK0FDX0RFRlVOKFtDRl9HTkFUX1BST0pFQ1RTXSwKK1sKK0FDX1JFUVVJUkUoW0NGX0dOQVRfVkVSU0lPTl0pCitBQ19SRVFVSVJFKFtDRl9ESVNBQkxFX0dOQVRfUFJPSkVDVFNdKQorCitjZl9nbmF0X2xpYnJhcmllcz1ubworY2ZfZ25hdF9wcm9qZWN0cz1ubworCitpZiB0ZXN0ICIkZW5hYmxlX2duYXRfcHJvamVjdHMiICE9IG5vIDsgdGhlbgorQUNfTVNHX0NIRUNLSU5HKGlmIEdOQVQgc3VwcG9ydHMgcHJvamVjdCBmaWxlcykKK2Nhc2UgJGNmX2duYXRfdmVyc2lvbiBpbgorKDMuW1swLTldXSopCisJOzsKKygqKQorCWNhc2UgJGNmX2N2X3N5c3RlbV9uYW1lIGluCisJKGN5Z3dpbip8bXN5cyopCisJCTs7CisJKCopCisJCW1rZGlyIGNvbmZ0ZXN0LnNyYyBjb25mdGVzdC5iaW4gY29uZnRlc3QubGliCisJCWNkIGNvbmZ0ZXN0LnNyYworCQlybSAtcmYgY29uZnRlc3QqICp+Y29uZnRlc3QqCisJCWNhdCA+PmxpYnJhcnkuZ3ByIDw8Q0ZfRU9GCitwcm9qZWN0IExpYnJhcnkgaXMKKyAgS2luZCA6PSBFeHRlcm5hbCAoIkxJQl9LSU5EIik7CisgIGZvciBMaWJyYXJ5X05hbWUgdXNlICJDb25mVGVzdCI7CisgIGZvciBPYmplY3RfRGlyIHVzZSAiLiI7CisgIGZvciBMaWJyYXJ5X0FMSV9EaXIgdXNlIEV4dGVybmFsKCJMSUJSQVJZX0RJUiIpOworICBmb3IgTGlicmFyeV9WZXJzaW9uIHVzZSBFeHRlcm5hbCAoIlNPTkFNRSIpOworICBmb3IgTGlicmFyeV9LaW5kIHVzZSBLaW5kOworICBmb3IgTGlicmFyeV9EaXIgdXNlIEV4dGVybmFsKCJCVUlMRF9ESVIiKTsKKyAgU291cmNlX0RpciA6PSBFeHRlcm5hbCAoIlNPVVJDRV9ESVIiKTsKKyAgZm9yIFNvdXJjZV9EaXJzIHVzZSAoU291cmNlX0Rpcik7CitlbmQgTGlicmFyeTsKK0NGX0VPRgorCQljYXQgPj5jb25mcGFja2FnZS5hZHMgPDxDRl9FT0YKK3BhY2thZ2UgQ29uZlBhY2thZ2UgaXMKKyAgIHByb2NlZHVyZSBjb25mdGVzdDsKK2VuZCBDb25mUGFja2FnZTsKK0NGX0VPRgorCQljYXQgPj5jb25mcGFja2FnZS5hZGIgPDxDRl9FT0YKK3dpdGggVGV4dF9JTzsKK3BhY2thZ2UgYm9keSBDb25mUGFja2FnZSBpcworICAgcHJvY2VkdXJlIGNvbmZ0ZXN0IGlzCisgICBiZWdpbgorICAgICAgVGV4dF9JTy5QdXQgKCJIZWxsbyBXb3JsZCIpOworICAgICAgVGV4dF9JTy5OZXdfTGluZTsKKyAgIGVuZCBjb25mdGVzdDsKK2VuZCBDb25mUGFja2FnZTsKK0NGX0VPRgorCQlpZiAoICRjZl9hZGFfbWFrZSAkQURBRkxBR1MgXAorCQkJCS1QbGlicmFyeS5ncHIgXAorCQkJCS1YQlVJTERfRElSPWBjZCAuLi9jb25mdGVzdC5iaW47cHdkYCBcCisJCQkJLVhMSUJSQVJZX0RJUj1gY2QgLi4vY29uZnRlc3QubGliO3B3ZGAgXAorCQkJCS1YU09VUkNFX0RJUj1gcHdkYCBcCisJCQkJLVhTT05BTUU9bGliQ29uZlRlc3Quc28uMSBcCisJCQkJLVhMSUJfS0lORD1zdGF0aWMgMT4mQUNfRkRfQ0MgMj4mMSApIDsgdGhlbgorCQkJY2ZfZ25hdF9wcm9qZWN0cz15ZXMKKwkJZmkKKwkJY2QgLi4KKwkJaWYgdGVzdCAtZiBjb25mdGVzdC5saWIvY29uZnBhY2thZ2UuYWxpCisJCXRoZW4KKwkJCWNmX2duYXRfbGlicmFyaWVzPXllcworCQlmaQorCQlybSAtcmYgY29uZnRlc3QqICp+Y29uZnRlc3QqCisJCTs7CisJZXNhYworCTs7Citlc2FjCitBQ19NU0dfUkVTVUxUKCRjZl9nbmF0X3Byb2plY3RzKQorZmkgIyBlbmFibGVfZ25hdF9wcm9qZWN0cworCitpZiB0ZXN0ICRjZl9nbmF0X3Byb2plY3RzID0geWVzCit0aGVuCisJQUNfTVNHX0NIRUNLSU5HKGlmIEdOQVQgc3VwcG9ydHMgbGlicmFyaWVzKQorCUFDX01TR19SRVNVTFQoJGNmX2duYXRfbGlicmFyaWVzKQorZmkKKworaWYgdGVzdCAiJGNmX2duYXRfcHJvamVjdHMiID0geWVzCit0aGVuCisJVVNFX09MRF9NQUtFUlVMRVM9IiMiCisJVVNFX0dOQVRfUFJPSkVDVFM9IiIKK2Vsc2UKKwlVU0VfT0xEX01BS0VSVUxFUz0iIgorCVVTRV9HTkFUX1BST0pFQ1RTPSIjIgorZmkKKworaWYgdGVzdCAiJGNmX2duYXRfbGlicmFyaWVzIiA9IHllcwordGhlbgorCVVTRV9HTkFUX0xJQlJBUklFUz0iIgorZWxzZQorCVVTRV9HTkFUX0xJQlJBUklFUz0iIyIKK2ZpCisKK0FDX1NVQlNUKFVTRV9PTERfTUFLRVJVTEVTKQorQUNfU1VCU1QoVVNFX0dOQVRfUFJPSkVDVFMpCitBQ19TVUJTVChVU0VfR05BVF9MSUJSQVJJRVMpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0dOQVRfU0lHSU5UIHZlcnNpb246IDEgdXBkYXRlZDogMjAxMS8wMy8yNyAyMDowNzo1OQorZG5sIC0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgaWYgZ25hdCBzdXBwb3J0cyBTSUdJTlQsIGFuZCBwcmVzdW1hYmx5IHRhc2tpbmcuICBGb3IgdGhlIGxhdHRlciwgaXQKK2RubCBpcyBub3RlZCB0aGF0IGduYXQgbWF5IGNvbXBpbGUgYSB0YXNraW5nIHVuaXQgZXZlbiBmb3IgY29uZmlndXJhdGlvbnMgd2hpY2gKK2RubCBmYWlsIGF0IHJ1bnRpbWUuCitBQ19ERUZVTihbQ0ZfR05BVF9TSUdJTlRdLFsKK0FDX0NBQ0hFX0NIRUNLKGlmIEdOQVQgc3VwcG9ydHMgU0lHSU5ULGNmX2N2X2duYXRfc2lnaW50LFsKK0NGX0dOQVRfVFJZX0xJTksoW3dpdGggQWRhLkludGVycnVwdHMuTmFtZXM7CisKK3BhY2thZ2UgQ29uZlRlc3QgaXMKKworICAgcHJhZ21hIFdhcm5pbmdzIChPZmYpOyAgLS0gIHRoZSBuZXh0IHByYWdtYSBleGlzdHMgc2luY2UgMy4xMXAKKyAgIHByYWdtYSBVbnJlc2VydmVfQWxsX0ludGVycnVwdHM7CisgICBwcmFnbWEgV2FybmluZ3MgKE9uKTsKKworICAgcHJvdGVjdGVkIFByb2Nlc3MgaXMKKyAgICAgIHByb2NlZHVyZSBTdG9wOworICAgICAgZnVuY3Rpb24gQ29udGludWUgcmV0dXJuIEJvb2xlYW47CisgICAgICBwcmFnbWEgQXR0YWNoX0hhbmRsZXIgKFN0b3AsIEFkYS5JbnRlcnJ1cHRzLk5hbWVzLlNJR0lOVCk7CisgICBwcml2YXRlCisgICAgICBEb25lIDogQm9vbGVhbiA6PSBGYWxzZTsKKyAgIGVuZCBQcm9jZXNzOworCitlbmQgQ29uZlRlc3Q7XSwKK1twYWNrYWdlIGJvZHkgQ29uZlRlc3QgaXMKKyAgIHByb3RlY3RlZCBib2R5IFByb2Nlc3MgaXMKKyAgICAgIHByb2NlZHVyZSBTdG9wIGlzCisgICAgICBiZWdpbgorICAgICAgICAgRG9uZSA6PSBUcnVlOworICAgICAgZW5kIFN0b3A7CisgICAgICBmdW5jdGlvbiBDb250aW51ZSByZXR1cm4gQm9vbGVhbiBpcworICAgICAgYmVnaW4KKyAgICAgICAgIHJldHVybiBub3QgRG9uZTsKKyAgICAgIGVuZCBDb250aW51ZTsKKyAgIGVuZCBQcm9jZXNzOworZW5kIENvbmZUZXN0O10sCisJW2NmX2N2X2duYXRfc2lnaW50PXllc10sCisJW2NmX2N2X2duYXRfc2lnaW50PW5vXSldKQorCitpZiB0ZXN0ICRjZl9jdl9nbmF0X3NpZ2ludCA9IHllcyA7IHRoZW4KKwlVU0VfR05BVF9TSUdJTlQ9IiIKK2Vsc2UKKwlVU0VfR05BVF9TSUdJTlQ9IiMiCitmaQorQUNfU1VCU1QoVVNFX0dOQVRfU0lHSU5UKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9HTkFUX1RSWV9MSU5LIHZlcnNpb246IDMgdXBkYXRlZDogMjAxMS8wMy8xOSAxNDo0Nzo0NQorZG5sIC0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZnkgdGhhdCBhIHRlc3QgcHJvZ3JhbSBjb21waWxlcy9saW5rcyB3aXRoIEdOQVQuCitkbmwgJGNmX2FkYV9tYWtlIGlzIHNldCB0byB0aGUgcHJvZ3JhbSB0aGF0IGNvbXBpbGVzL2xpbmtzCitkbmwgJEFEQUZMQUdTIG1heSBiZSBzZXQgdG8gdGhlIEdOQVQgZmxhZ3MuCitkbmwKK2RubCAkMSBpcyB0aGUgdGV4dCBvZiB0aGUgc3BlYworZG5sICQyIGlzIHRoZSB0ZXh0IG9mIHRoZSBib2R5CitkbmwgJDMgaXMgdGhlIHNoZWxsIGNvbW1hbmQgdG8gZXhlY3V0ZSBpZiBzdWNjZXNzZnVsCitkbmwgJDQgaXMgdGhlIHNoZWxsIGNvbW1hbmQgdG8gZXhlY3V0ZSBpZiBub3Qgc3VjY2Vzc2Z1bAorQUNfREVGVU4oW0NGX0dOQVRfVFJZX0xJTktdLAorWworcm0gLXJmIGNvbmZ0ZXN0KiAqfmNvbmZ0ZXN0KgorY2F0ID4+Y29uZnRlc3QuYWRzIDw8Q0ZfRU9GCiskMQorQ0ZfRU9GCitjYXQgPj5jb25mdGVzdC5hZGIgPDxDRl9FT0YKKyQyCitDRl9FT0YKK2lmICggJGNmX2FkYV9tYWtlICRBREFGTEFHUyBjb25mdGVzdCAxPiZBQ19GRF9DQyAyPiYxICkgOyB0aGVuCitpZmVsc2UoJDMsLCAgICAgIDosWyAgICAgICQzXSkKK2lmZWxzZSgkNCwsLFtlbHNlCisgICAkNF0pCitmaQorcm0gLXJmIGNvbmZ0ZXN0KiAqfmNvbmZ0ZXN0KgorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9HTkFUX1RSWV9SVU4gdmVyc2lvbjogNSB1cGRhdGVkOiAyMDExLzAzLzE5IDE0OjQ3OjQ1CitkbmwgLS0tLS0tLS0tLS0tLS0tCitkbmwgVmVyaWZ5IHRoYXQgYSB0ZXN0IHByb2dyYW0gY29tcGlsZXMgYW5kIHJ1bnMgd2l0aCBHTkFUCitkbmwgJGNmX2FkYV9tYWtlIGlzIHNldCB0byB0aGUgcHJvZ3JhbSB0aGF0IGNvbXBpbGVzL2xpbmtzCitkbmwgJEFEQUZMQUdTIG1heSBiZSBzZXQgdG8gdGhlIEdOQVQgZmxhZ3MuCitkbmwKK2RubCAkMSBpcyB0aGUgdGV4dCBvZiB0aGUgc3BlYworZG5sICQyIGlzIHRoZSB0ZXh0IG9mIHRoZSBib2R5CitkbmwgJDMgaXMgdGhlIHNoZWxsIGNvbW1hbmQgdG8gZXhlY3V0ZSBpZiBzdWNjZXNzZnVsCitkbmwgJDQgaXMgdGhlIHNoZWxsIGNvbW1hbmQgdG8gZXhlY3V0ZSBpZiBub3Qgc3VjY2Vzc2Z1bAorQUNfREVGVU4oW0NGX0dOQVRfVFJZX1JVTl0sCitbCitybSAtcmYgY29uZnRlc3QqICp+Y29uZnRlc3QqCitjYXQgPj5jb25mdGVzdC5hZHMgPDxDRl9FT0YKKyQxCitDRl9FT0YKK2NhdCA+PmNvbmZ0ZXN0LmFkYiA8PENGX0VPRgorJDIKK0NGX0VPRgoraWYgKCAkY2ZfYWRhX21ha2UgJEFEQUZMQUdTIGNvbmZ0ZXN0IDE+JkFDX0ZEX0NDIDI+JjEgKSA7IHRoZW4KKyAgIGlmICggLi9jb25mdGVzdCAxPiZBQ19GRF9DQyAyPiYxICkgOyB0aGVuCitpZmVsc2UoJDMsLCAgICAgIDosWyAgICAgICQzXSkKK2lmZWxzZSgkNCwsLFsgICBlbHNlCisgICAgICAkNF0pCisgICBmaQoraWZlbHNlKCQ0LCwsW2Vsc2UKKyAgICQ0XSkKK2ZpCitybSAtcmYgY29uZnRlc3QqICp+Y29uZnRlc3QqCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0dOQVRfVkVSU0lPTiB2ZXJzaW9uOiAyMCB1cGRhdGVkOiAyMDE1LzA0LzE4IDA4OjU2OjU3CitkbmwgLS0tLS0tLS0tLS0tLS0tCitkbmwgVmVyaWZ5IHZlcnNpb24gb2YgR05BVC4KK0FDX0RFRlVOKFtDRl9HTkFUX1ZFUlNJT05dLAorWworQUNfTVNHX0NIRUNLSU5HKGZvciBnbmF0IHZlcnNpb24pCitjZl9nbmF0X3ZlcnNpb249YCR7Y2ZfYWRhX21ha2U6LWduYXRtYWtlfSAtdiAyPiYxIHwgXAorCWdyZXAgJ1tbMC05XV0uW1swLTldXVtbMC05XV0qJyB8XAorCXNlZCAtZSAnMiwkZCcgLWUgJ3MvW1teMC05IFwuXV0vL2cnIC1lICdzL15bWyBdXSovLycgLWUgJ3MvIC4qLy8nYAorQUNfTVNHX1JFU1VMVCgkY2ZfZ25hdF92ZXJzaW9uKQorCitjYXNlICRjZl9nbmF0X3ZlcnNpb24gaW4KKygzLjFbWzEtOV1dKnwzLltbMi05XV0qfFtbNC05XV0uKnwyMFtbMC05XV1bWzAtOV1dKQorCWNmX2N2X3Byb2dfZ25hdF9jb3JyZWN0PXllcworCTs7CisoKikKKwlBQ19NU0dfV0FSTihVbnN1cHBvcnRlZCBHTkFUIHZlcnNpb24gJGNmX2duYXRfdmVyc2lvbi4gV2UgcmVxdWlyZSAzLjExIG9yIGJldHRlci4gRGlzYWJsaW5nIEFkYTk1IGJpbmRpbmcuKQorCWNmX2N2X3Byb2dfZ25hdF9jb3JyZWN0PW5vCisJOzsKK2VzYWMKK10pCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfR05VX1NPVVJDRSB2ZXJzaW9uOiA2IHVwZGF0ZWQ6IDIwMDUvMDcvMDkgMTM6MjM6MDcKK2RubCAtLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgaWYgd2UgbXVzdCBkZWZpbmUgX0dOVV9TT1VSQ0UgdG8gZ2V0IGEgcmVhc29uYWJsZSB2YWx1ZSBmb3IKK2RubCBfWE9QRU5fU09VUkNFLCB1cG9uIHdoaWNoIG1hbnkgUE9TSVggZGVmaW5pdGlvbnMgZGVwZW5kLiAgVGhpcyBpcyBhIGRlZmVjdAorZG5sIChvciBtaXNmZWF0dXJlKSBvZiBnbGliYzIsIHdoaWNoIGJyZWFrcyBwb3J0YWJpbGl0eSBvZiBtYW55IGFwcGxpY2F0aW9ucywKK2RubCBzaW5jZSBpdCBpcyBpbnRlcndvdmVuIHdpdGggR05VIGV4dGVuc2lvbnMuCitkbmwKK2RubCBXZWxsLCB5ZXMgd2UgY291bGQgd29yayBhcm91bmQgaXQuLi4KK0FDX0RFRlVOKFtDRl9HTlVfU09VUkNFXSwKK1sKK0FDX0NBQ0hFX0NIRUNLKGlmIHdlIG11c3QgZGVmaW5lIF9HTlVfU09VUkNFLGNmX2N2X2dudV9zb3VyY2UsWworQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD5dLFsKKyNpZm5kZWYgX1hPUEVOX1NPVVJDRQorbWFrZSBhbiBlcnJvcgorI2VuZGlmXSwKKwlbY2ZfY3ZfZ251X3NvdXJjZT1ub10sCisJW2NmX3NhdmU9IiRDUFBGTEFHUyIKKwkgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRF9HTlVfU09VUkNFIgorCSBBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHN5cy90eXBlcy5oPl0sWworI2lmZGVmIF9YT1BFTl9TT1VSQ0UKK21ha2UgYW4gZXJyb3IKKyNlbmRpZl0sCisJW2NmX2N2X2dudV9zb3VyY2U9bm9dLAorCVtjZl9jdl9nbnVfc291cmNlPXllc10pCisJQ1BQRkxBR1M9IiRjZl9zYXZlIgorCV0pCitdKQordGVzdCAiJGNmX2N2X2dudV9zb3VyY2UiID0geWVzICYmIENQUEZMQUdTPSIkQ1BQRkxBR1MgLURfR05VX1NPVVJDRSIKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfSEVBREVSX1BBVEggdmVyc2lvbjogMTMgdXBkYXRlZDogMjAxNS8wNC8xNSAxOTowODo0OAorZG5sIC0tLS0tLS0tLS0tLS0tCitkbmwgQ29uc3RydWN0IGEgc2VhcmNoLWxpc3Qgb2YgZGlyZWN0b3JpZXMgZm9yIGEgbm9uc3RhbmRhcmQgaGVhZGVyLWZpbGUKK2RubAorZG5sIFBhcmFtZXRlcnMKK2RubAkkMSA9IHRoZSB2YXJpYWJsZSB0byByZXR1cm4gYXMgcmVzdWx0CitkbmwJJDIgPSB0aGUgcGFja2FnZSBuYW1lCitBQ19ERUZVTihbQ0ZfSEVBREVSX1BBVEhdLAorWworJDE9CisKKyMgY29sbGVjdCB0aGUgY3VycmVudCBzZXQgb2YgaW5jbHVkZS1kaXJlY3RvcmllcyBmcm9tIGNvbXBpbGVyIGZsYWdzCitjZl9oZWFkZXJfcGF0aF9saXN0PSIiCitpZiB0ZXN0IC1uICIke0NGTEFHU30ke0NQUEZMQUdTfSIgOyB0aGVuCisJZm9yIGNmX2hlYWRlcl9wYXRoIGluICRDUFBGTEFHUyAkQ0ZMQUdTCisJZG8KKwkJY2FzZSAkY2ZfaGVhZGVyX3BhdGggaW4KKwkJKC1JKikKKwkJCWNmX2hlYWRlcl9wYXRoPWBlY2hvICIuJGNmX2hlYWRlcl9wYXRoIiB8c2VkIC1lICdzL14uLi4vLycgLWUgJ3MsL2luY2x1ZGUkLCwnYAorCQkJQ0ZfQUREX1NVQkRJUl9QQVRIKCQxLCQyLGluY2x1ZGUsJGNmX2hlYWRlcl9wYXRoLE5PTkUpCisJCQljZl9oZWFkZXJfcGF0aF9saXN0PSIkY2ZfaGVhZGVyX3BhdGhfbGlzdCBbJF0kMSIKKwkJCTs7CisJCWVzYWMKKwlkb25lCitmaQorCisjIGFkZCB0aGUgdmFyaWF0aW9ucyBmb3IgdGhlIHBhY2thZ2Ugd2UgYXJlIGxvb2tpbmcgZm9yCitDRl9TVUJESVJfUEFUSCgkMSwkMixpbmNsdWRlKQorCit0ZXN0ICIkaW5jbHVkZWRpciIgIT0gTk9ORSAmJiBcCit0ZXN0ICIkaW5jbHVkZWRpciIgIT0gIi91c3IvaW5jbHVkZSIgJiYgXAordGVzdCAtZCAiJGluY2x1ZGVkaXIiICYmIHsKKwl0ZXN0IC1kICRpbmNsdWRlZGlyICYmICAgICQxPSJbJF0kMSAkaW5jbHVkZWRpciIKKwl0ZXN0IC1kICRpbmNsdWRlZGlyLyQyICYmICQxPSJbJF0kMSAkaW5jbHVkZWRpci8kMiIKK30KKwordGVzdCAiJG9sZGluY2x1ZGVkaXIiICE9IE5PTkUgJiYgXAordGVzdCAiJG9sZGluY2x1ZGVkaXIiICE9ICIvdXNyL2luY2x1ZGUiICYmIFwKK3Rlc3QgLWQgIiRvbGRpbmNsdWRlZGlyIiAmJiB7CisJdGVzdCAtZCAkb2xkaW5jbHVkZWRpciAgICAmJiAkMT0iWyRdJDEgJG9sZGluY2x1ZGVkaXIiCisJdGVzdCAtZCAkb2xkaW5jbHVkZWRpci8kMiAmJiAkMT0iWyRdJDEgJG9sZGluY2x1ZGVkaXIvJDIiCit9CisKKyQxPSJbJF0kMSAkY2ZfaGVhZGVyX3BhdGhfbGlzdCIKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfSEVMUF9NRVNTQUdFIHZlcnNpb246IDMgdXBkYXRlZDogMTk5OC8wMS8xNCAxMDo1NjoyMworZG5sIC0tLS0tLS0tLS0tLS0tLQorZG5sIEluc2VydCB0ZXh0IGludG8gdGhlIGhlbHAtbWVzc2FnZSwgZm9yIHJlYWRhYmlsaXR5LCBmcm9tIEFDX0FSR19XSVRILgorQUNfREVGVU4oW0NGX0hFTFBfTUVTU0FHRV0sCitbQUNfRElWRVJUX0hFTFAoWyQxXSlkbmwKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfSU5DTFVERV9ESVJTIHZlcnNpb246IDEwIHVwZGF0ZWQ6IDIwMTQvMDkvMTkgMjA6NTg6NDIKK2RubCAtLS0tLS0tLS0tLS0tLS0KK2RubCBDb25zdHJ1Y3QgdGhlIGxpc3Qgb2YgaW5jbHVkZS1vcHRpb25zIGFjY29yZGluZyB0byB3aGV0aGVyIHdlJ3JlIGJ1aWxkaW5nCitkbmwgaW4gdGhlIHNvdXJjZSBkaXJlY3Rvcnkgb3IgdXNpbmcgJy0tc3JjZGlyPURJUicgb3B0aW9uLgorQUNfREVGVU4oW0NGX0lOQ0xVREVfRElSU10sCitbCitpZiB0ZXN0ICIkc3JjZGlyIiAhPSAiLiI7IHRoZW4KKwlDUFBGTEFHUz0iLUlcJHtzcmNkaXJ9Ly4uL2luY2x1ZGUgJENQUEZMQUdTIgorZmkKK0NQUEZMQUdTPSItSS4uL2luY2x1ZGUgJENQUEZMQUdTIgoraWYgdGVzdCAiJHNyY2RpciIgIT0gIi4iOyB0aGVuCisJQ1BQRkxBR1M9Ii1JXCR7c3JjZGlyfSAkQ1BQRkxBR1MiCitmaQorQ1BQRkxBR1M9Ii1JLiAkQ1BQRkxBR1MiCitBQ19TVUJTVChDUFBGTEFHUykKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfSU5URUxfQ09NUElMRVIgdmVyc2lvbjogNyB1cGRhdGVkOiAyMDE1LzA0LzEyIDE1OjM5OjAwCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDaGVjayBpZiB0aGUgZ2l2ZW4gY29tcGlsZXIgaXMgcmVhbGx5IHRoZSBJbnRlbCBjb21waWxlciBmb3IgTGludXguICBJdAorZG5sIHRyaWVzIHRvIGltaXRhdGUgZ2NjLCBidXQgZG9lcyBub3QgcmV0dXJuIGFuIGVycm9yIHdoZW4gaXQgZmluZHMgYSBtaXNtYXRjaAorZG5sIGJldHdlZW4gcHJvdG90eXBlcywgZS5nLiwgYXMgZXhlcmNpc2VkIGJ5IENGX01JU1NJTkdfQ0hFQ0suCitkbmwKK2RubCBUaGlzIG1hY3JvIHNob3VsZCBiZSBydW4gInNvb24iIGFmdGVyIEFDX1BST0dfQ0Mgb3IgQUNfUFJPR19DUExVU1BMVVMsIHRvCitkbmwgZW5zdXJlIHRoYXQgaXQgaXMgbm90IG1pc3Rha2VuIGZvciBnY2MvZysrLiAgSXQgaXMgbm9ybWFsbHkgaW52b2tlZCBmcm9tCitkbmwgdGhlIHdyYXBwZXJzIGZvciBnY2MgYW5kIGcrKyB3YXJuaW5ncy4KK2RubAorZG5sICQxID0gR0NDIChkZWZhdWx0KSBvciBHWFgKK2RubCAkMiA9IElOVEVMX0NPTVBJTEVSIChkZWZhdWx0KSBvciBJTlRFTF9DUExVU1BMVVMKK2RubCAkMyA9IENGTEFHUyAoZGVmYXVsdCkgb3IgQ1hYRkxBR1MKK0FDX0RFRlVOKFtDRl9JTlRFTF9DT01QSUxFUl0sWworQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKQoraWZlbHNlKFskMl0sLElOVEVMX0NPTVBJTEVSLFskMl0pPW5vCisKK2lmIHRlc3QgIiRpZmVsc2UoWyQxXSwsWyQxXSxHQ0MpIiA9IHllcyA7IHRoZW4KKwljYXNlICRob3N0X29zIGluCisJKGxpbnV4KnxnbnUqKQorCQlBQ19NU0dfQ0hFQ0tJTkcoaWYgdGhpcyBpcyByZWFsbHkgSW50ZWwgaWZlbHNlKFskMV0sR1hYLEMrKyxDKSBjb21waWxlcikKKwkJY2Zfc2F2ZV9DRkxBR1M9IiRpZmVsc2UoWyQzXSwsQ0ZMQUdTLFskM10pIgorCQlpZmVsc2UoWyQzXSwsQ0ZMQUdTLFskM10pPSIkaWZlbHNlKFskM10sLENGTEFHUyxbJDNdKSAtbm8tZ2NjIgorCQlBQ19UUllfQ09NUElMRShbXSxbCisjaWZkZWYgX19JTlRFTF9DT01QSUxFUgorI2Vsc2UKK21ha2UgYW4gZXJyb3IKKyNlbmRpZgorXSxbaWZlbHNlKFskMl0sLElOVEVMX0NPTVBJTEVSLFskMl0pPXllcworY2Zfc2F2ZV9DRkxBR1M9IiRjZl9zYXZlX0NGTEFHUyAtd2UxNDciCitdLFtdKQorCQlpZmVsc2UoWyQzXSwsQ0ZMQUdTLFskM10pPSIkY2Zfc2F2ZV9DRkxBR1MiCisJCUFDX01TR19SRVNVTFQoJGlmZWxzZShbJDJdLCxJTlRFTF9DT01QSUxFUixbJDJdKSkKKwkJOzsKKwllc2FjCitmaQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9MQVJHRUZJTEUgdmVyc2lvbjogOSB1cGRhdGVkOiAyMDE1LzA0LzE4IDA4OjU2OjU3CitkbmwgLS0tLS0tLS0tLS0tCitkbmwgQWRkIGNoZWNrcyBmb3IgbGFyZ2UgZmlsZSBzdXBwb3J0LgorQUNfREVGVU4oW0NGX0xBUkdFRklMRV0sWworaWZkZWYoW0FDX0ZVTkNfRlNFRUtPXSxbCisJQUNfU1lTX0xBUkdFRklMRQorCWlmIHRlc3QgIiRlbmFibGVfbGFyZ2VmaWxlIiAhPSBubyA7IHRoZW4KKwlBQ19GVU5DX0ZTRUVLTworCisJIyBOb3JtYWxseSB3ZSB3b3VsZCBjb2xsZWN0IHRoZXNlIGRlZmluaXRpb25zIGluIHRoZSBjb25maWcuaCwKKwkjIGJ1dCAobGlrZSBfWE9QRU5fU09VUkNFKSwgc29tZSBlbnZpcm9ubWVudHMgcmVseSBvbiBoYXZpbmcgdGhlc2UKKwkjIGRlZmluZWQgYmVmb3JlIGFueSBvZiB0aGUgc3lzdGVtIGhlYWRlcnMgYXJlIGluY2x1ZGVkLiAgQW5vdGhlcgorCSMgY2FzZSBjb21lcyB1cCB3aXRoIEMrKywgZS5nLiwgb24gQUlYIHRoZSBjb21waWxlciBjb21waWxlcyB0aGUKKwkjIGhlYWRlciBmaWxlcyBieSB0aGVtc2VsdmVzIGJlZm9yZSBsb29raW5nIGF0IHRoZSBib2R5IGZpbGVzIGl0IGlzCisJIyB0b2xkIHRvIGNvbXBpbGUuICBGb3IgbmN1cnNlcywgdGhvc2UgaGVhZGVyIGZpbGVzIGRvIG5vdCBpbmNsdWRlCisJIyB0aGUgY29uZmlnLmgKKwl0ZXN0ICIkYWNfY3Zfc3lzX2xhcmdlX2ZpbGVzIiAgICAgICE9IG5vICYmIENQUEZMQUdTPSIkQ1BQRkxBR1MgLURfTEFSR0VfRklMRVMgIgorCXRlc3QgIiRhY19jdl9zeXNfbGFyZ2VmaWxlX3NvdXJjZSIgIT0gbm8gJiYgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRF9MQVJHRUZJTEVfU09VUkNFICIKKwl0ZXN0ICIkYWNfY3Zfc3lzX2ZpbGVfb2Zmc2V0X2JpdHMiICE9IG5vICYmIENQUEZMQUdTPSIkQ1BQRkxBR1MgLURfRklMRV9PRkZTRVRfQklUUz0kYWNfY3Zfc3lzX2ZpbGVfb2Zmc2V0X2JpdHMgIgorCisJQUNfQ0FDSEVfQ0hFQ0sod2hldGhlciB0byB1c2Ugc3RydWN0IGRpcmVudDY0LCBjZl9jdl9zdHJ1Y3RfZGlyZW50NjQsWworCQlBQ19UUllfQ09NUElMRShbCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8ZGlyZW50Lmg+CisJCV0sWworCQkvKiBpZiB0cmFuc2l0aW9uYWwgbGFyZ2VmaWxlIHN1cHBvcnQgaXMgc2V0dXAsIHRoaXMgaXMgdHJ1ZSAqLworCQlleHRlcm4gc3RydWN0IGRpcmVudDY0ICogcmVhZGRpcihESVIgKik7CisJCXN0cnVjdCBkaXJlbnQ2NCAqeCA9IHJlYWRkaXIoKERJUiAqKTApOworCQlzdHJ1Y3QgZGlyZW50ICp5ID0gcmVhZGRpcigoRElSICopMCk7CisJCWludCB6ID0geCAtIHk7CisJCV0sCisJCVtjZl9jdl9zdHJ1Y3RfZGlyZW50NjQ9eWVzXSwKKwkJW2NmX2N2X3N0cnVjdF9kaXJlbnQ2ND1ub10pCisJXSkKKwl0ZXN0ICIkY2ZfY3Zfc3RydWN0X2RpcmVudDY0IiA9IHllcyAmJiBBQ19ERUZJTkUoSEFWRV9TVFJVQ1RfRElSRU5UNjQsMSxbRGVmaW5lIHRvIDEgaWYgd2UgaGF2ZSBzdHJ1Y3QgZGlyZW50NjRdKQorCWZpCitdKQorXSkKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9MRF9SUEFUSF9PUFQgdmVyc2lvbjogNiB1cGRhdGVkOiAyMDE1LzA0LzEyIDE1OjM5OjAwCitkbmwgLS0tLS0tLS0tLS0tLS0tCitkbmwgRm9yIHRoZSBnaXZlbiBzeXN0ZW0gYW5kIGNvbXBpbGVyLCBmaW5kIHRoZSBjb21waWxlciBmbGFncyB0byBwYXNzIHRvIHRoZQorZG5sIGxvYWRlciB0byB1c2UgdGhlICJycGF0aCIgZmVhdHVyZS4KK0FDX0RFRlVOKFtDRl9MRF9SUEFUSF9PUFRdLAorWworQUNfUkVRVUlSRShbQ0ZfQ0hFQ0tfQ0FDSEVdKQorCitMRF9SUEFUSF9PUFQ9CitBQ19NU0dfQ0hFQ0tJTkcoZm9yIGFuIHJwYXRoIG9wdGlvbikKK2Nhc2UgJGNmX2N2X3N5c3RlbV9uYW1lIGluCisoaXJpeCopCisJaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwkJTERfUlBBVEhfT1BUPSItV2wsLXJwYXRoLCIKKwllbHNlCisJCUxEX1JQQVRIX09QVD0iLXJwYXRoICIKKwlmaQorCTs7CisobGludXgqfGdudSp8aypic2QqLWdudSkKKwlMRF9SUEFUSF9PUFQ9Ii1XbCwtcnBhdGgsIgorCTs7Cisob3BlbmJzZFtbMi05XV0uKnxtaXJic2QqKQorCUxEX1JQQVRIX09QVD0iLVdsLC1ycGF0aCwiCisJOzsKKyhkcmFnb25mbHkqfGZyZWVic2QqKQorCUxEX1JQQVRIX09QVD0iLXJwYXRoICIKKwk7OworKG5ldGJzZCopCisJTERfUlBBVEhfT1BUPSItV2wsLXJwYXRoLCIKKwk7OworKG9zZip8bWxzKyopCisJTERfUlBBVEhfT1BUPSItcnBhdGggIgorCTs7Cisoc29sYXJpczIqKQorCUxEX1JQQVRIX09QVD0iLVIiCisJOzsKKygqKQorCTs7Citlc2FjCitBQ19NU0dfUkVTVUxUKCRMRF9SUEFUSF9PUFQpCisKK2Nhc2UgIngkTERfUlBBVEhfT1BUIiBpbgorKHgtUiopCisJQUNfTVNHX0NIRUNLSU5HKGlmIHdlIG5lZWQgYSBzcGFjZSBhZnRlciBycGF0aCBvcHRpb24pCisJY2Zfc2F2ZV9MSUJTPSIkTElCUyIKKwlDRl9BRERfTElCUygke0xEX1JQQVRIX09QVH0kbGliZGlyKQorCUFDX1RSWV9MSU5LKCwgLCBjZl9ycGF0aF9zcGFjZT1ubywgY2ZfcnBhdGhfc3BhY2U9eWVzKQorCUxJQlM9IiRjZl9zYXZlX0xJQlMiCisJQUNfTVNHX1JFU1VMVCgkY2ZfcnBhdGhfc3BhY2UpCisJdGVzdCAiJGNmX3JwYXRoX3NwYWNlIiA9IHllcyAmJiBMRF9SUEFUSF9PUFQ9IiRMRF9SUEFUSF9PUFQgIgorCTs7Citlc2FjCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0xJQlJBUllfUEFUSCB2ZXJzaW9uOiAxMCB1cGRhdGVkOiAyMDE1LzA0LzE1IDE5OjA4OjQ4CitkbmwgLS0tLS0tLS0tLS0tLS0tCitkbmwgQ29uc3RydWN0IGEgc2VhcmNoLWxpc3Qgb2YgZGlyZWN0b3JpZXMgZm9yIGEgbm9uc3RhbmRhcmQgbGlicmFyeS1maWxlCitkbmwKK2RubCBQYXJhbWV0ZXJzCitkbmwJJDEgPSB0aGUgdmFyaWFibGUgdG8gcmV0dXJuIGFzIHJlc3VsdAorZG5sCSQyID0gdGhlIHBhY2thZ2UgbmFtZQorQUNfREVGVU4oW0NGX0xJQlJBUllfUEFUSF0sCitbCiskMT0KK2NmX2xpYnJhcnlfcGF0aF9saXN0PSIiCitpZiB0ZXN0IC1uICIke0xERkxBR1N9JHtMSUJTfSIgOyB0aGVuCisJZm9yIGNmX2xpYnJhcnlfcGF0aCBpbiAkTERGTEFHUyAkTElCUworCWRvCisJCWNhc2UgJGNmX2xpYnJhcnlfcGF0aCBpbgorCQkoLUwqKQorCQkJY2ZfbGlicmFyeV9wYXRoPWBlY2hvICIuJGNmX2xpYnJhcnlfcGF0aCIgfHNlZCAtZSAncy9eLi4uLy8nIC1lICdzLC9saWIkLCwnYAorCQkJQ0ZfQUREX1NVQkRJUl9QQVRIKCQxLCQyLGxpYiwkY2ZfbGlicmFyeV9wYXRoLE5PTkUpCisJCQljZl9saWJyYXJ5X3BhdGhfbGlzdD0iJGNmX2xpYnJhcnlfcGF0aF9saXN0IFskXSQxIgorCQkJOzsKKwkJZXNhYworCWRvbmUKK2ZpCisKK0NGX1NVQkRJUl9QQVRIKCQxLCQyLGxpYikKKworJDE9IiRjZl9saWJyYXJ5X3BhdGhfbGlzdCBbJF0kMSIKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfTElCX1BSRUZJWCB2ZXJzaW9uOiAxMSB1cGRhdGVkOiAyMDE1LzA0LzE4IDA4OjU2OjU3CitkbmwgLS0tLS0tLS0tLS0tLQorZG5sIENvbXB1dGUgdGhlIGxpYnJhcnktcHJlZml4IGZvciB0aGUgZ2l2ZW4gaG9zdCBzeXN0ZW0KK2RubCAkMSA9IHZhcmlhYmxlIHRvIHNldAorZGVmaW5lKFtDRl9MSUJfUFJFRklYXSwKK1sKKwljYXNlICRjZl9jdl9zeXN0ZW1fbmFtZSBpbgorCShPUy8yKnxvczIqKQorCQlMSUJfUFJFRklYPScnCisJCTs7CisJKCopCUxJQl9QUkVGSVg9J2xpYicKKwkJOzsKKwllc2FjCitpZmVsc2UoJDEsLCxbJDE9JExJQl9QUkVGSVhdKQorCUFDX1NVQlNUKExJQl9QUkVGSVgpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0xJQl9TVUZGSVggdmVyc2lvbjogMjUgdXBkYXRlZDogMjAxNS8wNC8xNyAyMToxMzowNAorZG5sIC0tLS0tLS0tLS0tLS0KK2RubCBDb21wdXRlIHRoZSBsaWJyYXJ5IGZpbGUtc3VmZml4IGZyb20gdGhlIGdpdmVuIG1vZGVsIG5hbWUKK2RubCAkMSA9IG1vZGVsIG5hbWUKK2RubCAkMiA9IHZhcmlhYmxlIHRvIHNldCAodGhlIG5vbWluYWwgbGlicmFyeSBzdWZmaXgpCitkbmwgJDMgPSBkZXBlbmRlbmN5IHZhcmlhYmxlIHRvIHNldCAoYWN0dWFsIGZpbGVuYW1lKQorZG5sIFRoZSB2YXJpYWJsZSAkTElCX1NVRkZJWCwgaWYgc2V0LCBwcmVwZW5kcyB0aGUgdmFyaWFibGUgdG8gc2V0LgorQUNfREVGVU4oW0NGX0xJQl9TVUZGSVhdLAorWworCWNhc2UgWCQxIGluCisJKFhsaWJ0b29sKQorCQkkMj0nLmxhJworCQkkMz1bJF0kMgorCQk7OworCShYZGVidWcpCisJCSQyPSdfZy5hJworCQkkMz1bJF0kMgorCQk7OworCShYcHJvZmlsZSkKKwkJJDI9J19wLmEnCisJCSQzPVskXSQyCisJCTs7CisJKFhzaGFyZWQpCisJCWNhc2UgJGNmX2N2X3N5c3RlbV9uYW1lIGluCisJCShhaXhbWzUtN11dKikKKwkJCSQyPScuc28nCisJCQkkMz1bJF0kMgorCQkJOzsKKwkJKGN5Z3dpbip8bXN5cyp8bWluZ3cqKQorCQkJJDI9Jy5kbGwnCisJCQkkMz0nLmRsbC5hJworCQkJOzsKKwkJKGRhcndpbiopCisJCQkkMj0nLmR5bGliJworCQkJJDM9WyRdJDIKKwkJCTs7CisJCShocHV4KikKKwkJCWNhc2UgJHRhcmdldCBpbgorCQkJKGlhNjQqKQorCQkJCSQyPScuc28nCisJCQkJJDM9WyRdJDIKKwkJCQk7OworCQkJKCopCisJCQkJJDI9Jy5zbCcKKwkJCQkkMz1bJF0kMgorCQkJCTs7CisJCQllc2FjCisJCQk7OworCQkoKikKKwkJCSQyPScuc28nCisJCQkkMz1bJF0kMgorCQkJOzsKKwkJZXNhYworCQk7OworCSgqKQorCQkkMj0nLmEnCisJCSQzPVskXSQyCisJCTs7CisJZXNhYworCWlmIHRlc3QgLW4gIiR7TElCX1NVRkZJWH0ke0VYVFJBX1NVRkZJWH0iCisJdGhlbgorCQkkMj0iJHtMSUJfU1VGRklYfSR7RVhUUkFfU1VGRklYfVskXXskMn0iCisJCSQzPSIke0xJQl9TVUZGSVh9JHtFWFRSQV9TVUZGSVh9WyRdeyQzfSIKKwlmaQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9MSUJfVFlQRSB2ZXJzaW9uOiA1IHVwZGF0ZWQ6IDIwMTUvMDQvMTcgMjE6MTM6MDQKK2RubCAtLS0tLS0tLS0tLQorZG5sIENvbXB1dGUgdGhlIHN0cmluZyB0byBhcHBlbmQgdG8gLWxpYnJhcnkgZnJvbSB0aGUgZ2l2ZW4gbW9kZWwgbmFtZQorZG5sICQxID0gbW9kZWwgbmFtZQorZG5sICQyID0gdmFyaWFibGUgdG8gc2V0CitkbmwgVGhlIHZhcmlhYmxlICRMSUJfU1VGRklYLCBpZiBzZXQsIHByZXBlbmRzIHRoZSB2YXJpYWJsZSB0byBzZXQuCitBQ19ERUZVTihbQ0ZfTElCX1RZUEVdLAorWworCWNhc2UgJDEgaW4KKwkobGlidG9vbCkgJDI9JycgICA7OworCShub3JtYWwpICAkMj0nJyAgIDs7CisJKGRlYnVnKSAgICQyPSdfZycgOzsKKwkocHJvZmlsZSkgJDI9J19wJyA7OworCShzaGFyZWQpICAkMj0nJyAgIDs7CisJZXNhYworCXRlc3QgLW4gIiRMSUJfU1VGRklYIiAmJiAkMj0iJHtMSUJfU1VGRklYfVskXXskMn0iCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0xJTktfREFUQU9OTFkgdmVyc2lvbjogMTAgdXBkYXRlZDogMjAxMi8xMC8wNiAxNzo0MTo1MQorZG5sIC0tLS0tLS0tLS0tLS0tLS0KK2RubCBTb21lIHN5c3RlbXMgaGF2ZSBhIG5vbi1BTlNJIGxpbmtlciB0aGF0IGRvZXNuJ3QgcHVsbCBpbiBtb2R1bGVzIHRoYXQgaGF2ZQorZG5sIG9ubHkgZGF0YSAoaS5lLiwgbm8gZnVuY3Rpb25zKSwgZm9yIGV4YW1wbGUgTmVYVC4gIE9uIHRob3NlIHN5c3RlbXMgd2UnbGwKK2RubCBoYXZlIHRvIHByb3ZpZGUgd3JhcHBlcnMgZm9yIGdsb2JhbCB0YWJsZXMgdG8gZW5zdXJlIHRoZXkncmUgbGlua2VkCitkbmwgcHJvcGVybHkuCitBQ19ERUZVTihbQ0ZfTElOS19EQVRBT05MWV0sCitbCitBQ19NU0dfQ0hFQ0tJTkcoW2lmIGRhdGEtb25seSBsaWJyYXJ5IG1vZHVsZSBsaW5rc10pCitBQ19DQUNIRV9WQUwoY2ZfY3ZfbGlua19kYXRhb25seSxbCisJcm0gLWYgY29uZnRlc3QuYQorCWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgX19vbGluZV9fICJjb25maWd1cmUiCitpbnQJdGVzdGRhdGFbWzNdXSA9IHsgMTIzLCA0NTYsIDc4OSB9OworRU9GCisJaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSkgOyB0aGVuCisJCW12IGNvbmZ0ZXN0Lm8gZGF0YS5vICYmIFwKKwkJKCAkQVIgJEFSRkxBR1MgY29uZnRlc3QuYSBkYXRhLm8gKSAyPiZBQ19GRF9DQyAxPi9kZXYvbnVsbAorCWZpCisJcm0gLWYgY29uZnRlc3QuJGFjX2V4dCBkYXRhLm8KKwljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIF9fb2xpbmVfXyAiY29uZmlndXJlIgoraW50CXRlc3RmdW5jKCkKK3sKKyNpZiBkZWZpbmVkKE5lWFQpCisJJHtjZl9jdl9tYWluX3JldHVybjotcmV0dXJufSgxKTsJLyogSSdtIHRvbGQgdGhpcyBsaW5rZXIgaXMgYnJva2VuICovCisjZWxzZQorCWV4dGVybiBpbnQgdGVzdGRhdGFbWzNdXTsKKwlyZXR1cm4gdGVzdGRhdGFbWzBdXSA9PSAxMjMKKwkgICAmJiAgdGVzdGRhdGFbWzFdXSA9PSA0NTYKKwkgICAmJiAgdGVzdGRhdGFbWzJdXSA9PSA3ODk7CisjZW5kaWYKK30KK0VPRgorCWlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisJCW12IGNvbmZ0ZXN0Lm8gZnVuYy5vICYmIFwKKwkJKCAkQVIgJEFSRkxBR1MgY29uZnRlc3QuYSBmdW5jLm8gKSAyPiZBQ19GRF9DQyAxPi9kZXYvbnVsbAorCWZpCisJcm0gLWYgY29uZnRlc3QuJGFjX2V4dCBmdW5jLm8KKwkoIGV2YWwgJFJBTkxJQiBjb25mdGVzdC5hICkgMj4mQUNfRkRfQ0MgPi9kZXYvbnVsbAorCWNmX3NhdmVMSUJTPSIkTElCUyIKKwlMSUJTPSJjb25mdGVzdC5hICRMSUJTIgorCUFDX1RSWV9SVU4oWworCWludCBtYWluKCkKKwl7CisJCWV4dGVybiBpbnQgdGVzdGZ1bmMoKTsKKwkJJHtjZl9jdl9tYWluX3JldHVybjotcmV0dXJufSAoIXRlc3RmdW5jKCkpOworCX0KKwldLAorCVtjZl9jdl9saW5rX2RhdGFvbmx5PXllc10sCisJW2NmX2N2X2xpbmtfZGF0YW9ubHk9bm9dLAorCVtjZl9jdl9saW5rX2RhdGFvbmx5PXVua25vd25dKQorCUxJQlM9IiRjZl9zYXZlTElCUyIKKwldKQorQUNfTVNHX1JFU1VMVCgkY2ZfY3ZfbGlua19kYXRhb25seSkKKworaWYgdGVzdCAiJGNmX2N2X2xpbmtfZGF0YW9ubHkiID0gbm8gOyB0aGVuCisJQUNfREVGSU5FKEJST0tFTl9MSU5LRVIsMSxbaWYgZGF0YS1vbmx5IGxpYnJhcnkgbW9kdWxlIGRvZXMgbm90IGxpbmtdKQorCUJST0tFTl9MSU5LRVI9MQorZmkKKworXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9NQUtFRkxBR1MgdmVyc2lvbjogMTcgdXBkYXRlZDogMjAxNS8wOC8wNSAyMDo0NDoyOAorZG5sIC0tLS0tLS0tLS0tLQorZG5sIFNvbWUgJ21ha2UnIHByb2dyYW1zIHN1cHBvcnQgJHtNQUtFRkxBR1N9LCBzb21lICR7TUZMQUdTfSwgdG8gcGFzcyAnbWFrZScKK2RubCBvcHRpb25zIHRvIGxvd2VyLWxldmVscy4gIEl0J3MgdmVyeSB1c2VmdWwgZm9yICJtYWtlIC1uIiAtLSBpZiB3ZSBoYXZlIGl0LgorZG5sIChHTlUgJ21ha2UnIGRvZXMgYm90aCwgc29tZXRoaW5nIFBPU0lYICdtYWtlJywgd2hpY2ggaGFwcGVucyB0byBtYWtlIHRoZQorZG5sICR7TUFLRUZMQUdTfSB2YXJpYWJsZSBpbmNvbXBhdGlibGUgYmVjYXVzZSBpdCBhZGRzIHRoZSBhc3NpZ25tZW50cyA6LSkKK0FDX0RFRlVOKFtDRl9NQUtFRkxBR1NdLAorWworQUNfQ0FDSEVfQ0hFQ0soZm9yIG1ha2VmbGFncyB2YXJpYWJsZSwgY2ZfY3ZfbWFrZWZsYWdzLFsKKwljZl9jdl9tYWtlZmxhZ3M9JycKKwlmb3IgY2Zfb3B0aW9uIGluICctJHtNQUtFRkxBR1N9JyAnJHtNRkxBR1N9JworCWRvCisJCWNhdCA+Y2ZfbWFrZWZsYWdzLnRtcCA8PENGX0VPRgorU0hFTEwgPSAkU0hFTEwKK2FsbCA6CisJQCBlY2hvICcuJGNmX29wdGlvbicKK0NGX0VPRgorCQljZl9yZXN1bHQ9YCR7TUFLRTotbWFrZX0gLWsgLWYgY2ZfbWFrZWZsYWdzLnRtcCAyPi9kZXYvbnVsbCB8IGZncmVwIC12ICJpbmcgZGlyZWN0b3J5IiB8IHNlZCAtZSAncyxbWyAJXV0qJCwsJ2AKKwkJY2FzZSAiJGNmX3Jlc3VsdCIgaW4KKwkJKC4qa3wuKmt3KQorCQkJY2ZfcmVzdWx0PWAke01BS0U6LW1ha2V9IC1rIC1mIGNmX21ha2VmbGFncy50bXAgQ0M9Y2MgMj4vZGV2L251bGxgCisJCQljYXNlICIkY2ZfcmVzdWx0IiBpbgorCQkJKC4qQ0M9KikJY2ZfY3ZfbWFrZWZsYWdzPQorCQkJCTs7CisJCQkoKikJY2ZfY3ZfbWFrZWZsYWdzPSRjZl9vcHRpb24KKwkJCQk7OworCQkJZXNhYworCQkJYnJlYWsKKwkJCTs7CisJCSguLSkJOzsKKwkJKCopCWVjaG8gImdpdmVuIG9wdGlvbiBcIiRjZl9vcHRpb25cIiwgbm8gbWF0Y2ggXCIkY2ZfcmVzdWx0XCIiCisJCQk7OworCQllc2FjCisJZG9uZQorCXJtIC1mIGNmX21ha2VmbGFncy50bXAKK10pCisKK0FDX1NVQlNUKGNmX2N2X21ha2VmbGFncykKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfTUFLRV9UQUdTIHZlcnNpb246IDYgdXBkYXRlZDogMjAxMC8xMC8yMyAxNTo1MjozMgorZG5sIC0tLS0tLS0tLS0tLQorZG5sIEdlbmVyYXRlIHRhZ3MvVEFHUyB0YXJnZXRzIGZvciBtYWtlZmlsZXMuICBEbyBub3QgZ2VuZXJhdGUgVEFHUyBpZiB3ZSBoYXZlCitkbmwgYSBtb25vY2FzZSBmaWxlc3lzdGVtLgorQUNfREVGVU4oW0NGX01BS0VfVEFHU10sWworQUNfUkVRVUlSRShbQ0ZfTUlYRURDQVNFX0ZJTEVOQU1FU10pCisKK0FDX0NIRUNLX1BST0dTKENUQUdTLCBleGN0YWdzIGN0YWdzKQorQUNfQ0hFQ0tfUFJPR1MoRVRBR1MsIGV4ZXRhZ3MgZXRhZ3MpCisKK0FDX0NIRUNLX1BST0coTUFLRV9MT1dFUl9UQUdTLCAke0NUQUdTOi1jdGFnc30sIHllcywgbm8pCisKK2lmIHRlc3QgIiRjZl9jdl9taXhlZGNhc2UiID0geWVzIDsgdGhlbgorCUFDX0NIRUNLX1BST0coTUFLRV9VUFBFUl9UQUdTLCAke0VUQUdTOi1ldGFnc30sIHllcywgbm8pCitlbHNlCisJTUFLRV9VUFBFUl9UQUdTPW5vCitmaQorCitpZiB0ZXN0ICIkTUFLRV9VUFBFUl9UQUdTIiA9IHllcyA7IHRoZW4KKwlNQUtFX1VQUEVSX1RBR1M9CitlbHNlCisJTUFLRV9VUFBFUl9UQUdTPSIjIgorZmkKKworaWYgdGVzdCAiJE1BS0VfTE9XRVJfVEFHUyIgPSB5ZXMgOyB0aGVuCisJTUFLRV9MT1dFUl9UQUdTPQorZWxzZQorCU1BS0VfTE9XRVJfVEFHUz0iIyIKK2ZpCisKK0FDX1NVQlNUKENUQUdTKQorQUNfU1VCU1QoRVRBR1MpCisKK0FDX1NVQlNUKE1BS0VfVVBQRVJfVEFHUykKK0FDX1NVQlNUKE1BS0VfTE9XRVJfVEFHUykKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfTUlYRURDQVNFX0ZJTEVOQU1FUyB2ZXJzaW9uOiA3IHVwZGF0ZWQ6IDIwMTUvMDQvMTIgMTU6Mzk6MDAKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgaWYgdGhlIGZpbGUtc3lzdGVtIHN1cHBvcnRzIG1peGVkLWNhc2UgZmlsZW5hbWVzLiAgSWYgd2UncmUgYWJsZSB0bworZG5sIGNyZWF0ZSBhIGxvd2VyY2FzZSBuYW1lIGFuZCBzZWUgaXQgYXMgdXBwZXJjYXNlLCBpdCBkb2Vzbid0IHN1cHBvcnQgdGhhdC4KK0FDX0RFRlVOKFtDRl9NSVhFRENBU0VfRklMRU5BTUVTXSwKK1sKK0FDX0NBQ0hFX0NIRUNLKGlmIGZpbGVzeXN0ZW0gc3VwcG9ydHMgbWl4ZWQtY2FzZSBmaWxlbmFtZXMsY2ZfY3ZfbWl4ZWRjYXNlLFsKK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIDsgdGhlbgorCWNhc2UgJHRhcmdldF9hbGlhcyBpbgorCSgqLW9zMi1lbXgqfCotbXNkb3NkamdwcCp8Ki1jeWd3aW4qfCotbXN5cyp8Ki1taW5ndyp8Ki11d2luKikKKwkJY2ZfY3ZfbWl4ZWRjYXNlPW5vCisJCTs7CisJKCopCisJCWNmX2N2X21peGVkY2FzZT15ZXMKKwkJOzsKKwllc2FjCitlbHNlCisJcm0gLWYgY29uZnRlc3QgQ09ORlRFU1QKKwllY2hvIHRlc3QgPmNvbmZ0ZXN0CisJaWYgdGVzdCAtZiBDT05GVEVTVCA7IHRoZW4KKwkJY2ZfY3ZfbWl4ZWRjYXNlPW5vCisJZWxzZQorCQljZl9jdl9taXhlZGNhc2U9eWVzCisJZmkKKwlybSAtZiBjb25mdGVzdCBDT05GVEVTVAorZmkKK10pCit0ZXN0ICIkY2ZfY3ZfbWl4ZWRjYXNlIiA9IHllcyAmJiBBQ19ERUZJTkUoTUlYRURDQVNFX0ZJTEVOQU1FUywxLFtEZWZpbmUgdG8gMSBpZiBmaWxlc3lzdGVtIHN1cHBvcnRzIG1peGVkLWNhc2UgZmlsZW5hbWVzLl0pCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX01LU1RFTVAgdmVyc2lvbjogOSB1cGRhdGVkOiAyMDEyLzEwLzAzIDA0OjM0OjQ5CitkbmwgLS0tLS0tLS0tLQorZG5sIENoZWNrIGZvciBhIHdvcmtpbmcgbWtzdGVtcC4gIFRoaXMgY3JlYXRlcyB0d28gZmlsZXMsIGNoZWNrcyB0aGF0IHRoZXkgYXJlCitkbmwgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQgYW5kIGRpc3RpbmN0IChBbWlnYU9TIGFwcGFyZW50bHkgZmFpbHMgb24gdGhlIGxhc3QpLgorQUNfREVGVU4oW0NGX01LU1RFTVBdLFsKK0FDX0NBQ0hFX0NIRUNLKGZvciB3b3JraW5nIG1rc3RlbXAsIGNmX2N2X2Z1bmNfbWtzdGVtcCxbCitybSAtcmYgY29uZnRlc3QqCitBQ19UUllfUlVOKFsKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CitpbnQgbWFpbigpCit7CisJY2hhciAqdG1wbCA9ICJjb25mdGVzdFhYWFhYWCI7CisJY2hhciBuYW1lWzJdWzgwXTsKKwlpbnQgbjsKKwlpbnQgcmVzdWx0ID0gMDsKKwlpbnQgZmQ7CisJc3RydWN0IHN0YXQgc2I7CisKKwl1bWFzaygwNzcpOworCWZvciAobiA9IDA7IG4gPCAyOyArK24pIHsKKwkJc3RyY3B5KG5hbWVbbl0sIHRtcGwpOworCQlpZiAoKGZkID0gbWtzdGVtcChuYW1lW25dKSkgPj0gMCkgeworCQkJaWYgKCFzdHJjbXAobmFtZVtuXSwgdG1wbCkKKwkJCSB8fCBzdGF0KG5hbWVbbl0sICZzYikgIT0gMAorCQkJIHx8IChzYi5zdF9tb2RlICYgU19JRk1UKSAhPSBTX0lGUkVHCisJCQkgfHwgKHNiLnN0X21vZGUgJiAwNzcpICE9IDApIHsKKwkJCQlyZXN1bHQgPSAxOworCQkJfQorCQkJY2xvc2UoZmQpOworCQl9CisJfQorCWlmIChyZXN1bHQgPT0gMAorCSAmJiAhc3RyY21wKG5hbWVbMF0sIG5hbWVbMV0pKQorCQlyZXN1bHQgPSAxOworCSR7Y2ZfY3ZfbWFpbl9yZXR1cm46LXJldHVybn0ocmVzdWx0KTsKK30KK10sW2NmX2N2X2Z1bmNfbWtzdGVtcD15ZXMKK10sW2NmX2N2X2Z1bmNfbWtzdGVtcD1ubworXSxbY2ZfY3ZfZnVuY19ta3N0ZW1wPW1heWJlXSkKK10pCitpZiB0ZXN0ICJ4JGNmX2N2X2Z1bmNfbWtzdGVtcCIgPSB4bWF5YmUgOyB0aGVuCisJQUNfQ0hFQ0tfRlVOQyhta3N0ZW1wKQorZmkKK2lmIHRlc3QgIngkY2ZfY3ZfZnVuY19ta3N0ZW1wIiA9IHh5ZXMgfHwgdGVzdCAieCRhY19jdl9mdW5jX21rc3RlbXAiID0geHllcyA7IHRoZW4KKwlBQ19ERUZJTkUoSEFWRV9NS1NURU1QLDEsW0RlZmluZSB0byAxIGlmIG1rc3RlbXAoKSBpcyBhdmFpbGFibGUgYW5kIHdvcmtpbmcuXSkKK2ZpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX01TR19MT0cgdmVyc2lvbjogNSB1cGRhdGVkOiAyMDEwLzEwLzIzIDE1OjUyOjMyCitkbmwgLS0tLS0tLS0tLQorZG5sIFdyaXRlIGEgZGVidWcgbWVzc2FnZSB0byBjb25maWcubG9nLCBhbG9uZyB3aXRoIHRoZSBsaW5lIG51bWJlciBpbiB0aGUKK2RubCBjb25maWd1cmUgc2NyaXB0LgorQUNfREVGVU4oW0NGX01TR19MT0ddLFsKK2VjaG8gIiR7YXNfbWU6LWNvbmZpZ3VyZX06X19vbGluZV9fOiB0ZXN0aW5nICQqIC4uLiIgMT4mQUNfRkRfQ0MKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfTkNVUlNFU19BRERPTiB2ZXJzaW9uOiA1IHVwZGF0ZWQ6IDIwMTUvMDQvMjYgMTg6MDY6NTgKK2RubCAtLS0tLS0tLS0tLS0tLS0tCitkbmwgQ29uZmlndXJlIGFuIG5jdXJzZXMgYWRkLW9uLCBidWlsdCBvdXRzaWRlIHRoZSBuY3Vyc2VzIHRyZWUuCitBQ19ERUZVTihbQ0ZfTkNVUlNFU19BRERPTl0sWworQUNfUkVRVUlSRShbQ0ZfTkNVUlNFU19DT05GSUddKQorCitBQ19QUk9WSURFKFtDRl9TVUJTVF9OQ1VSU0VTX1ZFUlNJT05dKQorCitBQ19NU0dfQ0hFQ0tJTkcoaWYgeW91IHdhbnQgd2lkZS1jaGFyYWN0ZXIgY29kZSkKK0FDX0FSR19FTkFCTEUod2lkZWMsCisJWyAgLS1lbmFibGUtd2lkZWMgICAgICAgICAgY29tcGlsZSB3aXRoIHdpZGUtY2hhci9VVEYtOCBjb2RlXSwKKwlbd2l0aF93aWRlYz0kZW5hYmxldmFsXSwKKwlbd2l0aF93aWRlYz1ub10pCitBQ19NU0dfUkVTVUxUKCR3aXRoX3dpZGVjKQoraWYgdGVzdCAiJHdpdGhfd2lkZWMiID0geWVzIDsgdGhlbgorCUNGX1VURjhfTElCCisJQ0ZfTkNVUlNFU19DT05GSUcobmN1cnNlc3cpCitlbHNlCisJQ0ZfTkNVUlNFU19DT05GSUcobmN1cnNlcykKK2ZpCisKK2lmIHRlc3QgIiROQ1VSU0VTX0NPTkZJR19QS0ciICE9IG5vbmUgOyB0aGVuCisJY2ZfdmVyc2lvbj1gJFBLR19DT05GSUcgLS1tb2R2ZXJzaW9uICROQ1VSU0VTX0NPTkZJR19QS0cgMj4vZGV2L251bGxgCisKKwlOQ1VSU0VTX01BSk9SPWBlY2hvICIkY2ZfdmVyc2lvbiIgfCBzZWQgLWUgJ3MvXC4uKi8vJ2AKKwlOQ1VSU0VTX01JTk9SPWBlY2hvICIkY2ZfdmVyc2lvbiIgfCBzZWQgLWUgJ3MvXltbMC05XV1bWzAtOV1dKlwuLy8nIC1lICdzL1wuLiovLydgCisJTkNVUlNFU19QQVRDSD1gZWNobyAiJGNmX3ZlcnNpb24iIHwgc2VkIC1lICdzL15bWzAtOV1dW1swLTldXSpcLltbMC05XV1bWzAtOV1dKlwuLy8nYAorCisJY2ZfY3ZfYWJpX3ZlcnNpb249YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9YWJpX3ZlcnNpb24gJE5DVVJTRVNfQ09ORklHX1BLRyAyPi9kZXYvbnVsbGAKKwlpZiB0ZXN0IC16ICIkY2ZfY3ZfYWJpX3ZlcnNpb24iCisJdGhlbgorCQljZl9jdl9hYmlfdmVyc2lvbj1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1tYWpvcl92ZXJzaW9uICROQ1VSU0VTX0NPTkZJR19QS0cgMj4vZGV2L251bGxgCisJZmkKKworZWxpZiB0ZXN0ICIkTkNVUlNFU19DT05GSUciICE9IG5vbmUgOyB0aGVuCisKKwljZl92ZXJzaW9uPWAkTkNVUlNFU19DT05GSUcgLS12ZXJzaW9uIDI+L2Rldi9udWxsYAorCisJTkNVUlNFU19NQUpPUj1gZWNobyAiJGNmX3ZlcnNpb24iIHwgc2VkIC1lICdzL1wuLiovLydgCisJTkNVUlNFU19NSU5PUj1gZWNobyAiJGNmX3ZlcnNpb24iIHwgc2VkIC1lICdzL15bWzAtOV1dW1swLTldXSpcLi8vJyAtZSAncy9cLi4qLy8nYAorCU5DVVJTRVNfUEFUQ0g9YGVjaG8gIiRjZl92ZXJzaW9uIiB8IHNlZCAtZSAncy9eW1swLTldXVtbMC05XV0qXC5bWzAtOV1dW1swLTldXSpcLi8vJ2AKKworCSMgQUJJIHZlcnNpb24gaXMgbm90IGF2YWlsYWJsZSBmcm9tIGhlYWRlcnMKKwljZl9jdl9hYmlfdmVyc2lvbj1gJE5DVVJTRVNfQ09ORklHIC0tYWJpLXZlcnNpb24gMj4vZGV2L251bGxgCisKK2Vsc2UKKworCWZvciBjZl9uYW1lIGluIE1BSk9SIE1JTk9SIFBBVENICisJZG8KKwljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxDRl9FT0YKKwkjaW5jbHVkZSA8JHtjZl9jdl9uY3Vyc2VzX2hlYWRlcjotY3Vyc2VzLmh9PgorCUFVVE9DT05GXyRjZl9uYW1lIE5DVVJTRVNfVkVSU0lPTl8kY2ZfbmFtZQorQ0ZfRU9GCisJCWNmX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IDI+JjUgfCBmZ3JlcCBBVVRPQ09ORl8kY2ZfbmFtZSA+Y29uZnRlc3Qub3V0IgorCQlBQ19UUllfRVZBTChjZl90cnkpCisJCWlmIHRlc3QgLWYgY29uZnRlc3Qub3V0IDsgdGhlbgorCQkJY2ZfcmVzdWx0PWBjYXQgY29uZnRlc3Qub3V0IHwgc2VkIC1lICJzL14uKkFVVE9DT05GXyRjZl9uYW1lW1sgCV1dW1sgCV1dKi8vImAKKwkJCWV2YWwgTkNVUlNFU18kY2ZfbmFtZT1cIiRjZl9yZXN1bHRcIgorCQkJIyBjYXQgY29uZnRlc3QuJGFjX2V4dAorCQkJIyBjYXQgY29uZnRlc3Qub3V0CisJCWZpCisJZG9uZQorCisJY2ZfY3ZfYWJpX3ZlcnNpb249JHtOQ1VSU0VTX01BSk9SfQorCitmaQorCitjZl9jdl9yZWxfdmVyc2lvbj0ke05DVVJTRVNfTUFKT1J9LiR7TkNVUlNFU19NSU5PUn0KKworZG5sIFNob3cgdGhlIGNvbXB1dGVkIHZlcnNpb24sIGZvciBsb2dnaW5nCitjZl9jdl90aW1lc3RhbXA9YGRhdGVgCisKK0FDX01TR19SRVNVTFQoQ29uZmlndXJpbmcgTkNVUlNFUyAkY2ZfY3ZfcmVsX3ZlcnNpb24gQUJJICRjZl9jdl9hYmlfdmVyc2lvbiAoJGNmX2N2X3RpbWVzdGFtcCkpCisKK2RubCBXZSBuZWVkIHRoZXNlIHZhbHVlcyBpbiB0aGUgZ2VuZXJhdGVkIGhlYWRlcnMKK0FDX1NVQlNUKE5DVVJTRVNfTUFKT1IpCitBQ19TVUJTVChOQ1VSU0VTX01JTk9SKQorQUNfU1VCU1QoTkNVUlNFU19QQVRDSCkKKworZG5sIFdlIG5lZWQgdGhlc2UgdmFsdWVzIGluIHRoZSBnZW5lcmF0ZWQgbWFrZWZpbGVzCitBQ19TVUJTVChjZl9jdl9yZWxfdmVyc2lvbikKK0FDX1NVQlNUKGNmX2N2X2FiaV92ZXJzaW9uKQorCitkbmwgRklYTUUgLSBub3QgbmVlZGVkIGZvciBBZGE5NQorQUNfU1VCU1QoY2ZfY3ZfYnVpbHRpbl9ib29sKQorQUNfU1VCU1QoY2ZfY3ZfaGVhZGVyX3N0ZGJvb2xfaCkKK0FDX1NVQlNUKGNmX2N2X3R5cGVfb2ZfYm9vbClkbmwKKworXSkKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9OQ1VSU0VTX0NDX0NIRUNLIHZlcnNpb246IDQgdXBkYXRlZDogMjAwNy8wNy8yOSAxMDozOTowNQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDaGVjayBpZiB3ZSBjYW4gY29tcGlsZSB3aXRoIG5jdXJzZXMnIGhlYWRlciBmaWxlCitkbmwgJDEgaXMgdGhlIGNhY2hlIHZhcmlhYmxlIHRvIHNldAorZG5sICQyIGlzIHRoZSBoZWFkZXItZmlsZSB0byBpbmNsdWRlCitkbmwgJDMgaXMgdGhlIHJvb3QgbmFtZSAobmN1cnNlcyBvciBuY3Vyc2VzdykKK0FDX0RFRlVOKFtDRl9OQ1VSU0VTX0NDX0NIRUNLXSxbCisJQUNfVFJZX0NPTVBJTEUoWworXWlmZWxzZSgkMyxuY3Vyc2VzdyxbCisjZGVmaW5lIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQKKyN1bmRlZiAgSEFWRV9MSUJVVEY4X0gJLyogaW4gY2FzZSB3ZSB1c2VkIENGX1VURjhfTElCICovCisjZGVmaW5lIEhBVkVfTElCVVRGOF9ICS8qIHRvIGZvcmNlIG5jdXJzZXMnIGhlYWRlciBmaWxlIHRvIHVzZSBjY2hhcl90ICovCitdKVsKKyNpbmNsdWRlIDwkMj5dLFsKKyNpZmRlZiBOQ1VSU0VTX1ZFUlNJT04KK11pZmVsc2UoJDMsbmN1cnNlc3csWworI2lmbmRlZiBXQUNTX0JTU0IKKwltYWtlIGFuIGVycm9yCisjZW5kaWYKK10pWworcHJpbnRmKCIlc1xuIiwgTkNVUlNFU19WRVJTSU9OKTsKKyNlbHNlCisjaWZkZWYgX19OQ1VSU0VTX0gKK3ByaW50Zigib2xkXG4iKTsKKyNlbHNlCisJbWFrZSBhbiBlcnJvcgorI2VuZGlmCisjZW5kaWYKKwldCisJLFskMT0kMl0KKwksWyQxPW5vXSkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfTkNVUlNFU19DT05GSUcgdmVyc2lvbjogMTcgdXBkYXRlZDogMjAxNS8wNy8wNyAwNDoyMjowNworZG5sIC0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVGllIHRvZ2V0aGVyIHRoZSBjb25maWd1cmUtc2NyaXB0IG1hY3JvcyBmb3IgbmN1cnNlcywgcHJlZmVycmluZyB0aGVzZSBpbgorZG5sIG9yZGVyOgorZG5sIGEpICIucGMiIGZpbGVzIGZvciBwa2ctY29uZmlnLCB1c2luZyAkTkNVUlNFU19DT05GSUdfUEtHCitkbmwgYikgdGhlICItY29uZmlnIiBzY3JpcHQgZnJvbSBuY3Vyc2VzLCB1c2luZyAkTkNVUlNFU19DT05GSUcKK2RubCBjKSBqdXN0IHBsYWluIGxpYnJhcmllcworZG5sCitkbmwgJDEgaXMgdGhlIHJvb3QgbGlicmFyeSBuYW1lIChkZWZhdWx0OiAibmN1cnNlcyIpCitBQ19ERUZVTihbQ0ZfTkNVUlNFU19DT05GSUddLFsKK0FDX1JFUVVJUkUoW0NGX1BLR19DT05GSUddKQorY2ZfbmN1Y29uZmlnX3Jvb3Q9aWZlbHNlKCQxLCxuY3Vyc2VzLCQxKQorY2ZfaGF2ZV9uY3Vjb25maWc9bm8KKworaWYgdGVzdCAieCR7UEtHX0NPTkZJRzo9bm9uZX0iICE9IHhub25lOyB0aGVuCisJQUNfTVNHX0NIRUNLSU5HKHBrZy1jb25maWcgZm9yICRjZl9uY3Vjb25maWdfcm9vdCkKKwlpZiAiJFBLR19DT05GSUciIC0tZXhpc3RzICRjZl9uY3Vjb25maWdfcm9vdCA7IHRoZW4KKwkJQUNfTVNHX1JFU1VMVCh5ZXMpCisKKwkJQUNfTVNHX0NIRUNLSU5HKGlmIHRoZSAkY2ZfbmN1Y29uZmlnX3Jvb3QgcGFja2FnZSBmaWxlcyB3b3JrKQorCQljZl9oYXZlX25jdWNvbmZpZz11bmtub3duCisKKwkJY2Zfc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorCQljZl9zYXZlX0xJQlM9IiRMSUJTIgorCisJCUNQUEZMQUdTPSIkQ1BQRkxBR1MgYCRQS0dfQ09ORklHIC0tY2ZsYWdzICRjZl9uY3Vjb25maWdfcm9vdGAiCisJCUNGX0FERF9MSUJTKGAkUEtHX0NPTkZJRyAtLWxpYnMgJGNmX25jdWNvbmZpZ19yb290YCkKKworCQlBQ19UUllfTElOSyhbI2luY2x1ZGUgPCR7Y2ZfY3ZfbmN1cnNlc19oZWFkZXI6LWN1cnNlcy5ofT5dLAorCQkJW2luaXRzY3IoKTsgbW91c2VtYXNrKDAsMCk7IHRnb3RvKChjaGFyICopMCwgMCwgMCk7XSwKKwkJCVtBQ19UUllfUlVOKFsjaW5jbHVkZSA8JHtjZl9jdl9uY3Vyc2VzX2hlYWRlcjotY3Vyc2VzLmh9PgorCQkJCWludCBtYWluKHZvaWQpCisJCQkJeyBjaGFyICp4eCA9IGN1cnNlc192ZXJzaW9uKCk7IHJldHVybiAoeHggPT0gMCk7IH1dLAorCQkJCVtjZl9oYXZlX25jdWNvbmZpZz15ZXNdLAorCQkJCVtjZl9oYXZlX25jdWNvbmZpZz1ub10sCisJCQkJW2NmX2hhdmVfbmN1Y29uZmlnPW1heWJlXSldLAorCQkJW2NmX2hhdmVfbmN1Y29uZmlnPW5vXSkKKwkJQUNfTVNHX1JFU1VMVCgkY2ZfaGF2ZV9uY3Vjb25maWcpCisJCXRlc3QgIiRjZl9oYXZlX25jdWNvbmZpZyIgPSBtYXliZSAmJiBjZl9oYXZlX25jdWNvbmZpZz15ZXMKKwkJaWYgdGVzdCAiJGNmX2hhdmVfbmN1Y29uZmlnIiAhPSAieWVzIgorCQl0aGVuCisJCQlDUFBGTEFHUz0iJGNmX3NhdmVfQ1BQRkxBR1MiCisJCQlMSUJTPSIkY2Zfc2F2ZV9MSUJTIgorCQkJTkNVUlNFU19DT05GSUdfUEtHPW5vbmUKKwkJZWxzZQorCQkJQUNfREVGSU5FKE5DVVJTRVMsMSxbRGVmaW5lIHRvIDEgaWYgd2UgYXJlIHVzaW5nIG5jdXJzZXMgaGVhZGVycy9saWJyYXJpZXNdKQorCQkJTkNVUlNFU19DT05GSUdfUEtHPSRjZl9uY3Vjb25maWdfcm9vdAorCQlmaQorCisJZWxzZQorCQlBQ19NU0dfUkVTVUxUKG5vKQorCQlOQ1VSU0VTX0NPTkZJR19QS0c9bm9uZQorCWZpCitlbHNlCisJTkNVUlNFU19DT05GSUdfUEtHPW5vbmUKK2ZpCisKK2lmIHRlc3QgIngkY2ZfaGF2ZV9uY3Vjb25maWciID0gInhubyI7IHRoZW4KKwllY2hvICJMb29raW5nIGZvciAke2NmX25jdWNvbmZpZ19yb290fS1jb25maWciCisKKwlDRl9BQ1ZFUlNJT05fQ0hFQ0soMi41MiwKKwkJW0FDX0NIRUNLX1RPT0xTKE5DVVJTRVNfQ09ORklHLCAke2NmX25jdWNvbmZpZ19yb290fS1jb25maWcgJHtjZl9uY3Vjb25maWdfcm9vdH02LWNvbmZpZyAke2NmX25jdWNvbmZpZ19yb290fTUtY29uZmlnLCBub25lKV0sCisJCVtBQ19QQVRIX1BST0dTKE5DVVJTRVNfQ09ORklHLCAgJHtjZl9uY3Vjb25maWdfcm9vdH0tY29uZmlnICR7Y2ZfbmN1Y29uZmlnX3Jvb3R9Ni1jb25maWcgJHtjZl9uY3Vjb25maWdfcm9vdH01LWNvbmZpZywgbm9uZSldKQorCisJaWYgdGVzdCAiJE5DVVJTRVNfQ09ORklHIiAhPSBub25lIDsgdGhlbgorCisJCUNQUEZMQUdTPSIkQ1BQRkxBR1MgYCROQ1VSU0VTX0NPTkZJRyAtLWNmbGFnc2AiCisJCUNGX0FERF9MSUJTKGAkTkNVUlNFU19DT05GSUcgLS1saWJzYCkKKworCQkjIGV2ZW4gd2l0aCBjb25maWcgc2NyaXB0LCBzb21lIHBhY2thZ2VzIHVzZSBuby1vdmVycmlkZSBmb3IgY3Vyc2VzLmgKKwkJQ0ZfQ1VSU0VTX0hFQURFUihpZmVsc2UoJDEsLG5jdXJzZXMsJDEpKQorCisJCWRubCBsaWtlIENGX05DVVJTRVNfQ1BQRkxBR1MKKwkJQUNfREVGSU5FKE5DVVJTRVMsMSxbRGVmaW5lIHRvIDEgaWYgd2UgYXJlIHVzaW5nIG5jdXJzZXMgaGVhZGVycy9saWJyYXJpZXNdKQorCisJCWRubCBsaWtlIENGX05DVVJTRVNfTElCUworCQlDRl9VUFBFUihjZl9uY3VsaWJfUk9PVCxIQVZFX0xJQiRjZl9uY3Vjb25maWdfcm9vdCkKKwkJQUNfREVGSU5FX1VOUVVPVEVEKCRjZl9uY3VsaWJfUk9PVCkKKworCQlkbmwgbGlrZSBDRl9OQ1VSU0VTX1ZFUlNJT04KKwkJY2ZfY3ZfbmN1cnNlc192ZXJzaW9uPWAkTkNVUlNFU19DT05GSUcgLS12ZXJzaW9uYAorCisJZWxzZQorCisJCUNGX05DVVJTRVNfQ1BQRkxBR1MoaWZlbHNlKCQxLCxuY3Vyc2VzLCQxKSkKKwkJQ0ZfTkNVUlNFU19MSUJTKGlmZWxzZSgkMSwsbmN1cnNlcywkMSkpCisKKwlmaQorZWxzZQorCU5DVVJTRVNfQ09ORklHPW5vbmUKK2ZpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX05DVVJTRVNfQ1BQRkxBR1MgdmVyc2lvbjogMjEgdXBkYXRlZDogMjAxMi8xMC8wNiAwODo1Nzo1MQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBMb29rIGZvciB0aGUgU1ZyNCBjdXJzZXMgY2xvbmUgJ25jdXJzZXMnIGluIHRoZSBzdGFuZGFyZCBwbGFjZXMsIGFkanVzdGluZworZG5sIHRoZSBDUFBGTEFHUyB2YXJpYWJsZSBzbyB3ZSBjYW4gaW5jbHVkZSBpdHMgaGVhZGVyLgorZG5sCitkbmwgVGhlIGhlYWRlciBmaWxlcyBtYXkgYmUgaW5zdGFsbGVkIGFzIGVpdGhlciBjdXJzZXMuaCwgb3IgbmN1cnNlcy5oICh3b3VsZAorZG5sIGJlIG9ic29sZXRlLCBleGNlcHQgdGhhdCBzb21lIHBhY2thZ2VycyBwcmVmZXIgdGhpcyBuYW1lIHRvIGRpc3Rpbmd1aXNoIGl0CitkbmwgZnJvbSBhICJuYXRpdmUiIGN1cnNlcyBpbXBsZW1lbnRhdGlvbikuICBJZiBub3QgaW5zdGFsbGVkIGZvciBvdmVyd3JpdGUsCitkbmwgdGhlIGN1cnNlcy5oIGZpbGUgd291bGQgYmUgaW4gYW4gbmN1cnNlcyBzdWJkaXJlY3RvcnkgKGUuZy4sCitkbmwgL3Vzci9pbmNsdWRlL25jdXJzZXMpLCBidXQgc29tZW9uZSBtYXkgaGF2ZSBpbnN0YWxsZWQgb3ZlcndyaXRpbmcgdGhlCitkbmwgdmVuZG9yJ3MgY3Vyc2VzLiAgT25seSB2ZXJ5IG9sZCB2ZXJzaW9ucyAocHJlLTEuOS4yZCwgdGhlIGZpcnN0IGF1dG9jb25mJ2QKK2RubCB2ZXJzaW9uKSBvZiBuY3Vyc2VzIGRvbid0IGRlZmluZSBlaXRoZXIgX19OQ1VSU0VTX0ggb3IgTkNVUlNFU19WRVJTSU9OIGluCitkbmwgdGhlIGhlYWRlci4KK2RubAorZG5sIElmIHRoZSBpbnN0YWxsZXIgaGFzIHNldCAkQ0ZMQUdTIG9yICRDUFBGTEFHUyBzbyB0aGF0IHRoZSBuY3Vyc2VzIGhlYWRlcgorZG5sIGlzIGFscmVhZHkgaW4gdGhlIGluY2x1ZGUtcGF0aCwgZG9uJ3QgZXZlbiBib3RoZXIgd2l0aCB0aGlzLCBzaW5jZSB3ZSBjYW5ub3QKK2RubCBlYXNpbHkgZGV0ZXJtaW5lIHdoaWNoIGZpbGUgaXQgaXMuICBJbiB0aGlzIGNhc2UsIGl0IGhhcyB0byBiZSA8Y3Vyc2VzLmg+LgorZG5sCitkbmwgVGhlIG9wdGlvbmFsIHBhcmFtZXRlciBnaXZlcyB0aGUgcm9vdCBuYW1lIG9mIHRoZSBsaWJyYXJ5LCBpbiBjYXNlIGl0IGlzCitkbmwgbm90IGluc3RhbGxlZCBhcyB0aGUgZGVmYXVsdCBjdXJzZXMgbGlicmFyeS4gIFRoYXQgaXMgaG93IHRoZQorZG5sIHdpZGUtY2hhcmFjdGVyIHZlcnNpb24gb2YgbmN1cnNlcyBpcyBpbnN0YWxsZWQuCitBQ19ERUZVTihbQ0ZfTkNVUlNFU19DUFBGTEFHU10sCitbQUNfUkVRVUlSRShbQ0ZfV0lUSF9DVVJTRVNfRElSXSkKKworQUNfUFJPVklERShbQ0ZfQ1VSU0VTX0NQUEZMQUdTXSlkbmwKK2NmX25jdWhkcl9yb290PWlmZWxzZSgkMSwsbmN1cnNlcywkMSkKKwordGVzdCAtbiAiJGNmX2N2X2N1cnNlc19kaXIiICYmIFwKK3Rlc3QgIiRjZl9jdl9jdXJzZXNfZGlyIiAhPSAibm8iICYmIHsgXAorICBDRl9BRERfSU5DRElSKCRjZl9jdl9jdXJzZXNfZGlyL2luY2x1ZGUvJGNmX25jdWhkcl9yb290KQorfQorCitBQ19DQUNIRV9DSEVDSyhmb3IgJGNmX25jdWhkcl9yb290IGhlYWRlciBpbiBpbmNsdWRlLXBhdGgsIGNmX2N2X25jdXJzZXNfaCxbCisJY2ZfaGVhZGVyX2xpc3Q9IiRjZl9uY3VoZHJfcm9vdC9jdXJzZXMuaCAkY2ZfbmN1aGRyX3Jvb3QvbmN1cnNlcy5oIgorCSggdGVzdCAiJGNmX25jdWhkcl9yb290IiA9IG5jdXJzZXMgfHwgdGVzdCAiJGNmX25jdWhkcl9yb290IiA9IG5jdXJzZXN3ICkgJiYgY2ZfaGVhZGVyX2xpc3Q9IiRjZl9oZWFkZXJfbGlzdCBjdXJzZXMuaCBuY3Vyc2VzLmgiCisJZm9yIGNmX2hlYWRlciBpbiAkY2ZfaGVhZGVyX2xpc3QKKwlkbworCQlDRl9OQ1VSU0VTX0NDX0NIRUNLKGNmX2N2X25jdXJzZXNfaCwkY2ZfaGVhZGVyLCQxKQorCQl0ZXN0ICIkY2ZfY3ZfbmN1cnNlc19oIiAhPSBubyAmJiBicmVhaworCWRvbmUKK10pCisKK0NGX05DVVJTRVNfSEVBREVSCitDRl9URVJNX0hFQURFUgorCisjIHNvbWUgYXBwbGljYXRpb25zIG5lZWQgdGhpcywgYnV0IHNob3VsZCBjaGVjayBmb3IgTkNVUlNFU19WRVJTSU9OCitBQ19ERUZJTkUoTkNVUlNFUywxLFtEZWZpbmUgdG8gMSBpZiB3ZSBhcmUgdXNpbmcgbmN1cnNlcyBoZWFkZXJzL2xpYnJhcmllc10pCisKK0NGX05DVVJTRVNfVkVSU0lPTgorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9OQ1VSU0VTX0hFQURFUiB2ZXJzaW9uOiA0IHVwZGF0ZWQ6IDIwMTUvMDQvMTUgMTk6MDg6NDgKK2RubCAtLS0tLS0tLS0tLS0tLS0tLQorZG5sIEZpbmQgYSAiY3Vyc2VzIiBoZWFkZXIgZmlsZSwgZS5nLC4gImN1cnNlcy5oIiwgb3Igb25lIG9mIHRoZSBtb3JlIGNvbW1vbgorZG5sIHZhcmlhdGlvbnMgb2YgbmN1cnNlcycgaW5zdGFsbHMuCitkbmwKK2RubCBTZWUgYWxzbyBDRl9DVVJTRVNfSEVBREVSLCB3aGljaCBzZXRzIHRoZSBzYW1lIGNhY2hlIHZhcmlhYmxlLgorQUNfREVGVU4oW0NGX05DVVJTRVNfSEVBREVSXSxbCisKK2lmIHRlc3QgIiRjZl9jdl9uY3Vyc2VzX2giICE9IG5vIDsgdGhlbgorCWNmX2N2X25jdXJzZXNfaGVhZGVyPSRjZl9jdl9uY3Vyc2VzX2gKK2Vsc2UKKworQUNfQ0FDSEVfQ0hFQ0soZm9yICRjZl9uY3VoZHJfcm9vdCBpbmNsdWRlLXBhdGgsIGNmX2N2X25jdXJzZXNfaDIsWworCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvCisJQ0ZfSEVBREVSX1BBVEgoY2Zfc2VhcmNoLCRjZl9uY3VoZHJfcm9vdCkKKwl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyBzZWFyY2ggcGF0aCAkY2Zfc2VhcmNoCisJY2Zfc2F2ZTJfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKwlmb3IgY2ZfaW5jZGlyIGluICRjZl9zZWFyY2gKKwlkbworCQlDRl9BRERfSU5DRElSKCRjZl9pbmNkaXIpCisJCWZvciBjZl9oZWFkZXIgaW4gXAorCQkJbmN1cnNlcy5oIFwKKwkJCWN1cnNlcy5oCisJCWRvCisJCQlDRl9OQ1VSU0VTX0NDX0NIRUNLKGNmX2N2X25jdXJzZXNfaDIsJGNmX2hlYWRlciwkMSkKKwkJCWlmIHRlc3QgIiRjZl9jdl9uY3Vyc2VzX2gyIiAhPSBubyA7IHRoZW4KKwkJCQljZl9jdl9uY3Vyc2VzX2gyPSRjZl9pbmNkaXIvJGNmX2hlYWRlcgorCQkJCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICRhY19uICIJLi4uIGZvdW5kICRhY19jIiAxPiZBQ19GRF9NU0cKKwkJCQlicmVhaworCQkJZmkKKwkJCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJLi4uIHRlc3RlZCAkY2ZfaW5jZGlyLyRjZl9oZWFkZXIiIDE+JkFDX0ZEX01TRworCQlkb25lCisJCUNQUEZMQUdTPSIkY2Zfc2F2ZTJfQ1BQRkxBR1MiCisJCXRlc3QgIiRjZl9jdl9uY3Vyc2VzX2gyIiAhPSBubyAmJiBicmVhaworCWRvbmUKKwl0ZXN0ICIkY2ZfY3ZfbmN1cnNlc19oMiIgPSBubyAmJiBBQ19NU0dfRVJST1Iobm90IGZvdW5kKQorCV0pCisKKwlDRl9ESVJOQU1FKGNmXzFzdF9pbmNkaXIsJGNmX2N2X25jdXJzZXNfaDIpCisJY2ZfY3ZfbmN1cnNlc19oZWFkZXI9YGJhc2VuYW1lICRjZl9jdl9uY3Vyc2VzX2gyYAorCWlmIHRlc3QgYGJhc2VuYW1lICRjZl8xc3RfaW5jZGlyYCA9ICRjZl9uY3VoZHJfcm9vdCA7IHRoZW4KKwkJY2ZfY3ZfbmN1cnNlc19oZWFkZXI9JGNmX25jdWhkcl9yb290LyRjZl9jdl9uY3Vyc2VzX2hlYWRlcgorCWZpCisJQ0ZfQUREX0lOQ0RJUigkY2ZfMXN0X2luY2RpcikKKworZmkKKworIyBTZXQgZGVmaW5pdGlvbnMgdG8gYWxsb3cgaWZkZWYnaW5nIGZvciBuY3Vyc2VzLmgKKworY2FzZSAkY2ZfY3ZfbmN1cnNlc19oZWFkZXIgaW4KKygqbmN1cnNlcy5oKQorCUFDX0RFRklORShIQVZFX05DVVJTRVNfSCwxLFtEZWZpbmUgdG8gMSBpZiB3ZSBoYXZlIG5jdXJzZXMuaF0pCisJOzsKK2VzYWMKKworY2FzZSAkY2ZfY3ZfbmN1cnNlc19oZWFkZXIgaW4KKyhuY3Vyc2VzL2N1cnNlcy5ofG5jdXJzZXMvbmN1cnNlcy5oKQorCUFDX0RFRklORShIQVZFX05DVVJTRVNfTkNVUlNFU19ILDEsW0RlZmluZSB0byAxIGlmIHdlIGhhdmUgbmN1cnNlcy9uY3Vyc2VzLmhdKQorCTs7CisobmN1cnNlc3cvY3Vyc2VzLmh8bmN1cnNlc3cvbmN1cnNlcy5oKQorCUFDX0RFRklORShIQVZFX05DVVJTRVNXX05DVVJTRVNfSCwxLFtEZWZpbmUgdG8gMSBpZiB3ZSBoYXZlIG5jdXJzZXN3L25jdXJzZXMuaF0pCisJOzsKK2VzYWMKKworXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9OQ1VSU0VTX0xJQlMgdmVyc2lvbjogMTcgdXBkYXRlZDogMjAxNS8wNC8xNSAxOTowODo0OAorZG5sIC0tLS0tLS0tLS0tLS0tLQorZG5sIExvb2sgZm9yIHRoZSBuY3Vyc2VzIGxpYnJhcnkuICBUaGlzIGlzIGEgbGl0dGxlIGNvbXBsaWNhdGVkIG9uIExpbnV4LAorZG5sIGJlY2F1c2UgaXQgbWF5IGJlIGxpbmtlZCB3aXRoIHRoZSBncG0gKGdlbmVyYWwgcHVycG9zZSBtb3VzZSkgbGlicmFyeS4KK2RubCBTb21lIGRpc3RyaWJ1dGlvbnMgaGF2ZSBncG0gbGlua2VkIHdpdGggKGJzZCkgY3Vyc2VzLCB3aGljaCBtYWtlcyBpdAorZG5sIHVudXNhYmxlIHdpdGggbmN1cnNlcy4gIEhvd2V2ZXIsIHdlIGRvbid0IHdhbnQgdG8gbGluayB3aXRoIGdwbSB1bmxlc3MKK2RubCBuY3Vyc2VzIGhhcyBhIGRlcGVuZGVuY3ksIHNpbmNlIGdwbSBpcyBub3JtYWxseSBzZXQgdXAgYXMgYSBzaGFyZWQgbGlicmFyeSwKK2RubCBhbmQgdGhlIGxpbmtlciB3aWxsIHJlY29yZCBhIGRlcGVuZGVuY3kuCitkbmwKK2RubCBUaGUgb3B0aW9uYWwgcGFyYW1ldGVyIGdpdmVzIHRoZSByb290IG5hbWUgb2YgdGhlIGxpYnJhcnksIGluIGNhc2UgaXQgaXMKK2RubCBub3QgaW5zdGFsbGVkIGFzIHRoZSBkZWZhdWx0IGN1cnNlcyBsaWJyYXJ5LiAgVGhhdCBpcyBob3cgdGhlCitkbmwgd2lkZS1jaGFyYWN0ZXIgdmVyc2lvbiBvZiBuY3Vyc2VzIGlzIGluc3RhbGxlZC4KK0FDX0RFRlVOKFtDRl9OQ1VSU0VTX0xJQlNdLAorW0FDX1JFUVVJUkUoW0NGX05DVVJTRVNfQ1BQRkxBR1NdKQorCitjZl9uY3VsaWJfcm9vdD1pZmVsc2UoJDEsLG5jdXJzZXMsJDEpCisJIyBUaGlzIHdvcmtzLCBleGNlcHQgZm9yIHRoZSBzcGVjaWFsIGNhc2Ugd2hlcmUgd2UgZmluZCBncG0sIGJ1dAorCSMgbmN1cnNlcyBpcyBpbiBhIG5vbnN0YW5kYXJkIGxvY2F0aW9uIHZpYSAkTElCUywgYW5kIHdlIHJlYWxseSB3YW50CisJIyB0byBsaW5rIGdwbS4KK2NmX25jdXJzZXNfTElCUz0iIgorY2ZfbmN1cnNlc19TQVZFPSIkTElCUyIKK0FDX0NIRUNLX0xJQihncG0sR3BtX09wZW4sCisJW0FDX0NIRUNLX0xJQihncG0saW5pdHNjciwKKwkJW0xJQlM9IiRjZl9uY3Vyc2VzX1NBVkUiXSwKKwkJW2NmX25jdXJzZXNfTElCUz0iLWxncG0iXSldKQorCitjYXNlICRob3N0X29zIGluCisoZnJlZWJzZCopCisJIyBUaGlzIGlzIG9ubHkgbmVjZXNzYXJ5IGlmIHlvdSBhcmUgbGlua2luZyBhZ2FpbnN0IGFuIG9ic29sZXRlCisJIyB2ZXJzaW9uIG9mIG5jdXJzZXMgKGJ1dCBpdCBzaG91bGQgZG8gbm8gaGFybSwgc2luY2UgaXQncyBzdGF0aWMpLgorCWlmIHRlc3QgIiRjZl9uY3VsaWJfcm9vdCIgPSBuY3Vyc2VzIDsgdGhlbgorCQlBQ19DSEVDS19MSUIobXl0aW5mbyx0Z290byxbY2ZfbmN1cnNlc19MSUJTPSItbG15dGluZm8gJGNmX25jdXJzZXNfTElCUyJdKQorCWZpCisJOzsKK2VzYWMKKworQ0ZfQUREX0xJQlMoJGNmX25jdXJzZXNfTElCUykKKworaWYgKCB0ZXN0IC1uICIkY2ZfY3ZfY3Vyc2VzX2RpciIgJiYgdGVzdCAiJGNmX2N2X2N1cnNlc19kaXIiICE9ICJubyIgKQordGhlbgorCUNGX0FERF9MSUJTKC1sJGNmX25jdWxpYl9yb290KQorZWxzZQorCUNGX0ZJTkRfTElCUkFSWSgkY2ZfbmN1bGliX3Jvb3QsJGNmX25jdWxpYl9yb290LAorCQlbI2luY2x1ZGUgPCR7Y2ZfY3ZfbmN1cnNlc19oZWFkZXI6LWN1cnNlcy5ofT5dLAorCQlbaW5pdHNjcigpXSwKKwkJaW5pdHNjcikKK2ZpCisKK2lmIHRlc3QgLW4gIiRjZl9uY3Vyc2VzX0xJQlMiIDsgdGhlbgorCUFDX01TR19DSEVDS0lORyhpZiB3ZSBjYW4gbGluayAkY2ZfbmN1bGliX3Jvb3Qgd2l0aG91dCAkY2ZfbmN1cnNlc19MSUJTKQorCWNmX25jdXJzZXNfU0FWRT0iJExJQlMiCisJZm9yIHAgaW4gJGNmX25jdXJzZXNfTElCUyA7IGRvCisJCXE9YGVjaG8gJExJQlMgfCBzZWQgLWUgInMlJHAgJSUiIC1lICJzJSRwJCUlImAKKwkJaWYgdGVzdCAiJHEiICE9ICIkTElCUyIgOyB0aGVuCisJCQlMSUJTPSIkcSIKKwkJZmkKKwlkb25lCisJQUNfVFJZX0xJTksoWyNpbmNsdWRlIDwke2NmX2N2X25jdXJzZXNfaGVhZGVyOi1jdXJzZXMuaH0+XSwKKwkJW2luaXRzY3IoKTsgbW91c2VtYXNrKDAsMCk7IHRnb3RvKChjaGFyICopMCwgMCwgMCk7XSwKKwkJW0FDX01TR19SRVNVTFQoeWVzKV0sCisJCVtBQ19NU0dfUkVTVUxUKG5vKQorCQkgTElCUz0iJGNmX25jdXJzZXNfU0FWRSJdKQorZmkKKworQ0ZfVVBQRVIoY2ZfbmN1bGliX1JPT1QsSEFWRV9MSUIkY2ZfbmN1bGliX3Jvb3QpCitBQ19ERUZJTkVfVU5RVU9URUQoJGNmX25jdWxpYl9ST09UKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9OQ1VSU0VTX1ZFUlNJT04gdmVyc2lvbjogMTQgdXBkYXRlZDogMjAxMi8xMC8wNiAwODo1Nzo1MQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENoZWNrIGZvciB0aGUgdmVyc2lvbiBvZiBuY3Vyc2VzLCB0byBhaWQgaW4gcmVwb3J0aW5nIGJ1Z3MsIGV0Yy4KK2RubCBDYWxsIENGX0NVUlNFU19DUFBGTEFHUyBmaXJzdCwgb3IgQ0ZfTkNVUlNFU19DUFBGTEFHUy4gIFdlIGRvbid0IHVzZQorZG5sIEFDX1JFUVVJUkUgc2luY2UgdGhhdCBkb2VzIG5vdCB3b3JrIHdpdGggdGhlIHNoZWxsJ3MgaWYvdGhlbi9lbHNlL2ZpLgorQUNfREVGVU4oW0NGX05DVVJTRVNfVkVSU0lPTl0sCitbCitBQ19SRVFVSVJFKFtDRl9DVVJTRVNfQ1BQRkxBR1NdKWRubAorQUNfQ0FDSEVfQ0hFQ0soZm9yIG5jdXJzZXMgdmVyc2lvbiwgY2ZfY3ZfbmN1cnNlc192ZXJzaW9uLFsKKwljZl9jdl9uY3Vyc2VzX3ZlcnNpb249bm8KKwljZl90ZW1wZmlsZT1vdXQkJAorCXJtIC1mICRjZl90ZW1wZmlsZQorCUFDX1RSWV9SVU4oWworI2luY2x1ZGUgPCR7Y2ZfY3ZfbmN1cnNlc19oZWFkZXI6LWN1cnNlcy5ofT4KKyNpbmNsdWRlIDxzdGRpby5oPgoraW50IG1haW4oKQoreworCUZJTEUgKmZwID0gZm9wZW4oIiRjZl90ZW1wZmlsZSIsICJ3Iik7CisjaWZkZWYgTkNVUlNFU19WRVJTSU9OCisjIGlmZGVmIE5DVVJTRVNfVkVSU0lPTl9QQVRDSAorCWZwcmludGYoZnAsICIlcy4lZFxuIiwgTkNVUlNFU19WRVJTSU9OLCBOQ1VSU0VTX1ZFUlNJT05fUEFUQ0gpOworIyBlbHNlCisJZnByaW50ZihmcCwgIiVzXG4iLCBOQ1VSU0VTX1ZFUlNJT04pOworIyBlbmRpZgorI2Vsc2UKKyMgaWZkZWYgX19OQ1VSU0VTX0gKKwlmcHJpbnRmKGZwLCAib2xkXG4iKTsKKyMgZWxzZQorCW1ha2UgYW4gZXJyb3IKKyMgZW5kaWYKKyNlbmRpZgorCSR7Y2ZfY3ZfbWFpbl9yZXR1cm46LXJldHVybn0oMCk7Cit9XSxbCisJY2ZfY3ZfbmN1cnNlc192ZXJzaW9uPWBjYXQgJGNmX3RlbXBmaWxlYF0sLFsKKworCSMgVGhpcyB3aWxsIG5vdCB3b3JrIGlmIHRoZSBwcmVwcm9jZXNzb3Igc3BsaXRzIHRoZSBsaW5lIGFmdGVyIHRoZQorCSMgQXV0b2NvbmYgdG9rZW4uICBUaGUgJ3VucHJvdG8nIHByb2dyYW0gZG9lcyB0aGF0LgorCWNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNpbmNsdWRlIDwke2NmX2N2X25jdXJzZXNfaGVhZGVyOi1jdXJzZXMuaH0+CisjdW5kZWYgQXV0b2NvbmYKKyNpZmRlZiBOQ1VSU0VTX1ZFUlNJT04KK0F1dG9jb25mIE5DVVJTRVNfVkVSU0lPTgorI2Vsc2UKKyNpZmRlZiBfX05DVVJTRVNfSAorQXV0b2NvbmYgIm9sZCIKKyNlbmRpZgorOworI2VuZGlmCitFT0YKKwljZl90cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCAyPiZBQ19GRF9DQyB8IGdyZXAgJ15BdXRvY29uZiAnID5jb25mdGVzdC5vdXQiCisJQUNfVFJZX0VWQUwoY2ZfdHJ5KQorCWlmIHRlc3QgLWYgY29uZnRlc3Qub3V0IDsgdGhlbgorCQljZl9vdXQ9YGNhdCBjb25mdGVzdC5vdXQgfCBzZWQgLWUgJ3MlXkF1dG9jb25mICUlJyAtZSAncyVeW1teIl1dKiIlJScgLWUgJ3MlIi4qJSUnYAorCQl0ZXN0IC1uICIkY2Zfb3V0IiAmJiBjZl9jdl9uY3Vyc2VzX3ZlcnNpb249IiRjZl9vdXQiCisJCXJtIC1mIGNvbmZ0ZXN0Lm91dAorCWZpCitdKQorCXJtIC1mICRjZl90ZW1wZmlsZQorXSkKK3Rlc3QgIiRjZl9jdl9uY3Vyc2VzX3ZlcnNpb24iID0gbm8gfHwgQUNfREVGSU5FKE5DVVJTRVMsMSxbRGVmaW5lIHRvIDEgaWYgd2UgYXJlIHVzaW5nIG5jdXJzZXMgaGVhZGVycy9saWJyYXJpZXNdKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9PQkpfU1VCRElSIHZlcnNpb246IDcgdXBkYXRlZDogMjAxNS8wNC8xNyAyMToxMzowNAorZG5sIC0tLS0tLS0tLS0tLS0KK2RubCBDb21wdXRlIHRoZSBvYmplY3QtZGlyZWN0b3J5IG5hbWUgZnJvbSB0aGUgZ2l2ZW4gbW9kZWwgbmFtZQorQUNfREVGVU4oW0NGX09CSl9TVUJESVJdLAorWworCWNhc2UgJDEgaW4KKwkobGlidG9vbCkgJDI9J29ial9sbycgIDs7CisJKG5vcm1hbCkgICQyPSdvYmplY3RzJyA7OworCShkZWJ1ZykgICAkMj0nb2JqX2cnIDs7CisJKHByb2ZpbGUpICQyPSdvYmpfcCcgOzsKKwkoc2hhcmVkKQorCQljYXNlICRjZl9jdl9zeXN0ZW1fbmFtZSBpbgorCQkoY3lnd2lufG1zeXMpCisJCQkkMj0nb2JqZWN0cycgOzsKKwkJKCopCisJCQkkMj0nb2JqX3MnIDs7CisJCWVzYWMKKwllc2FjCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX1BBVEhTRVAgdmVyc2lvbjogNyB1cGRhdGVkOiAyMDE1LzA0LzEyIDE1OjM5OjAwCitkbmwgLS0tLS0tLS0tLQorZG5sIFByb3ZpZGUgYSB2YWx1ZSBmb3IgdGhlICRQQVRIIGFuZCBzaW1pbGFyIHNlcGFyYXRvciAob3IgYW1lbmQgdGhlIHZhbHVlCitkbmwgYXMgcHJvdmlkZWQgaW4gYXV0b2NvbmYgMi41eCkuCitBQ19ERUZVTihbQ0ZfUEFUSFNFUF0sCitbCisJQUNfTVNHX0NIRUNLSU5HKGZvciBQQVRIIHNlcGFyYXRvcikKKwljYXNlICRjZl9jdl9zeXN0ZW1fbmFtZSBpbgorCShvczIqKQlQQVRIX1NFUEFSQVRPUj0nOycgIDs7CisJKCopCSR7UEFUSF9TRVBBUkFUT1I6PSc6J30gIDs7CisJZXNhYworaWZlbHNlKFskMV0sLCxbJDE9JFBBVEhfU0VQQVJBVE9SXSkKKwlBQ19TVUJTVChQQVRIX1NFUEFSQVRPUikKKwlBQ19NU0dfUkVTVUxUKCRQQVRIX1NFUEFSQVRPUikKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfUEFUSF9TWU5UQVggdmVyc2lvbjogMTYgdXBkYXRlZDogMjAxNS8wNC8xOCAwODo1Njo1NworZG5sIC0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgdGhlIGFyZ3VtZW50IHRvIHNlZSB0aGF0IGl0IGxvb2tzIGxpa2UgYSBwYXRobmFtZS4gIFJld3JpdGUgaXQgaWYgaXQKK2RubCBiZWdpbnMgd2l0aCBvbmUgb2YgdGhlIHByZWZpeC9leGVjX3ByZWZpeCB2YXJpYWJsZXMsIGFuZCB0aGVuIGFnYWluIGlmIHRoZQorZG5sIHJlc3VsdCBiZWdpbnMgd2l0aCAnTk9ORScuICBUaGlzIGlzIG5lY2Vzc2FyeSB0byB3b3JrIGFyb3VuZCBhdXRvY29uZidzCitkbmwgZGVsYXllZCBldmFsdWF0aW9uIG9mIHRob3NlIHN5bWJvbHMuCitBQ19ERUZVTihbQ0ZfUEFUSF9TWU5UQVhdLFsKK2lmIHRlc3QgIngkcHJlZml4IiAhPSB4Tk9ORTsgdGhlbgorCWNmX3BhdGhfc3ludGF4PSIkcHJlZml4IgorZWxzZQorCWNmX3BhdGhfc3ludGF4PSIkYWNfZGVmYXVsdF9wcmVmaXgiCitmaQorCitjYXNlICIuWyRdJDEiIGluCisoLlxbJF1cKCpcKSp8LlwnKlwnKikKKwk7OworKC4ufC4vKnwuXFwqKQorCTs7CisoLltbYS16QS1aXV06W1tcXC9dXSopICMgT1MvMiBFTVgKKwk7OworKC5cWyRdeypwcmVmaXh9KnwuXFskXXsqZGlyfSopCisJZXZhbCAkMT0iWyRdJDEiCisJY2FzZSAiLlskXSQxIiBpbgorCSguTk9ORS8qKQorCQkkMT1gZWNobyBbJF0kMSB8IHNlZCAtZSBzJU5PTkUlJGNmX3BhdGhfc3ludGF4JWAKKwkJOzsKKwllc2FjCisJOzsKKygubm98Lk5PTkUvKikKKwkkMT1gZWNobyBbJF0kMSB8IHNlZCAtZSBzJU5PTkUlJGNmX3BhdGhfc3ludGF4JWAKKwk7OworKCopCisJaWZlbHNlKFskMl0sLFtBQ19NU0dfRVJST1IoW2V4cGVjdGVkIGEgcGF0aG5hbWUsIG5vdCBcIlskXSQxXCJdKV0sJDIpCisJOzsKK2VzYWMKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfUEtHX0NPTkZJRyB2ZXJzaW9uOiAxMCB1cGRhdGVkOiAyMDE1LzA0LzI2IDE4OjA2OjU4CitkbmwgLS0tLS0tLS0tLS0tLQorZG5sIENoZWNrIGZvciB0aGUgcGFja2FnZS1jb25maWcgcHJvZ3JhbSwgdW5sZXNzIGRpc2FibGVkIGJ5IGNvbW1hbmQtbGluZS4KK0FDX0RFRlVOKFtDRl9QS0dfQ09ORklHXSwKK1sKK0FDX01TR19DSEVDS0lORyhpZiB5b3Ugd2FudCB0byB1c2UgcGtnLWNvbmZpZykKK0FDX0FSR19XSVRIKHBrZy1jb25maWcsCisJWyAgLS13aXRoLXBrZy1jb25maWd7PXBhdGh9IGVuYWJsZS9kaXNhYmxlIHVzZSBvZiBwa2ctY29uZmlnXSwKKwlbY2ZfcGtnX2NvbmZpZz0kd2l0aHZhbF0sCisJW2NmX3BrZ19jb25maWc9eWVzXSkKK0FDX01TR19SRVNVTFQoJGNmX3BrZ19jb25maWcpCisKK2Nhc2UgJGNmX3BrZ19jb25maWcgaW4KKyhubykKKwlQS0dfQ09ORklHPW5vbmUKKwk7OworKHllcykKKwlDRl9BQ1ZFUlNJT05fQ0hFQ0soMi41MiwKKwkJW0FDX1BBVEhfVE9PTChQS0dfQ09ORklHLCBwa2ctY29uZmlnLCBub25lKV0sCisJCVtBQ19QQVRIX1BST0coUEtHX0NPTkZJRywgcGtnLWNvbmZpZywgbm9uZSldKQorCTs7CisoKikKKwlQS0dfQ09ORklHPSR3aXRodmFsCisJOzsKK2VzYWMKKwordGVzdCAteiAiJFBLR19DT05GSUciICYmIFBLR19DT05GSUc9bm9uZQoraWYgdGVzdCAiJFBLR19DT05GSUciICE9IG5vbmUgOyB0aGVuCisJQ0ZfUEFUSF9TWU5UQVgoUEtHX0NPTkZJRykKK2VsaWYgdGVzdCAieCRjZl9wa2dfY29uZmlnIiAhPSB4bm8gOyB0aGVuCisJQUNfTVNHX1dBUk4ocGtnLWNvbmZpZyBpcyBub3QgaW5zdGFsbGVkKQorZmkKKworQUNfU1VCU1QoUEtHX0NPTkZJRykKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfUE9TSVhfQ19TT1VSQ0UgdmVyc2lvbjogOSB1cGRhdGVkOiAyMDE1LzA0LzEyIDE1OjM5OjAwCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBEZWZpbmUgX1BPU0lYX0NfU09VUkNFIHRvIHRoZSBnaXZlbiBsZXZlbCwgYW5kIF9QT1NJWF9TT1VSQ0UgaWYgbmVlZGVkLgorZG5sCitkbmwJUE9TSVguMS0xOTkwCQkJCV9QT1NJWF9TT1VSQ0UKK2RubAlQT1NJWC4xLTE5OTAgYW5kCQkJX1BPU0lYX1NPVVJDRSBhbmQKK2RubAkJUE9TSVguMi0xOTkyIEMtTGFuZ3VhZ2UJCQlfUE9TSVhfQ19TT1VSQ0U9MgorZG5sCQlCaW5kaW5ncyBPcHRpb24KK2RubAlQT1NJWC4xYi0xOTkzCQkJCV9QT1NJWF9DX1NPVVJDRT0xOTkzMDlMCitkbmwJUE9TSVguMWMtMTk5NgkJCQlfUE9TSVhfQ19TT1VSQ0U9MTk5NTA2TAorZG5sCVgvT3BlbiAyMDAwCQkJCV9QT1NJWF9DX1NPVVJDRT0yMDAxMTJMCitkbmwKK2RubCBQYXJhbWV0ZXJzOgorZG5sCSQxIGlzIHRoZSBub21pbmFsIHZhbHVlIGZvciBfUE9TSVhfQ19TT1VSQ0UKK0FDX0RFRlVOKFtDRl9QT1NJWF9DX1NPVVJDRV0sCitbCitjZl9QT1NJWF9DX1NPVVJDRT1pZmVsc2UoWyQxXSwsMTk5NTA2TCxbJDFdKQorCitjZl9zYXZlX0NGTEFHUz0iJENGTEFHUyIKK2NmX3NhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKworQ0ZfUkVNT1ZFX0RFRklORShjZl90cmltX0NGTEFHUywkY2Zfc2F2ZV9DRkxBR1MsX1BPU0lYX0NfU09VUkNFKQorQ0ZfUkVNT1ZFX0RFRklORShjZl90cmltX0NQUEZMQUdTLCRjZl9zYXZlX0NQUEZMQUdTLF9QT1NJWF9DX1NPVVJDRSkKKworQUNfQ0FDSEVfQ0hFQ0soaWYgd2Ugc2hvdWxkIGRlZmluZSBfUE9TSVhfQ19TT1VSQ0UsY2ZfY3ZfcG9zaXhfY19zb3VyY2UsWworCUNGX01TR19MT0coaWYgdGhlIHN5bWJvbCBpcyBhbHJlYWR5IGRlZmluZWQgZ28gbm8gZnVydGhlcikKKwlBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHN5cy90eXBlcy5oPl0sWworI2lmbmRlZiBfUE9TSVhfQ19TT1VSQ0UKK21ha2UgYW4gZXJyb3IKKyNlbmRpZl0sCisJW2NmX2N2X3Bvc2l4X2Nfc291cmNlPW5vXSwKKwlbY2Zfd2FudF9wb3NpeF9zb3VyY2U9bm8KKwkgY2FzZSAuJGNmX1BPU0lYX0NfU09VUkNFIGluCisJICguW1sxMl1dPz8qKQorCQljZl9jdl9wb3NpeF9jX3NvdXJjZT0iLURfUE9TSVhfQ19TT1VSQ0U9JGNmX1BPU0lYX0NfU09VUkNFIgorCQk7OworCSAoLjIpCisJCWNmX2N2X3Bvc2l4X2Nfc291cmNlPSItRF9QT1NJWF9DX1NPVVJDRT0kY2ZfUE9TSVhfQ19TT1VSQ0UiCisJCWNmX3dhbnRfcG9zaXhfc291cmNlPXllcworCQk7OworCSAoLiopCisJCWNmX3dhbnRfcG9zaXhfc291cmNlPXllcworCQk7OworCSBlc2FjCisJIGlmIHRlc3QgIiRjZl93YW50X3Bvc2l4X3NvdXJjZSIgPSB5ZXMgOyB0aGVuCisJCUFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+XSxbCisjaWZkZWYgX1BPU0lYX1NPVVJDRQorbWFrZSBhbiBlcnJvcgorI2VuZGlmXSxbXSwKKwkJY2ZfY3ZfcG9zaXhfY19zb3VyY2U9IiRjZl9jdl9wb3NpeF9jX3NvdXJjZSAtRF9QT1NJWF9TT1VSQ0UiKQorCSBmaQorCSBDRl9NU0dfTE9HKGlmZGVmIGZyb20gdmFsdWUgJGNmX1BPU0lYX0NfU09VUkNFKQorCSBDRkxBR1M9IiRjZl90cmltX0NGTEFHUyIKKwkgQ1BQRkxBR1M9IiRjZl90cmltX0NQUEZMQUdTICRjZl9jdl9wb3NpeF9jX3NvdXJjZSIKKwkgQ0ZfTVNHX0xPRyhpZiB0aGUgc2Vjb25kIGNvbXBpbGUgZG9lcyBub3QgbGVhdmUgb3VyIGRlZmluaXRpb24gaW50YWN0IGVycm9yKQorCSBBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHN5cy90eXBlcy5oPl0sWworI2lmbmRlZiBfUE9TSVhfQ19TT1VSQ0UKK21ha2UgYW4gZXJyb3IKKyNlbmRpZl0sLAorCSBbY2ZfY3ZfcG9zaXhfY19zb3VyY2U9bm9dKQorCSBDRkxBR1M9IiRjZl9zYXZlX0NGTEFHUyIKKwkgQ1BQRkxBR1M9IiRjZl9zYXZlX0NQUEZMQUdTIgorCV0pCitdKQorCitpZiB0ZXN0ICIkY2ZfY3ZfcG9zaXhfY19zb3VyY2UiICE9IG5vIDsgdGhlbgorCUNGTEFHUz0iJGNmX3RyaW1fQ0ZMQUdTIgorCUNQUEZMQUdTPSIkY2ZfdHJpbV9DUFBGTEFHUyIKKwlDRl9BRERfQ0ZMQUdTKCRjZl9jdl9wb3NpeF9jX3NvdXJjZSkKK2ZpCisKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfUFJPR19BUiB2ZXJzaW9uOiAxIHVwZGF0ZWQ6IDIwMDkvMDEvMDEgMjA6MTU6MjIKK2RubCAtLS0tLS0tLS0tCitkbmwgQ2hlY2sgZm9yIGFyY2hpdmVyICJhciIuCitBQ19ERUZVTihbQ0ZfUFJPR19BUl0sWworQUNfQ0hFQ0tfVE9PTChBUiwgYXIsIGFyKQorXSkKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9QUk9HX0FXSyB2ZXJzaW9uOiAxIHVwZGF0ZWQ6IDIwMDYvMDkvMTYgMTE6NDA6NTkKK2RubCAtLS0tLS0tLS0tLQorZG5sIENoZWNrIGZvciBhd2ssIGVuc3VyZSB0aGF0IHRoZSBjaGVjayBmb3VuZCBzb21ldGhpbmcuCitBQ19ERUZVTihbQ0ZfUFJPR19BV0tdLAorWworQUNfUFJPR19BV0sKK3Rlc3QgLXogIiRBV0siICYmIEFDX01TR19FUlJPUihObyBhd2sgcHJvZ3JhbSBmb3VuZCkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfUFJPR19DQyB2ZXJzaW9uOiA0IHVwZGF0ZWQ6IDIwMTQvMDcvMTIgMTg6NTc6NTgKK2RubCAtLS0tLS0tLS0tCitkbmwgc3RhbmRhcmQgY2hlY2sgZm9yIENDLCBwbHVzIGZvbGxvd3VwIHNhbml0eSBjaGVja3MKK2RubCAkMSA9IG9wdGlvbmFsIHBhcmFtZXRlciB0byBwYXNzIHRvIEFDX1BST0dfQ0MgdG8gc3BlY2lmeSBjb21waWxlciBuYW1lCitBQ19ERUZVTihbQ0ZfUFJPR19DQ10sWworaWZlbHNlKCQxLCxbQUNfUFJPR19DQ10sW0FDX1BST0dfQ0MoJDEpXSkKK0NGX0dDQ19WRVJTSU9OCitDRl9BQ1ZFUlNJT05fQ0hFQ0soMi41MiwKKwlbQUNfUFJPR19DQ19TVERDXSwKKwlbQ0ZfQU5TSV9DQ19SRVFEXSkKK0NGX0NDX0VOVl9GTEFHUworXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9QUk9HX0NDX0NfTyB2ZXJzaW9uOiAzIHVwZGF0ZWQ6IDIwMTAvMDgvMTQgMTg6MjU6MzcKK2RubCAtLS0tLS0tLS0tLS0tLQorZG5sIEFuYWxvZ291cyB0byBBQ19QUk9HX0NDX0NfTywgYnV0IG1vcmUgdXNlZnVsOiB0ZXN0cyBvbmx5ICRDQywgZW5zdXJlcyB0aGF0CitkbmwgdGhlIG91dHB1dCBmaWxlIGNhbiBiZSByZW5hbWVkLCBhbmQgYWxsb3dzIGZvciBhIHNoZWxsIHZhcmlhYmxlIHRoYXQgY2FuCitkbmwgYmUgdXNlZCBsYXRlci4gIFRoZSBwYXJhbWV0ZXIgaXMgZWl0aGVyIENDIG9yIENYWC4gIFRoZSByZXN1bHQgaXMgdGhlCitkbmwgY2FjaGUgdmFyaWFibGU6CitkbmwJJGNmX2N2X3Byb2dfQ0NfY19vCitkbmwJJGNmX2N2X3Byb2dfQ1hYX2NfbworQUNfREVGVU4oW0NGX1BST0dfQ0NfQ19PXSwKK1tBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciBbJF0kMSB1bmRlcnN0YW5kcyAtYyBhbmQgLW8gdG9nZXRoZXJdKQorQUNfQ0FDSEVfVkFMKGNmX2N2X3Byb2dfJDFfY19vLAorWworY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PENGX0VPRgorI2luY2x1ZGUgPHN0ZGlvLmg+CitpbnQgbWFpbigpCit7CisJJHtjZl9jdl9tYWluX3JldHVybjotcmV0dXJufSgwKTsKK30KK0NGX0VPRgorIyBXZSBkbyB0aGUgdGVzdCB0d2ljZSBiZWNhdXNlIHNvbWUgY29tcGlsZXJzIHJlZnVzZSB0byBvdmVyd3JpdGUgYW4KKyMgZXhpc3RpbmcgLm8gZmlsZSB3aXRoIC1vLCB0aG91Z2ggdGhleSB3aWxsIGNyZWF0ZSBvbmUuCithY190cnk9J1skXSQxIC1jIGNvbmZ0ZXN0LiRhY19leHQgLW8gY29uZnRlc3QyLiRhY19vYmpleHQgPiZBQ19GRF9DQycKK2lmIEFDX1RSWV9FVkFMKGFjX3RyeSkgJiYKKyAgdGVzdCAtZiBjb25mdGVzdDIuJGFjX29iamV4dCAmJiBBQ19UUllfRVZBTChhY190cnkpOwordGhlbgorICBldmFsIGNmX2N2X3Byb2dfJDFfY19vPXllcworZWxzZQorICBldmFsIGNmX2N2X3Byb2dfJDFfY19vPW5vCitmaQorcm0gLXJmIGNvbmZ0ZXN0KgorXSlkbmwKK2lmIHRlc3QgJGNmX2N2X3Byb2dfJDFfY19vID0geWVzOyB0aGVuCisgIEFDX01TR19SRVNVTFQoW3llc10pCitlbHNlCisgIEFDX01TR19SRVNVTFQoW25vXSkKK2ZpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX1BST0dfRUdSRVAgdmVyc2lvbjogMiB1cGRhdGVkOiAyMDE1LzA0LzE4IDA4OjU2OjU3CitkbmwgLS0tLS0tLS0tLS0tLQorZG5sIEFDX1BST0dfRUdSRVAgd2FzIGludHJvZHVjZWQgaW4gYXV0b2NvbmYgMi41My4KK2RubCBUaGlzIG1hY3JvIGFkZHMgYSBjaGVjayB0byBlbnN1cmUgdGhlIHNjcmlwdCBmb3VuZCBzb21ldGhpbmcuCitBQ19ERUZVTihbQ0ZfUFJPR19FR1JFUF0sCitbQUNfQ0FDSEVfQ0hFQ0soW2ZvciBlZ3JlcF0sIFthY19jdl9wcm9nX2VncmVwXSwKKwlbaWYgZWNobyBhIHwgKGdyZXAgLUUgJyhhfGIpJykgPi9kZXYvbnVsbCAyPiYxCisJCXRoZW4gYWNfY3ZfcHJvZ19lZ3JlcD0nZ3JlcCAtRScKKwkJZWxzZSBhY19jdl9wcm9nX2VncmVwPSdlZ3JlcCcKKwlmaV0pCisJRUdSRVA9JGFjX2N2X3Byb2dfZWdyZXAKKwlBQ19TVUJTVChbRUdSRVBdKQorCXRlc3QgLXogIiRFR1JFUCIgJiYgQUNfTVNHX0VSUk9SKE5vIGVncmVwIHByb2dyYW0gZm91bmQpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX1BST0dfRVhUIHZlcnNpb246IDEzIHVwZGF0ZWQ6IDIwMTUvMDQvMTggMDk6MDM6NTgKK2RubCAtLS0tLS0tLS0tLQorZG5sIENvbXB1dGUgJFBST0dfRVhULCB1c2VkIGZvciBub24tVW5peCBwb3J0cywgc3VjaCBhcyBPUy8yIEVNWC4KK0FDX0RFRlVOKFtDRl9QUk9HX0VYVF0sCitbCitBQ19SRVFVSVJFKFtDRl9DSEVDS19DQUNIRV0pCitjYXNlICRjZl9jdl9zeXN0ZW1fbmFtZSBpbgorKG9zMiopCisJQ0ZMQUdTPSIkQ0ZMQUdTIC1abXQiCisJQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRF9fU1RfTVRfRVJSTk9fXyIKKwlDWFhGTEFHUz0iJENYWEZMQUdTIC1abXQiCisJIyBhdXRvY29uZidzIG1hY3JvIHNldHMgLVpleGUgYW5kIHN1ZmZpeCBib3RoLCB3aGljaCBjb25mbGljdDp3CisJTERGTEFHUz0iJExERkxBR1MgLVptdCAtWmNydGRsbCIKKwlhY19jdl9leGVleHQ9LmV4ZQorCTs7Citlc2FjCisKK0FDX0VYRUVYVAorQUNfT0JKRVhUCisKK1BST0dfRVhUPSIkRVhFRVhUIgorQUNfU1VCU1QoUFJPR19FWFQpCit0ZXN0IC1uICIkUFJPR19FWFQiICYmIEFDX0RFRklORV9VTlFVT1RFRChQUk9HX0VYVCwiJFBST0dfRVhUIixbRGVmaW5lIHRvIHRoZSBwcm9ncmFtIGV4dGVuc2lvbiAobm9ybWFsbHkgYmxhbmspXSkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfUFJPR19HTkFUIHZlcnNpb246IDMgdXBkYXRlZDogMjAxNS8wNC8xOCAwODo1Njo1NworZG5sIC0tLS0tLS0tLS0tLQorZG5sIENoZWNrIGZvciBnbmF0bWFrZSwgZW5zdXJlIHRoYXQgaXQgaXMgY29tcGxldGUuCitBQ19ERUZVTihbQ0ZfUFJPR19HTkFUXSxbCitjZl9hZGFfbWFrZT1nbmF0bWFrZQorQUNfQ0hFQ0tfUFJPRyhnbmF0X2V4aXN0cywgJGNmX2FkYV9tYWtlLCB5ZXMsIG5vKQoraWYgdGVzdCAiJGFjX2N2X3Byb2dfZ25hdF9leGlzdHMiID0gbm87IHRoZW4KKwljZl9hZGFfbWFrZT0KKwljZl9jdl9wcm9nX2duYXRfY29ycmVjdD1ubworZWxzZQorCUNGX0dOQVRfVkVSU0lPTgorCUFDX0NIRUNLX1BST0coTTRfZXhpc3RzLCBtNCwgeWVzLCBubykKKwlpZiB0ZXN0ICIkYWNfY3ZfcHJvZ19NNF9leGlzdHMiID0gbm87IHRoZW4KKwkJY2ZfY3ZfcHJvZ19nbmF0X2NvcnJlY3Q9bm8KKwkJZWNobyBBZGE5NSBiaW5kaW5nIHJlcXVpcmVkIHByb2dyYW0gbTQgbm90IGZvdW5kLiBBZGE5NSBiaW5kaW5nIGRpc2FibGVkLgorCWZpCisJaWYgdGVzdCAiJGNmX2N2X3Byb2dfZ25hdF9jb3JyZWN0IiA9IHllczsgdGhlbgorCQlBQ19NU0dfQ0hFQ0tJTkcoaWYgR05BVCB3b3JrcykKKwkJQ0ZfR05BVF9UUllfUlVOKFtwcm9jZWR1cmUgY29uZnRlc3Q7XSwKK1t3aXRoIFRleHRfSU87Cit3aXRoIEdOQVQuT1NfTGliOworcHJvY2VkdXJlIGNvbmZ0ZXN0IGlzCitiZWdpbgorICAgVGV4dF9JTy5QdXQgKCJIZWxsbyBXb3JsZCIpOworICAgVGV4dF9JTy5OZXdfTGluZTsKKyAgIEdOQVQuT1NfTGliLk9TX0V4aXQgKDApOworZW5kIGNvbmZ0ZXN0O10sW2NmX2N2X3Byb2dfZ25hdF9jb3JyZWN0PXllc10sW2NmX2N2X3Byb2dfZ25hdF9jb3JyZWN0PW5vXSkKKwkJQUNfTVNHX1JFU1VMVCgkY2ZfY3ZfcHJvZ19nbmF0X2NvcnJlY3QpCisJZmkKK2ZpCisKK0FDX1NVQlNUKGNmX2FkYV9tYWtlKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9QUk9HX0xOX1MgdmVyc2lvbjogMiB1cGRhdGVkOiAyMDEwLzA4LzE0IDE4OjI1OjM3CitkbmwgLS0tLS0tLS0tLS0tCitkbmwgQ29tYmluZSBjaGVja3MgZm9yICJsbiAtcyIgYW5kICJsbiAtc2YiLCB1cGRhdGluZyAkTE5fUyB0byBpbmNsdWRlICItZiIKK2RubCBvcHRpb24gaWYgaXQgaXMgc3VwcG9ydGVkLgorQUNfREVGVU4oW0NGX1BST0dfTE5fU10sWworQUNfUFJPR19MTl9TCitBQ19NU0dfQ0hFQ0tJTkcoaWYgJExOX1MgLWYgb3B0aW9ucyB3b3JrKQorCitybSAtZiBjb25mJCQuc3JjIGNvbmYkJGRzdAorZWNobyA+Y29uZiQkLmRzdAorZWNobyBmaXJzdCA+Y29uZiQkLnNyYworaWYgJExOX1MgLWYgY29uZiQkLnNyYyBjb25mJCQuZHN0IDI+L2Rldi9udWxsOyB0aGVuCisJY2ZfcHJvZ19sbl9zZj15ZXMKK2Vsc2UKKwljZl9wcm9nX2xuX3NmPW5vCitmaQorcm0gLWYgY29uZiQkLmRzdCBjb25mJCRzcmMKK0FDX01TR19SRVNVTFQoJGNmX3Byb2dfbG5fc2YpCisKK3Rlc3QgIiRjZl9wcm9nX2xuX3NmIiA9IHllcyAmJiBMTl9TPSIkTE5fUyAtZiIKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfUkVNT1ZFX0RFRklORSB2ZXJzaW9uOiAzIHVwZGF0ZWQ6IDIwMTAvMDEvMDkgMTE6MDU6NTAKK2RubCAtLS0tLS0tLS0tLS0tLS0tCitkbmwgUmVtb3ZlIGFsbCAtVSBhbmQgLUQgb3B0aW9ucyB0aGF0IHJlZmVyIHRvIHRoZSBnaXZlbiBzeW1ib2wgZnJvbSBhIGxpc3QKK2RubCBvZiBDIGNvbXBpbGVyIG9wdGlvbnMuICBUaGlzIHdvcmtzIGFyb3VuZCB0aGUgcHJvYmxlbSB0aGF0IG5vdCBhbGwKK2RubCBjb21waWxlcnMgcHJvY2VzcyAtVSBhbmQgLUQgb3B0aW9ucyBmcm9tIGxlZnQtdG8tcmlnaHQsIHNvIGEgLVUgb3B0aW9uCitkbmwgY2Fubm90IGJlIHVzZWQgdG8gY2FuY2VsIHRoZSBlZmZlY3Qgb2YgYSBwcmVjZWRpbmcgLUQgb3B0aW9uLgorZG5sCitkbmwgJDEgPSB0YXJnZXQgKHdoaWNoIGNvdWxkIGJlIHRoZSBzYW1lIGFzIHRoZSBzb3VyY2UgdmFyaWFibGUpCitkbmwgJDIgPSBzb3VyY2UgKGluY2x1ZGluZyAnJCcpCitkbmwgJDMgPSBzeW1ib2wgdG8gcmVtb3ZlCitkZWZpbmUoW0NGX1JFTU9WRV9ERUZJTkVdLAorWworJDE9YGVjaG8gIiQyIiB8IFwKKwlzZWQJLWUgJ3MvLVtbVURdXSciJDMiJ1woPVtbXiAJXV0qXClcP1tbIAldXS8gL2cnIFwKKwkJLWUgJ3MvLVtbVURdXSciJDMiJ1woPVtbXiAJXV0qXClcP1skXS8vZydgCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX1JFTU9WRV9MSUIgdmVyc2lvbjogMSB1cGRhdGVkOiAyMDA3LzAyLzE3IDE0OjExOjUyCitkbmwgLS0tLS0tLS0tLS0tLQorZG5sIFJlbW92ZSB0aGUgZ2l2ZW4gbGlicmFyeSBmcm9tIHRoZSBzeW1ib2wKK2RubAorZG5sICQxID0gdGFyZ2V0ICh3aGljaCBjb3VsZCBiZSB0aGUgc2FtZSBhcyB0aGUgc291cmNlIHZhcmlhYmxlKQorZG5sICQyID0gc291cmNlIChpbmNsdWRpbmcgJyQnKQorZG5sICQzID0gbGlicmFyeSB0byByZW1vdmUKK2RlZmluZShbQ0ZfUkVNT1ZFX0xJQl0sCitbCisjIHJlbW92ZSAkMyBsaWJyYXJ5IGZyb20gJDIKKyQxPWBlY2hvICIkMiIgfCBzZWQgLWUgJ3MvLWwkM1tbIAldXS8vZycgLWUgJ3MvLWwkM1skXS8vJ2AKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfU0hBUkVEX09QVFMgdmVyc2lvbjogODggdXBkYXRlZDogMjAxNS8wOC8wNSAyMDo0NDoyOAorZG5sIC0tLS0tLS0tLS0tLS0tCitkbmwgLS0tLS0tLS0tLS0tLS0KK2RubCBBdHRlbXB0IHRvIGRldGVybWluZSB0aGUgYXBwcm9wcmlhdGUgQ0MvTEQgb3B0aW9ucyBmb3IgY3JlYXRpbmcgYSBzaGFyZWQKK2RubCBsaWJyYXJ5LgorZG5sCitkbmwgTm90ZXM6CitkbmwgYSkgJHtMT0NBTF9MREZMQUdTfSBpcyB1c2VkIHRvIGxpbmsgZXhlY3V0YWJsZXMgdGhhdCB3aWxsIHJ1biB3aXRoaW4KK2RubCB0aGUgYnVpbGQtdHJlZSwgaS5lLiwgYnkgbWFraW5nIHVzZSBvZiB0aGUgbGlicmFyaWVzIHRoYXQgYXJlIGNvbXBpbGVkIGluCitkbmwgJHJlbF9idWlsZGRpci9saWIgV2UgYXZvaWQgY29tcGlsaW5nLWluIGEgJHJlbF9idWlsZGRpci9saWIgcGF0aCBmb3IgdGhlCitkbmwgc2hhcmVkIGxpYnJhcnkgc2luY2UgdGhhdCBjYW4gbGVhZCB0byB1bmV4cGVjdGVkIHJlc3VsdHMgYXQgcnVudGltZS4KK2RubCBiKSAke0xPQ0FMX0xERkxBR1MyfSBoYXMgdGhlIHNhbWUgaW50ZW50aW9uIGJ1dCBhc3N1bWVzIHRoYXQgdGhlIHNoYXJlZAorZG5sIGxpYnJhcmllcyBhcmUgY29tcGlsZWQgaW4gLi4vLi4vbGliCitkbmwKK2RubCBUaGUgdmFyaWFibGUgJ2NmX2N2X2RvX3N5bWxpbmtzJyBpcyB1c2VkIHRvIGNvbnRyb2wgd2hldGhlciB3ZSBjb25maWd1cmUKK2RubCB0byBpbnN0YWxsIHN5bWJvbGljIGxpbmtzIHRvIHRoZSByZWwvYWJpIHZlcnNpb25zIG9mIHNoYXJlZCBsaWJyYXJpZXMuCitkbmwKK2RubCBUaGUgdmFyaWFibGUgJ2NmX2N2X3NobGliX3ZlcnNpb24nIGNvbnRyb2xzIHdoZXRoZXIgd2UgdXNlIHRoZSByZWwgb3IgYWJpCitkbmwgdmVyc2lvbiB3aGVuIG1ha2luZyBzeW1ib2xpYyBsaW5rcy4KK2RubAorZG5sIFRoZSB2YXJpYWJsZSAnY2ZfY3Zfc2hsaWJfdmVyc2lvbl9pbmZpeCcgY29udHJvbHMgd2hldGhlciBzaGFyZWQgbGlicmFyeQorZG5sIHZlcnNpb24gbnVtYmVycyBhcmUgaW5maXggKGV4OiBsaWJuY3Vyc2VzLjx2ZXI+LmR5bGliKSBvciBwb3N0Zml4CitkbmwgKGV4OiBsaWJuY3Vyc2VzLnNvLjx2ZXI+KS4KK2RubAorZG5sIFNvbWUgbG9hZGVycyBsZWF2ZSAnc29fbG9jYXRpb25zJyBseWluZyBhcm91bmQuICBJdCdzIG5pY2UgdG8gY2xlYW4gdXAuCitBQ19ERUZVTihbQ0ZfU0hBUkVEX09QVFNdLAorWworCUFDX1JFUVVJUkUoW0NGX0xEX1JQQVRIX09QVF0pCisJUk1fU0hBUkVEX09QVFM9CisJTE9DQUxfTERGTEFHUz0KKwlMT0NBTF9MREZMQUdTMj0KKwlMRF9TSEFSRURfT1BUUz0KKwlJTlNUQUxMX0xJQj0iLW0gNjQ0IgorCTogJHtyZWxfYnVpbGRkaXI6PS59CisKKwlzaGxpYmRpcj0kbGliZGlyCisJQUNfU1VCU1Qoc2hsaWJkaXIpCisKKwlNQUtFX0RMTFM9IiMiCisJQUNfU1VCU1QoTUFLRV9ETExTKQorCisJY2ZfY3ZfZG9fc3ltbGlua3M9bm8KKwljZl9sZF9ycGF0aF9vcHQ9CisJdGVzdCAiJGNmX2N2X2VuYWJsZV9ycGF0aCIgPSB5ZXMgJiYgY2ZfbGRfcnBhdGhfb3B0PSIkTERfUlBBVEhfT1BUIgorCisJQUNfTVNHX0NIRUNLSU5HKGlmIHJlbGVhc2UvYWJpIHZlcnNpb24gc2hvdWxkIGJlIHVzZWQgZm9yIHNoYXJlZCBsaWJzKQorCUFDX0FSR19XSVRIKHNobGliLXZlcnNpb24sCisJWyAgLS13aXRoLXNobGliLXZlcnNpb249WCAgU3BlY2lmeSByZWwgb3IgYWJpIHZlcnNpb24gZm9yIHNoYXJlZCBsaWJzXSwKKwlbdGVzdCAteiAiJHdpdGh2YWwiICYmIHdpdGh2YWw9YXV0bworCWNhc2UgJHdpdGh2YWwgaW4KKwkoeWVzKQorCQljZl9jdl9zaGxpYl92ZXJzaW9uPWF1dG8KKwkJOzsKKwkocmVsfGFiaXxhdXRvfG5vKQorCQljZl9jdl9zaGxpYl92ZXJzaW9uPSR3aXRodmFsCisJCTs7CisJKCopCisJCUFDX01TR19FUlJPUihbb3B0aW9uIHZhbHVlIG11c3QgYmUgb25lIG9mOiByZWwsIGFiaSwgYXV0byBvciBub10pCisJCTs7CisJZXNhYworCV0sW2NmX2N2X3NobGliX3ZlcnNpb249YXV0b10pCisJQUNfTVNHX1JFU1VMVCgkY2ZfY3Zfc2hsaWJfdmVyc2lvbikKKworCWNmX2N2X3JtX3NvX2xvY3M9bm8KKwljZl90cnlfY2ZsYWdzPQorCisJIyBTb21lIGxlc3MtY2FwYWJsZSBwb3J0cyBvZiBnY2Mgc3VwcG9ydCBvbmx5IC1mcGljCisJQ0NfU0hBUkVEX09QVFM9CisJaWYgdGVzdCAiJEdDQyIgPSB5ZXMKKwl0aGVuCisJCUFDX01TR19DSEVDS0lORyh3aGljaCAkQ0Mgb3B0aW9uIHRvIHVzZSkKKwkJY2Zfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisJCWZvciBDQ19TSEFSRURfT1BUUyBpbiAtZlBJQyAtZnBpYyAnJworCQlkbworCQkJQ0ZMQUdTPSIkY2Zfc2F2ZV9DRkxBR1MgJENDX1NIQVJFRF9PUFRTIgorCQkJQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxzdGRpby5oPl0sW2ludCB4ID0gMV0sW2JyZWFrXSxbXSkKKwkJZG9uZQorCQlBQ19NU0dfUkVTVUxUKCRDQ19TSEFSRURfT1BUUykKKwkJQ0ZMQUdTPSIkY2Zfc2F2ZV9DRkxBR1MiCisJZmkKKworCWNmX2N2X3NobGliX3ZlcnNpb25faW5maXg9bm8KKworCWNhc2UgJGNmX2N2X3N5c3RlbV9uYW1lIGluCisJKGFpeDQuWzMtOV0qfGFpeFtbNS03XV0qKQorCQlpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCQkJQ0NfU0hBUkVEX09QVFM9Jy1XbCwtYnJ0bCcKKwkJCU1LX1NIQVJFRF9MSUI9JyR7Q0N9IC1zaGFyZWQgLVdsLC1icnRsIC1XbCwtYmxpYnBhdGg6JHtSUEFUSF9MSVNUfTovdXNyL2xpYiAtbyBbJF1AJworCQllbHNlCisJCQlDQ19TSEFSRURfT1BUUz0nLWJydGwnCisJCQkjIGFzIHdlbGwgYXMgJy1xcGljPWxhcmdlIC1HJyBvciBwZXJoYXBzICItYk06U1JFIC1ibm9lbnRyeSAtYmV4cGFsbCIKKwkJCU1LX1NIQVJFRF9MSUI9JyR7Q0N9IC1HIC1XbCwtYnJ0bCAtV2wsLWJsaWJwYXRoOiR7UlBBVEhfTElTVH06L3Vzci9saWIgLW8gWyRdQCcKKwkJZmkKKwkJOzsKKwkoYmVvcyopCisJCU1LX1NIQVJFRF9MSUI9JyR7Q0N9ICR7Q0ZMQUdTfSAtbyAkW0BdIC1YbGlua2VyIC1zb25hbWU9YGJhc2VuYW1lICRbQF1gIC1ub3N0YXJ0IC1lIDAnCisJCTs7CisJKGN5Z3dpbiopCisJCUNDX1NIQVJFRF9PUFRTPQorCQlNS19TSEFSRURfTElCPSRTSEVMTCcgJyRyZWxfYnVpbGRkaXInL21rX3NoYXJlZF9saWIuc2ggWyRdQCBbJF17Q0N9IFskXXtDRkxBR1N9JworCQlSTV9TSEFSRURfT1BUUz0iJFJNX1NIQVJFRF9PUFRTICRyZWxfYnVpbGRkaXIvbWtfc2hhcmVkX2xpYi5zaCAqLmRsbC5hIgorCQljZl9jdl9zaGxpYl92ZXJzaW9uPWN5Z2RsbAorCQljZl9jdl9zaGxpYl92ZXJzaW9uX2luZml4PWN5Z2RsbAorCQlzaGxpYmRpcj0kYmluZGlyCisJCU1BS0VfRExMUz0KKwkJY2F0ID5ta19zaGFyZWRfbGliLnNoIDw8LUNGX0VPRgorCQkjISRTSEVMTAorCQlTSEFSRURfTElCPVxbJF0xCisJCUlNUE9SVF9MSUI9XGBlY2hvICJcWyRdMSIgfCBzZWQgLWUgJ3MvY3lnL2xpYi8nIC1lICdzL1tbMC05XV0qXC5kbGxbJF0vLmRsbC5hLydcYAorCQlzaGlmdAorCQljYXQgPDwtRU9GCisJCUxpbmtpbmcgc2hhcmVkIGxpYnJhcnkKKwkJKiogU0hBUkVEX0xJQiBcWyRdU0hBUkVEX0xJQgorCQkqKiBJTVBPUlRfTElCIFxbJF1JTVBPUlRfTElCCitFT0YKKwkJZXhlYyBcWyRdKiAtc2hhcmVkIC1XbCwtLW91dC1pbXBsaWI9XFskXXtJTVBPUlRfTElCfSAtV2wsLS1leHBvcnQtYWxsLXN5bWJvbHMgLW8gXFskXXtTSEFSRURfTElCfQorQ0ZfRU9GCisJCWNobW9kICt4IG1rX3NoYXJlZF9saWIuc2gKKwkJOzsKKwkobXN5cyopCisJCUNDX1NIQVJFRF9PUFRTPQorCQlNS19TSEFSRURfTElCPSRTSEVMTCcgJyRyZWxfYnVpbGRkaXInL21rX3NoYXJlZF9saWIuc2ggWyRdQCBbJF17Q0N9IFskXXtDRkxBR1N9JworCQlSTV9TSEFSRURfT1BUUz0iJFJNX1NIQVJFRF9PUFRTICRyZWxfYnVpbGRkaXIvbWtfc2hhcmVkX2xpYi5zaCAqLmRsbC5hIgorCQljZl9jdl9zaGxpYl92ZXJzaW9uPW1zeXNkbGwKKwkJY2ZfY3Zfc2hsaWJfdmVyc2lvbl9pbmZpeD1tc3lzZGxsCisJCXNobGliZGlyPSRiaW5kaXIKKwkJTUFLRV9ETExTPQorCQljYXQgPm1rX3NoYXJlZF9saWIuc2ggPDwtQ0ZfRU9GCisJCSMhJFNIRUxMCisJCVNIQVJFRF9MSUI9XFskXTEKKwkJSU1QT1JUX0xJQj1cYGVjaG8gIlxbJF0xIiB8IHNlZCAtZSAncy9tc3lzLS9saWIvJyAtZSAncy9bWzAtOV1dKlwuZGxsWyRdLy5kbGwuYS8nXGAKKwkJc2hpZnQKKwkJY2F0IDw8LUVPRgorCQlMaW5raW5nIHNoYXJlZCBsaWJyYXJ5CisJCSoqIFNIQVJFRF9MSUIgXFskXVNIQVJFRF9MSUIKKwkJKiogSU1QT1JUX0xJQiBcWyRdSU1QT1JUX0xJQgorRU9GCisJCWV4ZWMgXFskXSogLXNoYXJlZCAtV2wsLS1vdXQtaW1wbGliPVxbJF17SU1QT1JUX0xJQn0gLVdsLC0tZXhwb3J0LWFsbC1zeW1ib2xzIC1vIFxbJF17U0hBUkVEX0xJQn0KK0NGX0VPRgorCQljaG1vZCAreCBta19zaGFyZWRfbGliLnNoCisJCTs7CisJKGRhcndpbiopCisJCWNmX3RyeV9jZmxhZ3M9Im5vLWNwcC1wcmVjb21wIgorCQlDQ19TSEFSRURfT1BUUz0iLWR5bmFtaWMiCisJCU1LX1NIQVJFRF9MSUI9JyR7Q0N9ICR7Q0ZMQUdTfSAtZHluYW1pY2xpYiAtaW5zdGFsbF9uYW1lICR7bGliZGlyfS9gYmFzZW5hbWUgJFtAXWAgLWNvbXBhdGliaWxpdHlfdmVyc2lvbiAke0FCSV9WRVJTSU9OfSAtY3VycmVudF92ZXJzaW9uICR7QUJJX1ZFUlNJT059IC1vICRbQF0nCisJCXRlc3QgIiRjZl9jdl9zaGxpYl92ZXJzaW9uIiA9IGF1dG8gJiYgY2ZfY3Zfc2hsaWJfdmVyc2lvbj1hYmkKKwkJY2ZfY3Zfc2hsaWJfdmVyc2lvbl9pbmZpeD15ZXMKKwkJQUNfQ0FDSEVfQ0hFQ0soW2lmIGxkIC1zZWFyY2hfcGF0aHNfZmlyc3Qgd29ya3NdLCBjZl9jdl9sZGZsYWdzX3NlYXJjaF9wYXRoc19maXJzdCwgWworCQkJY2Zfc2F2ZV9MREZMQUdTPSRMREZMQUdTCisJCQlMREZMQUdTPSIkTERGTEFHUyAtV2wsLXNlYXJjaF9wYXRoc19maXJzdCIKKwkJCUFDX1RSWV9MSU5LKCwgW2ludCBpO10sIGNmX2N2X2xkZmxhZ3Nfc2VhcmNoX3BhdGhzX2ZpcnN0PXllcywgY2ZfY3ZfbGRmbGFnc19zZWFyY2hfcGF0aHNfZmlyc3Q9bm8pCisJCQkJTERGTEFHUz0kY2Zfc2F2ZV9MREZMQUdTXSkKKwkJaWYgdGVzdCAkY2ZfY3ZfbGRmbGFnc19zZWFyY2hfcGF0aHNfZmlyc3QgPSB5ZXM7IHRoZW4KKwkJCUxERkxBR1M9IiRMREZMQUdTIC1XbCwtc2VhcmNoX3BhdGhzX2ZpcnN0IgorCQlmaQorCQk7OworCShocHV4W1s3LThdXSopCisJCSMgSFAtVVggOC4wNyBsZCBsYWNrcyAiK2IiIG9wdGlvbiB1c2VkIGZvciBsaWJkaXIgc2VhcmNoLWxpc3QKKwkJaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisJCQlDQ19TSEFSRURfT1BUUz0nK1onCisJCWZpCisJCU1LX1NIQVJFRF9MSUI9JyR7TER9IC1iIC1vICRbQF0nCisJCUlOU1RBTExfTElCPSItbSA1NTUiCisJCTs7CisJKGhwdXgqKQorCQkjICh0ZXN0ZWQgd2l0aCBnY2MgMi43LjIgLS0gSSBkb24ndCBoYXZlIGM4OSkKKwkJaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwkJCUxEX1NIQVJFRF9PUFRTPSctWGxpbmtlciArYiAtWGxpbmtlciAke2xpYmRpcn0nCisJCWVsc2UKKwkJCUNDX1NIQVJFRF9PUFRTPScrWicKKwkJCUxEX1NIQVJFRF9PUFRTPSctV2wsK2IsJHtsaWJkaXJ9JworCQlmaQorCQlNS19TSEFSRURfTElCPScke0xEfSArYiAke2xpYmRpcn0gLWIgLW8gJFtAXScKKwkJIyBIUC1VWCBzaGFyZWQgbGlicmFyaWVzIG11c3QgYmUgZXhlY3V0YWJsZSwgYW5kIHNob3VsZCBiZQorCQkjIHJlYWRvbmx5IHRvIGV4cGxvaXQgYSBxdWlyayBpbiB0aGUgbWVtb3J5IG1hbmFnZXIuCisJCUlOU1RBTExfTElCPSItbSA1NTUiCisJCTs7CisJKGludGVyaXgqKQorCQl0ZXN0ICIkY2ZfY3Zfc2hsaWJfdmVyc2lvbiIgPSBhdXRvICYmIGNmX2N2X3NobGliX3ZlcnNpb249cmVsCisJCWlmIHRlc3QgIiRjZl9jdl9zaGxpYl92ZXJzaW9uIiA9IHJlbDsgdGhlbgorCQkJY2Zfc2hhcmVkX3NvbmFtZT0nYGJhc2VuYW1lICRAIC4ke1JFTF9WRVJTSU9OfWAuJHtBQklfVkVSU0lPTn0nCisJCWVsc2UKKwkJCWNmX3NoYXJlZF9zb25hbWU9J2BiYXNlbmFtZSAkQGAnCisJCWZpCisJCUNDX1NIQVJFRF9PUFRTPQorCQlNS19TSEFSRURfTElCPScke0NDfSAtc2hhcmVkIC1XbCwtcnBhdGgsJHtSUEFUSF9MSVNUfSAtV2wsLWgsJyRjZl9zaGFyZWRfc29uYW1lJyAtbyAkQCcKKwkJOzsKKwkoaXJpeCopCisJCWlmIHRlc3QgIiRjZl9jdl9lbmFibGVfcnBhdGgiID0geWVzIDsgdGhlbgorCQkJRVhUUkFfTERGTEFHUz0iJHtjZl9sZF9ycGF0aF9vcHR9XCR7UlBBVEhfTElTVH0gJEVYVFJBX0xERkxBR1MiCisJCWZpCisJCSMgdGVzdGVkIHdpdGggSVJJWCA1LjIgYW5kICdjYycuCisJCWlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorCQkJQ0NfU0hBUkVEX09QVFM9Jy1LUElDJworCQkJTUtfU0hBUkVEX0xJQj0nJHtDQ30gLXNoYXJlZCAtcmRhdGFfc2hhcmVkIC1zb25hbWUgYGJhc2VuYW1lICRbQF1gIC1vICRbQF0nCisJCWVsc2UKKwkJCU1LX1NIQVJFRF9MSUI9JyR7Q0N9IC1zaGFyZWQgLVdsLC1zb25hbWUsYGJhc2VuYW1lICRbQF1gIC1vICRbQF0nCisJCWZpCisJCWNmX2N2X3JtX3NvX2xvY3M9eWVzCisJCTs7CisJKGxpbnV4KnxnbnUqfGsqYnNkKi1nbnUpCisJCWlmIHRlc3QgIiRERlRfTFdSX01PREVMIiA9ICJzaGFyZWQiIDsgdGhlbgorCQkJTE9DQUxfTERGTEFHUz0iJHtMRF9SUEFUSF9PUFR9XCQoTE9DQUxfTElCRElSKSIKKwkJCUxPQ0FMX0xERkxBR1MyPSIkTE9DQUxfTERGTEFHUyIKKwkJZmkKKwkJaWYgdGVzdCAiJGNmX2N2X2VuYWJsZV9ycGF0aCIgPSB5ZXMgOyB0aGVuCisJCQlFWFRSQV9MREZMQUdTPSIke2NmX2xkX3JwYXRoX29wdH1cJHtSUEFUSF9MSVNUfSAkRVhUUkFfTERGTEFHUyIKKwkJZmkKKwkJQ0ZfU0hBUkVEX1NPTkFNRQorCQlNS19TSEFSRURfTElCPScke0NDfSAke0NGTEFHU30gLXNoYXJlZCAtV2wsLXNvbmFtZSwnJGNmX2N2X3NoYXJlZF9zb25hbWUnLC1zdGF0cywtbGMgLW8gJFtAXScKKwkJOzsKKwkobWluZ3cqKQorCQljZl9jdl9zaGxpYl92ZXJzaW9uPW1pbmd3CisJCWNmX2N2X3NobGliX3ZlcnNpb25faW5maXg9bWluZ3cKKwkJc2hsaWJkaXI9JGJpbmRpcgorCQlNQUtFX0RMTFM9CisJCWlmIHRlc3QgIiRERlRfTFdSX01PREVMIiA9ICJzaGFyZWQiIDsgdGhlbgorCQkJTE9DQUxfTERGTEFHUz0iLVdsLC0tZW5hYmxlLWF1dG8taW1wb3J0IgorCQkJTE9DQUxfTERGTEFHUzI9IiRMT0NBTF9MREZMQUdTIgorCQkJRVhUUkFfTERGTEFHUz0iLVdsLC0tZW5hYmxlLWF1dG8taW1wb3J0ICRFWFRSQV9MREZMQUdTIgorCQlmaQorCQlDQ19TSEFSRURfT1BUUz0KKwkJTUtfU0hBUkVEX0xJQj0kU0hFTEwnICckcmVsX2J1aWxkZGlyJy9ta19zaGFyZWRfbGliLnNoIFskXUAgWyRde0NDfSBbJF17Q0ZMQUdTfScKKwkJUk1fU0hBUkVEX09QVFM9IiRSTV9TSEFSRURfT1BUUyAkcmVsX2J1aWxkZGlyL21rX3NoYXJlZF9saWIuc2ggKi5kbGwuYSIKKwkJY2F0ID5ta19zaGFyZWRfbGliLnNoIDw8LUNGX0VPRgorCQkjISRTSEVMTAorCQlTSEFSRURfTElCPVxbJF0xCisJCUlNUE9SVF9MSUI9XGBlY2hvICJcWyRdMSIgfCBzZWQgLWUgJ3MvW1swLTldXSpcLmRsbFskXS8uZGxsLmEvJ1xgCisJCXNoaWZ0CisJCWNhdCA8PC1FT0YKKwkJTGlua2luZyBzaGFyZWQgbGlicmFyeQorCQkqKiBTSEFSRURfTElCIFxbJF1TSEFSRURfTElCCisJCSoqIElNUE9SVF9MSUIgXFskXUlNUE9SVF9MSUIKK0VPRgorCQlleGVjIFxbJF0qIC1zaGFyZWQgLVdsLC0tZW5hYmxlLWF1dG8taW1wb3J0LC0tb3V0LWltcGxpYj1cWyRde0lNUE9SVF9MSUJ9IC1XbCwtLWV4cG9ydC1hbGwtc3ltYm9scyAtbyBcWyRde1NIQVJFRF9MSUJ9CitDRl9FT0YKKwkJY2htb2QgK3ggbWtfc2hhcmVkX2xpYi5zaAorCQk7OworCShvcGVuYnNkW1syLTldXS4qfG1pcmJzZCopCisJCWlmIHRlc3QgIiRERlRfTFdSX01PREVMIiA9ICJzaGFyZWQiIDsgdGhlbgorCQkJTE9DQUxfTERGTEFHUz0iJHtMRF9SUEFUSF9PUFR9XCQoTE9DQUxfTElCRElSKSIKKwkJCUxPQ0FMX0xERkxBR1MyPSIkTE9DQUxfTERGTEFHUyIKKwkJZmkKKwkJaWYgdGVzdCAiJGNmX2N2X2VuYWJsZV9ycGF0aCIgPSB5ZXMgOyB0aGVuCisJCQlFWFRSQV9MREZMQUdTPSIke2NmX2xkX3JwYXRoX29wdH1cJHtSUEFUSF9MSVNUfSAkRVhUUkFfTERGTEFHUyIKKwkJZmkKKwkJQ0NfU0hBUkVEX09QVFM9IiRDQ19TSEFSRURfT1BUUyAtRFBJQyIKKwkJQ0ZfU0hBUkVEX1NPTkFNRQorCQlNS19TSEFSRURfTElCPScke0NDfSAke0NGTEFHU30gLXNoYXJlZCAtV2wsLUJzaGFyZWFibGUsLXNvbmFtZSwnJGNmX2N2X3NoYXJlZF9zb25hbWUnLC1zdGF0cywtbGMgLW8gJFtAXScKKwkJOzsKKwkobnRvLXFueCp8b3BlbmJzZCp8ZnJlZWJzZFtbMTJdXS4qKQorCQlDQ19TSEFSRURfT1BUUz0iJENDX1NIQVJFRF9PUFRTIC1EUElDIgorCQlNS19TSEFSRURfTElCPScke0xEfSAtQnNoYXJlYWJsZSAtbyAkW0BdJworCQl0ZXN0ICIkY2ZfY3Zfc2hsaWJfdmVyc2lvbiIgPSBhdXRvICYmIGNmX2N2X3NobGliX3ZlcnNpb249cmVsCisJCTs7CisJKGRyYWdvbmZseSp8ZnJlZWJzZCopCisJCUNDX1NIQVJFRF9PUFRTPSIkQ0NfU0hBUkVEX09QVFMgLURQSUMiCisJCWlmIHRlc3QgIiRERlRfTFdSX01PREVMIiA9ICJzaGFyZWQiICYmIHRlc3QgIiRjZl9jdl9lbmFibGVfcnBhdGgiID0geWVzIDsgdGhlbgorCQkJTE9DQUxfTERGTEFHUz0iJHtjZl9sZF9ycGF0aF9vcHR9XCQoTE9DQUxfTElCRElSKSIKKwkJCUxPQ0FMX0xERkxBR1MyPSIke2NmX2xkX3JwYXRoX29wdH1cJHtSUEFUSF9MSVNUfSAkTE9DQUxfTERGTEFHUyIKKwkJCUVYVFJBX0xERkxBR1M9IiR7Y2ZfbGRfcnBhdGhfb3B0fVwke1JQQVRIX0xJU1R9ICRFWFRSQV9MREZMQUdTIgorCQlmaQorCQlDRl9TSEFSRURfU09OQU1FCisJCU1LX1NIQVJFRF9MSUI9JyR7Q0N9ICR7Q0ZMQUdTfSAtc2hhcmVkIC1XbCwtc29uYW1lLCckY2ZfY3Zfc2hhcmVkX3NvbmFtZScsLXN0YXRzLC1sYyAtbyAkW0BdJworCQk7OworCShuZXRic2QqKQorCQlDQ19TSEFSRURfT1BUUz0iJENDX1NIQVJFRF9PUFRTIC1EUElDIgorCQlpZiB0ZXN0ICIkREZUX0xXUl9NT0RFTCIgPSAic2hhcmVkIiAmJiB0ZXN0ICIkY2ZfY3ZfZW5hYmxlX3JwYXRoIiA9IHllcyA7IHRoZW4KKwkJCUxPQ0FMX0xERkxBR1M9IiR7Y2ZfbGRfcnBhdGhfb3B0fVwkKExPQ0FMX0xJQkRJUikiCisJCQlMT0NBTF9MREZMQUdTMj0iJExPQ0FMX0xERkxBR1MiCisJCQlFWFRSQV9MREZMQUdTPSIke2NmX2xkX3JwYXRoX29wdH1cJHtSUEFUSF9MSVNUfSAkRVhUUkFfTERGTEFHUyIKKwkJCWlmIHRlc3QgIiRjZl9jdl9zaGxpYl92ZXJzaW9uIiA9IGF1dG87IHRoZW4KKwkJCWlmIHRlc3QgLWYgL3Vzci9saWJleGVjL2xkLmVsZl9zbzsgdGhlbgorCQkJCWNmX2N2X3NobGliX3ZlcnNpb249YWJpCisJCQllbHNlCisJCQkJY2ZfY3Zfc2hsaWJfdmVyc2lvbj1yZWwKKwkJCWZpCisJCQlmaQorCQkJQ0ZfU0hBUkVEX1NPTkFNRQorCQkJTUtfU0hBUkVEX0xJQj0nJHtDQ30gJHtDRkxBR1N9IC1zaGFyZWQgLVdsLC1zb25hbWUsJyRjZl9jdl9zaGFyZWRfc29uYW1lJyAtbyAkW0BdJworCQllbHNlCisJCQlNS19TSEFSRURfTElCPScke0NDfSAtV2wsLXNoYXJlZCAtV2wsLUJzaGFyZWFibGUgLW8gJFtAXScKKwkJZmkKKwkJOzsKKwkob3NmKnxtbHMrKikKKwkJIyB0ZXN0ZWQgd2l0aCBPU0YvMSBWMy4yIGFuZCAnY2MnCisJCSMgdGVzdGVkIHdpdGggT1NGLzEgVjMuMiBhbmQgZ2NjIDIuNi4zIChidXQgdGhlIGMrKyBkZW1vIGRpZG4ndAorCQkjIGxpbmsgd2l0aCBzaGFyZWQgbGlicykuCisJCU1LX1NIQVJFRF9MSUI9JyR7TER9IC1zZXRfdmVyc2lvbiAke1JFTF9WRVJTSU9OfToke0FCSV9WRVJTSU9OfSAtZXhwZWN0X3VucmVzb2x2ZWQgIioiIC1zaGFyZWQgLXNvbmFtZSBgYmFzZW5hbWUgJFtAXWAnCisJCWNhc2UgJGhvc3Rfb3MgaW4KKwkJKG9zZjQqKQorCQkJTUtfU0hBUkVEX0xJQj0iJHtNS19TSEFSRURfTElCfSAtbXN5bSIKKwkJCTs7CisJCWVzYWMKKwkJTUtfU0hBUkVEX0xJQj0iJHtNS19TSEFSRURfTElCfSInIC1vICRbQF0nCisJCWlmIHRlc3QgIiRERlRfTFdSX01PREVMIiA9ICJzaGFyZWQiIDsgdGhlbgorCQkJTE9DQUxfTERGTEFHUz0iJHtMRF9SUEFUSF9PUFR9XCQoTE9DQUxfTElCRElSKSIKKwkJCUxPQ0FMX0xERkxBR1MyPSIkTE9DQUxfTERGTEFHUyIKKwkJZmkKKwkJY2ZfY3Zfcm1fc29fbG9jcz15ZXMKKwkJOzsKKwkoc2NvMy4ydjUqKSAgIyBhbHNvIHV3MiogYW5kIFVXNzogaG9wcyAxMy1BcHItOTgKKwkJIyB0ZXN0ZWQgd2l0aCBvc3I1LjAuNQorCQlpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKwkJCUNDX1NIQVJFRF9PUFRTPSctYmVsZiAtS1BJQycKKwkJZmkKKwkJTUtfU0hBUkVEX0xJQj0nJHtMRH0gLWR5IC1HIC1oIGBiYXNlbmFtZSAkW0BdIC4ke1JFTF9WRVJTSU9OfWAuJHtBQklfVkVSU0lPTn0gLW8gWyRdQCcKKwkJaWYgdGVzdCAiJGNmX2N2X2VuYWJsZV9ycGF0aCIgPSB5ZXMgOyB0aGVuCisJCQkjIG9ubHkgd2F5IGlzIHRvIHNldCBMRF9SVU5fUEFUSCBidXQgbm8gc3dpdGNoIGZvciBpdAorCQkJUlVOX1BBVEg9JGxpYmRpcgorCQlmaQorCQl0ZXN0ICIkY2ZfY3Zfc2hsaWJfdmVyc2lvbiIgPSBhdXRvICYmIGNmX2N2X3NobGliX3ZlcnNpb249cmVsCisJCUxJTktfUFJPR1M9J0xEX1JVTl9QQVRIPSR7bGliZGlyfScKKwkJTElOS19URVNUUz0nUHdkPWBwd2RgO0xEX1JVTl9QQVRIPWBkaXJuYW1lICQke1B3ZH1gL2xpYicKKwkJOzsKKwkoc3Vub3M0KikKKwkJIyB0ZXN0ZWQgd2l0aCBTdW5PUyA0LjEuMSBhbmQgZ2NjIDIuNy4wCisJCWlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorCQkJQ0NfU0hBUkVEX09QVFM9Jy1LUElDJworCQlmaQorCQlNS19TSEFSRURfTElCPScke0xEfSAtYXNzZXJ0IHB1cmUtdGV4dCAtbyAkW0BdJworCQl0ZXN0ICIkY2ZfY3Zfc2hsaWJfdmVyc2lvbiIgPSBhdXRvICYmIGNmX2N2X3NobGliX3ZlcnNpb249cmVsCisJCTs7CisJKHNvbGFyaXMyKikKKwkJIyB0ZXN0ZWQgd2l0aCBTdW5PUyA1LjUuMSAoc29sYXJpcyAyLjUuMSkgYW5kIGdjYyAyLjcuMgorCQkjIHRlc3RlZCB3aXRoIFN1bk9TIDUuMTAgKHNvbGFyaXMgMTApIGFuZCBnY2MgMy40LjMKKwkJaWYgdGVzdCAiJERGVF9MV1JfTU9ERUwiID0gInNoYXJlZCIgOyB0aGVuCisJCQlMT0NBTF9MREZMQUdTPSItUiBcJChMT0NBTF9MSUJESVIpOlwke2xpYmRpcn0iCisJCQlMT0NBTF9MREZMQUdTMj0iJExPQ0FMX0xERkxBR1MiCisJCWZpCisJCWlmIHRlc3QgIiRjZl9jdl9lbmFibGVfcnBhdGgiID0geWVzIDsgdGhlbgorCQkJRVhUUkFfTERGTEFHUz0iLVIgXCR7bGliZGlyfSAkRVhUUkFfTERGTEFHUyIKKwkJZmkKKwkJQ0ZfU0hBUkVEX1NPTkFNRQorCQlpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKwkJCWNmX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorCQkJZm9yIGNmX3NoYXJlZF9vcHRzIGluIC14Y29kZT1waWMzMiAteGNvZGU9cGljMTMgLUtQSUMgLUtwaWMgLU8KKwkJCWRvCisJCQkJQ0ZMQUdTPSIkY2Zfc2hhcmVkX29wdHMgJGNmX3NhdmVfQ0ZMQUdTIgorCQkJCUFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8c3RkaW8uaD5dLFtwcmludGYoIkhlbGxvXG4iKTtdLFticmVha10pCisJCQlkb25lCisJCQlDRkxBR1M9IiRjZl9zYXZlX0NGTEFHUyIKKwkJCUNDX1NIQVJFRF9PUFRTPSRjZl9zaGFyZWRfb3B0cworCQkJTUtfU0hBUkVEX0xJQj0nJHtDQ30gLWR5IC1HIC1oICckY2ZfY3Zfc2hhcmVkX3NvbmFtZScgLW8gJFtAXScKKwkJZWxzZQorCQkJTUtfU0hBUkVEX0xJQj0nJHtDQ30gLXNoYXJlZCAtZHkgLUcgLWggJyRjZl9jdl9zaGFyZWRfc29uYW1lJyAtbyAkW0BdJworCQlmaQorCQk7OworCShzeXN2NXV3Nyp8dW5peF9zdiopCisJCSMgdGVzdGVkIHdpdGggVW5peFdhcmUgNy4xLjAgKGdjYyAyLjk1LjIgYW5kIGNjKQorCQlpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKwkJCUNDX1NIQVJFRF9PUFRTPSctS1BJQycKKwkJZmkKKwkJTUtfU0hBUkVEX0xJQj0nJHtMRH0gLWQgeSAtRyAtbyBbJF1AJworCQk7OworCSgqKQorCQlDQ19TSEFSRURfT1BUUz0ndW5rbm93bicKKwkJTUtfU0hBUkVEX0xJQj0nZWNobyB1bmtub3duJworCQk7OworCWVzYWMKKworCSMgVGhpcyB3b3JrcyBpZiB0aGUgbGFzdCB0b2tlbnMgaW4gJE1LX1NIQVJFRF9MSUIgYXJlIHRoZSAtbyB0YXJnZXQuCisJY2FzZSAiJGNmX2N2X3NobGliX3ZlcnNpb24iIGluCisJKHJlbHxhYmkpCisJCWNhc2UgIiRNS19TSEFSRURfTElCIiBpbgorCQkoKictbyAkW0BdJykKKwkJCXRlc3QgIiRjZl9jdl9kb19zeW1saW5rcyIgPSBubyAmJiBjZl9jdl9kb19zeW1saW5rcz15ZXMKKwkJCTs7CisJCSgqKQorCQkJQUNfTVNHX1dBUk4oaWdub3JlZCAtLXdpdGgtc2hsaWItdmVyc2lvbikKKwkJCTs7CisJCWVzYWMKKwkJOzsKKwllc2FjCisKKwlpZiB0ZXN0IC1uICIkY2ZfdHJ5X2NmbGFncyIKKwl0aGVuCitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSBfX29saW5lX18gIiR7YXNfbWU6LWNvbmZpZ3VyZX0iCisjaW5jbHVkZSA8c3RkaW8uaD4KK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W1tdXSkKK3sKKwlwcmludGYoImhlbGxvXG4iKTsKKwlyZXR1cm4gKGFyZ3ZbW2FyZ2MtMV1dID09IDApIDsKK30KK0VPRgorCQljZl9zYXZlX0NGTEFHUz0iJENGTEFHUyIKKwkJZm9yIGNmX29wdCBpbiAkY2ZfdHJ5X2NmbGFncworCQlkbworCQkJQ0ZMQUdTPSIkY2Zfc2F2ZV9DRkxBR1MgLSRjZl9vcHQiCisJCQlBQ19NU0dfQ0hFQ0tJTkcoaWYgQ0ZMQUdTIG9wdGlvbiAtJGNmX29wdCB3b3JrcykKKwkJCWlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisJCQkJQUNfTVNHX1JFU1VMVCh5ZXMpCisJCQkJY2Zfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisJCQllbHNlCisJCQkJQUNfTVNHX1JFU1VMVChubykKKwkJCWZpCisJCWRvbmUKKwkJQ0ZMQUdTPSIkY2Zfc2F2ZV9DRkxBR1MiCisJZmkKKworCisJIyBSUEFUSF9MSVNUIGlzIGEgY29sb24tc2VwYXJhdGVkIGxpc3Qgb2YgZGlyZWN0b3JpZXMKKwl0ZXN0IC1uICIkY2ZfbGRfcnBhdGhfb3B0IiAmJiBNS19TSEFSRURfTElCPSIkTUtfU0hBUkVEX0xJQiAkY2ZfbGRfcnBhdGhfb3B0XCR7UlBBVEhfTElTVH0iCisJdGVzdCAteiAiJFJQQVRIX0xJU1QiICYmIFJQQVRIX0xJU1Q9Ilwke2xpYmRpcn0iCisKKwl0ZXN0ICRjZl9jdl9ybV9zb19sb2NzID0geWVzICYmIFJNX1NIQVJFRF9PUFRTPSIkUk1fU0hBUkVEX09QVFMgc29fbG9jYXRpb25zIgorCisJQ0ZfVkVSQk9TRShDQ19TSEFSRURfT1BUUzogJENDX1NIQVJFRF9PUFRTKQorCUNGX1ZFUkJPU0UoTUtfU0hBUkVEX0xJQjogICRNS19TSEFSRURfTElCKQorCisJQUNfU1VCU1QoQ0NfU0hBUkVEX09QVFMpCisJQUNfU1VCU1QoTERfUlBBVEhfT1BUKQorCUFDX1NVQlNUKExEX1NIQVJFRF9PUFRTKQorCUFDX1NVQlNUKE1LX1NIQVJFRF9MSUIpCisJQUNfU1VCU1QoUk1fU0hBUkVEX09QVFMpCisKKwlBQ19TVUJTVChMSU5LX1BST0dTKQorCUFDX1NVQlNUKExJTktfVEVTVFMpCisKKwlBQ19TVUJTVChFWFRSQV9MREZMQUdTKQorCUFDX1NVQlNUKExPQ0FMX0xERkxBR1MpCisJQUNfU1VCU1QoTE9DQUxfTERGTEFHUzIpCisKKwlBQ19TVUJTVChJTlNUQUxMX0xJQikKKwlBQ19TVUJTVChSUEFUSF9MSVNUKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9TSEFSRURfU09OQU1FIHZlcnNpb246IDMgdXBkYXRlZDogMjAwOC8wOS8wOCAxODozNDo0MworZG5sIC0tLS0tLS0tLS0tLS0tLS0KK2RubCB1dGlsaXR5IG1hY3JvIGZvciBDRl9TSEFSRURfT1BUUywgY29uc3RydWN0cyAiJGNmX2N2X3NoYXJlZF9zb25hbWUiIGZvcgorZG5sIHN1YnN0aXR1dGlvbiBpbnRvIE1LX1NIQVJFRF9MSUIgc3RyaW5nIGZvciB0aGUgIi1zb25hbWUiIChvciBzaW1pbGFyKQorZG5sIG9wdGlvbi4KK2RubAorZG5sICQxIGlzIHRoZSBkZWZhdWx0IHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yICIkY2ZfY3Zfc2hsaWJfdmVyc2lvbiIuCitkbmwgSWYgbWlzc2luZywgdXNlICJyZWwiLgorZGVmaW5lKFtDRl9TSEFSRURfU09OQU1FXSwKK1sKKwl0ZXN0ICIkY2ZfY3Zfc2hsaWJfdmVyc2lvbiIgPSBhdXRvICYmIGNmX2N2X3NobGliX3ZlcnNpb249aWZlbHNlKCQxLCxyZWwsJDEpCisJaWYgdGVzdCAiJGNmX2N2X3NobGliX3ZlcnNpb24iID0gcmVsOyB0aGVuCisJCWNmX2N2X3NoYXJlZF9zb25hbWU9J2BiYXNlbmFtZSAkW0BdIC4ke1JFTF9WRVJTSU9OfWAuJHtBQklfVkVSU0lPTn0nCisJZWxzZQorCQljZl9jdl9zaGFyZWRfc29uYW1lPSdgYmFzZW5hbWUgJFtAXWAnCisJZmkKK10pCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfU1RSSVBfR19PUFQgdmVyc2lvbjogMyB1cGRhdGVkOiAyMDAyLzEyLzIxIDE5OjI1OjUyCitkbmwgLS0tLS0tLS0tLS0tLS0KK2RubAlSZW1vdmUgIi1nIiBvcHRpb24gZnJvbSB0aGUgY29tcGlsZXIgb3B0aW9ucworQUNfREVGVU4oW0NGX1NUUklQX0dfT1BUXSwKK1skMT1gZWNobyAkeyQxfSB8IHNlZCAtZSAncyUtZyAlJScgLWUgJ3MlLWckJSUnYF0pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfU1VCRElSX1BBVEggdmVyc2lvbjogNyB1cGRhdGVkOiAyMDE0LzEyLzA0IDA0OjMzOjA2CitkbmwgLS0tLS0tLS0tLS0tLS0KK2RubCBDb25zdHJ1Y3QgYSBzZWFyY2gtbGlzdCBmb3IgYSBub25zdGFuZGFyZCBoZWFkZXIvbGliLWZpbGUKK2RubAkkMSA9IHRoZSB2YXJpYWJsZSB0byByZXR1cm4gYXMgcmVzdWx0CitkbmwJJDIgPSB0aGUgcGFja2FnZSBuYW1lCitkbmwJJDMgPSB0aGUgc3ViZGlyZWN0b3J5LCBlLmcuLCBiaW4sIGluY2x1ZGUgb3IgbGliCitBQ19ERUZVTihbQ0ZfU1VCRElSX1BBVEhdLAorWworJDE9CisKK0NGX0FERF9TVUJESVJfUEFUSCgkMSwkMiwkMywkcHJlZml4LE5PTkUpCisKK2ZvciBjZl9zdWJkaXJfcHJlZml4IGluIFwKKwkvdXNyIFwKKwkvdXNyL2xvY2FsIFwKKwkvdXNyL3BrZyBcCisJL29wdCBcCisJL29wdC9sb2NhbCBcCisJWyRdSE9NRQorZG8KKwlDRl9BRERfU1VCRElSX1BBVEgoJDEsJDIsJDMsJGNmX3N1YmRpcl9wcmVmaXgsJHByZWZpeCkKK2RvbmUKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfVEVSTV9IRUFERVIgdmVyc2lvbjogNCB1cGRhdGVkOiAyMDE1LzA0LzE1IDE5OjA4OjQ4CitkbmwgLS0tLS0tLS0tLS0tLS0KK2RubCBMb29rIGZvciB0ZXJtLmgsIHdoaWNoIGlzIHBhcnQgb2YgWC9PcGVuIGN1cnNlcy4gIEl0IGRlZmluZXMgdGhlIGludGVyZmFjZQorZG5sIHRvIHRlcm1pbmZvIGRhdGFiYXNlLiAgVXN1YWxseSBpdCBpcyBpbiB0aGUgc2FtZSBpbmNsdWRlLXBhdGggYXMgY3Vyc2VzLmgsCitkbmwgYnV0IHNvbWUgcGFja2FnZXJzIGNoYW5nZSB0aGlzLCBicmVha2luZyB2YXJpb3VzIGFwcGxpY2F0aW9ucy4KK0FDX0RFRlVOKFtDRl9URVJNX0hFQURFUl0sWworQUNfQ0FDSEVfQ0hFQ0soZm9yIHRlcm1pbmZvIGhlYWRlciwgY2ZfY3ZfdGVybV9oZWFkZXIsWworY2FzZSAke2NmX2N2X25jdXJzZXNfaGVhZGVyfSBpbgorKCovbmN1cnNlcy5ofCovbmN1cnNlc3cuaCkKKwljZl90ZXJtX2hlYWRlcj1gZWNobyAiJGNmX2N2X25jdXJzZXNfaGVhZGVyIiB8IHNlZCAtZSAncyVuY3Vyc2VzW1teLl1dKlwuaCQldGVybS5oJSdgCisJOzsKKygqKQorCWNmX3Rlcm1faGVhZGVyPXRlcm0uaAorCTs7Citlc2FjCisKK2ZvciBjZl90ZXN0IGluICRjZl90ZXJtX2hlYWRlciAibmN1cnNlcy90ZXJtLmgiICJuY3Vyc2Vzdy90ZXJtLmgiCitkbworQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPCR7Y2ZfY3ZfbmN1cnNlc19oZWFkZXI6LWN1cnNlcy5ofT4KKyNpbmNsdWRlIDwkY2ZfdGVzdD4KK10sW2ludCB4ID0gYXV0b19sZWZ0X21hcmdpbl0sWworCWNmX2N2X3Rlcm1faGVhZGVyPSIkY2ZfdGVzdCJdLFsKKwljZl9jdl90ZXJtX2hlYWRlcj11bmtub3duCisJXSkKKwl0ZXN0ICIkY2ZfY3ZfdGVybV9oZWFkZXIiICE9IHVua25vd24gJiYgYnJlYWsKK2RvbmUKK10pCisKKyMgU2V0IGRlZmluaXRpb25zIHRvIGFsbG93IGlmZGVmJ2luZyB0byBhY2NvbW1vZGF0ZSBzdWJkaXJlY3RvcmllcworCitjYXNlICRjZl9jdl90ZXJtX2hlYWRlciBpbgorKCp0ZXJtLmgpCisJQUNfREVGSU5FKEhBVkVfVEVSTV9ILDEsW0RlZmluZSB0byAxIGlmIHdlIGhhdmUgdGVybS5oXSkKKwk7OworZXNhYworCitjYXNlICRjZl9jdl90ZXJtX2hlYWRlciBpbgorKG5jdXJzZXMvdGVybS5oKQorCUFDX0RFRklORShIQVZFX05DVVJTRVNfVEVSTV9ILDEsW0RlZmluZSB0byAxIGlmIHdlIGhhdmUgbmN1cnNlcy90ZXJtLmhdKQorCTs7CisobmN1cnNlc3cvdGVybS5oKQorCUFDX0RFRklORShIQVZFX05DVVJTRVNXX1RFUk1fSCwxLFtEZWZpbmUgdG8gMSBpZiB3ZSBoYXZlIG5jdXJzZXN3L3Rlcm0uaF0pCisJOzsKK2VzYWMKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfVE9QX0JVSUxERElSIHZlcnNpb246IDIgdXBkYXRlZDogMjAxMy8wNy8yNyAxNzozODozMgorZG5sIC0tLS0tLS0tLS0tLS0tLQorZG5sIERlZmluZSBhIHRvcF9idWlsZGRpciBzeW1ib2wsIGZvciBhcHBsaWNhdGlvbnMgdGhhdCBuZWVkIGFuIGFic29sdXRlIHBhdGguCitBQ19ERUZVTihbQ0ZfVE9QX0JVSUxERElSXSwKK1sKK3RvcF9idWlsZGRpcj1pZmVsc2UoJDEsLGBwd2RgLCQxKQorQUNfU1VCU1QodG9wX2J1aWxkZGlyKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9UUllfWE9QRU5fU09VUkNFIHZlcnNpb246IDEgdXBkYXRlZDogMjAxMS8xMC8zMCAxNzowOTo1MAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBJZiBfWE9QRU5fU09VUkNFIGlzIG5vdCBkZWZpbmVkIGluIHRoZSBjb21waWxlIGVudmlyb25tZW50LCBjaGVjayBpZiB3ZQorZG5sIGNhbiBkZWZpbmUgaXQgc3VjY2Vzc2Z1bGx5LgorQUNfREVGVU4oW0NGX1RSWV9YT1BFTl9TT1VSQ0VdLFsKK0FDX0NBQ0hFX0NIRUNLKGlmIHdlIHNob3VsZCBkZWZpbmUgX1hPUEVOX1NPVVJDRSxjZl9jdl94b3Blbl9zb3VyY2UsWworCUFDX1RSWV9DT01QSUxFKFsKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KK10sWworI2lmbmRlZiBfWE9QRU5fU09VUkNFCittYWtlIGFuIGVycm9yCisjZW5kaWZdLAorCVtjZl9jdl94b3Blbl9zb3VyY2U9bm9dLAorCVtjZl9zYXZlPSIkQ1BQRkxBR1MiCisJIENQUEZMQUdTPSIkQ1BQRkxBR1MgLURfWE9QRU5fU09VUkNFPSRjZl9YT1BFTl9TT1VSQ0UiCisJIEFDX1RSWV9DT01QSUxFKFsKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KK10sWworI2lmZGVmIF9YT1BFTl9TT1VSQ0UKK21ha2UgYW4gZXJyb3IKKyNlbmRpZl0sCisJW2NmX2N2X3hvcGVuX3NvdXJjZT1ub10sCisJW2NmX2N2X3hvcGVuX3NvdXJjZT0kY2ZfWE9QRU5fU09VUkNFXSkKKwlDUFBGTEFHUz0iJGNmX3NhdmUiCisJXSkKK10pCisKK2lmIHRlc3QgIiRjZl9jdl94b3Blbl9zb3VyY2UiICE9IG5vIDsgdGhlbgorCUNGX1JFTU9WRV9ERUZJTkUoQ0ZMQUdTLCRDRkxBR1MsX1hPUEVOX1NPVVJDRSkKKwlDRl9SRU1PVkVfREVGSU5FKENQUEZMQUdTLCRDUFBGTEFHUyxfWE9QRU5fU09VUkNFKQorCWNmX3RlbXBfeG9wZW5fc291cmNlPSItRF9YT1BFTl9TT1VSQ0U9JGNmX2N2X3hvcGVuX3NvdXJjZSIKKwlDRl9BRERfQ0ZMQUdTKCRjZl90ZW1wX3hvcGVuX3NvdXJjZSkKK2ZpCitdKQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX1VQUEVSIHZlcnNpb246IDUgdXBkYXRlZDogMjAwMS8wMS8yOSAyMzo0MDo1OQorZG5sIC0tLS0tLS0tCitkbmwgTWFrZSBhbiB1cHBlcmNhc2UgdmVyc2lvbiBvZiBhIHZhcmlhYmxlCitkbmwgJDE9dXBwZXJjYXNlKCQyKQorQUNfREVGVU4oW0NGX1VQUEVSXSwKK1sKKyQxPWBlY2hvICIkMiIgfCBzZWQgeSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyVgCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX1VURjhfTElCIHZlcnNpb246IDggdXBkYXRlZDogMjAxMi8xMC8wNiAwODo1Nzo1MQorZG5sIC0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgZm9yIG11bHRpYnl0ZSBzdXBwb3J0LCBhbmQgaWYgbm90IGZvdW5kLCB1dGY4IGNvbXBhdGliaWxpdHkgbGlicmFyeQorQUNfREVGVU4oW0NGX1VURjhfTElCXSwKK1sKK0FDX0NBQ0hFX0NIRUNLKGZvciBtdWx0aWJ5dGUgY2hhcmFjdGVyIHN1cHBvcnQsY2ZfY3ZfdXRmOF9saWIsWworCWNmX3NhdmVfTElCUz0iJExJQlMiCisJQUNfVFJZX0xJTksoWworI2luY2x1ZGUgPHN0ZGxpYi5oPl0sW3B1dHdjKDAsMCk7XSwKKwlbY2ZfY3ZfdXRmOF9saWI9eWVzXSwKKwlbQ0ZfRklORF9MSU5LQUdFKFsKKyNpbmNsdWRlIDxsaWJ1dGY4Lmg+XSxbcHV0d2MoMCwwKTtdLHV0ZjgsCisJCVtjZl9jdl91dGY4X2xpYj1hZGQtb25dLAorCQlbY2ZfY3ZfdXRmOF9saWI9bm9dKQorXSldKQorCisjIEhBVkVfTElCVVRGOF9IIGlzIHVzZWQgYnkgbmN1cnNlcyBpZiBjdXJzZXMuaCBpcyBzaGFyZWQgYmV0d2VlbgorIyBuY3Vyc2VzL25jdXJzZXN3OgoraWYgdGVzdCAiJGNmX2N2X3V0ZjhfbGliIiA9ICJhZGQtb24iIDsgdGhlbgorCUFDX0RFRklORShIQVZFX0xJQlVURjhfSCwxLFtEZWZpbmUgdG8gMSBpZiB3ZSBzaG91bGQgaW5jbHVkZSBsaWJ1dGY4LmhdKQorCUNGX0FERF9JTkNESVIoJGNmX2N2X2hlYWRlcl9wYXRoX3V0ZjgpCisJQ0ZfQUREX0xJQkRJUigkY2ZfY3ZfbGlicmFyeV9wYXRoX3V0ZjgpCisJQ0ZfQUREX0xJQlMoJGNmX2N2X2xpYnJhcnlfZmlsZV91dGY4KQorZmkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfVkVSQk9TRSB2ZXJzaW9uOiAzIHVwZGF0ZWQ6IDIwMDcvMDcvMjkgMDk6NTU6MTIKK2RubCAtLS0tLS0tLS0tCitkbmwgVXNlIEFDX1ZFUkJPU0Ugdy9vIHRoZSB3YXJuaW5ncworQUNfREVGVU4oW0NGX1ZFUkJPU0VdLAorW3Rlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJJDEiIDE+JkFDX0ZEX01TRworQ0ZfTVNHX0xPRyhbJDFdKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9XRUFLX1NZTUJPTFMgdmVyc2lvbjogMSB1cGRhdGVkOiAyMDA4LzA4LzE2IDE5OjE4OjA2CitkbmwgLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgZm9yIGNvbXBpbGVyLXN1cHBvcnQgZm9yIHdlYWsgc3ltYm9scy4KK2RubCBUaGlzIHdvcmtzIHdpdGggInJlY2VudCIgZ2NjLgorQUNfREVGVU4oW0NGX1dFQUtfU1lNQk9MU10sWworQUNfQ0FDSEVfQ0hFQ0soaWYgJENDIHN1cHBvcnRzIHdlYWsgc3ltYm9scyxjZl9jdl93ZWFrX3N5bWJvbHMsWworCitBQ19UUllfQ09NUElMRShbCisjaW5jbHVkZSA8c3RkaW8uaD5dLAorWworI2lmIGRlZmluZWQoX19HTlVDX18pCisjICBpZiBkZWZpbmVkIF9fVVNFX0lTT0M5OQorIyAgICBkZWZpbmUgX2NhdF9wcmFnbWEoZXhwKQlfUHJhZ21hKCNleHApCisjICAgIGRlZmluZSBfd2Vha19wcmFnbWEoZXhwKQlfY2F0X3ByYWdtYSh3ZWFrIG5hbWUpCisjICBlbHNlCisjICAgIGRlZmluZSBfd2Vha19wcmFnbWEoZXhwKQorIyAgZW5kaWYKKyMgIGRlZmluZSBfZGVjbGFyZShuYW1lKQlfX2V4dGVuc2lvbl9fIGV4dGVybiBfX3R5cGVvZl9fKG5hbWUpIG5hbWUKKyMgIGRlZmluZSB3ZWFrX3N5bWJvbChuYW1lKQlfd2Vha19wcmFnbWEobmFtZSkgX2RlY2xhcmUobmFtZSkgX19hdHRyaWJ1dGVfXygod2VhaykpCisjZW5kaWYKKword2Vha19zeW1ib2woZm9wZW4pOworXSxbY2ZfY3Zfd2Vha19zeW1ib2xzPXllc10sW2NmX2N2X3dlYWtfc3ltYm9scz1ub10pCitdKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9XSVRIX0FEQV9DT01QSUxFUiB2ZXJzaW9uOiAyIHVwZGF0ZWQ6IDIwMTAvMDYvMjYgMTc6MzU6NTgKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENvbW1hbmQtbGluZSBvcHRpb24gdG8gc3BlY2lmeSB0aGUgQWRhOTUgY29tcGlsZXIuCitBQ19ERUZVTihbQ0ZfV0lUSF9BREFfQ09NUElMRVJdLFsKK0FDX01TR19DSEVDS0lORyhmb3IgYWRhLWNvbXBpbGVyKQorQUNfQVJHX1dJVEgoYWRhLWNvbXBpbGVyLAorCVsgIC0td2l0aC1hZGEtY29tcGlsZXI9Q01EIHNwZWNpZnkgQWRhOTUgY29tcGlsZXIgY29tbWFuZCAoZGVmYXVsdCBnbmF0bWFrZSldLAorCVtjZl9hZGFfY29tcGlsZXI9JHdpdGh2YWxdLAorCVtjZl9hZGFfY29tcGlsZXI9Z25hdG1ha2VdKQorQUNfU1VCU1QoY2ZfYWRhX2NvbXBpbGVyKQorQUNfTVNHX1JFU1VMVCgkY2ZfYWRhX2NvbXBpbGVyKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9XSVRIX0FEQV9JTkNMVURFIHZlcnNpb246IDIgdXBkYXRlZDogMjAxMC8wNi8yNiAxNzozNTo1OAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDb21tYW5kLWxpbmUgb3B0aW9uIHRvIHNwZWNpZnkgd2hlcmUgQWRhIGluY2x1ZGVzIHdpbGwgaW5zdGFsbC4KK0FDX0RFRlVOKFtDRl9XSVRIX0FEQV9JTkNMVURFXSxbCitBQ19NU0dfQ0hFQ0tJTkcoZm9yIGFkYS1pbmNsdWRlKQorQ0ZfV0lUSF9QQVRIKGFkYS1pbmNsdWRlLAorICAgWyAgLS13aXRoLWFkYS1pbmNsdWRlPURJUiAgQWRhIGluY2x1ZGVzIGFyZSBpbiBESVJdLAorICAgQURBX0lOQ0xVREUsCisgICBQUkVGSVgvc2hhcmUvYWRhL2FkYWluY2x1ZGUsCisgICBbJF1wcmVmaXgvc2hhcmUvYWRhL2FkYWluY2x1ZGUpCitBQ19TVUJTVChBREFfSU5DTFVERSkKK0FDX01TR19SRVNVTFQoJEFEQV9JTkNMVURFKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9XSVRIX0FEQV9PQkpFQ1RTIHZlcnNpb246IDIgdXBkYXRlZDogMjAxMC8wNi8yNiAxNzozNTo1OAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDb21tYW5kLWxpbmUgb3B0aW9uIHRvIHNwZWNpZnkgd2hlcmUgQWRhIG9iamVjdHMgd2lsbCBpbnN0YWxsLgorQUNfREVGVU4oW0NGX1dJVEhfQURBX09CSkVDVFNdLFsKK0FDX01TR19DSEVDS0lORyhmb3IgYWRhLW9iamVjdHMpCitDRl9XSVRIX1BBVEgoYWRhLW9iamVjdHMsCisgICBbICAtLXdpdGgtYWRhLW9iamVjdHM9RElSICBBZGEgb2JqZWN0cyBhcmUgaW4gRElSXSwKKyAgIEFEQV9PQkpFQ1RTLAorICAgUFJFRklYL2xpYi9hZGEvYWRhbGliLAorICAgWyRdcHJlZml4L2xpYi9hZGEvYWRhbGliKQorQUNfU1VCU1QoQURBX09CSkVDVFMpCitBQ19NU0dfUkVTVUxUKCRBREFfT0JKRUNUUykKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfV0lUSF9BREFfU0hBUkVETElCIHZlcnNpb246IDQgdXBkYXRlZDogMjAxNC8wNS8zMSAyMTowODozNworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENvbW1hbmQtbGluZSBvcHRpb24gdG8gc3BlY2lmeSBpZiBhbiBBZGE5NSBzaGFyZWQtbGlicmFyeSBzaG91bGQgYmUgYnVpbHQsCitkbmwgYW5kIG9wdGlvbmFsbHkgd2hhdCBpdHMgc29uYW1lIHNob3VsZCBiZS4KK0FDX0RFRlVOKFtDRl9XSVRIX0FEQV9TSEFSRURMSUJdLFsKK0FDX01TR19DSEVDS0lORyhpZiBhbiBBZGE5NSBzaGFyZWQtbGlicmFyeSBzaG91bGQgYmUgYnVpbHQpCitBQ19BUkdfV0lUSChhZGEtc2hhcmVkbGliLAorCVsgIC0td2l0aC1hZGEtc2hhcmVkbGliPXNvbmFtZSBidWlsZCBzaGFyZWQtbGlicmFyeSAocmVxdWlyZXMgR05BVCBwcm9qZWN0cyldLAorCVt3aXRoX2FkYV9zaGFyZWRsaWI9JHdpdGh2YWxdLAorCVt3aXRoX2FkYV9zaGFyZWRsaWI9bm9dKQorQUNfTVNHX1JFU1VMVCgkd2l0aF9hZGFfc2hhcmVkbGliKQorCitBREFfU0hBUkVETElCPSdsaWIkKExJQl9OQU1FKS5zby4xJworTUFLRV9BREFfU0hBUkVETElCPSIjIgorCitpZiB0ZXN0ICJ4JHdpdGhfYWRhX3NoYXJlZGxpYiIgIT0geG5vCit0aGVuCisJTUFLRV9BREFfU0hBUkVETElCPQorCWlmIHRlc3QgIngkd2l0aF9hZGFfc2hhcmVkbGliIiAhPSB4eWVzCisJdGhlbgorCQlBREFfU0hBUkVETElCPSIkd2l0aF9hZGFfc2hhcmVkbGliIgorCWZpCitmaQorCitBQ19TVUJTVChBREFfU0hBUkVETElCKQorQUNfU1VCU1QoTUFLRV9BREFfU0hBUkVETElCKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9XSVRIX0NVUlNFU19ESVIgdmVyc2lvbjogMyB1cGRhdGVkOiAyMDEwLzExLzIwIDE3OjAyOjM4CitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgV3JhcHBlciBmb3IgQUNfQVJHX1dJVEggdG8gc3BlY2lmeSBkaXJlY3RvcnkgdW5kZXIgd2hpY2ggdG8gbG9vayBmb3IgY3Vyc2VzCitkbmwgbGlicmFyaWVzLgorQUNfREVGVU4oW0NGX1dJVEhfQ1VSU0VTX0RJUl0sWworCitBQ19NU0dfQ0hFQ0tJTkcoZm9yIHNwZWNpZmljIGN1cnNlcy1kaXJlY3RvcnkpCitBQ19BUkdfV0lUSChjdXJzZXMtZGlyLAorCVsgIC0td2l0aC1jdXJzZXMtZGlyPURJUiAgIGRpcmVjdG9yeSBpbiB3aGljaCAobiljdXJzZXMgaXMgaW5zdGFsbGVkXSwKKwlbY2ZfY3ZfY3Vyc2VzX2Rpcj0kd2l0aHZhbF0sCisJW2NmX2N2X2N1cnNlc19kaXI9bm9dKQorQUNfTVNHX1JFU1VMVCgkY2ZfY3ZfY3Vyc2VzX2RpcikKKworaWYgKCB0ZXN0IC1uICIkY2ZfY3ZfY3Vyc2VzX2RpciIgJiYgdGVzdCAiJGNmX2N2X2N1cnNlc19kaXIiICE9ICJubyIgKQordGhlbgorCUNGX1BBVEhfU1lOVEFYKHdpdGh2YWwpCisJaWYgdGVzdCAtZCAiJGNmX2N2X2N1cnNlc19kaXIiCisJdGhlbgorCQlDRl9BRERfSU5DRElSKCRjZl9jdl9jdXJzZXNfZGlyL2luY2x1ZGUpCisJCUNGX0FERF9MSUJESVIoJGNmX2N2X2N1cnNlc19kaXIvbGliKQorCWZpCitmaQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9XSVRIX0xJQl9QUkVGSVggdmVyc2lvbjogMSB1cGRhdGVkOiAyMDEyLzAxLzIxIDE5OjI4OjEwCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQWxsb3cgdGhlIGxpYnJhcnktcHJlZml4IHRvIGJlIG92ZXJyaWRkZW4uICBPUy8yIEVNWCBvcmlnaW5hbGx5IGhhZCBubworZG5sICJsaWIiIHByZWZpeCwgZS5nLiwgYmVjYXVzZSBpdCB1c2VkIHRoZSBkbGwgbmFtaW5nIGNvbnZlbnRpb24uCitkbmwKK2RubCAkMSA9IHZhcmlhYmxlIHRvIHNldAorQUNfREVGVU4oW0NGX1dJVEhfTElCX1BSRUZJWF0sCitbCitBQ19NU0dfQ0hFQ0tJTkcoaWYgeW91IHdhbnQgdG8gaGF2ZSBhIGxpYnJhcnktcHJlZml4KQorQUNfQVJHX1dJVEgobGliLXByZWZpeCwKKwlbICAtLXdpdGgtbGliLXByZWZpeCAgICAgICBvdmVycmlkZSBsaWJyYXJ5LXByZWZpeF0sCisJW3dpdGhfbGliX3ByZWZpeD0kd2l0aHZhbF0sCisJW3dpdGhfbGliX3ByZWZpeD1hdXRvXSkKK0FDX01TR19SRVNVTFQoJHdpdGhfbGliX3ByZWZpeCkKKworaWYgdGVzdCAkd2l0aF9saWJfcHJlZml4ID0gYXV0bwordGhlbgorCUNGX0xJQl9QUkVGSVgoJDEpCitlbGlmIHRlc3QgJHdpdGhfbGliX3ByZWZpeCA9IG5vCit0aGVuCisJTElCX1BSRUZJWD0KK2Vsc2UKKwlMSUJfUFJFRklYPSR3aXRoX2xpYl9wcmVmaXgKK2ZpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX1dJVEhfUEFUSCB2ZXJzaW9uOiAxMSB1cGRhdGVkOiAyMDEyLzA5LzI5IDE1OjA0OjE5CitkbmwgLS0tLS0tLS0tLS0tCitkbmwgV3JhcHBlciBmb3IgQUNfQVJHX1dJVEggdG8gZW5zdXJlIHRoYXQgdXNlciBzdXBwbGllcyBhIHBhdGhuYW1lLCBub3QganVzdAorZG5sIGRlZmF1bHRpbmcgdG8geWVzL25vLgorZG5sCitkbmwgJDEgPSBvcHRpb24gbmFtZQorZG5sICQyID0gaGVscC10ZXh0CitkbmwgJDMgPSBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBzZXQKK2RubCAkNCA9IGRlZmF1bHQgdmFsdWUsIHNob3duIGluIHRoZSBoZWxwLW1lc3NhZ2UsIG11c3QgYmUgYSBjb25zdGFudAorZG5sICQ1ID0gZGVmYXVsdCB2YWx1ZSwgaWYgaXQncyBhbiBleHByZXNzaW9uICYgY2Fubm90IGJlIGluIHRoZSBoZWxwLW1lc3NhZ2UKK2RubAorQUNfREVGVU4oW0NGX1dJVEhfUEFUSF0sCitbQUNfQVJHX1dJVEgoJDEsWyQyIF0oZGVmYXVsdDogaWZlbHNlKFskNF0sLGVtcHR5LFskNF0pKSwsCitpZmVsc2UoWyQ0XSwsW3dpdGh2YWw9IiR7JDN9Il0sW3dpdGh2YWw9IiR7JDM6LWlmZWxzZShbJDVdLCxbJDRdLFskNV0pfSJdKSlkbmwKK2lmIGlmZWxzZShbJDVdLCx0cnVlLFt0ZXN0IC1uICIkNSJdKSA7IHRoZW4KK0NGX1BBVEhfU1lOVEFYKHdpdGh2YWwpCitmaQorZXZhbCAkMz0iJHdpdGh2YWwiCitBQ19TVUJTVCgkMylkbmwKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfV0lUSF9QS0dfQ09ORklHX0xJQkRJUiB2ZXJzaW9uOiA5IHVwZGF0ZWQ6IDIwMTUvMDYvMDYgMTk6MjY6NDQKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQWxsb3cgdGhlIGNob2ljZSBvZiB0aGUgcGtnLWNvbmZpZyBsaWJyYXJ5IGRpcmVjdG9yeSB0byBiZSBvdmVycmlkZGVuLgorQUNfREVGVU4oW0NGX1dJVEhfUEtHX0NPTkZJR19MSUJESVJdLFsKK2lmIHRlc3QgIngkUEtHX0NPTkZJRyIgPSB4bm9uZSA7IHRoZW4KKwlQS0dfQ09ORklHX0xJQkRJUj1ubworZWxzZQorCUFDX01TR19DSEVDS0lORyhmb3IgJFBLR19DT05GSUcgbGlicmFyeSBkaXJlY3RvcnkpCisJQUNfQVJHX1dJVEgocGtnLWNvbmZpZy1saWJkaXIsCisJCVsgIC0td2l0aC1wa2ctY29uZmlnLWxpYmRpcj1YWFggdXNlIGdpdmVuIGRpcmVjdG9yeSBmb3IgaW5zdGFsbGluZyBwYy1maWxlc10sCisJCVtQS0dfQ09ORklHX0xJQkRJUj0kd2l0aHZhbF0sCisJCVtQS0dfQ09ORklHX0xJQkRJUj15ZXNdKQorZmkKKworY2FzZSB4JFBLR19DT05GSUdfTElCRElSIGluCisoeC8qKQorCTs7CisoeHllcykKKwkjIExvb2sgZm9yIHRoZSBsaWJyYXJ5IGRpcmVjdG9yeSB1c2luZyB0aGUgc2FtZSBwcmVmaXggYXMgdGhlIGV4ZWN1dGFibGUKKwlpZiB0ZXN0ICJ4JFBLR19DT05GSUciID0geG5vbmUKKwl0aGVuCisJCWNmX3BhdGg9JHByZWZpeAorCWVsc2UKKwkJY2ZfcGF0aD1gZWNobyAiJFBLR19DT05GSUciIHwgc2VkIC1lICdzLC9bW14vXV0qL1tbXi9dXSokLCwnYAorCWZpCisKKwkjIElmIHlvdSBkb24ndCBsaWtlIHVzaW5nIHRoZSBkZWZhdWx0IGFyY2hpdGVjdHVyZSwgeW91IGhhdmUgdG8gc3BlY2lmeSB0aGUKKwkjIGludGVuZGVkIGxpYnJhcnkgZGlyZWN0b3J5IGFuZCBjb3JyZXNwb25kaW5nIGNvbXBpbGVyL2xpbmtlciBvcHRpb25zLgorCSMKKwkjIFRoaXMgY2FzZSBhbGxvd3MgZm9yIERlYmlhbidzIDIwMTQtZmxhdm9yIG9mIG11bHRpYXJjaCwgYWxvbmcgd2l0aCB0aGUKKwkjIG1vc3QgY29tbW9uIHZhcmlhdGlvbnMgYmVmb3JlIHRoYXQgcG9pbnQuICBTb21lIG90aGVyIHZhcmlhbnRzIHNwZWxsIHRoZQorCSMgZGlyZWN0b3J5IGRpZmZlcmVudGx5LCBlLmcuLCAicGtnLWNvbmZpZyIsIGFuZCBwdXQgaXQgaW4gdW51c3VhbCBwbGFjZXMuCisJIyBwa2ctY29uZmlnIGhhcyBhbHdheXMgYmVlbiBwb29ybHkgc3RhbmRhcmRpemVkLCB3aGljaCBpcyBpcm9uaWMuLi4KKwljYXNlIHhgKGFyY2gpIDI+L2Rldi9udWxsYCBpbgorCSgqNjQpCisJCWNmX3NlYXJjaF9wYXRoPSJcCisJCQkkY2ZfcGF0aC9saWIvKjY0LWxpbnV4LWdudSBcCisJCQkkY2ZfcGF0aC9zaGFyZSBcCisJCQkkY2ZfcGF0aC9saWI2NCBcCisJCQkkY2ZfcGF0aC9saWIzMiBcCisJCQkkY2ZfcGF0aC9saWIiCisJCTs7CisJKCopCisJCWNmX3NlYXJjaF9wYXRoPSJcCisJCQkkY2ZfcGF0aC9saWIvKi1saW51eC1nbnUgXAorCQkJJGNmX3BhdGgvc2hhcmUgXAorCQkJJGNmX3BhdGgvbGliMzIgXAorCQkJJGNmX3BhdGgvbGliIFwKKwkJCSRjZl9wYXRoL2xpYmRhdGEiCisJCTs7CisJZXNhYworCisJQ0ZfVkVSQk9TRShsaXN0Li4uKQorCWZvciBjZl9jb25maWcgaW4gJGNmX3NlYXJjaF9wYXRoCisJZG8KKwkJQ0ZfVkVSQk9TRShjaGVja2luZyAkY2ZfY29uZmlnL3BrZ2NvbmZpZykKKwkJaWYgdGVzdCAtZCAkY2ZfY29uZmlnL3BrZ2NvbmZpZworCQl0aGVuCisJCQlQS0dfQ09ORklHX0xJQkRJUj0kY2ZfY29uZmlnL3BrZ2NvbmZpZworCQkJQUNfTVNHX0NIRUNLSU5HKGRvbmUpCisJCQlicmVhaworCQlmaQorCWRvbmUKKwk7OworKCopCisJOzsKK2VzYWMKKworaWYgdGVzdCAieCRQS0dfQ09ORklHIiAhPSB4bm9uZSA7IHRoZW4KKwlBQ19NU0dfUkVTVUxUKCRQS0dfQ09ORklHX0xJQkRJUikKK2ZpCisKK0FDX1NVQlNUKFBLR19DT05GSUdfTElCRElSKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9XSVRIX1BUSFJFQUQgdmVyc2lvbjogNyB1cGRhdGVkOiAyMDE1LzA0LzE4IDA4OjU2OjU3CitkbmwgLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgZm9yIFBPU0lYIHRocmVhZCBsaWJyYXJ5LgorQUNfREVGVU4oW0NGX1dJVEhfUFRIUkVBRF0sCitbCitBQ19NU0dfQ0hFQ0tJTkcoaWYgeW91IHdhbnQgdG8gbGluayB3aXRoIHRoZSBwdGhyZWFkIGxpYnJhcnkpCitBQ19BUkdfV0lUSChwdGhyZWFkLAorCVsgIC0td2l0aC1wdGhyZWFkICAgICAgICAgIHVzZSBQT1NJWCB0aHJlYWQgbGlicmFyeV0sCisJW3dpdGhfcHRocmVhZD0kd2l0aHZhbF0sCisJW3dpdGhfcHRocmVhZD1ub10pCitBQ19NU0dfUkVTVUxUKCR3aXRoX3B0aHJlYWQpCisKK2lmIHRlc3QgIiR3aXRoX3B0aHJlYWQiICE9IG5vIDsgdGhlbgorCUFDX0NIRUNLX0hFQURFUihwdGhyZWFkLmgsWworCUFDX0RFRklORShIQVZFX1BUSFJFQURTX0gsMSxbRGVmaW5lIHRvIDEgaWYgd2UgaGF2ZSBwdGhyZWFkcy5oIGhlYWRlcl0pCisKKwlmb3IgY2ZfbGliX3B0aHJlYWQgaW4gcHRocmVhZCBjX3IKKwlkbworCSAgICBBQ19NU0dfQ0hFQ0tJTkcoaWYgd2UgY2FuIGxpbmsgd2l0aCB0aGUgJGNmX2xpYl9wdGhyZWFkIGxpYnJhcnkpCisJICAgIGNmX3NhdmVfTElCUz0iJExJQlMiCisJICAgIENGX0FERF9MSUIoJGNmX2xpYl9wdGhyZWFkKQorCSAgICBBQ19UUllfTElOSyhbCisjaW5jbHVkZSA8cHRocmVhZC5oPgorXSxbCisJCWludCByYyA9IHB0aHJlYWRfY3JlYXRlKDAsMCwwLDApOworCQlpbnQgcjIgPSBwdGhyZWFkX211dGV4YXR0cl9zZXR0eXBlKDAsIDApOworXSxbd2l0aF9wdGhyZWFkPXllc10sW3dpdGhfcHRocmVhZD1ub10pCisJICAgIExJQlM9IiRjZl9zYXZlX0xJQlMiCisJICAgIEFDX01TR19SRVNVTFQoJHdpdGhfcHRocmVhZCkKKwkgICAgdGVzdCAiJHdpdGhfcHRocmVhZCIgPSB5ZXMgJiYgYnJlYWsKKwlkb25lCisKKwlpZiB0ZXN0ICIkd2l0aF9wdGhyZWFkIiA9IHllcyA7IHRoZW4KKwkgICAgQ0ZfQUREX0xJQigkY2ZfbGliX3B0aHJlYWQpCisJICAgIEFDX0RFRklORShIQVZFX0xJQlBUSFJFQURTLDEsW0RlZmluZSB0byAxIGlmIHdlIGhhdmUgcHRocmVhZHMgbGlicmFyeV0pCisJZWxzZQorCSAgICBBQ19NU0dfRVJST1IoQ2Fubm90IGxpbmsgd2l0aCBwdGhyZWFkIGxpYnJhcnkpCisJZmkKKwldKQorZmkKK10pCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfV0lUSF9TWVNUWVBFIHZlcnNpb246IDEgdXBkYXRlZDogMjAxMy8wMS8yNiAxNjoyNjoxMgorZG5sIC0tLS0tLS0tLS0tLS0tLQorZG5sIEZvciB0ZXN0aW5nLCBvdmVycmlkZSB0aGUgZGVyaXZlZCBob3N0IHN5c3RlbS10eXBlIHdoaWNoIGlzIHVzZWQgdG8gZGVjaWRlCitkbmwgdGhpbmdzIHN1Y2ggYXMgdGhlIGxpbmtlciBjb21tYW5kcyB1c2VkIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMuICBUaGlzIGlzCitkbmwgbm9ybWFsbHkgY2hvc2VuIGF1dG9tYXRpY2FsbHkgYmFzZWQgb24gdGhlIHR5cGUgb2Ygc3lzdGVtIHdoaWNoIHlvdSBhcmUKK2RubCBidWlsZGluZyBvbi4gIFdlIHVzZSBpdCBmb3IgdGVzdGluZyB0aGUgY29uZmlndXJlIHNjcmlwdC4KK2RubAorZG5sIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gdGhlIC0taG9zdCBvcHRpb246IGl0IGlzIHVzZWQgb25seSBmb3IgdGVzdGluZyBwYXJ0cworZG5sIG9mIHRoZSBjb25maWd1cmUgc2NyaXB0IHdoaWNoIHdvdWxkIG5vdCBiZSByZWFjaGFibGUgd2l0aCAtLWhvc3Qgc2luY2UgdGhhdAorZG5sIHJlbGllcyBvbiB0aGUgYnVpbGQgZW52aXJvbm1lbnQgYmVpbmcgcmVhbCwgcmF0aGVyIHRoYW4gbW9ja2VkIHVwLgorQUNfREVGVU4oW0NGX1dJVEhfU1lTVFlQRV0sWworQ0ZfQ0hFQ0tfQ0FDSEUoW0FDX0NBTk9OSUNBTF9TWVNURU1dKQorQUNfQVJHX1dJVEgoc3lzdGVtLXR5cGUsCisJWyAgLS13aXRoLXN5c3RlbS10eXBlPVhYWCAgdGVzdDogb3ZlcnJpZGUgZGVyaXZlZCBob3N0IHN5c3RlbS10eXBlXSwKK1tBQ19NU0dfV0FSTihvdmVycmlkaW5nIHN5c3RlbSB0eXBlIHRvICR3aXRodmFsKQorCWNmX2N2X3N5c3RlbV9uYW1lPSR3aXRodmFsCisJaG9zdF9vcz0kd2l0aHZhbAorXSkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfWE9QRU5fU09VUkNFIHZlcnNpb246IDQ5IHVwZGF0ZWQ6IDIwMTUvMDQvMTIgMTU6Mzk6MDAKK2RubCAtLS0tLS0tLS0tLS0tLS0KK2RubCBUcnkgdG8gZ2V0IF9YT1BFTl9TT1VSQ0UgZGVmaW5lZCBwcm9wZXJseSB0aGF0IHdlIGNhbiB1c2UgUE9TSVggZnVuY3Rpb25zLAorZG5sIG9yIGFkYXB0IHRvIHRoZSB2ZW5kb3IncyBkZWZpbml0aW9ucyB0byBnZXQgZXF1aXZhbGVudCBmdW5jdGlvbmFsaXR5LAorZG5sIHdpdGhvdXQgbG9zaW5nIHRoZSBjb21tb24gbm9uLVBPU0lYIGZlYXR1cmVzLgorZG5sCitkbmwgUGFyYW1ldGVyczoKK2RubAkkMSBpcyB0aGUgbm9taW5hbCB2YWx1ZSBmb3IgX1hPUEVOX1NPVVJDRQorZG5sCSQyIGlzIHRoZSBub21pbmFsIHZhbHVlIGZvciBfUE9TSVhfQ19TT1VSQ0UKK0FDX0RFRlVOKFtDRl9YT1BFTl9TT1VSQ0VdLFsKK0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkKKworY2ZfWE9QRU5fU09VUkNFPWlmZWxzZShbJDFdLCw1MDAsWyQxXSkKK2NmX1BPU0lYX0NfU09VUkNFPWlmZWxzZShbJDJdLCwxOTk1MDZMLFskMl0pCitjZl94b3Blbl9zb3VyY2U9CisKK2Nhc2UgJGhvc3Rfb3MgaW4KKyhhaXhbWzQtN11dKikKKwljZl94b3Blbl9zb3VyY2U9Ii1EX0FMTF9TT1VSQ0UiCisJOzsKKyhjeWd3aW58bXN5cykKKwljZl9YT1BFTl9TT1VSQ0U9NjAwCisJOzsKKyhkYXJ3aW5bWzAtOF1dLiopCisJY2ZfeG9wZW5fc291cmNlPSItRF9BUFBMRV9DX1NPVVJDRSIKKwk7OworKGRhcndpbiopCisJY2ZfeG9wZW5fc291cmNlPSItRF9EQVJXSU5fQ19TT1VSQ0UiCisJY2ZfWE9QRU5fU09VUkNFPQorCTs7CisoZnJlZWJzZCp8ZHJhZ29uZmx5KikKKwkjIDUueCBoZWFkZXJzIGFzc29jaWF0ZQorCSMJX1hPUEVOX1NPVVJDRT02MDAgd2l0aCBfUE9TSVhfQ19TT1VSQ0U9MjAwMTEyTAorCSMJX1hPUEVOX1NPVVJDRT01MDAgd2l0aCBfUE9TSVhfQ19TT1VSQ0U9MTk5NTA2TAorCWNmX1BPU0lYX0NfU09VUkNFPTIwMDExMkwKKwljZl9YT1BFTl9TT1VSQ0U9NjAwCisJY2ZfeG9wZW5fc291cmNlPSItRF9CU0RfVFlQRVMgLURfX0JTRF9WSVNJQkxFIC1EX1BPU0lYX0NfU09VUkNFPSRjZl9QT1NJWF9DX1NPVVJDRSAtRF9YT1BFTl9TT1VSQ0U9JGNmX1hPUEVOX1NPVVJDRSIKKwk7OworKGhwdXgxMSopCisJY2ZfeG9wZW5fc291cmNlPSItRF9IUFVYX1NPVVJDRSAtRF9YT1BFTl9TT1VSQ0U9NTAwIgorCTs7CisoaHB1eCopCisJY2ZfeG9wZW5fc291cmNlPSItRF9IUFVYX1NPVVJDRSIKKwk7OworKGlyaXhbWzU2XV0uKikKKwljZl94b3Blbl9zb3VyY2U9Ii1EX1NHSV9TT1VSQ0UiCisJY2ZfWE9QRU5fU09VUkNFPQorCTs7CisobGludXgqfGdudSp8bWludCp8aypic2QqLWdudSkKKwlDRl9HTlVfU09VUkNFCisJOzsKKyhtaW5peCopCisJY2ZfeG9wZW5fc291cmNlPSItRF9ORVRCU0RfU09VUkNFIiAjIFBPU0lYLjEtMjAwMSBmZWF0dXJlcyBhcmUgaWZkZWYnZCB3aXRoIHRoaXMuLi4KKwk7OworKG1pcmJzZCopCisJIyBzZXR0aW5nIF9YT1BFTl9TT1VSQ0Ugb3IgX1BPU0lYX1NPVVJDRSBicmVha3MgPHN5cy9zZWxlY3QuaD4gYW5kIG90aGVyIGhlYWRlcnMgd2hpY2ggdXNlIHVfaW50IC8gdV9zaG9ydCB0eXBlcworCWNmX1hPUEVOX1NPVVJDRT0KKwlDRl9QT1NJWF9DX1NPVVJDRSgkY2ZfUE9TSVhfQ19TT1VSQ0UpCisJOzsKKyhuZXRic2QqKQorCWNmX3hvcGVuX3NvdXJjZT0iLURfTkVUQlNEX1NPVVJDRSIgIyBzZXR0aW5nIF9YT1BFTl9TT1VSQ0UgYnJlYWtzIElQdjYgZm9yIGx5bnggb24gTmV0QlNEIDEuNiwgYnJlYWtzIHh0ZXJtLCBpcyBub3QgbmVlZGVkIGZvciBuY3Vyc2VzdworCTs7Cisob3BlbmJzZFtbNC05XV0qKQorCSMgc2V0dGluZyBfWE9QRU5fU09VUkNFIGxvd2VyIHRoYW4gNTAwIGJyZWFrcyBnKysgY29tcGlsZSB3aXRoIHdjaGFyLmgsIG5lZWRlZCBmb3IgbmN1cnNlc3cKKwljZl94b3Blbl9zb3VyY2U9Ii1EX0JTRF9TT1VSQ0UiCisJY2ZfWE9QRU5fU09VUkNFPTYwMAorCTs7Cisob3BlbmJzZCopCisJIyBzZXR0aW5nIF9YT1BFTl9TT1VSQ0UgYnJlYWtzIHh0ZXJtIG9uIE9wZW5CU0QgMi44LCBpcyBub3QgbmVlZGVkIGZvciBuY3Vyc2VzdworCTs7Cisob3NmW1s0NV1dKikKKwljZl94b3Blbl9zb3VyY2U9Ii1EX09TRl9TT1VSQ0UiCisJOzsKKyhudG8tcW54KikKKwljZl94b3Blbl9zb3VyY2U9Ii1EX1FOWF9TT1VSQ0UiCisJOzsKKyhzY28qKQorCSMgc2V0dGluZyBfWE9QRU5fU09VUkNFIGJyZWFrcyBMeW54IG9uIFNDTyBVbml4IC8gT3BlblNlcnZlcgorCTs7Cisoc29sYXJpczIuKikKKwljZl94b3Blbl9zb3VyY2U9Ii1EX19FWFRFTlNJT05TX18iCisJY2ZfY3ZfeG9wZW5fc291cmNlPWJyb2tlbgorCTs7Cisoc3lzdjQuMnV3Mi4qKSAjIE5vdmVsbC9TQ08gVW5peFdhcmUgMi54ICh0ZXN0ZWQgb24gMi4xLjIpCisJY2ZfWE9QRU5fU09VUkNFPQorCWNmX1BPU0lYX0NfU09VUkNFPQorCTs7CisoKikKKwlDRl9UUllfWE9QRU5fU09VUkNFCisJQ0ZfUE9TSVhfQ19TT1VSQ0UoJGNmX1BPU0lYX0NfU09VUkNFKQorCTs7Citlc2FjCisKK2lmIHRlc3QgLW4gIiRjZl94b3Blbl9zb3VyY2UiIDsgdGhlbgorCUNGX0FERF9DRkxBR1MoJGNmX3hvcGVuX3NvdXJjZSx0cnVlKQorZmkKKworZG5sIEluIGFueXRoaW5nIGJ1dCB0aGUgZGVmYXVsdCBjYXNlLCB3ZSBtYXkgaGF2ZSBzeXN0ZW0tc3BlY2lmaWMgc2V0dGluZworZG5sIHdoaWNoIGlzIHN0aWxsIG5vdCBndWFyYW50ZWVkIHRvIHByb3ZpZGUgYWxsIG9mIHRoZSBlbnRyeXBvaW50cyB0aGF0CitkbmwgX1hPUEVOX1NPVVJDRSB3b3VsZCB5aWVsZC4KK2lmIHRlc3QgLW4gIiRjZl9YT1BFTl9TT1VSQ0UiICYmIHRlc3QgLXogIiRjZl9jdl94b3Blbl9zb3VyY2UiIDsgdGhlbgorCUFDX01TR19DSEVDS0lORyhpZiBfWE9QRU5fU09VUkNFIHJlYWxseSBpcyBzZXQpCisJQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxzdGRsaWIuaD5dLFsKKyNpZm5kZWYgX1hPUEVOX1NPVVJDRQorbWFrZSBhbiBlcnJvcgorI2VuZGlmXSwKKwlbY2ZfWE9QRU5fU09VUkNFX3NldD15ZXNdLAorCVtjZl9YT1BFTl9TT1VSQ0Vfc2V0PW5vXSkKKwlBQ19NU0dfUkVTVUxUKCRjZl9YT1BFTl9TT1VSQ0Vfc2V0KQorCWlmIHRlc3QgJGNmX1hPUEVOX1NPVVJDRV9zZXQgPSB5ZXMKKwl0aGVuCisJCUFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8c3RkbGliLmg+XSxbCisjaWYgKF9YT1BFTl9TT1VSQ0UgLSAwKSA8ICRjZl9YT1BFTl9TT1VSQ0UKK21ha2UgYW4gZXJyb3IKKyNlbmRpZl0sCisJCVtjZl9YT1BFTl9TT1VSQ0Vfc2V0X29rPXllc10sCisJCVtjZl9YT1BFTl9TT1VSQ0Vfc2V0X29rPW5vXSkKKwkJaWYgdGVzdCAkY2ZfWE9QRU5fU09VUkNFX3NldF9vayA9IG5vCisJCXRoZW4KKwkJCUFDX01TR19XQVJOKF9YT1BFTl9TT1VSQ0UgaXMgbG93ZXIgdGhhbiByZXF1ZXN0ZWQpCisJCWZpCisJZWxzZQorCQlDRl9UUllfWE9QRU5fU09VUkNFCisJZmkKK2ZpCitdKQpkaWZmIC0tZ2l0IGEvQWRhOTUvY29uZmlndXJlIGIvQWRhOTUvY29uZmlndXJlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjUwMWU3MWUKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9jb25maWd1cmUKQEAgLTAsMCArMSwxNDkwOCBAQAorIyEgL2Jpbi9zaAorIyBGcm9tIGNvbmZpZ3VyZS5pbiBSZXZpc2lvbjogMS42MCAuCisjIEd1ZXNzIHZhbHVlcyBmb3Igc3lzdGVtLWRlcGVuZGVudCB2YXJpYWJsZXMgYW5kIGNyZWF0ZSBNYWtlZmlsZXMuCisjIEdlbmVyYXRlZCBieSBBdXRvY29uZiAyLjUyLjIwMTQxMjA0LgorIworIyBDb3B5cmlnaHQgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMQorIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBjb25maWd1cmUgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LgorCisjIEF2b2lkIGRlcGVuZGluZyB1cG9uIENoYXJhY3RlciBSYW5nZXMuCithc19jcl9sZXR0ZXJzPSdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicKK2FzX2NyX0xFVFRFUlM9J0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJworYXNfY3JfTGV0dGVycz0kYXNfY3JfbGV0dGVycyRhc19jcl9MRVRURVJTCithc19jcl9kaWdpdHM9JzAxMjM0NTY3ODknCithc19jcl9hbG51bT0kYXNfY3JfTGV0dGVycyRhc19jcl9kaWdpdHMKKworIyBTZWQgZXhwcmVzc2lvbiB0byBtYXAgYSBzdHJpbmcgb250byBhIHZhbGlkIHZhcmlhYmxlIG5hbWUuCithc190cl9zaD0ic2VkIHklKislcHAlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWciCisKKyMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCBDUFAgbmFtZS4KK2FzX3RyX2NwcD0ic2VkIHklKiRhc19jcl9sZXR0ZXJzJVAkYXNfY3JfTEVUVEVSUyU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyIKKworIyBCZSBCb3VybmUgY29tcGF0aWJsZQoraWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGVtdWxhdGUgc2gKKyAgTlVMTENNRD06CitlbGlmIHRlc3QgLW4gIiR7QkFTSF9WRVJTSU9OK3NldH0iICYmIChzZXQgLW8gcG9zaXgpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBzZXQgLW8gcG9zaXgKK2ZpCisKKyMgTmFtZSBvZiB0aGUgZXhlY3V0YWJsZS4KK2FzX21lPWBlY2hvICIkMCIgfHNlZCAncywuKltcXC9dLCwnYAorCitpZiBleHByIGEgOiAnXChhXCknID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBhc19leHByPWV4cHIKK2Vsc2UKKyAgYXNfZXhwcj1mYWxzZQorZmkKKworcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmZpbGUKK2VjaG8gPmNvbmYkJC5maWxlCitpZiBsbiAtcyBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KKyAgIyBXZSBjb3VsZCBqdXN0IGNoZWNrIGZvciBESkdQUDsgYnV0IHRoaXMgdGVzdCBhKSB3b3JrcyBiKSBpcyBtb3JlIGdlbmVyaWMKKyAgIyBhbmQgYykgd2lsbCByZW1haW4gdmFsaWQgb25jZSBESkdQUCBzdXBwb3J0cyBzeW1saW5rcyAoREpHUFAgMi4wNCkuCisgIGlmIHRlc3QgLWYgY29uZiQkLmV4ZTsgdGhlbgorICAgICMgRG9uJ3QgdXNlIGxuIGF0IGFsbDsgd2UgZG9uJ3QgaGF2ZSBhbnkgbGlua3MKKyAgICBhc19sbl9zPSdjcCAtcCcKKyAgZWxzZQorICAgIGFzX2xuX3M9J2xuIC1zJworICBmaQorZWxpZiBsbiBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KKyAgYXNfbG5fcz1sbgorZWxzZQorICBhc19sbl9zPSdjcCAtcCcKK2ZpCitybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZmlsZQorCithc19leGVjdXRhYmxlX3A9InRlc3QgLWYiCisKKyMgU3VwcG9ydCB1bnNldCB3aGVuIHBvc3NpYmxlLgoraWYgKEZPTz1GT087IHVuc2V0IEZPTykgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGFzX3Vuc2V0PXVuc2V0CitlbHNlCisgIGFzX3Vuc2V0PWZhbHNlCitmaQorCisjIE5MUyBudWlzYW5jZXMuCiskYXNfdW5zZXQgTEFORyB8fCB0ZXN0ICIke0xBTkcrc2V0fSIgIT0gc2V0IHx8IHsgTEFORz1DOyBleHBvcnQgTEFORzsgfQorJGFzX3Vuc2V0IExDX0FMTCB8fCB0ZXN0ICIke0xDX0FMTCtzZXR9IiAhPSBzZXQgfHwgeyBMQ19BTEw9QzsgZXhwb3J0IExDX0FMTDsgfQorJGFzX3Vuc2V0IExDX1RJTUUgfHwgdGVzdCAiJHtMQ19USU1FK3NldH0iICE9IHNldCB8fCB7IExDX1RJTUU9QzsgZXhwb3J0IExDX1RJTUU7IH0KKyRhc191bnNldCBMQ19DVFlQRSB8fCB0ZXN0ICIke0xDX0NUWVBFK3NldH0iICE9IHNldCB8fCB7IExDX0NUWVBFPUM7IGV4cG9ydCBMQ19DVFlQRTsgfQorJGFzX3Vuc2V0IExBTkdVQUdFIHx8IHRlc3QgIiR7TEFOR1VBR0Urc2V0fSIgIT0gc2V0IHx8IHsgTEFOR1VBR0U9QzsgZXhwb3J0IExBTkdVQUdFOyB9CiskYXNfdW5zZXQgTENfQ09MTEFURSB8fCB0ZXN0ICIke0xDX0NPTExBVEUrc2V0fSIgIT0gc2V0IHx8IHsgTENfQ09MTEFURT1DOyBleHBvcnQgTENfQ09MTEFURTsgfQorJGFzX3Vuc2V0IExDX05VTUVSSUMgfHwgdGVzdCAiJHtMQ19OVU1FUklDK3NldH0iICE9IHNldCB8fCB7IExDX05VTUVSSUM9QzsgZXhwb3J0IExDX05VTUVSSUM7IH0KKyRhc191bnNldCBMQ19NRVNTQUdFUyB8fCB0ZXN0ICIke0xDX01FU1NBR0VTK3NldH0iICE9IHNldCB8fCB7IExDX01FU1NBR0VTPUM7IGV4cG9ydCBMQ19NRVNTQUdFUzsgfQorCisjIElGUworIyBXZSBuZWVkIHNwYWNlLCB0YWIgYW5kIG5ldyBsaW5lLCBpbiBwcmVjaXNlbHkgdGhhdCBvcmRlci4KK2FzX25sPScKKycKK0lGUz0iIAkkYXNfbmwiCisKKyMgQ0RQQVRILgorJGFzX3Vuc2V0IENEUEFUSCB8fCB0ZXN0ICIke0NEUEFUSCtzZXR9IiAhPSBzZXQgfHwgeyBDRFBBVEg9OjsgZXhwb3J0IENEUEFUSDsgfQorCisjIE5hbWUgb2YgdGhlIGhvc3QuCisjIGhvc3RuYW1lIG9uIHNvbWUgc3lzdGVtcyAoU1ZSMy4yLCBMaW51eCkgcmV0dXJucyBhIGJvZ3VzIGV4aXQgc3RhdHVzLAorIyBzbyB1bmFtZSBnZXRzIHJ1biB0b28uCithY19ob3N0bmFtZT1gKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWAKKworZXhlYyA2PiYxCisKKyMKKyMgSW5pdGlhbGl6YXRpb25zLgorIworYWNfZGVmYXVsdF9wcmVmaXg9L3Vzci9sb2NhbAorY3Jvc3NfY29tcGlsaW5nPW5vCitzdWJkaXJzPQorTUZMQUdTPSBNQUtFRkxBR1M9CitTSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQorCisjIE1heGltdW0gbnVtYmVyIG9mIGxpbmVzIHRvIHB1dCBpbiBhIHNoZWxsIGhlcmUgZG9jdW1lbnQuCisjIFRoaXMgdmFyaWFibGUgc2VlbXMgb2Jzb2xldGUuICBJdCBzaG91bGQgcHJvYmFibHkgYmUgcmVtb3ZlZCwgYW5kCisjIG9ubHkgYWNfbWF4X3NlZF9saW5lcyBzaG91bGQgYmUgdXNlZC4KKzogJHthY19tYXhfaGVyZV9saW5lcz0zOH0KKworYWNfdW5pcXVlX2ZpbGU9Imdlbi9nZW4uYyIKKworIyBJbml0aWFsaXplIHNvbWUgdmFyaWFibGVzIHNldCBieSBvcHRpb25zLgorYWNfaW5pdF9oZWxwPQorYWNfaW5pdF92ZXJzaW9uPWZhbHNlCisjIFRoZSB2YXJpYWJsZXMgaGF2ZSB0aGUgc2FtZSBuYW1lcyBhcyB0aGUgb3B0aW9ucywgd2l0aAorIyBkYXNoZXMgY2hhbmdlZCB0byB1bmRlcmxpbmVzLgorY2FjaGVfZmlsZT0vZGV2L251bGwKK2V4ZWNfcHJlZml4PU5PTkUKK25vX2NyZWF0ZT0KK25vX3JlY3Vyc2lvbj0KK3ByZWZpeD1OT05FCitwcm9ncmFtX3ByZWZpeD1OT05FCitwcm9ncmFtX3N1ZmZpeD1OT05FCitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPXMseCx4LAorc2lsZW50PQorc2l0ZT0KK3NyY2Rpcj0KK3ZlcmJvc2U9Cit4X2luY2x1ZGVzPU5PTkUKK3hfbGlicmFyaWVzPU5PTkUKKworIyBJbnN0YWxsYXRpb24gZGlyZWN0b3J5IG9wdGlvbnMuCisjIFRoZXNlIGFyZSBsZWZ0IHVuZXhwYW5kZWQgc28gdXNlcnMgY2FuICJtYWtlIGluc3RhbGwgZXhlY19wcmVmaXg9L2ZvbyIKKyMgYW5kIGFsbCB0aGUgdmFyaWFibGVzIHRoYXQgYXJlIHN1cHBvc2VkIHRvIGJlIGJhc2VkIG9uIGV4ZWNfcHJlZml4CisjIGJ5IGRlZmF1bHQgd2lsbCBhY3R1YWxseSBjaGFuZ2UuCisjIFVzZSBicmFjZXMgaW5zdGVhZCBvZiBwYXJlbnMgYmVjYXVzZSBzaCwgcGVybCwgZXRjLiBhbHNvIGFjY2VwdCB0aGVtLgorYmluZGlyPScke2V4ZWNfcHJlZml4fS9iaW4nCitzYmluZGlyPScke2V4ZWNfcHJlZml4fS9zYmluJworbGliZXhlY2Rpcj0nJHtleGVjX3ByZWZpeH0vbGliZXhlYycKK2RhdGFyb290ZGlyPScke3ByZWZpeH0vc2hhcmUnCitkYXRhZGlyPScke2RhdGFyb290ZGlyfScKK3N5c2NvbmZkaXI9JyR7cHJlZml4fS9ldGMnCitzaGFyZWRzdGF0ZWRpcj0nJHtwcmVmaXh9L2NvbScKK2xvY2Fsc3RhdGVkaXI9JyR7cHJlZml4fS92YXInCitsaWJkaXI9JyR7ZXhlY19wcmVmaXh9L2xpYicKK2luY2x1ZGVkaXI9JyR7cHJlZml4fS9pbmNsdWRlJworb2xkaW5jbHVkZWRpcj0nL3Vzci9pbmNsdWRlJworaW5mb2Rpcj0nJHtkYXRhcm9vdGRpcn0vaW5mbycKK21hbmRpcj0nJHtkYXRhcm9vdGRpcn0vbWFuJworCisjIElkZW50aXR5IG9mIHRoaXMgcGFja2FnZS4KK1BBQ0tBR0VfTkFNRT0KK1BBQ0tBR0VfVEFSTkFNRT0KK1BBQ0tBR0VfVkVSU0lPTj0KK1BBQ0tBR0VfU1RSSU5HPQorUEFDS0FHRV9CVUdSRVBPUlQ9CisKK2FjX3ByZXY9Citmb3IgYWNfb3B0aW9uCitkbworICAjIElmIHRoZSBwcmV2aW91cyBvcHRpb24gbmVlZHMgYW4gYXJndW1lbnQsIGFzc2lnbiBpdC4KKyAgaWYgdGVzdCAtbiAiJGFjX3ByZXYiOyB0aGVuCisgICAgZXZhbCAiJGFjX3ByZXY9XCRhY19vcHRpb24iCisgICAgYWNfcHJldj0KKyAgICBjb250aW51ZQorICBmaQorCisgIGFjX29wdGFyZz1gZXhwciAieCRhY19vcHRpb24iIDogJ3hbXj1dKj1cKC4qXCknYAorCisgICMgQWNjZXB0IHRoZSBpbXBvcnRhbnQgQ3lnbnVzIGNvbmZpZ3VyZSBvcHRpb25zLCBzbyB3ZSBjYW4gZGlhZ25vc2UgdHlwb3MuCisKKyAgY2FzZSAkYWNfb3B0aW9uIGluCisKKyAgLWJpbmRpciB8IC0tYmluZGlyIHwgLS1iaW5kaSB8IC0tYmluZCB8IC0tYmluIHwgLS1iaSkKKyAgICBhY19wcmV2PWJpbmRpciA7OworICAtYmluZGlyPSogfCAtLWJpbmRpcj0qIHwgLS1iaW5kaT0qIHwgLS1iaW5kPSogfCAtLWJpbj0qIHwgLS1iaT0qKQorICAgIGJpbmRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWJ1aWxkIHwgLS1idWlsZCB8IC0tYnVpbCB8IC0tYnVpIHwgLS1idSkKKyAgICBhY19wcmV2PWJ1aWxkX2FsaWFzIDs7CisgIC1idWlsZD0qIHwgLS1idWlsZD0qIHwgLS1idWlsPSogfCAtLWJ1aT0qIHwgLS1idT0qKQorICAgIGJ1aWxkX2FsaWFzPSRhY19vcHRhcmcgOzsKKworICAtY2FjaGUtZmlsZSB8IC0tY2FjaGUtZmlsZSB8IC0tY2FjaGUtZmlsIHwgLS1jYWNoZS1maSBcCisgIHwgLS1jYWNoZS1mIHwgLS1jYWNoZS0gfCAtLWNhY2hlIHwgLS1jYWNoIHwgLS1jYWMgfCAtLWNhIHwgLS1jKQorICAgIGFjX3ByZXY9Y2FjaGVfZmlsZSA7OworICAtY2FjaGUtZmlsZT0qIHwgLS1jYWNoZS1maWxlPSogfCAtLWNhY2hlLWZpbD0qIHwgLS1jYWNoZS1maT0qIFwKKyAgfCAtLWNhY2hlLWY9KiB8IC0tY2FjaGUtPSogfCAtLWNhY2hlPSogfCAtLWNhY2g9KiB8IC0tY2FjPSogfCAtLWNhPSogfCAtLWM9KikKKyAgICBjYWNoZV9maWxlPSRhY19vcHRhcmcgOzsKKworICAtLWNvbmZpZy1jYWNoZSB8IC1DKQorICAgIGNhY2hlX2ZpbGU9Y29uZmlnLmNhY2hlIDs7CisKKyAgLWRhdGFkaXIgfCAtLWRhdGFkaXIgfCAtLWRhdGFkaSB8IC0tZGF0YWQgfCAtLWRhdGEgfCAtLWRhdCB8IC0tZGEpCisgICAgYWNfcHJldj1kYXRhZGlyIDs7CisgIC1kYXRhZGlyPSogfCAtLWRhdGFkaXI9KiB8IC0tZGF0YWRpPSogfCAtLWRhdGFkPSogfCAtLWRhdGE9KiB8IC0tZGF0PSogXAorICB8IC0tZGE9KikKKyAgICBkYXRhZGlyPSRhY19vcHRhcmcgOzsKKworICAtZGF0YXJvb3RkaXIgfCAtLWRhdGFyb290ZGlyIHwgLS1kYXRhcm9vdGRpIHwgLS1kYXRhcm9vdGQgfCAtLWRhdGFyb290IFwKKyAgfCAtLWRhdGFyb28gfCAtLWRhdGFybyB8IC0tZGF0YXIpCisgICAgYWNfcHJldj1kYXRhcm9vdGRpciA7OworICAtZGF0YXJvb3RkaXI9KiB8IC0tZGF0YXJvb3RkaXI9KiB8IC0tZGF0YXJvb3RkaT0qIHwgLS1kYXRhcm9vdGQ9KiBcCisgIHwgLS1kYXRhcm9vdD0qIHwgLS1kYXRhcm9vPSogfCAtLWRhdGFybz0qIHwgLS1kYXRhcj0qKQorICAgIGRhdGFyb290ZGlyPSRhY19vcHRhcmcgOzsKKworICAtZGlzYWJsZS0qIHwgLS1kaXNhYmxlLSopCisgICAgYWNfZmVhdHVyZT1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKmRpc2FibGUtXCguKlwpJ2AKKyAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCisgICAgZXhwciAieCRhY19mZWF0dXJlIiA6ICIuKlteLV8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisgICAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgZmVhdHVyZSBuYW1lOiAkYWNfZmVhdHVyZSIgPiYyCisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgICBhY19mZWF0dXJlPWBlY2hvICRhY19mZWF0dXJlIHwgc2VkICdzLy0vXy9nJ2AKKyAgICBldmFsICJlbmFibGVfJGFjX2ZlYXR1cmU9bm8iIDs7CisKKyAgLWVuYWJsZS0qIHwgLS1lbmFibGUtKikKKyAgICBhY19mZWF0dXJlPWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qZW5hYmxlLVwoW149XSpcKSdgCisgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgorICAgIGV4cHIgIngkYWNfZmVhdHVyZSIgOiAiLipbXi1fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorICAgICAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBpbnZhbGlkIGZlYXR1cmUgbmFtZTogJGFjX2ZlYXR1cmUiID4mMgorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgICAgYWNfZmVhdHVyZT1gZWNobyAkYWNfZmVhdHVyZSB8IHNlZCAncy8tL18vZydgCisgICAgY2FzZSAkYWNfb3B0aW9uIGluCisgICAgICAqPSopIGFjX29wdGFyZz1gZWNobyAiJGFjX29wdGFyZyIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImA7OworICAgICAgKikgYWNfb3B0YXJnPXllcyA7OworICAgIGVzYWMKKyAgICBldmFsICJlbmFibGVfJGFjX2ZlYXR1cmU9JyRhY19vcHRhcmcnIiA7OworCisgIC1leGVjLXByZWZpeCB8IC0tZXhlY19wcmVmaXggfCAtLWV4ZWMtcHJlZml4IHwgLS1leGVjLXByZWZpIFwKKyAgfCAtLWV4ZWMtcHJlZiB8IC0tZXhlYy1wcmUgfCAtLWV4ZWMtcHIgfCAtLWV4ZWMtcCB8IC0tZXhlYy0gXAorICB8IC0tZXhlYyB8IC0tZXhlIHwgLS1leCkKKyAgICBhY19wcmV2PWV4ZWNfcHJlZml4IDs7CisgIC1leGVjLXByZWZpeD0qIHwgLS1leGVjX3ByZWZpeD0qIHwgLS1leGVjLXByZWZpeD0qIHwgLS1leGVjLXByZWZpPSogXAorICB8IC0tZXhlYy1wcmVmPSogfCAtLWV4ZWMtcHJlPSogfCAtLWV4ZWMtcHI9KiB8IC0tZXhlYy1wPSogfCAtLWV4ZWMtPSogXAorICB8IC0tZXhlYz0qIHwgLS1leGU9KiB8IC0tZXg9KikKKyAgICBleGVjX3ByZWZpeD0kYWNfb3B0YXJnIDs7CisKKyAgLWdhcyB8IC0tZ2FzIHwgLS1nYSB8IC0tZykKKyAgICAjIE9ic29sZXRlOyB1c2UgLS13aXRoLWdhcy4KKyAgICB3aXRoX2dhcz15ZXMgOzsKKworICAtaGVscCB8IC0taGVscCB8IC0taGVsIHwgLS1oZSB8IC1oKQorICAgIGFjX2luaXRfaGVscD1sb25nIDs7CisgIC1oZWxwPXIqIHwgLS1oZWxwPXIqIHwgLS1oZWw9ciogfCAtLWhlPXIqIHwgLWhyKikKKyAgICBhY19pbml0X2hlbHA9cmVjdXJzaXZlIDs7CisgIC1oZWxwPXMqIHwgLS1oZWxwPXMqIHwgLS1oZWw9cyogfCAtLWhlPXMqIHwgLWhzKikKKyAgICBhY19pbml0X2hlbHA9c2hvcnQgOzsKKworICAtaG9zdCB8IC0taG9zdCB8IC0taG9zIHwgLS1obykKKyAgICBhY19wcmV2PWhvc3RfYWxpYXMgOzsKKyAgLWhvc3Q9KiB8IC0taG9zdD0qIHwgLS1ob3M9KiB8IC0taG89KikKKyAgICBob3N0X2FsaWFzPSRhY19vcHRhcmcgOzsKKworICAtaW5jbHVkZWRpciB8IC0taW5jbHVkZWRpciB8IC0taW5jbHVkZWRpIHwgLS1pbmNsdWRlZCB8IC0taW5jbHVkZSBcCisgIHwgLS1pbmNsdWQgfCAtLWluY2x1IHwgLS1pbmNsIHwgLS1pbmMpCisgICAgYWNfcHJldj1pbmNsdWRlZGlyIDs7CisgIC1pbmNsdWRlZGlyPSogfCAtLWluY2x1ZGVkaXI9KiB8IC0taW5jbHVkZWRpPSogfCAtLWluY2x1ZGVkPSogfCAtLWluY2x1ZGU9KiBcCisgIHwgLS1pbmNsdWQ9KiB8IC0taW5jbHU9KiB8IC0taW5jbD0qIHwgLS1pbmM9KikKKyAgICBpbmNsdWRlZGlyPSRhY19vcHRhcmcgOzsKKworICAtaW5mb2RpciB8IC0taW5mb2RpciB8IC0taW5mb2RpIHwgLS1pbmZvZCB8IC0taW5mbyB8IC0taW5mKQorICAgIGFjX3ByZXY9aW5mb2RpciA7OworICAtaW5mb2Rpcj0qIHwgLS1pbmZvZGlyPSogfCAtLWluZm9kaT0qIHwgLS1pbmZvZD0qIHwgLS1pbmZvPSogfCAtLWluZj0qKQorICAgIGluZm9kaXI9JGFjX29wdGFyZyA7OworCisgIC1saWJkaXIgfCAtLWxpYmRpciB8IC0tbGliZGkgfCAtLWxpYmQpCisgICAgYWNfcHJldj1saWJkaXIgOzsKKyAgLWxpYmRpcj0qIHwgLS1saWJkaXI9KiB8IC0tbGliZGk9KiB8IC0tbGliZD0qKQorICAgIGxpYmRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWxpYmV4ZWNkaXIgfCAtLWxpYmV4ZWNkaXIgfCAtLWxpYmV4ZWNkaSB8IC0tbGliZXhlY2QgfCAtLWxpYmV4ZWMgXAorICB8IC0tbGliZXhlIHwgLS1saWJleCB8IC0tbGliZSkKKyAgICBhY19wcmV2PWxpYmV4ZWNkaXIgOzsKKyAgLWxpYmV4ZWNkaXI9KiB8IC0tbGliZXhlY2Rpcj0qIHwgLS1saWJleGVjZGk9KiB8IC0tbGliZXhlY2Q9KiB8IC0tbGliZXhlYz0qIFwKKyAgfCAtLWxpYmV4ZT0qIHwgLS1saWJleD0qIHwgLS1saWJlPSopCisgICAgbGliZXhlY2Rpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWxvY2Fsc3RhdGVkaXIgfCAtLWxvY2Fsc3RhdGVkaXIgfCAtLWxvY2Fsc3RhdGVkaSB8IC0tbG9jYWxzdGF0ZWQgXAorICB8IC0tbG9jYWxzdGF0ZSB8IC0tbG9jYWxzdGF0IHwgLS1sb2NhbHN0YSB8IC0tbG9jYWxzdCBcCisgIHwgLS1sb2NhbHMgfCAtLWxvY2FsIHwgLS1sb2NhIHwgLS1sb2MgfCAtLWxvKQorICAgIGFjX3ByZXY9bG9jYWxzdGF0ZWRpciA7OworICAtbG9jYWxzdGF0ZWRpcj0qIHwgLS1sb2NhbHN0YXRlZGlyPSogfCAtLWxvY2Fsc3RhdGVkaT0qIHwgLS1sb2NhbHN0YXRlZD0qIFwKKyAgfCAtLWxvY2Fsc3RhdGU9KiB8IC0tbG9jYWxzdGF0PSogfCAtLWxvY2Fsc3RhPSogfCAtLWxvY2Fsc3Q9KiBcCisgIHwgLS1sb2NhbHM9KiB8IC0tbG9jYWw9KiB8IC0tbG9jYT0qIHwgLS1sb2M9KiB8IC0tbG89KikKKyAgICBsb2NhbHN0YXRlZGlyPSRhY19vcHRhcmcgOzsKKworICAtbWFuZGlyIHwgLS1tYW5kaXIgfCAtLW1hbmRpIHwgLS1tYW5kIHwgLS1tYW4gfCAtLW1hIHwgLS1tKQorICAgIGFjX3ByZXY9bWFuZGlyIDs7CisgIC1tYW5kaXI9KiB8IC0tbWFuZGlyPSogfCAtLW1hbmRpPSogfCAtLW1hbmQ9KiB8IC0tbWFuPSogfCAtLW1hPSogfCAtLW09KikKKyAgICBtYW5kaXI9JGFjX29wdGFyZyA7OworCisgIC1uZnAgfCAtLW5mcCB8IC0tbmYpCisgICAgIyBPYnNvbGV0ZTsgdXNlIC0td2l0aG91dC1mcC4KKyAgICB3aXRoX2ZwPW5vIDs7CisKKyAgLW5vLWNyZWF0ZSB8IC0tbm8tY3JlYXRlIHwgLS1uby1jcmVhdCB8IC0tbm8tY3JlYSB8IC0tbm8tY3JlIFwKKyAgfCAtLW5vLWNyIHwgLS1uby1jKQorICAgIG5vX2NyZWF0ZT15ZXMgOzsKKworICAtbm8tcmVjdXJzaW9uIHwgLS1uby1yZWN1cnNpb24gfCAtLW5vLXJlY3Vyc2lvIHwgLS1uby1yZWN1cnNpIFwKKyAgfCAtLW5vLXJlY3VycyB8IC0tbm8tcmVjdXIgfCAtLW5vLXJlY3UgfCAtLW5vLXJlYyB8IC0tbm8tcmUgfCAtLW5vLXIpCisgICAgbm9fcmVjdXJzaW9uPXllcyA7OworCisgIC1vbGRpbmNsdWRlZGlyIHwgLS1vbGRpbmNsdWRlZGlyIHwgLS1vbGRpbmNsdWRlZGkgfCAtLW9sZGluY2x1ZGVkIFwKKyAgfCAtLW9sZGluY2x1ZGUgfCAtLW9sZGluY2x1ZCB8IC0tb2xkaW5jbHUgfCAtLW9sZGluY2wgfCAtLW9sZGluYyBcCisgIHwgLS1vbGRpbiB8IC0tb2xkaSB8IC0tb2xkIHwgLS1vbCB8IC0tbykKKyAgICBhY19wcmV2PW9sZGluY2x1ZGVkaXIgOzsKKyAgLW9sZGluY2x1ZGVkaXI9KiB8IC0tb2xkaW5jbHVkZWRpcj0qIHwgLS1vbGRpbmNsdWRlZGk9KiB8IC0tb2xkaW5jbHVkZWQ9KiBcCisgIHwgLS1vbGRpbmNsdWRlPSogfCAtLW9sZGluY2x1ZD0qIHwgLS1vbGRpbmNsdT0qIHwgLS1vbGRpbmNsPSogfCAtLW9sZGluYz0qIFwKKyAgfCAtLW9sZGluPSogfCAtLW9sZGk9KiB8IC0tb2xkPSogfCAtLW9sPSogfCAtLW89KikKKyAgICBvbGRpbmNsdWRlZGlyPSRhY19vcHRhcmcgOzsKKworICAtcHJlZml4IHwgLS1wcmVmaXggfCAtLXByZWZpIHwgLS1wcmVmIHwgLS1wcmUgfCAtLXByIHwgLS1wKQorICAgIGFjX3ByZXY9cHJlZml4IDs7CisgIC1wcmVmaXg9KiB8IC0tcHJlZml4PSogfCAtLXByZWZpPSogfCAtLXByZWY9KiB8IC0tcHJlPSogfCAtLXByPSogfCAtLXA9KikKKyAgICBwcmVmaXg9JGFjX29wdGFyZyA7OworCisgIC1wcm9ncmFtLXByZWZpeCB8IC0tcHJvZ3JhbS1wcmVmaXggfCAtLXByb2dyYW0tcHJlZmkgfCAtLXByb2dyYW0tcHJlZiBcCisgIHwgLS1wcm9ncmFtLXByZSB8IC0tcHJvZ3JhbS1wciB8IC0tcHJvZ3JhbS1wKQorICAgIGFjX3ByZXY9cHJvZ3JhbV9wcmVmaXggOzsKKyAgLXByb2dyYW0tcHJlZml4PSogfCAtLXByb2dyYW0tcHJlZml4PSogfCAtLXByb2dyYW0tcHJlZmk9KiBcCisgIHwgLS1wcm9ncmFtLXByZWY9KiB8IC0tcHJvZ3JhbS1wcmU9KiB8IC0tcHJvZ3JhbS1wcj0qIHwgLS1wcm9ncmFtLXA9KikKKyAgICBwcm9ncmFtX3ByZWZpeD0kYWNfb3B0YXJnIDs7CisKKyAgLXByb2dyYW0tc3VmZml4IHwgLS1wcm9ncmFtLXN1ZmZpeCB8IC0tcHJvZ3JhbS1zdWZmaSB8IC0tcHJvZ3JhbS1zdWZmIFwKKyAgfCAtLXByb2dyYW0tc3VmIHwgLS1wcm9ncmFtLXN1IHwgLS1wcm9ncmFtLXMpCisgICAgYWNfcHJldj1wcm9ncmFtX3N1ZmZpeCA7OworICAtcHJvZ3JhbS1zdWZmaXg9KiB8IC0tcHJvZ3JhbS1zdWZmaXg9KiB8IC0tcHJvZ3JhbS1zdWZmaT0qIFwKKyAgfCAtLXByb2dyYW0tc3VmZj0qIHwgLS1wcm9ncmFtLXN1Zj0qIHwgLS1wcm9ncmFtLXN1PSogfCAtLXByb2dyYW0tcz0qKQorICAgIHByb2dyYW1fc3VmZml4PSRhY19vcHRhcmcgOzsKKworICAtcHJvZ3JhbS10cmFuc2Zvcm0tbmFtZSB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmFtZSBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYW0gfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmb3JtLW4gfCAtLXByb2dyYW0tdHJhbnNmb3JtLSBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm9ybSB8IC0tcHJvZ3JhbS10cmFuc2ZvciBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm8gfCAtLXByb2dyYW0tdHJhbnNmIFwKKyAgfCAtLXByb2dyYW0tdHJhbnMgfCAtLXByb2dyYW0tdHJhbiBcCisgIHwgLS1wcm9nci10cmEgfCAtLXByb2dyYW0tdHIgfCAtLXByb2dyYW0tdCkKKyAgICBhY19wcmV2PXByb2dyYW1fdHJhbnNmb3JtX25hbWUgOzsKKyAgLXByb2dyYW0tdHJhbnNmb3JtLW5hbWU9KiB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmFtZT0qIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hbT0qIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYT0qIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmb3JtLW49KiB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tPSogXAorICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm09KiB8IC0tcHJvZ3JhbS10cmFuc2Zvcj0qIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmbz0qIHwgLS1wcm9ncmFtLXRyYW5zZj0qIFwKKyAgfCAtLXByb2dyYW0tdHJhbnM9KiB8IC0tcHJvZ3JhbS10cmFuPSogXAorICB8IC0tcHJvZ3ItdHJhPSogfCAtLXByb2dyYW0tdHI9KiB8IC0tcHJvZ3JhbS10PSopCisgICAgcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZT0kYWNfb3B0YXJnIDs7CisKKyAgLXEgfCAtcXVpZXQgfCAtLXF1aWV0IHwgLS1xdWllIHwgLS1xdWkgfCAtLXF1IHwgLS1xIFwKKyAgfCAtc2lsZW50IHwgLS1zaWxlbnQgfCAtLXNpbGVuIHwgLS1zaWxlIHwgLS1zaWwpCisgICAgc2lsZW50PXllcyA7OworCisgIC1zYmluZGlyIHwgLS1zYmluZGlyIHwgLS1zYmluZGkgfCAtLXNiaW5kIHwgLS1zYmluIHwgLS1zYmkgfCAtLXNiKQorICAgIGFjX3ByZXY9c2JpbmRpciA7OworICAtc2JpbmRpcj0qIHwgLS1zYmluZGlyPSogfCAtLXNiaW5kaT0qIHwgLS1zYmluZD0qIHwgLS1zYmluPSogXAorICB8IC0tc2JpPSogfCAtLXNiPSopCisgICAgc2JpbmRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLXNoYXJlZHN0YXRlZGlyIHwgLS1zaGFyZWRzdGF0ZWRpciB8IC0tc2hhcmVkc3RhdGVkaSBcCisgIHwgLS1zaGFyZWRzdGF0ZWQgfCAtLXNoYXJlZHN0YXRlIHwgLS1zaGFyZWRzdGF0IHwgLS1zaGFyZWRzdGEgXAorICB8IC0tc2hhcmVkc3QgfCAtLXNoYXJlZHMgfCAtLXNoYXJlZCB8IC0tc2hhcmUgfCAtLXNoYXIgXAorICB8IC0tc2hhIHwgLS1zaCkKKyAgICBhY19wcmV2PXNoYXJlZHN0YXRlZGlyIDs7CisgIC1zaGFyZWRzdGF0ZWRpcj0qIHwgLS1zaGFyZWRzdGF0ZWRpcj0qIHwgLS1zaGFyZWRzdGF0ZWRpPSogXAorICB8IC0tc2hhcmVkc3RhdGVkPSogfCAtLXNoYXJlZHN0YXRlPSogfCAtLXNoYXJlZHN0YXQ9KiB8IC0tc2hhcmVkc3RhPSogXAorICB8IC0tc2hhcmVkc3Q9KiB8IC0tc2hhcmVkcz0qIHwgLS1zaGFyZWQ9KiB8IC0tc2hhcmU9KiB8IC0tc2hhcj0qIFwKKyAgfCAtLXNoYT0qIHwgLS1zaD0qKQorICAgIHNoYXJlZHN0YXRlZGlyPSRhY19vcHRhcmcgOzsKKworICAtc2l0ZSB8IC0tc2l0ZSB8IC0tc2l0KQorICAgIGFjX3ByZXY9c2l0ZSA7OworICAtc2l0ZT0qIHwgLS1zaXRlPSogfCAtLXNpdD0qKQorICAgIHNpdGU9JGFjX29wdGFyZyA7OworCisgIC1zcmNkaXIgfCAtLXNyY2RpciB8IC0tc3JjZGkgfCAtLXNyY2QgfCAtLXNyYyB8IC0tc3IpCisgICAgYWNfcHJldj1zcmNkaXIgOzsKKyAgLXNyY2Rpcj0qIHwgLS1zcmNkaXI9KiB8IC0tc3JjZGk9KiB8IC0tc3JjZD0qIHwgLS1zcmM9KiB8IC0tc3I9KikKKyAgICBzcmNkaXI9JGFjX29wdGFyZyA7OworCisgIC1zeXNjb25mZGlyIHwgLS1zeXNjb25mZGlyIHwgLS1zeXNjb25mZGkgfCAtLXN5c2NvbmZkIHwgLS1zeXNjb25mIFwKKyAgfCAtLXN5c2NvbiB8IC0tc3lzY28gfCAtLXN5c2MgfCAtLXN5cyB8IC0tc3kpCisgICAgYWNfcHJldj1zeXNjb25mZGlyIDs7CisgIC1zeXNjb25mZGlyPSogfCAtLXN5c2NvbmZkaXI9KiB8IC0tc3lzY29uZmRpPSogfCAtLXN5c2NvbmZkPSogfCAtLXN5c2NvbmY9KiBcCisgIHwgLS1zeXNjb249KiB8IC0tc3lzY289KiB8IC0tc3lzYz0qIHwgLS1zeXM9KiB8IC0tc3k9KikKKyAgICBzeXNjb25mZGlyPSRhY19vcHRhcmcgOzsKKworICAtdGFyZ2V0IHwgLS10YXJnZXQgfCAtLXRhcmdlIHwgLS10YXJnIHwgLS10YXIgfCAtLXRhIHwgLS10KQorICAgIGFjX3ByZXY9dGFyZ2V0X2FsaWFzIDs7CisgIC10YXJnZXQ9KiB8IC0tdGFyZ2V0PSogfCAtLXRhcmdlPSogfCAtLXRhcmc9KiB8IC0tdGFyPSogfCAtLXRhPSogfCAtLXQ9KikKKyAgICB0YXJnZXRfYWxpYXM9JGFjX29wdGFyZyA7OworCisgIC12IHwgLXZlcmJvc2UgfCAtLXZlcmJvc2UgfCAtLXZlcmJvcyB8IC0tdmVyYm8gfCAtLXZlcmIpCisgICAgdmVyYm9zZT15ZXMgOzsKKworICAtdmVyc2lvbiB8IC0tdmVyc2lvbiB8IC0tdmVyc2lvIHwgLS12ZXJzaSB8IC0tdmVycyB8IC1WKQorICAgIGFjX2luaXRfdmVyc2lvbj06IDs7CisKKyAgLXdpdGgtKiB8IC0td2l0aC0qKQorICAgIGFjX3BhY2thZ2U9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSp3aXRoLVwoW149XSpcKSdgCisgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgorICAgIGV4cHIgIngkYWNfcGFja2FnZSIgOiAiLipbXi1fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorICAgICAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBpbnZhbGlkIHBhY2thZ2UgbmFtZTogJGFjX3BhY2thZ2UiID4mMgorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgICAgYWNfcGFja2FnZT1gZWNobyAkYWNfcGFja2FnZXwgc2VkICdzLy0vXy9nJ2AKKyAgICBjYXNlICRhY19vcHRpb24gaW4KKyAgICAgICo9KikgYWNfb3B0YXJnPWBlY2hvICIkYWNfb3B0YXJnIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYDs7CisgICAgICAqKSBhY19vcHRhcmc9eWVzIDs7CisgICAgZXNhYworICAgIGV2YWwgIndpdGhfJGFjX3BhY2thZ2U9JyRhY19vcHRhcmcnIiA7OworCisgIC13aXRob3V0LSogfCAtLXdpdGhvdXQtKikKKyAgICBhY19wYWNrYWdlPWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qd2l0aG91dC1cKC4qXCknYAorICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KKyAgICBleHByICJ4JGFjX3BhY2thZ2UiIDogIi4qW14tXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKyAgICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCBwYWNrYWdlIG5hbWU6ICRhY19wYWNrYWdlIiA+JjIKKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAgIGFjX3BhY2thZ2U9YGVjaG8gJGFjX3BhY2thZ2UgfCBzZWQgJ3MvLS9fL2cnYAorICAgIGV2YWwgIndpdGhfJGFjX3BhY2thZ2U9bm8iIDs7CisKKyAgLS14KQorICAgICMgT2Jzb2xldGU7IHVzZSAtLXdpdGgteC4KKyAgICB3aXRoX3g9eWVzIDs7CisKKyAgLXgtaW5jbHVkZXMgfCAtLXgtaW5jbHVkZXMgfCAtLXgtaW5jbHVkZSB8IC0teC1pbmNsdWQgfCAtLXgtaW5jbHUgXAorICB8IC0teC1pbmNsIHwgLS14LWluYyB8IC0teC1pbiB8IC0teC1pKQorICAgIGFjX3ByZXY9eF9pbmNsdWRlcyA7OworICAteC1pbmNsdWRlcz0qIHwgLS14LWluY2x1ZGVzPSogfCAtLXgtaW5jbHVkZT0qIHwgLS14LWluY2x1ZD0qIHwgLS14LWluY2x1PSogXAorICB8IC0teC1pbmNsPSogfCAtLXgtaW5jPSogfCAtLXgtaW49KiB8IC0teC1pPSopCisgICAgeF9pbmNsdWRlcz0kYWNfb3B0YXJnIDs7CisKKyAgLXgtbGlicmFyaWVzIHwgLS14LWxpYnJhcmllcyB8IC0teC1saWJyYXJpZSB8IC0teC1saWJyYXJpIFwKKyAgfCAtLXgtbGlicmFyIHwgLS14LWxpYnJhIHwgLS14LWxpYnIgfCAtLXgtbGliIHwgLS14LWxpIHwgLS14LWwpCisgICAgYWNfcHJldj14X2xpYnJhcmllcyA7OworICAteC1saWJyYXJpZXM9KiB8IC0teC1saWJyYXJpZXM9KiB8IC0teC1saWJyYXJpZT0qIHwgLS14LWxpYnJhcmk9KiBcCisgIHwgLS14LWxpYnJhcj0qIHwgLS14LWxpYnJhPSogfCAtLXgtbGlicj0qIHwgLS14LWxpYj0qIHwgLS14LWxpPSogfCAtLXgtbD0qKQorICAgIHhfbGlicmFyaWVzPSRhY19vcHRhcmcgOzsKKworICAtKikgeyBlY2hvICIkYXNfbWU6IGVycm9yOiB1bnJlY29nbml6ZWQgb3B0aW9uOiAkYWNfb3B0aW9uCitUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgPiYyCisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgICA7OworCisgICo9KikKKyAgICBhY19lbnZ2YXI9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4XChbXj1dKlwpPSdgCisgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgorICAgIGV4cHIgIngkYWNfZW52dmFyIiA6ICIuKlteXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKyAgICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCB2YXJpYWJsZSBuYW1lOiAkYWNfZW52dmFyIiA+JjIKKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAgIGFjX29wdGFyZz1gZWNobyAiJGFjX29wdGFyZyIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAKKyAgICBldmFsICIkYWNfZW52dmFyPSckYWNfb3B0YXJnJyIKKyAgICBleHBvcnQgJGFjX2VudnZhciA7OworCisgICopCisgICAgIyBGSVhNRTogc2hvdWxkIGJlIHJlbW92ZWQgaW4gYXV0b2NvbmYgMy4wLgorICAgIGVjaG8gIiRhc19tZTogV0FSTklORzogeW91IHNob3VsZCB1c2UgLS1idWlsZCwgLS1ob3N0LCAtLXRhcmdldCIgPiYyCisgICAgZXhwciAieCRhY19vcHRpb24iIDogIi4qW14tLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisgICAgICBlY2hvICIkYXNfbWU6IFdBUk5JTkc6IGludmFsaWQgaG9zdCB0eXBlOiAkYWNfb3B0aW9uIiA+JjIKKyAgICA6ICR7YnVpbGRfYWxpYXM9JGFjX29wdGlvbn0gJHtob3N0X2FsaWFzPSRhY19vcHRpb259ICR7dGFyZ2V0X2FsaWFzPSRhY19vcHRpb259CisgICAgOzsKKworICBlc2FjCitkb25lCisKK2lmIHRlc3QgLW4gIiRhY19wcmV2IjsgdGhlbgorICBhY19vcHRpb249LS1gZWNobyAkYWNfcHJldiB8IHNlZCAncy9fLy0vZydgCisgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogbWlzc2luZyBhcmd1bWVudCB0byAkYWNfb3B0aW9uIiA+JjIKKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorZmkKKworIyBCZSBzdXJlIHRvIGhhdmUgYWJzb2x1dGUgcGF0aHMuCitmb3IgYWNfdmFyIGluIGV4ZWNfcHJlZml4IHByZWZpeAorZG8KKyAgZXZhbCBhY192YWw9JGBlY2hvICRhY192YXJgCisgIGNhc2UgJGFjX3ZhbCBpbgorICAgIFtcXC8kXSogfCA/OltcXC9dKiB8IE5PTkUgfCAnJyApIDs7CisgICAgKikgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogZXhwZWN0ZWQgYW4gYWJzb2x1dGUgcGF0aCBmb3IgLS0kYWNfdmFyOiAkYWNfdmFsIiA+JjIKKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTs7CisgIGVzYWMKK2RvbmUKKworIyBCZSBzdXJlIHRvIGhhdmUgYWJzb2x1dGUgcGF0aHMuCitmb3IgYWNfdmFyIGluIGJpbmRpciBzYmluZGlyIGxpYmV4ZWNkaXIgZGF0YXJvb3RkaXIgZGF0YWRpciBzeXNjb25mZGlyIHNoYXJlZHN0YXRlZGlyIFwKKyAgICAgICAgICAgICAgbG9jYWxzdGF0ZWRpciBsaWJkaXIgaW5jbHVkZWRpciBvbGRpbmNsdWRlZGlyIGluZm9kaXIgbWFuZGlyCitkbworICBldmFsIGFjX3ZhbD0kYGVjaG8gJGFjX3ZhcmAKKyAgY2FzZSAkYWNfdmFsIGluCisgICAgW1xcLyRdKiB8ID86W1xcL10qICkgOzsKKyAgICAqKSAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBleHBlY3RlZCBhbiBhYnNvbHV0ZSBwYXRoIGZvciAtLSRhY192YXI6ICRhY192YWwiID4mMgorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OzsKKyAgZXNhYworZG9uZQorCisjIFRoZXJlIG1pZ2h0IGJlIHBlb3BsZSB3aG8gZGVwZW5kIG9uIHRoZSBvbGQgYnJva2VuIGJlaGF2aW9yOiBgJGhvc3QnCisjIHVzZWQgdG8gaG9sZCB0aGUgYXJndW1lbnQgb2YgLS1ob3N0IGV0Yy4KK2J1aWxkPSRidWlsZF9hbGlhcworaG9zdD0kaG9zdF9hbGlhcwordGFyZ2V0PSR0YXJnZXRfYWxpYXMKKworIyBGSVhNRTogc2hvdWxkIGJlIHJlbW92ZWQgaW4gYXV0b2NvbmYgMy4wLgoraWYgdGVzdCAieCRob3N0X2FsaWFzIiAhPSB4OyB0aGVuCisgIGlmIHRlc3QgIngkYnVpbGRfYWxpYXMiID0geDsgdGhlbgorICAgIGNyb3NzX2NvbXBpbGluZz1tYXliZQorICAgIGVjaG8gIiRhc19tZTogV0FSTklORzogSWYgeW91IHdhbnRlZCB0byBzZXQgdGhlIC0tYnVpbGQgdHlwZSwgZG9uJ3QgdXNlIC0taG9zdC4KKyAgICBJZiBhIGNyb3NzIGNvbXBpbGVyIGlzIGRldGVjdGVkIHRoZW4gY3Jvc3MgY29tcGlsZSBtb2RlIHdpbGwgYmUgdXNlZC4iID4mMgorICBlbGlmIHRlc3QgIngkYnVpbGRfYWxpYXMiICE9ICJ4JGhvc3RfYWxpYXMiOyB0aGVuCisgICAgY3Jvc3NfY29tcGlsaW5nPXllcworICBmaQorZmkKKworYWNfdG9vbF9wcmVmaXg9Cit0ZXN0IC1uICIkaG9zdF9hbGlhcyIgJiYgYWNfdG9vbF9wcmVmaXg9JGhvc3RfYWxpYXMtCisKK3Rlc3QgIiRzaWxlbnQiID0geWVzICYmIGV4ZWMgNj4vZGV2L251bGwKKworIyBGaW5kIHRoZSBzb3VyY2UgZmlsZXMsIGlmIGxvY2F0aW9uIHdhcyBub3Qgc3BlY2lmaWVkLgoraWYgdGVzdCAteiAiJHNyY2RpciI7IHRoZW4KKyAgYWNfc3JjZGlyX2RlZmF1bHRlZD15ZXMKKyAgIyBUcnkgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoaXMgc2NyaXB0LCB0aGVuIGl0cyBwYXJlbnQuCisgIGFjX3Byb2c9JDAKKyAgYWNfY29uZmRpcj1gZWNobyAiJGFjX3Byb2ciIHwgc2VkICdzJVtcXC9dW15cXC9dW15cXC9dKiQlJSdgCisgIHRlc3QgIngkYWNfY29uZmRpciIgPSAieCRhY19wcm9nIiAmJiBhY19jb25mZGlyPS4KKyAgc3JjZGlyPSRhY19jb25mZGlyCisgIGlmIHRlc3QgISAtciAkc3JjZGlyLyRhY191bmlxdWVfZmlsZTsgdGhlbgorICAgIHNyY2Rpcj0uLgorICBmaQorZWxzZQorICBhY19zcmNkaXJfZGVmYXVsdGVkPW5vCitmaQoraWYgdGVzdCAhIC1yICRzcmNkaXIvJGFjX3VuaXF1ZV9maWxlOyB0aGVuCisgIGlmIHRlc3QgIiRhY19zcmNkaXJfZGVmYXVsdGVkIiA9IHllczsgdGhlbgorICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgc291cmNlcyBpbiAkYWNfY29uZmRpciBvciAuLiIgPiYyCisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgZWxzZQorICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgc291cmNlcyBpbiAkc3JjZGlyIiA+JjIKKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICBmaQorZmkKK3NyY2Rpcj1gZWNobyAiJHNyY2RpciIgfCBzZWQgJ3MlXChbXlxcL11cKVtcXC9dKiQlXDElJ2AKK2FjX2Vudl9idWlsZF9hbGlhc19zZXQ9JHtidWlsZF9hbGlhcytzZXR9CithY19lbnZfYnVpbGRfYWxpYXNfdmFsdWU9JGJ1aWxkX2FsaWFzCithY19jdl9lbnZfYnVpbGRfYWxpYXNfc2V0PSR7YnVpbGRfYWxpYXMrc2V0fQorYWNfY3ZfZW52X2J1aWxkX2FsaWFzX3ZhbHVlPSRidWlsZF9hbGlhcworYWNfZW52X2hvc3RfYWxpYXNfc2V0PSR7aG9zdF9hbGlhcytzZXR9CithY19lbnZfaG9zdF9hbGlhc192YWx1ZT0kaG9zdF9hbGlhcworYWNfY3ZfZW52X2hvc3RfYWxpYXNfc2V0PSR7aG9zdF9hbGlhcytzZXR9CithY19jdl9lbnZfaG9zdF9hbGlhc192YWx1ZT0kaG9zdF9hbGlhcworYWNfZW52X3RhcmdldF9hbGlhc19zZXQ9JHt0YXJnZXRfYWxpYXMrc2V0fQorYWNfZW52X3RhcmdldF9hbGlhc192YWx1ZT0kdGFyZ2V0X2FsaWFzCithY19jdl9lbnZfdGFyZ2V0X2FsaWFzX3NldD0ke3RhcmdldF9hbGlhcytzZXR9CithY19jdl9lbnZfdGFyZ2V0X2FsaWFzX3ZhbHVlPSR0YXJnZXRfYWxpYXMKK2FjX2Vudl9DQ19zZXQ9JHtDQytzZXR9CithY19lbnZfQ0NfdmFsdWU9JENDCithY19jdl9lbnZfQ0Nfc2V0PSR7Q0Mrc2V0fQorYWNfY3ZfZW52X0NDX3ZhbHVlPSRDQworYWNfZW52X0NGTEFHU19zZXQ9JHtDRkxBR1Mrc2V0fQorYWNfZW52X0NGTEFHU192YWx1ZT0kQ0ZMQUdTCithY19jdl9lbnZfQ0ZMQUdTX3NldD0ke0NGTEFHUytzZXR9CithY19jdl9lbnZfQ0ZMQUdTX3ZhbHVlPSRDRkxBR1MKK2FjX2Vudl9MREZMQUdTX3NldD0ke0xERkxBR1Mrc2V0fQorYWNfZW52X0xERkxBR1NfdmFsdWU9JExERkxBR1MKK2FjX2N2X2Vudl9MREZMQUdTX3NldD0ke0xERkxBR1Mrc2V0fQorYWNfY3ZfZW52X0xERkxBR1NfdmFsdWU9JExERkxBR1MKK2FjX2Vudl9DUFBGTEFHU19zZXQ9JHtDUFBGTEFHUytzZXR9CithY19lbnZfQ1BQRkxBR1NfdmFsdWU9JENQUEZMQUdTCithY19jdl9lbnZfQ1BQRkxBR1Nfc2V0PSR7Q1BQRkxBR1Mrc2V0fQorYWNfY3ZfZW52X0NQUEZMQUdTX3ZhbHVlPSRDUFBGTEFHUworYWNfZW52X0NQUF9zZXQ9JHtDUFArc2V0fQorYWNfZW52X0NQUF92YWx1ZT0kQ1BQCithY19jdl9lbnZfQ1BQX3NldD0ke0NQUCtzZXR9CithY19jdl9lbnZfQ1BQX3ZhbHVlPSRDUFAKKworIworIyBSZXBvcnQgdGhlIC0taGVscCBtZXNzYWdlLgorIworaWYgdGVzdCAiJGFjX2luaXRfaGVscCIgPSAibG9uZyI7IHRoZW4KKyAgIyBPbWl0IHNvbWUgaW50ZXJuYWwgb3Igb2Jzb2xldGUgb3B0aW9ucyB0byBtYWtlIHRoZSBsaXN0IGxlc3MgaW1wb3NpbmcuCisgICMgVGhpcyBtZXNzYWdlIGlzIHRvbyBsb25nIHRvIGJlIGEgc3RyaW5nIGluIHRoZSBBL1VYIDMuMSBzaC4KKyAgY2F0IDw8RU9GCitcYGNvbmZpZ3VyZScgY29uZmlndXJlcyB0aGlzIHBhY2thZ2UgdG8gYWRhcHQgdG8gbWFueSBraW5kcyBvZiBzeXN0ZW1zLgorCitVc2FnZTogJDAgW09QVElPTl0uLi4gW1ZBUj1WQUxVRV0uLi4KKworVG8gYXNzaWduIGVudmlyb25tZW50IHZhcmlhYmxlcyAoZS5nLiwgQ0MsIENGTEFHUy4uLiksIHNwZWNpZnkgdGhlbSBhcworVkFSPVZBTFVFLiAgU2VlIGJlbG93IGZvciBkZXNjcmlwdGlvbnMgb2Ygc29tZSBvZiB0aGUgdXNlZnVsIHZhcmlhYmxlcy4KKworRGVmYXVsdHMgZm9yIHRoZSBvcHRpb25zIGFyZSBzcGVjaWZpZWQgaW4gYnJhY2tldHMuCisKK0NvbmZpZ3VyYXRpb246CisgIC1oLCAtLWhlbHAgICAgICAgICAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0CisgICAgICAtLWhlbHA9c2hvcnQgICAgICAgIGRpc3BsYXkgb3B0aW9ucyBzcGVjaWZpYyB0byB0aGlzIHBhY2thZ2UKKyAgICAgIC0taGVscD1yZWN1cnNpdmUgICAgZGlzcGxheSB0aGUgc2hvcnQgaGVscCBvZiBhbGwgdGhlIGluY2x1ZGVkIHBhY2thZ2VzCisgIC1WLCAtLXZlcnNpb24gICAgICAgICAgIGRpc3BsYXkgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdAorICAtcSwgLS1xdWlldCwgLS1zaWxlbnQgICBkbyBub3QgcHJpbnQgXGBjaGVja2luZy4uLicgbWVzc2FnZXMKKyAgICAgIC0tY2FjaGUtZmlsZT1GSUxFICAgY2FjaGUgdGVzdCByZXN1bHRzIGluIEZJTEUgW2Rpc2FibGVkXQorICAtQywgLS1jb25maWctY2FjaGUgICAgICBhbGlhcyBmb3IgXGAtLWNhY2hlLWZpbGU9Y29uZmlnLmNhY2hlJworICAtbiwgLS1uby1jcmVhdGUgICAgICAgICBkbyBub3QgY3JlYXRlIG91dHB1dCBmaWxlcworICAgICAgLS1zcmNkaXI9RElSICAgICAgICBmaW5kIHRoZSBzb3VyY2VzIGluIERJUiBbY29uZmlndXJlIGRpciBvciBcYC4uJ10KKworRU9GCisKKyAgY2F0IDw8RU9GCitJbnN0YWxsYXRpb24gZGlyZWN0b3JpZXM6CisgIC0tcHJlZml4PVBSRUZJWCAgICAgICAgIGluc3RhbGwgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGZpbGVzIGluIFBSRUZJWAorICAgICAgICAgICAgICAgICAgICAgICAgICBbJGFjX2RlZmF1bHRfcHJlZml4XQorICAtLWV4ZWMtcHJlZml4PUVQUkVGSVggICBpbnN0YWxsIGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQgZmlsZXMgaW4gRVBSRUZJWAorICAgICAgICAgICAgICAgICAgICAgICAgICBbUFJFRklYXQorCitCeSBkZWZhdWx0LCBcYG1ha2UgaW5zdGFsbCcgd2lsbCBpbnN0YWxsIGFsbCB0aGUgZmlsZXMgaW4KK1xgJGFjX2RlZmF1bHRfcHJlZml4L2JpbicsIFxgJGFjX2RlZmF1bHRfcHJlZml4L2xpYicgZXRjLiAgWW91IGNhbiBzcGVjaWZ5CithbiBpbnN0YWxsYXRpb24gcHJlZml4IG90aGVyIHRoYW4gXGAkYWNfZGVmYXVsdF9wcmVmaXgnIHVzaW5nIFxgLS1wcmVmaXgnLAorZm9yIGluc3RhbmNlIFxgLS1wcmVmaXg9XCRIT01FJy4KKworRm9yIGJldHRlciBjb250cm9sLCB1c2UgdGhlIG9wdGlvbnMgYmVsb3cuCisKK0ZpbmUgdHVuaW5nIG9mIHRoZSBpbnN0YWxsYXRpb24gZGlyZWN0b3JpZXM6CisgIC0tYmluZGlyPURJUiAgICAgICAgICAgIHVzZXIgZXhlY3V0YWJsZXMgW0VQUkVGSVgvYmluXQorICAtLXNiaW5kaXI9RElSICAgICAgICAgICBzeXN0ZW0gYWRtaW4gZXhlY3V0YWJsZXMgW0VQUkVGSVgvc2Jpbl0KKyAgLS1saWJleGVjZGlyPURJUiAgICAgICAgcHJvZ3JhbSBleGVjdXRhYmxlcyBbRVBSRUZJWC9saWJleGVjXQorICAtLWRhdGFyb290ZGlyPURJUiAgICAgICByZWFkLW9ubHkgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGRhdGEgW1BSRUZJWC9zaGFyZV0KKyAgLS1kYXRhZGlyPURJUiAgICAgICAgICAgcmVhZC1vbmx5IGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBkYXRhIFtEQVRBUk9PVERJUl0KKyAgLS1zeXNjb25mZGlyPURJUiAgICAgICAgcmVhZC1vbmx5IHNpbmdsZS1tYWNoaW5lIGRhdGEgW1BSRUZJWC9ldGNdCisgIC0tc2hhcmVkc3RhdGVkaXI9RElSICAgIG1vZGlmaWFibGUgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGRhdGEgW1BSRUZJWC9jb21dCisgIC0tbG9jYWxzdGF0ZWRpcj1ESVIgICAgIG1vZGlmaWFibGUgc2luZ2xlLW1hY2hpbmUgZGF0YSBbUFJFRklYL3Zhcl0KKyAgLS1saWJkaXI9RElSICAgICAgICAgICAgb2JqZWN0IGNvZGUgbGlicmFyaWVzIFtFUFJFRklYL2xpYl0KKyAgLS1pbmNsdWRlZGlyPURJUiAgICAgICAgQyBoZWFkZXIgZmlsZXMgW1BSRUZJWC9pbmNsdWRlXQorICAtLW9sZGluY2x1ZGVkaXI9RElSICAgICBDIGhlYWRlciBmaWxlcyBmb3Igbm9uLWdjYyBbL3Vzci9pbmNsdWRlXQorICAtLWluZm9kaXI9RElSICAgICAgICAgICBpbmZvIGRvY3VtZW50YXRpb24gW0RBVEFST09URElSL2luZm9dCisgIC0tbWFuZGlyPURJUiAgICAgICAgICAgIG1hbiBkb2N1bWVudGF0aW9uIFtEQVRBUk9PVERJUi9tYW5dCitFT0YKKworICBjYXQgPDxcRU9GCisKK1Byb2dyYW0gbmFtZXM6CisgIC0tcHJvZ3JhbS1wcmVmaXg9UFJFRklYICAgICAgICAgICAgcHJlcGVuZCBQUkVGSVggdG8gaW5zdGFsbGVkIHByb2dyYW0gbmFtZXMKKyAgLS1wcm9ncmFtLXN1ZmZpeD1TVUZGSVggICAgICAgICAgICBhcHBlbmQgU1VGRklYIHRvIGluc3RhbGxlZCBwcm9ncmFtIG5hbWVzCisgIC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmFtZT1QUk9HUkFNICAgcnVuIHNlZCBQUk9HUkFNIG9uIGluc3RhbGxlZCBwcm9ncmFtIG5hbWVzCisKK1N5c3RlbSB0eXBlczoKKyAgLS1idWlsZD1CVUlMRCAgICAgICAgICAgY29uZmlndXJlIGZvciBidWlsZGluZyBvbiBCVUlMRCBbZ3Vlc3NlZF0KKyAgLS1ob3N0PUhPU1QgICAgICAgYnVpbGQgcHJvZ3JhbXMgdG8gcnVuIG9uIEhPU1QgW0JVSUxEXQorICAtLXRhcmdldD1UQVJHRVQgICBjb25maWd1cmUgZm9yIGJ1aWxkaW5nIGNvbXBpbGVycyBmb3IgVEFSR0VUIFtIT1NUXQorRU9GCitmaQorCitpZiB0ZXN0IC1uICIkYWNfaW5pdF9oZWxwIjsgdGhlbgorCisgIGNhdCA8PFxFT0YKKworT3B0aW9uYWwgUGFja2FnZXM6CisgIC0td2l0aC1QQUNLQUdFWz1BUkddICAgIHVzZSBQQUNLQUdFIFtBUkc9eWVzXQorICAtLXdpdGhvdXQtUEFDS0FHRSAgICAgICBkbyBub3QgdXNlIFBBQ0tBR0UgKHNhbWUgYXMgLS13aXRoLVBBQ0tBR0U9bm8pCisKK09wdGlvbmFsIEZlYXR1cmVzOgorICAtLWRpc2FibGUtRkVBVFVSRSAgICAgICBkbyBub3QgaW5jbHVkZSBGRUFUVVJFIChzYW1lIGFzIC0tZW5hYmxlLUZFQVRVUkU9bm8pCisgIC0tZW5hYmxlLUZFQVRVUkVbPUFSR10gIGluY2x1ZGUgRkVBVFVSRSBbQVJHPXllc10KKworICAtLXdpdGgtc3lzdGVtLXR5cGU9WFhYICB0ZXN0OiBvdmVycmlkZSBkZXJpdmVkIGhvc3Qgc3lzdGVtLXR5cGUKKyAgLS13aXRoLXBrZy1jb25maWd7PXBhdGh9IGVuYWJsZS9kaXNhYmxlIHVzZSBvZiBwa2ctY29uZmlnCisgIC0td2l0aC1wa2ctY29uZmlnLWxpYmRpcj1YWFggdXNlIGdpdmVuIGRpcmVjdG9yeSBmb3IgaW5zdGFsbGluZyBwYy1maWxlcworICAtLXdpdGhvdXQtdGVzdHMgICAgICAgICBzdXBwcmVzcyBidWlsZCB3aXRoIHRlc3QtcHJvZ3JhbXMKKyAgLS1lbmFibGUtbWl4ZWQtY2FzZSAgICAgdGljIHNob3VsZCBhc3N1bWUgbWl4ZWQtY2FzZSBmaWxlbmFtZXMKKyAgLS13aXRoLWluc3RhbGwtcHJlZml4ICAgcHJlZml4ZXMgYWN0dWFsIGluc3RhbGwtbG9jYXRpb24gKCRERVNURElSKQorQnVpbGQtVG9vbHMgTmVlZGVkIHRvIENvbXBpbGUgVGVtcG9yYXJ5IEFwcGxpY2F0aW9ucyBmb3IgQ3Jvc3MtY29tcGlsaW5nOgorICAtLXdpdGgtYnVpbGQtY2M9WFhYICAgICB0aGUgYnVpbGQgQyBjb21waWxlciAoJEJVSUxEX0NDKQorICAtLXdpdGgtYnVpbGQtY3BwPVhYWCAgICB0aGUgYnVpbGQgQyBwcmVwcm9jZXNzb3IgKCRCVUlMRF9DUFApCisgIC0td2l0aC1idWlsZC1jZmxhZ3M9WFhYIHRoZSBidWlsZCBDIGNvbXBpbGVyLWZsYWdzICgkQlVJTERfQ0ZMQUdTKQorICAtLXdpdGgtYnVpbGQtY3BwZmxhZ3M9WFhYIHRoZSBidWlsZCBDIHByZXByb2Nlc3Nvci1mbGFncyAoJEJVSUxEX0NQUEZMQUdTKQorICAtLXdpdGgtYnVpbGQtbGRmbGFncz1YWFggdGhlIGJ1aWxkIGxpbmtlci1mbGFncyAoJEJVSUxEX0xERkxBR1MpCisgIC0td2l0aC1idWlsZC1saWJzPVhYWCAgIHRoZSBidWlsZCBsaWJyYXJpZXMgKCR7QlVJTERfTElCU30pCitPcHRpb25zIHRvIFNwZWNpZnkgdGhlIExpYnJhcmllcyBCdWlsdC9Vc2VkOgorICAtLXdpdGgtc2hhcmVkICAgICAgICAgICBnZW5lcmF0ZSBzaGFyZWQgQy1vYmplY3RzIChuZWVkZWQgZm9yIC0td2l0aC1hZGEtc2hhcmVkbGliKQorICAtLXdpdGgtY3Vyc2VzLWRpcj1ESVIgICBkaXJlY3RvcnkgaW4gd2hpY2ggKG4pY3Vyc2VzIGlzIGluc3RhbGxlZAorICAtLWVuYWJsZS13aWRlYyAgICAgICAgICBjb21waWxlIHdpdGggd2lkZS1jaGFyL1VURi04IGNvZGUKKyAgLS13aXRoLWxpYi1wcmVmaXggICAgICAgb3ZlcnJpZGUgbGlicmFyeS1wcmVmaXgKKyAgLS13aXRoLXNobGliLXZlcnNpb249WCAgU3BlY2lmeSByZWwgb3IgYWJpIHZlcnNpb24gZm9yIHNoYXJlZCBsaWJzCisgIC0tZW5hYmxlLXJwYXRoLWxpbmsgICAgIGxpbmsgc2FtcGxlIHByb2dyYW1zIHdpdGggcnBhdGggb3B0aW9uCitGaW5lLVR1bmluZyBZb3VyIENvbmZpZ3VyYXRpb246CisgIC0tZW5hYmxlLWJyb2tlbl9saW5rZXIgIGNvbXBpbGUgd2l0aCBicm9rZW4tbGlua2VyIHN1cHBvcnQgY29kZQorICAtLWRpc2FibGUtbGFyZ2VmaWxlICAgICBvbWl0IHN1cHBvcnQgZm9yIGxhcmdlIGZpbGVzCisgIC0td2l0aC1yY3MtaWRzICAgICAgICAgIGNvbXBpbGUtaW4gUkNTIGlkZW50aWZpZXJzCitFeHRlbnNpb25zOgorICAtLWRpc2FibGUtZXh0LWZ1bmNzICAgICBkaXNhYmxlIGZ1bmN0aW9uLWV4dGVuc2lvbnMKKyAgLS1lbmFibGUtY29uc3QgICAgICAgICAgY29tcGlsZSB3aXRoIGV4dHJhL25vbi1zdGFuZGFyZCBjb25zdAorRGV2ZWxvcG1lbnQgQ29kZToKKyAgLS13aXRob3V0LWRldmVsb3AgICAgICAgZGlzYWJsZSBkZXZlbG9wbWVudCBvcHRpb25zCitFeHBlcmltZW50YWwgQ29kZToKKyAgLS13aXRoLXB0aHJlYWQgICAgICAgICAgdXNlIFBPU0lYIHRocmVhZCBsaWJyYXJ5CisgIC0tZW5hYmxlLXdlYWstc3ltYm9scyAgIGVuYWJsZSB3ZWFrLXN5bWJvbHMgZm9yIHB0aHJlYWRzCisgIC0tZW5hYmxlLXJlZW50cmFudCAgICAgIGNvbXBpbGUgd2l0aCBleHBlcmltZW50YWwgcmVlbnRyYW50IGNvZGUKKyAgLS13aXRoLXdyYXAtcHJlZml4PVhYWCAgb3ZlcnJpZGUgcHJlZml4IHVzZWQgZm9yIHB1YmxpYyB2YXJpYWJsZXMKK1Rlc3RpbmcvZGV2ZWxvcG1lbnQgT3B0aW9uczoKKyAgLS1kaXNhYmxlLWVjaG8gICAgICAgICAgZG8gbm90IGRpc3BsYXkgImNvbXBpbGluZyIgY29tbWFuZHMKKyAgLS1lbmFibGUtd2FybmluZ3MgICAgICAgYnVpbGQ6IHR1cm4gb24gR0NDIGNvbXBpbGVyIHdhcm5pbmdzCisgIC0tZW5hYmxlLWFzc2VydGlvbnMgICAgIHRlc3Q6IHR1cm4gb24gZ2VuZXJhdGlvbiBvZiBhc3NlcnRpb24gY29kZQorICAtLWVuYWJsZS1leHBhbmRlZCAgICAgICB0ZXN0OiBnZW5lcmF0ZSBmdW5jdGlvbnMgZm9yIGNlcnRhaW4gbWFjcm9zCisgIC0tZGlzYWJsZS1tYWNyb3MgICAgICAgIHRlc3Q6IHVzZSBmdW5jdGlvbnMgcmF0aGVyIHRoYW4gbWFjcm9zCisgIC0td2l0aC10cmFjZSAgICAgICAgICAgIHRlc3Q6IGFkZCB0cmFjZSgpIGZ1bmN0aW9uIHRvIGFsbCBtb2RlbHMgb2YgbmN1cnNlcworICAtLWRpc2FibGUtZ25hdC1wcm9qZWN0cyB0ZXN0OiBkaXNhYmxlIEdOQVQgcHJvamVjdHMgZXZlbiBpZiB1c2FibGUKK0FkYTk1IEJpbmRpbmcgT3B0aW9uczoKKyAgLS13aXRoLWFkYS1jb21waWxlcj1DTUQgc3BlY2lmeSBBZGE5NSBjb21waWxlciBjb21tYW5kIChkZWZhdWx0IGduYXRtYWtlKQorICAtLXdpdGgtYWRhLWluY2x1ZGU9RElSICBBZGEgaW5jbHVkZXMgYXJlIGluIERJUiAoZGVmYXVsdDogUFJFRklYL3NoYXJlL2FkYS9hZGFpbmNsdWRlKQorICAtLXdpdGgtYWRhLW9iamVjdHM9RElSICBBZGEgb2JqZWN0cyBhcmUgaW4gRElSIChkZWZhdWx0OiBQUkVGSVgvbGliL2FkYS9hZGFsaWIpCisgIC0td2l0aC1hZGEtc2hhcmVkbGliPXNvbmFtZSBidWlsZCBzaGFyZWQtbGlicmFyeSAocmVxdWlyZXMgR05BVCBwcm9qZWN0cykKKworU29tZSBpbmZsdWVudGlhbCBlbnZpcm9ubWVudCB2YXJpYWJsZXM6CisgIENDICAgICAgICAgIEMgY29tcGlsZXIgY29tbWFuZAorICBDRkxBR1MgICAgICBDIGNvbXBpbGVyIGZsYWdzCisgIExERkxBR1MgICAgIGxpbmtlciBmbGFncywgZS5nLiAtTDxsaWIgZGlyPiBpZiB5b3UgaGF2ZSBsaWJyYXJpZXMgaW4gYQorICAgICAgICAgICAgICBub25zdGFuZGFyZCBkaXJlY3RvcnkgPGxpYiBkaXI+CisgIENQUEZMQUdTICAgIEMvQysrIHByZXByb2Nlc3NvciBmbGFncywgZS5nLiAtSTxpbmNsdWRlIGRpcj4gaWYgeW91IGhhdmUKKyAgICAgICAgICAgICAgaGVhZGVycyBpbiBhIG5vbnN0YW5kYXJkIGRpcmVjdG9yeSA8aW5jbHVkZSBkaXI+CisgIENQUCAgICAgICAgIEMgcHJlcHJvY2Vzc29yCisKK1VzZSB0aGVzZSB2YXJpYWJsZXMgdG8gb3ZlcnJpZGUgdGhlIGNob2ljZXMgbWFkZSBieSBgY29uZmlndXJlJyBvciB0byBoZWxwCitpdCB0byBmaW5kIGxpYnJhcmllcyBhbmQgcHJvZ3JhbXMgd2l0aCBub25zdGFuZGFyZCBuYW1lcy9sb2NhdGlvbnMuCisKK0VPRgorZmkKKworaWYgdGVzdCAiJGFjX2luaXRfaGVscCIgPSAicmVjdXJzaXZlIjsgdGhlbgorICAjIElmIHRoZXJlIGFyZSBzdWJkaXJzLCByZXBvcnQgdGhlaXIgc3BlY2lmaWMgLS1oZWxwLgorICBhY19wb3BkaXI9YHB3ZGAKKyAgZm9yIGFjX3N1YmRpciBpbiA6ICRhY19zdWJkaXJzX2FsbDsgZG8gdGVzdCAieCRhY19zdWJkaXIiID0geDogJiYgY29udGludWUKKyAgICBjZCAkYWNfc3ViZGlyCisgICAgIyBBICIuLi8iIGZvciBlYWNoIGRpcmVjdG9yeSBpbiAvJGFjX3N1YmRpci4KKyAgICBhY19kb3RzPWBlY2hvICRhY19zdWJkaXIgfAorICAgICAgICAgICAgIHNlZCAncyxeXC4vLCw7cyxbXi9dJCwmLyw7cyxbXi9dKi8sLi4vLGcnYAorCisgICAgY2FzZSAkc3JjZGlyIGluCisgICAgLikgIyBObyAtLXNyY2RpciBvcHRpb24uICBXZSBhcmUgYnVpbGRpbmcgaW4gcGxhY2UuCisgICAgICBhY19zdWJfc3JjZGlyPSRzcmNkaXIgOzsKKyAgICBbXFwvXSogfCA/OltcXC9dKiApICMgQWJzb2x1dGUgcGF0aC4KKyAgICAgIGFjX3N1Yl9zcmNkaXI9JHNyY2Rpci8kYWNfc3ViZGlyIDs7CisgICAgKikgIyBSZWxhdGl2ZSBwYXRoLgorICAgICAgYWNfc3ViX3NyY2Rpcj0kYWNfZG90cyRzcmNkaXIvJGFjX3N1YmRpciA7OworICAgIGVzYWMKKworICAgICMgQ2hlY2sgZm9yIGd1ZXN0ZWQgY29uZmlndXJlOyBvdGhlcndpc2UgZ2V0IEN5Z251cyBzdHlsZSBjb25maWd1cmUuCisgICAgaWYgdGVzdCAtZiAkYWNfc3ViX3NyY2Rpci9jb25maWd1cmUuZ251OyB0aGVuCisgICAgICBlY2hvCisgICAgICAkU0hFTEwgJGFjX3N1Yl9zcmNkaXIvY29uZmlndXJlLmdudSAgLS1oZWxwPXJlY3Vyc2l2ZQorICAgIGVsaWYgdGVzdCAtZiAkYWNfc3ViX3NyY2Rpci9jb25maWd1cmU7IHRoZW4KKyAgICAgIGVjaG8KKyAgICAgICRTSEVMTCAkYWNfc3ViX3NyY2Rpci9jb25maWd1cmUgIC0taGVscD1yZWN1cnNpdmUKKyAgICBlbGlmIHRlc3QgLWYgJGFjX3N1Yl9zcmNkaXIvY29uZmlndXJlLmFjIHx8CisgICAgICAgICAgIHRlc3QgLWYgJGFjX3N1Yl9zcmNkaXIvY29uZmlndXJlLmluOyB0aGVuCisgICAgICBlY2hvCisgICAgICAkYWNfY29uZmlndXJlIC0taGVscAorICAgIGVsc2UKKyAgICAgIGVjaG8gIiRhc19tZTogV0FSTklORzogbm8gY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBpcyBpbiAkYWNfc3ViZGlyIiA+JjIKKyAgICBmaQorICAgIGNkICRhY19wb3BkaXIKKyAgZG9uZQorZmkKKwordGVzdCAtbiAiJGFjX2luaXRfaGVscCIgJiYgZXhpdCAwCitpZiAkYWNfaW5pdF92ZXJzaW9uOyB0aGVuCisgIGNhdCA8PFxFT0YKKworQ29weXJpZ2h0IDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorVGhpcyBjb25maWd1cmUgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2dpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4KK0VPRgorICBleGl0IDAKK2ZpCitleGVjIDU+Y29uZmlnLmxvZworY2F0ID4mNSA8PEVPRgorVGhpcyBmaWxlIGNvbnRhaW5zIGFueSBtZXNzYWdlcyBwcm9kdWNlZCBieSBjb21waWxlcnMgd2hpbGUKK3J1bm5pbmcgY29uZmlndXJlLCB0byBhaWQgZGVidWdnaW5nIGlmIGNvbmZpZ3VyZSBtYWtlcyBhIG1pc3Rha2UuCisKK0l0IHdhcyBjcmVhdGVkIGJ5ICRhc19tZSwgd2hpY2ggd2FzCitnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNTIuMjAxNDEyMDQuICBJbnZvY2F0aW9uIGNvbW1hbmQgbGluZSB3YXMKKworICAkICQwICRACisKK0VPRgoreworY2F0IDw8X0FTVU5BTUUKKyMjIC0tLS0tLS0tLS0gIyMKKyMjIFBsYXRmb3JtLiAgIyMKKyMjIC0tLS0tLS0tLS0gIyMKKworaG9zdG5hbWUgPSBgKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWAKK3VuYW1lIC1tID0gYCh1bmFtZSAtbSkgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAordW5hbWUgLXIgPSBgKHVuYW1lIC1yKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCit1bmFtZSAtcyA9IGAodW5hbWUgLXMpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKK3VuYW1lIC12ID0gYCh1bmFtZSAtdikgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAorCisvdXNyL2Jpbi91bmFtZSAtcCA9IGAoL3Vzci9iaW4vdW5hbWUgLXApIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKKy9iaW4vdW5hbWUgLVggICAgID0gYCgvYmluL3VuYW1lIC1YKSAyPi9kZXYvbnVsbCAgICAgfHwgZWNobyB1bmtub3duYAorCisvYmluL2FyY2ggICAgICAgICAgICAgID0gYCgvYmluL2FyY2gpIDI+L2Rldi9udWxsICAgICAgICAgICAgICB8fCBlY2hvIHVua25vd25gCisvdXNyL2Jpbi9hcmNoIC1rICAgICAgID0gYCgvdXNyL2Jpbi9hcmNoIC1rKSAyPi9kZXYvbnVsbCAgICAgICB8fCBlY2hvIHVua25vd25gCisvdXNyL2NvbnZleC9nZXRzeXNpbmZvID0gYCgvdXNyL2NvbnZleC9nZXRzeXNpbmZvKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCitob3N0aW5mbyAgICAgICAgICAgICAgID0gYChob3N0aW5mbykgMj4vZGV2L251bGwgICAgICAgICAgICAgICB8fCBlY2hvIHVua25vd25gCisvYmluL21hY2hpbmUgICAgICAgICAgID0gYCgvYmluL21hY2hpbmUpIDI+L2Rldi9udWxsICAgICAgICAgICB8fCBlY2hvIHVua25vd25gCisvdXNyL2Jpbi9vc2xldmVsICAgICAgID0gYCgvdXNyL2Jpbi9vc2xldmVsKSAyPi9kZXYvbnVsbCAgICAgICB8fCBlY2hvIHVua25vd25gCisvYmluL3VuaXZlcnNlICAgICAgICAgID0gYCgvYmluL3VuaXZlcnNlKSAyPi9kZXYvbnVsbCAgICAgICAgICB8fCBlY2hvIHVua25vd25gCisKK1BBVEggPSAkUEFUSAorCitfQVNVTkFNRQorfSA+JjUKKworY2F0ID4mNSA8PEVPRgorIyMgLS0tLS0tLS0tLS0tICMjCisjIyBDb3JlIHRlc3RzLiAgIyMKKyMjIC0tLS0tLS0tLS0tLSAjIworCitFT0YKKworIyBLZWVwIGEgdHJhY2Ugb2YgdGhlIGNvbW1hbmQgbGluZS4KKyMgU3RyaXAgb3V0IC0tbm8tY3JlYXRlIGFuZCAtLW5vLXJlY3Vyc2lvbiBzbyB0aGV5IGRvIG5vdCBwaWxlIHVwLgorIyBBbHNvIHF1b3RlIGFueSBhcmdzIGNvbnRhaW5pbmcgc2hlbGwgbWV0YS1jaGFyYWN0ZXJzLgorYWNfY29uZmlndXJlX2FyZ3M9CithY19zZXA9Citmb3IgYWNfYXJnCitkbworICBjYXNlICRhY19hcmcgaW4KKyAgLW5vLWNyZWF0ZSB8IC0tbm8tY3JlYXRlIHwgLS1uby1jcmVhdCB8IC0tbm8tY3JlYSB8IC0tbm8tY3JlIFwKKyAgfCAtLW5vLWNyIHwgLS1uby1jKSA7OworICAtbm8tcmVjdXJzaW9uIHwgLS1uby1yZWN1cnNpb24gfCAtLW5vLXJlY3Vyc2lvIHwgLS1uby1yZWN1cnNpIFwKKyAgfCAtLW5vLXJlY3VycyB8IC0tbm8tcmVjdXIgfCAtLW5vLXJlY3UgfCAtLW5vLXJlYyB8IC0tbm8tcmUgfCAtLW5vLXIpIDs7CisgICoiICIqfCoiCSIqfCpbXFtcXVx+XCNcJFxeXCZcKlwoXClce1x9XFxcfFw7XDxcPlw/XCJcJ10qKQorICAgIGFjX2FyZz1gZWNobyAiJGFjX2FyZyIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAKKyAgICBhY19jb25maWd1cmVfYXJncz0iJGFjX2NvbmZpZ3VyZV9hcmdzJGFjX3NlcCckYWNfYXJnJyIKKyAgICBhY19zZXA9IiAiIDs7CisgICopIGFjX2NvbmZpZ3VyZV9hcmdzPSIkYWNfY29uZmlndXJlX2FyZ3MkYWNfc2VwJGFjX2FyZyIKKyAgICAgYWNfc2VwPSIgIiA7OworICBlc2FjCisgICMgR2V0IHJpZCBvZiB0aGUgbGVhZGluZyBzcGFjZS4KK2RvbmUKKworIyBXaGVuIGludGVycnVwdGVkIG9yIGV4aXQnZCwgY2xlYW51cCB0ZW1wb3JhcnkgZmlsZXMsIGFuZCBjb21wbGV0ZQorIyBjb25maWcubG9nLiAgV2UgcmVtb3ZlIGNvbW1lbnRzIGJlY2F1c2UgYW55d2F5IHRoZSBxdW90ZXMgaW4gdGhlcmUKKyMgd291bGQgY2F1c2UgcHJvYmxlbXMgb3IgbG9vayB1Z2x5LgordHJhcCAnZXhpdF9zdGF0dXM9JD8KKyAgIyBTYXZlIGludG8gY29uZmlnLmxvZyBzb21lIGluZm9ybWF0aW9uIHRoYXQgbWlnaHQgaGVscCBpbiBkZWJ1Z2dpbmcuCisgIGVjaG8gPiY1CisgIGVjaG8gIiMjIC0tLS0tLS0tLS0tLS0tLS0tICMjIiA+JjUKKyAgZWNobyAiIyMgQ2FjaGUgdmFyaWFibGVzLiAgIyMiID4mNQorICBlY2hvICIjIyAtLS0tLS0tLS0tLS0tLS0tLSAjIyIgPiY1CisgIGVjaG8gPiY1CisgICMgVGhlIGZvbGxvd2luZyB3YXkgb2Ygd3JpdGluZyB0aGUgY2FjaGUgbWlzaGFuZGxlcyBuZXdsaW5lcyBpbiB2YWx1ZXMsCit7CisgIChzZXQpIDI+JjEgfAorICAgIGNhc2UgYChhY19zcGFjZT0nIiciJyAnIiciJzsgc2V0IHwgZ3JlcCBhY19zcGFjZSkgMj4mMWAgaW4KKyAgICAqYWNfc3BhY2U9XCAqKQorICAgICAgc2VkIC1uIFwKKyAgICAgICAgInMvJyInIicvJyInIidcXFxcJyInIicnIiciJy9nOworICAgIAkgIHMvXlxcKFtfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKlxcKT1cXCguKlxcKS9cXDE9JyInIidcXDInIiciJy9wIgorICAgICAgOzsKKyAgICAqKQorICAgICAgc2VkIC1uIFwKKyAgICAgICAgInMvXlxcKFtfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKlxcKT1cXCguKlxcKS9cXDE9XFwyL3AiCisgICAgICA7OworICAgIGVzYWM7Cit9ID4mNQorICBzZWQgIi9eJC9kIiBjb25mZGVmcy5oID5jb25mdGVzdC5sb2cKKyAgaWYgdGVzdCAtcyBjb25mdGVzdC5sb2c7IHRoZW4KKyAgICBlY2hvID4mNQorICAgIGVjaG8gIiMjIC0tLS0tLS0tLS0tLSAjIyIgPiY1CisgICAgZWNobyAiIyMgY29uZmRlZnMuaC4gICMjIiA+JjUKKyAgICBlY2hvICIjIyAtLS0tLS0tLS0tLS0gIyMiID4mNQorICAgIGVjaG8gPiY1CisgICAgY2F0IGNvbmZ0ZXN0LmxvZyA+JjUKKyAgZmkKKyAgKGVjaG87IGVjaG8pID4mNQorICB0ZXN0ICIkYWNfc2lnbmFsIiAhPSAwICYmCisgICAgZWNobyAiJGFzX21lOiBjYXVnaHQgc2lnbmFsICRhY19zaWduYWwiID4mNQorICBlY2hvICIkYXNfbWU6IGV4aXQgJGV4aXRfc3RhdHVzIiA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KiBjb25mZGVmcyogY29yZSBjb3JlLiogKi5jb3JlIGNvbmYkJCogJGFjX2NsZWFuX2ZpbGVzICYmCisgICAgZXhpdCAkZXhpdF9zdGF0dXMKKyAgICAgJyAwCitmb3IgYWNfc2lnbmFsIGluIDEgMiAxMyAxNTsgZG8KKyAgdHJhcCAnYWNfc2lnbmFsPSckYWNfc2lnbmFsJzsgeyAoZXhpdCAxKTsgZXhpdCAxOyB9JyAkYWNfc2lnbmFsCitkb25lCithY19zaWduYWw9MAorCisjIGNvbmZkZWZzLmggYXZvaWRzIE9TIGNvbW1hbmQgbGluZSBsZW5ndGggbGltaXRzIHRoYXQgREVGUyBjYW4gZXhjZWVkLgorcm0gLXJmIGNvbmZ0ZXN0KiBjb25mZGVmcy5oCisjIEFJWCBjcHAgbG9zZXMgb24gYW4gZW1wdHkgZmlsZSwgc28gbWFrZSBzdXJlIGl0IGNvbnRhaW5zIGF0IGxlYXN0IGEgbmV3bGluZS4KK2VjaG8gPmNvbmZkZWZzLmgKKworIyBMZXQgdGhlIHNpdGUgZmlsZSBzZWxlY3QgYW4gYWx0ZXJuYXRlIGNhY2hlIGZpbGUgaWYgaXQgd2FudHMgdG8uCisjIFByZWZlciBleHBsaWNpdGx5IHNlbGVjdGVkIGZpbGUgdG8gYXV0b21hdGljYWxseSBzZWxlY3RlZCBvbmVzLgoraWYgdGVzdCAteiAiJENPTkZJR19TSVRFIjsgdGhlbgorICBpZiB0ZXN0ICJ4JHByZWZpeCIgIT0geE5PTkU7IHRoZW4KKyAgICBDT05GSUdfU0lURT0iJHByZWZpeC9zaGFyZS9jb25maWcuc2l0ZSAkcHJlZml4L2V0Yy9jb25maWcuc2l0ZSIKKyAgZWxzZQorICAgIENPTkZJR19TSVRFPSIkYWNfZGVmYXVsdF9wcmVmaXgvc2hhcmUvY29uZmlnLnNpdGUgJGFjX2RlZmF1bHRfcHJlZml4L2V0Yy9jb25maWcuc2l0ZSIKKyAgZmkKK2ZpCitmb3IgYWNfc2l0ZV9maWxlIGluICRDT05GSUdfU0lURTsgZG8KKyAgaWYgdGVzdCAtciAiJGFjX3NpdGVfZmlsZSI7IHRoZW4KKyAgICB7IGVjaG8gIiRhc19tZTo4OTU6IGxvYWRpbmcgc2l0ZSBzY3JpcHQgJGFjX3NpdGVfZmlsZSIgPiY1CitlY2hvICIkYXNfbWU6IGxvYWRpbmcgc2l0ZSBzY3JpcHQgJGFjX3NpdGVfZmlsZSIgPiY2O30KKyAgICBjYXQgIiRhY19zaXRlX2ZpbGUiID4mNQorICAgIC4gIiRhY19zaXRlX2ZpbGUiCisgIGZpCitkb25lCisKK2lmIHRlc3QgLXIgIiRjYWNoZV9maWxlIjsgdGhlbgorICAjIFNvbWUgdmVyc2lvbnMgb2YgYmFzaCB3aWxsIGZhaWwgdG8gc291cmNlIC9kZXYvbnVsbCAoc3BlY2lhbAorICAjIGZpbGVzIGFjdHVhbGx5KSwgc28gd2UgYXZvaWQgZG9pbmcgdGhhdC4KKyAgaWYgdGVzdCAtZiAiJGNhY2hlX2ZpbGUiOyB0aGVuCisgICAgeyBlY2hvICIkYXNfbWU6OTA2OiBsb2FkaW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKK2VjaG8gIiRhc19tZTogbG9hZGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KKyAgICBjYXNlICRjYWNoZV9maWxlIGluCisgICAgICBbXFwvXSogfCA/OltcXC9dKiApIC4gJGNhY2hlX2ZpbGU7OworICAgICAgKikgICAgICAgICAgICAgICAgICAgICAgLiAuLyRjYWNoZV9maWxlOzsKKyAgICBlc2FjCisgIGZpCitlbHNlCisgIHsgZWNobyAiJGFzX21lOjkxNDogY3JlYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQorZWNobyAiJGFzX21lOiBjcmVhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KKyAgPiRjYWNoZV9maWxlCitmaQorCisjIENoZWNrIHRoYXQgdGhlIHByZWNpb3VzIHZhcmlhYmxlcyBzYXZlZCBpbiB0aGUgY2FjaGUgaGF2ZSBrZXB0IHRoZSBzYW1lCisjIHZhbHVlLgorYWNfY2FjaGVfY29ycnVwdGVkPWZhbHNlCitmb3IgYWNfdmFyIGluIGAoc2V0KSAyPiYxIHwKKyAgICAgICAgICAgICAgIHNlZCAtbiAncy9eYWNfZW52X1woW2EtekEtWl8wLTldKlwpX3NldD0uKi9cMS9wJ2A7IGRvCisgIGV2YWwgYWNfb2xkX3NldD1cJGFjX2N2X2Vudl8ke2FjX3Zhcn1fc2V0CisgIGV2YWwgYWNfbmV3X3NldD1cJGFjX2Vudl8ke2FjX3Zhcn1fc2V0CisgIGV2YWwgYWNfb2xkX3ZhbD0iXCRhY19jdl9lbnZfJHthY192YXJ9X3ZhbHVlIgorICBldmFsIGFjX25ld192YWw9IlwkYWNfZW52XyR7YWNfdmFyfV92YWx1ZSIKKyAgY2FzZSAkYWNfb2xkX3NldCwkYWNfbmV3X3NldCBpbgorICAgIHNldCwpCisgICAgICB7IGVjaG8gIiRhc19tZTo5MzA6IGVycm9yOiBcYCRhY192YXInIHdhcyBzZXQgdG8gXGAkYWNfb2xkX3ZhbCcgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBcYCRhY192YXInIHdhcyBzZXQgdG8gXGAkYWNfb2xkX3ZhbCcgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiYyO30KKyAgICAgIGFjX2NhY2hlX2NvcnJ1cHRlZD06IDs7CisgICAgLHNldCkKKyAgICAgIHsgZWNobyAiJGFzX21lOjkzNDogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIG5vdCBzZXQgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBcYCRhY192YXInIHdhcyBub3Qgc2V0IGluIHRoZSBwcmV2aW91cyBydW4iID4mMjt9CisgICAgICBhY19jYWNoZV9jb3JydXB0ZWQ9OiA7OworICAgICwpOzsKKyAgICAqKQorICAgICAgaWYgdGVzdCAieCRhY19vbGRfdmFsIiAhPSAieCRhY19uZXdfdmFsIjsgdGhlbgorICAgICAgICB7IGVjaG8gIiRhc19tZTo5NDA6IGVycm9yOiBcYCRhY192YXInIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IFxgJGFjX3ZhcicgaGFzIGNoYW5nZWQgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mMjt9CisgICAgICAgIHsgZWNobyAiJGFzX21lOjk0MjogICBmb3JtZXIgdmFsdWU6ICAkYWNfb2xkX3ZhbCIgPiY1CitlY2hvICIkYXNfbWU6ICAgZm9ybWVyIHZhbHVlOiAgJGFjX29sZF92YWwiID4mMjt9CisgICAgICAgIHsgZWNobyAiJGFzX21lOjk0NDogICBjdXJyZW50IHZhbHVlOiAkYWNfbmV3X3ZhbCIgPiY1CitlY2hvICIkYXNfbWU6ICAgY3VycmVudCB2YWx1ZTogJGFjX25ld192YWwiID4mMjt9CisgICAgICAgIGFjX2NhY2hlX2NvcnJ1cHRlZD06CisgICAgICBmaTs7CisgIGVzYWMKKyAgIyBQYXNzIHByZWNpb3VzIHZhcmlhYmxlcyB0byBjb25maWcuc3RhdHVzLiAgSXQgZG9lc24ndCBtYXR0ZXIgaWYKKyAgIyB3ZSBwYXNzIHNvbWUgdHdpY2UgKGluIGFkZGl0aW9uIHRvIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzKS4KKyAgaWYgdGVzdCAiJGFjX25ld19zZXQiID0gc2V0OyB0aGVuCisgICAgY2FzZSAkYWNfbmV3X3ZhbCBpbgorICAgICoiICIqfCoiCSIqfCpbXFtcXVx+XCNcJFxeXCZcKlwoXClce1x9XFxcfFw7XDxcPlw/XCJcJ10qKQorICAgICAgYWNfYXJnPSRhY192YXI9YGVjaG8gIiRhY19uZXdfdmFsIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYAorICAgICAgYWNfY29uZmlndXJlX2FyZ3M9IiRhY19jb25maWd1cmVfYXJncyAnJGFjX2FyZyciCisgICAgICA7OworICAgICopIGFjX2NvbmZpZ3VyZV9hcmdzPSIkYWNfY29uZmlndXJlX2FyZ3MgJGFjX3Zhcj0kYWNfbmV3X3ZhbCIKKyAgICAgICA7OworICAgIGVzYWMKKyAgZmkKK2RvbmUKK2lmICRhY19jYWNoZV9jb3JydXB0ZWQ7IHRoZW4KKyAgeyBlY2hvICIkYXNfbWU6OTYzOiBlcnJvcjogY2hhbmdlcyBpbiB0aGUgZW52aXJvbm1lbnQgY2FuIGNvbXByb21pc2UgdGhlIGJ1aWxkIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNoYW5nZXMgaW4gdGhlIGVudmlyb25tZW50IGNhbiBjb21wcm9taXNlIHRoZSBidWlsZCIgPiYyO30KKyAgeyB7IGVjaG8gIiRhc19tZTo5NjU6IGVycm9yOiBydW4gXGBtYWtlIGRpc3RjbGVhbicgYW5kL29yIFxgcm0gJGNhY2hlX2ZpbGUnIGFuZCBzdGFydCBvdmVyIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IHJ1biBcYG1ha2UgZGlzdGNsZWFuJyBhbmQvb3IgXGBybSAkY2FjaGVfZmlsZScgYW5kIHN0YXJ0IG92ZXIiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK2ZpCisKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKK2FjX21haW5fcmV0dXJuPXJldHVybgorCitjYXNlIGBlY2hvICJ0ZXN0aW5nXGMiIDI+L2Rldi9udWxsOyBlY2hvIDEsMiwzYCxgZWNobyAtbiB0ZXN0aW5nIDI+L2Rldi9udWxsOyBlY2hvIDEsMiwzYCBpbgorICAqYyosLW4qKSBFQ0hPX049IEVDSE9fQz0JIyBuZXdsaW5lcyBkbyBub3Qgc2VkIDstKSBvbmx5IGJyb2tlbiBzaGVsbHMgd291bGQgdXNlIHRoaXMgY2FzZSBhbnl3YXkKKwkJICAgRUNIT19UPScJJyA7OworICAqYyosKiAgKSBFQ0hPX049LW4gRUNIT19DPSBFQ0hPX1Q9IDs7CisgICopICAgICAgRUNIT19OPSBFQ0hPX0M9J1xjJyBFQ0hPX1Q9IDs7Citlc2FjCitlY2hvICIjISAkU0hFTEwiID5jb25mdGVzdC5zaAorZWNobyAgImV4aXQgMCIgICA+PmNvbmZ0ZXN0LnNoCitjaG1vZCAreCBjb25mdGVzdC5zaAoraWYgeyAoZWNobyAiJGFzX21lOjk4NjogUEFUSD1cIi47LlwiOyBjb25mdGVzdC5zaCIpID4mNQorICAoUEFUSD0iLjsuIjsgY29uZnRlc3Quc2gpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo5ODk6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbgorICBhY19wYXRoX3NlcGFyYXRvcj0nOycKK2Vsc2UKKyAgYWNfcGF0aF9zZXBhcmF0b3I9OgorZmkKK1BBVEhfU0VQQVJBVE9SPSIkYWNfcGF0aF9zZXBhcmF0b3IiCitybSAtZiBjb25mdGVzdC5zaAorCithY19jb25maWdfaGVhZGVycz0iJGFjX2NvbmZpZ19oZWFkZXJzIGluY2x1ZGUvbmN1cnNlc19jZmcuaDppbmNsdWRlL25jdXJzZXNfY2ZnLmhpbiIKKwordG9wX2J1aWxkZGlyPWBwd2RgCisKK2FjX2F1eF9kaXI9Citmb3IgYWNfZGlyIGluICRzcmNkaXIgJHNyY2Rpci8uLiAkc3JjZGlyLy4uLy4uOyBkbworICBpZiB0ZXN0IC1mICRhY19kaXIvaW5zdGFsbC1zaDsgdGhlbgorICAgIGFjX2F1eF9kaXI9JGFjX2RpcgorICAgIGFjX2luc3RhbGxfc2g9IiRhY19hdXhfZGlyL2luc3RhbGwtc2ggLWMiCisgICAgYnJlYWsKKyAgZWxpZiB0ZXN0IC1mICRhY19kaXIvaW5zdGFsbC5zaDsgdGhlbgorICAgIGFjX2F1eF9kaXI9JGFjX2RpcgorICAgIGFjX2luc3RhbGxfc2g9IiRhY19hdXhfZGlyL2luc3RhbGwuc2ggLWMiCisgICAgYnJlYWsKKyAgZWxpZiB0ZXN0IC1mICRhY19kaXIvc2h0b29sOyB0aGVuCisgICAgYWNfYXV4X2Rpcj0kYWNfZGlyCisgICAgYWNfaW5zdGFsbF9zaD0iJGFjX2F1eF9kaXIvc2h0b29sIGluc3RhbGwgLWMiCisgICAgYnJlYWsKKyAgZmkKK2RvbmUKK2lmIHRlc3QgLXogIiRhY19hdXhfZGlyIjsgdGhlbgorICB7IHsgZWNobyAiJGFzX21lOjEwMTk6IGVycm9yOiBjYW5ub3QgZmluZCBpbnN0YWxsLXNoIG9yIGluc3RhbGwuc2ggaW4gJHNyY2RpciAkc3JjZGlyLy4uICRzcmNkaXIvLi4vLi4iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgaW5zdGFsbC1zaCBvciBpbnN0YWxsLnNoIGluICRzcmNkaXIgJHNyY2Rpci8uLiAkc3JjZGlyLy4uLy4uIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitmaQorYWNfY29uZmlnX2d1ZXNzPSIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLmd1ZXNzIgorYWNfY29uZmlnX3N1Yj0iJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIiCithY19jb25maWd1cmU9IiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWd1cmUiICMgVGhpcyBzaG91bGQgYmUgQ3lnbnVzIGNvbmZpZ3VyZS4KKworIyBNYWtlIHN1cmUgd2UgY2FuIHJ1biBjb25maWcuc3ViLgorJGFjX2NvbmZpZ19zdWIgc3VuNCA+L2Rldi9udWxsIDI+JjEgfHwKKyAgeyB7IGVjaG8gIiRhc19tZToxMDI5OiBlcnJvcjogY2Fubm90IHJ1biAkYWNfY29uZmlnX3N1YiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgcnVuICRhY19jb25maWdfc3ViIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisKK2VjaG8gIiRhc19tZToxMDMzOiBjaGVja2luZyBidWlsZCBzeXN0ZW0gdHlwZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGJ1aWxkIHN5c3RlbSB0eXBlLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9idWlsZCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBhY19jdl9idWlsZF9hbGlhcz0kYnVpbGRfYWxpYXMKK3Rlc3QgLXogIiRhY19jdl9idWlsZF9hbGlhcyIgJiYKKyAgYWNfY3ZfYnVpbGRfYWxpYXM9YCRhY19jb25maWdfZ3Vlc3NgCit0ZXN0IC16ICIkYWNfY3ZfYnVpbGRfYWxpYXMiICYmCisgIHsgeyBlY2hvICIkYXNfbWU6MTA0MjogZXJyb3I6IGNhbm5vdCBndWVzcyBidWlsZCB0eXBlOyB5b3UgbXVzdCBzcGVjaWZ5IG9uZSIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZ3Vlc3MgYnVpbGQgdHlwZTsgeW91IG11c3Qgc3BlY2lmeSBvbmUiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK2FjX2N2X2J1aWxkPWAkYWNfY29uZmlnX3N1YiAkYWNfY3ZfYnVpbGRfYWxpYXNgIHx8CisgIHsgeyBlY2hvICIkYXNfbWU6MTA0NjogZXJyb3I6ICRhY19jb25maWdfc3ViICRhY19jdl9idWlsZF9hbGlhcyBmYWlsZWQuIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6ICRhY19jb25maWdfc3ViICRhY19jdl9idWlsZF9hbGlhcyBmYWlsZWQuIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisKK2ZpCitlY2hvICIkYXNfbWU6MTA1MTogcmVzdWx0OiAkYWNfY3ZfYnVpbGQiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2J1aWxkIiA+JjYKK2J1aWxkPSRhY19jdl9idWlsZAorYnVpbGRfY3B1PWBlY2hvICRhY19jdl9idWlsZCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wxLydgCitidWlsZF92ZW5kb3I9YGVjaG8gJGFjX2N2X2J1aWxkIHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDIvJ2AKK2J1aWxkX29zPWBlY2hvICRhY19jdl9idWlsZCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wzLydgCisKK2VjaG8gIiRhc19tZToxMDU4OiBjaGVja2luZyBob3N0IHN5c3RlbSB0eXBlIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaG9zdCBzeXN0ZW0gdHlwZS4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfaG9zdCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBhY19jdl9ob3N0X2FsaWFzPSRob3N0X2FsaWFzCit0ZXN0IC16ICIkYWNfY3ZfaG9zdF9hbGlhcyIgJiYKKyAgYWNfY3ZfaG9zdF9hbGlhcz0kYWNfY3ZfYnVpbGRfYWxpYXMKK2FjX2N2X2hvc3Q9YCRhY19jb25maWdfc3ViICRhY19jdl9ob3N0X2FsaWFzYCB8fAorICB7IHsgZWNobyAiJGFzX21lOjEwNjc6IGVycm9yOiAkYWNfY29uZmlnX3N1YiAkYWNfY3ZfaG9zdF9hbGlhcyBmYWlsZWQiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogJGFjX2NvbmZpZ19zdWIgJGFjX2N2X2hvc3RfYWxpYXMgZmFpbGVkIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisKK2ZpCitlY2hvICIkYXNfbWU6MTA3MjogcmVzdWx0OiAkYWNfY3ZfaG9zdCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfaG9zdCIgPiY2Citob3N0PSRhY19jdl9ob3N0Citob3N0X2NwdT1gZWNobyAkYWNfY3ZfaG9zdCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wxLydgCitob3N0X3ZlbmRvcj1gZWNobyAkYWNfY3ZfaG9zdCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wyLydgCitob3N0X29zPWBlY2hvICRhY19jdl9ob3N0IHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDMvJ2AKKworaWYgdGVzdCAtZiAkc3JjZGlyL2NvbmZpZy5ndWVzcyB8fCB0ZXN0IC1mICRhY19hdXhfZGlyL2NvbmZpZy5ndWVzcyA7IHRoZW4KKwllY2hvICIkYXNfbWU6MTA4MDogY2hlY2tpbmcgdGFyZ2V0IHN5c3RlbSB0eXBlIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgdGFyZ2V0IHN5c3RlbSB0eXBlLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl90YXJnZXQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgYWNfY3ZfdGFyZ2V0X2FsaWFzPSR0YXJnZXRfYWxpYXMKK3Rlc3QgIngkYWNfY3ZfdGFyZ2V0X2FsaWFzIiA9ICJ4IiAmJgorICBhY19jdl90YXJnZXRfYWxpYXM9JGFjX2N2X2hvc3RfYWxpYXMKK2FjX2N2X3RhcmdldD1gJGFjX2NvbmZpZ19zdWIgJGFjX2N2X3RhcmdldF9hbGlhc2AgfHwKKyAgeyB7IGVjaG8gIiRhc19tZToxMDg5OiBlcnJvcjogJGFjX2NvbmZpZ19zdWIgJGFjX2N2X3RhcmdldF9hbGlhcyBmYWlsZWQiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogJGFjX2NvbmZpZ19zdWIgJGFjX2N2X3RhcmdldF9hbGlhcyBmYWlsZWQiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKworZmkKK2VjaG8gIiRhc19tZToxMDk0OiByZXN1bHQ6ICRhY19jdl90YXJnZXQiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3RhcmdldCIgPiY2Cit0YXJnZXQ9JGFjX2N2X3RhcmdldAordGFyZ2V0X2NwdT1gZWNobyAkYWNfY3ZfdGFyZ2V0IHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDEvJ2AKK3RhcmdldF92ZW5kb3I9YGVjaG8gJGFjX2N2X3RhcmdldCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wyLydgCit0YXJnZXRfb3M9YGVjaG8gJGFjX2N2X3RhcmdldCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wzLydgCisKKyMgVGhlIGFsaWFzZXMgc2F2ZSB0aGUgbmFtZXMgdGhlIHVzZXIgc3VwcGxpZWQsIHdoaWxlICRob3N0IGV0Yy4KKyMgd2lsbCBnZXQgY2Fub25pY2FsaXplZC4KK3Rlc3QgLW4gIiR0YXJnZXRfYWxpYXMiICYmCisgIHRlc3QgIiRwcm9ncmFtX3ByZWZpeCRwcm9ncmFtX3N1ZmZpeCRwcm9ncmFtX3RyYW5zZm9ybV9uYW1lIiA9IFwKKyAgICBOT05FTk9ORXMseCx4LCAmJgorICBwcm9ncmFtX3ByZWZpeD0ke3RhcmdldF9hbGlhc30tCisJc3lzdGVtX25hbWU9IiRob3N0X29zIgorZWxzZQorCXN5c3RlbV9uYW1lPSJgKHVuYW1lIC1zIC1yKSAyPi9kZXYvbnVsbGAiCisJaWYgdGVzdCAteiAiJHN5c3RlbV9uYW1lIiA7IHRoZW4KKwkJc3lzdGVtX25hbWU9ImAoaG9zdG5hbWUpIDI+L2Rldi9udWxsYCIKKwlmaQorZmkKK3Rlc3QgLW4gIiRzeXN0ZW1fbmFtZSIgJiYKK2NhdCA+PmNvbmZkZWZzLmggPDxFT0YKKyNkZWZpbmUgU1lTVEVNX05BTUUgIiRzeXN0ZW1fbmFtZSIKK0VPRgorCitpZiB0ZXN0ICIke2NmX2N2X3N5c3RlbV9uYW1lK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNmX2N2X3N5c3RlbV9uYW1lPSIkc3lzdGVtX25hbWUiCitmaQorCit0ZXN0IC16ICIkc3lzdGVtX25hbWUiICYmIHN5c3RlbV9uYW1lPSIkY2ZfY3Zfc3lzdGVtX25hbWUiCit0ZXN0IC1uICIkY2ZfY3Zfc3lzdGVtX25hbWUiICYmIGVjaG8gIiRhc19tZToxMTI2OiByZXN1bHQ6IENvbmZpZ3VyaW5nIGZvciAkY2ZfY3Zfc3lzdGVtX25hbWUiID4mNQorZWNobyAiJHtFQ0hPX1R9Q29uZmlndXJpbmcgZm9yICRjZl9jdl9zeXN0ZW1fbmFtZSIgPiY2CisKK2lmIHRlc3QgIi4kc3lzdGVtX25hbWUiICE9ICIuJGNmX2N2X3N5c3RlbV9uYW1lIiA7IHRoZW4KKwllY2hvICIkYXNfbWU6MTEzMDogcmVzdWx0OiBDYWNoZWQgc3lzdGVtIG5hbWUgKCRzeXN0ZW1fbmFtZSkgZG9lcyBub3QgYWdyZWUgd2l0aCBhY3R1YWwgKCRjZl9jdl9zeXN0ZW1fbmFtZSkiID4mNQorZWNobyAiJHtFQ0hPX1R9Q2FjaGVkIHN5c3RlbSBuYW1lICgkc3lzdGVtX25hbWUpIGRvZXMgbm90IGFncmVlIHdpdGggYWN0dWFsICgkY2ZfY3Zfc3lzdGVtX25hbWUpIiA+JjYKKwl7IHsgZWNobyAiJGFzX21lOjExMzI6IGVycm9yOiBcIlBsZWFzZSByZW1vdmUgY29uZmlnLmNhY2hlIGFuZCB0cnkgYWdhaW4uXCIiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogXCJQbGVhc2UgcmVtb3ZlIGNvbmZpZy5jYWNoZSBhbmQgdHJ5IGFnYWluLlwiIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitmaQorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXN5c3RlbS10eXBlIG9yIC0td2l0aG91dC1zeXN0ZW0tdHlwZSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfc3lzdGVtX3R5cGUrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfc3lzdGVtX3R5cGUiCisgIHsgZWNobyAiJGFzX21lOjExNDA6IFdBUk5JTkc6IG92ZXJyaWRpbmcgc3lzdGVtIHR5cGUgdG8gJHdpdGh2YWwiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiBvdmVycmlkaW5nIHN5c3RlbSB0eXBlIHRvICR3aXRodmFsIiA+JjI7fQorCWNmX2N2X3N5c3RlbV9uYW1lPSR3aXRodmFsCisJaG9zdF9vcz0kd2l0aHZhbAorCitmaTsKKworIyMjCVNhdmUgdGhlIGdpdmVuICRDRkxBR1MgdG8gYWxsb3cgdXNlci1vdmVycmlkZS4KK2NmX3VzZXJfQ0ZMQUdTPSIkQ0ZMQUdTIgorCisjIyMJRGVmYXVsdCBpbnN0YWxsLWxvY2F0aW9uCisKK2VjaG8gIiRhc19tZToxMTUyOiBjaGVja2luZyBmb3IgcHJlZml4IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHByZWZpeC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIngkcHJlZml4IiA9ICJ4Tk9ORSIgOyB0aGVuCisJY2FzZSAiJGNmX2N2X3N5c3RlbV9uYW1lIiBpbgorCQkjIG5vbi12ZW5kb3Igc3lzdGVtcyBkb24ndCBoYXZlIGEgY29uZmxpY3QKKwkob3BlbmJzZCp8ZnJlZWJzZCp8bWlyYnNkKnxsaW51eCp8Y3lnd2luKnxtc3lzKnxrKmJzZCotZ251fG1pbmd3KikKKwkJcHJlZml4PS91c3IKKwkJOzsKKwkoKikJcHJlZml4PSRhY19kZWZhdWx0X3ByZWZpeAorCQk7OworCWVzYWMKK2ZpCitlY2hvICIkYXNfbWU6MTE2NDogcmVzdWx0OiAkcHJlZml4IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRwcmVmaXgiID4mNgorCitpZiB0ZXN0ICJ4JHByZWZpeCIgPSAieE5PTkUiIDsgdGhlbgorZWNobyAiJGFzX21lOjExNjg6IGNoZWNraW5nIGZvciBkZWZhdWx0IGluY2x1ZGUtZGlyZWN0b3J5IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGRlZmF1bHQgaW5jbHVkZS1kaXJlY3RvcnkuLi4gJEVDSE9fQyIgPiY2Cit0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAxPiY2Citmb3IgY2Zfc3ltYm9sIGluIFwKKwkkaW5jbHVkZWRpciBcCisJJGluY2x1ZGVkaXIvbmN1cnNlcyBcCisJJHByZWZpeC9pbmNsdWRlIFwKKwkkcHJlZml4L2luY2x1ZGUvbmN1cnNlcyBcCisJL3Vzci9sb2NhbC9pbmNsdWRlIFwKKwkvdXNyL2xvY2FsL2luY2x1ZGUvbmN1cnNlcyBcCisJL3Vzci9pbmNsdWRlIFwKKwkvdXNyL2luY2x1ZGUvbmN1cnNlcworZG8KKwljZl9kaXI9YGV2YWwgZWNobyAkY2Zfc3ltYm9sYAorCWlmIHRlc3QgLWYgJGNmX2Rpci9jdXJzZXMuaCA7IHRoZW4KKwlpZiAoIGZncmVwIE5DVVJTRVNfVkVSU0lPTiAkY2ZfZGlyL2N1cnNlcy5oIDI+JjEgPi9kZXYvbnVsbCApIDsgdGhlbgorCQlpbmNsdWRlZGlyPSIkY2Zfc3ltYm9sIgorCQl0ZXN0IC1uICIkdmVyYm9zZSIgICYmIGVjaG8gJGFjX24gIglmb3VuZCAiIDE+JjYKKwkJYnJlYWsKKwlmaQorCWZpCisJdGVzdCAtbiAiJHZlcmJvc2UiICAmJiBlY2hvICIJdGVzdGVkICRjZl9kaXIiIDE+JjYKK2RvbmUKK2VjaG8gIiRhc19tZToxMTkxOiByZXN1bHQ6ICRpbmNsdWRlZGlyIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRpbmNsdWRlZGlyIiA+JjYKK2ZpCisKKyMjIwlDaGVja3MgZm9yIHByb2dyYW1zLgorCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CithY19tYWluX3JldHVybj1yZXR1cm4KK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgZm9yIGFjX3Byb2cgaW4gZ25hdGdjYyBnY2MgY2MKKyAgZG8KKyAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY190b29sX3ByZWZpeCRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZzsgYWNfd29yZD0kMgorZWNobyAiJGFzX21lOjEyMDg6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DQytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCisgIGFjX3NhdmVfSUZTPSRJRlM7IElGUz0kYWNfcGF0aF9zZXBhcmF0b3IKK2FjX2R1bW15PSIkUEFUSCIKK2ZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbworICBJRlM9JGFjX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICRhc19leGVjdXRhYmxlX3AgIiRhY19kaXIvJGFjX3dvcmQiIHx8IGNvbnRpbnVlCithY19jdl9wcm9nX0NDPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKK2VjaG8gIiRhc19tZToxMjIzOiBmb3VuZCAkYWNfZGlyLyRhY193b3JkIiA+JjUKK2JyZWFrCitkb25lCisKK2ZpCitmaQorQ0M9JGFjX2N2X3Byb2dfQ0MKK2lmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgZWNobyAiJGFzX21lOjEyMzE6IHJlc3VsdDogJENDIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRDQyIgPiY2CitlbHNlCisgIGVjaG8gIiRhc19tZToxMjM0OiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjYKK2ZpCisKKyAgICB0ZXN0IC1uICIkQ0MiICYmIGJyZWFrCisgIGRvbmUKK2ZpCitpZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCisgIGFjX2N0X0NDPSRDQworICBmb3IgYWNfcHJvZyBpbiBnbmF0Z2NjIGdjYyBjYworZG8KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKK2VjaG8gIiRhc19tZToxMjQ3OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfY3RfQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorICBhY19zYXZlX0lGUz0kSUZTOyBJRlM9JGFjX3BhdGhfc2VwYXJhdG9yCithY19kdW1teT0iJFBBVEgiCitmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKyAgSUZTPSRhY19zYXZlX0lGUworICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAkYXNfZXhlY3V0YWJsZV9wICIkYWNfZGlyLyRhY193b3JkIiB8fCBjb250aW51ZQorYWNfY3ZfcHJvZ19hY19jdF9DQz0iJGFjX3Byb2ciCitlY2hvICIkYXNfbWU6MTI2MjogZm91bmQgJGFjX2Rpci8kYWNfd29yZCIgPiY1CiticmVhaworZG9uZQorCitmaQorZmkKK2FjX2N0X0NDPSRhY19jdl9wcm9nX2FjX2N0X0NDCitpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCisgIGVjaG8gIiRhc19tZToxMjcwOiByZXN1bHQ6ICRhY19jdF9DQyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3RfQ0MiID4mNgorZWxzZQorICBlY2hvICIkYXNfbWU6MTI3MzogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2CitmaQorCisgIHRlc3QgLW4gIiRhY19jdF9DQyIgJiYgYnJlYWsKK2RvbmUKKworICBDQz0kYWNfY3RfQ0MKK2ZpCisKK3Rlc3QgLXogIiRDQyIgJiYgeyB7IGVjaG8gIiRhc19tZToxMjgzOiBlcnJvcjogbm8gYWNjZXB0YWJsZSBjYyBmb3VuZCBpbiBcJFBBVEgiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogbm8gYWNjZXB0YWJsZSBjYyBmb3VuZCBpbiBcJFBBVEgiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKworIyBQcm92aWRlIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbXBpbGVyLgorZWNobyAiJGFzX21lOjEyODg6IiBcCisgICAgICJjaGVja2luZyBmb3IgQyBjb21waWxlciB2ZXJzaW9uIiA+JjUKK2FjX2NvbXBpbGVyPWBzZXQgWCAkYWNfY29tcGlsZTsgZWNobyAkMmAKK3sgKGV2YWwgZWNobyAiJGFzX21lOjEyOTE6IFwiJGFjX2NvbXBpbGVyIC0tdmVyc2lvbiA8L2Rldi9udWxsID4mNVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlciAtLXZlcnNpb24gPC9kZXYvbnVsbCA+JjUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMjk0OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KK3sgKGV2YWwgZWNobyAiJGFzX21lOjEyOTY6IFwiJGFjX2NvbXBpbGVyIC12IDwvZGV2L251bGwgPiY1XCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGVyIC12IDwvZGV2L251bGwgPiY1KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTI5OTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9Cit7IChldmFsIGVjaG8gIiRhc19tZToxMzAxOiBcIiRhY19jb21waWxlciAtViA8L2Rldi9udWxsID4mNVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlciAtViA8L2Rldi9udWxsID4mNSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEzMDQ6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfQorCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDEzMDggImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCithY19jbGVhbl9maWxlc19zYXZlPSRhY19jbGVhbl9maWxlcworYWNfY2xlYW5fZmlsZXM9IiRhY19jbGVhbl9maWxlcyBhLm91dCBhLmV4ZSIKKyMgVHJ5IHRvIGNyZWF0ZSBhbiBleGVjdXRhYmxlIHdpdGhvdXQgLW8gZmlyc3QsIGRpc3JlZ2FyZCBhLm91dC4KKyMgSXQgd2lsbCBoZWxwIHVzIGRpYWdub3NlIGJyb2tlbiBjb21waWxlcnMsIGFuZCBmaW5kaW5nIG91dCBhbiBpbnR1aXRpb24KKyMgb2YgZXhlZXh0LgorZWNobyAiJGFzX21lOjEzMjQ6IGNoZWNraW5nIGZvciBDIGNvbXBpbGVyIGRlZmF1bHQgb3V0cHV0IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgZGVmYXVsdCBvdXRwdXQuLi4gJEVDSE9fQyIgPiY2CithY19saW5rX2RlZmF1bHQ9YGVjaG8gIiRhY19saW5rIiB8IHNlZCAncy8gLW8gKmNvbmZ0ZXN0W14gXSovLydgCitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxMzI3OiBcIiRhY19saW5rX2RlZmF1bHRcIiIpID4mNQorICAoZXZhbCAkYWNfbGlua19kZWZhdWx0KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTMzMDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB0aGVuCisgICMgRmluZCB0aGUgb3V0cHV0LCBzdGFydGluZyBmcm9tIHRoZSBtb3N0IGxpa2VseS4gIFRoaXMgc2NoZW1lIGlzCisjIG5vdCByb2J1c3QgdG8ganVuayBpbiBgLicsIGhlbmNlIGdvIHRvIHdpbGRjYXJkcyAoYS4qKSBvbmx5IGFzIGEgbGFzdAorIyByZXNvcnQuCitmb3IgYWNfZmlsZSBpbiBgbHMgYS5leGUgY29uZnRlc3QuZXhlIDI+L2Rldi9udWxsOworICAgICAgICAgICAgICAgIGxzIGEub3V0IGNvbmZ0ZXN0IDI+L2Rldi9udWxsOworICAgICAgICAgICAgICAgIGxzIGEuKiBjb25mdGVzdC4qIDI+L2Rldi9udWxsYDsgZG8KKyAgY2FzZSAkYWNfZmlsZSBpbgorICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICouZGJnIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm1hcCB8ICouaW5mIHwgKi5vIHwgKi5vYmogKSA7OworICAgIGEub3V0ICkgIyBXZSBmb3VuZCB0aGUgZGVmYXVsdCBleGVjdXRhYmxlLCBidXQgZXhlZXh0PScnIGlzIG1vc3QKKyAgICAgICAgICAgICMgY2VydGFpbmx5IHJpZ2h0LgorICAgICAgICAgICAgYnJlYWs7OworICAgICouKiApIGFjX2N2X2V4ZWV4dD1gZXhwciAiJGFjX2ZpbGUiIDogJ1teLl0qXChcLi4qXCknYAorICAgICAgICAgICMgRklYTUU6IEkgYmVsaWV2ZSB3ZSBleHBvcnQgYWNfY3ZfZXhlZXh0IGZvciBMaWJ0b29sIC0tYWtpbS4KKyAgICAgICAgICBleHBvcnQgYWNfY3ZfZXhlZXh0CisgICAgICAgICAgYnJlYWs7OworICAgICogKSBicmVhazs7CisgIGVzYWMKK2RvbmUKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQoreyB7IGVjaG8gIiRhc19tZToxMzUzOiBlcnJvcjogQyBjb21waWxlciBjYW5ub3QgY3JlYXRlIGV4ZWN1dGFibGVzIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IEMgY29tcGlsZXIgY2Fubm90IGNyZWF0ZSBleGVjdXRhYmxlcyIgPiYyO30KKyAgIHsgKGV4aXQgNzcpOyBleGl0IDc3OyB9OyB9CitmaQorCithY19leGVleHQ9JGFjX2N2X2V4ZWV4dAorZWNobyAiJGFzX21lOjEzNTk6IHJlc3VsdDogJGFjX2ZpbGUiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2ZpbGUiID4mNgorCisjIENoZWNrIHRoZSBjb21waWxlciBwcm9kdWNlcyBleGVjdXRhYmxlcyB3ZSBjYW4gcnVuLiAgSWYgbm90LCBlaXRoZXIKKyMgdGhlIGNvbXBpbGVyIGlzIGJyb2tlbiwgb3Igd2UgY3Jvc3MgY29tcGlsZS4KK2VjaG8gIiRhc19tZToxMzY0OiBjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIHdvcmtzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciB3b3Jrcy4uLiAkRUNIT19DIiA+JjYKKyMgRklYTUU6IFRoZXNlIGNyb3NzIGNvbXBpbGVyIGhhY2tzIHNob3VsZCBiZSByZW1vdmVkIGZvciBBdXRvY29uZiAzLjAKKyMgSWYgbm90IGNyb3NzIGNvbXBpbGluZywgY2hlY2sgdGhhdCB3ZSBjYW4gcnVuIGEgc2ltcGxlIHByb2dyYW0uCitpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiAhPSB5ZXM7IHRoZW4KKyAgaWYgeyBhY190cnk9Jy4vJGFjX2ZpbGUnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjEzNzA6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMzczOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgICBjcm9zc19jb21waWxpbmc9bm8KKyAgZWxzZQorICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0gbWF5YmU7IHRoZW4KKwljcm9zc19jb21waWxpbmc9eWVzCisgICAgZWxzZQorCXsgeyBlY2hvICIkYXNfbWU6MTM4MDogZXJyb3I6IGNhbm5vdCBydW4gQyBjb21waWxlZCBwcm9ncmFtcy4KK0lmIHlvdSBtZWFudCB0byBjcm9zcyBjb21waWxlLCB1c2UgXGAtLWhvc3QnLiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgcnVuIEMgY29tcGlsZWQgcHJvZ3JhbXMuCitJZiB5b3UgbWVhbnQgdG8gY3Jvc3MgY29tcGlsZSwgdXNlIFxgLS1ob3N0Jy4iID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgICBmaQorICBmaQorZmkKK2VjaG8gIiRhc19tZToxMzg4OiByZXN1bHQ6IHllcyIgPiY1CitlY2hvICIke0VDSE9fVH15ZXMiID4mNgorCitybSAtZiBhLm91dCBhLmV4ZSBjb25mdGVzdCRhY19jdl9leGVleHQKK2FjX2NsZWFuX2ZpbGVzPSRhY19jbGVhbl9maWxlc19zYXZlCisjIENoZWNrIHRoZSBjb21waWxlciBwcm9kdWNlcyBleGVjdXRhYmxlcyB3ZSBjYW4gcnVuLiAgSWYgbm90LCBlaXRoZXIKKyMgdGhlIGNvbXBpbGVyIGlzIGJyb2tlbiwgb3Igd2UgY3Jvc3MgY29tcGlsZS4KK2VjaG8gIiRhc19tZToxMzk1OiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSBjcm9zcyBjb21waWxpbmciID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSBjcm9zcyBjb21waWxpbmcuLi4gJEVDSE9fQyIgPiY2CitlY2hvICIkYXNfbWU6MTM5NzogcmVzdWx0OiAkY3Jvc3NfY29tcGlsaW5nIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjcm9zc19jb21waWxpbmciID4mNgorCitlY2hvICIkYXNfbWU6MTQwMDogY2hlY2tpbmcgZm9yIGV4ZWN1dGFibGUgc3VmZml4IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGV4ZWN1dGFibGUgc3VmZml4Li4uICRFQ0hPX0MiID4mNgoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTQwMjogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTQwNTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB0aGVuCisgICMgSWYgYm90aCBgY29uZnRlc3QuZXhlJyBhbmQgYGNvbmZ0ZXN0JyBhcmUgYHByZXNlbnQnICh3ZWxsLCBvYnNlcnZhYmxlKQorIyBjYXRjaCBgY29uZnRlc3QuZXhlJy4gIEZvciBpbnN0YW5jZSB3aXRoIEN5Z3dpbiwgYGxzIGNvbmZ0ZXN0JyB3aWxsCisjIHdvcmsgcHJvcGVybHkgKGkuZS4sIHJlZmVyIHRvIGBjb25mdGVzdC5leGUnKSwgd2hpbGUgaXQgd29uJ3Qgd2l0aAorIyBgcm0nLgorZm9yIGFjX2ZpbGUgaW4gYChscyBjb25mdGVzdC5leGU7IGxzIGNvbmZ0ZXN0OyBscyBjb25mdGVzdC4qKSAyPi9kZXYvbnVsbGA7IGRvCisgIGNhc2UgJGFjX2ZpbGUgaW4KKyAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLmRiZyB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5tYXAgfCAqLmluZiB8ICoubyB8ICoub2JqICkgOzsKKyAgICAqLiogKSBhY19jdl9leGVleHQ9YGV4cHIgIiRhY19maWxlIiA6ICdbXi5dKlwoXC4uKlwpJ2AKKyAgICAgICAgICBleHBvcnQgYWNfY3ZfZXhlZXh0CisgICAgICAgICAgYnJlYWs7OworICAgICogKSBicmVhazs7CisgIGVzYWMKK2RvbmUKK2Vsc2UKKyAgeyB7IGVjaG8gIiRhc19tZToxNDIxOiBlcnJvcjogY2Fubm90IGNvbXB1dGUgRVhFRVhUOiBjYW5ub3QgY29tcGlsZSBhbmQgbGluayIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBFWEVFWFQ6IGNhbm5vdCBjb21waWxlIGFuZCBsaW5rIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitmaQorCitybSAtZiBjb25mdGVzdCRhY19jdl9leGVleHQKK2VjaG8gIiRhc19tZToxNDI3OiByZXN1bHQ6ICRhY19jdl9leGVleHQiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2V4ZWV4dCIgPiY2CisKK3JtIC1mIGNvbmZ0ZXN0LiRhY19leHQKK0VYRUVYVD0kYWNfY3ZfZXhlZXh0CithY19leGVleHQ9JEVYRUVYVAorZWNobyAiJGFzX21lOjE0MzM6IGNoZWNraW5nIGZvciBvYmplY3Qgc3VmZml4IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG9iamVjdCBzdWZmaXguLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X29iamV4dCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDE0MzkgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC5vIGNvbmZ0ZXN0Lm9iagoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTQ1MTogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTQ1NDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB0aGVuCisgIGZvciBhY19maWxlIGluIGAobHMgY29uZnRlc3QubyBjb25mdGVzdC5vYmo7IGxzIGNvbmZ0ZXN0LiopIDI+L2Rldi9udWxsYDsgZG8KKyAgY2FzZSAkYWNfZmlsZSBpbgorICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICouZGJnIHwgKi5wZGIgfCAqLnhTWU0gfCAqLm1hcCB8ICouaW5mICkgOzsKKyAgICAqKSBhY19jdl9vYmpleHQ9YGV4cHIgIiRhY19maWxlIiA6ICcuKlwuXCguKlwpJ2AKKyAgICAgICBicmVhazs7CisgIGVzYWMKK2RvbmUKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQoreyB7IGVjaG8gIiRhc19tZToxNDY2OiBlcnJvcjogY2Fubm90IGNvbXB1dGUgT0JKRVhUOiBjYW5ub3QgY29tcGlsZSIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBPQkpFWFQ6IGNhbm5vdCBjb21waWxlIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitmaQorCitybSAtZiBjb25mdGVzdC4kYWNfY3Zfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6MTQ3MzogcmVzdWx0OiAkYWNfY3Zfb2JqZXh0IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9vYmpleHQiID4mNgorT0JKRVhUPSRhY19jdl9vYmpleHQKK2FjX29iamV4dD0kT0JKRVhUCitlY2hvICIkYXNfbWU6MTQ3NzogY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDIGNvbXBpbGVyIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDIGNvbXBpbGVyLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9jX2NvbXBpbGVyX2dudStzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDE0ODMgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCitpbnQKK21haW4gKCkKK3sKKyNpZm5kZWYgX19HTlVDX18KKyAgICAgICBjaG9rZSBtZQorI2VuZGlmCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTQ5ODogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTUwMTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToxNTA0OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTUwNzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2NvbXBpbGVyX2dudT15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorYWNfY29tcGlsZXJfZ251PW5vCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CithY19jdl9jX2NvbXBpbGVyX2dudT0kYWNfY29tcGlsZXJfZ251CisKK2ZpCitlY2hvICIkYXNfbWU6MTUxOTogcmVzdWx0OiAkYWNfY3ZfY19jb21waWxlcl9nbnUiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2NfY29tcGlsZXJfZ251IiA+JjYKK0dDQz1gdGVzdCAkYWNfY29tcGlsZXJfZ251ID0geWVzICYmIGVjaG8geWVzYAorYWNfdGVzdF9DRkxBR1M9JHtDRkxBR1Mrc2V0fQorYWNfc2F2ZV9DRkxBR1M9JENGTEFHUworQ0ZMQUdTPSItZyIKK2VjaG8gIiRhc19tZToxNTI1OiBjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzIC1nIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciAkQ0MgYWNjZXB0cyAtZy4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19jY19nK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTUzMSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjE1NDM6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjE1NDY6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTU0OTogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjE1NTI6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9wcm9nX2NjX2c9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2FjX2N2X3Byb2dfY2NfZz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2VjaG8gIiRhc19tZToxNTYyOiByZXN1bHQ6ICRhY19jdl9wcm9nX2NjX2ciID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3Byb2dfY2NfZyIgPiY2CitpZiB0ZXN0ICIkYWNfdGVzdF9DRkxBR1MiID0gc2V0OyB0aGVuCisgIENGTEFHUz0kYWNfc2F2ZV9DRkxBR1MKK2VsaWYgdGVzdCAkYWNfY3ZfcHJvZ19jY19nID0geWVzOyB0aGVuCisgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgQ0ZMQUdTPSItZyAtTzIiCisgIGVsc2UKKyAgICBDRkxBR1M9Ii1nIgorICBmaQorZWxzZQorICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgIENGTEFHUz0iLU8yIgorICBlbHNlCisgICAgQ0ZMQUdTPQorICBmaQorZmkKKyMgU29tZSBwZW9wbGUgdXNlIGEgQysrIGNvbXBpbGVyIHRvIGNvbXBpbGUgQy4gIFNpbmNlIHdlIHVzZSBgZXhpdCcsCisjIGluIEMrKyB3ZSBuZWVkIHRvIGRlY2xhcmUgaXQuICBJbiBjYXNlIHNvbWVvbmUgdXNlcyB0aGUgc2FtZSBjb21waWxlcgorIyBmb3IgYm90aCBjb21waWxpbmcgQyBhbmQgQysrIHdlIG5lZWQgdG8gaGF2ZSB0aGUgQysrIGNvbXBpbGVyIGRlY2lkZQorIyB0aGUgZGVjbGFyYXRpb24gb2YgZXhpdCwgc2luY2UgaXQncyB0aGUgbW9zdCBkZW1hbmRpbmcgZW52aXJvbm1lbnQuCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNpZm5kZWYgX19jcGx1c3BsdXMKKyAgY2hva2UgbWUKKyNlbmRpZgorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxNTg5OiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxNTkyOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjE1OTU6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxNTk4OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgZm9yIGFjX2RlY2xhcmF0aW9uIGluIFwKKyAgICcnXAorICAgJyNpbmNsdWRlIDxzdGRsaWIuaD4nIFwKKyAgICdleHRlcm4gIkMiIHZvaWQgc3RkOjpleGl0IChpbnQpIHRocm93ICgpOyB1c2luZyBzdGQ6OmV4aXQ7JyBcCisgICAnZXh0ZXJuICJDIiB2b2lkIHN0ZDo6ZXhpdCAoaW50KTsgdXNpbmcgc3RkOjpleGl0OycgXAorICAgJ2V4dGVybiAiQyIgdm9pZCBleGl0IChpbnQpIHRocm93ICgpOycgXAorICAgJ2V4dGVybiAiQyIgdm9pZCBleGl0IChpbnQpOycgXAorICAgJ3ZvaWQgZXhpdCAoaW50KTsnCitkbworICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDE2MTAgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorJGFjX2RlY2xhcmF0aW9uCitpbnQKK21haW4gKCkKK3sKK2V4aXQgKDQyKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTYyMzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTYyNjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToxNjI5OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTYzMjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIDoKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorY29udGludWUKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxNjQyICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyRhY19kZWNsYXJhdGlvbgoraW50CittYWluICgpCit7CitleGl0ICg0Mik7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjE2NTQ6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjE2NTc6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTY2MDogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjE2NjM6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBicmVhaworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Citkb25lCitybSAtcmYgY29uZnRlc3QqCitpZiB0ZXN0IC1uICIkYWNfZGVjbGFyYXRpb24iOyB0aGVuCisgIGVjaG8gJyNpZmRlZiBfX2NwbHVzcGx1cycgPj5jb25mZGVmcy5oCisgIGVjaG8gJGFjX2RlY2xhcmF0aW9uICAgICAgPj5jb25mZGVmcy5oCisgIGVjaG8gJyNlbmRpZicgICAgICAgICAgICAgPj5jb25mZGVmcy5oCitmaQorCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKK2FjX21haW5fcmV0dXJuPXJldHVybgorCitHQ0NfVkVSU0lPTj1ub25lCitpZiB0ZXN0ICIkR0NDIiA9IHllcyA7IHRoZW4KKwllY2hvICIkYXNfbWU6MTY5MzogY2hlY2tpbmcgdmVyc2lvbiBvZiAkQ0MiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB2ZXJzaW9uIG9mICRDQy4uLiAkRUNIT19DIiA+JjYKKwlHQ0NfVkVSU0lPTj0iYCR7Q0N9IC0tdmVyc2lvbiAyPi9kZXYvbnVsbCB8IHNlZCAtZSAnMiwkZCcgLWUgJ3MvXi4qKEdDQ1teKV0qKSAvLycgLWUgJ3MvXi4qKERlYmlhblteKV0qKSAvLycgLWUgJ3MvXlteMC05Ll0qLy8nIC1lICdzL1teMC05Ll0uKi8vJ2AiCisJdGVzdCAteiAiJEdDQ19WRVJTSU9OIiAmJiBHQ0NfVkVSU0lPTj11bmtub3duCisJZWNobyAiJGFzX21lOjE2OTc6IHJlc3VsdDogJEdDQ19WRVJTSU9OIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRHQ0NfVkVSU0lPTiIgPiY2CitmaQorCitlY2hvICIkYXNfbWU6MTcwMTogY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IEFOU0kgQyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBBTlNJIEMuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfY2Nfc3RkYytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBhY19jdl9wcm9nX2NjX3N0ZGM9bm8KK2FjX3NhdmVfQ0M9JENDCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDE3MDkgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKy8qIE1vc3Qgb2YgdGhlIGZvbGxvd2luZyB0ZXN0cyBhcmUgc3RvbGVuIGZyb20gUkNTIDUuNydzIHNyYy9jb25mLnNoLiAgKi8KK3N0cnVjdCBidWYgeyBpbnQgeDsgfTsKK0ZJTEUgKiAoKnJjc29wZW4pIChzdHJ1Y3QgYnVmICosIHN0cnVjdCBzdGF0ICosIGludCk7CitzdGF0aWMgY2hhciAqZSAocCwgaSkKKyAgICAgY2hhciAqKnA7CisgICAgIGludCBpOworeworICByZXR1cm4gcFtpXTsKK30KK3N0YXRpYyBjaGFyICpmIChjaGFyICogKCpnKSAoY2hhciAqKiwgaW50KSwgY2hhciAqKnAsIC4uLikKK3sKKyAgY2hhciAqczsKKyAgdmFfbGlzdCB2OworICB2YV9zdGFydCAodixwKTsKKyAgcyA9IGcgKHAsIHZhX2FyZyAodixpbnQpKTsKKyAgdmFfZW5kICh2KTsKKyAgcmV0dXJuIHM7Cit9CitpbnQgdGVzdCAoaW50IGksIGRvdWJsZSB4KTsKK3N0cnVjdCBzMSB7aW50ICgqZikgKGludCBhKTt9Oworc3RydWN0IHMyIHtpbnQgKCpmKSAoZG91YmxlIGEpO307CitpbnQgcGFpcm5hbWVzIChpbnQsIGNoYXIgKiosIEZJTEUgKigqKShzdHJ1Y3QgYnVmICosIHN0cnVjdCBzdGF0ICosIGludCksIGludCwgaW50KTsKK2ludCBhcmdjOworY2hhciAqKmFyZ3Y7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBmIChlLCBhcmd2LCAwKSAhPSBhcmd2WzBdICB8fCAgZiAoZSwgYXJndiwgMSkgIT0gYXJndlsxXTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorIyBEb24ndCB0cnkgZ2NjIC1hbnNpOyB0aGF0IHR1cm5zIG9mZiB1c2VmdWwgZXh0ZW5zaW9ucyBhbmQKKyMgYnJlYWtzIHNvbWUgc3lzdGVtcycgaGVhZGVyIGZpbGVzLgorIyBBSVgJCQktcWxhbmdsdmw9YW5zaQorIyBVbHRyaXggYW5kIE9TRi8xCS1zdGQxCisjIEhQLVVYIDEwLjIwIGFuZCBsYXRlcgktQWUKKyMgSFAtVVggb2xkZXIgdmVyc2lvbnMJLUFhIC1EX0hQVVhfU09VUkNFCisjIFNWUjQJCQktWGMgLURfX0VYVEVOU0lPTlNfXworZm9yIGFjX2FyZyBpbiAiIiAtcWxhbmdsdmw9YW5zaSAtc3RkMSAtQWUgIi1BYSAtRF9IUFVYX1NPVVJDRSIgIi1YYyAtRF9fRVhURU5TSU9OU19fIgorZG8KKyAgQ0M9IiRhY19zYXZlX0NDICRhY19hcmciCisgIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjE3NTg6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjE3NjE6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTc2NDogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjE3Njc6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9wcm9nX2NjX3N0ZGM9JGFjX2FyZworYnJlYWsKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2RvbmUKK3JtIC1mIGNvbmZ0ZXN0LiRhY19leHQgY29uZnRlc3QuJGFjX29iamV4dAorQ0M9JGFjX3NhdmVfQ0MKKworZmkKKworY2FzZSAieCRhY19jdl9wcm9nX2NjX3N0ZGMiIGluCisgIHh8eG5vKQorICAgIGVjaG8gIiRhc19tZToxNzg0OiByZXN1bHQ6IG5vbmUgbmVlZGVkIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vbmUgbmVlZGVkIiA+JjYgOzsKKyAgKikKKyAgICBlY2hvICIkYXNfbWU6MTc4NzogcmVzdWx0OiAkYWNfY3ZfcHJvZ19jY19zdGRjIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9wcm9nX2NjX3N0ZGMiID4mNgorICAgIENDPSIkQ0MgJGFjX2N2X3Byb2dfY2Nfc3RkYyIgOzsKK2VzYWMKKworIyBUaGlzIHNob3VsZCBoYXZlIGJlZW4gZGVmaW5lZCBieSBBQ19QUk9HX0NDCis6ICR7Q0M6PWNjfQorCitlY2hvICIkYXNfbWU6MTc5NTogY2hlY2tpbmcgXCRDQyB2YXJpYWJsZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIFwkQ0MgdmFyaWFibGUuLi4gJEVDSE9fQyIgPiY2CitjYXNlICIkQ0MiIGluCisoKltcIFwJXS1bSVVEXSopCisJZWNobyAiJGFzX21lOjE3OTk6IHJlc3VsdDogYnJva2VuIiA+JjUKK2VjaG8gIiR7RUNIT19UfWJyb2tlbiIgPiY2CisJeyBlY2hvICIkYXNfbWU6MTgwMTogV0FSTklORzogeW91ciBlbnZpcm9ubWVudCBtaXN1c2VzIHRoZSBDQyB2YXJpYWJsZSB0byBob2xkIENGTEFHUy9DUFBGTEFHUyBvcHRpb25zIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogeW91ciBlbnZpcm9ubWVudCBtaXN1c2VzIHRoZSBDQyB2YXJpYWJsZSB0byBob2xkIENGTEFHUy9DUFBGTEFHUyBvcHRpb25zIiA+JjI7fQorCSMgaHVtb3IgaGltLi4uCisJY2ZfZmxhZ3M9YGVjaG8gIiRDQyIgfCBzZWQgLWUgJ3MvXlteIAldKlsgCV0vLydgCisJQ0M9YGVjaG8gIiRDQyIgfCBzZWQgLWUgJ3MvWyAJXS4qLy8nYAorCitjZl9maXhfY3BwZmxhZ3M9bm8KK2NmX25ld19jZmxhZ3M9CitjZl9uZXdfY3BwZmxhZ3M9CitjZl9uZXdfZXh0cmFfY3BwZmxhZ3M9CisKK2ZvciBjZl9hZGRfY2ZsYWdzIGluICRjZl9mbGFncworZG8KK2Nhc2UgJGNmX2ZpeF9jcHBmbGFncyBpbgorKG5vKQorCWNhc2UgJGNmX2FkZF9jZmxhZ3MgaW4KKwkoLXVuZGVmfC1ub3N0ZGluYyp8LUkqfC1EKnwtVSp8LUV8LVB8LUMpCisJCWNhc2UgJGNmX2FkZF9jZmxhZ3MgaW4KKwkJKC1EKikKKwkJCWNmX3RzdF9jZmxhZ3M9YGVjaG8gJHtjZl9hZGRfY2ZsYWdzfSB8c2VkIC1lICdzL14tRFtePV0qPSdcJydcIlteIl0qLy8nYAorCisJCQl0ZXN0ICJ4JHtjZl9hZGRfY2ZsYWdzfSIgIT0gIngke2NmX3RzdF9jZmxhZ3N9IiBcCisJCQkJJiYgdGVzdCAteiAiJHtjZl90c3RfY2ZsYWdzfSIgXAorCQkJCSYmIGNmX2ZpeF9jcHBmbGFncz15ZXMKKworCQkJaWYgdGVzdCAkY2ZfZml4X2NwcGZsYWdzID0geWVzIDsgdGhlbgorCQkJCWNmX25ld19leHRyYV9jcHBmbGFncz0iJGNmX25ld19leHRyYV9jcHBmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJCQljb250aW51ZQorCQkJZWxpZiB0ZXN0ICIke2NmX3RzdF9jZmxhZ3N9IiA9ICJcIiciIDsgdGhlbgorCQkJCWNmX25ld19leHRyYV9jcHBmbGFncz0iJGNmX25ld19leHRyYV9jcHBmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJCQljb250aW51ZQorCQkJZmkKKwkJCTs7CisJCWVzYWMKKwkJY2FzZSAiJENQUEZMQUdTIiBpbgorCQkoKiRjZl9hZGRfY2ZsYWdzKQorCQkJOzsKKwkJKCopCisJCQljYXNlICRjZl9hZGRfY2ZsYWdzIGluCisJCQkoLUQqKQorCQkJCWNmX3RzdF9jcHBmbGFncz1gZWNobyAieCRjZl9hZGRfY2ZsYWdzIiB8IHNlZCAtZSAncy9eLi4uLy8nIC1lICdzLz0uKi8vJ2AKKworQ1BQRkxBR1M9YGVjaG8gIiRDUFBGTEFHUyIgfCBcCisJc2VkCS1lICdzLy1bVURdJyIkY2ZfdHN0X2NwcGZsYWdzIidcKD1bXiAJXSpcKVw/WyAJXS8gL2cnIFwKKwkJLWUgJ3MvLVtVRF0nIiRjZl90c3RfY3BwZmxhZ3MiJ1woPVteIAldKlwpXD8kLy9nJ2AKKworCQkJCTs7CisJCQllc2FjCisJCQljZl9uZXdfY3BwZmxhZ3M9IiRjZl9uZXdfY3BwZmxhZ3MgJGNmX2FkZF9jZmxhZ3MiCisJCQk7OworCQllc2FjCisJCTs7CisJKCopCisJCWNmX25ld19jZmxhZ3M9IiRjZl9uZXdfY2ZsYWdzICRjZl9hZGRfY2ZsYWdzIgorCQk7OworCWVzYWMKKwk7OworKHllcykKKwljZl9uZXdfZXh0cmFfY3BwZmxhZ3M9IiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MgJGNmX2FkZF9jZmxhZ3MiCisKKwljZl90c3RfY2ZsYWdzPWBlY2hvICR7Y2ZfYWRkX2NmbGFnc30gfHNlZCAtZSAncy9eW14iXSoiJ1wnJy8vJ2AKKworCXRlc3QgIngke2NmX2FkZF9jZmxhZ3N9IiAhPSAieCR7Y2ZfdHN0X2NmbGFnc30iIFwKKwkJJiYgdGVzdCAteiAiJHtjZl90c3RfY2ZsYWdzfSIgXAorCQkmJiBjZl9maXhfY3BwZmxhZ3M9bm8KKwk7OworZXNhYworZG9uZQorCitpZiB0ZXN0IC1uICIkY2ZfbmV3X2NmbGFncyIgOyB0aGVuCisKKwlDRkxBR1M9IiRDRkxBR1MgJGNmX25ld19jZmxhZ3MiCitmaQorCitpZiB0ZXN0IC1uICIkY2ZfbmV3X2NwcGZsYWdzIiA7IHRoZW4KKworCUNQUEZMQUdTPSIkQ1BQRkxBR1MgJGNmX25ld19jcHBmbGFncyIKK2ZpCisKK2lmIHRlc3QgLW4gIiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MiIDsgdGhlbgorCisJRVhUUkFfQ1BQRkxBR1M9IiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MgJEVYVFJBX0NQUEZMQUdTIgorZmkKKworCTs7CisoKikKKwllY2hvICIkYXNfbWU6MTg4NzogcmVzdWx0OiBvayIgPiY1CitlY2hvICIke0VDSE9fVH1vayIgPiY2CisJOzsKK2VzYWMKKworYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorYWNfbWFpbl9yZXR1cm49cmV0dXJuCitlY2hvICIkYXNfbWU6MTg5ODogY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3Nvci4uLiAkRUNIT19DIiA+JjYKKyMgT24gU3Vucywgc29tZXRpbWVzICRDUFAgbmFtZXMgYSBkaXJlY3RvcnkuCitpZiB0ZXN0IC1uICIkQ1BQIiAmJiB0ZXN0IC1kICIkQ1BQIjsgdGhlbgorICBDUFA9CitmaQoraWYgdGVzdCAteiAiJENQUCI7IHRoZW4KKyAgaWYgdGVzdCAiJHthY19jdl9wcm9nX0NQUCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICAgICAgIyBEb3VibGUgcXVvdGVzIGJlY2F1c2UgQ1BQIG5lZWRzIHRvIGJlIGV4cGFuZGVkCisgICAgZm9yIENQUCBpbiAiJENDIC1FIiAiJENDIC1FIC10cmFkaXRpb25hbC1jcHAiICIvbGliL2NwcCIKKyAgICBkbworICAgICAgYWNfcHJlcHJvY19vaz1mYWxzZQorZm9yIGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4gJycgeWVzCitkbworICAjIFVzZSBhIGhlYWRlciBmaWxlIHRoYXQgY29tZXMgd2l0aCBnY2MsIHNvIGNvbmZpZ3VyaW5nIGdsaWJjCisgICMgd2l0aCBhIGZyZXNoIGNyb3NzLWNvbXBpbGVyIHdvcmtzLgorICAjIE9uIHRoZSBOZVhULCBjYyAtRSBydW5zIHRoZSBjb2RlIHRocm91Z2ggdGhlIGNvbXBpbGVyJ3MgcGFyc2VyLAorICAjIG5vdCBqdXN0IHRocm91Z2ggY3BwLiAiU3ludGF4IGVycm9yIiBpcyBoZXJlIHRvIGNhdGNoIHRoaXMgY2FzZS4KKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxOTE5ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyAgICAgICAgICAgICAgICAgICAgIFN5bnRheCBlcnJvcgorX0FDRU9GCitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxOTI0OiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1CisgIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGVncmVwIC12ICdeICpcKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZToxOTMwOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKyAgZWxzZQorICAgIGFjX2NwcF9lcnI9CisgIGZpCitlbHNlCisgIGFjX2NwcF9lcnI9eWVzCitmaQoraWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCisgIDoKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgICMgQnJva2VuOiBmYWlscyBvbiB2YWxpZCBpbnB1dC4KK2NvbnRpbnVlCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKworICAjIE9LLCB3b3JrcyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uLWV4aXN0ZW50IGhlYWRlcnMKKyAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxOTUzICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxhY19ub25leGlzdGVudC5oPgorX0FDRU9GCitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxOTU3OiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1CisgIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGVncmVwIC12ICdeICpcKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZToxOTYzOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKyAgZWxzZQorICAgIGFjX2NwcF9lcnI9CisgIGZpCitlbHNlCisgIGFjX2NwcF9lcnI9eWVzCitmaQoraWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCisgICMgQnJva2VuOiBzdWNjZXNzIG9uIGludmFsaWQgaW5wdXQuCitjb250aW51ZQorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KK2FjX3ByZXByb2Nfb2s9OgorYnJlYWsKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorCitkb25lCisjIEJlY2F1c2Ugb2YgYGJyZWFrJywgX0FDX1BSRVBST0NfSUZFTFNFJ3MgY2xlYW5pbmcgY29kZSB3YXMgc2tpcHBlZC4KK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CitpZiAkYWNfcHJlcHJvY19vazsgdGhlbgorICBicmVhaworZmkKKworICAgIGRvbmUKKyAgICBhY19jdl9wcm9nX0NQUD0kQ1BQCisKK2ZpCisgIENQUD0kYWNfY3ZfcHJvZ19DUFAKK2Vsc2UKKyAgYWNfY3ZfcHJvZ19DUFA9JENQUAorZmkKK2VjaG8gIiRhc19tZToyMDAwOiByZXN1bHQ6ICRDUFAiID4mNQorZWNobyAiJHtFQ0hPX1R9JENQUCIgPiY2CithY19wcmVwcm9jX29rPWZhbHNlCitmb3IgYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbiAnJyB5ZXMKK2RvCisgICMgVXNlIGEgaGVhZGVyIGZpbGUgdGhhdCBjb21lcyB3aXRoIGdjYywgc28gY29uZmlndXJpbmcgZ2xpYmMKKyAgIyB3aXRoIGEgZnJlc2ggY3Jvc3MtY29tcGlsZXIgd29ya3MuCisgICMgT24gdGhlIE5lWFQsIGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUgY29tcGlsZXIncyBwYXJzZXIsCisgICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDIwMTAgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPGFzc2VydC5oPgorICAgICAgICAgICAgICAgICAgICAgU3ludGF4IGVycm9yCitfQUNFT0YKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjIwMTU6IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZWdyZXAgLXYgJ14gKlwrJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOjIwMjE6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworICBlbHNlCisgICAgYWNfY3BwX2Vycj0KKyAgZmkKK2Vsc2UKKyAgYWNfY3BwX2Vycj15ZXMKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KKyAgOgorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgIyBCcm9rZW46IGZhaWxzIG9uIHZhbGlkIGlucHV0LgorY29udGludWUKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorCisgICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub24tZXhpc3RlbnQgaGVhZGVycworICAjIGNhbiBiZSBkZXRlY3RlZCBhbmQgaG93LgorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDIwNDQgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+CitfQUNFT0YKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjIwNDg6IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZWdyZXAgLXYgJ14gKlwrJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOjIwNTQ6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworICBlbHNlCisgICAgYWNfY3BwX2Vycj0KKyAgZmkKK2Vsc2UKKyAgYWNfY3BwX2Vycj15ZXMKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KKyAgIyBCcm9rZW46IHN1Y2Nlc3Mgb24gaW52YWxpZCBpbnB1dC4KK2NvbnRpbnVlCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICAjIFBhc3NlcyBib3RoIHRlc3RzLgorYWNfcHJlcHJvY19vaz06CiticmVhaworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisKK2RvbmUKKyMgQmVjYXVzZSBvZiBgYnJlYWsnLCBfQUNfUFJFUFJPQ19JRkVMU0UncyBjbGVhbmluZyBjb2RlIHdhcyBza2lwcGVkLgorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK2lmICRhY19wcmVwcm9jX29rOyB0aGVuCisgIDoKK2Vsc2UKKyAgeyB7IGVjaG8gIiRhc19tZToyMDgyOiBlcnJvcjogQyBwcmVwcm9jZXNzb3IgXCIkQ1BQXCIgZmFpbHMgc2FuaXR5IGNoZWNrIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IEMgcHJlcHJvY2Vzc29yIFwiJENQUFwiIGZhaWxzIHNhbml0eSBjaGVjayIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorZmkKKworYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorYWNfbWFpbl9yZXR1cm49cmV0dXJuCisKK2lmIHRlc3QgJGFjX2N2X2NfY29tcGlsZXJfZ251ID0geWVzOyB0aGVuCisgICAgZWNobyAiJGFzX21lOjIwOTU6IGNoZWNraW5nIHdoZXRoZXIgJENDIG5lZWRzIC10cmFkaXRpb25hbCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgJENDIG5lZWRzIC10cmFkaXRpb25hbC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19nY2NfdHJhZGl0aW9uYWwrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgICBhY19wYXR0ZXJuPSJBdXRvY29uZi4qJ3gnIgorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDIxMDIgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHNndHR5Lmg+CitpbnQgQXV0b2NvbmYgPSBUSU9DR0VUUDsKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICBlZ3JlcCAiJGFjX3BhdHRlcm4iID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBhY19jdl9wcm9nX2djY190cmFkaXRpb25hbD15ZXMKK2Vsc2UKKyAgYWNfY3ZfcHJvZ19nY2NfdHJhZGl0aW9uYWw9bm8KK2ZpCitybSAtcmYgY29uZnRlc3QqCisKKyAgaWYgdGVzdCAkYWNfY3ZfcHJvZ19nY2NfdHJhZGl0aW9uYWwgPSBubzsgdGhlbgorICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMjExNyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8dGVybWlvLmg+CitpbnQgQXV0b2NvbmYgPSBUQ0dFVEE7CitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgZWdyZXAgIiRhY19wYXR0ZXJuIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgYWNfY3ZfcHJvZ19nY2NfdHJhZGl0aW9uYWw9eWVzCitmaQorcm0gLXJmIGNvbmZ0ZXN0KgorCisgIGZpCitmaQorZWNobyAiJGFzX21lOjIxMzA6IHJlc3VsdDogJGFjX2N2X3Byb2dfZ2NjX3RyYWRpdGlvbmFsIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9wcm9nX2djY190cmFkaXRpb25hbCIgPiY2CisgIGlmIHRlc3QgJGFjX2N2X3Byb2dfZ2NjX3RyYWRpdGlvbmFsID0geWVzOyB0aGVuCisgICAgQ0M9IiRDQyAtdHJhZGl0aW9uYWwiCisgIGZpCitmaQorCitlY2hvICIkYXNfbWU6MjEzNzogY2hlY2tpbmcgd2hldGhlciAkQ0MgdW5kZXJzdGFuZHMgLWMgYW5kIC1vIHRvZ2V0aGVyIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciAkQ0MgdW5kZXJzdGFuZHMgLWMgYW5kIC1vIHRvZ2V0aGVyLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHtjZl9jdl9wcm9nX0NDX2NfbytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorCitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8Q0ZfRU9GCisjaW5jbHVkZSA8c3RkaW8uaD4KK2ludCBtYWluKCkKK3sKKwkke2NmX2N2X21haW5fcmV0dXJuOi1yZXR1cm59KDApOworfQorQ0ZfRU9GCisjIFdlIGRvIHRoZSB0ZXN0IHR3aWNlIGJlY2F1c2Ugc29tZSBjb21waWxlcnMgcmVmdXNlIHRvIG92ZXJ3cml0ZSBhbgorIyBleGlzdGluZyAubyBmaWxlIHdpdGggLW8sIHRob3VnaCB0aGV5IHdpbGwgY3JlYXRlIG9uZS4KK2FjX3RyeT0nJENDIC1jIGNvbmZ0ZXN0LiRhY19leHQgLW8gY29uZnRlc3QyLiRhY19vYmpleHQgPiY1JworaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MjE1MzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjIxNTY6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICB0ZXN0IC1mIGNvbmZ0ZXN0Mi4kYWNfb2JqZXh0ICYmIHsgKGV2YWwgZWNobyAiJGFzX21lOjIxNTg6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToyMTYxOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07Cit0aGVuCisgIGV2YWwgY2ZfY3ZfcHJvZ19DQ19jX289eWVzCitlbHNlCisgIGV2YWwgY2ZfY3ZfcHJvZ19DQ19jX289bm8KK2ZpCitybSAtcmYgY29uZnRlc3QqCisKK2ZpCitpZiB0ZXN0ICRjZl9jdl9wcm9nX0NDX2NfbyA9IHllczsgdGhlbgorICBlY2hvICIkYXNfbWU6MjE3MjogcmVzdWx0OiB5ZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKK2Vsc2UKKyAgZWNobyAiJGFzX21lOjIxNzU6IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorZmkKKwordGVzdCAiJHByb2dyYW1fcHJlZml4IiAhPSBOT05FICYmCisgIHByb2dyYW1fdHJhbnNmb3JtX25hbWU9InMsXiwkcHJvZ3JhbV9wcmVmaXgsOyRwcm9ncmFtX3RyYW5zZm9ybV9uYW1lIgorIyBVc2UgYSBkb3VibGUgJCBzbyBtYWtlIGlnbm9yZXMgaXQuCit0ZXN0ICIkcHJvZ3JhbV9zdWZmaXgiICE9IE5PTkUgJiYKKyAgcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZT0icyxcJCwkcHJvZ3JhbV9zdWZmaXgsOyRwcm9ncmFtX3RyYW5zZm9ybV9uYW1lIgorIyBEb3VibGUgYW55IFwgb3IgJC4gIGVjaG8gbWlnaHQgaW50ZXJwcmV0IGJhY2tzbGFzaGVzLgorIyBCeSBkZWZhdWx0IHdhcyBgcyx4LHgnLCByZW1vdmUgaXQgaWYgdXNlbGVzcy4KK2NhdCA8PFxfQUNFT0YgPmNvbmZ0ZXN0LnNlZAorcy9bXFwkXS8mJi9nO3MvO3MseCx4LCQvLworX0FDRU9GCitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPWBlY2hvICRwcm9ncmFtX3RyYW5zZm9ybV9uYW1lIHwgc2VkIC1mIGNvbmZ0ZXN0LnNlZGAKK3JtIGNvbmZ0ZXN0LnNlZAorCitmb3IgYWNfcHJvZyBpbiBtYXdrIGdhd2sgbmF3ayBhd2sKK2RvCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCitlY2hvICIkYXNfbWU6MjE5NjogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9wcm9nX0FXSytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQVdLIjsgdGhlbgorICBhY19jdl9wcm9nX0FXSz0iJEFXSyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCisgIGFjX3NhdmVfSUZTPSRJRlM7IElGUz0kYWNfcGF0aF9zZXBhcmF0b3IKK2FjX2R1bW15PSIkUEFUSCIKK2ZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbworICBJRlM9JGFjX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICRhc19leGVjdXRhYmxlX3AgIiRhY19kaXIvJGFjX3dvcmQiIHx8IGNvbnRpbnVlCithY19jdl9wcm9nX0FXSz0iJGFjX3Byb2ciCitlY2hvICIkYXNfbWU6MjIxMTogZm91bmQgJGFjX2Rpci8kYWNfd29yZCIgPiY1CiticmVhaworZG9uZQorCitmaQorZmkKK0FXSz0kYWNfY3ZfcHJvZ19BV0sKK2lmIHRlc3QgLW4gIiRBV0siOyB0aGVuCisgIGVjaG8gIiRhc19tZToyMjE5OiByZXN1bHQ6ICRBV0siID4mNQorZWNobyAiJHtFQ0hPX1R9JEFXSyIgPiY2CitlbHNlCisgIGVjaG8gIiRhc19tZToyMjIyOiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjYKK2ZpCisKKyAgdGVzdCAtbiAiJEFXSyIgJiYgYnJlYWsKK2RvbmUKKwordGVzdCAteiAiJEFXSyIgJiYgeyB7IGVjaG8gIiRhc19tZToyMjI5OiBlcnJvcjogTm8gYXdrIHByb2dyYW0gZm91bmQiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogTm8gYXdrIHByb2dyYW0gZm91bmQiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKworZWNobyAiJGFzX21lOjIyMzM6IGNoZWNraW5nIGZvciBlZ3JlcCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBlZ3JlcC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19lZ3JlcCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiBlY2hvIGEgfCAoZ3JlcCAtRSAnKGF8YiknKSA+L2Rldi9udWxsIDI+JjEKKwkJdGhlbiBhY19jdl9wcm9nX2VncmVwPSdncmVwIC1FJworCQllbHNlIGFjX2N2X3Byb2dfZWdyZXA9J2VncmVwJworCWZpCitmaQorZWNobyAiJGFzX21lOjIyNDM6IHJlc3VsdDogJGFjX2N2X3Byb2dfZWdyZXAiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3Byb2dfZWdyZXAiID4mNgorCUVHUkVQPSRhY19jdl9wcm9nX2VncmVwCisKKwl0ZXN0IC16ICIkRUdSRVAiICYmIHsgeyBlY2hvICIkYXNfbWU6MjI0NzogZXJyb3I6IE5vIGVncmVwIHByb2dyYW0gZm91bmQiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogTm8gZWdyZXAgcHJvZ3JhbSBmb3VuZCIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorCisjIEZpbmQgYSBnb29kIGluc3RhbGwgcHJvZ3JhbS4gIFdlIHByZWZlciBhIEMgcHJvZ3JhbSAoZmFzdGVyKSwKKyMgc28gb25lIHNjcmlwdCBpcyBhcyBnb29kIGFzIGFub3RoZXIuICBCdXQgYXZvaWQgdGhlIGJyb2tlbiBvcgorIyBpbmNvbXBhdGlibGUgdmVyc2lvbnM6CisjIFN5c1YgL2V0Yy9pbnN0YWxsLCAvdXNyL3NiaW4vaW5zdGFsbAorIyBTdW5PUyAvdXNyL2V0Yy9pbnN0YWxsCisjIElSSVggL3NiaW4vaW5zdGFsbAorIyBBSVggL2Jpbi9pbnN0YWxsCisjIEFtaWdhT1MgL0MvaW5zdGFsbCwgd2hpY2ggaW5zdGFsbHMgYm9vdGJsb2NrcyBvbiBmbG9wcHkgZGlzY3MKKyMgQUlYIDQgL3Vzci9iaW4vaW5zdGFsbGJzZCwgd2hpY2ggZG9lc24ndCB3b3JrIHdpdGhvdXQgYSAtZyBmbGFnCisjIEFGUyAvdXNyL2Fmc3dzL2Jpbi9pbnN0YWxsLCB3aGljaCBtaXNoYW5kbGVzIG5vbmV4aXN0ZW50IGFyZ3MKKyMgU1ZSNCAvdXNyL3VjYi9pbnN0YWxsLCB3aGljaCB0cmllcyB0byB1c2UgdGhlIG5vbmV4aXN0ZW50IGdyb3VwICJzdGFmZiIKKyMgLi9pbnN0YWxsLCB3aGljaCBjYW4gYmUgZXJyb25lb3VzbHkgY3JlYXRlZCBieSBtYWtlIGZyb20gLi9pbnN0YWxsLnNoLgorZWNobyAiJGFzX21lOjIyNjM6IGNoZWNraW5nIGZvciBhIEJTRCBjb21wYXRpYmxlIGluc3RhbGwiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgYSBCU0QgY29tcGF0aWJsZSBpbnN0YWxsLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAteiAiJElOU1RBTEwiOyB0aGVuCitpZiB0ZXN0ICIke2FjX2N2X3BhdGhfaW5zdGFsbCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICAgIGFjX3NhdmVfSUZTPSRJRlM7IElGUz0kYWNfcGF0aF9zZXBhcmF0b3IKKyAgZm9yIGFjX2RpciBpbiAkUEFUSDsgZG8KKyAgICBJRlM9JGFjX3NhdmVfSUZTCisgICAgIyBBY2NvdW50IGZvciBwZW9wbGUgd2hvIHB1dCB0cmFpbGluZyBzbGFzaGVzIGluIFBBVEggZWxlbWVudHMuCisgICAgY2FzZSAkYWNfZGlyLyBpbgorICAgIC8gfCAuLyB8IC4vLyB8IC9jQy8qIFwKKyAgICB8IC9ldGMvKiB8IC91c3Ivc2Jpbi8qIHwgL3Vzci9ldGMvKiB8IC9zYmluLyogfCAvdXNyL2Fmc3dzL2Jpbi8qIFwKKyAgICB8IC91c3IvdWNiLyogKSA7OworICAgICopCisgICAgICAjIE9TRjEgYW5kIFNDTyBPRFQgMy4wIGhhdmUgdGhlaXIgb3duIG5hbWVzIGZvciBpbnN0YWxsLgorICAgICAgIyBEb24ndCB1c2UgaW5zdGFsbGJzZCBmcm9tIE9TRiBzaW5jZSBpdCBpbnN0YWxscyBzdHVmZiBhcyByb290CisgICAgICAjIGJ5IGRlZmF1bHQuCisgICAgICBmb3IgYWNfcHJvZyBpbiBnaW5zdGFsbCBzY29pbnN0IGluc3RhbGw7IGRvCisgICAgICAgIGlmICRhc19leGVjdXRhYmxlX3AgIiRhY19kaXIvJGFjX3Byb2ciOyB0aGVuCisJICBpZiB0ZXN0ICRhY19wcm9nID0gaW5zdGFsbCAmJgorICAgICAgICAgICAgZ3JlcCBkc3Btc2cgIiRhY19kaXIvJGFjX3Byb2ciID4vZGV2L251bGwgMj4mMTsgdGhlbgorCSAgICAjIEFJWCBpbnN0YWxsLiAgSXQgaGFzIGFuIGluY29tcGF0aWJsZSBjYWxsaW5nIGNvbnZlbnRpb24uCisJICAgIDoKKwkgIGVsaWYgdGVzdCAkYWNfcHJvZyA9IGluc3RhbGwgJiYKKwkgICAgZ3JlcCBwd3BsdXMgIiRhY19kaXIvJGFjX3Byb2ciID4vZGV2L251bGwgMj4mMTsgdGhlbgorCSAgICAjIHByb2dyYW0tc3BlY2lmaWMgaW5zdGFsbCBzY3JpcHQgdXNlZCBieSBIUCBwd3BsdXMtLWRvbid0IHVzZS4KKwkgICAgOgorCSAgZWxzZQorCSAgICBhY19jdl9wYXRoX2luc3RhbGw9IiRhY19kaXIvJGFjX3Byb2cgLWMiCisJICAgIGJyZWFrIDIKKwkgIGZpCisJZmkKKyAgICAgIGRvbmUKKyAgICAgIDs7CisgICAgZXNhYworICBkb25lCisKK2ZpCisgIGlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9pbnN0YWxsK3NldH0iID0gc2V0OyB0aGVuCisgICAgSU5TVEFMTD0kYWNfY3ZfcGF0aF9pbnN0YWxsCisgIGVsc2UKKyAgICAjIEFzIGEgbGFzdCByZXNvcnQsIHVzZSB0aGUgc2xvdyBzaGVsbCBzY3JpcHQuICBXZSBkb24ndCBjYWNoZSBhCisgICAgIyBwYXRoIGZvciBJTlNUQUxMIHdpdGhpbiBhIHNvdXJjZSBkaXJlY3RvcnksIGJlY2F1c2UgdGhhdCB3aWxsCisgICAgIyBicmVhayBvdGhlciBwYWNrYWdlcyB1c2luZyB0aGUgY2FjaGUgaWYgdGhhdCBkaXJlY3RvcnkgaXMKKyAgICAjIHJlbW92ZWQsIG9yIGlmIHRoZSBwYXRoIGlzIHJlbGF0aXZlLgorICAgIElOU1RBTEw9JGFjX2luc3RhbGxfc2gKKyAgZmkKK2ZpCitlY2hvICIkYXNfbWU6MjMxMjogcmVzdWx0OiAkSU5TVEFMTCIgPiY1CitlY2hvICIke0VDSE9fVH0kSU5TVEFMTCIgPiY2CisKKyMgVXNlIHRlc3QgLXogYmVjYXVzZSBTdW5PUzQgc2ggbWlzaGFuZGxlcyBicmFjZXMgaW4gJHt2YXItdmFsfS4KKyMgSXQgdGhpbmtzIHRoZSBmaXJzdCBjbG9zZSBicmFjZSBlbmRzIHRoZSB2YXJpYWJsZSBzdWJzdGl0dXRpb24uCit0ZXN0IC16ICIkSU5TVEFMTF9QUk9HUkFNIiAmJiBJTlNUQUxMX1BST0dSQU09JyR7SU5TVEFMTH0nCisKK3Rlc3QgLXogIiRJTlNUQUxMX1NDUklQVCIgJiYgSU5TVEFMTF9TQ1JJUFQ9JyR7SU5TVEFMTH0nCisKK3Rlc3QgLXogIiRJTlNUQUxMX0RBVEEiICYmIElOU1RBTExfREFUQT0nJHtJTlNUQUxMfSAtbSA2NDQnCisKK2VjaG8gIiRhc19tZToyMzIzOiBjaGVja2luZyB3aGV0aGVyIGxuIC1zIHdvcmtzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBsbiAtcyB3b3Jrcy4uLiAkRUNIT19DIiA+JjYKK0xOX1M9JGFzX2xuX3MKK2lmIHRlc3QgIiRMTl9TIiA9ICJsbiAtcyI7IHRoZW4KKyAgZWNobyAiJGFzX21lOjIzMjc6IHJlc3VsdDogeWVzIiA+JjUKK2VjaG8gIiR7RUNIT19UfXllcyIgPiY2CitlbHNlCisgIGVjaG8gIiRhc19tZToyMzMwOiByZXN1bHQ6IG5vLCB1c2luZyAkTE5fUyIgPiY1CitlY2hvICIke0VDSE9fVH1ubywgdXNpbmcgJExOX1MiID4mNgorZmkKKworZWNobyAiJGFzX21lOjIzMzQ6IGNoZWNraW5nIGlmICRMTl9TIC1mIG9wdGlvbnMgd29yayIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmICRMTl9TIC1mIG9wdGlvbnMgd29yay4uLiAkRUNIT19DIiA+JjYKKworcm0gLWYgY29uZiQkLnNyYyBjb25mJCRkc3QKK2VjaG8gPmNvbmYkJC5kc3QKK2VjaG8gZmlyc3QgPmNvbmYkJC5zcmMKK2lmICRMTl9TIC1mIGNvbmYkJC5zcmMgY29uZiQkLmRzdCAyPi9kZXYvbnVsbDsgdGhlbgorCWNmX3Byb2dfbG5fc2Y9eWVzCitlbHNlCisJY2ZfcHJvZ19sbl9zZj1ubworZmkKK3JtIC1mIGNvbmYkJC5kc3QgY29uZiQkc3JjCitlY2hvICIkYXNfbWU6MjM0NjogcmVzdWx0OiAkY2ZfcHJvZ19sbl9zZiIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfcHJvZ19sbl9zZiIgPiY2CisKK3Rlc3QgIiRjZl9wcm9nX2xuX3NmIiA9IHllcyAmJiBMTl9TPSIkTE5fUyAtZiIKKworZWNobyAiJGFzX21lOjIzNTE6IGNoZWNraW5nIGZvciBsb25nIGZpbGUgbmFtZXMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbG9uZyBmaWxlIG5hbWVzLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9zeXNfbG9uZ19maWxlX25hbWVzK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGFjX2N2X3N5c19sb25nX2ZpbGVfbmFtZXM9eWVzCisjIFRlc3QgZm9yIGxvbmcgZmlsZSBuYW1lcyBpbiBhbGwgdGhlIHBsYWNlcyB3ZSBrbm93IG1pZ2h0IG1hdHRlcjoKKyMgICAgICAuCQl0aGUgY3VycmVudCBkaXJlY3RvcnksIHdoZXJlIGJ1aWxkaW5nIHdpbGwgaGFwcGVuCisjICAgICAgJHByZWZpeC9saWIJd2hlcmUgd2Ugd2lsbCBiZSBpbnN0YWxsaW5nIHRoaW5ncworIyAgICAgICRleGVjX3ByZWZpeC9saWIJbGlrZXdpc2UKKyMgZXZhbCBpdCB0byBleHBhbmQgZXhlY19wcmVmaXguCisjICAgICAgJFRNUERJUgkJaWYgc2V0LCB3aGVyZSBpdCBtaWdodCB3YW50IHRvIHdyaXRlIHRlbXBvcmFyeSBmaWxlcworIyBpZiAkVE1QRElSIGlzIG5vdCBzZXQ6CisjICAgICAgL3RtcAkJd2hlcmUgaXQgbWlnaHQgd2FudCB0byB3cml0ZSB0ZW1wb3JhcnkgZmlsZXMKKyMgICAgICAvdmFyL3RtcAkJbGlrZXdpc2UKKyMgICAgICAvdXNyL3RtcAkJbGlrZXdpc2UKK2lmIHRlc3QgLW4gIiRUTVBESVIiICYmIHRlc3QgLWQgIiRUTVBESVIiICYmIHRlc3QgLXcgIiRUTVBESVIiOyB0aGVuCisgIGFjX3RtcGRpcnM9JFRNUERJUgorZWxzZQorICBhY190bXBkaXJzPScvdG1wIC92YXIvdG1wIC91c3IvdG1wJworZmkKK2ZvciBhY19kaXIgaW4gIC4gJGFjX3RtcGRpcnMgYGV2YWwgZWNobyAkcHJlZml4L2xpYiAkZXhlY19wcmVmaXgvbGliYCA7IGRvCisgIHRlc3QgLWQgJGFjX2RpciB8fCBjb250aW51ZQorICB0ZXN0IC13ICRhY19kaXIgfHwgY29udGludWUgIyBJdCBpcyBsZXNzIGNvbmZ1c2luZyB0byBub3QgZWNobyBhbnl0aGluZyBoZXJlLgorICBhY194ZGlyPSRhY19kaXIvY2YkJAorICAodW1hc2sgMDc3ICYmIG1rZGlyICRhY194ZGlyIDI+L2Rldi9udWxsKSB8fCBjb250aW51ZQorICBhY190ZjE9JGFjX3hkaXIvY29uZnRlc3Q5MDEyMzQ1CisgIGFjX3RmMj0kYWNfeGRpci9jb25mdGVzdDkwMTIzNDYKKyAgKGVjaG8gMSA+JGFjX3RmMSkgMj4vZGV2L251bGwKKyAgKGVjaG8gMiA+JGFjX3RmMikgMj4vZGV2L251bGwKKyAgYWNfdmFsPWBjYXQgJGFjX3RmMSAyPi9kZXYvbnVsbGAKKyAgaWYgdGVzdCAhIC1mICRhY190ZjEgfHwgdGVzdCAiJGFjX3ZhbCIgIT0gMTsgdGhlbgorICAgIGFjX2N2X3N5c19sb25nX2ZpbGVfbmFtZXM9bm8KKyAgICBybSAtcmYgJGFjX3hkaXIgMj4vZGV2L251bGwKKyAgICBicmVhaworICBmaQorICBybSAtcmYgJGFjX3hkaXIgMj4vZGV2L251bGwKK2RvbmUKK2ZpCitlY2hvICIkYXNfbWU6MjM5MDogcmVzdWx0OiAkYWNfY3Zfc3lzX2xvbmdfZmlsZV9uYW1lcyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3Zfc3lzX2xvbmdfZmlsZV9uYW1lcyIgPiY2CitpZiB0ZXN0ICRhY19jdl9zeXNfbG9uZ19maWxlX25hbWVzID0geWVzOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEhBVkVfTE9OR19GSUxFX05BTUVTIDEKK0VPRgorCitmaQorCisjIGlmIHdlIGZpbmQgcGtnLWNvbmZpZywgY2hlY2sgaWYgd2Ugc2hvdWxkIGluc3RhbGwgdGhlICIucGMiIGZpbGVzLgorCitlY2hvICIkYXNfbWU6MjQwMjogY2hlY2tpbmcgaWYgeW91IHdhbnQgdG8gdXNlIHBrZy1jb25maWciID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB5b3Ugd2FudCB0byB1c2UgcGtnLWNvbmZpZy4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1wa2ctY29uZmlnIG9yIC0td2l0aG91dC1wa2ctY29uZmlnIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9wa2dfY29uZmlnK3NldH0iID0gc2V0OyB0aGVuCisgIHdpdGh2YWw9IiR3aXRoX3BrZ19jb25maWciCisgIGNmX3BrZ19jb25maWc9JHdpdGh2YWwKK2Vsc2UKKyAgY2ZfcGtnX2NvbmZpZz15ZXMKK2ZpOworZWNobyAiJGFzX21lOjI0MTI6IHJlc3VsdDogJGNmX3BrZ19jb25maWciID4mNQorZWNobyAiJHtFQ0hPX1R9JGNmX3BrZ19jb25maWciID4mNgorCitjYXNlICRjZl9wa2dfY29uZmlnIGluCisobm8pCisJUEtHX0NPTkZJRz1ub25lCisJOzsKKyh5ZXMpCisKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fXBrZy1jb25maWciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9cGtnLWNvbmZpZzsgYWNfd29yZD0kMgorZWNobyAiJGFzX21lOjI0MjQ6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9QS0dfQ09ORklHK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhc2UgJFBLR19DT05GSUcgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfUEtHX0NPTkZJRz0iJFBLR19DT05GSUciICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhY19zYXZlX0lGUz0kSUZTOyBJRlM9JGFjX3BhdGhfc2VwYXJhdG9yCithY19kdW1teT0iJFBBVEgiCitmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKyAgSUZTPSRhY19zYXZlX0lGUworICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYWNfZGlyLyRhY193b3JkIjsgdGhlbgorICAgYWNfY3ZfcGF0aF9QS0dfQ09ORklHPSIkYWNfZGlyLyRhY193b3JkIgorICAgZWNobyAiJGFzX21lOjI0NDE6IGZvdW5kICRhY19kaXIvJGFjX3dvcmQiID4mNQorICAgYnJlYWsKK2ZpCitkb25lCisKKyAgOzsKK2VzYWMKK2ZpCitQS0dfQ09ORklHPSRhY19jdl9wYXRoX1BLR19DT05GSUcKKworaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCisgIGVjaG8gIiRhc19tZToyNDUyOiByZXN1bHQ6ICRQS0dfQ09ORklHIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRQS0dfQ09ORklHIiA+JjYKK2Vsc2UKKyAgZWNobyAiJGFzX21lOjI0NTU6IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorZmkKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wYXRoX1BLR19DT05GSUciOyB0aGVuCisgIGFjX3B0X1BLR19DT05GSUc9JFBLR19DT05GSUcKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJwa2ctY29uZmlnIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBwa2ctY29uZmlnOyBhY193b3JkPSQyCitlY2hvICIkYXNfbWU6MjQ2NDogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9wYXRoX2FjX3B0X1BLR19DT05GSUcrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2FzZSAkYWNfcHRfUEtHX0NPTkZJRyBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9hY19wdF9QS0dfQ09ORklHPSIkYWNfcHRfUEtHX0NPTkZJRyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFjX3NhdmVfSUZTPSRJRlM7IElGUz0kYWNfcGF0aF9zZXBhcmF0b3IKK2FjX2R1bW15PSIkUEFUSCIKK2ZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbworICBJRlM9JGFjX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgIGlmICRhc19leGVjdXRhYmxlX3AgIiRhY19kaXIvJGFjX3dvcmQiOyB0aGVuCisgICBhY19jdl9wYXRoX2FjX3B0X1BLR19DT05GSUc9IiRhY19kaXIvJGFjX3dvcmQiCisgICBlY2hvICIkYXNfbWU6MjQ4MTogZm91bmQgJGFjX2Rpci8kYWNfd29yZCIgPiY1CisgICBicmVhaworZmkKK2RvbmUKKworICB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9hY19wdF9QS0dfQ09ORklHIiAmJiBhY19jdl9wYXRoX2FjX3B0X1BLR19DT05GSUc9Im5vbmUiCisgIDs7Citlc2FjCitmaQorYWNfcHRfUEtHX0NPTkZJRz0kYWNfY3ZfcGF0aF9hY19wdF9QS0dfQ09ORklHCisKK2lmIHRlc3QgLW4gIiRhY19wdF9QS0dfQ09ORklHIjsgdGhlbgorICBlY2hvICIkYXNfbWU6MjQ5MzogcmVzdWx0OiAkYWNfcHRfUEtHX0NPTkZJRyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfcHRfUEtHX0NPTkZJRyIgPiY2CitlbHNlCisgIGVjaG8gIiRhc19tZToyNDk2OiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjYKK2ZpCisKKyAgUEtHX0NPTkZJRz0kYWNfcHRfUEtHX0NPTkZJRworZWxzZQorICBQS0dfQ09ORklHPSIkYWNfY3ZfcGF0aF9QS0dfQ09ORklHIgorZmkKKworCTs7CisoKikKKwlQS0dfQ09ORklHPSR3aXRodmFsCisJOzsKK2VzYWMKKwordGVzdCAteiAiJFBLR19DT05GSUciICYmIFBLR19DT05GSUc9bm9uZQoraWYgdGVzdCAiJFBLR19DT05GSUciICE9IG5vbmUgOyB0aGVuCisKK2lmIHRlc3QgIngkcHJlZml4IiAhPSB4Tk9ORTsgdGhlbgorCWNmX3BhdGhfc3ludGF4PSIkcHJlZml4IgorZWxzZQorCWNmX3BhdGhfc3ludGF4PSIkYWNfZGVmYXVsdF9wcmVmaXgiCitmaQorCitjYXNlICIuJFBLR19DT05GSUciIGluCisoLlwkXCgqXCkqfC5cJypcJyopCisJOzsKKyguLnwuLyp8LlxcKikKKwk7OworKC5bYS16QS1aXTpbXFwvXSopICMgT1MvMiBFTVgKKwk7OworKC5cJHsqcHJlZml4fSp8LlwkeypkaXJ9KikKKwlldmFsIFBLR19DT05GSUc9IiRQS0dfQ09ORklHIgorCWNhc2UgIi4kUEtHX0NPTkZJRyIgaW4KKwkoLk5PTkUvKikKKwkJUEtHX0NPTkZJRz1gZWNobyAkUEtHX0NPTkZJRyB8IHNlZCAtZSBzJU5PTkUlJGNmX3BhdGhfc3ludGF4JWAKKwkJOzsKKwllc2FjCisJOzsKKygubm98Lk5PTkUvKikKKwlQS0dfQ09ORklHPWBlY2hvICRQS0dfQ09ORklHIHwgc2VkIC1lIHMlTk9ORSUkY2ZfcGF0aF9zeW50YXglYAorCTs7CisoKikKKwl7IHsgZWNobyAiJGFzX21lOjI1Mzk6IGVycm9yOiBleHBlY3RlZCBhIHBhdGhuYW1lLCBub3QgXCIkUEtHX0NPTkZJR1wiIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGV4cGVjdGVkIGEgcGF0aG5hbWUsIG5vdCBcIiRQS0dfQ09ORklHXCIiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKwk7OworZXNhYworCitlbGlmIHRlc3QgIngkY2ZfcGtnX2NvbmZpZyIgIT0geG5vIDsgdGhlbgorCXsgZWNobyAiJGFzX21lOjI1NDY6IFdBUk5JTkc6IHBrZy1jb25maWcgaXMgbm90IGluc3RhbGxlZCIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6IHBrZy1jb25maWcgaXMgbm90IGluc3RhbGxlZCIgPiYyO30KK2ZpCisKK2lmIHRlc3QgIngkUEtHX0NPTkZJRyIgPSB4bm9uZSA7IHRoZW4KKwlQS0dfQ09ORklHX0xJQkRJUj1ubworZWxzZQorCWVjaG8gIiRhc19tZToyNTUzOiBjaGVja2luZyBmb3IgJFBLR19DT05GSUcgbGlicmFyeSBkaXJlY3RvcnkiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJFBLR19DT05GSUcgbGlicmFyeSBkaXJlY3RvcnkuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtcGtnLWNvbmZpZy1saWJkaXIgb3IgLS13aXRob3V0LXBrZy1jb25maWctbGliZGlyIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9wa2dfY29uZmlnX2xpYmRpcitzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF9wa2dfY29uZmlnX2xpYmRpciIKKyAgUEtHX0NPTkZJR19MSUJESVI9JHdpdGh2YWwKK2Vsc2UKKyAgUEtHX0NPTkZJR19MSUJESVI9eWVzCitmaTsKK2ZpCisKK2Nhc2UgeCRQS0dfQ09ORklHX0xJQkRJUiBpbgorKHgvKikKKwk7OworKHh5ZXMpCisJIyBMb29rIGZvciB0aGUgbGlicmFyeSBkaXJlY3RvcnkgdXNpbmcgdGhlIHNhbWUgcHJlZml4IGFzIHRoZSBleGVjdXRhYmxlCisJaWYgdGVzdCAieCRQS0dfQ09ORklHIiA9IHhub25lCisJdGhlbgorCQljZl9wYXRoPSRwcmVmaXgKKwllbHNlCisJCWNmX3BhdGg9YGVjaG8gIiRQS0dfQ09ORklHIiB8IHNlZCAtZSAncywvW14vXSovW14vXSokLCwnYAorCWZpCisKKwkjIElmIHlvdSBkb24ndCBsaWtlIHVzaW5nIHRoZSBkZWZhdWx0IGFyY2hpdGVjdHVyZSwgeW91IGhhdmUgdG8gc3BlY2lmeSB0aGUKKwkjIGludGVuZGVkIGxpYnJhcnkgZGlyZWN0b3J5IGFuZCBjb3JyZXNwb25kaW5nIGNvbXBpbGVyL2xpbmtlciBvcHRpb25zLgorCSMKKwkjIFRoaXMgY2FzZSBhbGxvd3MgZm9yIERlYmlhbidzIDIwMTQtZmxhdm9yIG9mIG11bHRpYXJjaCwgYWxvbmcgd2l0aCB0aGUKKwkjIG1vc3QgY29tbW9uIHZhcmlhdGlvbnMgYmVmb3JlIHRoYXQgcG9pbnQuICBTb21lIG90aGVyIHZhcmlhbnRzIHNwZWxsIHRoZQorCSMgZGlyZWN0b3J5IGRpZmZlcmVudGx5LCBlLmcuLCAicGtnLWNvbmZpZyIsIGFuZCBwdXQgaXQgaW4gdW51c3VhbCBwbGFjZXMuCisJIyBwa2ctY29uZmlnIGhhcyBhbHdheXMgYmVlbiBwb29ybHkgc3RhbmRhcmRpemVkLCB3aGljaCBpcyBpcm9uaWMuLi4KKwljYXNlIHhgKGFyY2gpIDI+L2Rldi9udWxsYCBpbgorCSgqNjQpCisJCWNmX3NlYXJjaF9wYXRoPSJcCisJCQkkY2ZfcGF0aC9saWIvKjY0LWxpbnV4LWdudSBcCisJCQkkY2ZfcGF0aC9zaGFyZSBcCisJCQkkY2ZfcGF0aC9saWI2NCBcCisJCQkkY2ZfcGF0aC9saWIzMiBcCisJCQkkY2ZfcGF0aC9saWIiCisJCTs7CisJKCopCisJCWNmX3NlYXJjaF9wYXRoPSJcCisJCQkkY2ZfcGF0aC9saWIvKi1saW51eC1nbnUgXAorCQkJJGNmX3BhdGgvc2hhcmUgXAorCQkJJGNmX3BhdGgvbGliMzIgXAorCQkJJGNmX3BhdGgvbGliIFwKKwkJCSRjZl9wYXRoL2xpYmRhdGEiCisJCTs7CisJZXNhYworCisJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIglsaXN0Li4uIiAxPiY2CisKK2VjaG8gIiR7YXNfbWU6LWNvbmZpZ3VyZX06MjYwNTogdGVzdGluZyBsaXN0Li4uIC4uLiIgMT4mNQorCisJZm9yIGNmX2NvbmZpZyBpbiAkY2Zfc2VhcmNoX3BhdGgKKwlkbworCQl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCWNoZWNraW5nICRjZl9jb25maWcvcGtnY29uZmlnIiAxPiY2CisKK2VjaG8gIiR7YXNfbWU6LWNvbmZpZ3VyZX06MjYxMTogdGVzdGluZyBjaGVja2luZyAkY2ZfY29uZmlnL3BrZ2NvbmZpZyAuLi4iIDE+JjUKKworCQlpZiB0ZXN0IC1kICRjZl9jb25maWcvcGtnY29uZmlnCisJCXRoZW4KKwkJCVBLR19DT05GSUdfTElCRElSPSRjZl9jb25maWcvcGtnY29uZmlnCisJCQllY2hvICIkYXNfbWU6MjYxNjogY2hlY2tpbmcgZG9uZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGRvbmUuLi4gJEVDSE9fQyIgPiY2CisJCQlicmVhaworCQlmaQorCWRvbmUKKwk7OworKCopCisJOzsKK2VzYWMKKworaWYgdGVzdCAieCRQS0dfQ09ORklHIiAhPSB4bm9uZSA7IHRoZW4KKwllY2hvICIkYXNfbWU6MjYyNzogcmVzdWx0OiAkUEtHX0NPTkZJR19MSUJESVIiID4mNQorZWNobyAiJHtFQ0hPX1R9JFBLR19DT05GSUdfTElCRElSIiA+JjYKK2ZpCisKK2VjaG8gIiRhc19tZToyNjMxOiBjaGVja2luZyBpZiB5b3Ugd2FudCB0byBidWlsZCB0ZXN0LXByb2dyYW1zIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgeW91IHdhbnQgdG8gYnVpbGQgdGVzdC1wcm9ncmFtcy4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC10ZXN0cyBvciAtLXdpdGhvdXQtdGVzdHMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3Rlc3RzK3NldH0iID0gc2V0OyB0aGVuCisgIHdpdGh2YWw9IiR3aXRoX3Rlc3RzIgorICBjZl93aXRoX3Rlc3RzPSR3aXRodmFsCitlbHNlCisgIGNmX3dpdGhfdGVzdHM9eWVzCitmaTsKK2VjaG8gIiRhc19tZToyNjQxOiByZXN1bHQ6ICRjZl93aXRoX3Rlc3RzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl93aXRoX3Rlc3RzIiA+JjYKKworZWNobyAiJGFzX21lOjI2NDQ6IGNoZWNraW5nIGlmIHdlIHNob3VsZCBhc3N1bWUgbWl4ZWQtY2FzZSBmaWxlbmFtZXMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB3ZSBzaG91bGQgYXNzdW1lIG1peGVkLWNhc2UgZmlsZW5hbWVzLi4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbWl4ZWQtY2FzZSBvciAtLWRpc2FibGUtbWl4ZWQtY2FzZSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9taXhlZF9jYXNlK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0iJGVuYWJsZV9taXhlZF9jYXNlIgorICBlbmFibGVfbWl4ZWRjYXNlPSRlbmFibGV2YWwKK2Vsc2UKKyAgZW5hYmxlX21peGVkY2FzZT1hdXRvCitmaTsKK2VjaG8gIiRhc19tZToyNjU0OiByZXN1bHQ6ICRlbmFibGVfbWl4ZWRjYXNlIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRlbmFibGVfbWl4ZWRjYXNlIiA+JjYKK2lmIHRlc3QgIiRlbmFibGVfbWl4ZWRjYXNlIiA9ICJhdXRvIiA7IHRoZW4KKworZWNobyAiJGFzX21lOjI2NTg6IGNoZWNraW5nIGlmIGZpbGVzeXN0ZW0gc3VwcG9ydHMgbWl4ZWQtY2FzZSBmaWxlbmFtZXMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiBmaWxlc3lzdGVtIHN1cHBvcnRzIG1peGVkLWNhc2UgZmlsZW5hbWVzLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHtjZl9jdl9taXhlZGNhc2Urc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKworaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXMgOyB0aGVuCisJY2FzZSAkdGFyZ2V0X2FsaWFzIGluCisJKCotb3MyLWVteCp8Ki1tc2Rvc2RqZ3BwKnwqLWN5Z3dpbip8Ki1tc3lzKnwqLW1pbmd3KnwqLXV3aW4qKQorCQljZl9jdl9taXhlZGNhc2U9bm8KKwkJOzsKKwkoKikKKwkJY2ZfY3ZfbWl4ZWRjYXNlPXllcworCQk7OworCWVzYWMKK2Vsc2UKKwlybSAtZiBjb25mdGVzdCBDT05GVEVTVAorCWVjaG8gdGVzdCA+Y29uZnRlc3QKKwlpZiB0ZXN0IC1mIENPTkZURVNUIDsgdGhlbgorCQljZl9jdl9taXhlZGNhc2U9bm8KKwllbHNlCisJCWNmX2N2X21peGVkY2FzZT15ZXMKKwlmaQorCXJtIC1mIGNvbmZ0ZXN0IENPTkZURVNUCitmaQorCitmaQorZWNobyAiJGFzX21lOjI2ODU6IHJlc3VsdDogJGNmX2N2X21peGVkY2FzZSIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfY3ZfbWl4ZWRjYXNlIiA+JjYKK3Rlc3QgIiRjZl9jdl9taXhlZGNhc2UiID0geWVzICYmCitjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBNSVhFRENBU0VfRklMRU5BTUVTIDEKK0VPRgorCitlbHNlCisJY2ZfY3ZfbWl4ZWRjYXNlPSRlbmFibGVfbWl4ZWRjYXNlCisJaWYgdGVzdCAiJGVuYWJsZV9taXhlZGNhc2UiID0gInllcyIgOyB0aGVuCisJCWNhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIE1JWEVEQ0FTRV9GSUxFTkFNRVMgMQorRU9GCisKKwlmaQorZmkKKworIyBkbyB0aGlzIGFmdGVyIG1peGVkLWNhc2Ugb3B0aW9uICh0YWdzL1RBR1MgaXMgbm90IGFzIGltcG9ydGFudCBhcyB0aWMpLgorZWNobyAiJGFzX21lOjI3MDM6IGNoZWNraW5nIHdoZXRoZXIgJHtNQUtFLW1ha2V9IHNldHMgXCR7TUFLRX0iID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyICR7TUFLRS1tYWtlfSBzZXRzIFwke01BS0V9Li4uICRFQ0hPX0MiID4mNgorc2V0IGR1bW15ICR7TUFLRS1tYWtlfTsgYWNfbWFrZT1gZWNobyAiJDIiIHwgc2VkICd5LC4vKy0sX19wXywnYAoraWYgZXZhbCAidGVzdCBcIlwke2FjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldCtzZXR9XCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QubWFrZSA8PFxFT0YKK2FsbDoKKwlAZWNobyAnYWNfbWFrZXRlbXA9IiR7TUFLRX0iJworRU9GCisjIEdOVSBtYWtlIHNvbWV0aW1lcyBwcmludHMgIm1ha2VbMV06IEVudGVyaW5nLi4uIiwgd2hpY2ggd291bGQgY29uZnVzZSB1cy4KK2V2YWwgYCR7TUFLRS1tYWtlfSAtZiBjb25mdGVzdC5tYWtlIDI+L2Rldi9udWxsIHwgZ3JlcCB0ZW1wPWAKK2lmIHRlc3QgLW4gIiRhY19tYWtldGVtcCI7IHRoZW4KKyAgZXZhbCBhY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQ9eWVzCitlbHNlCisgIGV2YWwgYWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0PW5vCitmaQorcm0gLWYgY29uZnRlc3QubWFrZQorZmkKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X3Byb2dfbWFrZV8nJHthY19tYWtlfV9zZXRgXCIgPSB5ZXMiOyB0aGVuCisgIGVjaG8gIiRhc19tZToyNzIzOiByZXN1bHQ6IHllcyIgPiY1CitlY2hvICIke0VDSE9fVH15ZXMiID4mNgorICBTRVRfTUFLRT0KK2Vsc2UKKyAgZWNobyAiJGFzX21lOjI3Mjc6IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorICBTRVRfTUFLRT0iTUFLRT0ke01BS0UtbWFrZX0iCitmaQorCitmb3IgYWNfcHJvZyBpbiBleGN0YWdzIGN0YWdzCitkbworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgorZWNobyAiJGFzX21lOjI3MzY6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DVEFHUytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQ1RBR1MiOyB0aGVuCisgIGFjX2N2X3Byb2dfQ1RBR1M9IiRDVEFHUyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCisgIGFjX3NhdmVfSUZTPSRJRlM7IElGUz0kYWNfcGF0aF9zZXBhcmF0b3IKK2FjX2R1bW15PSIkUEFUSCIKK2ZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbworICBJRlM9JGFjX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICRhc19leGVjdXRhYmxlX3AgIiRhY19kaXIvJGFjX3dvcmQiIHx8IGNvbnRpbnVlCithY19jdl9wcm9nX0NUQUdTPSIkYWNfcHJvZyIKK2VjaG8gIiRhc19tZToyNzUxOiBmb3VuZCAkYWNfZGlyLyRhY193b3JkIiA+JjUKK2JyZWFrCitkb25lCisKK2ZpCitmaQorQ1RBR1M9JGFjX2N2X3Byb2dfQ1RBR1MKK2lmIHRlc3QgLW4gIiRDVEFHUyI7IHRoZW4KKyAgZWNobyAiJGFzX21lOjI3NTk6IHJlc3VsdDogJENUQUdTIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRDVEFHUyIgPiY2CitlbHNlCisgIGVjaG8gIiRhc19tZToyNzYyOiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjYKK2ZpCisKKyAgdGVzdCAtbiAiJENUQUdTIiAmJiBicmVhaworZG9uZQorCitmb3IgYWNfcHJvZyBpbiBleGV0YWdzIGV0YWdzCitkbworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgorZWNobyAiJGFzX21lOjI3NzM6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19FVEFHUytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkRVRBR1MiOyB0aGVuCisgIGFjX2N2X3Byb2dfRVRBR1M9IiRFVEFHUyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCisgIGFjX3NhdmVfSUZTPSRJRlM7IElGUz0kYWNfcGF0aF9zZXBhcmF0b3IKK2FjX2R1bW15PSIkUEFUSCIKK2ZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbworICBJRlM9JGFjX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICRhc19leGVjdXRhYmxlX3AgIiRhY19kaXIvJGFjX3dvcmQiIHx8IGNvbnRpbnVlCithY19jdl9wcm9nX0VUQUdTPSIkYWNfcHJvZyIKK2VjaG8gIiRhc19tZToyNzg4OiBmb3VuZCAkYWNfZGlyLyRhY193b3JkIiA+JjUKK2JyZWFrCitkb25lCisKK2ZpCitmaQorRVRBR1M9JGFjX2N2X3Byb2dfRVRBR1MKK2lmIHRlc3QgLW4gIiRFVEFHUyI7IHRoZW4KKyAgZWNobyAiJGFzX21lOjI3OTY6IHJlc3VsdDogJEVUQUdTIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRFVEFHUyIgPiY2CitlbHNlCisgIGVjaG8gIiRhc19tZToyNzk5OiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjYKK2ZpCisKKyAgdGVzdCAtbiAiJEVUQUdTIiAmJiBicmVhaworZG9uZQorCisjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7Q1RBR1M6LWN0YWdzfSIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHtDVEFHUzotY3RhZ3N9OyBhY193b3JkPSQyCitlY2hvICIkYXNfbWU6MjgwODogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9wcm9nX01BS0VfTE9XRVJfVEFHUytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkTUFLRV9MT1dFUl9UQUdTIjsgdGhlbgorICBhY19jdl9wcm9nX01BS0VfTE9XRVJfVEFHUz0iJE1BS0VfTE9XRVJfVEFHUyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCisgIGFjX3NhdmVfSUZTPSRJRlM7IElGUz0kYWNfcGF0aF9zZXBhcmF0b3IKK2FjX2R1bW15PSIkUEFUSCIKK2ZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbworICBJRlM9JGFjX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICRhc19leGVjdXRhYmxlX3AgIiRhY19kaXIvJGFjX3dvcmQiIHx8IGNvbnRpbnVlCithY19jdl9wcm9nX01BS0VfTE9XRVJfVEFHUz0ieWVzIgorZWNobyAiJGFzX21lOjI4MjM6IGZvdW5kICRhY19kaXIvJGFjX3dvcmQiID4mNQorYnJlYWsKK2RvbmUKKworICB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19NQUtFX0xPV0VSX1RBR1MiICYmIGFjX2N2X3Byb2dfTUFLRV9MT1dFUl9UQUdTPSJubyIKK2ZpCitmaQorTUFLRV9MT1dFUl9UQUdTPSRhY19jdl9wcm9nX01BS0VfTE9XRVJfVEFHUworaWYgdGVzdCAtbiAiJE1BS0VfTE9XRVJfVEFHUyI7IHRoZW4KKyAgZWNobyAiJGFzX21lOjI4MzI6IHJlc3VsdDogJE1BS0VfTE9XRVJfVEFHUyIgPiY1CitlY2hvICIke0VDSE9fVH0kTUFLRV9MT1dFUl9UQUdTIiA+JjYKK2Vsc2UKKyAgZWNobyAiJGFzX21lOjI4MzU6IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorZmkKKworaWYgdGVzdCAiJGNmX2N2X21peGVkY2FzZSIgPSB5ZXMgOyB0aGVuCisJIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke0VUQUdTOi1ldGFnc30iLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7RVRBR1M6LWV0YWdzfTsgYWNfd29yZD0kMgorZWNobyAiJGFzX21lOjI4NDI6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19NQUtFX1VQUEVSX1RBR1Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJE1BS0VfVVBQRVJfVEFHUyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19NQUtFX1VQUEVSX1RBR1M9IiRNQUtFX1VQUEVSX1RBR1MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorICBhY19zYXZlX0lGUz0kSUZTOyBJRlM9JGFjX3BhdGhfc2VwYXJhdG9yCithY19kdW1teT0iJFBBVEgiCitmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKyAgSUZTPSRhY19zYXZlX0lGUworICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAkYXNfZXhlY3V0YWJsZV9wICIkYWNfZGlyLyRhY193b3JkIiB8fCBjb250aW51ZQorYWNfY3ZfcHJvZ19NQUtFX1VQUEVSX1RBR1M9InllcyIKK2VjaG8gIiRhc19tZToyODU3OiBmb3VuZCAkYWNfZGlyLyRhY193b3JkIiA+JjUKK2JyZWFrCitkb25lCisKKyAgdGVzdCAteiAiJGFjX2N2X3Byb2dfTUFLRV9VUFBFUl9UQUdTIiAmJiBhY19jdl9wcm9nX01BS0VfVVBQRVJfVEFHUz0ibm8iCitmaQorZmkKK01BS0VfVVBQRVJfVEFHUz0kYWNfY3ZfcHJvZ19NQUtFX1VQUEVSX1RBR1MKK2lmIHRlc3QgLW4gIiRNQUtFX1VQUEVSX1RBR1MiOyB0aGVuCisgIGVjaG8gIiRhc19tZToyODY2OiByZXN1bHQ6ICRNQUtFX1VQUEVSX1RBR1MiID4mNQorZWNobyAiJHtFQ0hPX1R9JE1BS0VfVVBQRVJfVEFHUyIgPiY2CitlbHNlCisgIGVjaG8gIiRhc19tZToyODY5OiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjYKK2ZpCisKK2Vsc2UKKwlNQUtFX1VQUEVSX1RBR1M9bm8KK2ZpCisKK2lmIHRlc3QgIiRNQUtFX1VQUEVSX1RBR1MiID0geWVzIDsgdGhlbgorCU1BS0VfVVBQRVJfVEFHUz0KK2Vsc2UKKwlNQUtFX1VQUEVSX1RBR1M9IiMiCitmaQorCitpZiB0ZXN0ICIkTUFLRV9MT1dFUl9UQUdTIiA9IHllcyA7IHRoZW4KKwlNQUtFX0xPV0VSX1RBR1M9CitlbHNlCisJTUFLRV9MT1dFUl9UQUdTPSIjIgorZmkKKworZWNobyAiJGFzX21lOjI4ODk6IGNoZWNraW5nIGZvciBtYWtlZmxhZ3MgdmFyaWFibGUiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbWFrZWZsYWdzIHZhcmlhYmxlLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHtjZl9jdl9tYWtlZmxhZ3Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKworCWNmX2N2X21ha2VmbGFncz0nJworCWZvciBjZl9vcHRpb24gaW4gJy0ke01BS0VGTEFHU30nICcke01GTEFHU30nCisJZG8KKwkJY2F0ID5jZl9tYWtlZmxhZ3MudG1wIDw8Q0ZfRU9GCitTSEVMTCA9ICRTSEVMTAorYWxsIDoKKwlAIGVjaG8gJy4kY2Zfb3B0aW9uJworQ0ZfRU9GCisJCWNmX3Jlc3VsdD1gJHtNQUtFOi1tYWtlfSAtayAtZiBjZl9tYWtlZmxhZ3MudG1wIDI+L2Rldi9udWxsIHwgZmdyZXAgLXYgImluZyBkaXJlY3RvcnkiIHwgc2VkIC1lICdzLFsgCV0qJCwsJ2AKKwkJY2FzZSAiJGNmX3Jlc3VsdCIgaW4KKwkJKC4qa3wuKmt3KQorCQkJY2ZfcmVzdWx0PWAke01BS0U6LW1ha2V9IC1rIC1mIGNmX21ha2VmbGFncy50bXAgQ0M9Y2MgMj4vZGV2L251bGxgCisJCQljYXNlICIkY2ZfcmVzdWx0IiBpbgorCQkJKC4qQ0M9KikJY2ZfY3ZfbWFrZWZsYWdzPQorCQkJCTs7CisJCQkoKikJY2ZfY3ZfbWFrZWZsYWdzPSRjZl9vcHRpb24KKwkJCQk7OworCQkJZXNhYworCQkJYnJlYWsKKwkJCTs7CisJCSguLSkJOzsKKwkJKCopCWVjaG8gImdpdmVuIG9wdGlvbiBcIiRjZl9vcHRpb25cIiwgbm8gbWF0Y2ggXCIkY2ZfcmVzdWx0XCIiCisJCQk7OworCQllc2FjCisJZG9uZQorCXJtIC1mIGNmX21ha2VmbGFncy50bXAKKworZmkKK2VjaG8gIiRhc19tZToyOTIzOiByZXN1bHQ6ICRjZl9jdl9tYWtlZmxhZ3MiID4mNQorZWNobyAiJHtFQ0hPX1R9JGNmX2N2X21ha2VmbGFncyIgPiY2CisKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fXJhbmxpYiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1yYW5saWI7IGFjX3dvcmQ9JDIKK2VjaG8gIiRhc19tZToyOTI5OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfUkFOTElCK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgIGFjX2N2X3Byb2dfUkFOTElCPSIkUkFOTElCIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKKyAgYWNfc2F2ZV9JRlM9JElGUzsgSUZTPSRhY19wYXRoX3NlcGFyYXRvcgorYWNfZHVtbXk9IiRQQVRIIgorZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCisgIElGUz0kYWNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgJGFzX2V4ZWN1dGFibGVfcCAiJGFjX2Rpci8kYWNfd29yZCIgfHwgY29udGludWUKK2FjX2N2X3Byb2dfUkFOTElCPSIke2FjX3Rvb2xfcHJlZml4fXJhbmxpYiIKK2VjaG8gIiRhc19tZToyOTQ0OiBmb3VuZCAkYWNfZGlyLyRhY193b3JkIiA+JjUKK2JyZWFrCitkb25lCisKK2ZpCitmaQorUkFOTElCPSRhY19jdl9wcm9nX1JBTkxJQgoraWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgZWNobyAiJGFzX21lOjI5NTI6IHJlc3VsdDogJFJBTkxJQiIgPiY1CitlY2hvICIke0VDSE9fVH0kUkFOTElCIiA+JjYKK2Vsc2UKKyAgZWNobyAiJGFzX21lOjI5NTU6IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorZmkKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX1JBTkxJQiI7IHRoZW4KKyAgYWNfY3RfUkFOTElCPSRSQU5MSUIKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJyYW5saWIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IHJhbmxpYjsgYWNfd29yZD0kMgorZWNobyAiJGFzX21lOjI5NjQ6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9SQU5MSUIrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X1JBTkxJQiI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUI9IiRhY19jdF9SQU5MSUIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorICBhY19zYXZlX0lGUz0kSUZTOyBJRlM9JGFjX3BhdGhfc2VwYXJhdG9yCithY19kdW1teT0iJFBBVEgiCitmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKyAgSUZTPSRhY19zYXZlX0lGUworICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAkYXNfZXhlY3V0YWJsZV9wICIkYWNfZGlyLyRhY193b3JkIiB8fCBjb250aW51ZQorYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUI9InJhbmxpYiIKK2VjaG8gIiRhc19tZToyOTc5OiBmb3VuZCAkYWNfZGlyLyRhY193b3JkIiA+JjUKK2JyZWFrCitkb25lCisKKyAgdGVzdCAteiAiJGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCIiAmJiBhY19jdl9wcm9nX2FjX2N0X1JBTkxJQj0iJzonIgorZmkKK2ZpCithY19jdF9SQU5MSUI9JGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCCitpZiB0ZXN0IC1uICIkYWNfY3RfUkFOTElCIjsgdGhlbgorICBlY2hvICIkYXNfbWU6Mjk4ODogcmVzdWx0OiAkYWNfY3RfUkFOTElCIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdF9SQU5MSUIiID4mNgorZWxzZQorICBlY2hvICIkYXNfbWU6Mjk5MTogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2CitmaQorCisgIFJBTkxJQj0kYWNfY3RfUkFOTElCCitlbHNlCisgIFJBTkxJQj0iJGFjX2N2X3Byb2dfUkFOTElCIgorZmkKKworaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9bGQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9bGQ7IGFjX3dvcmQ9JDIKK2VjaG8gIiRhc19tZTozMDAzOiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfTEQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJExEIjsgdGhlbgorICBhY19jdl9wcm9nX0xEPSIkTEQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorICBhY19zYXZlX0lGUz0kSUZTOyBJRlM9JGFjX3BhdGhfc2VwYXJhdG9yCithY19kdW1teT0iJFBBVEgiCitmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKyAgSUZTPSRhY19zYXZlX0lGUworICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAkYXNfZXhlY3V0YWJsZV9wICIkYWNfZGlyLyRhY193b3JkIiB8fCBjb250aW51ZQorYWNfY3ZfcHJvZ19MRD0iJHthY190b29sX3ByZWZpeH1sZCIKK2VjaG8gIiRhc19tZTozMDE4OiBmb3VuZCAkYWNfZGlyLyRhY193b3JkIiA+JjUKK2JyZWFrCitkb25lCisKK2ZpCitmaQorTEQ9JGFjX2N2X3Byb2dfTEQKK2lmIHRlc3QgLW4gIiRMRCI7IHRoZW4KKyAgZWNobyAiJGFzX21lOjMwMjY6IHJlc3VsdDogJExEIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRMRCIgPiY2CitlbHNlCisgIGVjaG8gIiRhc19tZTozMDI5OiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjYKK2ZpCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19MRCI7IHRoZW4KKyAgYWNfY3RfTEQ9JExECisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibGQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGxkOyBhY193b3JkPSQyCitlY2hvICIkYXNfbWU6MzAzODogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0xEK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9MRCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9MRD0iJGFjX2N0X0xEIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKKyAgYWNfc2F2ZV9JRlM9JElGUzsgSUZTPSRhY19wYXRoX3NlcGFyYXRvcgorYWNfZHVtbXk9IiRQQVRIIgorZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCisgIElGUz0kYWNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgJGFzX2V4ZWN1dGFibGVfcCAiJGFjX2Rpci8kYWNfd29yZCIgfHwgY29udGludWUKK2FjX2N2X3Byb2dfYWNfY3RfTEQ9ImxkIgorZWNobyAiJGFzX21lOjMwNTM6IGZvdW5kICRhY19kaXIvJGFjX3dvcmQiID4mNQorYnJlYWsKK2RvbmUKKworICB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19hY19jdF9MRCIgJiYgYWNfY3ZfcHJvZ19hY19jdF9MRD0ibGQiCitmaQorZmkKK2FjX2N0X0xEPSRhY19jdl9wcm9nX2FjX2N0X0xECitpZiB0ZXN0IC1uICIkYWNfY3RfTEQiOyB0aGVuCisgIGVjaG8gIiRhc19tZTozMDYyOiByZXN1bHQ6ICRhY19jdF9MRCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3RfTEQiID4mNgorZWxzZQorICBlY2hvICIkYXNfbWU6MzA2NTogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2CitmaQorCisgIExEPSRhY19jdF9MRAorZWxzZQorICBMRD0iJGFjX2N2X3Byb2dfTEQiCitmaQorCitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1hciIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1hcjsgYWNfd29yZD0kMgorZWNobyAiJGFzX21lOjMwNzc6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19BUitzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQVIiOyB0aGVuCisgIGFjX2N2X3Byb2dfQVI9IiRBUiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCisgIGFjX3NhdmVfSUZTPSRJRlM7IElGUz0kYWNfcGF0aF9zZXBhcmF0b3IKK2FjX2R1bW15PSIkUEFUSCIKK2ZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbworICBJRlM9JGFjX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICRhc19leGVjdXRhYmxlX3AgIiRhY19kaXIvJGFjX3dvcmQiIHx8IGNvbnRpbnVlCithY19jdl9wcm9nX0FSPSIke2FjX3Rvb2xfcHJlZml4fWFyIgorZWNobyAiJGFzX21lOjMwOTI6IGZvdW5kICRhY19kaXIvJGFjX3dvcmQiID4mNQorYnJlYWsKK2RvbmUKKworZmkKK2ZpCitBUj0kYWNfY3ZfcHJvZ19BUgoraWYgdGVzdCAtbiAiJEFSIjsgdGhlbgorICBlY2hvICIkYXNfbWU6MzEwMDogcmVzdWx0OiAkQVIiID4mNQorZWNobyAiJHtFQ0hPX1R9JEFSIiA+JjYKK2Vsc2UKKyAgZWNobyAiJGFzX21lOjMxMDM6IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorZmkKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX0FSIjsgdGhlbgorICBhY19jdF9BUj0kQVIKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJhciIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgYXI7IGFjX3dvcmQ9JDIKK2VjaG8gIiRhc19tZTozMTEyOiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQVIrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0FSIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0FSPSIkYWNfY3RfQVIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorICBhY19zYXZlX0lGUz0kSUZTOyBJRlM9JGFjX3BhdGhfc2VwYXJhdG9yCithY19kdW1teT0iJFBBVEgiCitmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKyAgSUZTPSRhY19zYXZlX0lGUworICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAkYXNfZXhlY3V0YWJsZV9wICIkYWNfZGlyLyRhY193b3JkIiB8fCBjb250aW51ZQorYWNfY3ZfcHJvZ19hY19jdF9BUj0iYXIiCitlY2hvICIkYXNfbWU6MzEyNzogZm91bmQgJGFjX2Rpci8kYWNfd29yZCIgPiY1CiticmVhaworZG9uZQorCisgIHRlc3QgLXogIiRhY19jdl9wcm9nX2FjX2N0X0FSIiAmJiBhY19jdl9wcm9nX2FjX2N0X0FSPSJhciIKK2ZpCitmaQorYWNfY3RfQVI9JGFjX2N2X3Byb2dfYWNfY3RfQVIKK2lmIHRlc3QgLW4gIiRhY19jdF9BUiI7IHRoZW4KKyAgZWNobyAiJGFzX21lOjMxMzY6IHJlc3VsdDogJGFjX2N0X0FSIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdF9BUiIgPiY2CitlbHNlCisgIGVjaG8gIiRhc19tZTozMTM5OiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjYKK2ZpCisKKyAgQVI9JGFjX2N0X0FSCitlbHNlCisgIEFSPSIkYWNfY3ZfcHJvZ19BUiIKK2ZpCisKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWFyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWFyOyBhY193b3JkPSQyCitlY2hvICIkYXNfbWU6MzE1MTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9wcm9nX0FSK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRBUiI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19BUj0iJEFSIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKKyAgYWNfc2F2ZV9JRlM9JElGUzsgSUZTPSRhY19wYXRoX3NlcGFyYXRvcgorYWNfZHVtbXk9IiRQQVRIIgorZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCisgIElGUz0kYWNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgJGFzX2V4ZWN1dGFibGVfcCAiJGFjX2Rpci8kYWNfd29yZCIgfHwgY29udGludWUKK2FjX2N2X3Byb2dfQVI9IiR7YWNfdG9vbF9wcmVmaXh9YXIiCitlY2hvICIkYXNfbWU6MzE2NjogZm91bmQgJGFjX2Rpci8kYWNfd29yZCIgPiY1CiticmVhaworZG9uZQorCitmaQorZmkKK0FSPSRhY19jdl9wcm9nX0FSCitpZiB0ZXN0IC1uICIkQVIiOyB0aGVuCisgIGVjaG8gIiRhc19tZTozMTc0OiByZXN1bHQ6ICRBUiIgPiY1CitlY2hvICIke0VDSE9fVH0kQVIiID4mNgorZWxzZQorICBlY2hvICIkYXNfbWU6MzE3NzogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2CitmaQorCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfQVIiOyB0aGVuCisgIGFjX2N0X0FSPSRBUgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImFyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBhcjsgYWNfd29yZD0kMgorZWNobyAiJGFzX21lOjMxODY6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9BUitzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfQVIiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfQVI9IiRhY19jdF9BUiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCisgIGFjX3NhdmVfSUZTPSRJRlM7IElGUz0kYWNfcGF0aF9zZXBhcmF0b3IKK2FjX2R1bW15PSIkUEFUSCIKK2ZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbworICBJRlM9JGFjX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICRhc19leGVjdXRhYmxlX3AgIiRhY19kaXIvJGFjX3dvcmQiIHx8IGNvbnRpbnVlCithY19jdl9wcm9nX2FjX2N0X0FSPSJhciIKK2VjaG8gIiRhc19tZTozMjAxOiBmb3VuZCAkYWNfZGlyLyRhY193b3JkIiA+JjUKK2JyZWFrCitkb25lCisKKyAgdGVzdCAteiAiJGFjX2N2X3Byb2dfYWNfY3RfQVIiICYmIGFjX2N2X3Byb2dfYWNfY3RfQVI9ImFyIgorZmkKK2ZpCithY19jdF9BUj0kYWNfY3ZfcHJvZ19hY19jdF9BUgoraWYgdGVzdCAtbiAiJGFjX2N0X0FSIjsgdGhlbgorICBlY2hvICIkYXNfbWU6MzIxMDogcmVzdWx0OiAkYWNfY3RfQVIiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N0X0FSIiA+JjYKK2Vsc2UKKyAgZWNobyAiJGFzX21lOjMyMTM6IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorZmkKKworICBBUj0kYWNfY3RfQVIKK2Vsc2UKKyAgQVI9IiRhY19jdl9wcm9nX0FSIgorZmkKKworZWNobyAiJGFzX21lOjMyMjI6IGNoZWNraW5nIGZvciBvcHRpb25zIHRvIHVwZGF0ZSBhcmNoaXZlcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBvcHRpb25zIHRvIHVwZGF0ZSBhcmNoaXZlcy4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7Y2ZfY3ZfYXJfZmxhZ3Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKworCWNmX2N2X2FyX2ZsYWdzPXVua25vd24KKwlmb3IgY2ZfYXJfZmxhZ3MgaW4gLWN1cnYgY3VydiAtY3J2IGNydiAtY3F2IGNxdiAtcnYgcnYKKwlkbworCisJCSMgY2hlY2sgaWYgJEFSRkxBR1MgYWxyZWFkeSBjb250YWlucyB0aGlzIGNob2ljZQorCQlpZiB0ZXN0ICJ4JEFSRkxBR1MiICE9ICJ4IiA7IHRoZW4KKwkJCWNmX2NoZWNrX2FyX2ZsYWdzPWBlY2hvICJ4JEFSRkxBR1MiIHwgc2VkIC1lICJzLyRjZl9hcl9mbGFnc1wkLy8iIC1lICJzLyRjZl9hcl9mbGFncyAvIC8iYAorCQkJaWYgdGVzdCAieCRBUkZMQUdTIiAhPSAiJGNmX2NoZWNrX2FyX2ZsYWdzIiA7IHRoZW4KKwkJCQljZl9jdl9hcl9mbGFncz0KKwkJCQlicmVhaworCQkJZmkKKwkJZmkKKworCQlybSAtZiBjb25mdGVzdC4kYWNfY3Zfb2JqZXh0CisJCXJtIC1mIGNvbmZ0ZXN0LmEKKworCQljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDMyNDUgImNvbmZpZ3VyZSIKK2ludAl0ZXN0ZGF0YVszXSA9IHsgMTIzLCA0NTYsIDc4OSB9OworRU9GCisJCWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOjMyNDg6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjMyNTE6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA7IHRoZW4KKwkJCWVjaG8gIiRBUiAkQVJGTEFHUyAkY2ZfYXJfZmxhZ3MgY29uZnRlc3QuYSBjb25mdGVzdC4kYWNfY3Zfb2JqZXh0IiA+JjUKKwkJCSRBUiAkQVJGTEFHUyAkY2ZfYXJfZmxhZ3MgY29uZnRlc3QuYSBjb25mdGVzdC4kYWNfY3Zfb2JqZXh0IDI+JjUgMT4vZGV2L251bGwKKwkJCWlmIHRlc3QgLWYgY29uZnRlc3QuYSA7IHRoZW4KKwkJCQljZl9jdl9hcl9mbGFncz0kY2ZfYXJfZmxhZ3MKKwkJCQlicmVhaworCQkJZmkKKwkJZWxzZQorCQkJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIgljYW5ub3QgY29tcGlsZSB0ZXN0LXByb2dyYW0iIDE+JjYKKworZWNobyAiJHthc19tZTotY29uZmlndXJlfTozMjYyOiB0ZXN0aW5nIGNhbm5vdCBjb21waWxlIHRlc3QtcHJvZ3JhbSAuLi4iIDE+JjUKKworCQkJYnJlYWsKKwkJZmkKKwlkb25lCisJcm0gLWYgY29uZnRlc3QuYSBjb25mdGVzdC4kYWNfZXh0IGNvbmZ0ZXN0LiRhY19jdl9vYmpleHQKKworZmkKK2VjaG8gIiRhc19tZTozMjcwOiByZXN1bHQ6ICRjZl9jdl9hcl9mbGFncyIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfY3ZfYXJfZmxhZ3MiID4mNgorCitpZiB0ZXN0IC1uICIkQVJGTEFHUyIgOyB0aGVuCisJaWYgdGVzdCAtbiAiJGNmX2N2X2FyX2ZsYWdzIiA7IHRoZW4KKwkJQVJGTEFHUz0iJEFSRkxBR1MgJGNmX2N2X2FyX2ZsYWdzIgorCWZpCitlbHNlCisJQVJGTEFHUz0kY2ZfY3ZfYXJfZmxhZ3MKK2ZpCisKKwllY2hvICIkYXNfbWU6MzI4MTogY2hlY2tpbmcgZm9yIFBBVEggc2VwYXJhdG9yIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIFBBVEggc2VwYXJhdG9yLi4uICRFQ0hPX0MiID4mNgorCWNhc2UgJGNmX2N2X3N5c3RlbV9uYW1lIGluCisJKG9zMiopCVBBVEhfU0VQQVJBVE9SPSc7JyAgOzsKKwkoKikJJHtQQVRIX1NFUEFSQVRPUjo9JzonfSAgOzsKKwllc2FjCisKKwllY2hvICIkYXNfbWU6MzI4ODogcmVzdWx0OiAkUEFUSF9TRVBBUkFUT1IiID4mNQorZWNobyAiJHtFQ0hPX1R9JFBBVEhfU0VQQVJBVE9SIiA+JjYKKworZWNobyAiJGFzX21lOjMyOTE6IGNoZWNraW5nIGlmIHlvdSBoYXZlIHNwZWNpZmllZCBhbiBpbnN0YWxsLXByZWZpeCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHlvdSBoYXZlIHNwZWNpZmllZCBhbiBpbnN0YWxsLXByZWZpeC4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1pbnN0YWxsLXByZWZpeCBvciAtLXdpdGhvdXQtaW5zdGFsbC1wcmVmaXggd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2luc3RhbGxfcHJlZml4K3NldH0iID0gc2V0OyB0aGVuCisgIHdpdGh2YWw9IiR3aXRoX2luc3RhbGxfcHJlZml4IgorICBjYXNlICIkd2l0aHZhbCIgaW4KKwkoeWVzfG5vKQorCQk7OworCSgqKQlERVNURElSPSIkd2l0aHZhbCIKKwkJOzsKKwllc2FjCitmaTsKK2VjaG8gIiRhc19tZTozMzA0OiByZXN1bHQ6ICRERVNURElSIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRERVNURElSIiA+JjYKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIElmIHdlJ3JlIGNyb3NzLWNvbXBpbGluZywgYWxsb3cgdGhlIHVzZXIgdG8gb3ZlcnJpZGUgdGhlIHRvb2xzIGFuZCB0aGVpcgorIyBvcHRpb25zLiAgVGhlIGNvbmZpZ3VyZSBzY3JpcHQgaXMgb3JpZW50ZWQgdG93YXJkIGlkZW50aWZ5aW5nIHRoZSBob3N0CisjIGNvbXBpbGVyLCBldGMuLCBidXQgd2UgbmVlZCBhIGJ1aWxkIGNvbXBpbGVyIHRvIGdlbmVyYXRlIHBhcnRzIG9mIHRoZSBzb3VyY2UuCisKK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIDsgdGhlbgorCisJIyBkZWZhdWx0cyB0aGF0IHdlIG1pZ2h0IHdhbnQgdG8gb3ZlcnJpZGUKKwk6ICR7QlVJTERfQ0ZMQUdTOj0nJ30KKwk6ICR7QlVJTERfQ1BQRkxBR1M6PScnfQorCTogJHtCVUlMRF9MREZMQUdTOj0nJ30KKwk6ICR7QlVJTERfTElCUzo9Jyd9CisJOiAke0JVSUxEX0VYRUVYVDo9JyR4J30KKwk6ICR7QlVJTERfT0JKRVhUOj0nbyd9CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtYnVpbGQtY2Mgb3IgLS13aXRob3V0LWJ1aWxkLWNjIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9idWlsZF9jYytzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF9idWlsZF9jYyIKKyAgQlVJTERfQ0M9IiR3aXRodmFsIgorZWxzZQorICBmb3IgYWNfcHJvZyBpbiBnY2MgY2MgY2wKK2RvCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCitlY2hvICIkYXNfbWU6MzMzMjogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9wcm9nX0JVSUxEX0NDK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRCVUlMRF9DQyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19CVUlMRF9DQz0iJEJVSUxEX0NDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKKyAgYWNfc2F2ZV9JRlM9JElGUzsgSUZTPSRhY19wYXRoX3NlcGFyYXRvcgorYWNfZHVtbXk9IiRQQVRIIgorZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCisgIElGUz0kYWNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgJGFzX2V4ZWN1dGFibGVfcCAiJGFjX2Rpci8kYWNfd29yZCIgfHwgY29udGludWUKK2FjX2N2X3Byb2dfQlVJTERfQ0M9IiRhY19wcm9nIgorZWNobyAiJGFzX21lOjMzNDc6IGZvdW5kICRhY19kaXIvJGFjX3dvcmQiID4mNQorYnJlYWsKK2RvbmUKKworZmkKK2ZpCitCVUlMRF9DQz0kYWNfY3ZfcHJvZ19CVUlMRF9DQworaWYgdGVzdCAtbiAiJEJVSUxEX0NDIjsgdGhlbgorICBlY2hvICIkYXNfbWU6MzM1NTogcmVzdWx0OiAkQlVJTERfQ0MiID4mNQorZWNobyAiJHtFQ0hPX1R9JEJVSUxEX0NDIiA+JjYKK2Vsc2UKKyAgZWNobyAiJGFzX21lOjMzNTg6IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorZmkKKworICB0ZXN0IC1uICIkQlVJTERfQ0MiICYmIGJyZWFrCitkb25lCisKK2ZpOworCWVjaG8gIiRhc19tZTozMzY2OiBjaGVja2luZyBmb3IgbmF0aXZlIGJ1aWxkIEMgY29tcGlsZXIiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbmF0aXZlIGJ1aWxkIEMgY29tcGlsZXIuLi4gJEVDSE9fQyIgPiY2CisJZWNobyAiJGFzX21lOjMzNjg6IHJlc3VsdDogJEJVSUxEX0NDIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRCVUlMRF9DQyIgPiY2CisKKwllY2hvICIkYXNfbWU6MzM3MTogY2hlY2tpbmcgZm9yIG5hdGl2ZSBidWlsZCBDIHByZXByb2Nlc3NvciIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBuYXRpdmUgYnVpbGQgQyBwcmVwcm9jZXNzb3IuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtYnVpbGQtY3BwIG9yIC0td2l0aG91dC1idWlsZC1jcHAgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2J1aWxkX2NwcCtzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF9idWlsZF9jcHAiCisgIEJVSUxEX0NQUD0iJHdpdGh2YWwiCitlbHNlCisgIEJVSUxEX0NQUD0nJHtCVUlMRF9DQ30gLUUnCitmaTsKKwllY2hvICIkYXNfbWU6MzM4MTogcmVzdWx0OiAkQlVJTERfQ1BQIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRCVUlMRF9DUFAiID4mNgorCisJZWNobyAiJGFzX21lOjMzODQ6IGNoZWNraW5nIGZvciBuYXRpdmUgYnVpbGQgQyBmbGFncyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBuYXRpdmUgYnVpbGQgQyBmbGFncy4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1idWlsZC1jZmxhZ3Mgb3IgLS13aXRob3V0LWJ1aWxkLWNmbGFncyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfYnVpbGRfY2ZsYWdzK3NldH0iID0gc2V0OyB0aGVuCisgIHdpdGh2YWw9IiR3aXRoX2J1aWxkX2NmbGFncyIKKyAgQlVJTERfQ0ZMQUdTPSIkd2l0aHZhbCIKK2ZpOworCWVjaG8gIiRhc19tZTozMzkyOiByZXN1bHQ6ICRCVUlMRF9DRkxBR1MiID4mNQorZWNobyAiJHtFQ0hPX1R9JEJVSUxEX0NGTEFHUyIgPiY2CisKKwllY2hvICIkYXNfbWU6MzM5NTogY2hlY2tpbmcgZm9yIG5hdGl2ZSBidWlsZCBDIHByZXByb2Nlc3Nvci1mbGFncyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBuYXRpdmUgYnVpbGQgQyBwcmVwcm9jZXNzb3ItZmxhZ3MuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtYnVpbGQtY3BwZmxhZ3Mgb3IgLS13aXRob3V0LWJ1aWxkLWNwcGZsYWdzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9idWlsZF9jcHBmbGFncytzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF9idWlsZF9jcHBmbGFncyIKKyAgQlVJTERfQ1BQRkxBR1M9IiR3aXRodmFsIgorZmk7CisJZWNobyAiJGFzX21lOjM0MDM6IHJlc3VsdDogJEJVSUxEX0NQUEZMQUdTIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRCVUlMRF9DUFBGTEFHUyIgPiY2CisKKwllY2hvICIkYXNfbWU6MzQwNjogY2hlY2tpbmcgZm9yIG5hdGl2ZSBidWlsZCBsaW5rZXItZmxhZ3MiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbmF0aXZlIGJ1aWxkIGxpbmtlci1mbGFncy4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1idWlsZC1sZGZsYWdzIG9yIC0td2l0aG91dC1idWlsZC1sZGZsYWdzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9idWlsZF9sZGZsYWdzK3NldH0iID0gc2V0OyB0aGVuCisgIHdpdGh2YWw9IiR3aXRoX2J1aWxkX2xkZmxhZ3MiCisgIEJVSUxEX0xERkxBR1M9IiR3aXRodmFsIgorZmk7CisJZWNobyAiJGFzX21lOjM0MTQ6IHJlc3VsdDogJEJVSUxEX0xERkxBR1MiID4mNQorZWNobyAiJHtFQ0hPX1R9JEJVSUxEX0xERkxBR1MiID4mNgorCisJZWNobyAiJGFzX21lOjM0MTc6IGNoZWNraW5nIGZvciBuYXRpdmUgYnVpbGQgbGlua2VyLWxpYnJhcmllcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBuYXRpdmUgYnVpbGQgbGlua2VyLWxpYnJhcmllcy4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1idWlsZC1saWJzIG9yIC0td2l0aG91dC1idWlsZC1saWJzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9idWlsZF9saWJzK3NldH0iID0gc2V0OyB0aGVuCisgIHdpdGh2YWw9IiR3aXRoX2J1aWxkX2xpYnMiCisgIEJVSUxEX0xJQlM9IiR3aXRodmFsIgorZmk7CisJZWNobyAiJGFzX21lOjM0MjU6IHJlc3VsdDogJEJVSUxEX0xJQlMiID4mNQorZWNobyAiJHtFQ0hPX1R9JEJVSUxEX0xJQlMiID4mNgorCisJIyB0aGlzIGFzc3VtZXMgd2UncmUgb24gVW5peC4KKwlCVUlMRF9FWEVFWFQ9CisJQlVJTERfT0JKRVhUPW8KKworCTogJHtCVUlMRF9DQzo9JyR7Q0N9J30KKworCWlmICggdGVzdCAiJEJVSUxEX0NDIiA9ICIkQ0MiIHx8IHRlc3QgIiRCVUlMRF9DQyIgPSAnJHtDQ30nICkgOyB0aGVuCisJCXsgeyBlY2hvICIkYXNfbWU6MzQzNTogZXJyb3I6IENyb3NzLWJ1aWxkIHJlcXVpcmVzIHR3byBjb21waWxlcnMuCitVc2UgLS13aXRoLWJ1aWxkLWNjIHRvIHNwZWNpZnkgdGhlIG5hdGl2ZSBjb21waWxlci4iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogQ3Jvc3MtYnVpbGQgcmVxdWlyZXMgdHdvIGNvbXBpbGVycy4KK1VzZSAtLXdpdGgtYnVpbGQtY2MgdG8gc3BlY2lmeSB0aGUgbmF0aXZlIGNvbXBpbGVyLiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorCWZpCisKK2Vsc2UKKwk6ICR7QlVJTERfQ0M6PScke0NDfSd9CisJOiAke0JVSUxEX0NQUDo9JyR7Q1BQfSd9CisJOiAke0JVSUxEX0NGTEFHUzo9JyR7Q0ZMQUdTfSd9CisJOiAke0JVSUxEX0NQUEZMQUdTOj0nJHtDUFBGTEFHU30nfQorCTogJHtCVUlMRF9MREZMQUdTOj0nJHtMREZMQUdTfSd9CisJOiAke0JVSUxEX0xJQlM6PScke0xJQlN9J30KKwk6ICR7QlVJTERfRVhFRVhUOj0nJHgnfQorCTogJHtCVUlMRF9PQkpFWFQ6PSdvJ30KK2ZpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMjIE9wdGlvbnMgdG8gYWxsb3cgdGhlIHVzZXIgdG8gc3BlY2lmeSB0aGUgc2V0IG9mIGxpYnJhcmllcyB3aGljaCBhcmUgdXNlZC4KKyMjIyBVc2UgIi0td2l0aG91dC1ub3JtYWwgLS13aXRoLXNoYXJlZCIgdG8gYWxsb3cgdGhlIGRlZmF1bHQgbW9kZWwgdG8gYmUKKyMjIyBzaGFyZWQsIGZvciBleGFtcGxlLgorY2ZfbGlzdF9tb2RlbHM9IiIKKworZWNobyAiJGFzX21lOjM0NjA6IGNoZWNraW5nIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHNoYXJlZCBDLW9iamVjdHMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB5b3Ugd2FudCB0byBidWlsZCBzaGFyZWQgQy1vYmplY3RzLi4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXNoYXJlZCBvciAtLXdpdGhvdXQtc2hhcmVkIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9zaGFyZWQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfc2hhcmVkIgorICB3aXRoX3NoYXJlZD0kd2l0aHZhbAorZWxzZQorICB3aXRoX3NoYXJlZD1ubworZmk7CitlY2hvICIkYXNfbWU6MzQ3MDogcmVzdWx0OiAkd2l0aF9zaGFyZWQiID4mNQorZWNobyAiJHtFQ0hPX1R9JHdpdGhfc2hhcmVkIiA+JjYKK3Rlc3QgIiR3aXRoX3NoYXJlZCIgPSAieWVzIiAmJiBjZl9saXN0X21vZGVscz0iJGNmX2xpc3RfbW9kZWxzIHNoYXJlZCIKKworZWNobyAiJGFzX21lOjM0NzQ6IGNoZWNraW5nIGZvciBzcGVjaWZpZWQgbW9kZWxzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHNwZWNpZmllZCBtb2RlbHMuLi4gJEVDSE9fQyIgPiY2Cit0ZXN0IC16ICIkY2ZfbGlzdF9tb2RlbHMiICYmIGNmX2xpc3RfbW9kZWxzPW5vcm1hbAorZWNobyAiJGFzX21lOjM0Nzc6IHJlc3VsdDogJGNmX2xpc3RfbW9kZWxzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9saXN0X21vZGVscyIgPiY2CisKKyMjIyBVc2UgdGhlIGZpcnN0IG1vZGVsIGFzIHRoZSBkZWZhdWx0LCBhbmQgc2F2ZSBpdHMgc3VmZml4IGZvciB1c2UgaW4gYnVpbGRpbmcKKyMjIyB1cCB0ZXN0LWFwcGxpY2F0aW9ucy4KK2VjaG8gIiRhc19tZTozNDgyOiBjaGVja2luZyBmb3IgZGVmYXVsdCBtb2RlbCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBkZWZhdWx0IG1vZGVsLi4uICRFQ0hPX0MiID4mNgorREZUX0xXUl9NT0RFTD1gZWNobyAiJGNmX2xpc3RfbW9kZWxzIiB8ICRBV0sgJ3twcmludCAkMX0nYAorZWNobyAiJGFzX21lOjM0ODU6IHJlc3VsdDogJERGVF9MV1JfTU9ERUwiID4mNQorZWNobyAiJHtFQ0hPX1R9JERGVF9MV1JfTU9ERUwiID4mNgorCitERlRfVVBSX01PREVMPWBlY2hvICIkREZUX0xXUl9NT0RFTCIgfCBzZWQgeSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyVgCisKK2VjaG8gIiRhc19tZTozNDkwOiBjaGVja2luZyBmb3Igc3BlY2lmaWMgY3Vyc2VzLWRpcmVjdG9yeSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzcGVjaWZpYyBjdXJzZXMtZGlyZWN0b3J5Li4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWN1cnNlcy1kaXIgb3IgLS13aXRob3V0LWN1cnNlcy1kaXIgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2N1cnNlc19kaXIrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfY3Vyc2VzX2RpciIKKyAgY2ZfY3ZfY3Vyc2VzX2Rpcj0kd2l0aHZhbAorZWxzZQorICBjZl9jdl9jdXJzZXNfZGlyPW5vCitmaTsKK2VjaG8gIiRhc19tZTozNTAwOiByZXN1bHQ6ICRjZl9jdl9jdXJzZXNfZGlyIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9jdl9jdXJzZXNfZGlyIiA+JjYKKworaWYgKCB0ZXN0IC1uICIkY2ZfY3ZfY3Vyc2VzX2RpciIgJiYgdGVzdCAiJGNmX2N2X2N1cnNlc19kaXIiICE9ICJubyIgKQordGhlbgorCitpZiB0ZXN0ICJ4JHByZWZpeCIgIT0geE5PTkU7IHRoZW4KKwljZl9wYXRoX3N5bnRheD0iJHByZWZpeCIKK2Vsc2UKKwljZl9wYXRoX3N5bnRheD0iJGFjX2RlZmF1bHRfcHJlZml4IgorZmkKKworY2FzZSAiLiR3aXRodmFsIiBpbgorKC5cJFwoKlwpKnwuXCcqXCcqKQorCTs7CisoLi58Li8qfC5cXCopCisJOzsKKyguW2EtekEtWl06W1xcL10qKSAjIE9TLzIgRU1YCisJOzsKKyguXCR7KnByZWZpeH0qfC5cJHsqZGlyfSopCisJZXZhbCB3aXRodmFsPSIkd2l0aHZhbCIKKwljYXNlICIuJHdpdGh2YWwiIGluCisJKC5OT05FLyopCisJCXdpdGh2YWw9YGVjaG8gJHdpdGh2YWwgfCBzZWQgLWUgcyVOT05FJSRjZl9wYXRoX3N5bnRheCVgCisJCTs7CisJZXNhYworCTs7CisoLm5vfC5OT05FLyopCisJd2l0aHZhbD1gZWNobyAkd2l0aHZhbCB8IHNlZCAtZSBzJU5PTkUlJGNmX3BhdGhfc3ludGF4JWAKKwk7OworKCopCisJeyB7IGVjaG8gIiRhc19tZTozNTMxOiBlcnJvcjogZXhwZWN0ZWQgYSBwYXRobmFtZSwgbm90IFwiJHdpdGh2YWxcIiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBleHBlY3RlZCBhIHBhdGhuYW1lLCBub3QgXCIkd2l0aHZhbFwiIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisJOzsKK2VzYWMKKworCWlmIHRlc3QgLWQgIiRjZl9jdl9jdXJzZXNfZGlyIgorCXRoZW4KKworaWYgdGVzdCAtbiAiJGNmX2N2X2N1cnNlc19kaXIvaW5jbHVkZSIgOyB0aGVuCisgIGZvciBjZl9hZGRfaW5jZGlyIGluICRjZl9jdl9jdXJzZXNfZGlyL2luY2x1ZGUKKyAgZG8KKwl3aGlsZSB0ZXN0ICRjZl9hZGRfaW5jZGlyICE9IC91c3IvaW5jbHVkZQorCWRvCisJICBpZiB0ZXN0IC1kICRjZl9hZGRfaW5jZGlyCisJICB0aGVuCisJCWNmX2hhdmVfaW5jZGlyPW5vCisJCWlmIHRlc3QgLW4gIiRDRkxBR1MkQ1BQRkxBR1MiIDsgdGhlbgorCQkgICMgYSBsb29wIGlzIG5lZWRlZCB0byBlbnN1cmUgd2UgY2FuIGFkZCBzdWJkaXJzIG9mIGV4aXN0aW5nIGRpcnMKKwkJICBmb3IgY2ZfdGVzdF9pbmNkaXIgaW4gJENGTEFHUyAkQ1BQRkxBR1MgOyBkbworCQkJaWYgdGVzdCAiLiRjZl90ZXN0X2luY2RpciIgPSAiLi1JJGNmX2FkZF9pbmNkaXIiIDsgdGhlbgorCQkJICBjZl9oYXZlX2luY2Rpcj15ZXM7IGJyZWFrCisJCQlmaQorCQkgIGRvbmUKKwkJZmkKKworCQlpZiB0ZXN0ICIkY2ZfaGF2ZV9pbmNkaXIiID0gbm8gOyB0aGVuCisJCSAgaWYgdGVzdCAiJGNmX2FkZF9pbmNkaXIiID0gL3Vzci9sb2NhbC9pbmNsdWRlIDsgdGhlbgorCQkJaWYgdGVzdCAiJEdDQyIgPSB5ZXMKKwkJCXRoZW4KKwkJCSAgY2Zfc2F2ZV9DUFBGTEFHUz0kQ1BQRkxBR1MKKwkJCSAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtSSRjZl9hZGRfaW5jZGlyIgorCQkJICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDM1NjQgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CitpbnQKK21haW4gKCkKK3sKK3ByaW50ZigiSGVsbG8iKQorICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTozNTc2OiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTozNTc5OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjM1ODI6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTozNTg1OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgOgorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitjZl9oYXZlX2luY2Rpcj15ZXMKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKwkJCSAgQ1BQRkxBR1M9JGNmX3NhdmVfQ1BQRkxBR1MKKwkJCWZpCisJCSAgZmkKKwkJZmkKKworCQlpZiB0ZXN0ICIkY2ZfaGF2ZV9pbmNkaXIiID0gbm8gOyB0aGVuCisJCSAgdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIglhZGRpbmcgJGNmX2FkZF9pbmNkaXIgdG8gaW5jbHVkZS1wYXRoIiAxPiY2CisKK2VjaG8gIiR7YXNfbWU6LWNvbmZpZ3VyZX06MzYwMjogdGVzdGluZyBhZGRpbmcgJGNmX2FkZF9pbmNkaXIgdG8gaW5jbHVkZS1wYXRoIC4uLiIgMT4mNQorCisJCSAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtSSRjZl9hZGRfaW5jZGlyIgorCisJCSAgY2ZfdG9wX2luY2Rpcj1gZWNobyAkY2ZfYWRkX2luY2RpciB8IHNlZCAtZSAncyUvaW5jbHVkZS8uKiQlL2luY2x1ZGUlJ2AKKwkJICB0ZXN0ICIkY2ZfdG9wX2luY2RpciIgPSAiJGNmX2FkZF9pbmNkaXIiICYmIGJyZWFrCisJCSAgY2ZfYWRkX2luY2Rpcj0iJGNmX3RvcF9pbmNkaXIiCisJCWVsc2UKKwkJICBicmVhaworCQlmaQorCSAgZWxzZQorCQlicmVhaworCSAgZmkKKwlkb25lCisgIGRvbmUKK2ZpCisKK2lmIHRlc3QgLW4gIiRjZl9jdl9jdXJzZXNfZGlyL2xpYiIgOyB0aGVuCisJZm9yIGNmX2FkZF9saWJkaXIgaW4gJGNmX2N2X2N1cnNlc19kaXIvbGliCisJZG8KKwkJaWYgdGVzdCAkY2ZfYWRkX2xpYmRpciA9IC91c3IvbGliIDsgdGhlbgorCQkJOgorCQllbGlmIHRlc3QgLWQgJGNmX2FkZF9saWJkaXIKKwkJdGhlbgorCQkJY2ZfaGF2ZV9saWJkaXI9bm8KKwkJCWlmIHRlc3QgLW4gIiRMREZMQUdTJExJQlMiIDsgdGhlbgorCQkJCSMgYSBsb29wIGlzIG5lZWRlZCB0byBlbnN1cmUgd2UgY2FuIGFkZCBzdWJkaXJzIG9mIGV4aXN0aW5nIGRpcnMKKwkJCQlmb3IgY2ZfdGVzdF9saWJkaXIgaW4gJExERkxBR1MgJExJQlMgOyBkbworCQkJCQlpZiB0ZXN0ICIuJGNmX3Rlc3RfbGliZGlyIiA9ICIuLUwkY2ZfYWRkX2xpYmRpciIgOyB0aGVuCisJCQkJCQljZl9oYXZlX2xpYmRpcj15ZXM7IGJyZWFrCisJCQkJCWZpCisJCQkJZG9uZQorCQkJZmkKKwkJCWlmIHRlc3QgIiRjZl9oYXZlX2xpYmRpciIgPSBubyA7IHRoZW4KKwkJCQl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCWFkZGluZyAkY2ZfYWRkX2xpYmRpciB0byBsaWJyYXJ5LXBhdGgiIDE+JjYKKworZWNobyAiJHthc19tZTotY29uZmlndXJlfTozNjM4OiB0ZXN0aW5nIGFkZGluZyAkY2ZfYWRkX2xpYmRpciB0byBsaWJyYXJ5LXBhdGggLi4uIiAxPiY1CisKKwkJCQlMREZMQUdTPSItTCRjZl9hZGRfbGliZGlyICRMREZMQUdTIgorCQkJZmkKKwkJZmkKKwlkb25lCitmaQorCisJZmkKK2ZpCisKK2NmX25jdWNvbmZpZ19yb290PW5jdXJzZXMKK2NmX2hhdmVfbmN1Y29uZmlnPW5vCisKK2lmIHRlc3QgIngke1BLR19DT05GSUc6PW5vbmV9IiAhPSB4bm9uZTsgdGhlbgorCWVjaG8gIiRhc19tZTozNjUzOiBjaGVja2luZyBwa2ctY29uZmlnIGZvciAkY2ZfbmN1Y29uZmlnX3Jvb3QiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBwa2ctY29uZmlnIGZvciAkY2ZfbmN1Y29uZmlnX3Jvb3QuLi4gJEVDSE9fQyIgPiY2CisJaWYgIiRQS0dfQ09ORklHIiAtLWV4aXN0cyAkY2ZfbmN1Y29uZmlnX3Jvb3QgOyB0aGVuCisJCWVjaG8gIiRhc19tZTozNjU2OiByZXN1bHQ6IHllcyIgPiY1CitlY2hvICIke0VDSE9fVH15ZXMiID4mNgorCisJCWVjaG8gIiRhc19tZTozNjU5OiBjaGVja2luZyBpZiB0aGUgJGNmX25jdWNvbmZpZ19yb290IHBhY2thZ2UgZmlsZXMgd29yayIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHRoZSAkY2ZfbmN1Y29uZmlnX3Jvb3QgcGFja2FnZSBmaWxlcyB3b3JrLi4uICRFQ0hPX0MiID4mNgorCQljZl9oYXZlX25jdWNvbmZpZz11bmtub3duCisKKwkJY2Zfc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorCQljZl9zYXZlX0xJQlM9IiRMSUJTIgorCisJCUNQUEZMQUdTPSIkQ1BQRkxBR1MgYCRQS0dfQ09ORklHIC0tY2ZsYWdzICRjZl9uY3Vjb25maWdfcm9vdGAiCisKK2NmX2FkZF9saWJzPSJgJFBLR19DT05GSUcgLS1saWJzICRjZl9uY3Vjb25maWdfcm9vdGAiCisjIEZpbHRlciBvdXQgZHVwbGljYXRlcyAtIHRoaXMgaGFwcGVucyB3aXRoIGJhZGx5LWRlc2lnbmVkICIucGMiIGZpbGVzLi4uCitmb3IgY2ZfYWRkXzFsaWIgaW4gJExJQlMKK2RvCisJZm9yIGNmX2FkZF8ybGliIGluICRjZl9hZGRfbGlicworCWRvCisJCWlmIHRlc3QgIngkY2ZfYWRkXzFsaWIiID0gIngkY2ZfYWRkXzJsaWIiCisJCXRoZW4KKwkJCWNmX2FkZF8xbGliPQorCQkJYnJlYWsKKwkJZmkKKwlkb25lCisJdGVzdCAtbiAiJGNmX2FkZF8xbGliIiAmJiBjZl9hZGRfbGlicz0iJGNmX2FkZF9saWJzICRjZl9hZGRfMWxpYiIKK2RvbmUKK0xJQlM9IiRjZl9hZGRfbGlicyIKKworCQljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDM2ODUgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPCR7Y2ZfY3ZfbmN1cnNlc19oZWFkZXI6LWN1cnNlcy5ofT4KK2ludAorbWFpbiAoKQoreworaW5pdHNjcigpOyBtb3VzZW1hc2soMCwwKTsgdGdvdG8oKGNoYXIgKikwLCAwLCAwKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjM2OTc6IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjM3MDA6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTozNzAzOiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MzcwNjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgIGNmX2hhdmVfbmN1Y29uZmlnPW1heWJlCitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMzcxMiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8JHtjZl9jdl9uY3Vyc2VzX2hlYWRlcjotY3Vyc2VzLmh9PgorCQkJCWludCBtYWluKHZvaWQpCisJCQkJeyBjaGFyICp4eCA9IGN1cnNlc192ZXJzaW9uKCk7IHJldHVybiAoeHggPT0gMCk7IH0KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTozNzE5OiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTozNzIyOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTozNzI0OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MzcyNzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGNmX2hhdmVfbmN1Y29uZmlnPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorY2ZfaGF2ZV9uY3Vjb25maWc9bm8KK2ZpCitybSAtZiBjb3JlIGNvcmUuKiAqLmNvcmUgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorY2ZfaGF2ZV9uY3Vjb25maWc9bm8KK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisJCWVjaG8gIiRhc19tZTozNzQ0OiByZXN1bHQ6ICRjZl9oYXZlX25jdWNvbmZpZyIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfaGF2ZV9uY3Vjb25maWciID4mNgorCQl0ZXN0ICIkY2ZfaGF2ZV9uY3Vjb25maWciID0gbWF5YmUgJiYgY2ZfaGF2ZV9uY3Vjb25maWc9eWVzCisJCWlmIHRlc3QgIiRjZl9oYXZlX25jdWNvbmZpZyIgIT0gInllcyIKKwkJdGhlbgorCQkJQ1BQRkxBR1M9IiRjZl9zYXZlX0NQUEZMQUdTIgorCQkJTElCUz0iJGNmX3NhdmVfTElCUyIKKwkJCU5DVVJTRVNfQ09ORklHX1BLRz1ub25lCisJCWVsc2UKKworY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgTkNVUlNFUyAxCitFT0YKKworCQkJTkNVUlNFU19DT05GSUdfUEtHPSRjZl9uY3Vjb25maWdfcm9vdAorCQlmaQorCisJZWxzZQorCQllY2hvICIkYXNfbWU6Mzc2MjogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2CisJCU5DVVJTRVNfQ09ORklHX1BLRz1ub25lCisJZmkKK2Vsc2UKKwlOQ1VSU0VTX0NPTkZJR19QS0c9bm9uZQorZmkKKworaWYgdGVzdCAieCRjZl9oYXZlX25jdWNvbmZpZyIgPSAieG5vIjsgdGhlbgorCWVjaG8gIkxvb2tpbmcgZm9yICR7Y2ZfbmN1Y29uZmlnX3Jvb3R9LWNvbmZpZyIKKworaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICBmb3IgYWNfcHJvZyBpbiAke2NmX25jdWNvbmZpZ19yb290fS1jb25maWcgJHtjZl9uY3Vjb25maWdfcm9vdH02LWNvbmZpZyAke2NmX25jdWNvbmZpZ19yb290fTUtY29uZmlnCisgIGRvCisgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKK2VjaG8gIiRhc19tZTozNzc4OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfTkNVUlNFU19DT05GSUcrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJE5DVVJTRVNfQ09ORklHIjsgdGhlbgorICBhY19jdl9wcm9nX05DVVJTRVNfQ09ORklHPSIkTkNVUlNFU19DT05GSUciICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorICBhY19zYXZlX0lGUz0kSUZTOyBJRlM9JGFjX3BhdGhfc2VwYXJhdG9yCithY19kdW1teT0iJFBBVEgiCitmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKyAgSUZTPSRhY19zYXZlX0lGUworICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAkYXNfZXhlY3V0YWJsZV9wICIkYWNfZGlyLyRhY193b3JkIiB8fCBjb250aW51ZQorYWNfY3ZfcHJvZ19OQ1VSU0VTX0NPTkZJRz0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCitlY2hvICIkYXNfbWU6Mzc5MzogZm91bmQgJGFjX2Rpci8kYWNfd29yZCIgPiY1CiticmVhaworZG9uZQorCitmaQorZmkKK05DVVJTRVNfQ09ORklHPSRhY19jdl9wcm9nX05DVVJTRVNfQ09ORklHCitpZiB0ZXN0IC1uICIkTkNVUlNFU19DT05GSUciOyB0aGVuCisgIGVjaG8gIiRhc19tZTozODAxOiByZXN1bHQ6ICROQ1VSU0VTX0NPTkZJRyIgPiY1CitlY2hvICIke0VDSE9fVH0kTkNVUlNFU19DT05GSUciID4mNgorZWxzZQorICBlY2hvICIkYXNfbWU6MzgwNDogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2CitmaQorCisgICAgdGVzdCAtbiAiJE5DVVJTRVNfQ09ORklHIiAmJiBicmVhaworICBkb25lCitmaQoraWYgdGVzdCAteiAiJE5DVVJTRVNfQ09ORklHIjsgdGhlbgorICBhY19jdF9OQ1VSU0VTX0NPTkZJRz0kTkNVUlNFU19DT05GSUcKKyAgZm9yIGFjX3Byb2cgaW4gJHtjZl9uY3Vjb25maWdfcm9vdH0tY29uZmlnICR7Y2ZfbmN1Y29uZmlnX3Jvb3R9Ni1jb25maWcgJHtjZl9uY3Vjb25maWdfcm9vdH01LWNvbmZpZworZG8KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKK2VjaG8gIiRhc19tZTozODE3OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfTkNVUlNFU19DT05GSUcrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X05DVVJTRVNfQ09ORklHIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X05DVVJTRVNfQ09ORklHPSIkYWNfY3RfTkNVUlNFU19DT05GSUciICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorICBhY19zYXZlX0lGUz0kSUZTOyBJRlM9JGFjX3BhdGhfc2VwYXJhdG9yCithY19kdW1teT0iJFBBVEgiCitmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKyAgSUZTPSRhY19zYXZlX0lGUworICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAkYXNfZXhlY3V0YWJsZV9wICIkYWNfZGlyLyRhY193b3JkIiB8fCBjb250aW51ZQorYWNfY3ZfcHJvZ19hY19jdF9OQ1VSU0VTX0NPTkZJRz0iJGFjX3Byb2ciCitlY2hvICIkYXNfbWU6MzgzMjogZm91bmQgJGFjX2Rpci8kYWNfd29yZCIgPiY1CiticmVhaworZG9uZQorCitmaQorZmkKK2FjX2N0X05DVVJTRVNfQ09ORklHPSRhY19jdl9wcm9nX2FjX2N0X05DVVJTRVNfQ09ORklHCitpZiB0ZXN0IC1uICIkYWNfY3RfTkNVUlNFU19DT05GSUciOyB0aGVuCisgIGVjaG8gIiRhc19tZTozODQwOiByZXN1bHQ6ICRhY19jdF9OQ1VSU0VTX0NPTkZJRyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3RfTkNVUlNFU19DT05GSUciID4mNgorZWxzZQorICBlY2hvICIkYXNfbWU6Mzg0MzogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2CitmaQorCisgIHRlc3QgLW4gIiRhY19jdF9OQ1VSU0VTX0NPTkZJRyIgJiYgYnJlYWsKK2RvbmUKK3Rlc3QgLW4gIiRhY19jdF9OQ1VSU0VTX0NPTkZJRyIgfHwgYWNfY3RfTkNVUlNFU19DT05GSUc9Im5vbmUiCisKKyAgTkNVUlNFU19DT05GSUc9JGFjX2N0X05DVVJTRVNfQ09ORklHCitmaQorCisJaWYgdGVzdCAiJE5DVVJTRVNfQ09ORklHIiAhPSBub25lIDsgdGhlbgorCisJCUNQUEZMQUdTPSIkQ1BQRkxBR1MgYCROQ1VSU0VTX0NPTkZJRyAtLWNmbGFnc2AiCisKK2NmX2FkZF9saWJzPSJgJE5DVVJTRVNfQ09ORklHIC0tbGlic2AiCisjIEZpbHRlciBvdXQgZHVwbGljYXRlcyAtIHRoaXMgaGFwcGVucyB3aXRoIGJhZGx5LWRlc2lnbmVkICIucGMiIGZpbGVzLi4uCitmb3IgY2ZfYWRkXzFsaWIgaW4gJExJQlMKK2RvCisJZm9yIGNmX2FkZF8ybGliIGluICRjZl9hZGRfbGlicworCWRvCisJCWlmIHRlc3QgIngkY2ZfYWRkXzFsaWIiID0gIngkY2ZfYWRkXzJsaWIiCisJCXRoZW4KKwkJCWNmX2FkZF8xbGliPQorCQkJYnJlYWsKKwkJZmkKKwlkb25lCisJdGVzdCAtbiAiJGNmX2FkZF8xbGliIiAmJiBjZl9hZGRfbGlicz0iJGNmX2FkZF9saWJzICRjZl9hZGRfMWxpYiIKK2RvbmUKK0xJQlM9IiRjZl9hZGRfbGlicyIKKworCQkjIGV2ZW4gd2l0aCBjb25maWcgc2NyaXB0LCBzb21lIHBhY2thZ2VzIHVzZSBuby1vdmVycmlkZSBmb3IgY3Vyc2VzLmgKKworZWNobyAiJGFzX21lOjM4NzY6IGNoZWNraW5nIGlmIHdlIGhhdmUgaWRlbnRpZmllZCBjdXJzZXMgaGVhZGVycyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHdlIGhhdmUgaWRlbnRpZmllZCBjdXJzZXMgaGVhZGVycy4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7Y2ZfY3ZfbmN1cnNlc19oZWFkZXIrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKworY2ZfY3ZfbmN1cnNlc19oZWFkZXI9bm9uZQorZm9yIGNmX2hlYWRlciBpbiBcCisJbmN1cnNlcy5oIG5jdXJzZXMvbmN1cnNlcy5oIFwKKwljdXJzZXMuaCBuY3Vyc2VzL2N1cnNlcy5oCitkbworY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAzODg4ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDwke2NmX2hlYWRlcn0+CitpbnQKK21haW4gKCkKK3sKK2luaXRzY3IoKTsgdGdvdG8oIj8iLCAwLDApCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjM5MDA6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjM5MDM6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MzkwNjogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjM5MDk6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBjZl9jdl9uY3Vyc2VzX2hlYWRlcj0kY2ZfaGVhZGVyOyBicmVhaworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Citkb25lCisKK2ZpCitlY2hvICIkYXNfbWU6MzkyMDogcmVzdWx0OiAkY2ZfY3ZfbmN1cnNlc19oZWFkZXIiID4mNQorZWNobyAiJHtFQ0hPX1R9JGNmX2N2X25jdXJzZXNfaGVhZGVyIiA+JjYKKworaWYgdGVzdCAiJGNmX2N2X25jdXJzZXNfaGVhZGVyIiA9IG5vbmUgOyB0aGVuCisJeyB7IGVjaG8gIiRhc19tZTozOTI0OiBlcnJvcjogTm8gY3Vyc2VzIGhlYWRlci1maWxlcyBmb3VuZCIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBObyBjdXJzZXMgaGVhZGVyLWZpbGVzIGZvdW5kIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitmaQorCisjIGNoZWF0LCB0byBnZXQgdGhlIHJpZ2h0ICNkZWZpbmUncyBmb3IgSEFWRV9OQ1VSU0VTX0gsIGV0Yy4KKworZm9yIGFjX2hlYWRlciBpbiAkY2ZfY3ZfbmN1cnNlc19oZWFkZXIKK2RvCithc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2VjaG8gIiRhc19tZTozOTM0OiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgoraWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDM5NDAgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPCRhY19oZWFkZXI+CitfQUNFT0YKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjM5NDQ6IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZWdyZXAgLXYgJ14gKlwrJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOjM5NTA6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworICBlbHNlCisgICAgYWNfY3BwX2Vycj0KKyAgZmkKK2Vsc2UKKyAgYWNfY3BwX2Vycj15ZXMKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KKyAgZXZhbCAiJGFzX2FjX0hlYWRlcj15ZXMiCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBldmFsICIkYXNfYWNfSGVhZGVyPW5vIgorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CitmaQorZWNobyAiJGFzX21lOjM5Njk6IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQorZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgoraWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgorICBjYXQgPj5jb25mZGVmcy5oIDw8RU9GCisjZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorRU9GCisKK2ZpCitkb25lCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIE5DVVJTRVMgMQorRU9GCisKK2NmX25jdWxpYl9ST09UPWBlY2hvICJIQVZFX0xJQiRjZl9uY3Vjb25maWdfcm9vdCIgfCBzZWQgeSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyVgCisKKwkJY2F0ID4+Y29uZmRlZnMuaCA8PEVPRgorI2RlZmluZSAkY2ZfbmN1bGliX1JPT1QgMQorRU9GCisKKwkJCQljZl9jdl9uY3Vyc2VzX3ZlcnNpb249YCROQ1VSU0VTX0NPTkZJRyAtLXZlcnNpb25gCisKKwllbHNlCisKK2NmX25jdWhkcl9yb290PW5jdXJzZXMKKwordGVzdCAtbiAiJGNmX2N2X2N1cnNlc19kaXIiICYmIFwKK3Rlc3QgIiRjZl9jdl9jdXJzZXNfZGlyIiAhPSAibm8iICYmIHsgXAorCitpZiB0ZXN0IC1uICIkY2ZfY3ZfY3Vyc2VzX2Rpci9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdCIgOyB0aGVuCisgIGZvciBjZl9hZGRfaW5jZGlyIGluICRjZl9jdl9jdXJzZXNfZGlyL2luY2x1ZGUvJGNmX25jdWhkcl9yb290CisgIGRvCisJd2hpbGUgdGVzdCAkY2ZfYWRkX2luY2RpciAhPSAvdXNyL2luY2x1ZGUKKwlkbworCSAgaWYgdGVzdCAtZCAkY2ZfYWRkX2luY2RpcgorCSAgdGhlbgorCQljZl9oYXZlX2luY2Rpcj1ubworCQlpZiB0ZXN0IC1uICIkQ0ZMQUdTJENQUEZMQUdTIiA7IHRoZW4KKwkJICAjIGEgbG9vcCBpcyBuZWVkZWQgdG8gZW5zdXJlIHdlIGNhbiBhZGQgc3ViZGlycyBvZiBleGlzdGluZyBkaXJzCisJCSAgZm9yIGNmX3Rlc3RfaW5jZGlyIGluICRDRkxBR1MgJENQUEZMQUdTIDsgZG8KKwkJCWlmIHRlc3QgIi4kY2ZfdGVzdF9pbmNkaXIiID0gIi4tSSRjZl9hZGRfaW5jZGlyIiA7IHRoZW4KKwkJCSAgY2ZfaGF2ZV9pbmNkaXI9eWVzOyBicmVhaworCQkJZmkKKwkJICBkb25lCisJCWZpCisKKwkJaWYgdGVzdCAiJGNmX2hhdmVfaW5jZGlyIiA9IG5vIDsgdGhlbgorCQkgIGlmIHRlc3QgIiRjZl9hZGRfaW5jZGlyIiA9IC91c3IvbG9jYWwvaW5jbHVkZSA7IHRoZW4KKwkJCWlmIHRlc3QgIiRHQ0MiID0geWVzCisJCQl0aGVuCisJCQkgIGNmX3NhdmVfQ1BQRkxBR1M9JENQUEZMQUdTCisJCQkgIENQUEZMQUdTPSIkQ1BQRkxBR1MgLUkkY2ZfYWRkX2luY2RpciIKKwkJCSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA0MDIyICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgoraW50CittYWluICgpCit7CitwcmludGYoIkhlbGxvIikKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6NDAzNDogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NDAzNzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTo0MDQwOiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NDA0MzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIDoKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorY2ZfaGF2ZV9pbmNkaXI9eWVzCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisJCQkgIENQUEZMQUdTPSRjZl9zYXZlX0NQUEZMQUdTCisJCQlmaQorCQkgIGZpCisJCWZpCisKKwkJaWYgdGVzdCAiJGNmX2hhdmVfaW5jZGlyIiA9IG5vIDsgdGhlbgorCQkgIHRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJYWRkaW5nICRjZl9hZGRfaW5jZGlyIHRvIGluY2x1ZGUtcGF0aCIgMT4mNgorCitlY2hvICIke2FzX21lOi1jb25maWd1cmV9OjQwNjA6IHRlc3RpbmcgYWRkaW5nICRjZl9hZGRfaW5jZGlyIHRvIGluY2x1ZGUtcGF0aCAuLi4iIDE+JjUKKworCQkgIENQUEZMQUdTPSIkQ1BQRkxBR1MgLUkkY2ZfYWRkX2luY2RpciIKKworCQkgIGNmX3RvcF9pbmNkaXI9YGVjaG8gJGNmX2FkZF9pbmNkaXIgfCBzZWQgLWUgJ3MlL2luY2x1ZGUvLiokJS9pbmNsdWRlJSdgCisJCSAgdGVzdCAiJGNmX3RvcF9pbmNkaXIiID0gIiRjZl9hZGRfaW5jZGlyIiAmJiBicmVhaworCQkgIGNmX2FkZF9pbmNkaXI9IiRjZl90b3BfaW5jZGlyIgorCQllbHNlCisJCSAgYnJlYWsKKwkJZmkKKwkgIGVsc2UKKwkJYnJlYWsKKwkgIGZpCisJZG9uZQorICBkb25lCitmaQorCit9CisKK2VjaG8gIiRhc19tZTo0MDc5OiBjaGVja2luZyBmb3IgJGNmX25jdWhkcl9yb290IGhlYWRlciBpbiBpbmNsdWRlLXBhdGgiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGNmX25jdWhkcl9yb290IGhlYWRlciBpbiBpbmNsdWRlLXBhdGguLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2NmX2N2X25jdXJzZXNfaCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorCisJY2ZfaGVhZGVyX2xpc3Q9IiRjZl9uY3VoZHJfcm9vdC9jdXJzZXMuaCAkY2ZfbmN1aGRyX3Jvb3QvbmN1cnNlcy5oIgorCSggdGVzdCAiJGNmX25jdWhkcl9yb290IiA9IG5jdXJzZXMgfHwgdGVzdCAiJGNmX25jdWhkcl9yb290IiA9IG5jdXJzZXN3ICkgJiYgY2ZfaGVhZGVyX2xpc3Q9IiRjZl9oZWFkZXJfbGlzdCBjdXJzZXMuaCBuY3Vyc2VzLmgiCisJZm9yIGNmX2hlYWRlciBpbiAkY2ZfaGVhZGVyX2xpc3QKKwlkbworCisJY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA0MDkxICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2luY2x1ZGUgPCRjZl9oZWFkZXI+CitpbnQKK21haW4gKCkKK3sKKworI2lmZGVmIE5DVVJTRVNfVkVSU0lPTgorCitwcmludGYoIiVzXG4iLCBOQ1VSU0VTX1ZFUlNJT04pOworI2Vsc2UKKyNpZmRlZiBfX05DVVJTRVNfSAorcHJpbnRmKCJvbGRcbiIpOworI2Vsc2UKKwltYWtlIGFuIGVycm9yCisjZW5kaWYKKyNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjQxMTU6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjQxMTg6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6NDEyMTogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjQxMjQ6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBjZl9jdl9uY3Vyc2VzX2g9JGNmX2hlYWRlcgorCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2NmX2N2X25jdXJzZXNfaD1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCisJCXRlc3QgIiRjZl9jdl9uY3Vyc2VzX2giICE9IG5vICYmIGJyZWFrCisJZG9uZQorCitmaQorZWNobyAiJGFzX21lOjQxMzk6IHJlc3VsdDogJGNmX2N2X25jdXJzZXNfaCIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfY3ZfbmN1cnNlc19oIiA+JjYKKworaWYgdGVzdCAiJGNmX2N2X25jdXJzZXNfaCIgIT0gbm8gOyB0aGVuCisJY2ZfY3ZfbmN1cnNlc19oZWFkZXI9JGNmX2N2X25jdXJzZXNfaAorZWxzZQorCitlY2hvICIkYXNfbWU6NDE0NjogY2hlY2tpbmcgZm9yICRjZl9uY3VoZHJfcm9vdCBpbmNsdWRlLXBhdGgiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGNmX25jdWhkcl9yb290IGluY2x1ZGUtcGF0aC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7Y2ZfY3ZfbmN1cnNlc19oMitzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorCisJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8KKworY2Zfc2VhcmNoPQorCisjIGNvbGxlY3QgdGhlIGN1cnJlbnQgc2V0IG9mIGluY2x1ZGUtZGlyZWN0b3JpZXMgZnJvbSBjb21waWxlciBmbGFncworY2ZfaGVhZGVyX3BhdGhfbGlzdD0iIgoraWYgdGVzdCAtbiAiJHtDRkxBR1N9JHtDUFBGTEFHU30iIDsgdGhlbgorCWZvciBjZl9oZWFkZXJfcGF0aCBpbiAkQ1BQRkxBR1MgJENGTEFHUworCWRvCisJCWNhc2UgJGNmX2hlYWRlcl9wYXRoIGluCisJCSgtSSopCisJCQljZl9oZWFkZXJfcGF0aD1gZWNobyAiLiRjZl9oZWFkZXJfcGF0aCIgfHNlZCAtZSAncy9eLi4uLy8nIC1lICdzLC9pbmNsdWRlJCwsJ2AKKwordGVzdCAieCRjZl9oZWFkZXJfcGF0aCIgIT0gInhOT05FIiAmJiBcCit0ZXN0IC1kICIkY2ZfaGVhZGVyX3BhdGgiICYmIFwKKyB7CisJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIgkuLi4gdGVzdGluZyBmb3IgaW5jbHVkZS1kaXJlY3RvcmllcyB1bmRlciAkY2ZfaGVhZGVyX3BhdGgiCisJdGVzdCAtZCAkY2ZfaGVhZGVyX3BhdGgvaW5jbHVkZSAmJiAgICAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJGNmX2hlYWRlcl9wYXRoL2luY2x1ZGUiCisJdGVzdCAtZCAkY2ZfaGVhZGVyX3BhdGgvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QgJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRjZl9oZWFkZXJfcGF0aC9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdCIKKwl0ZXN0IC1kICRjZl9oZWFkZXJfcGF0aC9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkY2ZfaGVhZGVyX3BhdGgvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QvaW5jbHVkZSIKKwl0ZXN0IC1kICRjZl9oZWFkZXJfcGF0aC8kY2ZfbmN1aGRyX3Jvb3QvaW5jbHVkZSAmJiAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJGNmX2hlYWRlcl9wYXRoLyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlIgorCXRlc3QgLWQgJGNmX2hlYWRlcl9wYXRoLyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdCAmJiAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJGNmX2hlYWRlcl9wYXRoLyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdCIKK30KKworCQkJY2ZfaGVhZGVyX3BhdGhfbGlzdD0iJGNmX2hlYWRlcl9wYXRoX2xpc3QgJGNmX3NlYXJjaCIKKwkJCTs7CisJCWVzYWMKKwlkb25lCitmaQorCisjIGFkZCB0aGUgdmFyaWF0aW9ucyBmb3IgdGhlIHBhY2thZ2Ugd2UgYXJlIGxvb2tpbmcgZm9yCisKK2NmX3NlYXJjaD0KKwordGVzdCAieCRwcmVmaXgiICE9ICJ4Tk9ORSIgJiYgXAordGVzdCAtZCAiJHByZWZpeCIgJiYgXAorIHsKKwl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCS4uLiB0ZXN0aW5nIGZvciBpbmNsdWRlLWRpcmVjdG9yaWVzIHVuZGVyICRwcmVmaXgiCisJdGVzdCAtZCAkcHJlZml4L2luY2x1ZGUgJiYgICAgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRwcmVmaXgvaW5jbHVkZSIKKwl0ZXN0IC1kICRwcmVmaXgvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QgJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRwcmVmaXgvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QiCisJdGVzdCAtZCAkcHJlZml4L2luY2x1ZGUvJGNmX25jdWhkcl9yb290L2luY2x1ZGUgJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRwcmVmaXgvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QvaW5jbHVkZSIKKwl0ZXN0IC1kICRwcmVmaXgvJGNmX25jdWhkcl9yb290L2luY2x1ZGUgJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRwcmVmaXgvJGNmX25jdWhkcl9yb290L2luY2x1ZGUiCisJdGVzdCAtZCAkcHJlZml4LyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdCAmJiAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJHByZWZpeC8kY2ZfbmN1aGRyX3Jvb3QvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QiCit9CisKK2ZvciBjZl9zdWJkaXJfcHJlZml4IGluIFwKKwkvdXNyIFwKKwkvdXNyL2xvY2FsIFwKKwkvdXNyL3BrZyBcCisJL29wdCBcCisJL29wdC9sb2NhbCBcCisJJEhPTUUKK2RvCisKK3Rlc3QgIngkY2Zfc3ViZGlyX3ByZWZpeCIgIT0gIngkcHJlZml4IiAmJiBcCit0ZXN0IC1kICIkY2Zfc3ViZGlyX3ByZWZpeCIgJiYgXAorKHRlc3QgLXogIiRwcmVmaXgiIHx8IHRlc3QgeCRwcmVmaXggPSB4Tk9ORSB8fCB0ZXN0ICJ4JGNmX3N1YmRpcl9wcmVmaXgiICE9ICJ4JHByZWZpeCIpICYmIHsKKwl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCS4uLiB0ZXN0aW5nIGZvciBpbmNsdWRlLWRpcmVjdG9yaWVzIHVuZGVyICRjZl9zdWJkaXJfcHJlZml4IgorCXRlc3QgLWQgJGNmX3N1YmRpcl9wcmVmaXgvaW5jbHVkZSAmJiAgICAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJGNmX3N1YmRpcl9wcmVmaXgvaW5jbHVkZSIKKwl0ZXN0IC1kICRjZl9zdWJkaXJfcHJlZml4L2luY2x1ZGUvJGNmX25jdWhkcl9yb290ICYmICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkY2Zfc3ViZGlyX3ByZWZpeC9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdCIKKwl0ZXN0IC1kICRjZl9zdWJkaXJfcHJlZml4L2luY2x1ZGUvJGNmX25jdWhkcl9yb290L2luY2x1ZGUgJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRjZl9zdWJkaXJfcHJlZml4L2luY2x1ZGUvJGNmX25jdWhkcl9yb290L2luY2x1ZGUiCisJdGVzdCAtZCAkY2Zfc3ViZGlyX3ByZWZpeC8kY2ZfbmN1aGRyX3Jvb3QvaW5jbHVkZSAmJiAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJGNmX3N1YmRpcl9wcmVmaXgvJGNmX25jdWhkcl9yb290L2luY2x1ZGUiCisJdGVzdCAtZCAkY2Zfc3ViZGlyX3ByZWZpeC8kY2ZfbmN1aGRyX3Jvb3QvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QgJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRjZl9zdWJkaXJfcHJlZml4LyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdCIKK30KKworZG9uZQorCit0ZXN0ICIkaW5jbHVkZWRpciIgIT0gTk9ORSAmJiBcCit0ZXN0ICIkaW5jbHVkZWRpciIgIT0gIi91c3IvaW5jbHVkZSIgJiYgXAordGVzdCAtZCAiJGluY2x1ZGVkaXIiICYmIHsKKwl0ZXN0IC1kICRpbmNsdWRlZGlyICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkaW5jbHVkZWRpciIKKwl0ZXN0IC1kICRpbmNsdWRlZGlyLyRjZl9uY3VoZHJfcm9vdCAmJiBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJGluY2x1ZGVkaXIvJGNmX25jdWhkcl9yb290IgorfQorCit0ZXN0ICIkb2xkaW5jbHVkZWRpciIgIT0gTk9ORSAmJiBcCit0ZXN0ICIkb2xkaW5jbHVkZWRpciIgIT0gIi91c3IvaW5jbHVkZSIgJiYgXAordGVzdCAtZCAiJG9sZGluY2x1ZGVkaXIiICYmIHsKKwl0ZXN0IC1kICRvbGRpbmNsdWRlZGlyICAgICYmIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkb2xkaW5jbHVkZWRpciIKKwl0ZXN0IC1kICRvbGRpbmNsdWRlZGlyLyRjZl9uY3VoZHJfcm9vdCAmJiBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJG9sZGluY2x1ZGVkaXIvJGNmX25jdWhkcl9yb290IgorfQorCitjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJGNmX2hlYWRlcl9wYXRoX2xpc3QiCisKKwl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyBzZWFyY2ggcGF0aCAkY2Zfc2VhcmNoCisJY2Zfc2F2ZTJfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKwlmb3IgY2ZfaW5jZGlyIGluICRjZl9zZWFyY2gKKwlkbworCitpZiB0ZXN0IC1uICIkY2ZfaW5jZGlyIiA7IHRoZW4KKyAgZm9yIGNmX2FkZF9pbmNkaXIgaW4gJGNmX2luY2RpcgorICBkbworCXdoaWxlIHRlc3QgJGNmX2FkZF9pbmNkaXIgIT0gL3Vzci9pbmNsdWRlCisJZG8KKwkgIGlmIHRlc3QgLWQgJGNmX2FkZF9pbmNkaXIKKwkgIHRoZW4KKwkJY2ZfaGF2ZV9pbmNkaXI9bm8KKwkJaWYgdGVzdCAtbiAiJENGTEFHUyRDUFBGTEFHUyIgOyB0aGVuCisJCSAgIyBhIGxvb3AgaXMgbmVlZGVkIHRvIGVuc3VyZSB3ZSBjYW4gYWRkIHN1YmRpcnMgb2YgZXhpc3RpbmcgZGlycworCQkgIGZvciBjZl90ZXN0X2luY2RpciBpbiAkQ0ZMQUdTICRDUFBGTEFHUyA7IGRvCisJCQlpZiB0ZXN0ICIuJGNmX3Rlc3RfaW5jZGlyIiA9ICIuLUkkY2ZfYWRkX2luY2RpciIgOyB0aGVuCisJCQkgIGNmX2hhdmVfaW5jZGlyPXllczsgYnJlYWsKKwkJCWZpCisJCSAgZG9uZQorCQlmaQorCisJCWlmIHRlc3QgIiRjZl9oYXZlX2luY2RpciIgPSBubyA7IHRoZW4KKwkJICBpZiB0ZXN0ICIkY2ZfYWRkX2luY2RpciIgPSAvdXNyL2xvY2FsL2luY2x1ZGUgOyB0aGVuCisJCQlpZiB0ZXN0ICIkR0NDIiA9IHllcworCQkJdGhlbgorCQkJICBjZl9zYXZlX0NQUEZMQUdTPSRDUFBGTEFHUworCQkJICBDUFBGTEFHUz0iJENQUEZMQUdTIC1JJGNmX2FkZF9pbmNkaXIiCisJCQkgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgNDI2NCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KK2ludAorbWFpbiAoKQoreworcHJpbnRmKCJIZWxsbyIpCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjQyNzY6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjQyNzk6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6NDI4MjogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjQyODU6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICA6CitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2NmX2hhdmVfaW5jZGlyPXllcworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCQkJICBDUFBGTEFHUz0kY2Zfc2F2ZV9DUFBGTEFHUworCQkJZmkKKwkJICBmaQorCQlmaQorCisJCWlmIHRlc3QgIiRjZl9oYXZlX2luY2RpciIgPSBubyA7IHRoZW4KKwkJICB0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCWFkZGluZyAkY2ZfYWRkX2luY2RpciB0byBpbmNsdWRlLXBhdGgiIDE+JjYKKworZWNobyAiJHthc19tZTotY29uZmlndXJlfTo0MzAyOiB0ZXN0aW5nIGFkZGluZyAkY2ZfYWRkX2luY2RpciB0byBpbmNsdWRlLXBhdGggLi4uIiAxPiY1CisKKwkJICBDUFBGTEFHUz0iJENQUEZMQUdTIC1JJGNmX2FkZF9pbmNkaXIiCisKKwkJICBjZl90b3BfaW5jZGlyPWBlY2hvICRjZl9hZGRfaW5jZGlyIHwgc2VkIC1lICdzJS9pbmNsdWRlLy4qJCUvaW5jbHVkZSUnYAorCQkgIHRlc3QgIiRjZl90b3BfaW5jZGlyIiA9ICIkY2ZfYWRkX2luY2RpciIgJiYgYnJlYWsKKwkJICBjZl9hZGRfaW5jZGlyPSIkY2ZfdG9wX2luY2RpciIKKwkJZWxzZQorCQkgIGJyZWFrCisJCWZpCisJICBlbHNlCisJCWJyZWFrCisJICBmaQorCWRvbmUKKyAgZG9uZQorZmkKKworCQlmb3IgY2ZfaGVhZGVyIGluIFwKKwkJCW5jdXJzZXMuaCBcCisJCQljdXJzZXMuaAorCQlkbworCisJY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA0MzI1ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2luY2x1ZGUgPCRjZl9oZWFkZXI+CitpbnQKK21haW4gKCkKK3sKKworI2lmZGVmIE5DVVJTRVNfVkVSU0lPTgorCitwcmludGYoIiVzXG4iLCBOQ1VSU0VTX1ZFUlNJT04pOworI2Vsc2UKKyNpZmRlZiBfX05DVVJTRVNfSAorcHJpbnRmKCJvbGRcbiIpOworI2Vsc2UKKwltYWtlIGFuIGVycm9yCisjZW5kaWYKKyNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjQzNDk6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjQzNTI6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6NDM1NTogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjQzNTg6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBjZl9jdl9uY3Vyc2VzX2gyPSRjZl9oZWFkZXIKKworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitjZl9jdl9uY3Vyc2VzX2gyPW5vCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKKwkJCWlmIHRlc3QgIiRjZl9jdl9uY3Vyc2VzX2gyIiAhPSBubyA7IHRoZW4KKwkJCQljZl9jdl9uY3Vyc2VzX2gyPSRjZl9pbmNkaXIvJGNmX2hlYWRlcgorCQkJCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICRhY19uICIJLi4uIGZvdW5kICRhY19jIiAxPiY2CisJCQkJYnJlYWsKKwkJCWZpCisJCQl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCS4uLiB0ZXN0ZWQgJGNmX2luY2Rpci8kY2ZfaGVhZGVyIiAxPiY2CisJCWRvbmUKKwkJQ1BQRkxBR1M9IiRjZl9zYXZlMl9DUFBGTEFHUyIKKwkJdGVzdCAiJGNmX2N2X25jdXJzZXNfaDIiICE9IG5vICYmIGJyZWFrCisJZG9uZQorCXRlc3QgIiRjZl9jdl9uY3Vyc2VzX2gyIiA9IG5vICYmIHsgeyBlY2hvICIkYXNfbWU6NDM3OTogZXJyb3I6IG5vdCBmb3VuZCIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBub3QgZm91bmQiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKworZmkKK2VjaG8gIiRhc19tZTo0Mzg0OiByZXN1bHQ6ICRjZl9jdl9uY3Vyc2VzX2gyIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9jdl9uY3Vyc2VzX2gyIiA+JjYKKworCWNmXzFzdF9pbmNkaXI9YGVjaG8gJGNmX2N2X25jdXJzZXNfaDIgfCBzZWQgLWUgJ3MlL1teL10qJCUlJ2AKKwljZl9jdl9uY3Vyc2VzX2hlYWRlcj1gYmFzZW5hbWUgJGNmX2N2X25jdXJzZXNfaDJgCisJaWYgdGVzdCBgYmFzZW5hbWUgJGNmXzFzdF9pbmNkaXJgID0gJGNmX25jdWhkcl9yb290IDsgdGhlbgorCQljZl9jdl9uY3Vyc2VzX2hlYWRlcj0kY2ZfbmN1aGRyX3Jvb3QvJGNmX2N2X25jdXJzZXNfaGVhZGVyCisJZmkKKworaWYgdGVzdCAtbiAiJGNmXzFzdF9pbmNkaXIiIDsgdGhlbgorICBmb3IgY2ZfYWRkX2luY2RpciBpbiAkY2ZfMXN0X2luY2RpcgorICBkbworCXdoaWxlIHRlc3QgJGNmX2FkZF9pbmNkaXIgIT0gL3Vzci9pbmNsdWRlCisJZG8KKwkgIGlmIHRlc3QgLWQgJGNmX2FkZF9pbmNkaXIKKwkgIHRoZW4KKwkJY2ZfaGF2ZV9pbmNkaXI9bm8KKwkJaWYgdGVzdCAtbiAiJENGTEFHUyRDUFBGTEFHUyIgOyB0aGVuCisJCSAgIyBhIGxvb3AgaXMgbmVlZGVkIHRvIGVuc3VyZSB3ZSBjYW4gYWRkIHN1YmRpcnMgb2YgZXhpc3RpbmcgZGlycworCQkgIGZvciBjZl90ZXN0X2luY2RpciBpbiAkQ0ZMQUdTICRDUFBGTEFHUyA7IGRvCisJCQlpZiB0ZXN0ICIuJGNmX3Rlc3RfaW5jZGlyIiA9ICIuLUkkY2ZfYWRkX2luY2RpciIgOyB0aGVuCisJCQkgIGNmX2hhdmVfaW5jZGlyPXllczsgYnJlYWsKKwkJCWZpCisJCSAgZG9uZQorCQlmaQorCisJCWlmIHRlc3QgIiRjZl9oYXZlX2luY2RpciIgPSBubyA7IHRoZW4KKwkJICBpZiB0ZXN0ICIkY2ZfYWRkX2luY2RpciIgPSAvdXNyL2xvY2FsL2luY2x1ZGUgOyB0aGVuCisJCQlpZiB0ZXN0ICIkR0NDIiA9IHllcworCQkJdGhlbgorCQkJICBjZl9zYXZlX0NQUEZMQUdTPSRDUFBGTEFHUworCQkJICBDUFBGTEFHUz0iJENQUEZMQUdTIC1JJGNmX2FkZF9pbmNkaXIiCisJCQkgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgNDQxNyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KK2ludAorbWFpbiAoKQoreworcHJpbnRmKCJIZWxsbyIpCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjQ0Mjk6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjQ0MzI6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6NDQzNTogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjQ0Mzg6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICA6CitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2NmX2hhdmVfaW5jZGlyPXllcworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCQkJICBDUFBGTEFHUz0kY2Zfc2F2ZV9DUFBGTEFHUworCQkJZmkKKwkJICBmaQorCQlmaQorCisJCWlmIHRlc3QgIiRjZl9oYXZlX2luY2RpciIgPSBubyA7IHRoZW4KKwkJICB0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCWFkZGluZyAkY2ZfYWRkX2luY2RpciB0byBpbmNsdWRlLXBhdGgiIDE+JjYKKworZWNobyAiJHthc19tZTotY29uZmlndXJlfTo0NDU1OiB0ZXN0aW5nIGFkZGluZyAkY2ZfYWRkX2luY2RpciB0byBpbmNsdWRlLXBhdGggLi4uIiAxPiY1CisKKwkJICBDUFBGTEFHUz0iJENQUEZMQUdTIC1JJGNmX2FkZF9pbmNkaXIiCisKKwkJICBjZl90b3BfaW5jZGlyPWBlY2hvICRjZl9hZGRfaW5jZGlyIHwgc2VkIC1lICdzJS9pbmNsdWRlLy4qJCUvaW5jbHVkZSUnYAorCQkgIHRlc3QgIiRjZl90b3BfaW5jZGlyIiA9ICIkY2ZfYWRkX2luY2RpciIgJiYgYnJlYWsKKwkJICBjZl9hZGRfaW5jZGlyPSIkY2ZfdG9wX2luY2RpciIKKwkJZWxzZQorCQkgIGJyZWFrCisJCWZpCisJICBlbHNlCisJCWJyZWFrCisJICBmaQorCWRvbmUKKyAgZG9uZQorZmkKKworZmkKKworIyBTZXQgZGVmaW5pdGlvbnMgdG8gYWxsb3cgaWZkZWYnaW5nIGZvciBuY3Vyc2VzLmgKKworY2FzZSAkY2ZfY3ZfbmN1cnNlc19oZWFkZXIgaW4KKygqbmN1cnNlcy5oKQorCitjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX05DVVJTRVNfSCAxCitFT0YKKworCTs7Citlc2FjCisKK2Nhc2UgJGNmX2N2X25jdXJzZXNfaGVhZGVyIGluCisobmN1cnNlcy9jdXJzZXMuaHxuY3Vyc2VzL25jdXJzZXMuaCkKKworY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9OQ1VSU0VTX05DVVJTRVNfSCAxCitFT0YKKworCTs7CisobmN1cnNlc3cvY3Vyc2VzLmh8bmN1cnNlc3cvbmN1cnNlcy5oKQorCitjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX05DVVJTRVNXX05DVVJTRVNfSCAxCitFT0YKKworCTs7Citlc2FjCisKK2VjaG8gIiRhc19tZTo0NTAzOiBjaGVja2luZyBmb3IgdGVybWluZm8gaGVhZGVyIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHRlcm1pbmZvIGhlYWRlci4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7Y2ZfY3ZfdGVybV9oZWFkZXIrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKworY2FzZSAke2NmX2N2X25jdXJzZXNfaGVhZGVyfSBpbgorKCovbmN1cnNlcy5ofCovbmN1cnNlc3cuaCkKKwljZl90ZXJtX2hlYWRlcj1gZWNobyAiJGNmX2N2X25jdXJzZXNfaGVhZGVyIiB8IHNlZCAtZSAncyVuY3Vyc2VzW14uXSpcLmgkJXRlcm0uaCUnYAorCTs7CisoKikKKwljZl90ZXJtX2hlYWRlcj10ZXJtLmgKKwk7OworZXNhYworCitmb3IgY2ZfdGVzdCBpbiAkY2ZfdGVybV9oZWFkZXIgIm5jdXJzZXMvdGVybS5oIiAibmN1cnNlc3cvdGVybS5oIgorZG8KK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgNDUyMSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDwke2NmX2N2X25jdXJzZXNfaGVhZGVyOi1jdXJzZXMuaH0+CisjaW5jbHVkZSA8JGNmX3Rlc3Q+CisKK2ludAorbWFpbiAoKQoreworaW50IHggPSBhdXRvX2xlZnRfbWFyZ2luCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjQ1MzY6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjQ1Mzk6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6NDU0MjogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjQ1NDU6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorCisJY2ZfY3ZfdGVybV9oZWFkZXI9IiRjZl90ZXN0IgorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwljZl9jdl90ZXJtX2hlYWRlcj11bmtub3duCisKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKwl0ZXN0ICIkY2ZfY3ZfdGVybV9oZWFkZXIiICE9IHVua25vd24gJiYgYnJlYWsKK2RvbmUKKworZmkKK2VjaG8gIiRhc19tZTo0NTYxOiByZXN1bHQ6ICRjZl9jdl90ZXJtX2hlYWRlciIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfY3ZfdGVybV9oZWFkZXIiID4mNgorCisjIFNldCBkZWZpbml0aW9ucyB0byBhbGxvdyBpZmRlZidpbmcgdG8gYWNjb21tb2RhdGUgc3ViZGlyZWN0b3JpZXMKKworY2FzZSAkY2ZfY3ZfdGVybV9oZWFkZXIgaW4KKygqdGVybS5oKQorCitjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX1RFUk1fSCAxCitFT0YKKworCTs7Citlc2FjCisKK2Nhc2UgJGNmX2N2X3Rlcm1faGVhZGVyIGluCisobmN1cnNlcy90ZXJtLmgpCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEhBVkVfTkNVUlNFU19URVJNX0ggMQorRU9GCisKKwk7OworKG5jdXJzZXN3L3Rlcm0uaCkKKworY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9OQ1VSU0VTV19URVJNX0ggMQorRU9GCisKKwk7OworZXNhYworCisjIHNvbWUgYXBwbGljYXRpb25zIG5lZWQgdGhpcywgYnV0IHNob3VsZCBjaGVjayBmb3IgTkNVUlNFU19WRVJTSU9OCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIE5DVVJTRVMgMQorRU9GCisKK2VjaG8gIiRhc19tZTo0NTk5OiBjaGVja2luZyBmb3IgbmN1cnNlcyB2ZXJzaW9uIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG5jdXJzZXMgdmVyc2lvbi4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7Y2ZfY3ZfbmN1cnNlc192ZXJzaW9uK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKKwljZl9jdl9uY3Vyc2VzX3ZlcnNpb249bm8KKwljZl90ZW1wZmlsZT1vdXQkJAorCXJtIC1mICRjZl90ZW1wZmlsZQorCWlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisKKwkjIFRoaXMgd2lsbCBub3Qgd29yayBpZiB0aGUgcHJlcHJvY2Vzc29yIHNwbGl0cyB0aGUgbGluZSBhZnRlciB0aGUKKwkjIEF1dG9jb25mIHRva2VuLiAgVGhlICd1bnByb3RvJyBwcm9ncmFtIGRvZXMgdGhhdC4KKwljYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjaW5jbHVkZSA8JHtjZl9jdl9uY3Vyc2VzX2hlYWRlcjotY3Vyc2VzLmh9PgorI3VuZGVmIEF1dG9jb25mCisjaWZkZWYgTkNVUlNFU19WRVJTSU9OCitBdXRvY29uZiBOQ1VSU0VTX1ZFUlNJT04KKyNlbHNlCisjaWZkZWYgX19OQ1VSU0VTX0gKK0F1dG9jb25mICJvbGQiCisjZW5kaWYKKzsKKyNlbmRpZgorRU9GCisJY2ZfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQgMj4mNSB8IGdyZXAgJ15BdXRvY29uZiAnID5jb25mdGVzdC5vdXQiCisJeyAoZXZhbCBlY2hvICIkYXNfbWU6NDYyNTogXCIkY2ZfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGNmX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjQ2Mjg6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfQorCWlmIHRlc3QgLWYgY29uZnRlc3Qub3V0IDsgdGhlbgorCQljZl9vdXQ9YGNhdCBjb25mdGVzdC5vdXQgfCBzZWQgLWUgJ3MlXkF1dG9jb25mICUlJyAtZSAncyVeW14iXSoiJSUnIC1lICdzJSIuKiUlJ2AKKwkJdGVzdCAtbiAiJGNmX291dCIgJiYgY2ZfY3ZfbmN1cnNlc192ZXJzaW9uPSIkY2Zfb3V0IgorCQlybSAtZiBjb25mdGVzdC5vdXQKKwlmaQorCitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgNDYzOCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpbmNsdWRlIDwke2NmX2N2X25jdXJzZXNfaGVhZGVyOi1jdXJzZXMuaH0+CisjaW5jbHVkZSA8c3RkaW8uaD4KK2ludCBtYWluKCkKK3sKKwlGSUxFICpmcCA9IGZvcGVuKCIkY2ZfdGVtcGZpbGUiLCAidyIpOworI2lmZGVmIE5DVVJTRVNfVkVSU0lPTgorIyBpZmRlZiBOQ1VSU0VTX1ZFUlNJT05fUEFUQ0gKKwlmcHJpbnRmKGZwLCAiJXMuJWRcbiIsIE5DVVJTRVNfVkVSU0lPTiwgTkNVUlNFU19WRVJTSU9OX1BBVENIKTsKKyMgZWxzZQorCWZwcmludGYoZnAsICIlc1xuIiwgTkNVUlNFU19WRVJTSU9OKTsKKyMgZW5kaWYKKyNlbHNlCisjIGlmZGVmIF9fTkNVUlNFU19ICisJZnByaW50ZihmcCwgIm9sZFxuIik7CisjIGVsc2UKKwltYWtlIGFuIGVycm9yCisjIGVuZGlmCisjZW5kaWYKKwkke2NmX2N2X21haW5fcmV0dXJuOi1yZXR1cm59KDApOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjQ2NjM6IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjQ2NjY6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjQ2Njg6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo0NjcxOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKworCWNmX2N2X25jdXJzZXNfdmVyc2lvbj1gY2F0ICRjZl90ZW1wZmlsZWAKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKK2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2ZpCitybSAtZiBjb3JlIGNvcmUuKiAqLmNvcmUgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKKwlybSAtZiAkY2ZfdGVtcGZpbGUKKworZmkKK2VjaG8gIiRhc19tZTo0Njg1OiByZXN1bHQ6ICRjZl9jdl9uY3Vyc2VzX3ZlcnNpb24iID4mNQorZWNobyAiJHtFQ0hPX1R9JGNmX2N2X25jdXJzZXNfdmVyc2lvbiIgPiY2Cit0ZXN0ICIkY2ZfY3ZfbmN1cnNlc192ZXJzaW9uIiA9IG5vIHx8CitjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBOQ1VSU0VTIDEKK0VPRgorCitjZl9uY3VsaWJfcm9vdD1uY3Vyc2VzCisJIyBUaGlzIHdvcmtzLCBleGNlcHQgZm9yIHRoZSBzcGVjaWFsIGNhc2Ugd2hlcmUgd2UgZmluZCBncG0sIGJ1dAorCSMgbmN1cnNlcyBpcyBpbiBhIG5vbnN0YW5kYXJkIGxvY2F0aW9uIHZpYSAkTElCUywgYW5kIHdlIHJlYWxseSB3YW50CisJIyB0byBsaW5rIGdwbS4KK2NmX25jdXJzZXNfTElCUz0iIgorY2ZfbmN1cnNlc19TQVZFPSIkTElCUyIKK2VjaG8gIiRhc19tZTo0Njk4OiBjaGVja2luZyBmb3IgR3BtX09wZW4gaW4gLWxncG0iID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgR3BtX09wZW4gaW4gLWxncG0uLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9ncG1fR3BtX09wZW4rc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxncG0gICRMSUJTIgorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA0NzA2ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciBHcG1fT3BlbiAoKTsKK2ludAorbWFpbiAoKQoreworR3BtX09wZW4gKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTo0NzI1OiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo0NzI4OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6NDczMTogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjQ3MzQ6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9saWJfZ3BtX0dwbV9PcGVuPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CithY19jdl9saWJfZ3BtX0dwbV9PcGVuPW5vCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK2VjaG8gIiRhc19tZTo0NzQ1OiByZXN1bHQ6ICRhY19jdl9saWJfZ3BtX0dwbV9PcGVuIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfZ3BtX0dwbV9PcGVuIiA+JjYKK2lmIHRlc3QgJGFjX2N2X2xpYl9ncG1fR3BtX09wZW4gPSB5ZXM7IHRoZW4KKyAgZWNobyAiJGFzX21lOjQ3NDg6IGNoZWNraW5nIGZvciBpbml0c2NyIGluIC1sZ3BtIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGluaXRzY3IgaW4gLWxncG0uLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9ncG1faW5pdHNjcitzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGdwbSAgJExJQlMiCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDQ3NTYgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIGluaXRzY3IgKCk7CitpbnQKK21haW4gKCkKK3sKK2luaXRzY3IgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTo0Nzc1OiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo0Nzc4OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6NDc4MTogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjQ3ODQ6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9saWJfZ3BtX2luaXRzY3I9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2FjX2N2X2xpYl9ncG1faW5pdHNjcj1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCitlY2hvICIkYXNfbWU6NDc5NTogcmVzdWx0OiAkYWNfY3ZfbGliX2dwbV9pbml0c2NyIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfZ3BtX2luaXRzY3IiID4mNgoraWYgdGVzdCAkYWNfY3ZfbGliX2dwbV9pbml0c2NyID0geWVzOyB0aGVuCisgIExJQlM9IiRjZl9uY3Vyc2VzX1NBVkUiCitlbHNlCisgIGNmX25jdXJzZXNfTElCUz0iLWxncG0iCitmaQorCitmaQorCitjYXNlICRob3N0X29zIGluCisoZnJlZWJzZCopCisJIyBUaGlzIGlzIG9ubHkgbmVjZXNzYXJ5IGlmIHlvdSBhcmUgbGlua2luZyBhZ2FpbnN0IGFuIG9ic29sZXRlCisJIyB2ZXJzaW9uIG9mIG5jdXJzZXMgKGJ1dCBpdCBzaG91bGQgZG8gbm8gaGFybSwgc2luY2UgaXQncyBzdGF0aWMpLgorCWlmIHRlc3QgIiRjZl9uY3VsaWJfcm9vdCIgPSBuY3Vyc2VzIDsgdGhlbgorCQllY2hvICIkYXNfbWU6NDgxMDogY2hlY2tpbmcgZm9yIHRnb3RvIGluIC1sbXl0aW5mbyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciB0Z290byBpbiAtbG15dGluZm8uLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9teXRpbmZvX3Rnb3RvK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sbXl0aW5mbyAgJExJQlMiCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDQ4MTggImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIHRnb3RvICgpOworaW50CittYWluICgpCit7Cit0Z290byAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjQ4Mzc6IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjQ4NDA6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTo0ODQzOiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NDg0NjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X2xpYl9teXRpbmZvX3Rnb3RvPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CithY19jdl9saWJfbXl0aW5mb190Z290bz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCitlY2hvICIkYXNfbWU6NDg1NzogcmVzdWx0OiAkYWNfY3ZfbGliX215dGluZm9fdGdvdG8iID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9teXRpbmZvX3Rnb3RvIiA+JjYKK2lmIHRlc3QgJGFjX2N2X2xpYl9teXRpbmZvX3Rnb3RvID0geWVzOyB0aGVuCisgIGNmX25jdXJzZXNfTElCUz0iLWxteXRpbmZvICRjZl9uY3Vyc2VzX0xJQlMiCitmaQorCisJZmkKKwk7OworZXNhYworCitjZl9hZGRfbGlicz0iJGNmX25jdXJzZXNfTElCUyIKKyMgRmlsdGVyIG91dCBkdXBsaWNhdGVzIC0gdGhpcyBoYXBwZW5zIHdpdGggYmFkbHktZGVzaWduZWQgIi5wYyIgZmlsZXMuLi4KK2ZvciBjZl9hZGRfMWxpYiBpbiAkTElCUworZG8KKwlmb3IgY2ZfYWRkXzJsaWIgaW4gJGNmX2FkZF9saWJzCisJZG8KKwkJaWYgdGVzdCAieCRjZl9hZGRfMWxpYiIgPSAieCRjZl9hZGRfMmxpYiIKKwkJdGhlbgorCQkJY2ZfYWRkXzFsaWI9CisJCQlicmVhaworCQlmaQorCWRvbmUKKwl0ZXN0IC1uICIkY2ZfYWRkXzFsaWIiICYmIGNmX2FkZF9saWJzPSIkY2ZfYWRkX2xpYnMgJGNmX2FkZF8xbGliIgorZG9uZQorTElCUz0iJGNmX2FkZF9saWJzIgorCitpZiAoIHRlc3QgLW4gIiRjZl9jdl9jdXJzZXNfZGlyIiAmJiB0ZXN0ICIkY2ZfY3ZfY3Vyc2VzX2RpciIgIT0gIm5vIiApCit0aGVuCisKK2NmX2FkZF9saWJzPSItbCRjZl9uY3VsaWJfcm9vdCIKKyMgRmlsdGVyIG91dCBkdXBsaWNhdGVzIC0gdGhpcyBoYXBwZW5zIHdpdGggYmFkbHktZGVzaWduZWQgIi5wYyIgZmlsZXMuLi4KK2ZvciBjZl9hZGRfMWxpYiBpbiAkTElCUworZG8KKwlmb3IgY2ZfYWRkXzJsaWIgaW4gJGNmX2FkZF9saWJzCisJZG8KKwkJaWYgdGVzdCAieCRjZl9hZGRfMWxpYiIgPSAieCRjZl9hZGRfMmxpYiIKKwkJdGhlbgorCQkJY2ZfYWRkXzFsaWI9CisJCQlicmVhaworCQlmaQorCWRvbmUKKwl0ZXN0IC1uICIkY2ZfYWRkXzFsaWIiICYmIGNmX2FkZF9saWJzPSIkY2ZfYWRkX2xpYnMgJGNmX2FkZF8xbGliIgorZG9uZQorTElCUz0iJGNmX2FkZF9saWJzIgorCitlbHNlCisKKwlldmFsICdjZl9jdl9oYXZlX2xpYl8nJGNmX25jdWxpYl9yb290Jz1ubycKKwljZl9saWJkaXI9IiIKKwllY2hvICIkYXNfbWU6NDkwNjogY2hlY2tpbmcgZm9yIGluaXRzY3IiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgaW5pdHNjci4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfZnVuY19pbml0c2NyK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgNDkxMiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciBpbml0c2NyICgpOyBiZWxvdy4gICovCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIGluaXRzY3IgKCk7CitjaGFyICgqZikgKCk7CisKK2ludAorbWFpbiAoKQoreworLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cworICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCisgICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCisjaWYgZGVmaW5lZCAoX19zdHViX2luaXRzY3IpIHx8IGRlZmluZWQgKF9fc3R1Yl9fX2luaXRzY3IpCitjaG9rZSBtZQorI2Vsc2UKK2YgPSBpbml0c2NyOyAvKiB3b3JrYXJvdW5kIGZvciBJQ0MgMTIuMC4zICovIGlmIChmID09IDApIHJldHVybiAxOworI2VuZGlmCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjQ5NDM6IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjQ5NDY6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTo0OTQ5OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NDk1MjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X2Z1bmNfaW5pdHNjcj15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorYWNfY3ZfZnVuY19pbml0c2NyPW5vCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2VjaG8gIiRhc19tZTo0OTYyOiByZXN1bHQ6ICRhY19jdl9mdW5jX2luaXRzY3IiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2Z1bmNfaW5pdHNjciIgPiY2CitpZiB0ZXN0ICRhY19jdl9mdW5jX2luaXRzY3IgPSB5ZXM7IHRoZW4KKyAgZXZhbCAnY2ZfY3ZfaGF2ZV9saWJfJyRjZl9uY3VsaWJfcm9vdCc9eWVzJworZWxzZQorCisJCWNmX3NhdmVfTElCUz0iJExJQlMiCisJCWVjaG8gIiRhc19tZTo0OTY5OiBjaGVja2luZyBmb3IgaW5pdHNjciBpbiAtbCRjZl9uY3VsaWJfcm9vdCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBpbml0c2NyIGluIC1sJGNmX25jdWxpYl9yb290Li4uICRFQ0hPX0MiID4mNgorCQlMSUJTPSItbCRjZl9uY3VsaWJfcm9vdCAkTElCUyIKKwkJY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA0OTczICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDwke2NmX2N2X25jdXJzZXNfaGVhZGVyOi1jdXJzZXMuaH0+CitpbnQKK21haW4gKCkKK3sKK2luaXRzY3IoKQorICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6NDk4NTogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NDk4ODogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjQ5OTE6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo0OTk0OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgZWNobyAiJGFzX21lOjQ5OTY6IHJlc3VsdDogeWVzIiA+JjUKK2VjaG8gIiR7RUNIT19UfXllcyIgPiY2CisJCQkgZXZhbCAnY2ZfY3ZfaGF2ZV9saWJfJyRjZl9uY3VsaWJfcm9vdCc9eWVzJworCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2VjaG8gIiRhc19tZTo1MDAzOiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjYKKworY2Zfc2VhcmNoPQorY2ZfbGlicmFyeV9wYXRoX2xpc3Q9IiIKK2lmIHRlc3QgLW4gIiR7TERGTEFHU30ke0xJQlN9IiA7IHRoZW4KKwlmb3IgY2ZfbGlicmFyeV9wYXRoIGluICRMREZMQUdTICRMSUJTCisJZG8KKwkJY2FzZSAkY2ZfbGlicmFyeV9wYXRoIGluCisJCSgtTCopCisJCQljZl9saWJyYXJ5X3BhdGg9YGVjaG8gIi4kY2ZfbGlicmFyeV9wYXRoIiB8c2VkIC1lICdzL14uLi4vLycgLWUgJ3MsL2xpYiQsLCdgCisKK3Rlc3QgIngkY2ZfbGlicmFyeV9wYXRoIiAhPSAieE5PTkUiICYmIFwKK3Rlc3QgLWQgIiRjZl9saWJyYXJ5X3BhdGgiICYmIFwKKyB7CisJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIgkuLi4gdGVzdGluZyBmb3IgbGliLWRpcmVjdG9yaWVzIHVuZGVyICRjZl9saWJyYXJ5X3BhdGgiCisJdGVzdCAtZCAkY2ZfbGlicmFyeV9wYXRoL2xpYiAmJiAgICAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJGNmX2xpYnJhcnlfcGF0aC9saWIiCisJdGVzdCAtZCAkY2ZfbGlicmFyeV9wYXRoL2xpYi8kY2ZfbmN1bGliX3Jvb3QgJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRjZl9saWJyYXJ5X3BhdGgvbGliLyRjZl9uY3VsaWJfcm9vdCIKKwl0ZXN0IC1kICRjZl9saWJyYXJ5X3BhdGgvbGliLyRjZl9uY3VsaWJfcm9vdC9saWIgJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRjZl9saWJyYXJ5X3BhdGgvbGliLyRjZl9uY3VsaWJfcm9vdC9saWIiCisJdGVzdCAtZCAkY2ZfbGlicmFyeV9wYXRoLyRjZl9uY3VsaWJfcm9vdC9saWIgJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRjZl9saWJyYXJ5X3BhdGgvJGNmX25jdWxpYl9yb290L2xpYiIKKwl0ZXN0IC1kICRjZl9saWJyYXJ5X3BhdGgvJGNmX25jdWxpYl9yb290L2xpYi8kY2ZfbmN1bGliX3Jvb3QgJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRjZl9saWJyYXJ5X3BhdGgvJGNmX25jdWxpYl9yb290L2xpYi8kY2ZfbmN1bGliX3Jvb3QiCit9CisKKwkJCWNmX2xpYnJhcnlfcGF0aF9saXN0PSIkY2ZfbGlicmFyeV9wYXRoX2xpc3QgJGNmX3NlYXJjaCIKKwkJCTs7CisJCWVzYWMKKwlkb25lCitmaQorCitjZl9zZWFyY2g9CisKK3Rlc3QgIngkcHJlZml4IiAhPSAieE5PTkUiICYmIFwKK3Rlc3QgLWQgIiRwcmVmaXgiICYmIFwKKyB7CisJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIgkuLi4gdGVzdGluZyBmb3IgbGliLWRpcmVjdG9yaWVzIHVuZGVyICRwcmVmaXgiCisJdGVzdCAtZCAkcHJlZml4L2xpYiAmJiAgICAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJHByZWZpeC9saWIiCisJdGVzdCAtZCAkcHJlZml4L2xpYi8kY2ZfbmN1bGliX3Jvb3QgJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRwcmVmaXgvbGliLyRjZl9uY3VsaWJfcm9vdCIKKwl0ZXN0IC1kICRwcmVmaXgvbGliLyRjZl9uY3VsaWJfcm9vdC9saWIgJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRwcmVmaXgvbGliLyRjZl9uY3VsaWJfcm9vdC9saWIiCisJdGVzdCAtZCAkcHJlZml4LyRjZl9uY3VsaWJfcm9vdC9saWIgJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRwcmVmaXgvJGNmX25jdWxpYl9yb290L2xpYiIKKwl0ZXN0IC1kICRwcmVmaXgvJGNmX25jdWxpYl9yb290L2xpYi8kY2ZfbmN1bGliX3Jvb3QgJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRwcmVmaXgvJGNmX25jdWxpYl9yb290L2xpYi8kY2ZfbmN1bGliX3Jvb3QiCit9CisKK2ZvciBjZl9zdWJkaXJfcHJlZml4IGluIFwKKwkvdXNyIFwKKwkvdXNyL2xvY2FsIFwKKwkvdXNyL3BrZyBcCisJL29wdCBcCisJL29wdC9sb2NhbCBcCisJJEhPTUUKK2RvCisKK3Rlc3QgIngkY2Zfc3ViZGlyX3ByZWZpeCIgIT0gIngkcHJlZml4IiAmJiBcCit0ZXN0IC1kICIkY2Zfc3ViZGlyX3ByZWZpeCIgJiYgXAorKHRlc3QgLXogIiRwcmVmaXgiIHx8IHRlc3QgeCRwcmVmaXggPSB4Tk9ORSB8fCB0ZXN0ICJ4JGNmX3N1YmRpcl9wcmVmaXgiICE9ICJ4JHByZWZpeCIpICYmIHsKKwl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCS4uLiB0ZXN0aW5nIGZvciBsaWItZGlyZWN0b3JpZXMgdW5kZXIgJGNmX3N1YmRpcl9wcmVmaXgiCisJdGVzdCAtZCAkY2Zfc3ViZGlyX3ByZWZpeC9saWIgJiYgICAgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRjZl9zdWJkaXJfcHJlZml4L2xpYiIKKwl0ZXN0IC1kICRjZl9zdWJkaXJfcHJlZml4L2xpYi8kY2ZfbmN1bGliX3Jvb3QgJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRjZl9zdWJkaXJfcHJlZml4L2xpYi8kY2ZfbmN1bGliX3Jvb3QiCisJdGVzdCAtZCAkY2Zfc3ViZGlyX3ByZWZpeC9saWIvJGNmX25jdWxpYl9yb290L2xpYiAmJiAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJGNmX3N1YmRpcl9wcmVmaXgvbGliLyRjZl9uY3VsaWJfcm9vdC9saWIiCisJdGVzdCAtZCAkY2Zfc3ViZGlyX3ByZWZpeC8kY2ZfbmN1bGliX3Jvb3QvbGliICYmICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkY2Zfc3ViZGlyX3ByZWZpeC8kY2ZfbmN1bGliX3Jvb3QvbGliIgorCXRlc3QgLWQgJGNmX3N1YmRpcl9wcmVmaXgvJGNmX25jdWxpYl9yb290L2xpYi8kY2ZfbmN1bGliX3Jvb3QgJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRjZl9zdWJkaXJfcHJlZml4LyRjZl9uY3VsaWJfcm9vdC9saWIvJGNmX25jdWxpYl9yb290IgorfQorCitkb25lCisKK2NmX3NlYXJjaD0iJGNmX2xpYnJhcnlfcGF0aF9saXN0ICRjZl9zZWFyY2giCisKKwkJCWZvciBjZl9saWJkaXIgaW4gJGNmX3NlYXJjaAorCQkJZG8KKwkJCQllY2hvICIkYXNfbWU6NTA3MTogY2hlY2tpbmcgZm9yIC1sJGNmX25jdWxpYl9yb290IGluICRjZl9saWJkaXIiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgLWwkY2ZfbmN1bGliX3Jvb3QgaW4gJGNmX2xpYmRpci4uLiAkRUNIT19DIiA+JjYKKwkJCQlMSUJTPSItTCRjZl9saWJkaXIgLWwkY2ZfbmN1bGliX3Jvb3QgJGNmX3NhdmVfTElCUyIKKwkJCQljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDUwNzUgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPCR7Y2ZfY3ZfbmN1cnNlc19oZWFkZXI6LWN1cnNlcy5ofT4KK2ludAorbWFpbiAoKQoreworaW5pdHNjcigpCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTo1MDg3OiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo1MDkwOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6NTA5MzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjUwOTY6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBlY2hvICIkYXNfbWU6NTA5ODogcmVzdWx0OiB5ZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKKwkJCSAJCSBldmFsICdjZl9jdl9oYXZlX2xpYl8nJGNmX25jdWxpYl9yb290Jz15ZXMnCisJCQkJCSBicmVhaworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitlY2hvICIkYXNfbWU6NTEwNTogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2CisJCQkJCSBMSUJTPSIkY2Zfc2F2ZV9MSUJTIgorZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKwkJCWRvbmUKKworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworZmkKKworZXZhbCAnY2ZfZm91bmRfbGlicmFyeT0kY2ZfY3ZfaGF2ZV9saWJfJyRjZl9uY3VsaWJfcm9vdAorCitpZiB0ZXN0ICRjZl9mb3VuZF9saWJyYXJ5ID0gbm8gOyB0aGVuCisJeyB7IGVjaG8gIiRhc19tZTo1MTIwOiBlcnJvcjogQ2Fubm90IGxpbmsgJGNmX25jdWxpYl9yb290IGxpYnJhcnkiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogQ2Fubm90IGxpbmsgJGNmX25jdWxpYl9yb290IGxpYnJhcnkiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK2ZpCisKK2ZpCisKK2lmIHRlc3QgLW4gIiRjZl9uY3Vyc2VzX0xJQlMiIDsgdGhlbgorCWVjaG8gIiRhc19tZTo1MTI4OiBjaGVja2luZyBpZiB3ZSBjYW4gbGluayAkY2ZfbmN1bGliX3Jvb3Qgd2l0aG91dCAkY2ZfbmN1cnNlc19MSUJTIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgd2UgY2FuIGxpbmsgJGNmX25jdWxpYl9yb290IHdpdGhvdXQgJGNmX25jdXJzZXNfTElCUy4uLiAkRUNIT19DIiA+JjYKKwljZl9uY3Vyc2VzX1NBVkU9IiRMSUJTIgorCWZvciBwIGluICRjZl9uY3Vyc2VzX0xJQlMgOyBkbworCQlxPWBlY2hvICRMSUJTIHwgc2VkIC1lICJzJSRwICUlIiAtZSAicyUkcCQlJSJgCisJCWlmIHRlc3QgIiRxIiAhPSAiJExJQlMiIDsgdGhlbgorCQkJTElCUz0iJHEiCisJCWZpCisJZG9uZQorCWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgNTEzOCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8JHtjZl9jdl9uY3Vyc2VzX2hlYWRlcjotY3Vyc2VzLmh9PgoraW50CittYWluICgpCit7Citpbml0c2NyKCk7IG1vdXNlbWFzaygwLDApOyB0Z290bygoY2hhciAqKTAsIDAsIDApOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6NTE1MDogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NTE1MzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjUxNTY6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo1MTU5OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgZWNobyAiJGFzX21lOjUxNjE6IHJlc3VsdDogeWVzIiA+JjUKK2VjaG8gIiR7RUNIT19UfXllcyIgPiY2CitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2VjaG8gIiRhc19tZTo1MTY2OiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjYKKwkJIExJQlM9IiRjZl9uY3Vyc2VzX1NBVkUiCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKKworY2ZfbmN1bGliX1JPT1Q9YGVjaG8gIkhBVkVfTElCJGNmX25jdWxpYl9yb290IiB8IHNlZCB5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJWAKKworY2F0ID4+Y29uZmRlZnMuaCA8PEVPRgorI2RlZmluZSAkY2ZfbmN1bGliX1JPT1QgMQorRU9GCisKKwlmaQorZWxzZQorCU5DVVJTRVNfQ09ORklHPW5vbmUKK2ZpCisKK2VjaG8gIiRhc19tZTo1MTg0OiBjaGVja2luZyBpZiB5b3Ugd2FudCB3aWRlLWNoYXJhY3RlciBjb2RlIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgeW91IHdhbnQgd2lkZS1jaGFyYWN0ZXIgY29kZS4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXdpZGVjIG9yIC0tZGlzYWJsZS13aWRlYyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV93aWRlYytzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9IiRlbmFibGVfd2lkZWMiCisgIHdpdGhfd2lkZWM9JGVuYWJsZXZhbAorZWxzZQorICB3aXRoX3dpZGVjPW5vCitmaTsKK2VjaG8gIiRhc19tZTo1MTk0OiByZXN1bHQ6ICR3aXRoX3dpZGVjIiA+JjUKK2VjaG8gIiR7RUNIT19UfSR3aXRoX3dpZGVjIiA+JjYKK2lmIHRlc3QgIiR3aXRoX3dpZGVjIiA9IHllcyA7IHRoZW4KKworZWNobyAiJGFzX21lOjUxOTg6IGNoZWNraW5nIGZvciBtdWx0aWJ5dGUgY2hhcmFjdGVyIHN1cHBvcnQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbXVsdGlieXRlIGNoYXJhY3RlciBzdXBwb3J0Li4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHtjZl9jdl91dGY4X2xpYitzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorCisJY2Zfc2F2ZV9MSUJTPSIkTElCUyIKKwljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDUyMDYgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaW5jbHVkZSA8c3RkbGliLmg+CitpbnQKK21haW4gKCkKK3sKK3B1dHdjKDAsMCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTo1MjE5OiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo1MjIyOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6NTIyNTogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjUyMjg6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBjZl9jdl91dGY4X2xpYj15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisjIElmIHRoZSBsaW5rYWdlIGlzIG5vdCBhbHJlYWR5IGluIHRoZSAkQ1BQRkxBR1MvJExERkxBR1MgY29uZmlndXJhdGlvbiwgdGhlc2UKKyMgd2lsbCBiZSBzZXQgb24gY29tcGxldGlvbiBvZiB0aGUgQUNfVFJZX0xJTksgYmVsb3cuCitjZl9jdl9oZWFkZXJfcGF0aF91dGY4PQorY2ZfY3ZfbGlicmFyeV9wYXRoX3V0Zjg9CisKK2VjaG8gIiR7YXNfbWU6LWNvbmZpZ3VyZX06NTI0MDogdGVzdGluZyBTdGFydGluZyBGSU5EX0xJTktBR0UodXRmOCwpIC4uLiIgMT4mNQorCitjZl9zYXZlX0xJQlM9IiRMSUJTIgorCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDUyNDUgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaW5jbHVkZSA8bGlidXRmOC5oPgoraW50CittYWluICgpCit7CitwdXR3YygwLDApOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6NTI1ODogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NTI2MTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjUyNjQ6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo1MjY3OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKworCWNmX2N2X2ZpbmRfbGlua2FnZV91dGY4PXllcworCWNmX2N2X2hlYWRlcl9wYXRoX3V0Zjg9L3Vzci9pbmNsdWRlCisJY2ZfY3ZfbGlicmFyeV9wYXRoX3V0Zjg9L3Vzci9saWIKKworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK0xJQlM9Ii1sdXRmOCAgJGNmX3NhdmVfTElCUyIKKworY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA1MjgxICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2luY2x1ZGUgPGxpYnV0ZjguaD4KK2ludAorbWFpbiAoKQoreworcHV0d2MoMCwwKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjUyOTQ6IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjUyOTc6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTo1MzAwOiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NTMwMzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisKKwljZl9jdl9maW5kX2xpbmthZ2VfdXRmOD15ZXMKKwljZl9jdl9oZWFkZXJfcGF0aF91dGY4PS91c3IvaW5jbHVkZQorCWNmX2N2X2xpYnJhcnlfcGF0aF91dGY4PS91c3IvbGliCisJY2ZfY3ZfbGlicmFyeV9maWxlX3V0Zjg9Ii1sdXRmOCIKKworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwljZl9jdl9maW5kX2xpbmthZ2VfdXRmOD1ubworCUxJQlM9IiRjZl9zYXZlX0xJQlMiCisKKwl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCWZpbmQgbGlua2FnZSBmb3IgdXRmOCBsaWJyYXJ5IiAxPiY2CisKK2VjaG8gIiR7YXNfbWU6LWNvbmZpZ3VyZX06NTMyMDogdGVzdGluZyBmaW5kIGxpbmthZ2UgZm9yIHV0ZjggbGlicmFyeSAuLi4iIDE+JjUKKworZWNobyAiJHthc19tZTotY29uZmlndXJlfTo1MzIyOiB0ZXN0aW5nIFNlYXJjaGluZyBmb3IgaGVhZGVycyBpbiBGSU5EX0xJTktBR0UodXRmOCwpIC4uLiIgMT4mNQorCisJY2Zfc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorCWNmX3Rlc3RfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKworY2Zfc2VhcmNoPQorCisjIGNvbGxlY3QgdGhlIGN1cnJlbnQgc2V0IG9mIGluY2x1ZGUtZGlyZWN0b3JpZXMgZnJvbSBjb21waWxlciBmbGFncworY2ZfaGVhZGVyX3BhdGhfbGlzdD0iIgoraWYgdGVzdCAtbiAiJHtDRkxBR1N9JHtDUFBGTEFHU30iIDsgdGhlbgorCWZvciBjZl9oZWFkZXJfcGF0aCBpbiAkQ1BQRkxBR1MgJENGTEFHUworCWRvCisJCWNhc2UgJGNmX2hlYWRlcl9wYXRoIGluCisJCSgtSSopCisJCQljZl9oZWFkZXJfcGF0aD1gZWNobyAiLiRjZl9oZWFkZXJfcGF0aCIgfHNlZCAtZSAncy9eLi4uLy8nIC1lICdzLC9pbmNsdWRlJCwsJ2AKKwordGVzdCAieCRjZl9oZWFkZXJfcGF0aCIgIT0gInhOT05FIiAmJiBcCit0ZXN0IC1kICIkY2ZfaGVhZGVyX3BhdGgiICYmIFwKKyB7CisJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIgkuLi4gdGVzdGluZyBmb3IgaW5jbHVkZS1kaXJlY3RvcmllcyB1bmRlciAkY2ZfaGVhZGVyX3BhdGgiCisJdGVzdCAtZCAkY2ZfaGVhZGVyX3BhdGgvaW5jbHVkZSAmJiAgICAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJGNmX2hlYWRlcl9wYXRoL2luY2x1ZGUiCisJdGVzdCAtZCAkY2ZfaGVhZGVyX3BhdGgvaW5jbHVkZS91dGY4ICYmICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkY2ZfaGVhZGVyX3BhdGgvaW5jbHVkZS91dGY4IgorCXRlc3QgLWQgJGNmX2hlYWRlcl9wYXRoL2luY2x1ZGUvdXRmOC9pbmNsdWRlICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkY2ZfaGVhZGVyX3BhdGgvaW5jbHVkZS91dGY4L2luY2x1ZGUiCisJdGVzdCAtZCAkY2ZfaGVhZGVyX3BhdGgvdXRmOC9pbmNsdWRlICYmICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkY2ZfaGVhZGVyX3BhdGgvdXRmOC9pbmNsdWRlIgorCXRlc3QgLWQgJGNmX2hlYWRlcl9wYXRoL3V0ZjgvaW5jbHVkZS91dGY4ICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkY2ZfaGVhZGVyX3BhdGgvdXRmOC9pbmNsdWRlL3V0ZjgiCit9CisKKwkJCWNmX2hlYWRlcl9wYXRoX2xpc3Q9IiRjZl9oZWFkZXJfcGF0aF9saXN0ICRjZl9zZWFyY2giCisJCQk7OworCQllc2FjCisJZG9uZQorZmkKKworIyBhZGQgdGhlIHZhcmlhdGlvbnMgZm9yIHRoZSBwYWNrYWdlIHdlIGFyZSBsb29raW5nIGZvcgorCitjZl9zZWFyY2g9CisKK3Rlc3QgIngkcHJlZml4IiAhPSAieE5PTkUiICYmIFwKK3Rlc3QgLWQgIiRwcmVmaXgiICYmIFwKKyB7CisJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIgkuLi4gdGVzdGluZyBmb3IgaW5jbHVkZS1kaXJlY3RvcmllcyB1bmRlciAkcHJlZml4IgorCXRlc3QgLWQgJHByZWZpeC9pbmNsdWRlICYmICAgICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkcHJlZml4L2luY2x1ZGUiCisJdGVzdCAtZCAkcHJlZml4L2luY2x1ZGUvdXRmOCAmJiAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJHByZWZpeC9pbmNsdWRlL3V0ZjgiCisJdGVzdCAtZCAkcHJlZml4L2luY2x1ZGUvdXRmOC9pbmNsdWRlICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkcHJlZml4L2luY2x1ZGUvdXRmOC9pbmNsdWRlIgorCXRlc3QgLWQgJHByZWZpeC91dGY4L2luY2x1ZGUgJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRwcmVmaXgvdXRmOC9pbmNsdWRlIgorCXRlc3QgLWQgJHByZWZpeC91dGY4L2luY2x1ZGUvdXRmOCAmJiAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJHByZWZpeC91dGY4L2luY2x1ZGUvdXRmOCIKK30KKworZm9yIGNmX3N1YmRpcl9wcmVmaXggaW4gXAorCS91c3IgXAorCS91c3IvbG9jYWwgXAorCS91c3IvcGtnIFwKKwkvb3B0IFwKKwkvb3B0L2xvY2FsIFwKKwkkSE9NRQorZG8KKwordGVzdCAieCRjZl9zdWJkaXJfcHJlZml4IiAhPSAieCRwcmVmaXgiICYmIFwKK3Rlc3QgLWQgIiRjZl9zdWJkaXJfcHJlZml4IiAmJiBcCisodGVzdCAteiAiJHByZWZpeCIgfHwgdGVzdCB4JHByZWZpeCA9IHhOT05FIHx8IHRlc3QgIngkY2Zfc3ViZGlyX3ByZWZpeCIgIT0gIngkcHJlZml4IikgJiYgeworCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJLi4uIHRlc3RpbmcgZm9yIGluY2x1ZGUtZGlyZWN0b3JpZXMgdW5kZXIgJGNmX3N1YmRpcl9wcmVmaXgiCisJdGVzdCAtZCAkY2Zfc3ViZGlyX3ByZWZpeC9pbmNsdWRlICYmICAgICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkY2Zfc3ViZGlyX3ByZWZpeC9pbmNsdWRlIgorCXRlc3QgLWQgJGNmX3N1YmRpcl9wcmVmaXgvaW5jbHVkZS91dGY4ICYmICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkY2Zfc3ViZGlyX3ByZWZpeC9pbmNsdWRlL3V0ZjgiCisJdGVzdCAtZCAkY2Zfc3ViZGlyX3ByZWZpeC9pbmNsdWRlL3V0ZjgvaW5jbHVkZSAmJiAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJGNmX3N1YmRpcl9wcmVmaXgvaW5jbHVkZS91dGY4L2luY2x1ZGUiCisJdGVzdCAtZCAkY2Zfc3ViZGlyX3ByZWZpeC91dGY4L2luY2x1ZGUgJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRjZl9zdWJkaXJfcHJlZml4L3V0ZjgvaW5jbHVkZSIKKwl0ZXN0IC1kICRjZl9zdWJkaXJfcHJlZml4L3V0ZjgvaW5jbHVkZS91dGY4ICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkY2Zfc3ViZGlyX3ByZWZpeC91dGY4L2luY2x1ZGUvdXRmOCIKK30KKworZG9uZQorCit0ZXN0ICIkaW5jbHVkZWRpciIgIT0gTk9ORSAmJiBcCit0ZXN0ICIkaW5jbHVkZWRpciIgIT0gIi91c3IvaW5jbHVkZSIgJiYgXAordGVzdCAtZCAiJGluY2x1ZGVkaXIiICYmIHsKKwl0ZXN0IC1kICRpbmNsdWRlZGlyICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkaW5jbHVkZWRpciIKKwl0ZXN0IC1kICRpbmNsdWRlZGlyL3V0ZjggJiYgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRpbmNsdWRlZGlyL3V0ZjgiCit9CisKK3Rlc3QgIiRvbGRpbmNsdWRlZGlyIiAhPSBOT05FICYmIFwKK3Rlc3QgIiRvbGRpbmNsdWRlZGlyIiAhPSAiL3Vzci9pbmNsdWRlIiAmJiBcCit0ZXN0IC1kICIkb2xkaW5jbHVkZWRpciIgJiYgeworCXRlc3QgLWQgJG9sZGluY2x1ZGVkaXIgICAgJiYgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRvbGRpbmNsdWRlZGlyIgorCXRlc3QgLWQgJG9sZGluY2x1ZGVkaXIvdXRmOCAmJiBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJG9sZGluY2x1ZGVkaXIvdXRmOCIKK30KKworY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRjZl9oZWFkZXJfcGF0aF9saXN0IgorCisJZm9yIGNmX2N2X2hlYWRlcl9wYXRoX3V0ZjggaW4gJGNmX3NlYXJjaAorCWRvCisJCWlmIHRlc3QgLWQgJGNmX2N2X2hlYWRlcl9wYXRoX3V0ZjggOyB0aGVuCisJCQl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCS4uLiB0ZXN0aW5nICRjZl9jdl9oZWFkZXJfcGF0aF91dGY4IiAxPiY2CisKK2VjaG8gIiR7YXNfbWU6LWNvbmZpZ3VyZX06NTQxMzogdGVzdGluZyAuLi4gdGVzdGluZyAkY2ZfY3ZfaGVhZGVyX3BhdGhfdXRmOCAuLi4iIDE+JjUKKworCQkJQ1BQRkxBR1M9IiRjZl9zYXZlX0NQUEZMQUdTIC1JJGNmX2N2X2hlYWRlcl9wYXRoX3V0ZjgiCisJCQljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDU0MTcgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaW5jbHVkZSA8bGlidXRmOC5oPgoraW50CittYWluICgpCit7CitwdXR3YygwLDApOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTo1NDMwOiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo1NDMzOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjU0MzY6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo1NDM5OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKworCQkJCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJLi4uIGZvdW5kIHV0ZjggaGVhZGVycyBpbiAkY2ZfY3ZfaGVhZGVyX3BhdGhfdXRmOCIgMT4mNgorCitlY2hvICIke2FzX21lOi1jb25maWd1cmV9OjU0NDQ6IHRlc3RpbmcgLi4uIGZvdW5kIHV0ZjggaGVhZGVycyBpbiAkY2ZfY3ZfaGVhZGVyX3BhdGhfdXRmOCAuLi4iIDE+JjUKKworCQkJCWNmX2N2X2ZpbmRfbGlua2FnZV91dGY4PW1heWJlCisJCQkJY2ZfdGVzdF9DUFBGTEFHUz0iJENQUEZMQUdTIgorCQkJCWJyZWFrCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCQkJCUNQUEZMQUdTPSIkY2Zfc2F2ZV9DUFBGTEFHUyIKKworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCQlmaQorCWRvbmUKKworCWlmIHRlc3QgIiRjZl9jdl9maW5kX2xpbmthZ2VfdXRmOCIgPSBtYXliZSA7IHRoZW4KKworZWNobyAiJHthc19tZTotY29uZmlndXJlfTo1NDYyOiB0ZXN0aW5nIFNlYXJjaGluZyBmb3IgdXRmOCBsaWJyYXJ5IGluIEZJTkRfTElOS0FHRSh1dGY4LCkgLi4uIiAxPiY1CisKKwkJY2Zfc2F2ZV9MSUJTPSIkTElCUyIKKwkJY2Zfc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKworCQlpZiB0ZXN0ICIkY2ZfY3ZfZmluZF9saW5rYWdlX3V0ZjgiICE9IHllcyA7IHRoZW4KKworY2Zfc2VhcmNoPQorY2ZfbGlicmFyeV9wYXRoX2xpc3Q9IiIKK2lmIHRlc3QgLW4gIiR7TERGTEFHU30ke0xJQlN9IiA7IHRoZW4KKwlmb3IgY2ZfbGlicmFyeV9wYXRoIGluICRMREZMQUdTICRMSUJTCisJZG8KKwkJY2FzZSAkY2ZfbGlicmFyeV9wYXRoIGluCisJCSgtTCopCisJCQljZl9saWJyYXJ5X3BhdGg9YGVjaG8gIi4kY2ZfbGlicmFyeV9wYXRoIiB8c2VkIC1lICdzL14uLi4vLycgLWUgJ3MsL2xpYiQsLCdgCisKK3Rlc3QgIngkY2ZfbGlicmFyeV9wYXRoIiAhPSAieE5PTkUiICYmIFwKK3Rlc3QgLWQgIiRjZl9saWJyYXJ5X3BhdGgiICYmIFwKKyB7CisJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIgkuLi4gdGVzdGluZyBmb3IgbGliLWRpcmVjdG9yaWVzIHVuZGVyICRjZl9saWJyYXJ5X3BhdGgiCisJdGVzdCAtZCAkY2ZfbGlicmFyeV9wYXRoL2xpYiAmJiAgICAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJGNmX2xpYnJhcnlfcGF0aC9saWIiCisJdGVzdCAtZCAkY2ZfbGlicmFyeV9wYXRoL2xpYi91dGY4ICYmICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkY2ZfbGlicmFyeV9wYXRoL2xpYi91dGY4IgorCXRlc3QgLWQgJGNmX2xpYnJhcnlfcGF0aC9saWIvdXRmOC9saWIgJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRjZl9saWJyYXJ5X3BhdGgvbGliL3V0ZjgvbGliIgorCXRlc3QgLWQgJGNmX2xpYnJhcnlfcGF0aC91dGY4L2xpYiAmJiAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJGNmX2xpYnJhcnlfcGF0aC91dGY4L2xpYiIKKwl0ZXN0IC1kICRjZl9saWJyYXJ5X3BhdGgvdXRmOC9saWIvdXRmOCAmJiAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJGNmX2xpYnJhcnlfcGF0aC91dGY4L2xpYi91dGY4IgorfQorCisJCQljZl9saWJyYXJ5X3BhdGhfbGlzdD0iJGNmX2xpYnJhcnlfcGF0aF9saXN0ICRjZl9zZWFyY2giCisJCQk7OworCQllc2FjCisJZG9uZQorZmkKKworY2Zfc2VhcmNoPQorCit0ZXN0ICJ4JHByZWZpeCIgIT0gInhOT05FIiAmJiBcCit0ZXN0IC1kICIkcHJlZml4IiAmJiBcCisgeworCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJLi4uIHRlc3RpbmcgZm9yIGxpYi1kaXJlY3RvcmllcyB1bmRlciAkcHJlZml4IgorCXRlc3QgLWQgJHByZWZpeC9saWIgJiYgICAgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRwcmVmaXgvbGliIgorCXRlc3QgLWQgJHByZWZpeC9saWIvdXRmOCAmJiAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJHByZWZpeC9saWIvdXRmOCIKKwl0ZXN0IC1kICRwcmVmaXgvbGliL3V0ZjgvbGliICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkcHJlZml4L2xpYi91dGY4L2xpYiIKKwl0ZXN0IC1kICRwcmVmaXgvdXRmOC9saWIgJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRwcmVmaXgvdXRmOC9saWIiCisJdGVzdCAtZCAkcHJlZml4L3V0ZjgvbGliL3V0ZjggJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRwcmVmaXgvdXRmOC9saWIvdXRmOCIKK30KKworZm9yIGNmX3N1YmRpcl9wcmVmaXggaW4gXAorCS91c3IgXAorCS91c3IvbG9jYWwgXAorCS91c3IvcGtnIFwKKwkvb3B0IFwKKwkvb3B0L2xvY2FsIFwKKwkkSE9NRQorZG8KKwordGVzdCAieCRjZl9zdWJkaXJfcHJlZml4IiAhPSAieCRwcmVmaXgiICYmIFwKK3Rlc3QgLWQgIiRjZl9zdWJkaXJfcHJlZml4IiAmJiBcCisodGVzdCAteiAiJHByZWZpeCIgfHwgdGVzdCB4JHByZWZpeCA9IHhOT05FIHx8IHRlc3QgIngkY2Zfc3ViZGlyX3ByZWZpeCIgIT0gIngkcHJlZml4IikgJiYgeworCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJLi4uIHRlc3RpbmcgZm9yIGxpYi1kaXJlY3RvcmllcyB1bmRlciAkY2Zfc3ViZGlyX3ByZWZpeCIKKwl0ZXN0IC1kICRjZl9zdWJkaXJfcHJlZml4L2xpYiAmJiAgICAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJGNmX3N1YmRpcl9wcmVmaXgvbGliIgorCXRlc3QgLWQgJGNmX3N1YmRpcl9wcmVmaXgvbGliL3V0ZjggJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRjZl9zdWJkaXJfcHJlZml4L2xpYi91dGY4IgorCXRlc3QgLWQgJGNmX3N1YmRpcl9wcmVmaXgvbGliL3V0ZjgvbGliICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkY2Zfc3ViZGlyX3ByZWZpeC9saWIvdXRmOC9saWIiCisJdGVzdCAtZCAkY2Zfc3ViZGlyX3ByZWZpeC91dGY4L2xpYiAmJiAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJGNmX3N1YmRpcl9wcmVmaXgvdXRmOC9saWIiCisJdGVzdCAtZCAkY2Zfc3ViZGlyX3ByZWZpeC91dGY4L2xpYi91dGY4ICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkY2Zfc3ViZGlyX3ByZWZpeC91dGY4L2xpYi91dGY4IgorfQorCitkb25lCisKK2NmX3NlYXJjaD0iJGNmX2xpYnJhcnlfcGF0aF9saXN0ICRjZl9zZWFyY2giCisKKwkJCWZvciBjZl9jdl9saWJyYXJ5X3BhdGhfdXRmOCBpbiAkY2Zfc2VhcmNoCisJCQlkbworCQkJCWlmIHRlc3QgLWQgJGNmX2N2X2xpYnJhcnlfcGF0aF91dGY4IDsgdGhlbgorCQkJCQl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCS4uLiB0ZXN0aW5nICRjZl9jdl9saWJyYXJ5X3BhdGhfdXRmOCIgMT4mNgorCitlY2hvICIke2FzX21lOi1jb25maWd1cmV9OjU1Mzc6IHRlc3RpbmcgLi4uIHRlc3RpbmcgJGNmX2N2X2xpYnJhcnlfcGF0aF91dGY4IC4uLiIgMT4mNQorCisJCQkJCUNQUEZMQUdTPSIkY2ZfdGVzdF9DUFBGTEFHUyIKKwkJCQkJTElCUz0iLWx1dGY4ICAkY2Zfc2F2ZV9MSUJTIgorCQkJCQlMREZMQUdTPSIkY2Zfc2F2ZV9MREZMQUdTIC1MJGNmX2N2X2xpYnJhcnlfcGF0aF91dGY4IgorCQkJCQljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDU1NDMgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaW5jbHVkZSA8bGlidXRmOC5oPgoraW50CittYWluICgpCit7CitwdXR3YygwLDApOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6NTU1NjogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NTU1OTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjU1NjI6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo1NTY1OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKworCQkJCQl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCS4uLiBmb3VuZCB1dGY4IGxpYnJhcnkgaW4gJGNmX2N2X2xpYnJhcnlfcGF0aF91dGY4IiAxPiY2CisKK2VjaG8gIiR7YXNfbWU6LWNvbmZpZ3VyZX06NTU3MDogdGVzdGluZyAuLi4gZm91bmQgdXRmOCBsaWJyYXJ5IGluICRjZl9jdl9saWJyYXJ5X3BhdGhfdXRmOCAuLi4iIDE+JjUKKworCQkJCQljZl9jdl9maW5kX2xpbmthZ2VfdXRmOD15ZXMKKwkJCQkJY2ZfY3ZfbGlicmFyeV9maWxlX3V0Zjg9Ii1sdXRmOCIKKwkJCQkJYnJlYWsKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJCQkJCUNQUEZMQUdTPSIkY2Zfc2F2ZV9DUFBGTEFHUyIKKwkJCQkJTElCUz0iJGNmX3NhdmVfTElCUyIKKwkJCQkJTERGTEFHUz0iJGNmX3NhdmVfTERGTEFHUyIKKworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKwkJCQlmaQorCQkJZG9uZQorCQkJQ1BQRkxBR1M9IiRjZl9zYXZlX0NQUEZMQUdTIgorCQkJTERGTEFHUz0iJGNmX3NhdmVfTERGTEFHUyIKKwkJZmkKKworCWVsc2UKKwkJY2ZfY3ZfZmluZF9saW5rYWdlX3V0Zjg9bm8KKwlmaQorCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorCitMSUJTPSIkY2Zfc2F2ZV9MSUJTIgorCitpZiB0ZXN0ICIkY2ZfY3ZfZmluZF9saW5rYWdlX3V0ZjgiID0geWVzIDsgdGhlbgorY2ZfY3ZfdXRmOF9saWI9YWRkLW9uCitlbHNlCitjZl9jdl91dGY4X2xpYj1ubworZmkKKworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6NTYxMjogcmVzdWx0OiAkY2ZfY3ZfdXRmOF9saWIiID4mNQorZWNobyAiJHtFQ0hPX1R9JGNmX2N2X3V0ZjhfbGliIiA+JjYKKworIyBIQVZFX0xJQlVURjhfSCBpcyB1c2VkIGJ5IG5jdXJzZXMgaWYgY3Vyc2VzLmggaXMgc2hhcmVkIGJldHdlZW4KKyMgbmN1cnNlcy9uY3Vyc2VzdzoKK2lmIHRlc3QgIiRjZl9jdl91dGY4X2xpYiIgPSAiYWRkLW9uIiA7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9MSUJVVEY4X0ggMQorRU9GCisKK2lmIHRlc3QgLW4gIiRjZl9jdl9oZWFkZXJfcGF0aF91dGY4IiA7IHRoZW4KKyAgZm9yIGNmX2FkZF9pbmNkaXIgaW4gJGNmX2N2X2hlYWRlcl9wYXRoX3V0ZjgKKyAgZG8KKwl3aGlsZSB0ZXN0ICRjZl9hZGRfaW5jZGlyICE9IC91c3IvaW5jbHVkZQorCWRvCisJICBpZiB0ZXN0IC1kICRjZl9hZGRfaW5jZGlyCisJICB0aGVuCisJCWNmX2hhdmVfaW5jZGlyPW5vCisJCWlmIHRlc3QgLW4gIiRDRkxBR1MkQ1BQRkxBR1MiIDsgdGhlbgorCQkgICMgYSBsb29wIGlzIG5lZWRlZCB0byBlbnN1cmUgd2UgY2FuIGFkZCBzdWJkaXJzIG9mIGV4aXN0aW5nIGRpcnMKKwkJICBmb3IgY2ZfdGVzdF9pbmNkaXIgaW4gJENGTEFHUyAkQ1BQRkxBR1MgOyBkbworCQkJaWYgdGVzdCAiLiRjZl90ZXN0X2luY2RpciIgPSAiLi1JJGNmX2FkZF9pbmNkaXIiIDsgdGhlbgorCQkJICBjZl9oYXZlX2luY2Rpcj15ZXM7IGJyZWFrCisJCQlmaQorCQkgIGRvbmUKKwkJZmkKKworCQlpZiB0ZXN0ICIkY2ZfaGF2ZV9pbmNkaXIiID0gbm8gOyB0aGVuCisJCSAgaWYgdGVzdCAiJGNmX2FkZF9pbmNkaXIiID0gL3Vzci9sb2NhbC9pbmNsdWRlIDsgdGhlbgorCQkJaWYgdGVzdCAiJEdDQyIgPSB5ZXMKKwkJCXRoZW4KKwkJCSAgY2Zfc2F2ZV9DUFBGTEFHUz0kQ1BQRkxBR1MKKwkJCSAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtSSRjZl9hZGRfaW5jZGlyIgorCQkJICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDU2NDcgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CitpbnQKK21haW4gKCkKK3sKK3ByaW50ZigiSGVsbG8iKQorICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTo1NjU5OiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo1NjYyOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjU2NjU6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo1NjY4OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgOgorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitjZl9oYXZlX2luY2Rpcj15ZXMKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKwkJCSAgQ1BQRkxBR1M9JGNmX3NhdmVfQ1BQRkxBR1MKKwkJCWZpCisJCSAgZmkKKwkJZmkKKworCQlpZiB0ZXN0ICIkY2ZfaGF2ZV9pbmNkaXIiID0gbm8gOyB0aGVuCisJCSAgdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIglhZGRpbmcgJGNmX2FkZF9pbmNkaXIgdG8gaW5jbHVkZS1wYXRoIiAxPiY2CisKK2VjaG8gIiR7YXNfbWU6LWNvbmZpZ3VyZX06NTY4NTogdGVzdGluZyBhZGRpbmcgJGNmX2FkZF9pbmNkaXIgdG8gaW5jbHVkZS1wYXRoIC4uLiIgMT4mNQorCisJCSAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtSSRjZl9hZGRfaW5jZGlyIgorCisJCSAgY2ZfdG9wX2luY2Rpcj1gZWNobyAkY2ZfYWRkX2luY2RpciB8IHNlZCAtZSAncyUvaW5jbHVkZS8uKiQlL2luY2x1ZGUlJ2AKKwkJICB0ZXN0ICIkY2ZfdG9wX2luY2RpciIgPSAiJGNmX2FkZF9pbmNkaXIiICYmIGJyZWFrCisJCSAgY2ZfYWRkX2luY2Rpcj0iJGNmX3RvcF9pbmNkaXIiCisJCWVsc2UKKwkJICBicmVhaworCQlmaQorCSAgZWxzZQorCQlicmVhaworCSAgZmkKKwlkb25lCisgIGRvbmUKK2ZpCisKK2lmIHRlc3QgLW4gIiRjZl9jdl9saWJyYXJ5X3BhdGhfdXRmOCIgOyB0aGVuCisJZm9yIGNmX2FkZF9saWJkaXIgaW4gJGNmX2N2X2xpYnJhcnlfcGF0aF91dGY4CisJZG8KKwkJaWYgdGVzdCAkY2ZfYWRkX2xpYmRpciA9IC91c3IvbGliIDsgdGhlbgorCQkJOgorCQllbGlmIHRlc3QgLWQgJGNmX2FkZF9saWJkaXIKKwkJdGhlbgorCQkJY2ZfaGF2ZV9saWJkaXI9bm8KKwkJCWlmIHRlc3QgLW4gIiRMREZMQUdTJExJQlMiIDsgdGhlbgorCQkJCSMgYSBsb29wIGlzIG5lZWRlZCB0byBlbnN1cmUgd2UgY2FuIGFkZCBzdWJkaXJzIG9mIGV4aXN0aW5nIGRpcnMKKwkJCQlmb3IgY2ZfdGVzdF9saWJkaXIgaW4gJExERkxBR1MgJExJQlMgOyBkbworCQkJCQlpZiB0ZXN0ICIuJGNmX3Rlc3RfbGliZGlyIiA9ICIuLUwkY2ZfYWRkX2xpYmRpciIgOyB0aGVuCisJCQkJCQljZl9oYXZlX2xpYmRpcj15ZXM7IGJyZWFrCisJCQkJCWZpCisJCQkJZG9uZQorCQkJZmkKKwkJCWlmIHRlc3QgIiRjZl9oYXZlX2xpYmRpciIgPSBubyA7IHRoZW4KKwkJCQl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCWFkZGluZyAkY2ZfYWRkX2xpYmRpciB0byBsaWJyYXJ5LXBhdGgiIDE+JjYKKworZWNobyAiJHthc19tZTotY29uZmlndXJlfTo1NzIxOiB0ZXN0aW5nIGFkZGluZyAkY2ZfYWRkX2xpYmRpciB0byBsaWJyYXJ5LXBhdGggLi4uIiAxPiY1CisKKwkJCQlMREZMQUdTPSItTCRjZl9hZGRfbGliZGlyICRMREZMQUdTIgorCQkJZmkKKwkJZmkKKwlkb25lCitmaQorCitjZl9hZGRfbGlicz0iJGNmX2N2X2xpYnJhcnlfZmlsZV91dGY4IgorIyBGaWx0ZXIgb3V0IGR1cGxpY2F0ZXMgLSB0aGlzIGhhcHBlbnMgd2l0aCBiYWRseS1kZXNpZ25lZCAiLnBjIiBmaWxlcy4uLgorZm9yIGNmX2FkZF8xbGliIGluICRMSUJTCitkbworCWZvciBjZl9hZGRfMmxpYiBpbiAkY2ZfYWRkX2xpYnMKKwlkbworCQlpZiB0ZXN0ICJ4JGNmX2FkZF8xbGliIiA9ICJ4JGNmX2FkZF8ybGliIgorCQl0aGVuCisJCQljZl9hZGRfMWxpYj0KKwkJCWJyZWFrCisJCWZpCisJZG9uZQorCXRlc3QgLW4gIiRjZl9hZGRfMWxpYiIgJiYgY2ZfYWRkX2xpYnM9IiRjZl9hZGRfbGlicyAkY2ZfYWRkXzFsaWIiCitkb25lCitMSUJTPSIkY2ZfYWRkX2xpYnMiCisKK2ZpCisKK2NmX25jdWNvbmZpZ19yb290PW5jdXJzZXN3CitjZl9oYXZlX25jdWNvbmZpZz1ubworCitpZiB0ZXN0ICJ4JHtQS0dfQ09ORklHOj1ub25lfSIgIT0geG5vbmU7IHRoZW4KKwllY2hvICIkYXNfbWU6NTc1MTogY2hlY2tpbmcgcGtnLWNvbmZpZyBmb3IgJGNmX25jdWNvbmZpZ19yb290IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgcGtnLWNvbmZpZyBmb3IgJGNmX25jdWNvbmZpZ19yb290Li4uICRFQ0hPX0MiID4mNgorCWlmICIkUEtHX0NPTkZJRyIgLS1leGlzdHMgJGNmX25jdWNvbmZpZ19yb290IDsgdGhlbgorCQllY2hvICIkYXNfbWU6NTc1NDogcmVzdWx0OiB5ZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKKworCQllY2hvICIkYXNfbWU6NTc1NzogY2hlY2tpbmcgaWYgdGhlICRjZl9uY3Vjb25maWdfcm9vdCBwYWNrYWdlIGZpbGVzIHdvcmsiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB0aGUgJGNmX25jdWNvbmZpZ19yb290IHBhY2thZ2UgZmlsZXMgd29yay4uLiAkRUNIT19DIiA+JjYKKwkJY2ZfaGF2ZV9uY3Vjb25maWc9dW5rbm93bgorCisJCWNmX3NhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKwkJY2Zfc2F2ZV9MSUJTPSIkTElCUyIKKworCQlDUFBGTEFHUz0iJENQUEZMQUdTIGAkUEtHX0NPTkZJRyAtLWNmbGFncyAkY2ZfbmN1Y29uZmlnX3Jvb3RgIgorCitjZl9hZGRfbGlicz0iYCRQS0dfQ09ORklHIC0tbGlicyAkY2ZfbmN1Y29uZmlnX3Jvb3RgIgorIyBGaWx0ZXIgb3V0IGR1cGxpY2F0ZXMgLSB0aGlzIGhhcHBlbnMgd2l0aCBiYWRseS1kZXNpZ25lZCAiLnBjIiBmaWxlcy4uLgorZm9yIGNmX2FkZF8xbGliIGluICRMSUJTCitkbworCWZvciBjZl9hZGRfMmxpYiBpbiAkY2ZfYWRkX2xpYnMKKwlkbworCQlpZiB0ZXN0ICJ4JGNmX2FkZF8xbGliIiA9ICJ4JGNmX2FkZF8ybGliIgorCQl0aGVuCisJCQljZl9hZGRfMWxpYj0KKwkJCWJyZWFrCisJCWZpCisJZG9uZQorCXRlc3QgLW4gIiRjZl9hZGRfMWxpYiIgJiYgY2ZfYWRkX2xpYnM9IiRjZl9hZGRfbGlicyAkY2ZfYWRkXzFsaWIiCitkb25lCitMSUJTPSIkY2ZfYWRkX2xpYnMiCisKKwkJY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA1NzgzICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDwke2NmX2N2X25jdXJzZXNfaGVhZGVyOi1jdXJzZXMuaH0+CitpbnQKK21haW4gKCkKK3sKK2luaXRzY3IoKTsgbW91c2VtYXNrKDAsMCk7IHRnb3RvKChjaGFyICopMCwgMCwgMCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTo1Nzk1OiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo1Nzk4OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6NTgwMTogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjU4MDQ6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICBjZl9oYXZlX25jdWNvbmZpZz1tYXliZQorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDU4MTAgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPCR7Y2ZfY3ZfbmN1cnNlc19oZWFkZXI6LWN1cnNlcy5ofT4KKwkJCQlpbnQgbWFpbih2b2lkKQorCQkJCXsgY2hhciAqeHggPSBjdXJzZXNfdmVyc2lvbigpOyByZXR1cm4gKHh4ID09IDApOyB9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6NTgxNzogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NTgyMDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6NTgyMjogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjU4MjU6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBjZl9oYXZlX25jdWNvbmZpZz15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKK2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2NmX2hhdmVfbmN1Y29uZmlnPW5vCitmaQorcm0gLWYgY29yZSBjb3JlLiogKi5jb3JlIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2NmX2hhdmVfbmN1Y29uZmlnPW5vCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorCQllY2hvICIkYXNfbWU6NTg0MjogcmVzdWx0OiAkY2ZfaGF2ZV9uY3Vjb25maWciID4mNQorZWNobyAiJHtFQ0hPX1R9JGNmX2hhdmVfbmN1Y29uZmlnIiA+JjYKKwkJdGVzdCAiJGNmX2hhdmVfbmN1Y29uZmlnIiA9IG1heWJlICYmIGNmX2hhdmVfbmN1Y29uZmlnPXllcworCQlpZiB0ZXN0ICIkY2ZfaGF2ZV9uY3Vjb25maWciICE9ICJ5ZXMiCisJCXRoZW4KKwkJCUNQUEZMQUdTPSIkY2Zfc2F2ZV9DUFBGTEFHUyIKKwkJCUxJQlM9IiRjZl9zYXZlX0xJQlMiCisJCQlOQ1VSU0VTX0NPTkZJR19QS0c9bm9uZQorCQllbHNlCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIE5DVVJTRVMgMQorRU9GCisKKwkJCU5DVVJTRVNfQ09ORklHX1BLRz0kY2ZfbmN1Y29uZmlnX3Jvb3QKKwkJZmkKKworCWVsc2UKKwkJZWNobyAiJGFzX21lOjU4NjA6IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorCQlOQ1VSU0VTX0NPTkZJR19QS0c9bm9uZQorCWZpCitlbHNlCisJTkNVUlNFU19DT05GSUdfUEtHPW5vbmUKK2ZpCisKK2lmIHRlc3QgIngkY2ZfaGF2ZV9uY3Vjb25maWciID0gInhubyI7IHRoZW4KKwllY2hvICJMb29raW5nIGZvciAke2NmX25jdWNvbmZpZ19yb290fS1jb25maWciCisKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgZm9yIGFjX3Byb2cgaW4gJHtjZl9uY3Vjb25maWdfcm9vdH0tY29uZmlnICR7Y2ZfbmN1Y29uZmlnX3Jvb3R9Ni1jb25maWcgJHtjZl9uY3Vjb25maWdfcm9vdH01LWNvbmZpZworICBkbworICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCitlY2hvICIkYXNfbWU6NTg3NjogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9wcm9nX05DVVJTRVNfQ09ORklHK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiROQ1VSU0VTX0NPTkZJRyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19OQ1VSU0VTX0NPTkZJRz0iJE5DVVJTRVNfQ09ORklHIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKKyAgYWNfc2F2ZV9JRlM9JElGUzsgSUZTPSRhY19wYXRoX3NlcGFyYXRvcgorYWNfZHVtbXk9IiRQQVRIIgorZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCisgIElGUz0kYWNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgJGFzX2V4ZWN1dGFibGVfcCAiJGFjX2Rpci8kYWNfd29yZCIgfHwgY29udGludWUKK2FjX2N2X3Byb2dfTkNVUlNFU19DT05GSUc9IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgorZWNobyAiJGFzX21lOjU4OTE6IGZvdW5kICRhY19kaXIvJGFjX3dvcmQiID4mNQorYnJlYWsKK2RvbmUKKworZmkKK2ZpCitOQ1VSU0VTX0NPTkZJRz0kYWNfY3ZfcHJvZ19OQ1VSU0VTX0NPTkZJRworaWYgdGVzdCAtbiAiJE5DVVJTRVNfQ09ORklHIjsgdGhlbgorICBlY2hvICIkYXNfbWU6NTg5OTogcmVzdWx0OiAkTkNVUlNFU19DT05GSUciID4mNQorZWNobyAiJHtFQ0hPX1R9JE5DVVJTRVNfQ09ORklHIiA+JjYKK2Vsc2UKKyAgZWNobyAiJGFzX21lOjU5MDI6IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorZmkKKworICAgIHRlc3QgLW4gIiROQ1VSU0VTX0NPTkZJRyIgJiYgYnJlYWsKKyAgZG9uZQorZmkKK2lmIHRlc3QgLXogIiROQ1VSU0VTX0NPTkZJRyI7IHRoZW4KKyAgYWNfY3RfTkNVUlNFU19DT05GSUc9JE5DVVJTRVNfQ09ORklHCisgIGZvciBhY19wcm9nIGluICR7Y2ZfbmN1Y29uZmlnX3Jvb3R9LWNvbmZpZyAke2NmX25jdWNvbmZpZ19yb290fTYtY29uZmlnICR7Y2ZfbmN1Y29uZmlnX3Jvb3R9NS1jb25maWcKK2RvCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCitlY2hvICIkYXNfbWU6NTkxNTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X05DVVJTRVNfQ09ORklHK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9OQ1VSU0VTX0NPTkZJRyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9OQ1VSU0VTX0NPTkZJRz0iJGFjX2N0X05DVVJTRVNfQ09ORklHIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKKyAgYWNfc2F2ZV9JRlM9JElGUzsgSUZTPSRhY19wYXRoX3NlcGFyYXRvcgorYWNfZHVtbXk9IiRQQVRIIgorZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCisgIElGUz0kYWNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgJGFzX2V4ZWN1dGFibGVfcCAiJGFjX2Rpci8kYWNfd29yZCIgfHwgY29udGludWUKK2FjX2N2X3Byb2dfYWNfY3RfTkNVUlNFU19DT05GSUc9IiRhY19wcm9nIgorZWNobyAiJGFzX21lOjU5MzA6IGZvdW5kICRhY19kaXIvJGFjX3dvcmQiID4mNQorYnJlYWsKK2RvbmUKKworZmkKK2ZpCithY19jdF9OQ1VSU0VTX0NPTkZJRz0kYWNfY3ZfcHJvZ19hY19jdF9OQ1VSU0VTX0NPTkZJRworaWYgdGVzdCAtbiAiJGFjX2N0X05DVVJTRVNfQ09ORklHIjsgdGhlbgorICBlY2hvICIkYXNfbWU6NTkzODogcmVzdWx0OiAkYWNfY3RfTkNVUlNFU19DT05GSUciID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N0X05DVVJTRVNfQ09ORklHIiA+JjYKK2Vsc2UKKyAgZWNobyAiJGFzX21lOjU5NDE6IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorZmkKKworICB0ZXN0IC1uICIkYWNfY3RfTkNVUlNFU19DT05GSUciICYmIGJyZWFrCitkb25lCit0ZXN0IC1uICIkYWNfY3RfTkNVUlNFU19DT05GSUciIHx8IGFjX2N0X05DVVJTRVNfQ09ORklHPSJub25lIgorCisgIE5DVVJTRVNfQ09ORklHPSRhY19jdF9OQ1VSU0VTX0NPTkZJRworZmkKKworCWlmIHRlc3QgIiROQ1VSU0VTX0NPTkZJRyIgIT0gbm9uZSA7IHRoZW4KKworCQlDUFBGTEFHUz0iJENQUEZMQUdTIGAkTkNVUlNFU19DT05GSUcgLS1jZmxhZ3NgIgorCitjZl9hZGRfbGlicz0iYCROQ1VSU0VTX0NPTkZJRyAtLWxpYnNgIgorIyBGaWx0ZXIgb3V0IGR1cGxpY2F0ZXMgLSB0aGlzIGhhcHBlbnMgd2l0aCBiYWRseS1kZXNpZ25lZCAiLnBjIiBmaWxlcy4uLgorZm9yIGNmX2FkZF8xbGliIGluICRMSUJTCitkbworCWZvciBjZl9hZGRfMmxpYiBpbiAkY2ZfYWRkX2xpYnMKKwlkbworCQlpZiB0ZXN0ICJ4JGNmX2FkZF8xbGliIiA9ICJ4JGNmX2FkZF8ybGliIgorCQl0aGVuCisJCQljZl9hZGRfMWxpYj0KKwkJCWJyZWFrCisJCWZpCisJZG9uZQorCXRlc3QgLW4gIiRjZl9hZGRfMWxpYiIgJiYgY2ZfYWRkX2xpYnM9IiRjZl9hZGRfbGlicyAkY2ZfYWRkXzFsaWIiCitkb25lCitMSUJTPSIkY2ZfYWRkX2xpYnMiCisKKwkJIyBldmVuIHdpdGggY29uZmlnIHNjcmlwdCwgc29tZSBwYWNrYWdlcyB1c2Ugbm8tb3ZlcnJpZGUgZm9yIGN1cnNlcy5oCisKK2VjaG8gIiRhc19tZTo1OTc0OiBjaGVja2luZyBpZiB3ZSBoYXZlIGlkZW50aWZpZWQgY3Vyc2VzIGhlYWRlcnMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB3ZSBoYXZlIGlkZW50aWZpZWQgY3Vyc2VzIGhlYWRlcnMuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2NmX2N2X25jdXJzZXNfaGVhZGVyK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKK2NmX2N2X25jdXJzZXNfaGVhZGVyPW5vbmUKK2ZvciBjZl9oZWFkZXIgaW4gXAorCW5jdXJzZXMuaCBuY3Vyc2Vzdy9uY3Vyc2VzLmggXAorCWN1cnNlcy5oIG5jdXJzZXN3L2N1cnNlcy5oCitkbworY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA1OTg2ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDwke2NmX2hlYWRlcn0+CitpbnQKK21haW4gKCkKK3sKK2luaXRzY3IoKTsgdGdvdG8oIj8iLCAwLDApCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjU5OTg6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjYwMDE6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6NjAwNDogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjYwMDc6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBjZl9jdl9uY3Vyc2VzX2hlYWRlcj0kY2ZfaGVhZGVyOyBicmVhaworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Citkb25lCisKK2ZpCitlY2hvICIkYXNfbWU6NjAxODogcmVzdWx0OiAkY2ZfY3ZfbmN1cnNlc19oZWFkZXIiID4mNQorZWNobyAiJHtFQ0hPX1R9JGNmX2N2X25jdXJzZXNfaGVhZGVyIiA+JjYKKworaWYgdGVzdCAiJGNmX2N2X25jdXJzZXNfaGVhZGVyIiA9IG5vbmUgOyB0aGVuCisJeyB7IGVjaG8gIiRhc19tZTo2MDIyOiBlcnJvcjogTm8gY3Vyc2VzIGhlYWRlci1maWxlcyBmb3VuZCIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBObyBjdXJzZXMgaGVhZGVyLWZpbGVzIGZvdW5kIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitmaQorCisjIGNoZWF0LCB0byBnZXQgdGhlIHJpZ2h0ICNkZWZpbmUncyBmb3IgSEFWRV9OQ1VSU0VTX0gsIGV0Yy4KKworZm9yIGFjX2hlYWRlciBpbiAkY2ZfY3ZfbmN1cnNlc19oZWFkZXIKK2RvCithc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2VjaG8gIiRhc19tZTo2MDMyOiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgoraWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDYwMzggImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPCRhY19oZWFkZXI+CitfQUNFT0YKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjYwNDI6IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZWdyZXAgLXYgJ14gKlwrJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOjYwNDg6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworICBlbHNlCisgICAgYWNfY3BwX2Vycj0KKyAgZmkKK2Vsc2UKKyAgYWNfY3BwX2Vycj15ZXMKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KKyAgZXZhbCAiJGFzX2FjX0hlYWRlcj15ZXMiCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBldmFsICIkYXNfYWNfSGVhZGVyPW5vIgorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CitmaQorZWNobyAiJGFzX21lOjYwNjc6IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQorZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgoraWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgorICBjYXQgPj5jb25mZGVmcy5oIDw8RU9GCisjZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorRU9GCisKK2ZpCitkb25lCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIE5DVVJTRVMgMQorRU9GCisKK2NmX25jdWxpYl9ST09UPWBlY2hvICJIQVZFX0xJQiRjZl9uY3Vjb25maWdfcm9vdCIgfCBzZWQgeSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyVgCisKKwkJY2F0ID4+Y29uZmRlZnMuaCA8PEVPRgorI2RlZmluZSAkY2ZfbmN1bGliX1JPT1QgMQorRU9GCisKKwkJCQljZl9jdl9uY3Vyc2VzX3ZlcnNpb249YCROQ1VSU0VTX0NPTkZJRyAtLXZlcnNpb25gCisKKwllbHNlCisKK2NmX25jdWhkcl9yb290PW5jdXJzZXN3CisKK3Rlc3QgLW4gIiRjZl9jdl9jdXJzZXNfZGlyIiAmJiBcCit0ZXN0ICIkY2ZfY3ZfY3Vyc2VzX2RpciIgIT0gIm5vIiAmJiB7IFwKKworaWYgdGVzdCAtbiAiJGNmX2N2X2N1cnNlc19kaXIvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QiIDsgdGhlbgorICBmb3IgY2ZfYWRkX2luY2RpciBpbiAkY2ZfY3ZfY3Vyc2VzX2Rpci9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdAorICBkbworCXdoaWxlIHRlc3QgJGNmX2FkZF9pbmNkaXIgIT0gL3Vzci9pbmNsdWRlCisJZG8KKwkgIGlmIHRlc3QgLWQgJGNmX2FkZF9pbmNkaXIKKwkgIHRoZW4KKwkJY2ZfaGF2ZV9pbmNkaXI9bm8KKwkJaWYgdGVzdCAtbiAiJENGTEFHUyRDUFBGTEFHUyIgOyB0aGVuCisJCSAgIyBhIGxvb3AgaXMgbmVlZGVkIHRvIGVuc3VyZSB3ZSBjYW4gYWRkIHN1YmRpcnMgb2YgZXhpc3RpbmcgZGlycworCQkgIGZvciBjZl90ZXN0X2luY2RpciBpbiAkQ0ZMQUdTICRDUFBGTEFHUyA7IGRvCisJCQlpZiB0ZXN0ICIuJGNmX3Rlc3RfaW5jZGlyIiA9ICIuLUkkY2ZfYWRkX2luY2RpciIgOyB0aGVuCisJCQkgIGNmX2hhdmVfaW5jZGlyPXllczsgYnJlYWsKKwkJCWZpCisJCSAgZG9uZQorCQlmaQorCisJCWlmIHRlc3QgIiRjZl9oYXZlX2luY2RpciIgPSBubyA7IHRoZW4KKwkJICBpZiB0ZXN0ICIkY2ZfYWRkX2luY2RpciIgPSAvdXNyL2xvY2FsL2luY2x1ZGUgOyB0aGVuCisJCQlpZiB0ZXN0ICIkR0NDIiA9IHllcworCQkJdGhlbgorCQkJICBjZl9zYXZlX0NQUEZMQUdTPSRDUFBGTEFHUworCQkJICBDUFBGTEFHUz0iJENQUEZMQUdTIC1JJGNmX2FkZF9pbmNkaXIiCisJCQkgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgNjEyMCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KK2ludAorbWFpbiAoKQoreworcHJpbnRmKCJIZWxsbyIpCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjYxMzI6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjYxMzU6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6NjEzODogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjYxNDE6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICA6CitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2NmX2hhdmVfaW5jZGlyPXllcworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCQkJICBDUFBGTEFHUz0kY2Zfc2F2ZV9DUFBGTEFHUworCQkJZmkKKwkJICBmaQorCQlmaQorCisJCWlmIHRlc3QgIiRjZl9oYXZlX2luY2RpciIgPSBubyA7IHRoZW4KKwkJICB0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCWFkZGluZyAkY2ZfYWRkX2luY2RpciB0byBpbmNsdWRlLXBhdGgiIDE+JjYKKworZWNobyAiJHthc19tZTotY29uZmlndXJlfTo2MTU4OiB0ZXN0aW5nIGFkZGluZyAkY2ZfYWRkX2luY2RpciB0byBpbmNsdWRlLXBhdGggLi4uIiAxPiY1CisKKwkJICBDUFBGTEFHUz0iJENQUEZMQUdTIC1JJGNmX2FkZF9pbmNkaXIiCisKKwkJICBjZl90b3BfaW5jZGlyPWBlY2hvICRjZl9hZGRfaW5jZGlyIHwgc2VkIC1lICdzJS9pbmNsdWRlLy4qJCUvaW5jbHVkZSUnYAorCQkgIHRlc3QgIiRjZl90b3BfaW5jZGlyIiA9ICIkY2ZfYWRkX2luY2RpciIgJiYgYnJlYWsKKwkJICBjZl9hZGRfaW5jZGlyPSIkY2ZfdG9wX2luY2RpciIKKwkJZWxzZQorCQkgIGJyZWFrCisJCWZpCisJICBlbHNlCisJCWJyZWFrCisJICBmaQorCWRvbmUKKyAgZG9uZQorZmkKKworfQorCitlY2hvICIkYXNfbWU6NjE3NzogY2hlY2tpbmcgZm9yICRjZl9uY3VoZHJfcm9vdCBoZWFkZXIgaW4gaW5jbHVkZS1wYXRoIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRjZl9uY3VoZHJfcm9vdCBoZWFkZXIgaW4gaW5jbHVkZS1wYXRoLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHtjZl9jdl9uY3Vyc2VzX2grc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKworCWNmX2hlYWRlcl9saXN0PSIkY2ZfbmN1aGRyX3Jvb3QvY3Vyc2VzLmggJGNmX25jdWhkcl9yb290L25jdXJzZXMuaCIKKwkoIHRlc3QgIiRjZl9uY3VoZHJfcm9vdCIgPSBuY3Vyc2VzIHx8IHRlc3QgIiRjZl9uY3VoZHJfcm9vdCIgPSBuY3Vyc2VzdyApICYmIGNmX2hlYWRlcl9saXN0PSIkY2ZfaGVhZGVyX2xpc3QgY3Vyc2VzLmggbmN1cnNlcy5oIgorCWZvciBjZl9oZWFkZXIgaW4gJGNmX2hlYWRlcl9saXN0CisJZG8KKworCWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgNjE4OSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNkZWZpbmUgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRAorI3VuZGVmICBIQVZFX0xJQlVURjhfSAkvKiBpbiBjYXNlIHdlIHVzZWQgQ0ZfVVRGOF9MSUIgKi8KKyNkZWZpbmUgSEFWRV9MSUJVVEY4X0gJLyogdG8gZm9yY2UgbmN1cnNlcycgaGVhZGVyIGZpbGUgdG8gdXNlIGNjaGFyX3QgKi8KKworI2luY2x1ZGUgPCRjZl9oZWFkZXI+CitpbnQKK21haW4gKCkKK3sKKworI2lmZGVmIE5DVVJTRVNfVkVSU0lPTgorCisjaWZuZGVmIFdBQ1NfQlNTQgorCW1ha2UgYW4gZXJyb3IKKyNlbmRpZgorCitwcmludGYoIiVzXG4iLCBOQ1VSU0VTX1ZFUlNJT04pOworI2Vsc2UKKyNpZmRlZiBfX05DVVJTRVNfSAorcHJpbnRmKCJvbGRcbiIpOworI2Vsc2UKKwltYWtlIGFuIGVycm9yCisjZW5kaWYKKyNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjYyMjE6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjYyMjQ6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6NjIyNzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjYyMzA6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBjZl9jdl9uY3Vyc2VzX2g9JGNmX2hlYWRlcgorCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2NmX2N2X25jdXJzZXNfaD1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCisJCXRlc3QgIiRjZl9jdl9uY3Vyc2VzX2giICE9IG5vICYmIGJyZWFrCisJZG9uZQorCitmaQorZWNobyAiJGFzX21lOjYyNDU6IHJlc3VsdDogJGNmX2N2X25jdXJzZXNfaCIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfY3ZfbmN1cnNlc19oIiA+JjYKKworaWYgdGVzdCAiJGNmX2N2X25jdXJzZXNfaCIgIT0gbm8gOyB0aGVuCisJY2ZfY3ZfbmN1cnNlc19oZWFkZXI9JGNmX2N2X25jdXJzZXNfaAorZWxzZQorCitlY2hvICIkYXNfbWU6NjI1MjogY2hlY2tpbmcgZm9yICRjZl9uY3VoZHJfcm9vdCBpbmNsdWRlLXBhdGgiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGNmX25jdWhkcl9yb290IGluY2x1ZGUtcGF0aC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7Y2ZfY3ZfbmN1cnNlc19oMitzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorCisJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8KKworY2Zfc2VhcmNoPQorCisjIGNvbGxlY3QgdGhlIGN1cnJlbnQgc2V0IG9mIGluY2x1ZGUtZGlyZWN0b3JpZXMgZnJvbSBjb21waWxlciBmbGFncworY2ZfaGVhZGVyX3BhdGhfbGlzdD0iIgoraWYgdGVzdCAtbiAiJHtDRkxBR1N9JHtDUFBGTEFHU30iIDsgdGhlbgorCWZvciBjZl9oZWFkZXJfcGF0aCBpbiAkQ1BQRkxBR1MgJENGTEFHUworCWRvCisJCWNhc2UgJGNmX2hlYWRlcl9wYXRoIGluCisJCSgtSSopCisJCQljZl9oZWFkZXJfcGF0aD1gZWNobyAiLiRjZl9oZWFkZXJfcGF0aCIgfHNlZCAtZSAncy9eLi4uLy8nIC1lICdzLC9pbmNsdWRlJCwsJ2AKKwordGVzdCAieCRjZl9oZWFkZXJfcGF0aCIgIT0gInhOT05FIiAmJiBcCit0ZXN0IC1kICIkY2ZfaGVhZGVyX3BhdGgiICYmIFwKKyB7CisJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIgkuLi4gdGVzdGluZyBmb3IgaW5jbHVkZS1kaXJlY3RvcmllcyB1bmRlciAkY2ZfaGVhZGVyX3BhdGgiCisJdGVzdCAtZCAkY2ZfaGVhZGVyX3BhdGgvaW5jbHVkZSAmJiAgICAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJGNmX2hlYWRlcl9wYXRoL2luY2x1ZGUiCisJdGVzdCAtZCAkY2ZfaGVhZGVyX3BhdGgvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QgJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRjZl9oZWFkZXJfcGF0aC9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdCIKKwl0ZXN0IC1kICRjZl9oZWFkZXJfcGF0aC9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkY2ZfaGVhZGVyX3BhdGgvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QvaW5jbHVkZSIKKwl0ZXN0IC1kICRjZl9oZWFkZXJfcGF0aC8kY2ZfbmN1aGRyX3Jvb3QvaW5jbHVkZSAmJiAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJGNmX2hlYWRlcl9wYXRoLyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlIgorCXRlc3QgLWQgJGNmX2hlYWRlcl9wYXRoLyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdCAmJiAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJGNmX2hlYWRlcl9wYXRoLyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdCIKK30KKworCQkJY2ZfaGVhZGVyX3BhdGhfbGlzdD0iJGNmX2hlYWRlcl9wYXRoX2xpc3QgJGNmX3NlYXJjaCIKKwkJCTs7CisJCWVzYWMKKwlkb25lCitmaQorCisjIGFkZCB0aGUgdmFyaWF0aW9ucyBmb3IgdGhlIHBhY2thZ2Ugd2UgYXJlIGxvb2tpbmcgZm9yCisKK2NmX3NlYXJjaD0KKwordGVzdCAieCRwcmVmaXgiICE9ICJ4Tk9ORSIgJiYgXAordGVzdCAtZCAiJHByZWZpeCIgJiYgXAorIHsKKwl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCS4uLiB0ZXN0aW5nIGZvciBpbmNsdWRlLWRpcmVjdG9yaWVzIHVuZGVyICRwcmVmaXgiCisJdGVzdCAtZCAkcHJlZml4L2luY2x1ZGUgJiYgICAgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRwcmVmaXgvaW5jbHVkZSIKKwl0ZXN0IC1kICRwcmVmaXgvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QgJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRwcmVmaXgvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QiCisJdGVzdCAtZCAkcHJlZml4L2luY2x1ZGUvJGNmX25jdWhkcl9yb290L2luY2x1ZGUgJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRwcmVmaXgvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QvaW5jbHVkZSIKKwl0ZXN0IC1kICRwcmVmaXgvJGNmX25jdWhkcl9yb290L2luY2x1ZGUgJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRwcmVmaXgvJGNmX25jdWhkcl9yb290L2luY2x1ZGUiCisJdGVzdCAtZCAkcHJlZml4LyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdCAmJiAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJHByZWZpeC8kY2ZfbmN1aGRyX3Jvb3QvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QiCit9CisKK2ZvciBjZl9zdWJkaXJfcHJlZml4IGluIFwKKwkvdXNyIFwKKwkvdXNyL2xvY2FsIFwKKwkvdXNyL3BrZyBcCisJL29wdCBcCisJL29wdC9sb2NhbCBcCisJJEhPTUUKK2RvCisKK3Rlc3QgIngkY2Zfc3ViZGlyX3ByZWZpeCIgIT0gIngkcHJlZml4IiAmJiBcCit0ZXN0IC1kICIkY2Zfc3ViZGlyX3ByZWZpeCIgJiYgXAorKHRlc3QgLXogIiRwcmVmaXgiIHx8IHRlc3QgeCRwcmVmaXggPSB4Tk9ORSB8fCB0ZXN0ICJ4JGNmX3N1YmRpcl9wcmVmaXgiICE9ICJ4JHByZWZpeCIpICYmIHsKKwl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCS4uLiB0ZXN0aW5nIGZvciBpbmNsdWRlLWRpcmVjdG9yaWVzIHVuZGVyICRjZl9zdWJkaXJfcHJlZml4IgorCXRlc3QgLWQgJGNmX3N1YmRpcl9wcmVmaXgvaW5jbHVkZSAmJiAgICAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJGNmX3N1YmRpcl9wcmVmaXgvaW5jbHVkZSIKKwl0ZXN0IC1kICRjZl9zdWJkaXJfcHJlZml4L2luY2x1ZGUvJGNmX25jdWhkcl9yb290ICYmICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkY2Zfc3ViZGlyX3ByZWZpeC9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdCIKKwl0ZXN0IC1kICRjZl9zdWJkaXJfcHJlZml4L2luY2x1ZGUvJGNmX25jdWhkcl9yb290L2luY2x1ZGUgJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRjZl9zdWJkaXJfcHJlZml4L2luY2x1ZGUvJGNmX25jdWhkcl9yb290L2luY2x1ZGUiCisJdGVzdCAtZCAkY2Zfc3ViZGlyX3ByZWZpeC8kY2ZfbmN1aGRyX3Jvb3QvaW5jbHVkZSAmJiAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJGNmX3N1YmRpcl9wcmVmaXgvJGNmX25jdWhkcl9yb290L2luY2x1ZGUiCisJdGVzdCAtZCAkY2Zfc3ViZGlyX3ByZWZpeC8kY2ZfbmN1aGRyX3Jvb3QvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QgJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRjZl9zdWJkaXJfcHJlZml4LyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdCIKK30KKworZG9uZQorCit0ZXN0ICIkaW5jbHVkZWRpciIgIT0gTk9ORSAmJiBcCit0ZXN0ICIkaW5jbHVkZWRpciIgIT0gIi91c3IvaW5jbHVkZSIgJiYgXAordGVzdCAtZCAiJGluY2x1ZGVkaXIiICYmIHsKKwl0ZXN0IC1kICRpbmNsdWRlZGlyICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkaW5jbHVkZWRpciIKKwl0ZXN0IC1kICRpbmNsdWRlZGlyLyRjZl9uY3VoZHJfcm9vdCAmJiBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJGluY2x1ZGVkaXIvJGNmX25jdWhkcl9yb290IgorfQorCit0ZXN0ICIkb2xkaW5jbHVkZWRpciIgIT0gTk9ORSAmJiBcCit0ZXN0ICIkb2xkaW5jbHVkZWRpciIgIT0gIi91c3IvaW5jbHVkZSIgJiYgXAordGVzdCAtZCAiJG9sZGluY2x1ZGVkaXIiICYmIHsKKwl0ZXN0IC1kICRvbGRpbmNsdWRlZGlyICAgICYmIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkb2xkaW5jbHVkZWRpciIKKwl0ZXN0IC1kICRvbGRpbmNsdWRlZGlyLyRjZl9uY3VoZHJfcm9vdCAmJiBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJG9sZGluY2x1ZGVkaXIvJGNmX25jdWhkcl9yb290IgorfQorCitjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJGNmX2hlYWRlcl9wYXRoX2xpc3QiCisKKwl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyBzZWFyY2ggcGF0aCAkY2Zfc2VhcmNoCisJY2Zfc2F2ZTJfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKwlmb3IgY2ZfaW5jZGlyIGluICRjZl9zZWFyY2gKKwlkbworCitpZiB0ZXN0IC1uICIkY2ZfaW5jZGlyIiA7IHRoZW4KKyAgZm9yIGNmX2FkZF9pbmNkaXIgaW4gJGNmX2luY2RpcgorICBkbworCXdoaWxlIHRlc3QgJGNmX2FkZF9pbmNkaXIgIT0gL3Vzci9pbmNsdWRlCisJZG8KKwkgIGlmIHRlc3QgLWQgJGNmX2FkZF9pbmNkaXIKKwkgIHRoZW4KKwkJY2ZfaGF2ZV9pbmNkaXI9bm8KKwkJaWYgdGVzdCAtbiAiJENGTEFHUyRDUFBGTEFHUyIgOyB0aGVuCisJCSAgIyBhIGxvb3AgaXMgbmVlZGVkIHRvIGVuc3VyZSB3ZSBjYW4gYWRkIHN1YmRpcnMgb2YgZXhpc3RpbmcgZGlycworCQkgIGZvciBjZl90ZXN0X2luY2RpciBpbiAkQ0ZMQUdTICRDUFBGTEFHUyA7IGRvCisJCQlpZiB0ZXN0ICIuJGNmX3Rlc3RfaW5jZGlyIiA9ICIuLUkkY2ZfYWRkX2luY2RpciIgOyB0aGVuCisJCQkgIGNmX2hhdmVfaW5jZGlyPXllczsgYnJlYWsKKwkJCWZpCisJCSAgZG9uZQorCQlmaQorCisJCWlmIHRlc3QgIiRjZl9oYXZlX2luY2RpciIgPSBubyA7IHRoZW4KKwkJICBpZiB0ZXN0ICIkY2ZfYWRkX2luY2RpciIgPSAvdXNyL2xvY2FsL2luY2x1ZGUgOyB0aGVuCisJCQlpZiB0ZXN0ICIkR0NDIiA9IHllcworCQkJdGhlbgorCQkJICBjZl9zYXZlX0NQUEZMQUdTPSRDUFBGTEFHUworCQkJICBDUFBGTEFHUz0iJENQUEZMQUdTIC1JJGNmX2FkZF9pbmNkaXIiCisJCQkgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgNjM3MCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KK2ludAorbWFpbiAoKQoreworcHJpbnRmKCJIZWxsbyIpCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjYzODI6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjYzODU6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6NjM4ODogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjYzOTE6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICA6CitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2NmX2hhdmVfaW5jZGlyPXllcworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCQkJICBDUFBGTEFHUz0kY2Zfc2F2ZV9DUFBGTEFHUworCQkJZmkKKwkJICBmaQorCQlmaQorCisJCWlmIHRlc3QgIiRjZl9oYXZlX2luY2RpciIgPSBubyA7IHRoZW4KKwkJICB0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCWFkZGluZyAkY2ZfYWRkX2luY2RpciB0byBpbmNsdWRlLXBhdGgiIDE+JjYKKworZWNobyAiJHthc19tZTotY29uZmlndXJlfTo2NDA4OiB0ZXN0aW5nIGFkZGluZyAkY2ZfYWRkX2luY2RpciB0byBpbmNsdWRlLXBhdGggLi4uIiAxPiY1CisKKwkJICBDUFBGTEFHUz0iJENQUEZMQUdTIC1JJGNmX2FkZF9pbmNkaXIiCisKKwkJICBjZl90b3BfaW5jZGlyPWBlY2hvICRjZl9hZGRfaW5jZGlyIHwgc2VkIC1lICdzJS9pbmNsdWRlLy4qJCUvaW5jbHVkZSUnYAorCQkgIHRlc3QgIiRjZl90b3BfaW5jZGlyIiA9ICIkY2ZfYWRkX2luY2RpciIgJiYgYnJlYWsKKwkJICBjZl9hZGRfaW5jZGlyPSIkY2ZfdG9wX2luY2RpciIKKwkJZWxzZQorCQkgIGJyZWFrCisJCWZpCisJICBlbHNlCisJCWJyZWFrCisJICBmaQorCWRvbmUKKyAgZG9uZQorZmkKKworCQlmb3IgY2ZfaGVhZGVyIGluIFwKKwkJCW5jdXJzZXMuaCBcCisJCQljdXJzZXMuaAorCQlkbworCisJY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA2NDMxICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2luY2x1ZGUgPCRjZl9oZWFkZXI+CitpbnQKK21haW4gKCkKK3sKKworI2lmZGVmIE5DVVJTRVNfVkVSU0lPTgorCitwcmludGYoIiVzXG4iLCBOQ1VSU0VTX1ZFUlNJT04pOworI2Vsc2UKKyNpZmRlZiBfX05DVVJTRVNfSAorcHJpbnRmKCJvbGRcbiIpOworI2Vsc2UKKwltYWtlIGFuIGVycm9yCisjZW5kaWYKKyNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjY0NTU6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjY0NTg6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6NjQ2MTogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjY0NjQ6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBjZl9jdl9uY3Vyc2VzX2gyPSRjZl9oZWFkZXIKKworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitjZl9jdl9uY3Vyc2VzX2gyPW5vCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKKwkJCWlmIHRlc3QgIiRjZl9jdl9uY3Vyc2VzX2gyIiAhPSBubyA7IHRoZW4KKwkJCQljZl9jdl9uY3Vyc2VzX2gyPSRjZl9pbmNkaXIvJGNmX2hlYWRlcgorCQkJCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICRhY19uICIJLi4uIGZvdW5kICRhY19jIiAxPiY2CisJCQkJYnJlYWsKKwkJCWZpCisJCQl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCS4uLiB0ZXN0ZWQgJGNmX2luY2Rpci8kY2ZfaGVhZGVyIiAxPiY2CisJCWRvbmUKKwkJQ1BQRkxBR1M9IiRjZl9zYXZlMl9DUFBGTEFHUyIKKwkJdGVzdCAiJGNmX2N2X25jdXJzZXNfaDIiICE9IG5vICYmIGJyZWFrCisJZG9uZQorCXRlc3QgIiRjZl9jdl9uY3Vyc2VzX2gyIiA9IG5vICYmIHsgeyBlY2hvICIkYXNfbWU6NjQ4NTogZXJyb3I6IG5vdCBmb3VuZCIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBub3QgZm91bmQiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKworZmkKK2VjaG8gIiRhc19tZTo2NDkwOiByZXN1bHQ6ICRjZl9jdl9uY3Vyc2VzX2gyIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9jdl9uY3Vyc2VzX2gyIiA+JjYKKworCWNmXzFzdF9pbmNkaXI9YGVjaG8gJGNmX2N2X25jdXJzZXNfaDIgfCBzZWQgLWUgJ3MlL1teL10qJCUlJ2AKKwljZl9jdl9uY3Vyc2VzX2hlYWRlcj1gYmFzZW5hbWUgJGNmX2N2X25jdXJzZXNfaDJgCisJaWYgdGVzdCBgYmFzZW5hbWUgJGNmXzFzdF9pbmNkaXJgID0gJGNmX25jdWhkcl9yb290IDsgdGhlbgorCQljZl9jdl9uY3Vyc2VzX2hlYWRlcj0kY2ZfbmN1aGRyX3Jvb3QvJGNmX2N2X25jdXJzZXNfaGVhZGVyCisJZmkKKworaWYgdGVzdCAtbiAiJGNmXzFzdF9pbmNkaXIiIDsgdGhlbgorICBmb3IgY2ZfYWRkX2luY2RpciBpbiAkY2ZfMXN0X2luY2RpcgorICBkbworCXdoaWxlIHRlc3QgJGNmX2FkZF9pbmNkaXIgIT0gL3Vzci9pbmNsdWRlCisJZG8KKwkgIGlmIHRlc3QgLWQgJGNmX2FkZF9pbmNkaXIKKwkgIHRoZW4KKwkJY2ZfaGF2ZV9pbmNkaXI9bm8KKwkJaWYgdGVzdCAtbiAiJENGTEFHUyRDUFBGTEFHUyIgOyB0aGVuCisJCSAgIyBhIGxvb3AgaXMgbmVlZGVkIHRvIGVuc3VyZSB3ZSBjYW4gYWRkIHN1YmRpcnMgb2YgZXhpc3RpbmcgZGlycworCQkgIGZvciBjZl90ZXN0X2luY2RpciBpbiAkQ0ZMQUdTICRDUFBGTEFHUyA7IGRvCisJCQlpZiB0ZXN0ICIuJGNmX3Rlc3RfaW5jZGlyIiA9ICIuLUkkY2ZfYWRkX2luY2RpciIgOyB0aGVuCisJCQkgIGNmX2hhdmVfaW5jZGlyPXllczsgYnJlYWsKKwkJCWZpCisJCSAgZG9uZQorCQlmaQorCisJCWlmIHRlc3QgIiRjZl9oYXZlX2luY2RpciIgPSBubyA7IHRoZW4KKwkJICBpZiB0ZXN0ICIkY2ZfYWRkX2luY2RpciIgPSAvdXNyL2xvY2FsL2luY2x1ZGUgOyB0aGVuCisJCQlpZiB0ZXN0ICIkR0NDIiA9IHllcworCQkJdGhlbgorCQkJICBjZl9zYXZlX0NQUEZMQUdTPSRDUFBGTEFHUworCQkJICBDUFBGTEFHUz0iJENQUEZMQUdTIC1JJGNmX2FkZF9pbmNkaXIiCisJCQkgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgNjUyMyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KK2ludAorbWFpbiAoKQoreworcHJpbnRmKCJIZWxsbyIpCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjY1MzU6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjY1Mzg6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6NjU0MTogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjY1NDQ6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICA6CitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2NmX2hhdmVfaW5jZGlyPXllcworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCQkJICBDUFBGTEFHUz0kY2Zfc2F2ZV9DUFBGTEFHUworCQkJZmkKKwkJICBmaQorCQlmaQorCisJCWlmIHRlc3QgIiRjZl9oYXZlX2luY2RpciIgPSBubyA7IHRoZW4KKwkJICB0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCWFkZGluZyAkY2ZfYWRkX2luY2RpciB0byBpbmNsdWRlLXBhdGgiIDE+JjYKKworZWNobyAiJHthc19tZTotY29uZmlndXJlfTo2NTYxOiB0ZXN0aW5nIGFkZGluZyAkY2ZfYWRkX2luY2RpciB0byBpbmNsdWRlLXBhdGggLi4uIiAxPiY1CisKKwkJICBDUFBGTEFHUz0iJENQUEZMQUdTIC1JJGNmX2FkZF9pbmNkaXIiCisKKwkJICBjZl90b3BfaW5jZGlyPWBlY2hvICRjZl9hZGRfaW5jZGlyIHwgc2VkIC1lICdzJS9pbmNsdWRlLy4qJCUvaW5jbHVkZSUnYAorCQkgIHRlc3QgIiRjZl90b3BfaW5jZGlyIiA9ICIkY2ZfYWRkX2luY2RpciIgJiYgYnJlYWsKKwkJICBjZl9hZGRfaW5jZGlyPSIkY2ZfdG9wX2luY2RpciIKKwkJZWxzZQorCQkgIGJyZWFrCisJCWZpCisJICBlbHNlCisJCWJyZWFrCisJICBmaQorCWRvbmUKKyAgZG9uZQorZmkKKworZmkKKworIyBTZXQgZGVmaW5pdGlvbnMgdG8gYWxsb3cgaWZkZWYnaW5nIGZvciBuY3Vyc2VzLmgKKworY2FzZSAkY2ZfY3ZfbmN1cnNlc19oZWFkZXIgaW4KKygqbmN1cnNlcy5oKQorCitjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX05DVVJTRVNfSCAxCitFT0YKKworCTs7Citlc2FjCisKK2Nhc2UgJGNmX2N2X25jdXJzZXNfaGVhZGVyIGluCisobmN1cnNlcy9jdXJzZXMuaHxuY3Vyc2VzL25jdXJzZXMuaCkKKworY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9OQ1VSU0VTX05DVVJTRVNfSCAxCitFT0YKKworCTs7CisobmN1cnNlc3cvY3Vyc2VzLmh8bmN1cnNlc3cvbmN1cnNlcy5oKQorCitjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX05DVVJTRVNXX05DVVJTRVNfSCAxCitFT0YKKworCTs7Citlc2FjCisKK2VjaG8gIiRhc19tZTo2NjA5OiBjaGVja2luZyBmb3IgdGVybWluZm8gaGVhZGVyIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHRlcm1pbmZvIGhlYWRlci4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7Y2ZfY3ZfdGVybV9oZWFkZXIrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKworY2FzZSAke2NmX2N2X25jdXJzZXNfaGVhZGVyfSBpbgorKCovbmN1cnNlcy5ofCovbmN1cnNlc3cuaCkKKwljZl90ZXJtX2hlYWRlcj1gZWNobyAiJGNmX2N2X25jdXJzZXNfaGVhZGVyIiB8IHNlZCAtZSAncyVuY3Vyc2VzW14uXSpcLmgkJXRlcm0uaCUnYAorCTs7CisoKikKKwljZl90ZXJtX2hlYWRlcj10ZXJtLmgKKwk7OworZXNhYworCitmb3IgY2ZfdGVzdCBpbiAkY2ZfdGVybV9oZWFkZXIgIm5jdXJzZXMvdGVybS5oIiAibmN1cnNlc3cvdGVybS5oIgorZG8KK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgNjYyNyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDwke2NmX2N2X25jdXJzZXNfaGVhZGVyOi1jdXJzZXMuaH0+CisjaW5jbHVkZSA8JGNmX3Rlc3Q+CisKK2ludAorbWFpbiAoKQoreworaW50IHggPSBhdXRvX2xlZnRfbWFyZ2luCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjY2NDI6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjY2NDU6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6NjY0ODogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjY2NTE6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorCisJY2ZfY3ZfdGVybV9oZWFkZXI9IiRjZl90ZXN0IgorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwljZl9jdl90ZXJtX2hlYWRlcj11bmtub3duCisKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKwl0ZXN0ICIkY2ZfY3ZfdGVybV9oZWFkZXIiICE9IHVua25vd24gJiYgYnJlYWsKK2RvbmUKKworZmkKK2VjaG8gIiRhc19tZTo2NjY3OiByZXN1bHQ6ICRjZl9jdl90ZXJtX2hlYWRlciIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfY3ZfdGVybV9oZWFkZXIiID4mNgorCisjIFNldCBkZWZpbml0aW9ucyB0byBhbGxvdyBpZmRlZidpbmcgdG8gYWNjb21tb2RhdGUgc3ViZGlyZWN0b3JpZXMKKworY2FzZSAkY2ZfY3ZfdGVybV9oZWFkZXIgaW4KKygqdGVybS5oKQorCitjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX1RFUk1fSCAxCitFT0YKKworCTs7Citlc2FjCisKK2Nhc2UgJGNmX2N2X3Rlcm1faGVhZGVyIGluCisobmN1cnNlcy90ZXJtLmgpCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEhBVkVfTkNVUlNFU19URVJNX0ggMQorRU9GCisKKwk7OworKG5jdXJzZXN3L3Rlcm0uaCkKKworY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9OQ1VSU0VTV19URVJNX0ggMQorRU9GCisKKwk7OworZXNhYworCisjIHNvbWUgYXBwbGljYXRpb25zIG5lZWQgdGhpcywgYnV0IHNob3VsZCBjaGVjayBmb3IgTkNVUlNFU19WRVJTSU9OCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIE5DVVJTRVMgMQorRU9GCisKK2VjaG8gIiRhc19tZTo2NzA1OiBjaGVja2luZyBmb3IgbmN1cnNlcyB2ZXJzaW9uIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG5jdXJzZXMgdmVyc2lvbi4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7Y2ZfY3ZfbmN1cnNlc192ZXJzaW9uK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKKwljZl9jdl9uY3Vyc2VzX3ZlcnNpb249bm8KKwljZl90ZW1wZmlsZT1vdXQkJAorCXJtIC1mICRjZl90ZW1wZmlsZQorCWlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisKKwkjIFRoaXMgd2lsbCBub3Qgd29yayBpZiB0aGUgcHJlcHJvY2Vzc29yIHNwbGl0cyB0aGUgbGluZSBhZnRlciB0aGUKKwkjIEF1dG9jb25mIHRva2VuLiAgVGhlICd1bnByb3RvJyBwcm9ncmFtIGRvZXMgdGhhdC4KKwljYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjaW5jbHVkZSA8JHtjZl9jdl9uY3Vyc2VzX2hlYWRlcjotY3Vyc2VzLmh9PgorI3VuZGVmIEF1dG9jb25mCisjaWZkZWYgTkNVUlNFU19WRVJTSU9OCitBdXRvY29uZiBOQ1VSU0VTX1ZFUlNJT04KKyNlbHNlCisjaWZkZWYgX19OQ1VSU0VTX0gKK0F1dG9jb25mICJvbGQiCisjZW5kaWYKKzsKKyNlbmRpZgorRU9GCisJY2ZfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQgMj4mNSB8IGdyZXAgJ15BdXRvY29uZiAnID5jb25mdGVzdC5vdXQiCisJeyAoZXZhbCBlY2hvICIkYXNfbWU6NjczMTogXCIkY2ZfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGNmX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjY3MzQ6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfQorCWlmIHRlc3QgLWYgY29uZnRlc3Qub3V0IDsgdGhlbgorCQljZl9vdXQ9YGNhdCBjb25mdGVzdC5vdXQgfCBzZWQgLWUgJ3MlXkF1dG9jb25mICUlJyAtZSAncyVeW14iXSoiJSUnIC1lICdzJSIuKiUlJ2AKKwkJdGVzdCAtbiAiJGNmX291dCIgJiYgY2ZfY3ZfbmN1cnNlc192ZXJzaW9uPSIkY2Zfb3V0IgorCQlybSAtZiBjb25mdGVzdC5vdXQKKwlmaQorCitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgNjc0NCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpbmNsdWRlIDwke2NmX2N2X25jdXJzZXNfaGVhZGVyOi1jdXJzZXMuaH0+CisjaW5jbHVkZSA8c3RkaW8uaD4KK2ludCBtYWluKCkKK3sKKwlGSUxFICpmcCA9IGZvcGVuKCIkY2ZfdGVtcGZpbGUiLCAidyIpOworI2lmZGVmIE5DVVJTRVNfVkVSU0lPTgorIyBpZmRlZiBOQ1VSU0VTX1ZFUlNJT05fUEFUQ0gKKwlmcHJpbnRmKGZwLCAiJXMuJWRcbiIsIE5DVVJTRVNfVkVSU0lPTiwgTkNVUlNFU19WRVJTSU9OX1BBVENIKTsKKyMgZWxzZQorCWZwcmludGYoZnAsICIlc1xuIiwgTkNVUlNFU19WRVJTSU9OKTsKKyMgZW5kaWYKKyNlbHNlCisjIGlmZGVmIF9fTkNVUlNFU19ICisJZnByaW50ZihmcCwgIm9sZFxuIik7CisjIGVsc2UKKwltYWtlIGFuIGVycm9yCisjIGVuZGlmCisjZW5kaWYKKwkke2NmX2N2X21haW5fcmV0dXJuOi1yZXR1cm59KDApOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjY3Njk6IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjY3NzI6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjY3NzQ6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo2Nzc3OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKworCWNmX2N2X25jdXJzZXNfdmVyc2lvbj1gY2F0ICRjZl90ZW1wZmlsZWAKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKK2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2ZpCitybSAtZiBjb3JlIGNvcmUuKiAqLmNvcmUgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKKwlybSAtZiAkY2ZfdGVtcGZpbGUKKworZmkKK2VjaG8gIiRhc19tZTo2NzkxOiByZXN1bHQ6ICRjZl9jdl9uY3Vyc2VzX3ZlcnNpb24iID4mNQorZWNobyAiJHtFQ0hPX1R9JGNmX2N2X25jdXJzZXNfdmVyc2lvbiIgPiY2Cit0ZXN0ICIkY2ZfY3ZfbmN1cnNlc192ZXJzaW9uIiA9IG5vIHx8CitjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBOQ1VSU0VTIDEKK0VPRgorCitjZl9uY3VsaWJfcm9vdD1uY3Vyc2VzdworCSMgVGhpcyB3b3JrcywgZXhjZXB0IGZvciB0aGUgc3BlY2lhbCBjYXNlIHdoZXJlIHdlIGZpbmQgZ3BtLCBidXQKKwkjIG5jdXJzZXMgaXMgaW4gYSBub25zdGFuZGFyZCBsb2NhdGlvbiB2aWEgJExJQlMsIGFuZCB3ZSByZWFsbHkgd2FudAorCSMgdG8gbGluayBncG0uCitjZl9uY3Vyc2VzX0xJQlM9IiIKK2NmX25jdXJzZXNfU0FWRT0iJExJQlMiCitlY2hvICIkYXNfbWU6NjgwNDogY2hlY2tpbmcgZm9yIEdwbV9PcGVuIGluIC1sZ3BtIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIEdwbV9PcGVuIGluIC1sZ3BtLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9saWJfZ3BtX0dwbV9PcGVuK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sZ3BtICAkTElCUyIKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgNjgxMiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKy8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KK2NoYXIgR3BtX09wZW4gKCk7CitpbnQKK21haW4gKCkKK3sKK0dwbV9PcGVuICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6NjgzMTogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NjgzNDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjY4Mzc6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo2ODQwOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3ZfbGliX2dwbV9HcG1fT3Blbj15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorYWNfY3ZfbGliX2dwbV9HcG1fT3Blbj1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCitlY2hvICIkYXNfbWU6Njg1MTogcmVzdWx0OiAkYWNfY3ZfbGliX2dwbV9HcG1fT3BlbiIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX2dwbV9HcG1fT3BlbiIgPiY2CitpZiB0ZXN0ICRhY19jdl9saWJfZ3BtX0dwbV9PcGVuID0geWVzOyB0aGVuCisgIGVjaG8gIiRhc19tZTo2ODU0OiBjaGVja2luZyBmb3IgaW5pdHNjciBpbiAtbGdwbSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBpbml0c2NyIGluIC1sZ3BtLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9saWJfZ3BtX2luaXRzY3Irc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxncG0gICRMSUJTIgorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA2ODYyICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciBpbml0c2NyICgpOworaW50CittYWluICgpCit7Citpbml0c2NyICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6Njg4MTogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6Njg4NDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjY4ODc6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo2ODkwOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3ZfbGliX2dwbV9pbml0c2NyPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CithY19jdl9saWJfZ3BtX2luaXRzY3I9bm8KK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQorZWNobyAiJGFzX21lOjY5MDE6IHJlc3VsdDogJGFjX2N2X2xpYl9ncG1faW5pdHNjciIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX2dwbV9pbml0c2NyIiA+JjYKK2lmIHRlc3QgJGFjX2N2X2xpYl9ncG1faW5pdHNjciA9IHllczsgdGhlbgorICBMSUJTPSIkY2ZfbmN1cnNlc19TQVZFIgorZWxzZQorICBjZl9uY3Vyc2VzX0xJQlM9Ii1sZ3BtIgorZmkKKworZmkKKworY2FzZSAkaG9zdF9vcyBpbgorKGZyZWVic2QqKQorCSMgVGhpcyBpcyBvbmx5IG5lY2Vzc2FyeSBpZiB5b3UgYXJlIGxpbmtpbmcgYWdhaW5zdCBhbiBvYnNvbGV0ZQorCSMgdmVyc2lvbiBvZiBuY3Vyc2VzIChidXQgaXQgc2hvdWxkIGRvIG5vIGhhcm0sIHNpbmNlIGl0J3Mgc3RhdGljKS4KKwlpZiB0ZXN0ICIkY2ZfbmN1bGliX3Jvb3QiID0gbmN1cnNlcyA7IHRoZW4KKwkJZWNobyAiJGFzX21lOjY5MTY6IGNoZWNraW5nIGZvciB0Z290byBpbiAtbG15dGluZm8iID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgdGdvdG8gaW4gLWxteXRpbmZvLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9saWJfbXl0aW5mb190Z290bytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbG15dGluZm8gICRMSUJTIgorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA2OTI0ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciB0Z290byAoKTsKK2ludAorbWFpbiAoKQorewordGdvdG8gKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTo2OTQzOiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo2OTQ2OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6Njk0OTogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjY5NTI6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9saWJfbXl0aW5mb190Z290bz15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorYWNfY3ZfbGliX215dGluZm9fdGdvdG89bm8KK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQorZWNobyAiJGFzX21lOjY5NjM6IHJlc3VsdDogJGFjX2N2X2xpYl9teXRpbmZvX3Rnb3RvIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfbXl0aW5mb190Z290byIgPiY2CitpZiB0ZXN0ICRhY19jdl9saWJfbXl0aW5mb190Z290byA9IHllczsgdGhlbgorICBjZl9uY3Vyc2VzX0xJQlM9Ii1sbXl0aW5mbyAkY2ZfbmN1cnNlc19MSUJTIgorZmkKKworCWZpCisJOzsKK2VzYWMKKworY2ZfYWRkX2xpYnM9IiRjZl9uY3Vyc2VzX0xJQlMiCisjIEZpbHRlciBvdXQgZHVwbGljYXRlcyAtIHRoaXMgaGFwcGVucyB3aXRoIGJhZGx5LWRlc2lnbmVkICIucGMiIGZpbGVzLi4uCitmb3IgY2ZfYWRkXzFsaWIgaW4gJExJQlMKK2RvCisJZm9yIGNmX2FkZF8ybGliIGluICRjZl9hZGRfbGlicworCWRvCisJCWlmIHRlc3QgIngkY2ZfYWRkXzFsaWIiID0gIngkY2ZfYWRkXzJsaWIiCisJCXRoZW4KKwkJCWNmX2FkZF8xbGliPQorCQkJYnJlYWsKKwkJZmkKKwlkb25lCisJdGVzdCAtbiAiJGNmX2FkZF8xbGliIiAmJiBjZl9hZGRfbGlicz0iJGNmX2FkZF9saWJzICRjZl9hZGRfMWxpYiIKK2RvbmUKK0xJQlM9IiRjZl9hZGRfbGlicyIKKworaWYgKCB0ZXN0IC1uICIkY2ZfY3ZfY3Vyc2VzX2RpciIgJiYgdGVzdCAiJGNmX2N2X2N1cnNlc19kaXIiICE9ICJubyIgKQordGhlbgorCitjZl9hZGRfbGlicz0iLWwkY2ZfbmN1bGliX3Jvb3QiCisjIEZpbHRlciBvdXQgZHVwbGljYXRlcyAtIHRoaXMgaGFwcGVucyB3aXRoIGJhZGx5LWRlc2lnbmVkICIucGMiIGZpbGVzLi4uCitmb3IgY2ZfYWRkXzFsaWIgaW4gJExJQlMKK2RvCisJZm9yIGNmX2FkZF8ybGliIGluICRjZl9hZGRfbGlicworCWRvCisJCWlmIHRlc3QgIngkY2ZfYWRkXzFsaWIiID0gIngkY2ZfYWRkXzJsaWIiCisJCXRoZW4KKwkJCWNmX2FkZF8xbGliPQorCQkJYnJlYWsKKwkJZmkKKwlkb25lCisJdGVzdCAtbiAiJGNmX2FkZF8xbGliIiAmJiBjZl9hZGRfbGlicz0iJGNmX2FkZF9saWJzICRjZl9hZGRfMWxpYiIKK2RvbmUKK0xJQlM9IiRjZl9hZGRfbGlicyIKKworZWxzZQorCisJZXZhbCAnY2ZfY3ZfaGF2ZV9saWJfJyRjZl9uY3VsaWJfcm9vdCc9bm8nCisJY2ZfbGliZGlyPSIiCisJZWNobyAiJGFzX21lOjcwMTI6IGNoZWNraW5nIGZvciBpbml0c2NyIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGluaXRzY3IuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X2Z1bmNfaW5pdHNjcitzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDcwMTggImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgaW5pdHNjciAoKTsgYmVsb3cuICAqLworI2luY2x1ZGUgPGFzc2VydC5oPgorLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciBpbml0c2NyICgpOworY2hhciAoKmYpICgpOworCitpbnQKK21haW4gKCkKK3sKKy8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKKyAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAorICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworI2lmIGRlZmluZWQgKF9fc3R1Yl9pbml0c2NyKSB8fCBkZWZpbmVkIChfX3N0dWJfX19pbml0c2NyKQorY2hva2UgbWUKKyNlbHNlCitmID0gaW5pdHNjcjsgLyogd29ya2Fyb3VuZCBmb3IgSUNDIDEyLjAuMyAqLyBpZiAoZiA9PSAwKSByZXR1cm4gMTsKKyNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTo3MDQ5OiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo3MDUyOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6NzA1NTogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjcwNTg6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9mdW5jX2luaXRzY3I9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2FjX2N2X2Z1bmNfaW5pdHNjcj1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6NzA2ODogcmVzdWx0OiAkYWNfY3ZfZnVuY19pbml0c2NyIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX2luaXRzY3IiID4mNgoraWYgdGVzdCAkYWNfY3ZfZnVuY19pbml0c2NyID0geWVzOyB0aGVuCisgIGV2YWwgJ2NmX2N2X2hhdmVfbGliXyckY2ZfbmN1bGliX3Jvb3QnPXllcycKK2Vsc2UKKworCQljZl9zYXZlX0xJQlM9IiRMSUJTIgorCQllY2hvICIkYXNfbWU6NzA3NTogY2hlY2tpbmcgZm9yIGluaXRzY3IgaW4gLWwkY2ZfbmN1bGliX3Jvb3QiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgaW5pdHNjciBpbiAtbCRjZl9uY3VsaWJfcm9vdC4uLiAkRUNIT19DIiA+JjYKKwkJTElCUz0iLWwkY2ZfbmN1bGliX3Jvb3QgJExJQlMiCisJCWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgNzA3OSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8JHtjZl9jdl9uY3Vyc2VzX2hlYWRlcjotY3Vyc2VzLmh9PgoraW50CittYWluICgpCit7Citpbml0c2NyKCkKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjcwOTE6IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjcwOTQ6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTo3MDk3OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NzEwMDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGVjaG8gIiRhc19tZTo3MTAyOiByZXN1bHQ6IHllcyIgPiY1CitlY2hvICIke0VDSE9fVH15ZXMiID4mNgorCQkJIGV2YWwgJ2NmX2N2X2hhdmVfbGliXyckY2ZfbmN1bGliX3Jvb3QnPXllcycKKworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitlY2hvICIkYXNfbWU6NzEwOTogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2CisKK2NmX3NlYXJjaD0KK2NmX2xpYnJhcnlfcGF0aF9saXN0PSIiCitpZiB0ZXN0IC1uICIke0xERkxBR1N9JHtMSUJTfSIgOyB0aGVuCisJZm9yIGNmX2xpYnJhcnlfcGF0aCBpbiAkTERGTEFHUyAkTElCUworCWRvCisJCWNhc2UgJGNmX2xpYnJhcnlfcGF0aCBpbgorCQkoLUwqKQorCQkJY2ZfbGlicmFyeV9wYXRoPWBlY2hvICIuJGNmX2xpYnJhcnlfcGF0aCIgfHNlZCAtZSAncy9eLi4uLy8nIC1lICdzLC9saWIkLCwnYAorCit0ZXN0ICJ4JGNmX2xpYnJhcnlfcGF0aCIgIT0gInhOT05FIiAmJiBcCit0ZXN0IC1kICIkY2ZfbGlicmFyeV9wYXRoIiAmJiBcCisgeworCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJLi4uIHRlc3RpbmcgZm9yIGxpYi1kaXJlY3RvcmllcyB1bmRlciAkY2ZfbGlicmFyeV9wYXRoIgorCXRlc3QgLWQgJGNmX2xpYnJhcnlfcGF0aC9saWIgJiYgICAgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRjZl9saWJyYXJ5X3BhdGgvbGliIgorCXRlc3QgLWQgJGNmX2xpYnJhcnlfcGF0aC9saWIvJGNmX25jdWxpYl9yb290ICYmICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkY2ZfbGlicmFyeV9wYXRoL2xpYi8kY2ZfbmN1bGliX3Jvb3QiCisJdGVzdCAtZCAkY2ZfbGlicmFyeV9wYXRoL2xpYi8kY2ZfbmN1bGliX3Jvb3QvbGliICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkY2ZfbGlicmFyeV9wYXRoL2xpYi8kY2ZfbmN1bGliX3Jvb3QvbGliIgorCXRlc3QgLWQgJGNmX2xpYnJhcnlfcGF0aC8kY2ZfbmN1bGliX3Jvb3QvbGliICYmICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkY2ZfbGlicmFyeV9wYXRoLyRjZl9uY3VsaWJfcm9vdC9saWIiCisJdGVzdCAtZCAkY2ZfbGlicmFyeV9wYXRoLyRjZl9uY3VsaWJfcm9vdC9saWIvJGNmX25jdWxpYl9yb290ICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkY2ZfbGlicmFyeV9wYXRoLyRjZl9uY3VsaWJfcm9vdC9saWIvJGNmX25jdWxpYl9yb290IgorfQorCisJCQljZl9saWJyYXJ5X3BhdGhfbGlzdD0iJGNmX2xpYnJhcnlfcGF0aF9saXN0ICRjZl9zZWFyY2giCisJCQk7OworCQllc2FjCisJZG9uZQorZmkKKworY2Zfc2VhcmNoPQorCit0ZXN0ICJ4JHByZWZpeCIgIT0gInhOT05FIiAmJiBcCit0ZXN0IC1kICIkcHJlZml4IiAmJiBcCisgeworCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJLi4uIHRlc3RpbmcgZm9yIGxpYi1kaXJlY3RvcmllcyB1bmRlciAkcHJlZml4IgorCXRlc3QgLWQgJHByZWZpeC9saWIgJiYgICAgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRwcmVmaXgvbGliIgorCXRlc3QgLWQgJHByZWZpeC9saWIvJGNmX25jdWxpYl9yb290ICYmICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkcHJlZml4L2xpYi8kY2ZfbmN1bGliX3Jvb3QiCisJdGVzdCAtZCAkcHJlZml4L2xpYi8kY2ZfbmN1bGliX3Jvb3QvbGliICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkcHJlZml4L2xpYi8kY2ZfbmN1bGliX3Jvb3QvbGliIgorCXRlc3QgLWQgJHByZWZpeC8kY2ZfbmN1bGliX3Jvb3QvbGliICYmICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkcHJlZml4LyRjZl9uY3VsaWJfcm9vdC9saWIiCisJdGVzdCAtZCAkcHJlZml4LyRjZl9uY3VsaWJfcm9vdC9saWIvJGNmX25jdWxpYl9yb290ICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkcHJlZml4LyRjZl9uY3VsaWJfcm9vdC9saWIvJGNmX25jdWxpYl9yb290IgorfQorCitmb3IgY2Zfc3ViZGlyX3ByZWZpeCBpbiBcCisJL3VzciBcCisJL3Vzci9sb2NhbCBcCisJL3Vzci9wa2cgXAorCS9vcHQgXAorCS9vcHQvbG9jYWwgXAorCSRIT01FCitkbworCit0ZXN0ICJ4JGNmX3N1YmRpcl9wcmVmaXgiICE9ICJ4JHByZWZpeCIgJiYgXAordGVzdCAtZCAiJGNmX3N1YmRpcl9wcmVmaXgiICYmIFwKKyh0ZXN0IC16ICIkcHJlZml4IiB8fCB0ZXN0IHgkcHJlZml4ID0geE5PTkUgfHwgdGVzdCAieCRjZl9zdWJkaXJfcHJlZml4IiAhPSAieCRwcmVmaXgiKSAmJiB7CisJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIgkuLi4gdGVzdGluZyBmb3IgbGliLWRpcmVjdG9yaWVzIHVuZGVyICRjZl9zdWJkaXJfcHJlZml4IgorCXRlc3QgLWQgJGNmX3N1YmRpcl9wcmVmaXgvbGliICYmICAgICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkY2Zfc3ViZGlyX3ByZWZpeC9saWIiCisJdGVzdCAtZCAkY2Zfc3ViZGlyX3ByZWZpeC9saWIvJGNmX25jdWxpYl9yb290ICYmICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkY2Zfc3ViZGlyX3ByZWZpeC9saWIvJGNmX25jdWxpYl9yb290IgorCXRlc3QgLWQgJGNmX3N1YmRpcl9wcmVmaXgvbGliLyRjZl9uY3VsaWJfcm9vdC9saWIgJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRjZl9zdWJkaXJfcHJlZml4L2xpYi8kY2ZfbmN1bGliX3Jvb3QvbGliIgorCXRlc3QgLWQgJGNmX3N1YmRpcl9wcmVmaXgvJGNmX25jdWxpYl9yb290L2xpYiAmJiAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJGNmX3N1YmRpcl9wcmVmaXgvJGNmX25jdWxpYl9yb290L2xpYiIKKwl0ZXN0IC1kICRjZl9zdWJkaXJfcHJlZml4LyRjZl9uY3VsaWJfcm9vdC9saWIvJGNmX25jdWxpYl9yb290ICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkY2Zfc3ViZGlyX3ByZWZpeC8kY2ZfbmN1bGliX3Jvb3QvbGliLyRjZl9uY3VsaWJfcm9vdCIKK30KKworZG9uZQorCitjZl9zZWFyY2g9IiRjZl9saWJyYXJ5X3BhdGhfbGlzdCAkY2Zfc2VhcmNoIgorCisJCQlmb3IgY2ZfbGliZGlyIGluICRjZl9zZWFyY2gKKwkJCWRvCisJCQkJZWNobyAiJGFzX21lOjcxNzc6IGNoZWNraW5nIGZvciAtbCRjZl9uY3VsaWJfcm9vdCBpbiAkY2ZfbGliZGlyIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIC1sJGNmX25jdWxpYl9yb290IGluICRjZl9saWJkaXIuLi4gJEVDSE9fQyIgPiY2CisJCQkJTElCUz0iLUwkY2ZfbGliZGlyIC1sJGNmX25jdWxpYl9yb290ICRjZl9zYXZlX0xJQlMiCisJCQkJY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA3MTgxICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDwke2NmX2N2X25jdXJzZXNfaGVhZGVyOi1jdXJzZXMuaH0+CitpbnQKK21haW4gKCkKK3sKK2luaXRzY3IoKQorICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6NzE5MzogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NzE5NjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjcxOTk6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo3MjAyOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgZWNobyAiJGFzX21lOjcyMDQ6IHJlc3VsdDogeWVzIiA+JjUKK2VjaG8gIiR7RUNIT19UfXllcyIgPiY2CisJCQkgCQkgZXZhbCAnY2ZfY3ZfaGF2ZV9saWJfJyRjZl9uY3VsaWJfcm9vdCc9eWVzJworCQkJCQkgYnJlYWsKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorZWNobyAiJGFzX21lOjcyMTE6IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorCQkJCQkgTElCUz0iJGNmX3NhdmVfTElCUyIKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisJCQlkb25lCisKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2ZpCisKK2V2YWwgJ2NmX2ZvdW5kX2xpYnJhcnk9JGNmX2N2X2hhdmVfbGliXyckY2ZfbmN1bGliX3Jvb3QKKworaWYgdGVzdCAkY2ZfZm91bmRfbGlicmFyeSA9IG5vIDsgdGhlbgorCXsgeyBlY2hvICIkYXNfbWU6NzIyNjogZXJyb3I6IENhbm5vdCBsaW5rICRjZl9uY3VsaWJfcm9vdCBsaWJyYXJ5IiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IENhbm5vdCBsaW5rICRjZl9uY3VsaWJfcm9vdCBsaWJyYXJ5IiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitmaQorCitmaQorCitpZiB0ZXN0IC1uICIkY2ZfbmN1cnNlc19MSUJTIiA7IHRoZW4KKwllY2hvICIkYXNfbWU6NzIzNDogY2hlY2tpbmcgaWYgd2UgY2FuIGxpbmsgJGNmX25jdWxpYl9yb290IHdpdGhvdXQgJGNmX25jdXJzZXNfTElCUyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHdlIGNhbiBsaW5rICRjZl9uY3VsaWJfcm9vdCB3aXRob3V0ICRjZl9uY3Vyc2VzX0xJQlMuLi4gJEVDSE9fQyIgPiY2CisJY2ZfbmN1cnNlc19TQVZFPSIkTElCUyIKKwlmb3IgcCBpbiAkY2ZfbmN1cnNlc19MSUJTIDsgZG8KKwkJcT1gZWNobyAkTElCUyB8IHNlZCAtZSAicyUkcCAlJSIgLWUgInMlJHAkJSUiYAorCQlpZiB0ZXN0ICIkcSIgIT0gIiRMSUJTIiA7IHRoZW4KKwkJCUxJQlM9IiRxIgorCQlmaQorCWRvbmUKKwljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDcyNDQgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPCR7Y2ZfY3ZfbmN1cnNlc19oZWFkZXI6LWN1cnNlcy5ofT4KK2ludAorbWFpbiAoKQoreworaW5pdHNjcigpOyBtb3VzZW1hc2soMCwwKTsgdGdvdG8oKGNoYXIgKikwLCAwLCAwKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjcyNTY6IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjcyNTk6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTo3MjYyOiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NzI2NTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGVjaG8gIiRhc19tZTo3MjY3OiByZXN1bHQ6IHllcyIgPiY1CitlY2hvICIke0VDSE9fVH15ZXMiID4mNgorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitlY2hvICIkYXNfbWU6NzI3MjogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2CisJCSBMSUJTPSIkY2ZfbmN1cnNlc19TQVZFIgorZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKK2NmX25jdWxpYl9ST09UPWBlY2hvICJIQVZFX0xJQiRjZl9uY3VsaWJfcm9vdCIgfCBzZWQgeSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyVgCisKK2NhdCA+PmNvbmZkZWZzLmggPDxFT0YKKyNkZWZpbmUgJGNmX25jdWxpYl9ST09UIDEKK0VPRgorCisJZmkKK2Vsc2UKKwlOQ1VSU0VTX0NPTkZJRz1ub25lCitmaQorCitlbHNlCisKK2NmX25jdWNvbmZpZ19yb290PW5jdXJzZXMKK2NmX2hhdmVfbmN1Y29uZmlnPW5vCisKK2lmIHRlc3QgIngke1BLR19DT05GSUc6PW5vbmV9IiAhPSB4bm9uZTsgdGhlbgorCWVjaG8gIiRhc19tZTo3Mjk2OiBjaGVja2luZyBwa2ctY29uZmlnIGZvciAkY2ZfbmN1Y29uZmlnX3Jvb3QiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBwa2ctY29uZmlnIGZvciAkY2ZfbmN1Y29uZmlnX3Jvb3QuLi4gJEVDSE9fQyIgPiY2CisJaWYgIiRQS0dfQ09ORklHIiAtLWV4aXN0cyAkY2ZfbmN1Y29uZmlnX3Jvb3QgOyB0aGVuCisJCWVjaG8gIiRhc19tZTo3Mjk5OiByZXN1bHQ6IHllcyIgPiY1CitlY2hvICIke0VDSE9fVH15ZXMiID4mNgorCisJCWVjaG8gIiRhc19tZTo3MzAyOiBjaGVja2luZyBpZiB0aGUgJGNmX25jdWNvbmZpZ19yb290IHBhY2thZ2UgZmlsZXMgd29yayIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHRoZSAkY2ZfbmN1Y29uZmlnX3Jvb3QgcGFja2FnZSBmaWxlcyB3b3JrLi4uICRFQ0hPX0MiID4mNgorCQljZl9oYXZlX25jdWNvbmZpZz11bmtub3duCisKKwkJY2Zfc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorCQljZl9zYXZlX0xJQlM9IiRMSUJTIgorCisJCUNQUEZMQUdTPSIkQ1BQRkxBR1MgYCRQS0dfQ09ORklHIC0tY2ZsYWdzICRjZl9uY3Vjb25maWdfcm9vdGAiCisKK2NmX2FkZF9saWJzPSJgJFBLR19DT05GSUcgLS1saWJzICRjZl9uY3Vjb25maWdfcm9vdGAiCisjIEZpbHRlciBvdXQgZHVwbGljYXRlcyAtIHRoaXMgaGFwcGVucyB3aXRoIGJhZGx5LWRlc2lnbmVkICIucGMiIGZpbGVzLi4uCitmb3IgY2ZfYWRkXzFsaWIgaW4gJExJQlMKK2RvCisJZm9yIGNmX2FkZF8ybGliIGluICRjZl9hZGRfbGlicworCWRvCisJCWlmIHRlc3QgIngkY2ZfYWRkXzFsaWIiID0gIngkY2ZfYWRkXzJsaWIiCisJCXRoZW4KKwkJCWNmX2FkZF8xbGliPQorCQkJYnJlYWsKKwkJZmkKKwlkb25lCisJdGVzdCAtbiAiJGNmX2FkZF8xbGliIiAmJiBjZl9hZGRfbGlicz0iJGNmX2FkZF9saWJzICRjZl9hZGRfMWxpYiIKK2RvbmUKK0xJQlM9IiRjZl9hZGRfbGlicyIKKworCQljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDczMjggImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPCR7Y2ZfY3ZfbmN1cnNlc19oZWFkZXI6LWN1cnNlcy5ofT4KK2ludAorbWFpbiAoKQoreworaW5pdHNjcigpOyBtb3VzZW1hc2soMCwwKTsgdGdvdG8oKGNoYXIgKikwLCAwLCAwKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjczNDA6IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjczNDM6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTo3MzQ2OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NzM0OTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgIGNmX2hhdmVfbmN1Y29uZmlnPW1heWJlCitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgNzM1NSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8JHtjZl9jdl9uY3Vyc2VzX2hlYWRlcjotY3Vyc2VzLmh9PgorCQkJCWludCBtYWluKHZvaWQpCisJCQkJeyBjaGFyICp4eCA9IGN1cnNlc192ZXJzaW9uKCk7IHJldHVybiAoeHggPT0gMCk7IH0KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTo3MzYyOiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo3MzY1OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTo3MzY3OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NzM3MDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGNmX2hhdmVfbmN1Y29uZmlnPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorY2ZfaGF2ZV9uY3Vjb25maWc9bm8KK2ZpCitybSAtZiBjb3JlIGNvcmUuKiAqLmNvcmUgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorY2ZfaGF2ZV9uY3Vjb25maWc9bm8KK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisJCWVjaG8gIiRhc19tZTo3Mzg3OiByZXN1bHQ6ICRjZl9oYXZlX25jdWNvbmZpZyIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfaGF2ZV9uY3Vjb25maWciID4mNgorCQl0ZXN0ICIkY2ZfaGF2ZV9uY3Vjb25maWciID0gbWF5YmUgJiYgY2ZfaGF2ZV9uY3Vjb25maWc9eWVzCisJCWlmIHRlc3QgIiRjZl9oYXZlX25jdWNvbmZpZyIgIT0gInllcyIKKwkJdGhlbgorCQkJQ1BQRkxBR1M9IiRjZl9zYXZlX0NQUEZMQUdTIgorCQkJTElCUz0iJGNmX3NhdmVfTElCUyIKKwkJCU5DVVJTRVNfQ09ORklHX1BLRz1ub25lCisJCWVsc2UKKworY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgTkNVUlNFUyAxCitFT0YKKworCQkJTkNVUlNFU19DT05GSUdfUEtHPSRjZl9uY3Vjb25maWdfcm9vdAorCQlmaQorCisJZWxzZQorCQllY2hvICIkYXNfbWU6NzQwNTogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2CisJCU5DVVJTRVNfQ09ORklHX1BLRz1ub25lCisJZmkKK2Vsc2UKKwlOQ1VSU0VTX0NPTkZJR19QS0c9bm9uZQorZmkKKworaWYgdGVzdCAieCRjZl9oYXZlX25jdWNvbmZpZyIgPSAieG5vIjsgdGhlbgorCWVjaG8gIkxvb2tpbmcgZm9yICR7Y2ZfbmN1Y29uZmlnX3Jvb3R9LWNvbmZpZyIKKworaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICBmb3IgYWNfcHJvZyBpbiAke2NmX25jdWNvbmZpZ19yb290fS1jb25maWcgJHtjZl9uY3Vjb25maWdfcm9vdH02LWNvbmZpZyAke2NmX25jdWNvbmZpZ19yb290fTUtY29uZmlnCisgIGRvCisgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKK2VjaG8gIiRhc19tZTo3NDIxOiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfTkNVUlNFU19DT05GSUcrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJE5DVVJTRVNfQ09ORklHIjsgdGhlbgorICBhY19jdl9wcm9nX05DVVJTRVNfQ09ORklHPSIkTkNVUlNFU19DT05GSUciICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorICBhY19zYXZlX0lGUz0kSUZTOyBJRlM9JGFjX3BhdGhfc2VwYXJhdG9yCithY19kdW1teT0iJFBBVEgiCitmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKyAgSUZTPSRhY19zYXZlX0lGUworICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAkYXNfZXhlY3V0YWJsZV9wICIkYWNfZGlyLyRhY193b3JkIiB8fCBjb250aW51ZQorYWNfY3ZfcHJvZ19OQ1VSU0VTX0NPTkZJRz0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCitlY2hvICIkYXNfbWU6NzQzNjogZm91bmQgJGFjX2Rpci8kYWNfd29yZCIgPiY1CiticmVhaworZG9uZQorCitmaQorZmkKK05DVVJTRVNfQ09ORklHPSRhY19jdl9wcm9nX05DVVJTRVNfQ09ORklHCitpZiB0ZXN0IC1uICIkTkNVUlNFU19DT05GSUciOyB0aGVuCisgIGVjaG8gIiRhc19tZTo3NDQ0OiByZXN1bHQ6ICROQ1VSU0VTX0NPTkZJRyIgPiY1CitlY2hvICIke0VDSE9fVH0kTkNVUlNFU19DT05GSUciID4mNgorZWxzZQorICBlY2hvICIkYXNfbWU6NzQ0NzogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2CitmaQorCisgICAgdGVzdCAtbiAiJE5DVVJTRVNfQ09ORklHIiAmJiBicmVhaworICBkb25lCitmaQoraWYgdGVzdCAteiAiJE5DVVJTRVNfQ09ORklHIjsgdGhlbgorICBhY19jdF9OQ1VSU0VTX0NPTkZJRz0kTkNVUlNFU19DT05GSUcKKyAgZm9yIGFjX3Byb2cgaW4gJHtjZl9uY3Vjb25maWdfcm9vdH0tY29uZmlnICR7Y2ZfbmN1Y29uZmlnX3Jvb3R9Ni1jb25maWcgJHtjZl9uY3Vjb25maWdfcm9vdH01LWNvbmZpZworZG8KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKK2VjaG8gIiRhc19tZTo3NDYwOiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfTkNVUlNFU19DT05GSUcrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X05DVVJTRVNfQ09ORklHIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X05DVVJTRVNfQ09ORklHPSIkYWNfY3RfTkNVUlNFU19DT05GSUciICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorICBhY19zYXZlX0lGUz0kSUZTOyBJRlM9JGFjX3BhdGhfc2VwYXJhdG9yCithY19kdW1teT0iJFBBVEgiCitmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKyAgSUZTPSRhY19zYXZlX0lGUworICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAkYXNfZXhlY3V0YWJsZV9wICIkYWNfZGlyLyRhY193b3JkIiB8fCBjb250aW51ZQorYWNfY3ZfcHJvZ19hY19jdF9OQ1VSU0VTX0NPTkZJRz0iJGFjX3Byb2ciCitlY2hvICIkYXNfbWU6NzQ3NTogZm91bmQgJGFjX2Rpci8kYWNfd29yZCIgPiY1CiticmVhaworZG9uZQorCitmaQorZmkKK2FjX2N0X05DVVJTRVNfQ09ORklHPSRhY19jdl9wcm9nX2FjX2N0X05DVVJTRVNfQ09ORklHCitpZiB0ZXN0IC1uICIkYWNfY3RfTkNVUlNFU19DT05GSUciOyB0aGVuCisgIGVjaG8gIiRhc19tZTo3NDgzOiByZXN1bHQ6ICRhY19jdF9OQ1VSU0VTX0NPTkZJRyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3RfTkNVUlNFU19DT05GSUciID4mNgorZWxzZQorICBlY2hvICIkYXNfbWU6NzQ4NjogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2CitmaQorCisgIHRlc3QgLW4gIiRhY19jdF9OQ1VSU0VTX0NPTkZJRyIgJiYgYnJlYWsKK2RvbmUKK3Rlc3QgLW4gIiRhY19jdF9OQ1VSU0VTX0NPTkZJRyIgfHwgYWNfY3RfTkNVUlNFU19DT05GSUc9Im5vbmUiCisKKyAgTkNVUlNFU19DT05GSUc9JGFjX2N0X05DVVJTRVNfQ09ORklHCitmaQorCisJaWYgdGVzdCAiJE5DVVJTRVNfQ09ORklHIiAhPSBub25lIDsgdGhlbgorCisJCUNQUEZMQUdTPSIkQ1BQRkxBR1MgYCROQ1VSU0VTX0NPTkZJRyAtLWNmbGFnc2AiCisKK2NmX2FkZF9saWJzPSJgJE5DVVJTRVNfQ09ORklHIC0tbGlic2AiCisjIEZpbHRlciBvdXQgZHVwbGljYXRlcyAtIHRoaXMgaGFwcGVucyB3aXRoIGJhZGx5LWRlc2lnbmVkICIucGMiIGZpbGVzLi4uCitmb3IgY2ZfYWRkXzFsaWIgaW4gJExJQlMKK2RvCisJZm9yIGNmX2FkZF8ybGliIGluICRjZl9hZGRfbGlicworCWRvCisJCWlmIHRlc3QgIngkY2ZfYWRkXzFsaWIiID0gIngkY2ZfYWRkXzJsaWIiCisJCXRoZW4KKwkJCWNmX2FkZF8xbGliPQorCQkJYnJlYWsKKwkJZmkKKwlkb25lCisJdGVzdCAtbiAiJGNmX2FkZF8xbGliIiAmJiBjZl9hZGRfbGlicz0iJGNmX2FkZF9saWJzICRjZl9hZGRfMWxpYiIKK2RvbmUKK0xJQlM9IiRjZl9hZGRfbGlicyIKKworCQkjIGV2ZW4gd2l0aCBjb25maWcgc2NyaXB0LCBzb21lIHBhY2thZ2VzIHVzZSBuby1vdmVycmlkZSBmb3IgY3Vyc2VzLmgKKworZWNobyAiJGFzX21lOjc1MTk6IGNoZWNraW5nIGlmIHdlIGhhdmUgaWRlbnRpZmllZCBjdXJzZXMgaGVhZGVycyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHdlIGhhdmUgaWRlbnRpZmllZCBjdXJzZXMgaGVhZGVycy4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7Y2ZfY3ZfbmN1cnNlc19oZWFkZXIrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKworY2ZfY3ZfbmN1cnNlc19oZWFkZXI9bm9uZQorZm9yIGNmX2hlYWRlciBpbiBcCisJbmN1cnNlcy5oIG5jdXJzZXMvbmN1cnNlcy5oIFwKKwljdXJzZXMuaCBuY3Vyc2VzL2N1cnNlcy5oCitkbworY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA3NTMxICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDwke2NmX2hlYWRlcn0+CitpbnQKK21haW4gKCkKK3sKK2luaXRzY3IoKTsgdGdvdG8oIj8iLCAwLDApCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjc1NDM6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjc1NDY6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6NzU0OTogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjc1NTI6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBjZl9jdl9uY3Vyc2VzX2hlYWRlcj0kY2ZfaGVhZGVyOyBicmVhaworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Citkb25lCisKK2ZpCitlY2hvICIkYXNfbWU6NzU2MzogcmVzdWx0OiAkY2ZfY3ZfbmN1cnNlc19oZWFkZXIiID4mNQorZWNobyAiJHtFQ0hPX1R9JGNmX2N2X25jdXJzZXNfaGVhZGVyIiA+JjYKKworaWYgdGVzdCAiJGNmX2N2X25jdXJzZXNfaGVhZGVyIiA9IG5vbmUgOyB0aGVuCisJeyB7IGVjaG8gIiRhc19tZTo3NTY3OiBlcnJvcjogTm8gY3Vyc2VzIGhlYWRlci1maWxlcyBmb3VuZCIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBObyBjdXJzZXMgaGVhZGVyLWZpbGVzIGZvdW5kIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitmaQorCisjIGNoZWF0LCB0byBnZXQgdGhlIHJpZ2h0ICNkZWZpbmUncyBmb3IgSEFWRV9OQ1VSU0VTX0gsIGV0Yy4KKworZm9yIGFjX2hlYWRlciBpbiAkY2ZfY3ZfbmN1cnNlc19oZWFkZXIKK2RvCithc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2VjaG8gIiRhc19tZTo3NTc3OiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgoraWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDc1ODMgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPCRhY19oZWFkZXI+CitfQUNFT0YKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjc1ODc6IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZWdyZXAgLXYgJ14gKlwrJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOjc1OTM6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworICBlbHNlCisgICAgYWNfY3BwX2Vycj0KKyAgZmkKK2Vsc2UKKyAgYWNfY3BwX2Vycj15ZXMKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KKyAgZXZhbCAiJGFzX2FjX0hlYWRlcj15ZXMiCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBldmFsICIkYXNfYWNfSGVhZGVyPW5vIgorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CitmaQorZWNobyAiJGFzX21lOjc2MTI6IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQorZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgoraWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgorICBjYXQgPj5jb25mZGVmcy5oIDw8RU9GCisjZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorRU9GCisKK2ZpCitkb25lCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIE5DVVJTRVMgMQorRU9GCisKK2NmX25jdWxpYl9ST09UPWBlY2hvICJIQVZFX0xJQiRjZl9uY3Vjb25maWdfcm9vdCIgfCBzZWQgeSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyVgCisKKwkJY2F0ID4+Y29uZmRlZnMuaCA8PEVPRgorI2RlZmluZSAkY2ZfbmN1bGliX1JPT1QgMQorRU9GCisKKwkJCQljZl9jdl9uY3Vyc2VzX3ZlcnNpb249YCROQ1VSU0VTX0NPTkZJRyAtLXZlcnNpb25gCisKKwllbHNlCisKK2NmX25jdWhkcl9yb290PW5jdXJzZXMKKwordGVzdCAtbiAiJGNmX2N2X2N1cnNlc19kaXIiICYmIFwKK3Rlc3QgIiRjZl9jdl9jdXJzZXNfZGlyIiAhPSAibm8iICYmIHsgXAorCitpZiB0ZXN0IC1uICIkY2ZfY3ZfY3Vyc2VzX2Rpci9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdCIgOyB0aGVuCisgIGZvciBjZl9hZGRfaW5jZGlyIGluICRjZl9jdl9jdXJzZXNfZGlyL2luY2x1ZGUvJGNmX25jdWhkcl9yb290CisgIGRvCisJd2hpbGUgdGVzdCAkY2ZfYWRkX2luY2RpciAhPSAvdXNyL2luY2x1ZGUKKwlkbworCSAgaWYgdGVzdCAtZCAkY2ZfYWRkX2luY2RpcgorCSAgdGhlbgorCQljZl9oYXZlX2luY2Rpcj1ubworCQlpZiB0ZXN0IC1uICIkQ0ZMQUdTJENQUEZMQUdTIiA7IHRoZW4KKwkJICAjIGEgbG9vcCBpcyBuZWVkZWQgdG8gZW5zdXJlIHdlIGNhbiBhZGQgc3ViZGlycyBvZiBleGlzdGluZyBkaXJzCisJCSAgZm9yIGNmX3Rlc3RfaW5jZGlyIGluICRDRkxBR1MgJENQUEZMQUdTIDsgZG8KKwkJCWlmIHRlc3QgIi4kY2ZfdGVzdF9pbmNkaXIiID0gIi4tSSRjZl9hZGRfaW5jZGlyIiA7IHRoZW4KKwkJCSAgY2ZfaGF2ZV9pbmNkaXI9eWVzOyBicmVhaworCQkJZmkKKwkJICBkb25lCisJCWZpCisKKwkJaWYgdGVzdCAiJGNmX2hhdmVfaW5jZGlyIiA9IG5vIDsgdGhlbgorCQkgIGlmIHRlc3QgIiRjZl9hZGRfaW5jZGlyIiA9IC91c3IvbG9jYWwvaW5jbHVkZSA7IHRoZW4KKwkJCWlmIHRlc3QgIiRHQ0MiID0geWVzCisJCQl0aGVuCisJCQkgIGNmX3NhdmVfQ1BQRkxBR1M9JENQUEZMQUdTCisJCQkgIENQUEZMQUdTPSIkQ1BQRkxBR1MgLUkkY2ZfYWRkX2luY2RpciIKKwkJCSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA3NjY1ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgoraW50CittYWluICgpCit7CitwcmludGYoIkhlbGxvIikKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6NzY3NzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NzY4MDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTo3NjgzOiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NzY4NjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIDoKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorY2ZfaGF2ZV9pbmNkaXI9eWVzCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisJCQkgIENQUEZMQUdTPSRjZl9zYXZlX0NQUEZMQUdTCisJCQlmaQorCQkgIGZpCisJCWZpCisKKwkJaWYgdGVzdCAiJGNmX2hhdmVfaW5jZGlyIiA9IG5vIDsgdGhlbgorCQkgIHRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJYWRkaW5nICRjZl9hZGRfaW5jZGlyIHRvIGluY2x1ZGUtcGF0aCIgMT4mNgorCitlY2hvICIke2FzX21lOi1jb25maWd1cmV9Ojc3MDM6IHRlc3RpbmcgYWRkaW5nICRjZl9hZGRfaW5jZGlyIHRvIGluY2x1ZGUtcGF0aCAuLi4iIDE+JjUKKworCQkgIENQUEZMQUdTPSIkQ1BQRkxBR1MgLUkkY2ZfYWRkX2luY2RpciIKKworCQkgIGNmX3RvcF9pbmNkaXI9YGVjaG8gJGNmX2FkZF9pbmNkaXIgfCBzZWQgLWUgJ3MlL2luY2x1ZGUvLiokJS9pbmNsdWRlJSdgCisJCSAgdGVzdCAiJGNmX3RvcF9pbmNkaXIiID0gIiRjZl9hZGRfaW5jZGlyIiAmJiBicmVhaworCQkgIGNmX2FkZF9pbmNkaXI9IiRjZl90b3BfaW5jZGlyIgorCQllbHNlCisJCSAgYnJlYWsKKwkJZmkKKwkgIGVsc2UKKwkJYnJlYWsKKwkgIGZpCisJZG9uZQorICBkb25lCitmaQorCit9CisKK2VjaG8gIiRhc19tZTo3NzIyOiBjaGVja2luZyBmb3IgJGNmX25jdWhkcl9yb290IGhlYWRlciBpbiBpbmNsdWRlLXBhdGgiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGNmX25jdWhkcl9yb290IGhlYWRlciBpbiBpbmNsdWRlLXBhdGguLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2NmX2N2X25jdXJzZXNfaCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorCisJY2ZfaGVhZGVyX2xpc3Q9IiRjZl9uY3VoZHJfcm9vdC9jdXJzZXMuaCAkY2ZfbmN1aGRyX3Jvb3QvbmN1cnNlcy5oIgorCSggdGVzdCAiJGNmX25jdWhkcl9yb290IiA9IG5jdXJzZXMgfHwgdGVzdCAiJGNmX25jdWhkcl9yb290IiA9IG5jdXJzZXN3ICkgJiYgY2ZfaGVhZGVyX2xpc3Q9IiRjZl9oZWFkZXJfbGlzdCBjdXJzZXMuaCBuY3Vyc2VzLmgiCisJZm9yIGNmX2hlYWRlciBpbiAkY2ZfaGVhZGVyX2xpc3QKKwlkbworCisJY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA3NzM0ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2luY2x1ZGUgPCRjZl9oZWFkZXI+CitpbnQKK21haW4gKCkKK3sKKworI2lmZGVmIE5DVVJTRVNfVkVSU0lPTgorCitwcmludGYoIiVzXG4iLCBOQ1VSU0VTX1ZFUlNJT04pOworI2Vsc2UKKyNpZmRlZiBfX05DVVJTRVNfSAorcHJpbnRmKCJvbGRcbiIpOworI2Vsc2UKKwltYWtlIGFuIGVycm9yCisjZW5kaWYKKyNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjc3NTg6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjc3NjE6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6Nzc2NDogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjc3Njc6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBjZl9jdl9uY3Vyc2VzX2g9JGNmX2hlYWRlcgorCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2NmX2N2X25jdXJzZXNfaD1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCisJCXRlc3QgIiRjZl9jdl9uY3Vyc2VzX2giICE9IG5vICYmIGJyZWFrCisJZG9uZQorCitmaQorZWNobyAiJGFzX21lOjc3ODI6IHJlc3VsdDogJGNmX2N2X25jdXJzZXNfaCIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfY3ZfbmN1cnNlc19oIiA+JjYKKworaWYgdGVzdCAiJGNmX2N2X25jdXJzZXNfaCIgIT0gbm8gOyB0aGVuCisJY2ZfY3ZfbmN1cnNlc19oZWFkZXI9JGNmX2N2X25jdXJzZXNfaAorZWxzZQorCitlY2hvICIkYXNfbWU6Nzc4OTogY2hlY2tpbmcgZm9yICRjZl9uY3VoZHJfcm9vdCBpbmNsdWRlLXBhdGgiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGNmX25jdWhkcl9yb290IGluY2x1ZGUtcGF0aC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7Y2ZfY3ZfbmN1cnNlc19oMitzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorCisJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8KKworY2Zfc2VhcmNoPQorCisjIGNvbGxlY3QgdGhlIGN1cnJlbnQgc2V0IG9mIGluY2x1ZGUtZGlyZWN0b3JpZXMgZnJvbSBjb21waWxlciBmbGFncworY2ZfaGVhZGVyX3BhdGhfbGlzdD0iIgoraWYgdGVzdCAtbiAiJHtDRkxBR1N9JHtDUFBGTEFHU30iIDsgdGhlbgorCWZvciBjZl9oZWFkZXJfcGF0aCBpbiAkQ1BQRkxBR1MgJENGTEFHUworCWRvCisJCWNhc2UgJGNmX2hlYWRlcl9wYXRoIGluCisJCSgtSSopCisJCQljZl9oZWFkZXJfcGF0aD1gZWNobyAiLiRjZl9oZWFkZXJfcGF0aCIgfHNlZCAtZSAncy9eLi4uLy8nIC1lICdzLC9pbmNsdWRlJCwsJ2AKKwordGVzdCAieCRjZl9oZWFkZXJfcGF0aCIgIT0gInhOT05FIiAmJiBcCit0ZXN0IC1kICIkY2ZfaGVhZGVyX3BhdGgiICYmIFwKKyB7CisJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIgkuLi4gdGVzdGluZyBmb3IgaW5jbHVkZS1kaXJlY3RvcmllcyB1bmRlciAkY2ZfaGVhZGVyX3BhdGgiCisJdGVzdCAtZCAkY2ZfaGVhZGVyX3BhdGgvaW5jbHVkZSAmJiAgICAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJGNmX2hlYWRlcl9wYXRoL2luY2x1ZGUiCisJdGVzdCAtZCAkY2ZfaGVhZGVyX3BhdGgvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QgJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRjZl9oZWFkZXJfcGF0aC9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdCIKKwl0ZXN0IC1kICRjZl9oZWFkZXJfcGF0aC9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkY2ZfaGVhZGVyX3BhdGgvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QvaW5jbHVkZSIKKwl0ZXN0IC1kICRjZl9oZWFkZXJfcGF0aC8kY2ZfbmN1aGRyX3Jvb3QvaW5jbHVkZSAmJiAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJGNmX2hlYWRlcl9wYXRoLyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlIgorCXRlc3QgLWQgJGNmX2hlYWRlcl9wYXRoLyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdCAmJiAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJGNmX2hlYWRlcl9wYXRoLyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdCIKK30KKworCQkJY2ZfaGVhZGVyX3BhdGhfbGlzdD0iJGNmX2hlYWRlcl9wYXRoX2xpc3QgJGNmX3NlYXJjaCIKKwkJCTs7CisJCWVzYWMKKwlkb25lCitmaQorCisjIGFkZCB0aGUgdmFyaWF0aW9ucyBmb3IgdGhlIHBhY2thZ2Ugd2UgYXJlIGxvb2tpbmcgZm9yCisKK2NmX3NlYXJjaD0KKwordGVzdCAieCRwcmVmaXgiICE9ICJ4Tk9ORSIgJiYgXAordGVzdCAtZCAiJHByZWZpeCIgJiYgXAorIHsKKwl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCS4uLiB0ZXN0aW5nIGZvciBpbmNsdWRlLWRpcmVjdG9yaWVzIHVuZGVyICRwcmVmaXgiCisJdGVzdCAtZCAkcHJlZml4L2luY2x1ZGUgJiYgICAgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRwcmVmaXgvaW5jbHVkZSIKKwl0ZXN0IC1kICRwcmVmaXgvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QgJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRwcmVmaXgvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QiCisJdGVzdCAtZCAkcHJlZml4L2luY2x1ZGUvJGNmX25jdWhkcl9yb290L2luY2x1ZGUgJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRwcmVmaXgvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QvaW5jbHVkZSIKKwl0ZXN0IC1kICRwcmVmaXgvJGNmX25jdWhkcl9yb290L2luY2x1ZGUgJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRwcmVmaXgvJGNmX25jdWhkcl9yb290L2luY2x1ZGUiCisJdGVzdCAtZCAkcHJlZml4LyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdCAmJiAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJHByZWZpeC8kY2ZfbmN1aGRyX3Jvb3QvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QiCit9CisKK2ZvciBjZl9zdWJkaXJfcHJlZml4IGluIFwKKwkvdXNyIFwKKwkvdXNyL2xvY2FsIFwKKwkvdXNyL3BrZyBcCisJL29wdCBcCisJL29wdC9sb2NhbCBcCisJJEhPTUUKK2RvCisKK3Rlc3QgIngkY2Zfc3ViZGlyX3ByZWZpeCIgIT0gIngkcHJlZml4IiAmJiBcCit0ZXN0IC1kICIkY2Zfc3ViZGlyX3ByZWZpeCIgJiYgXAorKHRlc3QgLXogIiRwcmVmaXgiIHx8IHRlc3QgeCRwcmVmaXggPSB4Tk9ORSB8fCB0ZXN0ICJ4JGNmX3N1YmRpcl9wcmVmaXgiICE9ICJ4JHByZWZpeCIpICYmIHsKKwl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCS4uLiB0ZXN0aW5nIGZvciBpbmNsdWRlLWRpcmVjdG9yaWVzIHVuZGVyICRjZl9zdWJkaXJfcHJlZml4IgorCXRlc3QgLWQgJGNmX3N1YmRpcl9wcmVmaXgvaW5jbHVkZSAmJiAgICAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJGNmX3N1YmRpcl9wcmVmaXgvaW5jbHVkZSIKKwl0ZXN0IC1kICRjZl9zdWJkaXJfcHJlZml4L2luY2x1ZGUvJGNmX25jdWhkcl9yb290ICYmICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkY2Zfc3ViZGlyX3ByZWZpeC9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdCIKKwl0ZXN0IC1kICRjZl9zdWJkaXJfcHJlZml4L2luY2x1ZGUvJGNmX25jdWhkcl9yb290L2luY2x1ZGUgJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRjZl9zdWJkaXJfcHJlZml4L2luY2x1ZGUvJGNmX25jdWhkcl9yb290L2luY2x1ZGUiCisJdGVzdCAtZCAkY2Zfc3ViZGlyX3ByZWZpeC8kY2ZfbmN1aGRyX3Jvb3QvaW5jbHVkZSAmJiAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJGNmX3N1YmRpcl9wcmVmaXgvJGNmX25jdWhkcl9yb290L2luY2x1ZGUiCisJdGVzdCAtZCAkY2Zfc3ViZGlyX3ByZWZpeC8kY2ZfbmN1aGRyX3Jvb3QvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QgJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRjZl9zdWJkaXJfcHJlZml4LyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdCIKK30KKworZG9uZQorCit0ZXN0ICIkaW5jbHVkZWRpciIgIT0gTk9ORSAmJiBcCit0ZXN0ICIkaW5jbHVkZWRpciIgIT0gIi91c3IvaW5jbHVkZSIgJiYgXAordGVzdCAtZCAiJGluY2x1ZGVkaXIiICYmIHsKKwl0ZXN0IC1kICRpbmNsdWRlZGlyICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkaW5jbHVkZWRpciIKKwl0ZXN0IC1kICRpbmNsdWRlZGlyLyRjZl9uY3VoZHJfcm9vdCAmJiBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJGluY2x1ZGVkaXIvJGNmX25jdWhkcl9yb290IgorfQorCit0ZXN0ICIkb2xkaW5jbHVkZWRpciIgIT0gTk9ORSAmJiBcCit0ZXN0ICIkb2xkaW5jbHVkZWRpciIgIT0gIi91c3IvaW5jbHVkZSIgJiYgXAordGVzdCAtZCAiJG9sZGluY2x1ZGVkaXIiICYmIHsKKwl0ZXN0IC1kICRvbGRpbmNsdWRlZGlyICAgICYmIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkb2xkaW5jbHVkZWRpciIKKwl0ZXN0IC1kICRvbGRpbmNsdWRlZGlyLyRjZl9uY3VoZHJfcm9vdCAmJiBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJG9sZGluY2x1ZGVkaXIvJGNmX25jdWhkcl9yb290IgorfQorCitjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJGNmX2hlYWRlcl9wYXRoX2xpc3QiCisKKwl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyBzZWFyY2ggcGF0aCAkY2Zfc2VhcmNoCisJY2Zfc2F2ZTJfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKwlmb3IgY2ZfaW5jZGlyIGluICRjZl9zZWFyY2gKKwlkbworCitpZiB0ZXN0IC1uICIkY2ZfaW5jZGlyIiA7IHRoZW4KKyAgZm9yIGNmX2FkZF9pbmNkaXIgaW4gJGNmX2luY2RpcgorICBkbworCXdoaWxlIHRlc3QgJGNmX2FkZF9pbmNkaXIgIT0gL3Vzci9pbmNsdWRlCisJZG8KKwkgIGlmIHRlc3QgLWQgJGNmX2FkZF9pbmNkaXIKKwkgIHRoZW4KKwkJY2ZfaGF2ZV9pbmNkaXI9bm8KKwkJaWYgdGVzdCAtbiAiJENGTEFHUyRDUFBGTEFHUyIgOyB0aGVuCisJCSAgIyBhIGxvb3AgaXMgbmVlZGVkIHRvIGVuc3VyZSB3ZSBjYW4gYWRkIHN1YmRpcnMgb2YgZXhpc3RpbmcgZGlycworCQkgIGZvciBjZl90ZXN0X2luY2RpciBpbiAkQ0ZMQUdTICRDUFBGTEFHUyA7IGRvCisJCQlpZiB0ZXN0ICIuJGNmX3Rlc3RfaW5jZGlyIiA9ICIuLUkkY2ZfYWRkX2luY2RpciIgOyB0aGVuCisJCQkgIGNmX2hhdmVfaW5jZGlyPXllczsgYnJlYWsKKwkJCWZpCisJCSAgZG9uZQorCQlmaQorCisJCWlmIHRlc3QgIiRjZl9oYXZlX2luY2RpciIgPSBubyA7IHRoZW4KKwkJICBpZiB0ZXN0ICIkY2ZfYWRkX2luY2RpciIgPSAvdXNyL2xvY2FsL2luY2x1ZGUgOyB0aGVuCisJCQlpZiB0ZXN0ICIkR0NDIiA9IHllcworCQkJdGhlbgorCQkJICBjZl9zYXZlX0NQUEZMQUdTPSRDUFBGTEFHUworCQkJICBDUFBGTEFHUz0iJENQUEZMQUdTIC1JJGNmX2FkZF9pbmNkaXIiCisJCQkgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgNzkwNyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KK2ludAorbWFpbiAoKQoreworcHJpbnRmKCJIZWxsbyIpCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjc5MTk6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjc5MjI6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6NzkyNTogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjc5Mjg6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICA6CitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2NmX2hhdmVfaW5jZGlyPXllcworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCQkJICBDUFBGTEFHUz0kY2Zfc2F2ZV9DUFBGTEFHUworCQkJZmkKKwkJICBmaQorCQlmaQorCisJCWlmIHRlc3QgIiRjZl9oYXZlX2luY2RpciIgPSBubyA7IHRoZW4KKwkJICB0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCWFkZGluZyAkY2ZfYWRkX2luY2RpciB0byBpbmNsdWRlLXBhdGgiIDE+JjYKKworZWNobyAiJHthc19tZTotY29uZmlndXJlfTo3OTQ1OiB0ZXN0aW5nIGFkZGluZyAkY2ZfYWRkX2luY2RpciB0byBpbmNsdWRlLXBhdGggLi4uIiAxPiY1CisKKwkJICBDUFBGTEFHUz0iJENQUEZMQUdTIC1JJGNmX2FkZF9pbmNkaXIiCisKKwkJICBjZl90b3BfaW5jZGlyPWBlY2hvICRjZl9hZGRfaW5jZGlyIHwgc2VkIC1lICdzJS9pbmNsdWRlLy4qJCUvaW5jbHVkZSUnYAorCQkgIHRlc3QgIiRjZl90b3BfaW5jZGlyIiA9ICIkY2ZfYWRkX2luY2RpciIgJiYgYnJlYWsKKwkJICBjZl9hZGRfaW5jZGlyPSIkY2ZfdG9wX2luY2RpciIKKwkJZWxzZQorCQkgIGJyZWFrCisJCWZpCisJICBlbHNlCisJCWJyZWFrCisJICBmaQorCWRvbmUKKyAgZG9uZQorZmkKKworCQlmb3IgY2ZfaGVhZGVyIGluIFwKKwkJCW5jdXJzZXMuaCBcCisJCQljdXJzZXMuaAorCQlkbworCisJY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA3OTY4ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2luY2x1ZGUgPCRjZl9oZWFkZXI+CitpbnQKK21haW4gKCkKK3sKKworI2lmZGVmIE5DVVJTRVNfVkVSU0lPTgorCitwcmludGYoIiVzXG4iLCBOQ1VSU0VTX1ZFUlNJT04pOworI2Vsc2UKKyNpZmRlZiBfX05DVVJTRVNfSAorcHJpbnRmKCJvbGRcbiIpOworI2Vsc2UKKwltYWtlIGFuIGVycm9yCisjZW5kaWYKKyNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjc5OTI6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjc5OTU6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6Nzk5ODogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjgwMDE6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBjZl9jdl9uY3Vyc2VzX2gyPSRjZl9oZWFkZXIKKworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitjZl9jdl9uY3Vyc2VzX2gyPW5vCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKKwkJCWlmIHRlc3QgIiRjZl9jdl9uY3Vyc2VzX2gyIiAhPSBubyA7IHRoZW4KKwkJCQljZl9jdl9uY3Vyc2VzX2gyPSRjZl9pbmNkaXIvJGNmX2hlYWRlcgorCQkJCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICRhY19uICIJLi4uIGZvdW5kICRhY19jIiAxPiY2CisJCQkJYnJlYWsKKwkJCWZpCisJCQl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCS4uLiB0ZXN0ZWQgJGNmX2luY2Rpci8kY2ZfaGVhZGVyIiAxPiY2CisJCWRvbmUKKwkJQ1BQRkxBR1M9IiRjZl9zYXZlMl9DUFBGTEFHUyIKKwkJdGVzdCAiJGNmX2N2X25jdXJzZXNfaDIiICE9IG5vICYmIGJyZWFrCisJZG9uZQorCXRlc3QgIiRjZl9jdl9uY3Vyc2VzX2gyIiA9IG5vICYmIHsgeyBlY2hvICIkYXNfbWU6ODAyMjogZXJyb3I6IG5vdCBmb3VuZCIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBub3QgZm91bmQiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKworZmkKK2VjaG8gIiRhc19tZTo4MDI3OiByZXN1bHQ6ICRjZl9jdl9uY3Vyc2VzX2gyIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9jdl9uY3Vyc2VzX2gyIiA+JjYKKworCWNmXzFzdF9pbmNkaXI9YGVjaG8gJGNmX2N2X25jdXJzZXNfaDIgfCBzZWQgLWUgJ3MlL1teL10qJCUlJ2AKKwljZl9jdl9uY3Vyc2VzX2hlYWRlcj1gYmFzZW5hbWUgJGNmX2N2X25jdXJzZXNfaDJgCisJaWYgdGVzdCBgYmFzZW5hbWUgJGNmXzFzdF9pbmNkaXJgID0gJGNmX25jdWhkcl9yb290IDsgdGhlbgorCQljZl9jdl9uY3Vyc2VzX2hlYWRlcj0kY2ZfbmN1aGRyX3Jvb3QvJGNmX2N2X25jdXJzZXNfaGVhZGVyCisJZmkKKworaWYgdGVzdCAtbiAiJGNmXzFzdF9pbmNkaXIiIDsgdGhlbgorICBmb3IgY2ZfYWRkX2luY2RpciBpbiAkY2ZfMXN0X2luY2RpcgorICBkbworCXdoaWxlIHRlc3QgJGNmX2FkZF9pbmNkaXIgIT0gL3Vzci9pbmNsdWRlCisJZG8KKwkgIGlmIHRlc3QgLWQgJGNmX2FkZF9pbmNkaXIKKwkgIHRoZW4KKwkJY2ZfaGF2ZV9pbmNkaXI9bm8KKwkJaWYgdGVzdCAtbiAiJENGTEFHUyRDUFBGTEFHUyIgOyB0aGVuCisJCSAgIyBhIGxvb3AgaXMgbmVlZGVkIHRvIGVuc3VyZSB3ZSBjYW4gYWRkIHN1YmRpcnMgb2YgZXhpc3RpbmcgZGlycworCQkgIGZvciBjZl90ZXN0X2luY2RpciBpbiAkQ0ZMQUdTICRDUFBGTEFHUyA7IGRvCisJCQlpZiB0ZXN0ICIuJGNmX3Rlc3RfaW5jZGlyIiA9ICIuLUkkY2ZfYWRkX2luY2RpciIgOyB0aGVuCisJCQkgIGNmX2hhdmVfaW5jZGlyPXllczsgYnJlYWsKKwkJCWZpCisJCSAgZG9uZQorCQlmaQorCisJCWlmIHRlc3QgIiRjZl9oYXZlX2luY2RpciIgPSBubyA7IHRoZW4KKwkJICBpZiB0ZXN0ICIkY2ZfYWRkX2luY2RpciIgPSAvdXNyL2xvY2FsL2luY2x1ZGUgOyB0aGVuCisJCQlpZiB0ZXN0ICIkR0NDIiA9IHllcworCQkJdGhlbgorCQkJICBjZl9zYXZlX0NQUEZMQUdTPSRDUFBGTEFHUworCQkJICBDUFBGTEFHUz0iJENQUEZMQUdTIC1JJGNmX2FkZF9pbmNkaXIiCisJCQkgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgODA2MCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KK2ludAorbWFpbiAoKQoreworcHJpbnRmKCJIZWxsbyIpCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjgwNzI6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjgwNzU6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6ODA3ODogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjgwODE6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICA6CitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2NmX2hhdmVfaW5jZGlyPXllcworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCQkJICBDUFBGTEFHUz0kY2Zfc2F2ZV9DUFBGTEFHUworCQkJZmkKKwkJICBmaQorCQlmaQorCisJCWlmIHRlc3QgIiRjZl9oYXZlX2luY2RpciIgPSBubyA7IHRoZW4KKwkJICB0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCWFkZGluZyAkY2ZfYWRkX2luY2RpciB0byBpbmNsdWRlLXBhdGgiIDE+JjYKKworZWNobyAiJHthc19tZTotY29uZmlndXJlfTo4MDk4OiB0ZXN0aW5nIGFkZGluZyAkY2ZfYWRkX2luY2RpciB0byBpbmNsdWRlLXBhdGggLi4uIiAxPiY1CisKKwkJICBDUFBGTEFHUz0iJENQUEZMQUdTIC1JJGNmX2FkZF9pbmNkaXIiCisKKwkJICBjZl90b3BfaW5jZGlyPWBlY2hvICRjZl9hZGRfaW5jZGlyIHwgc2VkIC1lICdzJS9pbmNsdWRlLy4qJCUvaW5jbHVkZSUnYAorCQkgIHRlc3QgIiRjZl90b3BfaW5jZGlyIiA9ICIkY2ZfYWRkX2luY2RpciIgJiYgYnJlYWsKKwkJICBjZl9hZGRfaW5jZGlyPSIkY2ZfdG9wX2luY2RpciIKKwkJZWxzZQorCQkgIGJyZWFrCisJCWZpCisJICBlbHNlCisJCWJyZWFrCisJICBmaQorCWRvbmUKKyAgZG9uZQorZmkKKworZmkKKworIyBTZXQgZGVmaW5pdGlvbnMgdG8gYWxsb3cgaWZkZWYnaW5nIGZvciBuY3Vyc2VzLmgKKworY2FzZSAkY2ZfY3ZfbmN1cnNlc19oZWFkZXIgaW4KKygqbmN1cnNlcy5oKQorCitjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX05DVVJTRVNfSCAxCitFT0YKKworCTs7Citlc2FjCisKK2Nhc2UgJGNmX2N2X25jdXJzZXNfaGVhZGVyIGluCisobmN1cnNlcy9jdXJzZXMuaHxuY3Vyc2VzL25jdXJzZXMuaCkKKworY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9OQ1VSU0VTX05DVVJTRVNfSCAxCitFT0YKKworCTs7CisobmN1cnNlc3cvY3Vyc2VzLmh8bmN1cnNlc3cvbmN1cnNlcy5oKQorCitjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX05DVVJTRVNXX05DVVJTRVNfSCAxCitFT0YKKworCTs7Citlc2FjCisKK2VjaG8gIiRhc19tZTo4MTQ2OiBjaGVja2luZyBmb3IgdGVybWluZm8gaGVhZGVyIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHRlcm1pbmZvIGhlYWRlci4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7Y2ZfY3ZfdGVybV9oZWFkZXIrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKworY2FzZSAke2NmX2N2X25jdXJzZXNfaGVhZGVyfSBpbgorKCovbmN1cnNlcy5ofCovbmN1cnNlc3cuaCkKKwljZl90ZXJtX2hlYWRlcj1gZWNobyAiJGNmX2N2X25jdXJzZXNfaGVhZGVyIiB8IHNlZCAtZSAncyVuY3Vyc2VzW14uXSpcLmgkJXRlcm0uaCUnYAorCTs7CisoKikKKwljZl90ZXJtX2hlYWRlcj10ZXJtLmgKKwk7OworZXNhYworCitmb3IgY2ZfdGVzdCBpbiAkY2ZfdGVybV9oZWFkZXIgIm5jdXJzZXMvdGVybS5oIiAibmN1cnNlc3cvdGVybS5oIgorZG8KK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgODE2NCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDwke2NmX2N2X25jdXJzZXNfaGVhZGVyOi1jdXJzZXMuaH0+CisjaW5jbHVkZSA8JGNmX3Rlc3Q+CisKK2ludAorbWFpbiAoKQoreworaW50IHggPSBhdXRvX2xlZnRfbWFyZ2luCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjgxNzk6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjgxODI6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6ODE4NTogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjgxODg6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorCisJY2ZfY3ZfdGVybV9oZWFkZXI9IiRjZl90ZXN0IgorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwljZl9jdl90ZXJtX2hlYWRlcj11bmtub3duCisKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKwl0ZXN0ICIkY2ZfY3ZfdGVybV9oZWFkZXIiICE9IHVua25vd24gJiYgYnJlYWsKK2RvbmUKKworZmkKK2VjaG8gIiRhc19tZTo4MjA0OiByZXN1bHQ6ICRjZl9jdl90ZXJtX2hlYWRlciIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfY3ZfdGVybV9oZWFkZXIiID4mNgorCisjIFNldCBkZWZpbml0aW9ucyB0byBhbGxvdyBpZmRlZidpbmcgdG8gYWNjb21tb2RhdGUgc3ViZGlyZWN0b3JpZXMKKworY2FzZSAkY2ZfY3ZfdGVybV9oZWFkZXIgaW4KKygqdGVybS5oKQorCitjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX1RFUk1fSCAxCitFT0YKKworCTs7Citlc2FjCisKK2Nhc2UgJGNmX2N2X3Rlcm1faGVhZGVyIGluCisobmN1cnNlcy90ZXJtLmgpCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEhBVkVfTkNVUlNFU19URVJNX0ggMQorRU9GCisKKwk7OworKG5jdXJzZXN3L3Rlcm0uaCkKKworY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9OQ1VSU0VTV19URVJNX0ggMQorRU9GCisKKwk7OworZXNhYworCisjIHNvbWUgYXBwbGljYXRpb25zIG5lZWQgdGhpcywgYnV0IHNob3VsZCBjaGVjayBmb3IgTkNVUlNFU19WRVJTSU9OCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIE5DVVJTRVMgMQorRU9GCisKK2VjaG8gIiRhc19tZTo4MjQyOiBjaGVja2luZyBmb3IgbmN1cnNlcyB2ZXJzaW9uIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG5jdXJzZXMgdmVyc2lvbi4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7Y2ZfY3ZfbmN1cnNlc192ZXJzaW9uK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKKwljZl9jdl9uY3Vyc2VzX3ZlcnNpb249bm8KKwljZl90ZW1wZmlsZT1vdXQkJAorCXJtIC1mICRjZl90ZW1wZmlsZQorCWlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisKKwkjIFRoaXMgd2lsbCBub3Qgd29yayBpZiB0aGUgcHJlcHJvY2Vzc29yIHNwbGl0cyB0aGUgbGluZSBhZnRlciB0aGUKKwkjIEF1dG9jb25mIHRva2VuLiAgVGhlICd1bnByb3RvJyBwcm9ncmFtIGRvZXMgdGhhdC4KKwljYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjaW5jbHVkZSA8JHtjZl9jdl9uY3Vyc2VzX2hlYWRlcjotY3Vyc2VzLmh9PgorI3VuZGVmIEF1dG9jb25mCisjaWZkZWYgTkNVUlNFU19WRVJTSU9OCitBdXRvY29uZiBOQ1VSU0VTX1ZFUlNJT04KKyNlbHNlCisjaWZkZWYgX19OQ1VSU0VTX0gKK0F1dG9jb25mICJvbGQiCisjZW5kaWYKKzsKKyNlbmRpZgorRU9GCisJY2ZfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQgMj4mNSB8IGdyZXAgJ15BdXRvY29uZiAnID5jb25mdGVzdC5vdXQiCisJeyAoZXZhbCBlY2hvICIkYXNfbWU6ODI2ODogXCIkY2ZfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGNmX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjgyNzE6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfQorCWlmIHRlc3QgLWYgY29uZnRlc3Qub3V0IDsgdGhlbgorCQljZl9vdXQ9YGNhdCBjb25mdGVzdC5vdXQgfCBzZWQgLWUgJ3MlXkF1dG9jb25mICUlJyAtZSAncyVeW14iXSoiJSUnIC1lICdzJSIuKiUlJ2AKKwkJdGVzdCAtbiAiJGNmX291dCIgJiYgY2ZfY3ZfbmN1cnNlc192ZXJzaW9uPSIkY2Zfb3V0IgorCQlybSAtZiBjb25mdGVzdC5vdXQKKwlmaQorCitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgODI4MSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpbmNsdWRlIDwke2NmX2N2X25jdXJzZXNfaGVhZGVyOi1jdXJzZXMuaH0+CisjaW5jbHVkZSA8c3RkaW8uaD4KK2ludCBtYWluKCkKK3sKKwlGSUxFICpmcCA9IGZvcGVuKCIkY2ZfdGVtcGZpbGUiLCAidyIpOworI2lmZGVmIE5DVVJTRVNfVkVSU0lPTgorIyBpZmRlZiBOQ1VSU0VTX1ZFUlNJT05fUEFUQ0gKKwlmcHJpbnRmKGZwLCAiJXMuJWRcbiIsIE5DVVJTRVNfVkVSU0lPTiwgTkNVUlNFU19WRVJTSU9OX1BBVENIKTsKKyMgZWxzZQorCWZwcmludGYoZnAsICIlc1xuIiwgTkNVUlNFU19WRVJTSU9OKTsKKyMgZW5kaWYKKyNlbHNlCisjIGlmZGVmIF9fTkNVUlNFU19ICisJZnByaW50ZihmcCwgIm9sZFxuIik7CisjIGVsc2UKKwltYWtlIGFuIGVycm9yCisjIGVuZGlmCisjZW5kaWYKKwkke2NmX2N2X21haW5fcmV0dXJuOi1yZXR1cm59KDApOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjgzMDY6IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjgzMDk6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjgzMTE6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo4MzE0OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKworCWNmX2N2X25jdXJzZXNfdmVyc2lvbj1gY2F0ICRjZl90ZW1wZmlsZWAKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKK2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2ZpCitybSAtZiBjb3JlIGNvcmUuKiAqLmNvcmUgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKKwlybSAtZiAkY2ZfdGVtcGZpbGUKKworZmkKK2VjaG8gIiRhc19tZTo4MzI4OiByZXN1bHQ6ICRjZl9jdl9uY3Vyc2VzX3ZlcnNpb24iID4mNQorZWNobyAiJHtFQ0hPX1R9JGNmX2N2X25jdXJzZXNfdmVyc2lvbiIgPiY2Cit0ZXN0ICIkY2ZfY3ZfbmN1cnNlc192ZXJzaW9uIiA9IG5vIHx8CitjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBOQ1VSU0VTIDEKK0VPRgorCitjZl9uY3VsaWJfcm9vdD1uY3Vyc2VzCisJIyBUaGlzIHdvcmtzLCBleGNlcHQgZm9yIHRoZSBzcGVjaWFsIGNhc2Ugd2hlcmUgd2UgZmluZCBncG0sIGJ1dAorCSMgbmN1cnNlcyBpcyBpbiBhIG5vbnN0YW5kYXJkIGxvY2F0aW9uIHZpYSAkTElCUywgYW5kIHdlIHJlYWxseSB3YW50CisJIyB0byBsaW5rIGdwbS4KK2NmX25jdXJzZXNfTElCUz0iIgorY2ZfbmN1cnNlc19TQVZFPSIkTElCUyIKK2VjaG8gIiRhc19tZTo4MzQxOiBjaGVja2luZyBmb3IgR3BtX09wZW4gaW4gLWxncG0iID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgR3BtX09wZW4gaW4gLWxncG0uLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9ncG1fR3BtX09wZW4rc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxncG0gICRMSUJTIgorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA4MzQ5ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciBHcG1fT3BlbiAoKTsKK2ludAorbWFpbiAoKQoreworR3BtX09wZW4gKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTo4MzY4OiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo4MzcxOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6ODM3NDogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjgzNzc6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9saWJfZ3BtX0dwbV9PcGVuPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CithY19jdl9saWJfZ3BtX0dwbV9PcGVuPW5vCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK2VjaG8gIiRhc19tZTo4Mzg4OiByZXN1bHQ6ICRhY19jdl9saWJfZ3BtX0dwbV9PcGVuIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfZ3BtX0dwbV9PcGVuIiA+JjYKK2lmIHRlc3QgJGFjX2N2X2xpYl9ncG1fR3BtX09wZW4gPSB5ZXM7IHRoZW4KKyAgZWNobyAiJGFzX21lOjgzOTE6IGNoZWNraW5nIGZvciBpbml0c2NyIGluIC1sZ3BtIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGluaXRzY3IgaW4gLWxncG0uLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9ncG1faW5pdHNjcitzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGdwbSAgJExJQlMiCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDgzOTkgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIGluaXRzY3IgKCk7CitpbnQKK21haW4gKCkKK3sKK2luaXRzY3IgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTo4NDE4OiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo4NDIxOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6ODQyNDogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjg0Mjc6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9saWJfZ3BtX2luaXRzY3I9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2FjX2N2X2xpYl9ncG1faW5pdHNjcj1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCitlY2hvICIkYXNfbWU6ODQzODogcmVzdWx0OiAkYWNfY3ZfbGliX2dwbV9pbml0c2NyIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfZ3BtX2luaXRzY3IiID4mNgoraWYgdGVzdCAkYWNfY3ZfbGliX2dwbV9pbml0c2NyID0geWVzOyB0aGVuCisgIExJQlM9IiRjZl9uY3Vyc2VzX1NBVkUiCitlbHNlCisgIGNmX25jdXJzZXNfTElCUz0iLWxncG0iCitmaQorCitmaQorCitjYXNlICRob3N0X29zIGluCisoZnJlZWJzZCopCisJIyBUaGlzIGlzIG9ubHkgbmVjZXNzYXJ5IGlmIHlvdSBhcmUgbGlua2luZyBhZ2FpbnN0IGFuIG9ic29sZXRlCisJIyB2ZXJzaW9uIG9mIG5jdXJzZXMgKGJ1dCBpdCBzaG91bGQgZG8gbm8gaGFybSwgc2luY2UgaXQncyBzdGF0aWMpLgorCWlmIHRlc3QgIiRjZl9uY3VsaWJfcm9vdCIgPSBuY3Vyc2VzIDsgdGhlbgorCQllY2hvICIkYXNfbWU6ODQ1MzogY2hlY2tpbmcgZm9yIHRnb3RvIGluIC1sbXl0aW5mbyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciB0Z290byBpbiAtbG15dGluZm8uLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9teXRpbmZvX3Rnb3RvK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sbXl0aW5mbyAgJExJQlMiCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDg0NjEgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIHRnb3RvICgpOworaW50CittYWluICgpCit7Cit0Z290byAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjg0ODA6IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjg0ODM6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTo4NDg2OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6ODQ4OTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X2xpYl9teXRpbmZvX3Rnb3RvPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CithY19jdl9saWJfbXl0aW5mb190Z290bz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCitlY2hvICIkYXNfbWU6ODUwMDogcmVzdWx0OiAkYWNfY3ZfbGliX215dGluZm9fdGdvdG8iID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9teXRpbmZvX3Rnb3RvIiA+JjYKK2lmIHRlc3QgJGFjX2N2X2xpYl9teXRpbmZvX3Rnb3RvID0geWVzOyB0aGVuCisgIGNmX25jdXJzZXNfTElCUz0iLWxteXRpbmZvICRjZl9uY3Vyc2VzX0xJQlMiCitmaQorCisJZmkKKwk7OworZXNhYworCitjZl9hZGRfbGlicz0iJGNmX25jdXJzZXNfTElCUyIKKyMgRmlsdGVyIG91dCBkdXBsaWNhdGVzIC0gdGhpcyBoYXBwZW5zIHdpdGggYmFkbHktZGVzaWduZWQgIi5wYyIgZmlsZXMuLi4KK2ZvciBjZl9hZGRfMWxpYiBpbiAkTElCUworZG8KKwlmb3IgY2ZfYWRkXzJsaWIgaW4gJGNmX2FkZF9saWJzCisJZG8KKwkJaWYgdGVzdCAieCRjZl9hZGRfMWxpYiIgPSAieCRjZl9hZGRfMmxpYiIKKwkJdGhlbgorCQkJY2ZfYWRkXzFsaWI9CisJCQlicmVhaworCQlmaQorCWRvbmUKKwl0ZXN0IC1uICIkY2ZfYWRkXzFsaWIiICYmIGNmX2FkZF9saWJzPSIkY2ZfYWRkX2xpYnMgJGNmX2FkZF8xbGliIgorZG9uZQorTElCUz0iJGNmX2FkZF9saWJzIgorCitpZiAoIHRlc3QgLW4gIiRjZl9jdl9jdXJzZXNfZGlyIiAmJiB0ZXN0ICIkY2ZfY3ZfY3Vyc2VzX2RpciIgIT0gIm5vIiApCit0aGVuCisKK2NmX2FkZF9saWJzPSItbCRjZl9uY3VsaWJfcm9vdCIKKyMgRmlsdGVyIG91dCBkdXBsaWNhdGVzIC0gdGhpcyBoYXBwZW5zIHdpdGggYmFkbHktZGVzaWduZWQgIi5wYyIgZmlsZXMuLi4KK2ZvciBjZl9hZGRfMWxpYiBpbiAkTElCUworZG8KKwlmb3IgY2ZfYWRkXzJsaWIgaW4gJGNmX2FkZF9saWJzCisJZG8KKwkJaWYgdGVzdCAieCRjZl9hZGRfMWxpYiIgPSAieCRjZl9hZGRfMmxpYiIKKwkJdGhlbgorCQkJY2ZfYWRkXzFsaWI9CisJCQlicmVhaworCQlmaQorCWRvbmUKKwl0ZXN0IC1uICIkY2ZfYWRkXzFsaWIiICYmIGNmX2FkZF9saWJzPSIkY2ZfYWRkX2xpYnMgJGNmX2FkZF8xbGliIgorZG9uZQorTElCUz0iJGNmX2FkZF9saWJzIgorCitlbHNlCisKKwlldmFsICdjZl9jdl9oYXZlX2xpYl8nJGNmX25jdWxpYl9yb290Jz1ubycKKwljZl9saWJkaXI9IiIKKwllY2hvICIkYXNfbWU6ODU0OTogY2hlY2tpbmcgZm9yIGluaXRzY3IiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgaW5pdHNjci4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfZnVuY19pbml0c2NyK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgODU1NSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciBpbml0c2NyICgpOyBiZWxvdy4gICovCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIGluaXRzY3IgKCk7CitjaGFyICgqZikgKCk7CisKK2ludAorbWFpbiAoKQoreworLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cworICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCisgICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCisjaWYgZGVmaW5lZCAoX19zdHViX2luaXRzY3IpIHx8IGRlZmluZWQgKF9fc3R1Yl9fX2luaXRzY3IpCitjaG9rZSBtZQorI2Vsc2UKK2YgPSBpbml0c2NyOyAvKiB3b3JrYXJvdW5kIGZvciBJQ0MgMTIuMC4zICovIGlmIChmID09IDApIHJldHVybiAxOworI2VuZGlmCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjg1ODY6IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjg1ODk6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTo4NTkyOiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6ODU5NTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X2Z1bmNfaW5pdHNjcj15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorYWNfY3ZfZnVuY19pbml0c2NyPW5vCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2VjaG8gIiRhc19tZTo4NjA1OiByZXN1bHQ6ICRhY19jdl9mdW5jX2luaXRzY3IiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2Z1bmNfaW5pdHNjciIgPiY2CitpZiB0ZXN0ICRhY19jdl9mdW5jX2luaXRzY3IgPSB5ZXM7IHRoZW4KKyAgZXZhbCAnY2ZfY3ZfaGF2ZV9saWJfJyRjZl9uY3VsaWJfcm9vdCc9eWVzJworZWxzZQorCisJCWNmX3NhdmVfTElCUz0iJExJQlMiCisJCWVjaG8gIiRhc19tZTo4NjEyOiBjaGVja2luZyBmb3IgaW5pdHNjciBpbiAtbCRjZl9uY3VsaWJfcm9vdCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBpbml0c2NyIGluIC1sJGNmX25jdWxpYl9yb290Li4uICRFQ0hPX0MiID4mNgorCQlMSUJTPSItbCRjZl9uY3VsaWJfcm9vdCAkTElCUyIKKwkJY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA4NjE2ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDwke2NmX2N2X25jdXJzZXNfaGVhZGVyOi1jdXJzZXMuaH0+CitpbnQKK21haW4gKCkKK3sKK2luaXRzY3IoKQorICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6ODYyODogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6ODYzMTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjg2MzQ6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo4NjM3OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgZWNobyAiJGFzX21lOjg2Mzk6IHJlc3VsdDogeWVzIiA+JjUKK2VjaG8gIiR7RUNIT19UfXllcyIgPiY2CisJCQkgZXZhbCAnY2ZfY3ZfaGF2ZV9saWJfJyRjZl9uY3VsaWJfcm9vdCc9eWVzJworCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2VjaG8gIiRhc19tZTo4NjQ2OiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjYKKworY2Zfc2VhcmNoPQorY2ZfbGlicmFyeV9wYXRoX2xpc3Q9IiIKK2lmIHRlc3QgLW4gIiR7TERGTEFHU30ke0xJQlN9IiA7IHRoZW4KKwlmb3IgY2ZfbGlicmFyeV9wYXRoIGluICRMREZMQUdTICRMSUJTCisJZG8KKwkJY2FzZSAkY2ZfbGlicmFyeV9wYXRoIGluCisJCSgtTCopCisJCQljZl9saWJyYXJ5X3BhdGg9YGVjaG8gIi4kY2ZfbGlicmFyeV9wYXRoIiB8c2VkIC1lICdzL14uLi4vLycgLWUgJ3MsL2xpYiQsLCdgCisKK3Rlc3QgIngkY2ZfbGlicmFyeV9wYXRoIiAhPSAieE5PTkUiICYmIFwKK3Rlc3QgLWQgIiRjZl9saWJyYXJ5X3BhdGgiICYmIFwKKyB7CisJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIgkuLi4gdGVzdGluZyBmb3IgbGliLWRpcmVjdG9yaWVzIHVuZGVyICRjZl9saWJyYXJ5X3BhdGgiCisJdGVzdCAtZCAkY2ZfbGlicmFyeV9wYXRoL2xpYiAmJiAgICAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJGNmX2xpYnJhcnlfcGF0aC9saWIiCisJdGVzdCAtZCAkY2ZfbGlicmFyeV9wYXRoL2xpYi8kY2ZfbmN1bGliX3Jvb3QgJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRjZl9saWJyYXJ5X3BhdGgvbGliLyRjZl9uY3VsaWJfcm9vdCIKKwl0ZXN0IC1kICRjZl9saWJyYXJ5X3BhdGgvbGliLyRjZl9uY3VsaWJfcm9vdC9saWIgJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRjZl9saWJyYXJ5X3BhdGgvbGliLyRjZl9uY3VsaWJfcm9vdC9saWIiCisJdGVzdCAtZCAkY2ZfbGlicmFyeV9wYXRoLyRjZl9uY3VsaWJfcm9vdC9saWIgJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRjZl9saWJyYXJ5X3BhdGgvJGNmX25jdWxpYl9yb290L2xpYiIKKwl0ZXN0IC1kICRjZl9saWJyYXJ5X3BhdGgvJGNmX25jdWxpYl9yb290L2xpYi8kY2ZfbmN1bGliX3Jvb3QgJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRjZl9saWJyYXJ5X3BhdGgvJGNmX25jdWxpYl9yb290L2xpYi8kY2ZfbmN1bGliX3Jvb3QiCit9CisKKwkJCWNmX2xpYnJhcnlfcGF0aF9saXN0PSIkY2ZfbGlicmFyeV9wYXRoX2xpc3QgJGNmX3NlYXJjaCIKKwkJCTs7CisJCWVzYWMKKwlkb25lCitmaQorCitjZl9zZWFyY2g9CisKK3Rlc3QgIngkcHJlZml4IiAhPSAieE5PTkUiICYmIFwKK3Rlc3QgLWQgIiRwcmVmaXgiICYmIFwKKyB7CisJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIgkuLi4gdGVzdGluZyBmb3IgbGliLWRpcmVjdG9yaWVzIHVuZGVyICRwcmVmaXgiCisJdGVzdCAtZCAkcHJlZml4L2xpYiAmJiAgICAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJHByZWZpeC9saWIiCisJdGVzdCAtZCAkcHJlZml4L2xpYi8kY2ZfbmN1bGliX3Jvb3QgJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRwcmVmaXgvbGliLyRjZl9uY3VsaWJfcm9vdCIKKwl0ZXN0IC1kICRwcmVmaXgvbGliLyRjZl9uY3VsaWJfcm9vdC9saWIgJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRwcmVmaXgvbGliLyRjZl9uY3VsaWJfcm9vdC9saWIiCisJdGVzdCAtZCAkcHJlZml4LyRjZl9uY3VsaWJfcm9vdC9saWIgJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRwcmVmaXgvJGNmX25jdWxpYl9yb290L2xpYiIKKwl0ZXN0IC1kICRwcmVmaXgvJGNmX25jdWxpYl9yb290L2xpYi8kY2ZfbmN1bGliX3Jvb3QgJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRwcmVmaXgvJGNmX25jdWxpYl9yb290L2xpYi8kY2ZfbmN1bGliX3Jvb3QiCit9CisKK2ZvciBjZl9zdWJkaXJfcHJlZml4IGluIFwKKwkvdXNyIFwKKwkvdXNyL2xvY2FsIFwKKwkvdXNyL3BrZyBcCisJL29wdCBcCisJL29wdC9sb2NhbCBcCisJJEhPTUUKK2RvCisKK3Rlc3QgIngkY2Zfc3ViZGlyX3ByZWZpeCIgIT0gIngkcHJlZml4IiAmJiBcCit0ZXN0IC1kICIkY2Zfc3ViZGlyX3ByZWZpeCIgJiYgXAorKHRlc3QgLXogIiRwcmVmaXgiIHx8IHRlc3QgeCRwcmVmaXggPSB4Tk9ORSB8fCB0ZXN0ICJ4JGNmX3N1YmRpcl9wcmVmaXgiICE9ICJ4JHByZWZpeCIpICYmIHsKKwl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCS4uLiB0ZXN0aW5nIGZvciBsaWItZGlyZWN0b3JpZXMgdW5kZXIgJGNmX3N1YmRpcl9wcmVmaXgiCisJdGVzdCAtZCAkY2Zfc3ViZGlyX3ByZWZpeC9saWIgJiYgICAgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRjZl9zdWJkaXJfcHJlZml4L2xpYiIKKwl0ZXN0IC1kICRjZl9zdWJkaXJfcHJlZml4L2xpYi8kY2ZfbmN1bGliX3Jvb3QgJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRjZl9zdWJkaXJfcHJlZml4L2xpYi8kY2ZfbmN1bGliX3Jvb3QiCisJdGVzdCAtZCAkY2Zfc3ViZGlyX3ByZWZpeC9saWIvJGNmX25jdWxpYl9yb290L2xpYiAmJiAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJGNmX3N1YmRpcl9wcmVmaXgvbGliLyRjZl9uY3VsaWJfcm9vdC9saWIiCisJdGVzdCAtZCAkY2Zfc3ViZGlyX3ByZWZpeC8kY2ZfbmN1bGliX3Jvb3QvbGliICYmICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkY2Zfc3ViZGlyX3ByZWZpeC8kY2ZfbmN1bGliX3Jvb3QvbGliIgorCXRlc3QgLWQgJGNmX3N1YmRpcl9wcmVmaXgvJGNmX25jdWxpYl9yb290L2xpYi8kY2ZfbmN1bGliX3Jvb3QgJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRjZl9zdWJkaXJfcHJlZml4LyRjZl9uY3VsaWJfcm9vdC9saWIvJGNmX25jdWxpYl9yb290IgorfQorCitkb25lCisKK2NmX3NlYXJjaD0iJGNmX2xpYnJhcnlfcGF0aF9saXN0ICRjZl9zZWFyY2giCisKKwkJCWZvciBjZl9saWJkaXIgaW4gJGNmX3NlYXJjaAorCQkJZG8KKwkJCQllY2hvICIkYXNfbWU6ODcxNDogY2hlY2tpbmcgZm9yIC1sJGNmX25jdWxpYl9yb290IGluICRjZl9saWJkaXIiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgLWwkY2ZfbmN1bGliX3Jvb3QgaW4gJGNmX2xpYmRpci4uLiAkRUNIT19DIiA+JjYKKwkJCQlMSUJTPSItTCRjZl9saWJkaXIgLWwkY2ZfbmN1bGliX3Jvb3QgJGNmX3NhdmVfTElCUyIKKwkJCQljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDg3MTggImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPCR7Y2ZfY3ZfbmN1cnNlc19oZWFkZXI6LWN1cnNlcy5ofT4KK2ludAorbWFpbiAoKQoreworaW5pdHNjcigpCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTo4NzMwOiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo4NzMzOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6ODczNjogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjg3Mzk6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBlY2hvICIkYXNfbWU6ODc0MTogcmVzdWx0OiB5ZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKKwkJCSAJCSBldmFsICdjZl9jdl9oYXZlX2xpYl8nJGNmX25jdWxpYl9yb290Jz15ZXMnCisJCQkJCSBicmVhaworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitlY2hvICIkYXNfbWU6ODc0ODogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2CisJCQkJCSBMSUJTPSIkY2Zfc2F2ZV9MSUJTIgorZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKwkJCWRvbmUKKworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworZmkKKworZXZhbCAnY2ZfZm91bmRfbGlicmFyeT0kY2ZfY3ZfaGF2ZV9saWJfJyRjZl9uY3VsaWJfcm9vdAorCitpZiB0ZXN0ICRjZl9mb3VuZF9saWJyYXJ5ID0gbm8gOyB0aGVuCisJeyB7IGVjaG8gIiRhc19tZTo4NzYzOiBlcnJvcjogQ2Fubm90IGxpbmsgJGNmX25jdWxpYl9yb290IGxpYnJhcnkiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogQ2Fubm90IGxpbmsgJGNmX25jdWxpYl9yb290IGxpYnJhcnkiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK2ZpCisKK2ZpCisKK2lmIHRlc3QgLW4gIiRjZl9uY3Vyc2VzX0xJQlMiIDsgdGhlbgorCWVjaG8gIiRhc19tZTo4NzcxOiBjaGVja2luZyBpZiB3ZSBjYW4gbGluayAkY2ZfbmN1bGliX3Jvb3Qgd2l0aG91dCAkY2ZfbmN1cnNlc19MSUJTIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgd2UgY2FuIGxpbmsgJGNmX25jdWxpYl9yb290IHdpdGhvdXQgJGNmX25jdXJzZXNfTElCUy4uLiAkRUNIT19DIiA+JjYKKwljZl9uY3Vyc2VzX1NBVkU9IiRMSUJTIgorCWZvciBwIGluICRjZl9uY3Vyc2VzX0xJQlMgOyBkbworCQlxPWBlY2hvICRMSUJTIHwgc2VkIC1lICJzJSRwICUlIiAtZSAicyUkcCQlJSJgCisJCWlmIHRlc3QgIiRxIiAhPSAiJExJQlMiIDsgdGhlbgorCQkJTElCUz0iJHEiCisJCWZpCisJZG9uZQorCWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgODc4MSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8JHtjZl9jdl9uY3Vyc2VzX2hlYWRlcjotY3Vyc2VzLmh9PgoraW50CittYWluICgpCit7Citpbml0c2NyKCk7IG1vdXNlbWFzaygwLDApOyB0Z290bygoY2hhciAqKTAsIDAsIDApOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6ODc5MzogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6ODc5NjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjg3OTk6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo4ODAyOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgZWNobyAiJGFzX21lOjg4MDQ6IHJlc3VsdDogeWVzIiA+JjUKK2VjaG8gIiR7RUNIT19UfXllcyIgPiY2CitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2VjaG8gIiRhc19tZTo4ODA5OiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjYKKwkJIExJQlM9IiRjZl9uY3Vyc2VzX1NBVkUiCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKKworY2ZfbmN1bGliX1JPT1Q9YGVjaG8gIkhBVkVfTElCJGNmX25jdWxpYl9yb290IiB8IHNlZCB5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJWAKKworY2F0ID4+Y29uZmRlZnMuaCA8PEVPRgorI2RlZmluZSAkY2ZfbmN1bGliX1JPT1QgMQorRU9GCisKKwlmaQorZWxzZQorCU5DVVJTRVNfQ09ORklHPW5vbmUKK2ZpCisKK2ZpCisKK2lmIHRlc3QgIiROQ1VSU0VTX0NPTkZJR19QS0ciICE9IG5vbmUgOyB0aGVuCisJY2ZfdmVyc2lvbj1gJFBLR19DT05GSUcgLS1tb2R2ZXJzaW9uICROQ1VSU0VTX0NPTkZJR19QS0cgMj4vZGV2L251bGxgCisKKwlOQ1VSU0VTX01BSk9SPWBlY2hvICIkY2ZfdmVyc2lvbiIgfCBzZWQgLWUgJ3MvXC4uKi8vJ2AKKwlOQ1VSU0VTX01JTk9SPWBlY2hvICIkY2ZfdmVyc2lvbiIgfCBzZWQgLWUgJ3MvXlswLTldWzAtOV0qXC4vLycgLWUgJ3MvXC4uKi8vJ2AKKwlOQ1VSU0VTX1BBVENIPWBlY2hvICIkY2ZfdmVyc2lvbiIgfCBzZWQgLWUgJ3MvXlswLTldWzAtOV0qXC5bMC05XVswLTldKlwuLy8nYAorCisJY2ZfY3ZfYWJpX3ZlcnNpb249YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9YWJpX3ZlcnNpb24gJE5DVVJTRVNfQ09ORklHX1BLRyAyPi9kZXYvbnVsbGAKKwlpZiB0ZXN0IC16ICIkY2ZfY3ZfYWJpX3ZlcnNpb24iCisJdGhlbgorCQljZl9jdl9hYmlfdmVyc2lvbj1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1tYWpvcl92ZXJzaW9uICROQ1VSU0VTX0NPTkZJR19QS0cgMj4vZGV2L251bGxgCisJZmkKKworZWxpZiB0ZXN0ICIkTkNVUlNFU19DT05GSUciICE9IG5vbmUgOyB0aGVuCisKKwljZl92ZXJzaW9uPWAkTkNVUlNFU19DT05GSUcgLS12ZXJzaW9uIDI+L2Rldi9udWxsYAorCisJTkNVUlNFU19NQUpPUj1gZWNobyAiJGNmX3ZlcnNpb24iIHwgc2VkIC1lICdzL1wuLiovLydgCisJTkNVUlNFU19NSU5PUj1gZWNobyAiJGNmX3ZlcnNpb24iIHwgc2VkIC1lICdzL15bMC05XVswLTldKlwuLy8nIC1lICdzL1wuLiovLydgCisJTkNVUlNFU19QQVRDSD1gZWNobyAiJGNmX3ZlcnNpb24iIHwgc2VkIC1lICdzL15bMC05XVswLTldKlwuWzAtOV1bMC05XSpcLi8vJ2AKKworCSMgQUJJIHZlcnNpb24gaXMgbm90IGF2YWlsYWJsZSBmcm9tIGhlYWRlcnMKKwljZl9jdl9hYmlfdmVyc2lvbj1gJE5DVVJTRVNfQ09ORklHIC0tYWJpLXZlcnNpb24gMj4vZGV2L251bGxgCisKK2Vsc2UKKworCWZvciBjZl9uYW1lIGluIE1BSk9SIE1JTk9SIFBBVENICisJZG8KKwljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxDRl9FT0YKKwkjaW5jbHVkZSA8JHtjZl9jdl9uY3Vyc2VzX2hlYWRlcjotY3Vyc2VzLmh9PgorCUFVVE9DT05GXyRjZl9uYW1lIE5DVVJTRVNfVkVSU0lPTl8kY2ZfbmFtZQorQ0ZfRU9GCisJCWNmX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IDI+JjUgfCBmZ3JlcCBBVVRPQ09ORl8kY2ZfbmFtZSA+Y29uZnRlc3Qub3V0IgorCQl7IChldmFsIGVjaG8gIiRhc19tZTo4ODYyOiBcIiRjZl90cnlcIiIpID4mNQorICAoZXZhbCAkY2ZfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6ODg2NTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9CisJCWlmIHRlc3QgLWYgY29uZnRlc3Qub3V0IDsgdGhlbgorCQkJY2ZfcmVzdWx0PWBjYXQgY29uZnRlc3Qub3V0IHwgc2VkIC1lICJzL14uKkFVVE9DT05GXyRjZl9uYW1lWyAJXVsgCV0qLy8iYAorCQkJZXZhbCBOQ1VSU0VTXyRjZl9uYW1lPVwiJGNmX3Jlc3VsdFwiCisJCQkjIGNhdCBjb25mdGVzdC4kYWNfZXh0CisJCQkjIGNhdCBjb25mdGVzdC5vdXQKKwkJZmkKKwlkb25lCisKKwljZl9jdl9hYmlfdmVyc2lvbj0ke05DVVJTRVNfTUFKT1J9CisKK2ZpCisKK2NmX2N2X3JlbF92ZXJzaW9uPSR7TkNVUlNFU19NQUpPUn0uJHtOQ1VSU0VTX01JTk9SfQorCitjZl9jdl90aW1lc3RhbXA9YGRhdGVgCisKK2VjaG8gIiRhc19tZTo4ODgzOiByZXN1bHQ6IENvbmZpZ3VyaW5nIE5DVVJTRVMgJGNmX2N2X3JlbF92ZXJzaW9uIEFCSSAkY2ZfY3ZfYWJpX3ZlcnNpb24gKCRjZl9jdl90aW1lc3RhbXApIiA+JjUKK2VjaG8gIiR7RUNIT19UfUNvbmZpZ3VyaW5nIE5DVVJTRVMgJGNmX2N2X3JlbF92ZXJzaW9uIEFCSSAkY2ZfY3ZfYWJpX3ZlcnNpb24gKCRjZl9jdl90aW1lc3RhbXApIiA+JjYKKworZWNobyAiJGFzX21lOjg4ODY6IGNoZWNraW5nIGlmIHlvdSB3YW50IHRvIGhhdmUgYSBsaWJyYXJ5LXByZWZpeCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHlvdSB3YW50IHRvIGhhdmUgYSBsaWJyYXJ5LXByZWZpeC4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1saWItcHJlZml4IG9yIC0td2l0aG91dC1saWItcHJlZml4IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9saWJfcHJlZml4K3NldH0iID0gc2V0OyB0aGVuCisgIHdpdGh2YWw9IiR3aXRoX2xpYl9wcmVmaXgiCisgIHdpdGhfbGliX3ByZWZpeD0kd2l0aHZhbAorZWxzZQorICB3aXRoX2xpYl9wcmVmaXg9YXV0bworZmk7CitlY2hvICIkYXNfbWU6ODg5NjogcmVzdWx0OiAkd2l0aF9saWJfcHJlZml4IiA+JjUKK2VjaG8gIiR7RUNIT19UfSR3aXRoX2xpYl9wcmVmaXgiID4mNgorCitpZiB0ZXN0ICR3aXRoX2xpYl9wcmVmaXggPSBhdXRvCit0aGVuCisKKwljYXNlICRjZl9jdl9zeXN0ZW1fbmFtZSBpbgorCShPUy8yKnxvczIqKQorCQlMSUJfUFJFRklYPScnCisJCTs7CisJKCopCUxJQl9QUkVGSVg9J2xpYicKKwkJOzsKKwllc2FjCitjZl9wcmVmaXg9JExJQl9QUkVGSVgKKworZWxpZiB0ZXN0ICR3aXRoX2xpYl9wcmVmaXggPSBubwordGhlbgorCUxJQl9QUkVGSVg9CitlbHNlCisJTElCX1BSRUZJWD0kd2l0aF9saWJfcHJlZml4CitmaQorCitMSUJfU1VGRklYPQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2lmIHRlc3QgWCIkQ0NfR19PUFQiID0gWCIiIDsgdGhlbgorCUNDX0dfT1BUPSctZycKKwl0ZXN0IC1uICIkR0NDIiAmJiB0ZXN0ICIke2FjX2N2X3Byb2dfY2NfZ30iICE9IHllcyAmJiBDQ19HX09QVD0nJworZmkKKworZWNobyAiJGFzX21lOjg5Mjc6IGNoZWNraW5nIGZvciBkZWZhdWx0IGxvYWRlciBmbGFncyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBkZWZhdWx0IGxvYWRlciBmbGFncy4uLiAkRUNIT19DIiA+JjYKK2Nhc2UgJERGVF9MV1JfTU9ERUwgaW4KKyhub3JtYWwpICBMRF9NT0RFTD0nJyAgIDs7CisoZGVidWcpICAgTERfTU9ERUw9JENDX0dfT1BUIDs7CisocHJvZmlsZSkgTERfTU9ERUw9Jy1wZyc7OworKHNoYXJlZCkgIExEX01PREVMPScnICAgOzsKK2VzYWMKK2VjaG8gIiRhc19tZTo4OTM1OiByZXN1bHQ6ICRMRF9NT0RFTCIgPiY1CitlY2hvICIke0VDSE9fVH0kTERfTU9ERUwiID4mNgorCitMRF9SUEFUSF9PUFQ9CitlY2hvICIkYXNfbWU6ODkzOTogY2hlY2tpbmcgZm9yIGFuIHJwYXRoIG9wdGlvbiIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBhbiBycGF0aCBvcHRpb24uLi4gJEVDSE9fQyIgPiY2CitjYXNlICRjZl9jdl9zeXN0ZW1fbmFtZSBpbgorKGlyaXgqKQorCWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJCUxEX1JQQVRIX09QVD0iLVdsLC1ycGF0aCwiCisJZWxzZQorCQlMRF9SUEFUSF9PUFQ9Ii1ycGF0aCAiCisJZmkKKwk7OworKGxpbnV4KnxnbnUqfGsqYnNkKi1nbnUpCisJTERfUlBBVEhfT1BUPSItV2wsLXJwYXRoLCIKKwk7OworKG9wZW5ic2RbMi05XS4qfG1pcmJzZCopCisJTERfUlBBVEhfT1BUPSItV2wsLXJwYXRoLCIKKwk7OworKGRyYWdvbmZseSp8ZnJlZWJzZCopCisJTERfUlBBVEhfT1BUPSItcnBhdGggIgorCTs7CisobmV0YnNkKikKKwlMRF9SUEFUSF9PUFQ9Ii1XbCwtcnBhdGgsIgorCTs7Cisob3NmKnxtbHMrKikKKwlMRF9SUEFUSF9PUFQ9Ii1ycGF0aCAiCisJOzsKKyhzb2xhcmlzMiopCisJTERfUlBBVEhfT1BUPSItUiIKKwk7OworKCopCisJOzsKK2VzYWMKK2VjaG8gIiRhc19tZTo4OTcwOiByZXN1bHQ6ICRMRF9SUEFUSF9PUFQiID4mNQorZWNobyAiJHtFQ0hPX1R9JExEX1JQQVRIX09QVCIgPiY2CisKK2Nhc2UgIngkTERfUlBBVEhfT1BUIiBpbgorKHgtUiopCisJZWNobyAiJGFzX21lOjg5NzU6IGNoZWNraW5nIGlmIHdlIG5lZWQgYSBzcGFjZSBhZnRlciBycGF0aCBvcHRpb24iID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB3ZSBuZWVkIGEgc3BhY2UgYWZ0ZXIgcnBhdGggb3B0aW9uLi4uICRFQ0hPX0MiID4mNgorCWNmX3NhdmVfTElCUz0iJExJQlMiCisKK2NmX2FkZF9saWJzPSIke0xEX1JQQVRIX09QVH0kbGliZGlyIgorIyBGaWx0ZXIgb3V0IGR1cGxpY2F0ZXMgLSB0aGlzIGhhcHBlbnMgd2l0aCBiYWRseS1kZXNpZ25lZCAiLnBjIiBmaWxlcy4uLgorZm9yIGNmX2FkZF8xbGliIGluICRMSUJTCitkbworCWZvciBjZl9hZGRfMmxpYiBpbiAkY2ZfYWRkX2xpYnMKKwlkbworCQlpZiB0ZXN0ICJ4JGNmX2FkZF8xbGliIiA9ICJ4JGNmX2FkZF8ybGliIgorCQl0aGVuCisJCQljZl9hZGRfMWxpYj0KKwkJCWJyZWFrCisJCWZpCisJZG9uZQorCXRlc3QgLW4gIiRjZl9hZGRfMWxpYiIgJiYgY2ZfYWRkX2xpYnM9IiRjZl9hZGRfbGlicyAkY2ZfYWRkXzFsaWIiCitkb25lCitMSUJTPSIkY2ZfYWRkX2xpYnMiCisKKwljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDg5OTYgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6OTAwODogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6OTAxMTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjkwMTQ6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo5MDE3OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgY2ZfcnBhdGhfc3BhY2U9bm8KK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorY2ZfcnBhdGhfc3BhY2U9eWVzCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorCUxJQlM9IiRjZl9zYXZlX0xJQlMiCisJZWNobyAiJGFzX21lOjkwMjc6IHJlc3VsdDogJGNmX3JwYXRoX3NwYWNlIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9ycGF0aF9zcGFjZSIgPiY2CisJdGVzdCAiJGNmX3JwYXRoX3NwYWNlIiA9IHllcyAmJiBMRF9SUEFUSF9PUFQ9IiRMRF9SUEFUSF9PUFQgIgorCTs7Citlc2FjCisKKwlSTV9TSEFSRURfT1BUUz0KKwlMT0NBTF9MREZMQUdTPQorCUxPQ0FMX0xERkxBR1MyPQorCUxEX1NIQVJFRF9PUFRTPQorCUlOU1RBTExfTElCPSItbSA2NDQiCisJOiAke3JlbF9idWlsZGRpcjo9Ln0KKworCXNobGliZGlyPSRsaWJkaXIKKworCU1BS0VfRExMUz0iIyIKKworCWNmX2N2X2RvX3N5bWxpbmtzPW5vCisJY2ZfbGRfcnBhdGhfb3B0PQorCXRlc3QgIiRjZl9jdl9lbmFibGVfcnBhdGgiID0geWVzICYmIGNmX2xkX3JwYXRoX29wdD0iJExEX1JQQVRIX09QVCIKKworCWVjaG8gIiRhc19tZTo5MDQ4OiBjaGVja2luZyBpZiByZWxlYXNlL2FiaSB2ZXJzaW9uIHNob3VsZCBiZSB1c2VkIGZvciBzaGFyZWQgbGlicyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHJlbGVhc2UvYWJpIHZlcnNpb24gc2hvdWxkIGJlIHVzZWQgZm9yIHNoYXJlZCBsaWJzLi4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXNobGliLXZlcnNpb24gb3IgLS13aXRob3V0LXNobGliLXZlcnNpb24gd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3NobGliX3ZlcnNpb24rc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfc2hsaWJfdmVyc2lvbiIKKyAgdGVzdCAteiAiJHdpdGh2YWwiICYmIHdpdGh2YWw9YXV0bworCWNhc2UgJHdpdGh2YWwgaW4KKwkoeWVzKQorCQljZl9jdl9zaGxpYl92ZXJzaW9uPWF1dG8KKwkJOzsKKwkocmVsfGFiaXxhdXRvfG5vKQorCQljZl9jdl9zaGxpYl92ZXJzaW9uPSR3aXRodmFsCisJCTs7CisJKCopCisJCXsgeyBlY2hvICIkYXNfbWU6OTA2MzogZXJyb3I6IG9wdGlvbiB2YWx1ZSBtdXN0IGJlIG9uZSBvZjogcmVsLCBhYmksIGF1dG8gb3Igbm8iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogb3B0aW9uIHZhbHVlIG11c3QgYmUgb25lIG9mOiByZWwsIGFiaSwgYXV0byBvciBubyIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorCQk7OworCWVzYWMKKworZWxzZQorICBjZl9jdl9zaGxpYl92ZXJzaW9uPWF1dG8KK2ZpOworCWVjaG8gIiRhc19tZTo5MDcyOiByZXN1bHQ6ICRjZl9jdl9zaGxpYl92ZXJzaW9uIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9jdl9zaGxpYl92ZXJzaW9uIiA+JjYKKworCWNmX2N2X3JtX3NvX2xvY3M9bm8KKwljZl90cnlfY2ZsYWdzPQorCisJIyBTb21lIGxlc3MtY2FwYWJsZSBwb3J0cyBvZiBnY2Mgc3VwcG9ydCBvbmx5IC1mcGljCisJQ0NfU0hBUkVEX09QVFM9CisJaWYgdGVzdCAiJEdDQyIgPSB5ZXMKKwl0aGVuCisJCWVjaG8gIiRhc19tZTo5MDgyOiBjaGVja2luZyB3aGljaCAkQ0Mgb3B0aW9uIHRvIHVzZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoaWNoICRDQyBvcHRpb24gdG8gdXNlLi4uICRFQ0hPX0MiID4mNgorCQljZl9zYXZlX0NGTEFHUz0iJENGTEFHUyIKKwkJZm9yIENDX1NIQVJFRF9PUFRTIGluIC1mUElDIC1mcGljICcnCisJCWRvCisJCQlDRkxBR1M9IiRjZl9zYXZlX0NGTEFHUyAkQ0NfU0hBUkVEX09QVFMiCisJCQljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDkwODkgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CitpbnQKK21haW4gKCkKK3sKK2ludCB4ID0gMQorICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTo5MTAxOiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo5MTA0OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjkxMDc6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo5MTEwOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYnJlYWsKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCQlkb25lCisJCWVjaG8gIiRhc19tZTo5MTE5OiByZXN1bHQ6ICRDQ19TSEFSRURfT1BUUyIgPiY1CitlY2hvICIke0VDSE9fVH0kQ0NfU0hBUkVEX09QVFMiID4mNgorCQlDRkxBR1M9IiRjZl9zYXZlX0NGTEFHUyIKKwlmaQorCisJY2ZfY3Zfc2hsaWJfdmVyc2lvbl9pbmZpeD1ubworCisJY2FzZSAkY2ZfY3Zfc3lzdGVtX25hbWUgaW4KKwkoYWl4NC4zLTkqfGFpeFs1LTddKikKKwkJaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwkJCUNDX1NIQVJFRF9PUFRTPSctV2wsLWJydGwnCisJCQlNS19TSEFSRURfTElCPScke0NDfSAtc2hhcmVkIC1XbCwtYnJ0bCAtV2wsLWJsaWJwYXRoOiR7UlBBVEhfTElTVH06L3Vzci9saWIgLW8gJEAnCisJCWVsc2UKKwkJCUNDX1NIQVJFRF9PUFRTPSctYnJ0bCcKKwkJCSMgYXMgd2VsbCBhcyAnLXFwaWM9bGFyZ2UgLUcnIG9yIHBlcmhhcHMgIi1iTTpTUkUgLWJub2VudHJ5IC1iZXhwYWxsIgorCQkJTUtfU0hBUkVEX0xJQj0nJHtDQ30gLUcgLVdsLC1icnRsIC1XbCwtYmxpYnBhdGg6JHtSUEFUSF9MSVNUfTovdXNyL2xpYiAtbyAkQCcKKwkJZmkKKwkJOzsKKwkoYmVvcyopCisJCU1LX1NIQVJFRF9MSUI9JyR7Q0N9ICR7Q0ZMQUdTfSAtbyAkQCAtWGxpbmtlciAtc29uYW1lPWBiYXNlbmFtZSAkQGAgLW5vc3RhcnQgLWUgMCcKKwkJOzsKKwkoY3lnd2luKikKKwkJQ0NfU0hBUkVEX09QVFM9CisJCU1LX1NIQVJFRF9MSUI9JFNIRUxMJyAnJHJlbF9idWlsZGRpcicvbWtfc2hhcmVkX2xpYi5zaCAkQCAke0NDfSAke0NGTEFHU30nCisJCVJNX1NIQVJFRF9PUFRTPSIkUk1fU0hBUkVEX09QVFMgJHJlbF9idWlsZGRpci9ta19zaGFyZWRfbGliLnNoICouZGxsLmEiCisJCWNmX2N2X3NobGliX3ZlcnNpb249Y3lnZGxsCisJCWNmX2N2X3NobGliX3ZlcnNpb25faW5maXg9Y3lnZGxsCisJCXNobGliZGlyPSRiaW5kaXIKKwkJTUFLRV9ETExTPQorCQljYXQgPm1rX3NoYXJlZF9saWIuc2ggPDwtQ0ZfRU9GCisJCSMhJFNIRUxMCisJCVNIQVJFRF9MSUI9XCQxCisJCUlNUE9SVF9MSUI9XGBlY2hvICJcJDEiIHwgc2VkIC1lICdzL2N5Zy9saWIvJyAtZSAncy9bMC05XSpcLmRsbCQvLmRsbC5hLydcYAorCQlzaGlmdAorCQljYXQgPDwtRU9GCisJCUxpbmtpbmcgc2hhcmVkIGxpYnJhcnkKKwkJKiogU0hBUkVEX0xJQiBcJFNIQVJFRF9MSUIKKwkJKiogSU1QT1JUX0xJQiBcJElNUE9SVF9MSUIKK0VPRgorCQlleGVjIFwkKiAtc2hhcmVkIC1XbCwtLW91dC1pbXBsaWI9XCR7SU1QT1JUX0xJQn0gLVdsLC0tZXhwb3J0LWFsbC1zeW1ib2xzIC1vIFwke1NIQVJFRF9MSUJ9CitDRl9FT0YKKwkJY2htb2QgK3ggbWtfc2hhcmVkX2xpYi5zaAorCQk7OworCShtc3lzKikKKwkJQ0NfU0hBUkVEX09QVFM9CisJCU1LX1NIQVJFRF9MSUI9JFNIRUxMJyAnJHJlbF9idWlsZGRpcicvbWtfc2hhcmVkX2xpYi5zaCAkQCAke0NDfSAke0NGTEFHU30nCisJCVJNX1NIQVJFRF9PUFRTPSIkUk1fU0hBUkVEX09QVFMgJHJlbF9idWlsZGRpci9ta19zaGFyZWRfbGliLnNoICouZGxsLmEiCisJCWNmX2N2X3NobGliX3ZlcnNpb249bXN5c2RsbAorCQljZl9jdl9zaGxpYl92ZXJzaW9uX2luZml4PW1zeXNkbGwKKwkJc2hsaWJkaXI9JGJpbmRpcgorCQlNQUtFX0RMTFM9CisJCWNhdCA+bWtfc2hhcmVkX2xpYi5zaCA8PC1DRl9FT0YKKwkJIyEkU0hFTEwKKwkJU0hBUkVEX0xJQj1cJDEKKwkJSU1QT1JUX0xJQj1cYGVjaG8gIlwkMSIgfCBzZWQgLWUgJ3MvbXN5cy0vbGliLycgLWUgJ3MvWzAtOV0qXC5kbGwkLy5kbGwuYS8nXGAKKwkJc2hpZnQKKwkJY2F0IDw8LUVPRgorCQlMaW5raW5nIHNoYXJlZCBsaWJyYXJ5CisJCSoqIFNIQVJFRF9MSUIgXCRTSEFSRURfTElCCisJCSoqIElNUE9SVF9MSUIgXCRJTVBPUlRfTElCCitFT0YKKwkJZXhlYyBcJCogLXNoYXJlZCAtV2wsLS1vdXQtaW1wbGliPVwke0lNUE9SVF9MSUJ9IC1XbCwtLWV4cG9ydC1hbGwtc3ltYm9scyAtbyBcJHtTSEFSRURfTElCfQorQ0ZfRU9GCisJCWNobW9kICt4IG1rX3NoYXJlZF9saWIuc2gKKwkJOzsKKwkoZGFyd2luKikKKwkJY2ZfdHJ5X2NmbGFncz0ibm8tY3BwLXByZWNvbXAiCisJCUNDX1NIQVJFRF9PUFRTPSItZHluYW1pYyIKKwkJTUtfU0hBUkVEX0xJQj0nJHtDQ30gJHtDRkxBR1N9IC1keW5hbWljbGliIC1pbnN0YWxsX25hbWUgJHtsaWJkaXJ9L2BiYXNlbmFtZSAkQGAgLWNvbXBhdGliaWxpdHlfdmVyc2lvbiAke0FCSV9WRVJTSU9OfSAtY3VycmVudF92ZXJzaW9uICR7QUJJX1ZFUlNJT059IC1vICRAJworCQl0ZXN0ICIkY2ZfY3Zfc2hsaWJfdmVyc2lvbiIgPSBhdXRvICYmIGNmX2N2X3NobGliX3ZlcnNpb249YWJpCisJCWNmX2N2X3NobGliX3ZlcnNpb25faW5maXg9eWVzCisJCWVjaG8gIiRhc19tZTo5MTkwOiBjaGVja2luZyBpZiBsZCAtc2VhcmNoX3BhdGhzX2ZpcnN0IHdvcmtzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgbGQgLXNlYXJjaF9wYXRoc19maXJzdCB3b3Jrcy4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7Y2ZfY3ZfbGRmbGFnc19zZWFyY2hfcGF0aHNfZmlyc3Qrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKworCQkJY2Zfc2F2ZV9MREZMQUdTPSRMREZMQUdTCisJCQlMREZMQUdTPSIkTERGTEFHUyAtV2wsLXNlYXJjaF9wYXRoc19maXJzdCIKKwkJCWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgOTE5OSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKK2ludAorbWFpbiAoKQoreworaW50IGk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTo5MjExOiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo5MjE0OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6OTIxNzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjkyMjA6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBjZl9jdl9sZGZsYWdzX3NlYXJjaF9wYXRoc19maXJzdD15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorY2ZfY3ZfbGRmbGFnc19zZWFyY2hfcGF0aHNfZmlyc3Q9bm8KK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisJCQkJTERGTEFHUz0kY2Zfc2F2ZV9MREZMQUdTCitmaQorZWNobyAiJGFzX21lOjkyMzE6IHJlc3VsdDogJGNmX2N2X2xkZmxhZ3Nfc2VhcmNoX3BhdGhzX2ZpcnN0IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9jdl9sZGZsYWdzX3NlYXJjaF9wYXRoc19maXJzdCIgPiY2CisJCWlmIHRlc3QgJGNmX2N2X2xkZmxhZ3Nfc2VhcmNoX3BhdGhzX2ZpcnN0ID0geWVzOyB0aGVuCisJCQlMREZMQUdTPSIkTERGTEFHUyAtV2wsLXNlYXJjaF9wYXRoc19maXJzdCIKKwkJZmkKKwkJOzsKKwkoaHB1eFs3LThdKikKKwkJIyBIUC1VWCA4LjA3IGxkIGxhY2tzICIrYiIgb3B0aW9uIHVzZWQgZm9yIGxpYmRpciBzZWFyY2gtbGlzdAorCQlpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKwkJCUNDX1NIQVJFRF9PUFRTPScrWicKKwkJZmkKKwkJTUtfU0hBUkVEX0xJQj0nJHtMRH0gLWIgLW8gJEAnCisJCUlOU1RBTExfTElCPSItbSA1NTUiCisJCTs7CisJKGhwdXgqKQorCQkjICh0ZXN0ZWQgd2l0aCBnY2MgMi43LjIgLS0gSSBkb24ndCBoYXZlIGM4OSkKKwkJaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwkJCUxEX1NIQVJFRF9PUFRTPSctWGxpbmtlciArYiAtWGxpbmtlciAke2xpYmRpcn0nCisJCWVsc2UKKwkJCUNDX1NIQVJFRF9PUFRTPScrWicKKwkJCUxEX1NIQVJFRF9PUFRTPSctV2wsK2IsJHtsaWJkaXJ9JworCQlmaQorCQlNS19TSEFSRURfTElCPScke0xEfSArYiAke2xpYmRpcn0gLWIgLW8gJEAnCisJCSMgSFAtVVggc2hhcmVkIGxpYnJhcmllcyBtdXN0IGJlIGV4ZWN1dGFibGUsIGFuZCBzaG91bGQgYmUKKwkJIyByZWFkb25seSB0byBleHBsb2l0IGEgcXVpcmsgaW4gdGhlIG1lbW9yeSBtYW5hZ2VyLgorCQlJTlNUQUxMX0xJQj0iLW0gNTU1IgorCQk7OworCShpbnRlcml4KikKKwkJdGVzdCAiJGNmX2N2X3NobGliX3ZlcnNpb24iID0gYXV0byAmJiBjZl9jdl9zaGxpYl92ZXJzaW9uPXJlbAorCQlpZiB0ZXN0ICIkY2ZfY3Zfc2hsaWJfdmVyc2lvbiIgPSByZWw7IHRoZW4KKwkJCWNmX3NoYXJlZF9zb25hbWU9J2BiYXNlbmFtZSAgLiR7UkVMX1ZFUlNJT059YC4ke0FCSV9WRVJTSU9OfScKKwkJZWxzZQorCQkJY2Zfc2hhcmVkX3NvbmFtZT0nYGJhc2VuYW1lIGAnCisJCWZpCisJCUNDX1NIQVJFRF9PUFRTPQorCQlNS19TSEFSRURfTElCPScke0NDfSAtc2hhcmVkIC1XbCwtcnBhdGgsJHtSUEFUSF9MSVNUfSAtV2wsLWgsJyRjZl9zaGFyZWRfc29uYW1lJyAtbyAnCisJCTs7CisJKGlyaXgqKQorCQlpZiB0ZXN0ICIkY2ZfY3ZfZW5hYmxlX3JwYXRoIiA9IHllcyA7IHRoZW4KKwkJCUVYVFJBX0xERkxBR1M9IiR7Y2ZfbGRfcnBhdGhfb3B0fVwke1JQQVRIX0xJU1R9ICRFWFRSQV9MREZMQUdTIgorCQlmaQorCQkjIHRlc3RlZCB3aXRoIElSSVggNS4yIGFuZCAnY2MnLgorCQlpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKwkJCUNDX1NIQVJFRF9PUFRTPSctS1BJQycKKwkJCU1LX1NIQVJFRF9MSUI9JyR7Q0N9IC1zaGFyZWQgLXJkYXRhX3NoYXJlZCAtc29uYW1lIGBiYXNlbmFtZSAkQGAgLW8gJEAnCisJCWVsc2UKKwkJCU1LX1NIQVJFRF9MSUI9JyR7Q0N9IC1zaGFyZWQgLVdsLC1zb25hbWUsYGJhc2VuYW1lICRAYCAtbyAkQCcKKwkJZmkKKwkJY2ZfY3Zfcm1fc29fbG9jcz15ZXMKKwkJOzsKKwkobGludXgqfGdudSp8aypic2QqLWdudSkKKwkJaWYgdGVzdCAiJERGVF9MV1JfTU9ERUwiID0gInNoYXJlZCIgOyB0aGVuCisJCQlMT0NBTF9MREZMQUdTPSIke0xEX1JQQVRIX09QVH1cJChMT0NBTF9MSUJESVIpIgorCQkJTE9DQUxfTERGTEFHUzI9IiRMT0NBTF9MREZMQUdTIgorCQlmaQorCQlpZiB0ZXN0ICIkY2ZfY3ZfZW5hYmxlX3JwYXRoIiA9IHllcyA7IHRoZW4KKwkJCUVYVFJBX0xERkxBR1M9IiR7Y2ZfbGRfcnBhdGhfb3B0fVwke1JQQVRIX0xJU1R9ICRFWFRSQV9MREZMQUdTIgorCQlmaQorCisJdGVzdCAiJGNmX2N2X3NobGliX3ZlcnNpb24iID0gYXV0byAmJiBjZl9jdl9zaGxpYl92ZXJzaW9uPXJlbAorCWlmIHRlc3QgIiRjZl9jdl9zaGxpYl92ZXJzaW9uIiA9IHJlbDsgdGhlbgorCQljZl9jdl9zaGFyZWRfc29uYW1lPSdgYmFzZW5hbWUgJEAgLiR7UkVMX1ZFUlNJT059YC4ke0FCSV9WRVJTSU9OfScKKwllbHNlCisJCWNmX2N2X3NoYXJlZF9zb25hbWU9J2BiYXNlbmFtZSAkQGAnCisJZmkKKworCQlNS19TSEFSRURfTElCPScke0NDfSAke0NGTEFHU30gLXNoYXJlZCAtV2wsLXNvbmFtZSwnJGNmX2N2X3NoYXJlZF9zb25hbWUnLC1zdGF0cywtbGMgLW8gJEAnCisJCTs7CisJKG1pbmd3KikKKwkJY2ZfY3Zfc2hsaWJfdmVyc2lvbj1taW5ndworCQljZl9jdl9zaGxpYl92ZXJzaW9uX2luZml4PW1pbmd3CisJCXNobGliZGlyPSRiaW5kaXIKKwkJTUFLRV9ETExTPQorCQlpZiB0ZXN0ICIkREZUX0xXUl9NT0RFTCIgPSAic2hhcmVkIiA7IHRoZW4KKwkJCUxPQ0FMX0xERkxBR1M9Ii1XbCwtLWVuYWJsZS1hdXRvLWltcG9ydCIKKwkJCUxPQ0FMX0xERkxBR1MyPSIkTE9DQUxfTERGTEFHUyIKKwkJCUVYVFJBX0xERkxBR1M9Ii1XbCwtLWVuYWJsZS1hdXRvLWltcG9ydCAkRVhUUkFfTERGTEFHUyIKKwkJZmkKKwkJQ0NfU0hBUkVEX09QVFM9CisJCU1LX1NIQVJFRF9MSUI9JFNIRUxMJyAnJHJlbF9idWlsZGRpcicvbWtfc2hhcmVkX2xpYi5zaCAkQCAke0NDfSAke0NGTEFHU30nCisJCVJNX1NIQVJFRF9PUFRTPSIkUk1fU0hBUkVEX09QVFMgJHJlbF9idWlsZGRpci9ta19zaGFyZWRfbGliLnNoICouZGxsLmEiCisJCWNhdCA+bWtfc2hhcmVkX2xpYi5zaCA8PC1DRl9FT0YKKwkJIyEkU0hFTEwKKwkJU0hBUkVEX0xJQj1cJDEKKwkJSU1QT1JUX0xJQj1cYGVjaG8gIlwkMSIgfCBzZWQgLWUgJ3MvWzAtOV0qXC5kbGwkLy5kbGwuYS8nXGAKKwkJc2hpZnQKKwkJY2F0IDw8LUVPRgorCQlMaW5raW5nIHNoYXJlZCBsaWJyYXJ5CisJCSoqIFNIQVJFRF9MSUIgXCRTSEFSRURfTElCCisJCSoqIElNUE9SVF9MSUIgXCRJTVBPUlRfTElCCitFT0YKKwkJZXhlYyBcJCogLXNoYXJlZCAtV2wsLS1lbmFibGUtYXV0by1pbXBvcnQsLS1vdXQtaW1wbGliPVwke0lNUE9SVF9MSUJ9IC1XbCwtLWV4cG9ydC1hbGwtc3ltYm9scyAtbyBcJHtTSEFSRURfTElCfQorQ0ZfRU9GCisJCWNobW9kICt4IG1rX3NoYXJlZF9saWIuc2gKKwkJOzsKKwkob3BlbmJzZFsyLTldLip8bWlyYnNkKikKKwkJaWYgdGVzdCAiJERGVF9MV1JfTU9ERUwiID0gInNoYXJlZCIgOyB0aGVuCisJCQlMT0NBTF9MREZMQUdTPSIke0xEX1JQQVRIX09QVH1cJChMT0NBTF9MSUJESVIpIgorCQkJTE9DQUxfTERGTEFHUzI9IiRMT0NBTF9MREZMQUdTIgorCQlmaQorCQlpZiB0ZXN0ICIkY2ZfY3ZfZW5hYmxlX3JwYXRoIiA9IHllcyA7IHRoZW4KKwkJCUVYVFJBX0xERkxBR1M9IiR7Y2ZfbGRfcnBhdGhfb3B0fVwke1JQQVRIX0xJU1R9ICRFWFRSQV9MREZMQUdTIgorCQlmaQorCQlDQ19TSEFSRURfT1BUUz0iJENDX1NIQVJFRF9PUFRTIC1EUElDIgorCisJdGVzdCAiJGNmX2N2X3NobGliX3ZlcnNpb24iID0gYXV0byAmJiBjZl9jdl9zaGxpYl92ZXJzaW9uPXJlbAorCWlmIHRlc3QgIiRjZl9jdl9zaGxpYl92ZXJzaW9uIiA9IHJlbDsgdGhlbgorCQljZl9jdl9zaGFyZWRfc29uYW1lPSdgYmFzZW5hbWUgJEAgLiR7UkVMX1ZFUlNJT059YC4ke0FCSV9WRVJTSU9OfScKKwllbHNlCisJCWNmX2N2X3NoYXJlZF9zb25hbWU9J2BiYXNlbmFtZSAkQGAnCisJZmkKKworCQlNS19TSEFSRURfTElCPScke0NDfSAke0NGTEFHU30gLXNoYXJlZCAtV2wsLUJzaGFyZWFibGUsLXNvbmFtZSwnJGNmX2N2X3NoYXJlZF9zb25hbWUnLC1zdGF0cywtbGMgLW8gJEAnCisJCTs7CisJKG50by1xbngqfG9wZW5ic2QqfGZyZWVic2RbMTJdLiopCisJCUNDX1NIQVJFRF9PUFRTPSIkQ0NfU0hBUkVEX09QVFMgLURQSUMiCisJCU1LX1NIQVJFRF9MSUI9JyR7TER9IC1Cc2hhcmVhYmxlIC1vICRAJworCQl0ZXN0ICIkY2ZfY3Zfc2hsaWJfdmVyc2lvbiIgPSBhdXRvICYmIGNmX2N2X3NobGliX3ZlcnNpb249cmVsCisJCTs7CisJKGRyYWdvbmZseSp8ZnJlZWJzZCopCisJCUNDX1NIQVJFRF9PUFRTPSIkQ0NfU0hBUkVEX09QVFMgLURQSUMiCisJCWlmIHRlc3QgIiRERlRfTFdSX01PREVMIiA9ICJzaGFyZWQiICYmIHRlc3QgIiRjZl9jdl9lbmFibGVfcnBhdGgiID0geWVzIDsgdGhlbgorCQkJTE9DQUxfTERGTEFHUz0iJHtjZl9sZF9ycGF0aF9vcHR9XCQoTE9DQUxfTElCRElSKSIKKwkJCUxPQ0FMX0xERkxBR1MyPSIke2NmX2xkX3JwYXRoX29wdH1cJHtSUEFUSF9MSVNUfSAkTE9DQUxfTERGTEFHUyIKKwkJCUVYVFJBX0xERkxBR1M9IiR7Y2ZfbGRfcnBhdGhfb3B0fVwke1JQQVRIX0xJU1R9ICRFWFRSQV9MREZMQUdTIgorCQlmaQorCisJdGVzdCAiJGNmX2N2X3NobGliX3ZlcnNpb24iID0gYXV0byAmJiBjZl9jdl9zaGxpYl92ZXJzaW9uPXJlbAorCWlmIHRlc3QgIiRjZl9jdl9zaGxpYl92ZXJzaW9uIiA9IHJlbDsgdGhlbgorCQljZl9jdl9zaGFyZWRfc29uYW1lPSdgYmFzZW5hbWUgJEAgLiR7UkVMX1ZFUlNJT059YC4ke0FCSV9WRVJTSU9OfScKKwllbHNlCisJCWNmX2N2X3NoYXJlZF9zb25hbWU9J2BiYXNlbmFtZSAkQGAnCisJZmkKKworCQlNS19TSEFSRURfTElCPScke0NDfSAke0NGTEFHU30gLXNoYXJlZCAtV2wsLXNvbmFtZSwnJGNmX2N2X3NoYXJlZF9zb25hbWUnLC1zdGF0cywtbGMgLW8gJEAnCisJCTs7CisJKG5ldGJzZCopCisJCUNDX1NIQVJFRF9PUFRTPSIkQ0NfU0hBUkVEX09QVFMgLURQSUMiCisJCWlmIHRlc3QgIiRERlRfTFdSX01PREVMIiA9ICJzaGFyZWQiICYmIHRlc3QgIiRjZl9jdl9lbmFibGVfcnBhdGgiID0geWVzIDsgdGhlbgorCQkJTE9DQUxfTERGTEFHUz0iJHtjZl9sZF9ycGF0aF9vcHR9XCQoTE9DQUxfTElCRElSKSIKKwkJCUxPQ0FMX0xERkxBR1MyPSIkTE9DQUxfTERGTEFHUyIKKwkJCUVYVFJBX0xERkxBR1M9IiR7Y2ZfbGRfcnBhdGhfb3B0fVwke1JQQVRIX0xJU1R9ICRFWFRSQV9MREZMQUdTIgorCQkJaWYgdGVzdCAiJGNmX2N2X3NobGliX3ZlcnNpb24iID0gYXV0bzsgdGhlbgorCQkJaWYgdGVzdCAtZiAvdXNyL2xpYmV4ZWMvbGQuZWxmX3NvOyB0aGVuCisJCQkJY2ZfY3Zfc2hsaWJfdmVyc2lvbj1hYmkKKwkJCWVsc2UKKwkJCQljZl9jdl9zaGxpYl92ZXJzaW9uPXJlbAorCQkJZmkKKwkJCWZpCisKKwl0ZXN0ICIkY2ZfY3Zfc2hsaWJfdmVyc2lvbiIgPSBhdXRvICYmIGNmX2N2X3NobGliX3ZlcnNpb249cmVsCisJaWYgdGVzdCAiJGNmX2N2X3NobGliX3ZlcnNpb24iID0gcmVsOyB0aGVuCisJCWNmX2N2X3NoYXJlZF9zb25hbWU9J2BiYXNlbmFtZSAkQCAuJHtSRUxfVkVSU0lPTn1gLiR7QUJJX1ZFUlNJT059JworCWVsc2UKKwkJY2ZfY3Zfc2hhcmVkX3NvbmFtZT0nYGJhc2VuYW1lICRAYCcKKwlmaQorCisJCQlNS19TSEFSRURfTElCPScke0NDfSAke0NGTEFHU30gLXNoYXJlZCAtV2wsLXNvbmFtZSwnJGNmX2N2X3NoYXJlZF9zb25hbWUnIC1vICRAJworCQllbHNlCisJCQlNS19TSEFSRURfTElCPScke0NDfSAtV2wsLXNoYXJlZCAtV2wsLUJzaGFyZWFibGUgLW8gJEAnCisJCWZpCisJCTs7CisJKG9zZip8bWxzKyopCisJCSMgdGVzdGVkIHdpdGggT1NGLzEgVjMuMiBhbmQgJ2NjJworCQkjIHRlc3RlZCB3aXRoIE9TRi8xIFYzLjIgYW5kIGdjYyAyLjYuMyAoYnV0IHRoZSBjKysgZGVtbyBkaWRuJ3QKKwkJIyBsaW5rIHdpdGggc2hhcmVkIGxpYnMpLgorCQlNS19TSEFSRURfTElCPScke0xEfSAtc2V0X3ZlcnNpb24gJHtSRUxfVkVSU0lPTn06JHtBQklfVkVSU0lPTn0gLWV4cGVjdF91bnJlc29sdmVkICIqIiAtc2hhcmVkIC1zb25hbWUgYGJhc2VuYW1lICRAYCcKKwkJY2FzZSAkaG9zdF9vcyBpbgorCQkob3NmNCopCisJCQlNS19TSEFSRURfTElCPSIke01LX1NIQVJFRF9MSUJ9IC1tc3ltIgorCQkJOzsKKwkJZXNhYworCQlNS19TSEFSRURfTElCPSIke01LX1NIQVJFRF9MSUJ9IicgLW8gJEAnCisJCWlmIHRlc3QgIiRERlRfTFdSX01PREVMIiA9ICJzaGFyZWQiIDsgdGhlbgorCQkJTE9DQUxfTERGTEFHUz0iJHtMRF9SUEFUSF9PUFR9XCQoTE9DQUxfTElCRElSKSIKKwkJCUxPQ0FMX0xERkxBR1MyPSIkTE9DQUxfTERGTEFHUyIKKwkJZmkKKwkJY2ZfY3Zfcm1fc29fbG9jcz15ZXMKKwkJOzsKKwkoc2NvMy4ydjUqKSAgIyBhbHNvIHV3MiogYW5kIFVXNzogaG9wcyAxMy1BcHItOTgKKwkJIyB0ZXN0ZWQgd2l0aCBvc3I1LjAuNQorCQlpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKwkJCUNDX1NIQVJFRF9PUFRTPSctYmVsZiAtS1BJQycKKwkJZmkKKwkJTUtfU0hBUkVEX0xJQj0nJHtMRH0gLWR5IC1HIC1oIGBiYXNlbmFtZSAkQCAuJHtSRUxfVkVSU0lPTn1gLiR7QUJJX1ZFUlNJT059IC1vICRAJworCQlpZiB0ZXN0ICIkY2ZfY3ZfZW5hYmxlX3JwYXRoIiA9IHllcyA7IHRoZW4KKwkJCSMgb25seSB3YXkgaXMgdG8gc2V0IExEX1JVTl9QQVRIIGJ1dCBubyBzd2l0Y2ggZm9yIGl0CisJCQlSVU5fUEFUSD0kbGliZGlyCisJCWZpCisJCXRlc3QgIiRjZl9jdl9zaGxpYl92ZXJzaW9uIiA9IGF1dG8gJiYgY2ZfY3Zfc2hsaWJfdmVyc2lvbj1yZWwKKwkJTElOS19QUk9HUz0nTERfUlVOX1BBVEg9JHtsaWJkaXJ9JworCQlMSU5LX1RFU1RTPSdQd2Q9YHB3ZGA7TERfUlVOX1BBVEg9YGRpcm5hbWUgJCR7UHdkfWAvbGliJworCQk7OworCShzdW5vczQqKQorCQkjIHRlc3RlZCB3aXRoIFN1bk9TIDQuMS4xIGFuZCBnY2MgMi43LjAKKwkJaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisJCQlDQ19TSEFSRURfT1BUUz0nLUtQSUMnCisJCWZpCisJCU1LX1NIQVJFRF9MSUI9JyR7TER9IC1hc3NlcnQgcHVyZS10ZXh0IC1vICRAJworCQl0ZXN0ICIkY2ZfY3Zfc2hsaWJfdmVyc2lvbiIgPSBhdXRvICYmIGNmX2N2X3NobGliX3ZlcnNpb249cmVsCisJCTs7CisJKHNvbGFyaXMyKikKKwkJIyB0ZXN0ZWQgd2l0aCBTdW5PUyA1LjUuMSAoc29sYXJpcyAyLjUuMSkgYW5kIGdjYyAyLjcuMgorCQkjIHRlc3RlZCB3aXRoIFN1bk9TIDUuMTAgKHNvbGFyaXMgMTApIGFuZCBnY2MgMy40LjMKKwkJaWYgdGVzdCAiJERGVF9MV1JfTU9ERUwiID0gInNoYXJlZCIgOyB0aGVuCisJCQlMT0NBTF9MREZMQUdTPSItUiBcJChMT0NBTF9MSUJESVIpOlwke2xpYmRpcn0iCisJCQlMT0NBTF9MREZMQUdTMj0iJExPQ0FMX0xERkxBR1MiCisJCWZpCisJCWlmIHRlc3QgIiRjZl9jdl9lbmFibGVfcnBhdGgiID0geWVzIDsgdGhlbgorCQkJRVhUUkFfTERGTEFHUz0iLVIgXCR7bGliZGlyfSAkRVhUUkFfTERGTEFHUyIKKwkJZmkKKworCXRlc3QgIiRjZl9jdl9zaGxpYl92ZXJzaW9uIiA9IGF1dG8gJiYgY2ZfY3Zfc2hsaWJfdmVyc2lvbj1yZWwKKwlpZiB0ZXN0ICIkY2ZfY3Zfc2hsaWJfdmVyc2lvbiIgPSByZWw7IHRoZW4KKwkJY2ZfY3Zfc2hhcmVkX3NvbmFtZT0nYGJhc2VuYW1lICRAIC4ke1JFTF9WRVJTSU9OfWAuJHtBQklfVkVSU0lPTn0nCisJZWxzZQorCQljZl9jdl9zaGFyZWRfc29uYW1lPSdgYmFzZW5hbWUgJEBgJworCWZpCisKKwkJaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisJCQljZl9zYXZlX0NGTEFHUz0iJENGTEFHUyIKKwkJCWZvciBjZl9zaGFyZWRfb3B0cyBpbiAteGNvZGU9cGljMzIgLXhjb2RlPXBpYzEzIC1LUElDIC1LcGljIC1PCisJCQlkbworCQkJCUNGTEFHUz0iJGNmX3NoYXJlZF9vcHRzICRjZl9zYXZlX0NGTEFHUyIKKwkJCQljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDk0NTYgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CitpbnQKK21haW4gKCkKK3sKK3ByaW50ZigiSGVsbG9cbiIpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTo5NDY4OiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo5NDcxOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjk0NzQ6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo5NDc3OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYnJlYWsKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCQkJZG9uZQorCQkJQ0ZMQUdTPSIkY2Zfc2F2ZV9DRkxBR1MiCisJCQlDQ19TSEFSRURfT1BUUz0kY2Zfc2hhcmVkX29wdHMKKwkJCU1LX1NIQVJFRF9MSUI9JyR7Q0N9IC1keSAtRyAtaCAnJGNmX2N2X3NoYXJlZF9zb25hbWUnIC1vICRAJworCQllbHNlCisJCQlNS19TSEFSRURfTElCPScke0NDfSAtc2hhcmVkIC1keSAtRyAtaCAnJGNmX2N2X3NoYXJlZF9zb25hbWUnIC1vICRAJworCQlmaQorCQk7OworCShzeXN2NXV3Nyp8dW5peF9zdiopCisJCSMgdGVzdGVkIHdpdGggVW5peFdhcmUgNy4xLjAgKGdjYyAyLjk1LjIgYW5kIGNjKQorCQlpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKwkJCUNDX1NIQVJFRF9PUFRTPSctS1BJQycKKwkJZmkKKwkJTUtfU0hBUkVEX0xJQj0nJHtMRH0gLWQgeSAtRyAtbyAkQCcKKwkJOzsKKwkoKikKKwkJQ0NfU0hBUkVEX09QVFM9J3Vua25vd24nCisJCU1LX1NIQVJFRF9MSUI9J2VjaG8gdW5rbm93bicKKwkJOzsKKwllc2FjCisKKwkjIFRoaXMgd29ya3MgaWYgdGhlIGxhc3QgdG9rZW5zIGluICRNS19TSEFSRURfTElCIGFyZSB0aGUgLW8gdGFyZ2V0LgorCWNhc2UgIiRjZl9jdl9zaGxpYl92ZXJzaW9uIiBpbgorCShyZWx8YWJpKQorCQljYXNlICIkTUtfU0hBUkVEX0xJQiIgaW4KKwkJKConLW8gJEAnKQorCQkJdGVzdCAiJGNmX2N2X2RvX3N5bWxpbmtzIiA9IG5vICYmIGNmX2N2X2RvX3N5bWxpbmtzPXllcworCQkJOzsKKwkJKCopCisJCQl7IGVjaG8gIiRhc19tZTo5NTE0OiBXQVJOSU5HOiBpZ25vcmVkIC0td2l0aC1zaGxpYi12ZXJzaW9uIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogaWdub3JlZCAtLXdpdGgtc2hsaWItdmVyc2lvbiIgPiYyO30KKwkJCTs7CisJCWVzYWMKKwkJOzsKKwllc2FjCisKKwlpZiB0ZXN0IC1uICIkY2ZfdHJ5X2NmbGFncyIKKwl0aGVuCitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA5NTI0ICIke2FzX21lOi1jb25maWd1cmV9IgorI2luY2x1ZGUgPHN0ZGlvLmg+CitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCXByaW50ZigiaGVsbG9cbiIpOworCXJldHVybiAoYXJndlthcmdjLTFdID09IDApIDsKK30KK0VPRgorCQljZl9zYXZlX0NGTEFHUz0iJENGTEFHUyIKKwkJZm9yIGNmX29wdCBpbiAkY2ZfdHJ5X2NmbGFncworCQlkbworCQkJQ0ZMQUdTPSIkY2Zfc2F2ZV9DRkxBR1MgLSRjZl9vcHQiCisJCQllY2hvICIkYXNfbWU6OTUzNjogY2hlY2tpbmcgaWYgQ0ZMQUdTIG9wdGlvbiAtJGNmX29wdCB3b3JrcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIENGTEFHUyBvcHRpb24gLSRjZl9vcHQgd29ya3MuLi4gJEVDSE9fQyIgPiY2CisJCQlpZiB7IChldmFsIGVjaG8gIiRhc19tZTo5NTM4OiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo5NTQxOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IHRoZW4KKwkJCQllY2hvICIkYXNfbWU6OTU0MzogcmVzdWx0OiB5ZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKKwkJCQljZl9zYXZlX0NGTEFHUz0iJENGTEFHUyIKKwkJCWVsc2UKKwkJCQllY2hvICIkYXNfbWU6OTU0NzogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2CisJCQlmaQorCQlkb25lCisJCUNGTEFHUz0iJGNmX3NhdmVfQ0ZMQUdTIgorCWZpCisKKwkjIFJQQVRIX0xJU1QgaXMgYSBjb2xvbi1zZXBhcmF0ZWQgbGlzdCBvZiBkaXJlY3RvcmllcworCXRlc3QgLW4gIiRjZl9sZF9ycGF0aF9vcHQiICYmIE1LX1NIQVJFRF9MSUI9IiRNS19TSEFSRURfTElCICRjZl9sZF9ycGF0aF9vcHRcJHtSUEFUSF9MSVNUfSIKKwl0ZXN0IC16ICIkUlBBVEhfTElTVCIgJiYgUlBBVEhfTElTVD0iXCR7bGliZGlyfSIKKworCXRlc3QgJGNmX2N2X3JtX3NvX2xvY3MgPSB5ZXMgJiYgUk1fU0hBUkVEX09QVFM9IiRSTV9TSEFSRURfT1BUUyBzb19sb2NhdGlvbnMiCisKKwl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCUNDX1NIQVJFRF9PUFRTOiAkQ0NfU0hBUkVEX09QVFMiIDE+JjYKKworZWNobyAiJHthc19tZTotY29uZmlndXJlfTo5NTYyOiB0ZXN0aW5nIENDX1NIQVJFRF9PUFRTOiAkQ0NfU0hBUkVEX09QVFMgLi4uIiAxPiY1CisKKwl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCU1LX1NIQVJFRF9MSUI6ICAkTUtfU0hBUkVEX0xJQiIgMT4mNgorCitlY2hvICIke2FzX21lOi1jb25maWd1cmV9Ojk1NjY6IHRlc3RpbmcgTUtfU0hBUkVEX0xJQjogICRNS19TSEFSRURfTElCIC4uLiIgMT4mNQorCisjIFRoZSB0ZXN0L3NhbXBsZSBwcm9ncmFtcyBpbiB0aGUgb3JpZ2luYWwgdHJlZSBsaW5rIHVzaW5nIHJwYXRoIG9wdGlvbi4KKyMgTWFrZSBpdCBvcHRpb25hbCBmb3IgcGFja2FnZXJzLgoraWYgdGVzdCAtbiAiJExPQ0FMX0xERkxBR1MiCit0aGVuCisJZWNobyAiJGFzX21lOjk1NzI6IGNoZWNraW5nIGlmIHlvdSB3YW50IHRvIGxpbmsgc2FtcGxlIHByb2dyYW1zIHdpdGggcnBhdGggb3B0aW9uIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgeW91IHdhbnQgdG8gbGluayBzYW1wbGUgcHJvZ3JhbXMgd2l0aCBycGF0aCBvcHRpb24uLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1ycGF0aC1saW5rIG9yIC0tZGlzYWJsZS1ycGF0aC1saW5rIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3JwYXRoX2xpbmsrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSIkZW5hYmxlX3JwYXRoX2xpbmsiCisgIHdpdGhfcnBhdGhfbGluaz0kZW5hYmxldmFsCitlbHNlCisgIHdpdGhfcnBhdGhfbGluaz15ZXMKK2ZpOworCWVjaG8gIiRhc19tZTo5NTgyOiByZXN1bHQ6ICR3aXRoX3JwYXRoX2xpbmsiID4mNQorZWNobyAiJHtFQ0hPX1R9JHdpdGhfcnBhdGhfbGluayIgPiY2CisJaWYgdGVzdCAiJHdpdGhfcnBhdGhfbGluayIgPSBubworCXRoZW4KKwkJTE9DQUxfTERGTEFHUz0KKwkJTE9DQUxfTERGTEFHUzI9CisJZmkKK2ZpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMjICAgdXNlIG9wdGlvbiAtLWVuYWJsZS1icm9rZW4tbGlua2VyIHRvIGZvcmNlIG9uIHVzZSBvZiBicm9rZW4tbGlua2VyIHN1cHBvcnQKK2VjaG8gIiRhc19tZTo5NTk0OiBjaGVja2luZyBpZiB5b3Ugd2FudCBicm9rZW4tbGlua2VyIHN1cHBvcnQgY29kZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHlvdSB3YW50IGJyb2tlbi1saW5rZXIgc3VwcG9ydCBjb2RlLi4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtYnJva2VuX2xpbmtlciBvciAtLWRpc2FibGUtYnJva2VuX2xpbmtlciB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9icm9rZW5fbGlua2VyK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0iJGVuYWJsZV9icm9rZW5fbGlua2VyIgorICB3aXRoX2Jyb2tlbl9saW5rZXI9JGVuYWJsZXZhbAorZWxzZQorICB3aXRoX2Jyb2tlbl9saW5rZXI9JHtCUk9LRU5fTElOS0VSOi1ub30KK2ZpOworZWNobyAiJGFzX21lOjk2MDQ6IHJlc3VsdDogJHdpdGhfYnJva2VuX2xpbmtlciIgPiY1CitlY2hvICIke0VDSE9fVH0kd2l0aF9icm9rZW5fbGlua2VyIiA+JjYKKworQlJPS0VOX0xJTktFUj0wCitpZiB0ZXN0ICIkd2l0aF9icm9rZW5fbGlua2VyIiA9IHllcyA7IHRoZW4KKwljYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBCUk9LRU5fTElOS0VSIDEKK0VPRgorCisJQlJPS0VOX0xJTktFUj0xCitlbGlmIHRlc3QgIiRERlRfTFdSX01PREVMIiA9IHNoYXJlZCA7IHRoZW4KKwljYXNlICRjZl9jdl9zeXN0ZW1fbmFtZSBpbgorCShjeWd3aW4qKQorCQljYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBCUk9LRU5fTElOS0VSIDEKK0VPRgorCisJCUJST0tFTl9MSU5LRVI9MQorCQl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCWN5Z3dpbiBsaW5rZXIgaXMgYnJva2VuIGFueXdheSIgMT4mNgorCitlY2hvICIke2FzX21lOi1jb25maWd1cmV9Ojk2MjQ6IHRlc3RpbmcgY3lnd2luIGxpbmtlciBpcyBicm9rZW4gYW55d2F5IC4uLiIgMT4mNQorCisJCTs7CisJZXNhYworZmkKKworIyBDaGVjayB0byBkZWZpbmUgX1hPUEVOX1NPVVJDRSAiYXV0b21hdGljYWxseSIKKworY2ZfWE9QRU5fU09VUkNFPTUwMAorY2ZfUE9TSVhfQ19TT1VSQ0U9MTk5NTA2TAorY2ZfeG9wZW5fc291cmNlPQorCitjYXNlICRob3N0X29zIGluCisoYWl4WzQtN10qKQorCWNmX3hvcGVuX3NvdXJjZT0iLURfQUxMX1NPVVJDRSIKKwk7OworKGN5Z3dpbnxtc3lzKQorCWNmX1hPUEVOX1NPVVJDRT02MDAKKwk7OworKGRhcndpblswLThdLiopCisJY2ZfeG9wZW5fc291cmNlPSItRF9BUFBMRV9DX1NPVVJDRSIKKwk7OworKGRhcndpbiopCisJY2ZfeG9wZW5fc291cmNlPSItRF9EQVJXSU5fQ19TT1VSQ0UiCisJY2ZfWE9QRU5fU09VUkNFPQorCTs7CisoZnJlZWJzZCp8ZHJhZ29uZmx5KikKKwkjIDUueCBoZWFkZXJzIGFzc29jaWF0ZQorCSMJX1hPUEVOX1NPVVJDRT02MDAgd2l0aCBfUE9TSVhfQ19TT1VSQ0U9MjAwMTEyTAorCSMJX1hPUEVOX1NPVVJDRT01MDAgd2l0aCBfUE9TSVhfQ19TT1VSQ0U9MTk5NTA2TAorCWNmX1BPU0lYX0NfU09VUkNFPTIwMDExMkwKKwljZl9YT1BFTl9TT1VSQ0U9NjAwCisJY2ZfeG9wZW5fc291cmNlPSItRF9CU0RfVFlQRVMgLURfX0JTRF9WSVNJQkxFIC1EX1BPU0lYX0NfU09VUkNFPSRjZl9QT1NJWF9DX1NPVVJDRSAtRF9YT1BFTl9TT1VSQ0U9JGNmX1hPUEVOX1NPVVJDRSIKKwk7OworKGhwdXgxMSopCisJY2ZfeG9wZW5fc291cmNlPSItRF9IUFVYX1NPVVJDRSAtRF9YT1BFTl9TT1VSQ0U9NTAwIgorCTs7CisoaHB1eCopCisJY2ZfeG9wZW5fc291cmNlPSItRF9IUFVYX1NPVVJDRSIKKwk7OworKGlyaXhbNTZdLiopCisJY2ZfeG9wZW5fc291cmNlPSItRF9TR0lfU09VUkNFIgorCWNmX1hPUEVOX1NPVVJDRT0KKwk7OworKGxpbnV4KnxnbnUqfG1pbnQqfGsqYnNkKi1nbnUpCisKK2VjaG8gIiRhc19tZTo5NjcwOiBjaGVja2luZyBpZiB3ZSBtdXN0IGRlZmluZSBfR05VX1NPVVJDRSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHdlIG11c3QgZGVmaW5lIF9HTlVfU09VUkNFLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHtjZl9jdl9nbnVfc291cmNlK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgOTY3NyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CitpbnQKK21haW4gKCkKK3sKKworI2lmbmRlZiBfWE9QRU5fU09VUkNFCittYWtlIGFuIGVycm9yCisjZW5kaWYKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6OTY5MjogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6OTY5NTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTo5Njk4OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6OTcwMTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGNmX2N2X2dudV9zb3VyY2U9bm8KK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorY2Zfc2F2ZT0iJENQUEZMQUdTIgorCSBDUFBGTEFHUz0iJENQUEZMQUdTIC1EX0dOVV9TT1VSQ0UiCisJIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgOTcxMCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CitpbnQKK21haW4gKCkKK3sKKworI2lmZGVmIF9YT1BFTl9TT1VSQ0UKK21ha2UgYW4gZXJyb3IKKyNlbmRpZgorICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTo5NzI1OiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo5NzI4OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjk3MzE6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo5NzM0OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgY2ZfY3ZfZ251X3NvdXJjZT1ubworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitjZl9jdl9nbnVfc291cmNlPXllcworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCUNQUEZMQUdTPSIkY2Zfc2F2ZSIKKworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQorZWNobyAiJGFzX21lOjk3NDk6IHJlc3VsdDogJGNmX2N2X2dudV9zb3VyY2UiID4mNQorZWNobyAiJHtFQ0hPX1R9JGNmX2N2X2dudV9zb3VyY2UiID4mNgordGVzdCAiJGNmX2N2X2dudV9zb3VyY2UiID0geWVzICYmIENQUEZMQUdTPSIkQ1BQRkxBR1MgLURfR05VX1NPVVJDRSIKKworCTs7CisobWluaXgqKQorCWNmX3hvcGVuX3NvdXJjZT0iLURfTkVUQlNEX1NPVVJDRSIgIyBQT1NJWC4xLTIwMDEgZmVhdHVyZXMgYXJlIGlmZGVmJ2Qgd2l0aCB0aGlzLi4uCisJOzsKKyhtaXJic2QqKQorCSMgc2V0dGluZyBfWE9QRU5fU09VUkNFIG9yIF9QT1NJWF9TT1VSQ0UgYnJlYWtzIDxzeXMvc2VsZWN0Lmg+IGFuZCBvdGhlciBoZWFkZXJzIHdoaWNoIHVzZSB1X2ludCAvIHVfc2hvcnQgdHlwZXMKKwljZl9YT1BFTl9TT1VSQ0U9CisKK2NmX1BPU0lYX0NfU09VUkNFPSRjZl9QT1NJWF9DX1NPVVJDRQorCitjZl9zYXZlX0NGTEFHUz0iJENGTEFHUyIKK2NmX3NhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKworY2ZfdHJpbV9DRkxBR1M9YGVjaG8gIiRjZl9zYXZlX0NGTEFHUyIgfCBcCisJc2VkCS1lICdzLy1bVURdJyJfUE9TSVhfQ19TT1VSQ0UiJ1woPVteIAldKlwpXD9bIAldLyAvZycgXAorCQktZSAncy8tW1VEXSciX1BPU0lYX0NfU09VUkNFIidcKD1bXiAJXSpcKVw/JC8vZydgCisKK2NmX3RyaW1fQ1BQRkxBR1M9YGVjaG8gIiRjZl9zYXZlX0NQUEZMQUdTIiB8IFwKKwlzZWQJLWUgJ3MvLVtVRF0nIl9QT1NJWF9DX1NPVVJDRSInXCg9W14gCV0qXClcP1sgCV0vIC9nJyBcCisJCS1lICdzLy1bVURdJyJfUE9TSVhfQ19TT1VSQ0UiJ1woPVteIAldKlwpXD8kLy9nJ2AKKworZWNobyAiJGFzX21lOjk3NzQ6IGNoZWNraW5nIGlmIHdlIHNob3VsZCBkZWZpbmUgX1BPU0lYX0NfU09VUkNFIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgd2Ugc2hvdWxkIGRlZmluZSBfUE9TSVhfQ19TT1VSQ0UuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2NmX2N2X3Bvc2l4X2Nfc291cmNlK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKK2VjaG8gIiR7YXNfbWU6LWNvbmZpZ3VyZX06OTc4MDogdGVzdGluZyBpZiB0aGUgc3ltYm9sIGlzIGFscmVhZHkgZGVmaW5lZCBnbyBubyBmdXJ0aGVyIC4uLiIgMT4mNQorCisJY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA5NzgzICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KK2ludAorbWFpbiAoKQoreworCisjaWZuZGVmIF9QT1NJWF9DX1NPVVJDRQorbWFrZSBhbiBlcnJvcgorI2VuZGlmCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjk3OTg6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjk4MDE6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6OTgwNDogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjk4MDc6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBjZl9jdl9wb3NpeF9jX3NvdXJjZT1ubworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitjZl93YW50X3Bvc2l4X3NvdXJjZT1ubworCSBjYXNlIC4kY2ZfUE9TSVhfQ19TT1VSQ0UgaW4KKwkgKC5bMTJdPz8qKQorCQljZl9jdl9wb3NpeF9jX3NvdXJjZT0iLURfUE9TSVhfQ19TT1VSQ0U9JGNmX1BPU0lYX0NfU09VUkNFIgorCQk7OworCSAoLjIpCisJCWNmX2N2X3Bvc2l4X2Nfc291cmNlPSItRF9QT1NJWF9DX1NPVVJDRT0kY2ZfUE9TSVhfQ19TT1VSQ0UiCisJCWNmX3dhbnRfcG9zaXhfc291cmNlPXllcworCQk7OworCSAoLiopCisJCWNmX3dhbnRfcG9zaXhfc291cmNlPXllcworCQk7OworCSBlc2FjCisJIGlmIHRlc3QgIiRjZl93YW50X3Bvc2l4X3NvdXJjZSIgPSB5ZXMgOyB0aGVuCisJCWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgOTgyOCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CitpbnQKK21haW4gKCkKK3sKKworI2lmZGVmIF9QT1NJWF9TT1VSQ0UKK21ha2UgYW4gZXJyb3IKKyNlbmRpZgorICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTo5ODQzOiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo5ODQ2OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjk4NDk6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo5ODUyOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgOgorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitjZl9jdl9wb3NpeF9jX3NvdXJjZT0iJGNmX2N2X3Bvc2l4X2Nfc291cmNlIC1EX1BPU0lYX1NPVVJDRSIKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKwkgZmkKKworZWNobyAiJHthc19tZTotY29uZmlndXJlfTo5ODYzOiB0ZXN0aW5nIGlmZGVmIGZyb20gdmFsdWUgJGNmX1BPU0lYX0NfU09VUkNFIC4uLiIgMT4mNQorCisJIENGTEFHUz0iJGNmX3RyaW1fQ0ZMQUdTIgorCSBDUFBGTEFHUz0iJGNmX3RyaW1fQ1BQRkxBR1MgJGNmX2N2X3Bvc2l4X2Nfc291cmNlIgorCitlY2hvICIke2FzX21lOi1jb25maWd1cmV9Ojk4Njg6IHRlc3RpbmcgaWYgdGhlIHNlY29uZCBjb21waWxlIGRvZXMgbm90IGxlYXZlIG91ciBkZWZpbml0aW9uIGludGFjdCBlcnJvciAuLi4iIDE+JjUKKworCSBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDk4NzEgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgoraW50CittYWluICgpCit7CisKKyNpZm5kZWYgX1BPU0lYX0NfU09VUkNFCittYWtlIGFuIGVycm9yCisjZW5kaWYKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6OTg4NjogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6OTg4OTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTo5ODkyOiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6OTg5NTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIDoKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorY2ZfY3ZfcG9zaXhfY19zb3VyY2U9bm8KK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKwkgQ0ZMQUdTPSIkY2Zfc2F2ZV9DRkxBR1MiCisJIENQUEZMQUdTPSIkY2Zfc2F2ZV9DUFBGTEFHUyIKKworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQorZWNobyAiJGFzX21lOjk5MTE6IHJlc3VsdDogJGNmX2N2X3Bvc2l4X2Nfc291cmNlIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9jdl9wb3NpeF9jX3NvdXJjZSIgPiY2CisKK2lmIHRlc3QgIiRjZl9jdl9wb3NpeF9jX3NvdXJjZSIgIT0gbm8gOyB0aGVuCisJQ0ZMQUdTPSIkY2ZfdHJpbV9DRkxBR1MiCisJQ1BQRkxBR1M9IiRjZl90cmltX0NQUEZMQUdTIgorCitjZl9maXhfY3BwZmxhZ3M9bm8KK2NmX25ld19jZmxhZ3M9CitjZl9uZXdfY3BwZmxhZ3M9CitjZl9uZXdfZXh0cmFfY3BwZmxhZ3M9CisKK2ZvciBjZl9hZGRfY2ZsYWdzIGluICRjZl9jdl9wb3NpeF9jX3NvdXJjZQorZG8KK2Nhc2UgJGNmX2ZpeF9jcHBmbGFncyBpbgorKG5vKQorCWNhc2UgJGNmX2FkZF9jZmxhZ3MgaW4KKwkoLXVuZGVmfC1ub3N0ZGluYyp8LUkqfC1EKnwtVSp8LUV8LVB8LUMpCisJCWNhc2UgJGNmX2FkZF9jZmxhZ3MgaW4KKwkJKC1EKikKKwkJCWNmX3RzdF9jZmxhZ3M9YGVjaG8gJHtjZl9hZGRfY2ZsYWdzfSB8c2VkIC1lICdzL14tRFtePV0qPSdcJydcIlteIl0qLy8nYAorCisJCQl0ZXN0ICJ4JHtjZl9hZGRfY2ZsYWdzfSIgIT0gIngke2NmX3RzdF9jZmxhZ3N9IiBcCisJCQkJJiYgdGVzdCAteiAiJHtjZl90c3RfY2ZsYWdzfSIgXAorCQkJCSYmIGNmX2ZpeF9jcHBmbGFncz15ZXMKKworCQkJaWYgdGVzdCAkY2ZfZml4X2NwcGZsYWdzID0geWVzIDsgdGhlbgorCQkJCWNmX25ld19leHRyYV9jcHBmbGFncz0iJGNmX25ld19leHRyYV9jcHBmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJCQljb250aW51ZQorCQkJZWxpZiB0ZXN0ICIke2NmX3RzdF9jZmxhZ3N9IiA9ICJcIiciIDsgdGhlbgorCQkJCWNmX25ld19leHRyYV9jcHBmbGFncz0iJGNmX25ld19leHRyYV9jcHBmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJCQljb250aW51ZQorCQkJZmkKKwkJCTs7CisJCWVzYWMKKwkJY2FzZSAiJENQUEZMQUdTIiBpbgorCQkoKiRjZl9hZGRfY2ZsYWdzKQorCQkJOzsKKwkJKCopCisJCQljYXNlICRjZl9hZGRfY2ZsYWdzIGluCisJCQkoLUQqKQorCQkJCWNmX3RzdF9jcHBmbGFncz1gZWNobyAieCRjZl9hZGRfY2ZsYWdzIiB8IHNlZCAtZSAncy9eLi4uLy8nIC1lICdzLz0uKi8vJ2AKKworQ1BQRkxBR1M9YGVjaG8gIiRDUFBGTEFHUyIgfCBcCisJc2VkCS1lICdzLy1bVURdJyIkY2ZfdHN0X2NwcGZsYWdzIidcKD1bXiAJXSpcKVw/WyAJXS8gL2cnIFwKKwkJLWUgJ3MvLVtVRF0nIiRjZl90c3RfY3BwZmxhZ3MiJ1woPVteIAldKlwpXD8kLy9nJ2AKKworCQkJCTs7CisJCQllc2FjCisJCQljZl9uZXdfY3BwZmxhZ3M9IiRjZl9uZXdfY3BwZmxhZ3MgJGNmX2FkZF9jZmxhZ3MiCisJCQk7OworCQllc2FjCisJCTs7CisJKCopCisJCWNmX25ld19jZmxhZ3M9IiRjZl9uZXdfY2ZsYWdzICRjZl9hZGRfY2ZsYWdzIgorCQk7OworCWVzYWMKKwk7OworKHllcykKKwljZl9uZXdfZXh0cmFfY3BwZmxhZ3M9IiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MgJGNmX2FkZF9jZmxhZ3MiCisKKwljZl90c3RfY2ZsYWdzPWBlY2hvICR7Y2ZfYWRkX2NmbGFnc30gfHNlZCAtZSAncy9eW14iXSoiJ1wnJy8vJ2AKKworCXRlc3QgIngke2NmX2FkZF9jZmxhZ3N9IiAhPSAieCR7Y2ZfdHN0X2NmbGFnc30iIFwKKwkJJiYgdGVzdCAteiAiJHtjZl90c3RfY2ZsYWdzfSIgXAorCQkmJiBjZl9maXhfY3BwZmxhZ3M9bm8KKwk7OworZXNhYworZG9uZQorCitpZiB0ZXN0IC1uICIkY2ZfbmV3X2NmbGFncyIgOyB0aGVuCisKKwlDRkxBR1M9IiRDRkxBR1MgJGNmX25ld19jZmxhZ3MiCitmaQorCitpZiB0ZXN0IC1uICIkY2ZfbmV3X2NwcGZsYWdzIiA7IHRoZW4KKworCUNQUEZMQUdTPSIkQ1BQRkxBR1MgJGNmX25ld19jcHBmbGFncyIKK2ZpCisKK2lmIHRlc3QgLW4gIiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MiIDsgdGhlbgorCisJRVhUUkFfQ1BQRkxBR1M9IiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MgJEVYVFJBX0NQUEZMQUdTIgorZmkKKworZmkKKworCTs7CisobmV0YnNkKikKKwljZl94b3Blbl9zb3VyY2U9Ii1EX05FVEJTRF9TT1VSQ0UiICMgc2V0dGluZyBfWE9QRU5fU09VUkNFIGJyZWFrcyBJUHY2IGZvciBseW54IG9uIE5ldEJTRCAxLjYsIGJyZWFrcyB4dGVybSwgaXMgbm90IG5lZWRlZCBmb3IgbmN1cnNlc3cKKwk7OworKG9wZW5ic2RbNC05XSopCisJIyBzZXR0aW5nIF9YT1BFTl9TT1VSQ0UgbG93ZXIgdGhhbiA1MDAgYnJlYWtzIGcrKyBjb21waWxlIHdpdGggd2NoYXIuaCwgbmVlZGVkIGZvciBuY3Vyc2VzdworCWNmX3hvcGVuX3NvdXJjZT0iLURfQlNEX1NPVVJDRSIKKwljZl9YT1BFTl9TT1VSQ0U9NjAwCisJOzsKKyhvcGVuYnNkKikKKwkjIHNldHRpbmcgX1hPUEVOX1NPVVJDRSBicmVha3MgeHRlcm0gb24gT3BlbkJTRCAyLjgsIGlzIG5vdCBuZWVkZWQgZm9yIG5jdXJzZXN3CisJOzsKKyhvc2ZbNDVdKikKKwljZl94b3Blbl9zb3VyY2U9Ii1EX09TRl9TT1VSQ0UiCisJOzsKKyhudG8tcW54KikKKwljZl94b3Blbl9zb3VyY2U9Ii1EX1FOWF9TT1VSQ0UiCisJOzsKKyhzY28qKQorCSMgc2V0dGluZyBfWE9QRU5fU09VUkNFIGJyZWFrcyBMeW54IG9uIFNDTyBVbml4IC8gT3BlblNlcnZlcgorCTs7Cisoc29sYXJpczIuKikKKwljZl94b3Blbl9zb3VyY2U9Ii1EX19FWFRFTlNJT05TX18iCisJY2ZfY3ZfeG9wZW5fc291cmNlPWJyb2tlbgorCTs7Cisoc3lzdjQuMnV3Mi4qKSAjIE5vdmVsbC9TQ08gVW5peFdhcmUgMi54ICh0ZXN0ZWQgb24gMi4xLjIpCisJY2ZfWE9QRU5fU09VUkNFPQorCWNmX1BPU0lYX0NfU09VUkNFPQorCTs7CisoKikKKworZWNobyAiJGFzX21lOjEwMDI5OiBjaGVja2luZyBpZiB3ZSBzaG91bGQgZGVmaW5lIF9YT1BFTl9TT1VSQ0UiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB3ZSBzaG91bGQgZGVmaW5lIF9YT1BFTl9TT1VSQ0UuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2NmX2N2X3hvcGVuX3NvdXJjZStzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorCisJY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMDAzNiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworaW50CittYWluICgpCit7CisKKyNpZm5kZWYgX1hPUEVOX1NPVVJDRQorbWFrZSBhbiBlcnJvcgorI2VuZGlmCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjEwMDU1OiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMDA1ODogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToxMDA2MTogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEwMDY0OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgY2ZfY3ZfeG9wZW5fc291cmNlPW5vCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2NmX3NhdmU9IiRDUFBGTEFHUyIKKwkgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRF9YT1BFTl9TT1VSQ0U9JGNmX1hPUEVOX1NPVVJDRSIKKwkgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMDA3MyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworaW50CittYWluICgpCit7CisKKyNpZmRlZiBfWE9QRU5fU09VUkNFCittYWtlIGFuIGVycm9yCisjZW5kaWYKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTAwOTI6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEwMDk1OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjEwMDk4OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTAxMDE6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBjZl9jdl94b3Blbl9zb3VyY2U9bm8KK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorY2ZfY3ZfeG9wZW5fc291cmNlPSRjZl9YT1BFTl9TT1VSQ0UKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKwlDUFBGTEFHUz0iJGNmX3NhdmUiCisKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworZmkKK2VjaG8gIiRhc19tZToxMDExNjogcmVzdWx0OiAkY2ZfY3ZfeG9wZW5fc291cmNlIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9jdl94b3Blbl9zb3VyY2UiID4mNgorCitpZiB0ZXN0ICIkY2ZfY3ZfeG9wZW5fc291cmNlIiAhPSBubyA7IHRoZW4KKworQ0ZMQUdTPWBlY2hvICIkQ0ZMQUdTIiB8IFwKKwlzZWQJLWUgJ3MvLVtVRF0nIl9YT1BFTl9TT1VSQ0UiJ1woPVteIAldKlwpXD9bIAldLyAvZycgXAorCQktZSAncy8tW1VEXSciX1hPUEVOX1NPVVJDRSInXCg9W14gCV0qXClcPyQvL2cnYAorCitDUFBGTEFHUz1gZWNobyAiJENQUEZMQUdTIiB8IFwKKwlzZWQJLWUgJ3MvLVtVRF0nIl9YT1BFTl9TT1VSQ0UiJ1woPVteIAldKlwpXD9bIAldLyAvZycgXAorCQktZSAncy8tW1VEXSciX1hPUEVOX1NPVVJDRSInXCg9W14gCV0qXClcPyQvL2cnYAorCisJY2ZfdGVtcF94b3Blbl9zb3VyY2U9Ii1EX1hPUEVOX1NPVVJDRT0kY2ZfY3ZfeG9wZW5fc291cmNlIgorCitjZl9maXhfY3BwZmxhZ3M9bm8KK2NmX25ld19jZmxhZ3M9CitjZl9uZXdfY3BwZmxhZ3M9CitjZl9uZXdfZXh0cmFfY3BwZmxhZ3M9CisKK2ZvciBjZl9hZGRfY2ZsYWdzIGluICRjZl90ZW1wX3hvcGVuX3NvdXJjZQorZG8KK2Nhc2UgJGNmX2ZpeF9jcHBmbGFncyBpbgorKG5vKQorCWNhc2UgJGNmX2FkZF9jZmxhZ3MgaW4KKwkoLXVuZGVmfC1ub3N0ZGluYyp8LUkqfC1EKnwtVSp8LUV8LVB8LUMpCisJCWNhc2UgJGNmX2FkZF9jZmxhZ3MgaW4KKwkJKC1EKikKKwkJCWNmX3RzdF9jZmxhZ3M9YGVjaG8gJHtjZl9hZGRfY2ZsYWdzfSB8c2VkIC1lICdzL14tRFtePV0qPSdcJydcIlteIl0qLy8nYAorCisJCQl0ZXN0ICJ4JHtjZl9hZGRfY2ZsYWdzfSIgIT0gIngke2NmX3RzdF9jZmxhZ3N9IiBcCisJCQkJJiYgdGVzdCAteiAiJHtjZl90c3RfY2ZsYWdzfSIgXAorCQkJCSYmIGNmX2ZpeF9jcHBmbGFncz15ZXMKKworCQkJaWYgdGVzdCAkY2ZfZml4X2NwcGZsYWdzID0geWVzIDsgdGhlbgorCQkJCWNmX25ld19leHRyYV9jcHBmbGFncz0iJGNmX25ld19leHRyYV9jcHBmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJCQljb250aW51ZQorCQkJZWxpZiB0ZXN0ICIke2NmX3RzdF9jZmxhZ3N9IiA9ICJcIiciIDsgdGhlbgorCQkJCWNmX25ld19leHRyYV9jcHBmbGFncz0iJGNmX25ld19leHRyYV9jcHBmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJCQljb250aW51ZQorCQkJZmkKKwkJCTs7CisJCWVzYWMKKwkJY2FzZSAiJENQUEZMQUdTIiBpbgorCQkoKiRjZl9hZGRfY2ZsYWdzKQorCQkJOzsKKwkJKCopCisJCQljYXNlICRjZl9hZGRfY2ZsYWdzIGluCisJCQkoLUQqKQorCQkJCWNmX3RzdF9jcHBmbGFncz1gZWNobyAieCRjZl9hZGRfY2ZsYWdzIiB8IHNlZCAtZSAncy9eLi4uLy8nIC1lICdzLz0uKi8vJ2AKKworQ1BQRkxBR1M9YGVjaG8gIiRDUFBGTEFHUyIgfCBcCisJc2VkCS1lICdzLy1bVURdJyIkY2ZfdHN0X2NwcGZsYWdzIidcKD1bXiAJXSpcKVw/WyAJXS8gL2cnIFwKKwkJLWUgJ3MvLVtVRF0nIiRjZl90c3RfY3BwZmxhZ3MiJ1woPVteIAldKlwpXD8kLy9nJ2AKKworCQkJCTs7CisJCQllc2FjCisJCQljZl9uZXdfY3BwZmxhZ3M9IiRjZl9uZXdfY3BwZmxhZ3MgJGNmX2FkZF9jZmxhZ3MiCisJCQk7OworCQllc2FjCisJCTs7CisJKCopCisJCWNmX25ld19jZmxhZ3M9IiRjZl9uZXdfY2ZsYWdzICRjZl9hZGRfY2ZsYWdzIgorCQk7OworCWVzYWMKKwk7OworKHllcykKKwljZl9uZXdfZXh0cmFfY3BwZmxhZ3M9IiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MgJGNmX2FkZF9jZmxhZ3MiCisKKwljZl90c3RfY2ZsYWdzPWBlY2hvICR7Y2ZfYWRkX2NmbGFnc30gfHNlZCAtZSAncy9eW14iXSoiJ1wnJy8vJ2AKKworCXRlc3QgIngke2NmX2FkZF9jZmxhZ3N9IiAhPSAieCR7Y2ZfdHN0X2NmbGFnc30iIFwKKwkJJiYgdGVzdCAteiAiJHtjZl90c3RfY2ZsYWdzfSIgXAorCQkmJiBjZl9maXhfY3BwZmxhZ3M9bm8KKwk7OworZXNhYworZG9uZQorCitpZiB0ZXN0IC1uICIkY2ZfbmV3X2NmbGFncyIgOyB0aGVuCisKKwlDRkxBR1M9IiRDRkxBR1MgJGNmX25ld19jZmxhZ3MiCitmaQorCitpZiB0ZXN0IC1uICIkY2ZfbmV3X2NwcGZsYWdzIiA7IHRoZW4KKworCUNQUEZMQUdTPSIkQ1BQRkxBR1MgJGNmX25ld19jcHBmbGFncyIKK2ZpCisKK2lmIHRlc3QgLW4gIiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MiIDsgdGhlbgorCisJRVhUUkFfQ1BQRkxBR1M9IiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MgJEVYVFJBX0NQUEZMQUdTIgorZmkKKworZmkKKworY2ZfUE9TSVhfQ19TT1VSQ0U9JGNmX1BPU0lYX0NfU09VUkNFCisKK2NmX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorY2Zfc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorCitjZl90cmltX0NGTEFHUz1gZWNobyAiJGNmX3NhdmVfQ0ZMQUdTIiB8IFwKKwlzZWQJLWUgJ3MvLVtVRF0nIl9QT1NJWF9DX1NPVVJDRSInXCg9W14gCV0qXClcP1sgCV0vIC9nJyBcCisJCS1lICdzLy1bVURdJyJfUE9TSVhfQ19TT1VSQ0UiJ1woPVteIAldKlwpXD8kLy9nJ2AKKworY2ZfdHJpbV9DUFBGTEFHUz1gZWNobyAiJGNmX3NhdmVfQ1BQRkxBR1MiIHwgXAorCXNlZAktZSAncy8tW1VEXSciX1BPU0lYX0NfU09VUkNFIidcKD1bXiAJXSpcKVw/WyAJXS8gL2cnIFwKKwkJLWUgJ3MvLVtVRF0nIl9QT1NJWF9DX1NPVVJDRSInXCg9W14gCV0qXClcPyQvL2cnYAorCitlY2hvICIkYXNfbWU6MTAyMjQ6IGNoZWNraW5nIGlmIHdlIHNob3VsZCBkZWZpbmUgX1BPU0lYX0NfU09VUkNFIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgd2Ugc2hvdWxkIGRlZmluZSBfUE9TSVhfQ19TT1VSQ0UuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2NmX2N2X3Bvc2l4X2Nfc291cmNlK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKK2VjaG8gIiR7YXNfbWU6LWNvbmZpZ3VyZX06MTAyMzA6IHRlc3RpbmcgaWYgdGhlIHN5bWJvbCBpcyBhbHJlYWR5IGRlZmluZWQgZ28gbm8gZnVydGhlciAuLi4iIDE+JjUKKworCWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTAyMzMgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgoraW50CittYWluICgpCit7CisKKyNpZm5kZWYgX1BPU0lYX0NfU09VUkNFCittYWtlIGFuIGVycm9yCisjZW5kaWYKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTAyNDg6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEwMjUxOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjEwMjU0OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTAyNTc6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBjZl9jdl9wb3NpeF9jX3NvdXJjZT1ubworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitjZl93YW50X3Bvc2l4X3NvdXJjZT1ubworCSBjYXNlIC4kY2ZfUE9TSVhfQ19TT1VSQ0UgaW4KKwkgKC5bMTJdPz8qKQorCQljZl9jdl9wb3NpeF9jX3NvdXJjZT0iLURfUE9TSVhfQ19TT1VSQ0U9JGNmX1BPU0lYX0NfU09VUkNFIgorCQk7OworCSAoLjIpCisJCWNmX2N2X3Bvc2l4X2Nfc291cmNlPSItRF9QT1NJWF9DX1NPVVJDRT0kY2ZfUE9TSVhfQ19TT1VSQ0UiCisJCWNmX3dhbnRfcG9zaXhfc291cmNlPXllcworCQk7OworCSAoLiopCisJCWNmX3dhbnRfcG9zaXhfc291cmNlPXllcworCQk7OworCSBlc2FjCisJIGlmIHRlc3QgIiRjZl93YW50X3Bvc2l4X3NvdXJjZSIgPSB5ZXMgOyB0aGVuCisJCWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTAyNzggImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgoraW50CittYWluICgpCit7CisKKyNpZmRlZiBfUE9TSVhfU09VUkNFCittYWtlIGFuIGVycm9yCisjZW5kaWYKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTAyOTM6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEwMjk2OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjEwMjk5OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTAzMDI6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICA6CitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2NmX2N2X3Bvc2l4X2Nfc291cmNlPSIkY2ZfY3ZfcG9zaXhfY19zb3VyY2UgLURfUE9TSVhfU09VUkNFIgorZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCSBmaQorCitlY2hvICIke2FzX21lOi1jb25maWd1cmV9OjEwMzEzOiB0ZXN0aW5nIGlmZGVmIGZyb20gdmFsdWUgJGNmX1BPU0lYX0NfU09VUkNFIC4uLiIgMT4mNQorCisJIENGTEFHUz0iJGNmX3RyaW1fQ0ZMQUdTIgorCSBDUFBGTEFHUz0iJGNmX3RyaW1fQ1BQRkxBR1MgJGNmX2N2X3Bvc2l4X2Nfc291cmNlIgorCitlY2hvICIke2FzX21lOi1jb25maWd1cmV9OjEwMzE4OiB0ZXN0aW5nIGlmIHRoZSBzZWNvbmQgY29tcGlsZSBkb2VzIG5vdCBsZWF2ZSBvdXIgZGVmaW5pdGlvbiBpbnRhY3QgZXJyb3IgLi4uIiAxPiY1CisKKwkgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMDMyMSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CitpbnQKK21haW4gKCkKK3sKKworI2lmbmRlZiBfUE9TSVhfQ19TT1VSQ0UKK21ha2UgYW4gZXJyb3IKKyNlbmRpZgorICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxMDMzNjogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTAzMzk6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTAzNDI6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMDM0NTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIDoKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorY2ZfY3ZfcG9zaXhfY19zb3VyY2U9bm8KK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKwkgQ0ZMQUdTPSIkY2Zfc2F2ZV9DRkxBR1MiCisJIENQUEZMQUdTPSIkY2Zfc2F2ZV9DUFBGTEFHUyIKKworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQorZWNobyAiJGFzX21lOjEwMzYxOiByZXN1bHQ6ICRjZl9jdl9wb3NpeF9jX3NvdXJjZSIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfY3ZfcG9zaXhfY19zb3VyY2UiID4mNgorCitpZiB0ZXN0ICIkY2ZfY3ZfcG9zaXhfY19zb3VyY2UiICE9IG5vIDsgdGhlbgorCUNGTEFHUz0iJGNmX3RyaW1fQ0ZMQUdTIgorCUNQUEZMQUdTPSIkY2ZfdHJpbV9DUFBGTEFHUyIKKworY2ZfZml4X2NwcGZsYWdzPW5vCitjZl9uZXdfY2ZsYWdzPQorY2ZfbmV3X2NwcGZsYWdzPQorY2ZfbmV3X2V4dHJhX2NwcGZsYWdzPQorCitmb3IgY2ZfYWRkX2NmbGFncyBpbiAkY2ZfY3ZfcG9zaXhfY19zb3VyY2UKK2RvCitjYXNlICRjZl9maXhfY3BwZmxhZ3MgaW4KKyhubykKKwljYXNlICRjZl9hZGRfY2ZsYWdzIGluCisJKC11bmRlZnwtbm9zdGRpbmMqfC1JKnwtRCp8LVUqfC1FfC1QfC1DKQorCQljYXNlICRjZl9hZGRfY2ZsYWdzIGluCisJCSgtRCopCisJCQljZl90c3RfY2ZsYWdzPWBlY2hvICR7Y2ZfYWRkX2NmbGFnc30gfHNlZCAtZSAncy9eLURbXj1dKj0nXCcnXCJbXiJdKi8vJ2AKKworCQkJdGVzdCAieCR7Y2ZfYWRkX2NmbGFnc30iICE9ICJ4JHtjZl90c3RfY2ZsYWdzfSIgXAorCQkJCSYmIHRlc3QgLXogIiR7Y2ZfdHN0X2NmbGFnc30iIFwKKwkJCQkmJiBjZl9maXhfY3BwZmxhZ3M9eWVzCisKKwkJCWlmIHRlc3QgJGNmX2ZpeF9jcHBmbGFncyA9IHllcyA7IHRoZW4KKwkJCQljZl9uZXdfZXh0cmFfY3BwZmxhZ3M9IiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MgJGNmX2FkZF9jZmxhZ3MiCisJCQkJY29udGludWUKKwkJCWVsaWYgdGVzdCAiJHtjZl90c3RfY2ZsYWdzfSIgPSAiXCInIiA7IHRoZW4KKwkJCQljZl9uZXdfZXh0cmFfY3BwZmxhZ3M9IiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MgJGNmX2FkZF9jZmxhZ3MiCisJCQkJY29udGludWUKKwkJCWZpCisJCQk7OworCQllc2FjCisJCWNhc2UgIiRDUFBGTEFHUyIgaW4KKwkJKCokY2ZfYWRkX2NmbGFncykKKwkJCTs7CisJCSgqKQorCQkJY2FzZSAkY2ZfYWRkX2NmbGFncyBpbgorCQkJKC1EKikKKwkJCQljZl90c3RfY3BwZmxhZ3M9YGVjaG8gIngkY2ZfYWRkX2NmbGFncyIgfCBzZWQgLWUgJ3MvXi4uLi8vJyAtZSAncy89LiovLydgCisKK0NQUEZMQUdTPWBlY2hvICIkQ1BQRkxBR1MiIHwgXAorCXNlZAktZSAncy8tW1VEXSciJGNmX3RzdF9jcHBmbGFncyInXCg9W14gCV0qXClcP1sgCV0vIC9nJyBcCisJCS1lICdzLy1bVURdJyIkY2ZfdHN0X2NwcGZsYWdzIidcKD1bXiAJXSpcKVw/JC8vZydgCisKKwkJCQk7OworCQkJZXNhYworCQkJY2ZfbmV3X2NwcGZsYWdzPSIkY2ZfbmV3X2NwcGZsYWdzICRjZl9hZGRfY2ZsYWdzIgorCQkJOzsKKwkJZXNhYworCQk7OworCSgqKQorCQljZl9uZXdfY2ZsYWdzPSIkY2ZfbmV3X2NmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJOzsKKwllc2FjCisJOzsKKyh5ZXMpCisJY2ZfbmV3X2V4dHJhX2NwcGZsYWdzPSIkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzICRjZl9hZGRfY2ZsYWdzIgorCisJY2ZfdHN0X2NmbGFncz1gZWNobyAke2NmX2FkZF9jZmxhZ3N9IHxzZWQgLWUgJ3MvXlteIl0qIidcJycvLydgCisKKwl0ZXN0ICJ4JHtjZl9hZGRfY2ZsYWdzfSIgIT0gIngke2NmX3RzdF9jZmxhZ3N9IiBcCisJCSYmIHRlc3QgLXogIiR7Y2ZfdHN0X2NmbGFnc30iIFwKKwkJJiYgY2ZfZml4X2NwcGZsYWdzPW5vCisJOzsKK2VzYWMKK2RvbmUKKworaWYgdGVzdCAtbiAiJGNmX25ld19jZmxhZ3MiIDsgdGhlbgorCisJQ0ZMQUdTPSIkQ0ZMQUdTICRjZl9uZXdfY2ZsYWdzIgorZmkKKworaWYgdGVzdCAtbiAiJGNmX25ld19jcHBmbGFncyIgOyB0aGVuCisKKwlDUFBGTEFHUz0iJENQUEZMQUdTICRjZl9uZXdfY3BwZmxhZ3MiCitmaQorCitpZiB0ZXN0IC1uICIkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzIiA7IHRoZW4KKworCUVYVFJBX0NQUEZMQUdTPSIkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzICRFWFRSQV9DUFBGTEFHUyIKK2ZpCisKK2ZpCisKKwk7OworZXNhYworCitpZiB0ZXN0IC1uICIkY2ZfeG9wZW5fc291cmNlIiA7IHRoZW4KKworY2ZfZml4X2NwcGZsYWdzPW5vCitjZl9uZXdfY2ZsYWdzPQorY2ZfbmV3X2NwcGZsYWdzPQorY2ZfbmV3X2V4dHJhX2NwcGZsYWdzPQorCitmb3IgY2ZfYWRkX2NmbGFncyBpbiAkY2ZfeG9wZW5fc291cmNlCitkbworY2FzZSAkY2ZfZml4X2NwcGZsYWdzIGluCisobm8pCisJY2FzZSAkY2ZfYWRkX2NmbGFncyBpbgorCSgtdW5kZWZ8LW5vc3RkaW5jKnwtSSp8LUQqfC1VKnwtRXwtUHwtQykKKwkJY2FzZSAkY2ZfYWRkX2NmbGFncyBpbgorCQkoLUQqKQorCQkJY2ZfdHN0X2NmbGFncz1gZWNobyAke2NmX2FkZF9jZmxhZ3N9IHxzZWQgLWUgJ3MvXi1EW149XSo9J1wnJ1wiW14iXSovLydgCisKKwkJCXRlc3QgIngke2NmX2FkZF9jZmxhZ3N9IiAhPSAieCR7Y2ZfdHN0X2NmbGFnc30iIFwKKwkJCQkmJiB0ZXN0IC16ICIke2NmX3RzdF9jZmxhZ3N9IiBcCisJCQkJJiYgY2ZfZml4X2NwcGZsYWdzPXllcworCisJCQlpZiB0ZXN0ICRjZl9maXhfY3BwZmxhZ3MgPSB5ZXMgOyB0aGVuCisJCQkJY2ZfbmV3X2V4dHJhX2NwcGZsYWdzPSIkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzICRjZl9hZGRfY2ZsYWdzIgorCQkJCWNvbnRpbnVlCisJCQllbGlmIHRlc3QgIiR7Y2ZfdHN0X2NmbGFnc30iID0gIlwiJyIgOyB0aGVuCisJCQkJY2ZfbmV3X2V4dHJhX2NwcGZsYWdzPSIkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzICRjZl9hZGRfY2ZsYWdzIgorCQkJCWNvbnRpbnVlCisJCQlmaQorCQkJOzsKKwkJZXNhYworCQljYXNlICIkQ1BQRkxBR1MiIGluCisJCSgqJGNmX2FkZF9jZmxhZ3MpCisJCQk7OworCQkoKikKKwkJCWNhc2UgJGNmX2FkZF9jZmxhZ3MgaW4KKwkJCSgtRCopCisJCQkJY2ZfdHN0X2NwcGZsYWdzPWBlY2hvICJ4JGNmX2FkZF9jZmxhZ3MiIHwgc2VkIC1lICdzL14uLi4vLycgLWUgJ3MvPS4qLy8nYAorCitDUFBGTEFHUz1gZWNobyAiJENQUEZMQUdTIiB8IFwKKwlzZWQJLWUgJ3MvLVtVRF0nIiRjZl90c3RfY3BwZmxhZ3MiJ1woPVteIAldKlwpXD9bIAldLyAvZycgXAorCQktZSAncy8tW1VEXSciJGNmX3RzdF9jcHBmbGFncyInXCg9W14gCV0qXClcPyQvL2cnYAorCisJCQkJOzsKKwkJCWVzYWMKKwkJCWNmX25ld19jcHBmbGFncz0iJGNmX25ld19jcHBmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJCTs7CisJCWVzYWMKKwkJOzsKKwkoKikKKwkJY2ZfbmV3X2NmbGFncz0iJGNmX25ld19jZmxhZ3MgJGNmX2FkZF9jZmxhZ3MiCisJCTs7CisJZXNhYworCTs7CisoeWVzKQorCWNmX25ld19leHRyYV9jcHBmbGFncz0iJGNmX25ld19leHRyYV9jcHBmbGFncyAkY2ZfYWRkX2NmbGFncyIKKworCWNmX3RzdF9jZmxhZ3M9YGVjaG8gJHtjZl9hZGRfY2ZsYWdzfSB8c2VkIC1lICdzL15bXiJdKiInXCcnLy8nYAorCisJdGVzdCAieCR7Y2ZfYWRkX2NmbGFnc30iICE9ICJ4JHtjZl90c3RfY2ZsYWdzfSIgXAorCQkmJiB0ZXN0IC16ICIke2NmX3RzdF9jZmxhZ3N9IiBcCisJCSYmIGNmX2ZpeF9jcHBmbGFncz1ubworCTs7Citlc2FjCitkb25lCisKK2lmIHRlc3QgLW4gIiRjZl9uZXdfY2ZsYWdzIiA7IHRoZW4KKwl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCWFkZCB0byBcJENGTEFHUyAkY2ZfbmV3X2NmbGFncyIgMT4mNgorCitlY2hvICIke2FzX21lOi1jb25maWd1cmV9OjEwNTE5OiB0ZXN0aW5nIGFkZCB0byBcJENGTEFHUyAkY2ZfbmV3X2NmbGFncyAuLi4iIDE+JjUKKworCUNGTEFHUz0iJENGTEFHUyAkY2ZfbmV3X2NmbGFncyIKK2ZpCisKK2lmIHRlc3QgLW4gIiRjZl9uZXdfY3BwZmxhZ3MiIDsgdGhlbgorCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJYWRkIHRvIFwkQ1BQRkxBR1MgJGNmX25ld19jcHBmbGFncyIgMT4mNgorCitlY2hvICIke2FzX21lOi1jb25maWd1cmV9OjEwNTI3OiB0ZXN0aW5nIGFkZCB0byBcJENQUEZMQUdTICRjZl9uZXdfY3BwZmxhZ3MgLi4uIiAxPiY1CisKKwlDUFBGTEFHUz0iJENQUEZMQUdTICRjZl9uZXdfY3BwZmxhZ3MiCitmaQorCitpZiB0ZXN0IC1uICIkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzIiA7IHRoZW4KKwl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCWFkZCB0byBcJEVYVFJBX0NQUEZMQUdTICRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MiIDE+JjYKKworZWNobyAiJHthc19tZTotY29uZmlndXJlfToxMDUzNTogdGVzdGluZyBhZGQgdG8gXCRFWFRSQV9DUFBGTEFHUyAkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzIC4uLiIgMT4mNQorCisJRVhUUkFfQ1BQRkxBR1M9IiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MgJEVYVFJBX0NQUEZMQUdTIgorZmkKKworZmkKKworaWYgdGVzdCAtbiAiJGNmX1hPUEVOX1NPVVJDRSIgJiYgdGVzdCAteiAiJGNmX2N2X3hvcGVuX3NvdXJjZSIgOyB0aGVuCisJZWNobyAiJGFzX21lOjEwNTQzOiBjaGVja2luZyBpZiBfWE9QRU5fU09VUkNFIHJlYWxseSBpcyBzZXQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiBfWE9QRU5fU09VUkNFIHJlYWxseSBpcyBzZXQuLi4gJEVDSE9fQyIgPiY2CisJY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMDU0NiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3RkbGliLmg+CitpbnQKK21haW4gKCkKK3sKKworI2lmbmRlZiBfWE9QRU5fU09VUkNFCittYWtlIGFuIGVycm9yCisjZW5kaWYKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTA1NjE6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEwNTY0OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjEwNTY3OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTA1NzA6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBjZl9YT1BFTl9TT1VSQ0Vfc2V0PXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitjZl9YT1BFTl9TT1VSQ0Vfc2V0PW5vCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisJZWNobyAiJGFzX21lOjEwNTc5OiByZXN1bHQ6ICRjZl9YT1BFTl9TT1VSQ0Vfc2V0IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9YT1BFTl9TT1VSQ0Vfc2V0IiA+JjYKKwlpZiB0ZXN0ICRjZl9YT1BFTl9TT1VSQ0Vfc2V0ID0geWVzCisJdGhlbgorCQljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDEwNTg0ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxzdGRsaWIuaD4KK2ludAorbWFpbiAoKQoreworCisjaWYgKF9YT1BFTl9TT1VSQ0UgLSAwKSA8ICRjZl9YT1BFTl9TT1VSQ0UKK21ha2UgYW4gZXJyb3IKKyNlbmRpZgorICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxMDU5OTogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTA2MDI6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTA2MDU6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMDYwODogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGNmX1hPUEVOX1NPVVJDRV9zZXRfb2s9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2NmX1hPUEVOX1NPVVJDRV9zZXRfb2s9bm8KK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKwkJaWYgdGVzdCAkY2ZfWE9QRU5fU09VUkNFX3NldF9vayA9IG5vCisJCXRoZW4KKwkJCXsgZWNobyAiJGFzX21lOjEwNjE5OiBXQVJOSU5HOiBfWE9QRU5fU09VUkNFIGlzIGxvd2VyIHRoYW4gcmVxdWVzdGVkIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogX1hPUEVOX1NPVVJDRSBpcyBsb3dlciB0aGFuIHJlcXVlc3RlZCIgPiYyO30KKwkJZmkKKwllbHNlCisKK2VjaG8gIiRhc19tZToxMDYyNDogY2hlY2tpbmcgaWYgd2Ugc2hvdWxkIGRlZmluZSBfWE9QRU5fU09VUkNFIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgd2Ugc2hvdWxkIGRlZmluZSBfWE9QRU5fU09VUkNFLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHtjZl9jdl94b3Blbl9zb3VyY2Urc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKworCWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTA2MzEgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKK2ludAorbWFpbiAoKQoreworCisjaWZuZGVmIF9YT1BFTl9TT1VSQ0UKK21ha2UgYW4gZXJyb3IKKyNlbmRpZgorICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxMDY1MDogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTA2NTM6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTA2NTY6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMDY1OTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGNmX2N2X3hvcGVuX3NvdXJjZT1ubworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitjZl9zYXZlPSIkQ1BQRkxBR1MiCisJIENQUEZMQUdTPSIkQ1BQRkxBR1MgLURfWE9QRU5fU09VUkNFPSRjZl9YT1BFTl9TT1VSQ0UiCisJIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTA2NjggImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKK2ludAorbWFpbiAoKQoreworCisjaWZkZWYgX1hPUEVOX1NPVVJDRQorbWFrZSBhbiBlcnJvcgorI2VuZGlmCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjEwNjg3OiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMDY5MDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToxMDY5MzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEwNjk2OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgY2ZfY3ZfeG9wZW5fc291cmNlPW5vCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2NmX2N2X3hvcGVuX3NvdXJjZT0kY2ZfWE9QRU5fU09VUkNFCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisJQ1BQRkxBR1M9IiRjZl9zYXZlIgorCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2ZpCitlY2hvICIkYXNfbWU6MTA3MTE6IHJlc3VsdDogJGNmX2N2X3hvcGVuX3NvdXJjZSIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfY3ZfeG9wZW5fc291cmNlIiA+JjYKKworaWYgdGVzdCAiJGNmX2N2X3hvcGVuX3NvdXJjZSIgIT0gbm8gOyB0aGVuCisKK0NGTEFHUz1gZWNobyAiJENGTEFHUyIgfCBcCisJc2VkCS1lICdzLy1bVURdJyJfWE9QRU5fU09VUkNFIidcKD1bXiAJXSpcKVw/WyAJXS8gL2cnIFwKKwkJLWUgJ3MvLVtVRF0nIl9YT1BFTl9TT1VSQ0UiJ1woPVteIAldKlwpXD8kLy9nJ2AKKworQ1BQRkxBR1M9YGVjaG8gIiRDUFBGTEFHUyIgfCBcCisJc2VkCS1lICdzLy1bVURdJyJfWE9QRU5fU09VUkNFIidcKD1bXiAJXSpcKVw/WyAJXS8gL2cnIFwKKwkJLWUgJ3MvLVtVRF0nIl9YT1BFTl9TT1VSQ0UiJ1woPVteIAldKlwpXD8kLy9nJ2AKKworCWNmX3RlbXBfeG9wZW5fc291cmNlPSItRF9YT1BFTl9TT1VSQ0U9JGNmX2N2X3hvcGVuX3NvdXJjZSIKKworY2ZfZml4X2NwcGZsYWdzPW5vCitjZl9uZXdfY2ZsYWdzPQorY2ZfbmV3X2NwcGZsYWdzPQorY2ZfbmV3X2V4dHJhX2NwcGZsYWdzPQorCitmb3IgY2ZfYWRkX2NmbGFncyBpbiAkY2ZfdGVtcF94b3Blbl9zb3VyY2UKK2RvCitjYXNlICRjZl9maXhfY3BwZmxhZ3MgaW4KKyhubykKKwljYXNlICRjZl9hZGRfY2ZsYWdzIGluCisJKC11bmRlZnwtbm9zdGRpbmMqfC1JKnwtRCp8LVUqfC1FfC1QfC1DKQorCQljYXNlICRjZl9hZGRfY2ZsYWdzIGluCisJCSgtRCopCisJCQljZl90c3RfY2ZsYWdzPWBlY2hvICR7Y2ZfYWRkX2NmbGFnc30gfHNlZCAtZSAncy9eLURbXj1dKj0nXCcnXCJbXiJdKi8vJ2AKKworCQkJdGVzdCAieCR7Y2ZfYWRkX2NmbGFnc30iICE9ICJ4JHtjZl90c3RfY2ZsYWdzfSIgXAorCQkJCSYmIHRlc3QgLXogIiR7Y2ZfdHN0X2NmbGFnc30iIFwKKwkJCQkmJiBjZl9maXhfY3BwZmxhZ3M9eWVzCisKKwkJCWlmIHRlc3QgJGNmX2ZpeF9jcHBmbGFncyA9IHllcyA7IHRoZW4KKwkJCQljZl9uZXdfZXh0cmFfY3BwZmxhZ3M9IiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MgJGNmX2FkZF9jZmxhZ3MiCisJCQkJY29udGludWUKKwkJCWVsaWYgdGVzdCAiJHtjZl90c3RfY2ZsYWdzfSIgPSAiXCInIiA7IHRoZW4KKwkJCQljZl9uZXdfZXh0cmFfY3BwZmxhZ3M9IiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MgJGNmX2FkZF9jZmxhZ3MiCisJCQkJY29udGludWUKKwkJCWZpCisJCQk7OworCQllc2FjCisJCWNhc2UgIiRDUFBGTEFHUyIgaW4KKwkJKCokY2ZfYWRkX2NmbGFncykKKwkJCTs7CisJCSgqKQorCQkJY2FzZSAkY2ZfYWRkX2NmbGFncyBpbgorCQkJKC1EKikKKwkJCQljZl90c3RfY3BwZmxhZ3M9YGVjaG8gIngkY2ZfYWRkX2NmbGFncyIgfCBzZWQgLWUgJ3MvXi4uLi8vJyAtZSAncy89LiovLydgCisKK0NQUEZMQUdTPWBlY2hvICIkQ1BQRkxBR1MiIHwgXAorCXNlZAktZSAncy8tW1VEXSciJGNmX3RzdF9jcHBmbGFncyInXCg9W14gCV0qXClcP1sgCV0vIC9nJyBcCisJCS1lICdzLy1bVURdJyIkY2ZfdHN0X2NwcGZsYWdzIidcKD1bXiAJXSpcKVw/JC8vZydgCisKKwkJCQk7OworCQkJZXNhYworCQkJY2ZfbmV3X2NwcGZsYWdzPSIkY2ZfbmV3X2NwcGZsYWdzICRjZl9hZGRfY2ZsYWdzIgorCQkJOzsKKwkJZXNhYworCQk7OworCSgqKQorCQljZl9uZXdfY2ZsYWdzPSIkY2ZfbmV3X2NmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJOzsKKwllc2FjCisJOzsKKyh5ZXMpCisJY2ZfbmV3X2V4dHJhX2NwcGZsYWdzPSIkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzICRjZl9hZGRfY2ZsYWdzIgorCisJY2ZfdHN0X2NmbGFncz1gZWNobyAke2NmX2FkZF9jZmxhZ3N9IHxzZWQgLWUgJ3MvXlteIl0qIidcJycvLydgCisKKwl0ZXN0ICJ4JHtjZl9hZGRfY2ZsYWdzfSIgIT0gIngke2NmX3RzdF9jZmxhZ3N9IiBcCisJCSYmIHRlc3QgLXogIiR7Y2ZfdHN0X2NmbGFnc30iIFwKKwkJJiYgY2ZfZml4X2NwcGZsYWdzPW5vCisJOzsKK2VzYWMKK2RvbmUKKworaWYgdGVzdCAtbiAiJGNmX25ld19jZmxhZ3MiIDsgdGhlbgorCisJQ0ZMQUdTPSIkQ0ZMQUdTICRjZl9uZXdfY2ZsYWdzIgorZmkKKworaWYgdGVzdCAtbiAiJGNmX25ld19jcHBmbGFncyIgOyB0aGVuCisKKwlDUFBGTEFHUz0iJENQUEZMQUdTICRjZl9uZXdfY3BwZmxhZ3MiCitmaQorCitpZiB0ZXN0IC1uICIkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzIiA7IHRoZW4KKworCUVYVFJBX0NQUEZMQUdTPSIkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzICRFWFRSQV9DUFBGTEFHUyIKK2ZpCisKK2ZpCisKKwlmaQorZmkKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWxhcmdlZmlsZSBvciAtLWRpc2FibGUtbGFyZ2VmaWxlIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2xhcmdlZmlsZStzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9IiRlbmFibGVfbGFyZ2VmaWxlIgorCitmaTsKK2lmIHRlc3QgIiRlbmFibGVfbGFyZ2VmaWxlIiAhPSBubzsgdGhlbgorCisgIGVjaG8gIiRhc19tZToxMDgxNjogY2hlY2tpbmcgZm9yIHNwZWNpYWwgQyBjb21waWxlciBvcHRpb25zIG5lZWRlZCBmb3IgbGFyZ2UgZmlsZXMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3BlY2lhbCBDIGNvbXBpbGVyIG9wdGlvbnMgbmVlZGVkIGZvciBsYXJnZSBmaWxlcy4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3Zfc3lzX2xhcmdlZmlsZV9DQytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBhY19jdl9zeXNfbGFyZ2VmaWxlX0NDPW5vCisgICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorICAgICAgIGFjX3NhdmVfQ0M9JENDCisgICAgICAgd2hpbGUgOjsgZG8KKyAgICAgCSAjIElSSVggNi4yIGFuZCBsYXRlciBkbyBub3Qgc3VwcG9ydCBsYXJnZSBmaWxlcyBieSBkZWZhdWx0LAorICAgICAJICMgc28gdXNlIHRoZSBDIGNvbXBpbGVyJ3MgLW4zMiBvcHRpb24gaWYgdGhhdCBoZWxwcy4KKyAgICAgICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTA4MjggImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorIC8qIENoZWNrIHRoYXQgb2ZmX3QgY2FuIHJlcHJlc2VudCAyKio2MyAtIDEgY29ycmVjdGx5LgorICAgIFdlIGNhbid0IHNpbXBseSBkZWZpbmUgTEFSR0VfT0ZGX1QgdG8gYmUgOTIyMzM3MjAzNjg1NDc3NTgwNywKKyAgICBzaW5jZSBzb21lIEMrKyBjb21waWxlcnMgbWFzcXVlcmFkaW5nIGFzIEMgY29tcGlsZXJzCisgICAgaW5jb3JyZWN0bHkgcmVqZWN0IDkyMjMzNzIwMzY4NTQ3NzU4MDcuICAqLworI2RlZmluZSBMQVJHRV9PRkZfVCAoKChvZmZfdCkgMSA8PCA2MikgLSAxICsgKChvZmZfdCkgMSA8PCA2MikpCisgIGludCBvZmZfdF9pc19sYXJnZVsoTEFSR0VfT0ZGX1QgJSAyMTQ3NDgzNjI5ID09IDcyMQorCQkgICAgICAgJiYgTEFSR0VfT0ZGX1QgJSAyMTQ3NDgzNjQ3ID09IDEpCisJCSAgICAgID8gMSA6IC0xXTsKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKKyAgICAgCSBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxMDg0ODogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTA4NTE6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTA4NTQ6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMDg1NzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGJyZWFrCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgICAgIAkgQ0M9IiRDQyAtbjMyIgorICAgICAJIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjEwODY3OiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMDg3MDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToxMDg3MzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEwODc2OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3Zfc3lzX2xhcmdlZmlsZV9DQz0nIC1uMzInOyBicmVhaworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorICAgICAgICAgYnJlYWsKKyAgICAgICBkb25lCisgICAgICAgQ0M9JGFjX3NhdmVfQ0MKKyAgICAgICBybSAtZiBjb25mdGVzdC4kYWNfZXh0CisgICAgZmkKK2ZpCitlY2hvICIkYXNfbWU6MTA4OTA6IHJlc3VsdDogJGFjX2N2X3N5c19sYXJnZWZpbGVfQ0MiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3N5c19sYXJnZWZpbGVfQ0MiID4mNgorICBpZiB0ZXN0ICIkYWNfY3Zfc3lzX2xhcmdlZmlsZV9DQyIgIT0gbm87IHRoZW4KKyAgICBDQz0kQ0MkYWNfY3Zfc3lzX2xhcmdlZmlsZV9DQworICBmaQorCisgIGVjaG8gIiRhc19tZToxMDg5NjogY2hlY2tpbmcgZm9yIF9GSUxFX09GRlNFVF9CSVRTIHZhbHVlIG5lZWRlZCBmb3IgbGFyZ2UgZmlsZXMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgX0ZJTEVfT0ZGU0VUX0JJVFMgdmFsdWUgbmVlZGVkIGZvciBsYXJnZSBmaWxlcy4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3Zfc3lzX2ZpbGVfb2Zmc2V0X2JpdHMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgd2hpbGUgOjsgZG8KKyAgYWNfY3Zfc3lzX2ZpbGVfb2Zmc2V0X2JpdHM9bm8KKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMDkwNCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgLyogQ2hlY2sgdGhhdCBvZmZfdCBjYW4gcmVwcmVzZW50IDIqKjYzIC0gMSBjb3JyZWN0bHkuCisgICAgV2UgY2FuJ3Qgc2ltcGx5IGRlZmluZSBMQVJHRV9PRkZfVCB0byBiZSA5MjIzMzcyMDM2ODU0Nzc1ODA3LAorICAgIHNpbmNlIHNvbWUgQysrIGNvbXBpbGVycyBtYXNxdWVyYWRpbmcgYXMgQyBjb21waWxlcnMKKyAgICBpbmNvcnJlY3RseSByZWplY3QgOTIyMzM3MjAzNjg1NDc3NTgwNy4gICovCisjZGVmaW5lIExBUkdFX09GRl9UICgoKG9mZl90KSAxIDw8IDYyKSAtIDEgKyAoKG9mZl90KSAxIDw8IDYyKSkKKyAgaW50IG9mZl90X2lzX2xhcmdlWyhMQVJHRV9PRkZfVCAlIDIxNDc0ODM2MjkgPT0gNzIxCisJCSAgICAgICAmJiBMQVJHRV9PRkZfVCAlIDIxNDc0ODM2NDcgPT0gMSkKKwkJICAgICAgPyAxIDogLTFdOworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTA5MjQ6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEwOTI3OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjEwOTMwOiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTA5MzM6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBicmVhaworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTA5NDIgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2RlZmluZSBfRklMRV9PRkZTRVRfQklUUyA2NAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorIC8qIENoZWNrIHRoYXQgb2ZmX3QgY2FuIHJlcHJlc2VudCAyKio2MyAtIDEgY29ycmVjdGx5LgorICAgIFdlIGNhbid0IHNpbXBseSBkZWZpbmUgTEFSR0VfT0ZGX1QgdG8gYmUgOTIyMzM3MjAzNjg1NDc3NTgwNywKKyAgICBzaW5jZSBzb21lIEMrKyBjb21waWxlcnMgbWFzcXVlcmFkaW5nIGFzIEMgY29tcGlsZXJzCisgICAgaW5jb3JyZWN0bHkgcmVqZWN0IDkyMjMzNzIwMzY4NTQ3NzU4MDcuICAqLworI2RlZmluZSBMQVJHRV9PRkZfVCAoKChvZmZfdCkgMSA8PCA2MikgLSAxICsgKChvZmZfdCkgMSA8PCA2MikpCisgIGludCBvZmZfdF9pc19sYXJnZVsoTEFSR0VfT0ZGX1QgJSAyMTQ3NDgzNjI5ID09IDcyMQorCQkgICAgICAgJiYgTEFSR0VfT0ZGX1QgJSAyMTQ3NDgzNjQ3ID09IDEpCisJCSAgICAgID8gMSA6IC0xXTsKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjEwOTYzOiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMDk2NjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToxMDk2OTogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEwOTcyOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3Zfc3lzX2ZpbGVfb2Zmc2V0X2JpdHM9NjQ7IGJyZWFrCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgYnJlYWsKK2RvbmUKK2ZpCitlY2hvICIkYXNfbWU6MTA5ODM6IHJlc3VsdDogJGFjX2N2X3N5c19maWxlX29mZnNldF9iaXRzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9zeXNfZmlsZV9vZmZzZXRfYml0cyIgPiY2CitpZiB0ZXN0ICIkYWNfY3Zfc3lzX2ZpbGVfb2Zmc2V0X2JpdHMiICE9IG5vOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxFT0YKKyNkZWZpbmUgX0ZJTEVfT0ZGU0VUX0JJVFMgJGFjX2N2X3N5c19maWxlX29mZnNldF9iaXRzCitFT0YKKworZmkKK3JtIC1yZiBjb25mdGVzdCoKKyAgZWNobyAiJGFzX21lOjEwOTkzOiBjaGVja2luZyBmb3IgX0xBUkdFX0ZJTEVTIHZhbHVlIG5lZWRlZCBmb3IgbGFyZ2UgZmlsZXMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgX0xBUkdFX0ZJTEVTIHZhbHVlIG5lZWRlZCBmb3IgbGFyZ2UgZmlsZXMuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3N5c19sYXJnZV9maWxlcytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICB3aGlsZSA6OyBkbworICBhY19jdl9zeXNfbGFyZ2VfZmlsZXM9bm8KKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMTAwMSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgLyogQ2hlY2sgdGhhdCBvZmZfdCBjYW4gcmVwcmVzZW50IDIqKjYzIC0gMSBjb3JyZWN0bHkuCisgICAgV2UgY2FuJ3Qgc2ltcGx5IGRlZmluZSBMQVJHRV9PRkZfVCB0byBiZSA5MjIzMzcyMDM2ODU0Nzc1ODA3LAorICAgIHNpbmNlIHNvbWUgQysrIGNvbXBpbGVycyBtYXNxdWVyYWRpbmcgYXMgQyBjb21waWxlcnMKKyAgICBpbmNvcnJlY3RseSByZWplY3QgOTIyMzM3MjAzNjg1NDc3NTgwNy4gICovCisjZGVmaW5lIExBUkdFX09GRl9UICgoKG9mZl90KSAxIDw8IDYyKSAtIDEgKyAoKG9mZl90KSAxIDw8IDYyKSkKKyAgaW50IG9mZl90X2lzX2xhcmdlWyhMQVJHRV9PRkZfVCAlIDIxNDc0ODM2MjkgPT0gNzIxCisJCSAgICAgICAmJiBMQVJHRV9PRkZfVCAlIDIxNDc0ODM2NDcgPT0gMSkKKwkJICAgICAgPyAxIDogLTFdOworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTEwMjE6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjExMDI0OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjExMDI3OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTEwMzA6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBicmVhaworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTEwMzkgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2RlZmluZSBfTEFSR0VfRklMRVMgMQorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorIC8qIENoZWNrIHRoYXQgb2ZmX3QgY2FuIHJlcHJlc2VudCAyKio2MyAtIDEgY29ycmVjdGx5LgorICAgIFdlIGNhbid0IHNpbXBseSBkZWZpbmUgTEFSR0VfT0ZGX1QgdG8gYmUgOTIyMzM3MjAzNjg1NDc3NTgwNywKKyAgICBzaW5jZSBzb21lIEMrKyBjb21waWxlcnMgbWFzcXVlcmFkaW5nIGFzIEMgY29tcGlsZXJzCisgICAgaW5jb3JyZWN0bHkgcmVqZWN0IDkyMjMzNzIwMzY4NTQ3NzU4MDcuICAqLworI2RlZmluZSBMQVJHRV9PRkZfVCAoKChvZmZfdCkgMSA8PCA2MikgLSAxICsgKChvZmZfdCkgMSA8PCA2MikpCisgIGludCBvZmZfdF9pc19sYXJnZVsoTEFSR0VfT0ZGX1QgJSAyMTQ3NDgzNjI5ID09IDcyMQorCQkgICAgICAgJiYgTEFSR0VfT0ZGX1QgJSAyMTQ3NDgzNjQ3ID09IDEpCisJCSAgICAgID8gMSA6IC0xXTsKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjExMDYwOiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMTA2MzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToxMTA2NjogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjExMDY5OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3Zfc3lzX2xhcmdlX2ZpbGVzPTE7IGJyZWFrCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgYnJlYWsKK2RvbmUKK2ZpCitlY2hvICIkYXNfbWU6MTEwODA6IHJlc3VsdDogJGFjX2N2X3N5c19sYXJnZV9maWxlcyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3Zfc3lzX2xhcmdlX2ZpbGVzIiA+JjYKK2lmIHRlc3QgIiRhY19jdl9zeXNfbGFyZ2VfZmlsZXMiICE9IG5vOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxFT0YKKyNkZWZpbmUgX0xBUkdFX0ZJTEVTICRhY19jdl9zeXNfbGFyZ2VfZmlsZXMKK0VPRgorCitmaQorcm0gLXJmIGNvbmZ0ZXN0KgorZmkKKworCWlmIHRlc3QgIiRlbmFibGVfbGFyZ2VmaWxlIiAhPSBubyA7IHRoZW4KKwllY2hvICIkYXNfbWU6MTEwOTM6IGNoZWNraW5nIGZvciBfTEFSR0VGSUxFX1NPVVJDRSB2YWx1ZSBuZWVkZWQgZm9yIGxhcmdlIGZpbGVzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIF9MQVJHRUZJTEVfU09VUkNFIHZhbHVlIG5lZWRlZCBmb3IgbGFyZ2UgZmlsZXMuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3N5c19sYXJnZWZpbGVfc291cmNlK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIHdoaWxlIDo7IGRvCisgIGFjX2N2X3N5c19sYXJnZWZpbGVfc291cmNlPW5vCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTExMDEgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CitpbnQKK21haW4gKCkKK3sKK3JldHVybiAhZnNlZWtvOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxMTExMzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTExMTY6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTExMTk6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMTEyMjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGJyZWFrCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMTEzMSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjZGVmaW5lIF9MQVJHRUZJTEVfU09VUkNFIDEKKyNpbmNsdWRlIDxzdGRpby5oPgoraW50CittYWluICgpCit7CityZXR1cm4gIWZzZWVrbzsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTExNDQ6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjExMTQ3OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjExMTUwOiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTExNTM6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9zeXNfbGFyZ2VmaWxlX3NvdXJjZT0xOyBicmVhaworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGJyZWFrCitkb25lCitmaQorZWNobyAiJGFzX21lOjExMTY0OiByZXN1bHQ6ICRhY19jdl9zeXNfbGFyZ2VmaWxlX3NvdXJjZSIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3Zfc3lzX2xhcmdlZmlsZV9zb3VyY2UiID4mNgoraWYgdGVzdCAiJGFjX2N2X3N5c19sYXJnZWZpbGVfc291cmNlIiAhPSBubzsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8RU9GCisjZGVmaW5lIF9MQVJHRUZJTEVfU09VUkNFICRhY19jdl9zeXNfbGFyZ2VmaWxlX3NvdXJjZQorRU9GCisKK2ZpCitybSAtcmYgY29uZnRlc3QqCisKKyMgV2UgdXNlZCB0byB0cnkgZGVmaW5pbmcgX1hPUEVOX1NPVVJDRT01MDAgdG9vLCB0byB3b3JrIGFyb3VuZCBhIGJ1ZworIyBpbiBnbGliYyAyLjEuMywgYnV0IHRoYXQgYnJlYWtzIHRvbyBtYW55IG90aGVyIHRoaW5ncy4KKyMgSWYgeW91IHdhbnQgZnNlZWtvIGFuZCBmdGVsbG8gd2l0aCBnbGliYywgdXBncmFkZSB0byBhIGZpeGVkIGdsaWJjLgorZWNobyAiJGFzX21lOjExMTc4OiBjaGVja2luZyBmb3IgZnNlZWtvIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGZzZWVrby4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfZnVuY19mc2Vla28rc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMTE4NCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KK2ludAorbWFpbiAoKQoreworcmV0dXJuIGZzZWVrbyAmJiBmc2Vla28gKHN0ZGluLCAwLCAwKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjExMTk2OiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMTE5OTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjExMjAyOiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTEyMDU6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9mdW5jX2ZzZWVrbz15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorYWNfY3ZfZnVuY19mc2Vla289bm8KK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZWNobyAiJGFzX21lOjExMjE1OiByZXN1bHQ6ICRhY19jdl9mdW5jX2ZzZWVrbyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfZnVuY19mc2Vla28iID4mNgoraWYgdGVzdCAkYWNfY3ZfZnVuY19mc2Vla28gPSB5ZXM7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9GU0VFS08gMQorRU9GCisKK2ZpCisKKwkjIE5vcm1hbGx5IHdlIHdvdWxkIGNvbGxlY3QgdGhlc2UgZGVmaW5pdGlvbnMgaW4gdGhlIGNvbmZpZy5oLAorCSMgYnV0IChsaWtlIF9YT1BFTl9TT1VSQ0UpLCBzb21lIGVudmlyb25tZW50cyByZWx5IG9uIGhhdmluZyB0aGVzZQorCSMgZGVmaW5lZCBiZWZvcmUgYW55IG9mIHRoZSBzeXN0ZW0gaGVhZGVycyBhcmUgaW5jbHVkZWQuICBBbm90aGVyCisJIyBjYXNlIGNvbWVzIHVwIHdpdGggQysrLCBlLmcuLCBvbiBBSVggdGhlIGNvbXBpbGVyIGNvbXBpbGVzIHRoZQorCSMgaGVhZGVyIGZpbGVzIGJ5IHRoZW1zZWx2ZXMgYmVmb3JlIGxvb2tpbmcgYXQgdGhlIGJvZHkgZmlsZXMgaXQgaXMKKwkjIHRvbGQgdG8gY29tcGlsZS4gIEZvciBuY3Vyc2VzLCB0aG9zZSBoZWFkZXIgZmlsZXMgZG8gbm90IGluY2x1ZGUKKwkjIHRoZSBjb25maWcuaAorCXRlc3QgIiRhY19jdl9zeXNfbGFyZ2VfZmlsZXMiICAgICAgIT0gbm8gJiYgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRF9MQVJHRV9GSUxFUyAiCisJdGVzdCAiJGFjX2N2X3N5c19sYXJnZWZpbGVfc291cmNlIiAhPSBubyAmJiBDUFBGTEFHUz0iJENQUEZMQUdTIC1EX0xBUkdFRklMRV9TT1VSQ0UgIgorCXRlc3QgIiRhY19jdl9zeXNfZmlsZV9vZmZzZXRfYml0cyIgIT0gbm8gJiYgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRF9GSUxFX09GRlNFVF9CSVRTPSRhY19jdl9zeXNfZmlsZV9vZmZzZXRfYml0cyAiCisKKwllY2hvICIkYXNfbWU6MTEyMzY6IGNoZWNraW5nIHdoZXRoZXIgdG8gdXNlIHN0cnVjdCBkaXJlbnQ2NCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdG8gdXNlIHN0cnVjdCBkaXJlbnQ2NC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7Y2ZfY3Zfc3RydWN0X2RpcmVudDY0K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKKwkJY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMTI0MyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxkaXJlbnQuaD4KKworaW50CittYWluICgpCit7CisKKwkJLyogaWYgdHJhbnNpdGlvbmFsIGxhcmdlZmlsZSBzdXBwb3J0IGlzIHNldHVwLCB0aGlzIGlzIHRydWUgKi8KKwkJZXh0ZXJuIHN0cnVjdCBkaXJlbnQ2NCAqIHJlYWRkaXIoRElSICopOworCQlzdHJ1Y3QgZGlyZW50NjQgKnggPSByZWFkZGlyKChESVIgKikwKTsKKwkJc3RydWN0IGRpcmVudCAqeSA9IHJlYWRkaXIoKERJUiAqKTApOworCQlpbnQgeiA9IHggLSB5OworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjExMjY0OiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMTI2NzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToxMTI3MDogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjExMjczOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgY2ZfY3Zfc3RydWN0X2RpcmVudDY0PXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitjZl9jdl9zdHJ1Y3RfZGlyZW50NjQ9bm8KK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworZmkKK2VjaG8gIiRhc19tZToxMTI4NDogcmVzdWx0OiAkY2ZfY3Zfc3RydWN0X2RpcmVudDY0IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9jdl9zdHJ1Y3RfZGlyZW50NjQiID4mNgorCXRlc3QgIiRjZl9jdl9zdHJ1Y3RfZGlyZW50NjQiID0geWVzICYmCitjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9ESVJFTlQ2NCAxCitFT0YKKworCWZpCisKKyMjIyBFbmFibGUgY29tcGlsaW5nLWluIHJjcyBpZCdzCitlY2hvICIkYXNfbWU6MTEyOTQ6IGNoZWNraW5nIGlmIFJDUyBpZGVudGlmaWVycyBzaG91bGQgYmUgY29tcGlsZWQtaW4iID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiBSQ1MgaWRlbnRpZmllcnMgc2hvdWxkIGJlIGNvbXBpbGVkLWluLi4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXJjcy1pZHMgb3IgLS13aXRob3V0LXJjcy1pZHMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3Jjc19pZHMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfcmNzX2lkcyIKKyAgd2l0aF9yY3NfaWRzPSR3aXRodmFsCitlbHNlCisgIHdpdGhfcmNzX2lkcz1ubworZmk7CitlY2hvICIkYXNfbWU6MTEzMDQ6IHJlc3VsdDogJHdpdGhfcmNzX2lkcyIgPiY1CitlY2hvICIke0VDSE9fVH0kd2l0aF9yY3NfaWRzIiA+JjYKK3Rlc3QgIiR3aXRoX3Jjc19pZHMiID0geWVzICYmCitjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBVU0VfUkNTX0lEUyAxCitFT0YKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIyMgTm90ZSB0aGF0IHNvbWUgZnVuY3Rpb25zIChzdWNoIGFzIGNvbnN0KSBhcmUgbm9ybWFsbHkgZGlzYWJsZWQgYW55d2F5LgorZWNobyAiJGFzX21lOjExMzE0OiBjaGVja2luZyBpZiB5b3Ugd2FudCB0byBidWlsZCB3aXRoIGZ1bmN0aW9uIGV4dGVuc2lvbnMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB5b3Ugd2FudCB0byBidWlsZCB3aXRoIGZ1bmN0aW9uIGV4dGVuc2lvbnMuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1leHQtZnVuY3Mgb3IgLS1kaXNhYmxlLWV4dC1mdW5jcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9leHRfZnVuY3Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSIkZW5hYmxlX2V4dF9mdW5jcyIKKyAgd2l0aF9leHRfZnVuY3M9JGVuYWJsZXZhbAorZWxzZQorICB3aXRoX2V4dF9mdW5jcz15ZXMKK2ZpOworZWNobyAiJGFzX21lOjExMzI0OiByZXN1bHQ6ICR3aXRoX2V4dF9mdW5jcyIgPiY1CitlY2hvICIke0VDSE9fVH0kd2l0aF9leHRfZnVuY3MiID4mNgoraWYgdGVzdCAiJHdpdGhfZXh0X2Z1bmNzIiA9IHllcyA7IHRoZW4KKwlOQ1VSU0VTX0VYVF9GVU5DUz0xCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEhBVkVfVVNFX0RFRkFVTFRfQ09MT1JTIDEKK0VPRgorCitjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBOQ1VSU0VTX0VYVF9GVU5DUyAxCitFT0YKKworZWxzZQorCU5DVVJTRVNfRVhUX0ZVTkNTPTAKK2ZpCisKKyMjIyAgIHVzZSBvcHRpb24gLS1lbmFibGUtY29uc3QgdG8gdHVybiBvbiB1c2Ugb2YgY29uc3QgYmV5b25kIHRoYXQgaW4gWFNJLgorZWNobyAiJGFzX21lOjExMzQyOiBjaGVja2luZyBmb3IgZXh0ZW5kZWQgdXNlIG9mIGNvbnN0IGtleXdvcmQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZXh0ZW5kZWQgdXNlIG9mIGNvbnN0IGtleXdvcmQuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1jb25zdCBvciAtLWRpc2FibGUtY29uc3Qgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfY29uc3Qrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSIkZW5hYmxlX2NvbnN0IgorICB3aXRoX2V4dF9jb25zdD0kZW5hYmxldmFsCitlbHNlCisgIHdpdGhfZXh0X2NvbnN0PW5vCitmaTsKK2VjaG8gIiRhc19tZToxMTM1MjogcmVzdWx0OiAkd2l0aF9leHRfY29uc3QiID4mNQorZWNobyAiJHtFQ0hPX1R9JHdpdGhfZXh0X2NvbnN0IiA+JjYKK05DVVJTRVNfQ09OU1Q9Jy8qbm90aGluZyovJworaWYgdGVzdCAiJHdpdGhfZXh0X2NvbnN0IiA9IHllcyA7IHRoZW4KKwlOQ1VSU0VTX0NPTlNUPWNvbnN0CitmaQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRoZXNlIG9wdGlvbnMgYXJlIHJlbGF0aXZlbHkgc2FmZSB0byBleHBlcmltZW50IHdpdGguCisKK2VjaG8gIiRhc19tZToxMTM2MjogY2hlY2tpbmcgaWYgeW91IHdhbnQgYWxsIGRldmVsb3BtZW50IGNvZGUiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB5b3Ugd2FudCBhbGwgZGV2ZWxvcG1lbnQgY29kZS4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1kZXZlbG9wIG9yIC0td2l0aG91dC1kZXZlbG9wIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9kZXZlbG9wK3NldH0iID0gc2V0OyB0aGVuCisgIHdpdGh2YWw9IiR3aXRoX2RldmVsb3AiCisgIHdpdGhfZGV2ZWxvcD0kd2l0aHZhbAorZWxzZQorICB3aXRoX2RldmVsb3A9bm8KK2ZpOworZWNobyAiJGFzX21lOjExMzcyOiByZXN1bHQ6ICR3aXRoX2RldmVsb3AiID4mNQorZWNobyAiJHtFQ0hPX1R9JHdpdGhfZGV2ZWxvcCIgPiY2CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGhlc2UgYXJlIGp1c3QgZXhwZXJpbWVudGFsLCBwcm9iYWJseSBzaG91bGQgbm90IGJlIGluIGEgcGFja2FnZToKKworIyBUaGlzIGlzIHN0aWxsIGV4cGVyaW1lbnRhbCAoMjAwODAzMjkpLCBidXQgc2hvdWxkIHVsdGltYXRlbHkgYmUgbW92ZWQgdG8KKyMgdGhlIHNjcmlwdC1ibG9jayAtLXdpdGgtbm9ybWFsLCBldGMuCisKK2VjaG8gIiRhc19tZToxMTM4MTogY2hlY2tpbmcgaWYgeW91IHdhbnQgdG8gbGluayB3aXRoIHRoZSBwdGhyZWFkIGxpYnJhcnkiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB5b3Ugd2FudCB0byBsaW5rIHdpdGggdGhlIHB0aHJlYWQgbGlicmFyeS4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1wdGhyZWFkIG9yIC0td2l0aG91dC1wdGhyZWFkIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9wdGhyZWFkK3NldH0iID0gc2V0OyB0aGVuCisgIHdpdGh2YWw9IiR3aXRoX3B0aHJlYWQiCisgIHdpdGhfcHRocmVhZD0kd2l0aHZhbAorZWxzZQorICB3aXRoX3B0aHJlYWQ9bm8KK2ZpOworZWNobyAiJGFzX21lOjExMzkxOiByZXN1bHQ6ICR3aXRoX3B0aHJlYWQiID4mNQorZWNobyAiJHtFQ0hPX1R9JHdpdGhfcHRocmVhZCIgPiY2CisKK2lmIHRlc3QgIiR3aXRoX3B0aHJlYWQiICE9IG5vIDsgdGhlbgorCWVjaG8gIiRhc19tZToxMTM5NTogY2hlY2tpbmcgZm9yIHB0aHJlYWQuaCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBwdGhyZWFkLmguLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl9wdGhyZWFkX2grc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMTQwMSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8cHRocmVhZC5oPgorX0FDRU9GCitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxMTQwNTogXCIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHRcIiIpID4mNQorICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBlZ3JlcCAtdiAnXiAqXCsnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6MTE0MTE6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworICBlbHNlCisgICAgYWNfY3BwX2Vycj0KKyAgZmkKK2Vsc2UKKyAgYWNfY3BwX2Vycj15ZXMKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KKyAgYWNfY3ZfaGVhZGVyX3B0aHJlYWRfaD15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIGFjX2N2X2hlYWRlcl9wdGhyZWFkX2g9bm8KK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorZmkKK2VjaG8gIiRhc19tZToxMTQzMDogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3B0aHJlYWRfaCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGVhZGVyX3B0aHJlYWRfaCIgPiY2CitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfcHRocmVhZF9oID0geWVzOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEhBVkVfUFRIUkVBRFNfSCAxCitFT0YKKworCWZvciBjZl9saWJfcHRocmVhZCBpbiBwdGhyZWFkIGNfcgorCWRvCisJICAgIGVjaG8gIiRhc19tZToxMTQ0MDogY2hlY2tpbmcgaWYgd2UgY2FuIGxpbmsgd2l0aCB0aGUgJGNmX2xpYl9wdGhyZWFkIGxpYnJhcnkiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB3ZSBjYW4gbGluayB3aXRoIHRoZSAkY2ZfbGliX3B0aHJlYWQgbGlicmFyeS4uLiAkRUNIT19DIiA+JjYKKwkgICAgY2Zfc2F2ZV9MSUJTPSIkTElCUyIKKworY2ZfYWRkX2xpYnM9Ii1sJGNmX2xpYl9wdGhyZWFkIgorIyBGaWx0ZXIgb3V0IGR1cGxpY2F0ZXMgLSB0aGlzIGhhcHBlbnMgd2l0aCBiYWRseS1kZXNpZ25lZCAiLnBjIiBmaWxlcy4uLgorZm9yIGNmX2FkZF8xbGliIGluICRMSUJTCitkbworCWZvciBjZl9hZGRfMmxpYiBpbiAkY2ZfYWRkX2xpYnMKKwlkbworCQlpZiB0ZXN0ICJ4JGNmX2FkZF8xbGliIiA9ICJ4JGNmX2FkZF8ybGliIgorCQl0aGVuCisJCQljZl9hZGRfMWxpYj0KKwkJCWJyZWFrCisJCWZpCisJZG9uZQorCXRlc3QgLW4gIiRjZl9hZGRfMWxpYiIgJiYgY2ZfYWRkX2xpYnM9IiRjZl9hZGRfbGlicyAkY2ZfYWRkXzFsaWIiCitkb25lCitMSUJTPSIkY2ZfYWRkX2xpYnMiCisKKwkgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMTQ2MSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisKK2ludAorbWFpbiAoKQoreworCisJCWludCByYyA9IHB0aHJlYWRfY3JlYXRlKDAsMCwwLDApOworCQlpbnQgcjIgPSBwdGhyZWFkX211dGV4YXR0cl9zZXR0eXBlKDAsIDApOworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxMTQ3ODogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTE0ODE6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToxMTQ4NDogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjExNDg3OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgd2l0aF9wdGhyZWFkPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1Cit3aXRoX3B0aHJlYWQ9bm8KK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisJICAgIExJQlM9IiRjZl9zYXZlX0xJQlMiCisJICAgIGVjaG8gIiRhc19tZToxMTQ5NzogcmVzdWx0OiAkd2l0aF9wdGhyZWFkIiA+JjUKK2VjaG8gIiR7RUNIT19UfSR3aXRoX3B0aHJlYWQiID4mNgorCSAgICB0ZXN0ICIkd2l0aF9wdGhyZWFkIiA9IHllcyAmJiBicmVhaworCWRvbmUKKworCWlmIHRlc3QgIiR3aXRoX3B0aHJlYWQiID0geWVzIDsgdGhlbgorCitjZl9hZGRfbGlicz0iLWwkY2ZfbGliX3B0aHJlYWQiCisjIEZpbHRlciBvdXQgZHVwbGljYXRlcyAtIHRoaXMgaGFwcGVucyB3aXRoIGJhZGx5LWRlc2lnbmVkICIucGMiIGZpbGVzLi4uCitmb3IgY2ZfYWRkXzFsaWIgaW4gJExJQlMKK2RvCisJZm9yIGNmX2FkZF8ybGliIGluICRjZl9hZGRfbGlicworCWRvCisJCWlmIHRlc3QgIngkY2ZfYWRkXzFsaWIiID0gIngkY2ZfYWRkXzJsaWIiCisJCXRoZW4KKwkJCWNmX2FkZF8xbGliPQorCQkJYnJlYWsKKwkJZmkKKwlkb25lCisJdGVzdCAtbiAiJGNmX2FkZF8xbGliIiAmJiBjZl9hZGRfbGlicz0iJGNmX2FkZF9saWJzICRjZl9hZGRfMWxpYiIKK2RvbmUKK0xJQlM9IiRjZl9hZGRfbGlicyIKKworY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9MSUJQVEhSRUFEUyAxCitFT0YKKworCWVsc2UKKwkgICAgeyB7IGVjaG8gIiRhc19tZToxMTUyNTogZXJyb3I6IENhbm5vdCBsaW5rIHdpdGggcHRocmVhZCBsaWJyYXJ5IiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IENhbm5vdCBsaW5rIHdpdGggcHRocmVhZCBsaWJyYXJ5IiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisJZmkKKworZmkKKworZmkKKworZWNobyAiJGFzX21lOjExNTM0OiBjaGVja2luZyBpZiB5b3Ugd2FudCB0byB1c2Ugd2Vhay1zeW1ib2xzIGZvciBwdGhyZWFkcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHlvdSB3YW50IHRvIHVzZSB3ZWFrLXN5bWJvbHMgZm9yIHB0aHJlYWRzLi4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtd2Vhay1zeW1ib2xzIG9yIC0tZGlzYWJsZS13ZWFrLXN5bWJvbHMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfd2Vha19zeW1ib2xzK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0iJGVuYWJsZV93ZWFrX3N5bWJvbHMiCisgIHVzZV93ZWFrX3N5bWJvbHM9JHdpdGh2YWwKK2Vsc2UKKyAgdXNlX3dlYWtfc3ltYm9scz1ubworZmk7CitlY2hvICIkYXNfbWU6MTE1NDQ6IHJlc3VsdDogJHVzZV93ZWFrX3N5bWJvbHMiID4mNQorZWNobyAiJHtFQ0hPX1R9JHVzZV93ZWFrX3N5bWJvbHMiID4mNgoraWYgdGVzdCAiJHVzZV93ZWFrX3N5bWJvbHMiID0geWVzIDsgdGhlbgorCitlY2hvICIkYXNfbWU6MTE1NDg6IGNoZWNraW5nIGlmICRDQyBzdXBwb3J0cyB3ZWFrIHN5bWJvbHMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkQ0Mgc3VwcG9ydHMgd2VhayBzeW1ib2xzLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHtjZl9jdl93ZWFrX3N5bWJvbHMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKworY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMTU1NSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgoraW50CittYWluICgpCit7CisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKQorIyAgaWYgZGVmaW5lZCBfX1VTRV9JU09DOTkKKyMgICAgZGVmaW5lIF9jYXRfcHJhZ21hKGV4cCkJX1ByYWdtYSgjZXhwKQorIyAgICBkZWZpbmUgX3dlYWtfcHJhZ21hKGV4cCkJX2NhdF9wcmFnbWEod2VhayBuYW1lKQorIyAgZWxzZQorIyAgICBkZWZpbmUgX3dlYWtfcHJhZ21hKGV4cCkKKyMgIGVuZGlmCisjICBkZWZpbmUgX2RlY2xhcmUobmFtZSkJX19leHRlbnNpb25fXyBleHRlcm4gX190eXBlb2ZfXyhuYW1lKSBuYW1lCisjICBkZWZpbmUgd2Vha19zeW1ib2wobmFtZSkJX3dlYWtfcHJhZ21hKG5hbWUpIF9kZWNsYXJlKG5hbWUpIF9fYXR0cmlidXRlX18oKHdlYWspKQorI2VuZGlmCisKK3dlYWtfc3ltYm9sKGZvcGVuKTsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxMTU4MTogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTE1ODQ6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTE1ODc6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMTU5MDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGNmX2N2X3dlYWtfc3ltYm9scz15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorY2ZfY3Zfd2Vha19zeW1ib2xzPW5vCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2ZpCitlY2hvICIkYXNfbWU6MTE2MDE6IHJlc3VsdDogJGNmX2N2X3dlYWtfc3ltYm9scyIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfY3Zfd2Vha19zeW1ib2xzIiA+JjYKKworZWxzZQorCWNmX2N2X3dlYWtfc3ltYm9scz1ubworZmkKKworaWYgdGVzdCAkY2ZfY3Zfd2Vha19zeW1ib2xzID0geWVzIDsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBVU0VfV0VBS19TWU1CT0xTIDEKK0VPRgorCitmaQorCitQVEhSRUFEPQoraWYgdGVzdCAiJHdpdGhfcHRocmVhZCIgPSAieWVzIiA7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgVVNFX1BUSFJFQURTIDEKK0VPRgorCisJZW5hYmxlX3JlZW50cmFudD15ZXMKKwlpZiB0ZXN0ICRjZl9jdl93ZWFrX3N5bWJvbHMgPSB5ZXMgOyB0aGVuCisJCVBUSFJFQUQ9LWxwdGhyZWFkCisJZmkKK2ZpCisKKyMgT3BlblNVU0UgaXMgaW5zdGFsbGluZyBuY3Vyc2VzNiwgdXNpbmcgcmVlbnRyYW50IG9wdGlvbi4KK2VjaG8gIiRhc19tZToxMTYzMDogY2hlY2tpbmcgZm9yIF9uY19UQUJTSVpFIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIF9uY19UQUJTSVpFLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9mdW5jX19uY19UQUJTSVpFK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTE2MzYgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgX25jX1RBQlNJWkUgKCk7IGJlbG93LiAgKi8KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKy8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KK2NoYXIgX25jX1RBQlNJWkUgKCk7CitjaGFyICgqZikgKCk7CisKK2ludAorbWFpbiAoKQoreworLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cworICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCisgICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCisjaWYgZGVmaW5lZCAoX19zdHViX19uY19UQUJTSVpFKSB8fCBkZWZpbmVkIChfX3N0dWJfX19fbmNfVEFCU0laRSkKK2Nob2tlIG1lCisjZWxzZQorZiA9IF9uY19UQUJTSVpFOyAvKiB3b3JrYXJvdW5kIGZvciBJQ0MgMTIuMC4zICovIGlmIChmID09IDApIHJldHVybiAxOworI2VuZGlmCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjExNjY3OiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMTY3MDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjExNjczOiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTE2NzY6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9mdW5jX19uY19UQUJTSVpFPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CithY19jdl9mdW5jX19uY19UQUJTSVpFPW5vCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2VjaG8gIiRhc19tZToxMTY4NjogcmVzdWx0OiAkYWNfY3ZfZnVuY19fbmNfVEFCU0laRSIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfZnVuY19fbmNfVEFCU0laRSIgPiY2CitpZiB0ZXN0ICRhY19jdl9mdW5jX19uY19UQUJTSVpFID0geWVzOyB0aGVuCisgIGFzc3VtZV9yZWVudHJhbnQ9eWVzCitlbHNlCisgIGFzc3VtZV9yZWVudHJhbnQ9bm8KK2ZpCisKKyMgUmVlbnRyYW50IGNvZGUgaGFzIHRvIGJlIG9wYXF1ZTsgdGhlcmUncyBsaXR0bGUgYWR2YW50YWdlIHRvIG1ha2luZyBuY3Vyc2VzCisjIG9wYXF1ZSBvdXRzaWRlIG9mIHRoYXQsIHNvIHRoZXJlIGlzIG5vIC0tZW5hYmxlLW9wYXF1ZSBvcHRpb24uICBXZSBjYW4gdXNlCisjIHRoaXMgb3B0aW9uIHdpdGhvdXQgLS13aXRoLXB0aHJlYWRzLCBidXQgdGhpcyB3aWxsIGJlIGFsd2F5cyBzZXQgZm9yCisjIHB0aHJlYWRzLgorZWNobyAiJGFzX21lOjExNjk4OiBjaGVja2luZyBpZiB5b3Ugd2FudCBleHBlcmltZW50YWwgcmVlbnRyYW50IGNvZGUiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB5b3Ugd2FudCBleHBlcmltZW50YWwgcmVlbnRyYW50IGNvZGUuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1yZWVudHJhbnQgb3IgLS1kaXNhYmxlLXJlZW50cmFudCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9yZWVudHJhbnQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSIkZW5hYmxlX3JlZW50cmFudCIKKyAgd2l0aF9yZWVudHJhbnQ9JGVuYWJsZXZhbAorZWxzZQorICB3aXRoX3JlZW50cmFudD0kYXNzdW1lX3JlZW50cmFudAorZmk7CitlY2hvICIkYXNfbWU6MTE3MDg6IHJlc3VsdDogJHdpdGhfcmVlbnRyYW50IiA+JjUKK2VjaG8gIiR7RUNIT19UfSR3aXRoX3JlZW50cmFudCIgPiY2CitpZiB0ZXN0ICIkd2l0aF9yZWVudHJhbnQiID0geWVzIDsgdGhlbgorCWNmX2N2X2VuYWJsZV9yZWVudHJhbnQ9MQorCWlmIHRlc3QgJGNmX2N2X3dlYWtfc3ltYm9scyA9IHllcyA7IHRoZW4KKworIyByZW1vdmUgcHRocmVhZCBsaWJyYXJ5IGZyb20gJExJQlMKK0xJQlM9YGVjaG8gIiRMSUJTIiB8IHNlZCAtZSAncy8tbHB0aHJlYWRbIAldLy9nJyAtZSAncy8tbHB0aHJlYWQkLy8nYAorCisJZWxpZiB0ZXN0ICIkYXNzdW1lX3JlZW50cmFudCIgPSBubyA7IHRoZW4KKwkJTElCX1NVRkZJWD0idCR7TElCX1NVRkZJWH0iCisJZmkKKworY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgVVNFX1JFRU5UUkFOVCAxCitFT0YKKworZWxzZQorCWNmX2N2X2VuYWJsZV9yZWVudHJhbnQ9MAorZmkKKworIyMjIEFsbG93IHVzaW5nIGEgZGlmZmVyZW50IHdyYXAtcHJlZml4CitpZiB0ZXN0ICIkY2ZfY3ZfZW5hYmxlX3JlZW50cmFudCIgIT0gMCB8fCB0ZXN0ICIkQlJPS0VOX0xJTktFUiIgPSAxIDsgdGhlbgorCWVjaG8gIiRhc19tZToxMTczMTogY2hlY2tpbmcgZm9yIHByZWZpeCB1c2VkIHRvIHdyYXAgcHVibGljIHZhcmlhYmxlcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBwcmVmaXggdXNlZCB0byB3cmFwIHB1YmxpYyB2YXJpYWJsZXMuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtd3JhcC1wcmVmaXggb3IgLS13aXRob3V0LXdyYXAtcHJlZml4IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF93cmFwX3ByZWZpeCtzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF93cmFwX3ByZWZpeCIKKyAgTkNVUlNFU19XUkFQX1BSRUZJWD0kd2l0aHZhbAorZWxzZQorICBOQ1VSU0VTX1dSQVBfUFJFRklYPV9uY18KK2ZpOworCWVjaG8gIiRhc19tZToxMTc0MTogcmVzdWx0OiAkTkNVUlNFU19XUkFQX1BSRUZJWCIgPiY1CitlY2hvICIke0VDSE9fVH0kTkNVUlNFU19XUkFQX1BSRUZJWCIgPiY2CitlbHNlCisJTkNVUlNFU19XUkFQX1BSRUZJWD1fbmNfCitmaQorCitjYXQgPj5jb25mZGVmcy5oIDw8RU9GCisjZGVmaW5lIE5DVVJTRVNfV1JBUF9QUkVGSVggIiROQ1VSU0VTX1dSQVBfUFJFRklYIgorRU9GCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMjCXVzZSBvcHRpb24gLS1kaXNhYmxlLWVjaG8gdG8gc3VwcHJlc3MgZnVsbCBkaXNwbGF5IGNvbXBpbGluZyBjb21tYW5kcworCitlY2hvICIkYXNfbWU6MTE3NTU6IGNoZWNraW5nIGlmIHlvdSB3YW50IHRvIHNlZSBsb25nIGNvbXBpbGluZyBtZXNzYWdlcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHlvdSB3YW50IHRvIHNlZSBsb25nIGNvbXBpbGluZyBtZXNzYWdlcy4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWVjaG8gb3IgLS1kaXNhYmxlLWVjaG8gd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZWNobytzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9IiRlbmFibGVfZWNobyIKKyAgdGVzdCAiJGVuYWJsZXZhbCIgIT0gbm8gJiYgZW5hYmxldmFsPXllcworCWlmIHRlc3QgIiRlbmFibGV2YWwiICE9ICJ5ZXMiIDsgdGhlbgorCisJRUNIT19MVD0nLS1zaWxlbnQnCisJRUNIT19MRD0nQGVjaG8gbGlua2luZyAkQDsnCisJUlVMRV9DQz0nQGVjaG8gY29tcGlsaW5nICQ8JworCVNIT1dfQ0M9J0BlY2hvIGNvbXBpbGluZyAkQCcKKwlFQ0hPX0NDPSdAJworCisJZWxzZQorCisJRUNIT19MVD0nJworCUVDSE9fTEQ9JycKKwlSVUxFX0NDPScnCisJU0hPV19DQz0nJworCUVDSE9fQ0M9JycKKworCWZpCitlbHNlCisgIGVuYWJsZXZhbD15ZXMKKworCUVDSE9fTFQ9JycKKwlFQ0hPX0xEPScnCisJUlVMRV9DQz0nJworCVNIT1dfQ0M9JycKKwlFQ0hPX0NDPScnCisKK2ZpOworZWNobyAiJGFzX21lOjExNzg5OiByZXN1bHQ6ICRlbmFibGV2YWwiID4mNQorZWNobyAiJHtFQ0hPX1R9JGVuYWJsZXZhbCIgPiY2CisKKyMjIwl1c2Ugb3B0aW9uIC0tZW5hYmxlLXdhcm5pbmdzIHRvIHR1cm4gb24gYWxsIGdjYyB3YXJuaW5ncworZWNobyAiJGFzX21lOjExNzkzOiBjaGVja2luZyBpZiB5b3Ugd2FudCB0byBzZWUgY29tcGlsZXIgd2FybmluZ3MiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB5b3Ugd2FudCB0byBzZWUgY29tcGlsZXIgd2FybmluZ3MuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS13YXJuaW5ncyBvciAtLWRpc2FibGUtd2FybmluZ3Mgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfd2FybmluZ3Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSIkZW5hYmxlX3dhcm5pbmdzIgorICB3aXRoX3dhcm5pbmdzPSRlbmFibGV2YWwKK2ZpOworZWNobyAiJGFzX21lOjExODAxOiByZXN1bHQ6ICR3aXRoX3dhcm5pbmdzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSR3aXRoX3dhcm5pbmdzIiA+JjYKKworaWYgdGVzdCAieCR3aXRoX3dhcm5pbmdzIiA9ICJ4eWVzIjsgdGhlbgorCisgCUFEQUZMQUdTPSIkQURBRkxBR1MgLWduYXRnIgorCitJTlRFTF9DT01QSUxFUj1ubworCitpZiB0ZXN0ICIkR0NDIiA9IHllcyA7IHRoZW4KKwljYXNlICRob3N0X29zIGluCisJKGxpbnV4KnxnbnUqKQorCQllY2hvICIkYXNfbWU6MTE4MTM6IGNoZWNraW5nIGlmIHRoaXMgaXMgcmVhbGx5IEludGVsIEMgY29tcGlsZXIiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB0aGlzIGlzIHJlYWxseSBJbnRlbCBDIGNvbXBpbGVyLi4uICRFQ0hPX0MiID4mNgorCQljZl9zYXZlX0NGTEFHUz0iJENGTEFHUyIKKwkJQ0ZMQUdTPSIkQ0ZMQUdTIC1uby1nY2MiCisJCWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTE4MTggImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCitpbnQKK21haW4gKCkKK3sKKworI2lmZGVmIF9fSU5URUxfQ09NUElMRVIKKyNlbHNlCittYWtlIGFuIGVycm9yCisjZW5kaWYKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxMTgzNTogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTE4Mzg6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTE4NDE6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMTg0NDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIElOVEVMX0NPTVBJTEVSPXllcworY2Zfc2F2ZV9DRkxBR1M9IiRjZl9zYXZlX0NGTEFHUyAtd2UxNDciCisKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCQlDRkxBR1M9IiRjZl9zYXZlX0NGTEFHUyIKKwkJZWNobyAiJGFzX21lOjExODU1OiByZXN1bHQ6ICRJTlRFTF9DT01QSUxFUiIgPiY1CitlY2hvICIke0VDSE9fVH0kSU5URUxfQ09NUElMRVIiID4mNgorCQk7OworCWVzYWMKK2ZpCisKK0NMQU5HX0NPTVBJTEVSPW5vCisKK2lmIHRlc3QgIiRHQ0MiID0geWVzIDsgdGhlbgorCWVjaG8gIiRhc19tZToxMTg2NDogY2hlY2tpbmcgaWYgdGhpcyBpcyByZWFsbHkgQ2xhbmcgQyBjb21waWxlciIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHRoaXMgaXMgcmVhbGx5IENsYW5nIEMgY29tcGlsZXIuLi4gJEVDSE9fQyIgPiY2CisJY2Zfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisJQ0ZMQUdTPSIkQ0ZMQUdTIC1RdW51c2VkLWFyZ3VtZW50cyIKKwljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDExODY5ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworaW50CittYWluICgpCit7CisKKyNpZmRlZiBfX2NsYW5nX18KKyNlbHNlCittYWtlIGFuIGVycm9yCisjZW5kaWYKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxMTg4NjogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTE4ODk6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTE4OTI6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMTg5NTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIENMQU5HX0NPTVBJTEVSPXllcworY2Zfc2F2ZV9DRkxBR1M9IiRjZl9zYXZlX0NGTEFHUyAtUXVudXNlZC1hcmd1bWVudHMiCisKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCUNGTEFHUz0iJGNmX3NhdmVfQ0ZMQUdTIgorCWVjaG8gIiRhc19tZToxMTkwNjogcmVzdWx0OiAkQ0xBTkdfQ09NUElMRVIiID4mNQorZWNobyAiJHtFQ0hPX1R9JENMQU5HX0NPTVBJTEVSIiA+JjYKK2ZpCisKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDExOTExICIke2FzX21lOi1jb25maWd1cmV9IgoraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkgeyByZXR1cm4gKGFyZ3ZbYXJnYy0xXSA9PSAwKSA7IH0KK0VPRgorCitpZiB0ZXN0ICIkSU5URUxfQ09NUElMRVIiID0geWVzCit0aGVuCisjIFRoZSAiLXdkWFhYIiBvcHRpb25zIHN1cHByZXNzIHdhcm5pbmdzOgorIyByZW1hcmsgIzE0MTk6IGV4dGVybmFsIGRlY2xhcmF0aW9uIGluIHByaW1hcnkgc291cmNlIGZpbGUKKyMgcmVtYXJrICMxNjgzOiBleHBsaWNpdCBjb252ZXJzaW9uIG9mIGEgNjQtYml0IGludGVncmFsIHR5cGUgdG8gYSBzbWFsbGVyIGludGVncmFsIHR5cGUgKHBvdGVudGlhbCBwb3J0YWJpbGl0eSBwcm9ibGVtKQorIyByZW1hcmsgIzE2ODQ6IGNvbnZlcnNpb24gZnJvbSBwb2ludGVyIHRvIHNhbWUtc2l6ZWQgaW50ZWdyYWwgdHlwZSAocG90ZW50aWFsIHBvcnRhYmlsaXR5IHByb2JsZW0pCisjIHJlbWFyayAjMTkzOiB6ZXJvIHVzZWQgZm9yIHVuZGVmaW5lZCBwcmVwcm9jZXNzaW5nIGlkZW50aWZpZXIKKyMgcmVtYXJrICM1OTM6IHZhcmlhYmxlICJjdXJzX3NiX2xlZnRfYXJyb3ciIHdhcyBzZXQgYnV0IG5ldmVyIHVzZWQKKyMgcmVtYXJrICM4MTA6IGNvbnZlcnNpb24gZnJvbSAiaW50IiB0byAiRGltZW5zaW9uPXt1bnNpZ25lZCBzaG9ydH0iIG1heSBsb3NlIHNpZ25pZmljYW50IGJpdHMKKyMgcmVtYXJrICM4Njk6IHBhcmFtZXRlciAidHciIHdhcyBuZXZlciByZWZlcmVuY2VkCisjIHJlbWFyayAjOTgxOiBvcGVyYW5kcyBhcmUgZXZhbHVhdGVkIGluIHVuc3BlY2lmaWVkIG9yZGVyCisjIHdhcm5pbmcgIzI3OTogY29udHJvbGxpbmcgZXhwcmVzc2lvbiBpcyBjb25zdGFudAorCisJeyBlY2hvICIkYXNfbWU6MTE5Mjg6IGNoZWNraW5nIGZvciAkQ0Mgd2FybmluZyBvcHRpb25zLi4uIiA+JjUKK2VjaG8gIiRhc19tZTogY2hlY2tpbmcgZm9yICRDQyB3YXJuaW5nIG9wdGlvbnMuLi4iID4mNjt9CisJY2Zfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisJRVhUUkFfQ0ZMQUdTPSItV2FsbCIKKwlmb3IgY2Zfb3B0IGluIFwKKwkJd2QxNDE5IFwKKwkJd2QxNjgzIFwKKwkJd2QxNjg0IFwKKwkJd2QxOTMgXAorCQl3ZDU5MyBcCisJCXdkMjc5IFwKKwkJd2Q4MTAgXAorCQl3ZDg2OSBcCisJCXdkOTgxCisJZG8KKwkJQ0ZMQUdTPSIkY2Zfc2F2ZV9DRkxBR1MgJEVYVFJBX0NGTEFHUyAtJGNmX29wdCIKKwkJaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTE5NDQ6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjExOTQ3OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IHRoZW4KKwkJCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIkYXNfbWU6MTE5NDk6IHJlc3VsdDogLi4uIC0kY2Zfb3B0IiA+JjUKK2VjaG8gIiR7RUNIT19UfS4uLiAtJGNmX29wdCIgPiY2CisJCQlFWFRSQV9DRkxBR1M9IiRFWFRSQV9DRkxBR1MgLSRjZl9vcHQiCisJCWZpCisJZG9uZQorCUNGTEFHUz0iJGNmX3NhdmVfQ0ZMQUdTIgorCitlbGlmIHRlc3QgIiRHQ0MiID0geWVzCit0aGVuCisJeyBlY2hvICIkYXNfbWU6MTE5NTg6IGNoZWNraW5nIGZvciAkQ0Mgd2FybmluZyBvcHRpb25zLi4uIiA+JjUKK2VjaG8gIiRhc19tZTogY2hlY2tpbmcgZm9yICRDQyB3YXJuaW5nIG9wdGlvbnMuLi4iID4mNjt9CisJY2Zfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisJRVhUUkFfQ0ZMQUdTPQorCWNmX3dhcm5fQ09OU1Q9IiIKKwl0ZXN0ICIkd2l0aF9leHRfY29uc3QiID0geWVzICYmIGNmX3dhcm5fQ09OU1Q9Ild3cml0ZS1zdHJpbmdzIgorCWNmX2djY193YXJuaW5ncz0iV2lnbm9yZWQtcXVhbGlmaWVycyBXbG9naWNhbC1vcCBXdmFyYXJncyIKKwl0ZXN0ICJ4JENMQU5HX0NPTVBJTEVSIiA9IHh5ZXMgJiYgY2ZfZ2NjX3dhcm5pbmdzPQorCWZvciBjZl9vcHQgaW4gVyBXYWxsIFwKKwkJV2JhZC1mdW5jdGlvbi1jYXN0IFwKKwkJV2Nhc3QtYWxpZ24gXAorCQlXY2FzdC1xdWFsIFwKKwkJV2RlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudCBcCisJCVdleHRyYSBcCisJCVdpbmxpbmUgXAorCQlXbWlzc2luZy1kZWNsYXJhdGlvbnMgXAorCQlXbWlzc2luZy1wcm90b3R5cGVzIFwKKwkJV25lc3RlZC1leHRlcm5zIFwKKwkJV3BvaW50ZXItYXJpdGggXAorCQlXc2hhZG93IFwKKwkJV3N0cmljdC1wcm90b3R5cGVzIFwKKwkJV3VuZGVmICRjZl9nY2Nfd2FybmluZ3MgJGNmX3dhcm5fQ09OU1QgV25vLXVua25vd24tcHJhZ21hcyBXc3dpdGNoLWVudW0KKwlkbworCQlDRkxBR1M9IiRjZl9zYXZlX0NGTEFHUyAkRVhUUkFfQ0ZMQUdTIC0kY2Zfb3B0IgorCQlpZiB7IChldmFsIGVjaG8gIiRhc19tZToxMTk4MjogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTE5ODU6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbgorCQkJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIiRhc19tZToxMTk4NzogcmVzdWx0OiAuLi4gLSRjZl9vcHQiID4mNQorZWNobyAiJHtFQ0hPX1R9Li4uIC0kY2Zfb3B0IiA+JjYKKwkJCWNhc2UgJGNmX29wdCBpbgorCQkJKFdjYXN0LXF1YWwpCisJCQkJQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRFhUU1RSSU5HREVGSU5FUyIKKwkJCQk7OworCQkJKFdpbmxpbmUpCisJCQkJY2FzZSAkR0NDX1ZFUlNJT04gaW4KKwkJCQkoWzM0XS4qKQorCQkJCQl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCWZlYXR1cmUgaXMgYnJva2VuIGluIGdjYyAkR0NDX1ZFUlNJT04iIDE+JjYKKworZWNobyAiJHthc19tZTotY29uZmlndXJlfToxMTk5ODogdGVzdGluZyBmZWF0dXJlIGlzIGJyb2tlbiBpbiBnY2MgJEdDQ19WRVJTSU9OIC4uLiIgMT4mNQorCisJCQkJCWNvbnRpbnVlOzsKKwkJCQllc2FjCisJCQkJOzsKKwkJCShXcG9pbnRlci1hcml0aCkKKwkJCQljYXNlICRHQ0NfVkVSU0lPTiBpbgorCQkJCShbMTJdLiopCisJCQkJCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJZmVhdHVyZSBpcyBicm9rZW4gaW4gZ2NjICRHQ0NfVkVSU0lPTiIgMT4mNgorCitlY2hvICIke2FzX21lOi1jb25maWd1cmV9OjEyMDA4OiB0ZXN0aW5nIGZlYXR1cmUgaXMgYnJva2VuIGluIGdjYyAkR0NDX1ZFUlNJT04gLi4uIiAxPiY1CisKKwkJCQkJY29udGludWU7OworCQkJCWVzYWMKKwkJCQk7OworCQkJZXNhYworCQkJRVhUUkFfQ0ZMQUdTPSIkRVhUUkFfQ0ZMQUdTIC0kY2Zfb3B0IgorCQlmaQorCWRvbmUKKwlDRkxBR1M9IiRjZl9zYXZlX0NGTEFHUyIKK2ZpCitybSAtcmYgY29uZnRlc3QqCisKK2ZpCisKK2lmIHRlc3QgIiRHQ0MiID0geWVzCit0aGVuCitjYXQgPiBjb25mdGVzdC5pIDw8RU9GCisjaWZuZGVmIEdDQ19QUklOVEYKKyNkZWZpbmUgR0NDX1BSSU5URiAwCisjZW5kaWYKKyNpZm5kZWYgR0NDX1NDQU5GCisjZGVmaW5lIEdDQ19TQ0FORiAwCisjZW5kaWYKKyNpZm5kZWYgR0NDX05PUkVUVVJOCisjZGVmaW5lIEdDQ19OT1JFVFVSTiAvKiBub3RoaW5nICovCisjZW5kaWYKKyNpZm5kZWYgR0NDX1VOVVNFRAorI2RlZmluZSBHQ0NfVU5VU0VEIC8qIG5vdGhpbmcgKi8KKyNlbmRpZgorRU9GCitpZiB0ZXN0ICIkR0NDIiA9IHllcwordGhlbgorCXsgZWNobyAiJGFzX21lOjEyMDQxOiBjaGVja2luZyBmb3IgJENDIF9fYXR0cmlidXRlX18gZGlyZWN0aXZlcy4uLiIgPiY1CitlY2hvICIkYXNfbWU6IGNoZWNraW5nIGZvciAkQ0MgX19hdHRyaWJ1dGVfXyBkaXJlY3RpdmVzLi4uIiA+JjY7fQorY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMTIwNDQgIiR7YXNfbWU6LWNvbmZpZ3VyZX0iCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlICJjb25mdGVzdC5oIgorI2luY2x1ZGUgImNvbmZ0ZXN0LmkiCisjaWYJR0NDX1BSSU5URgorI2RlZmluZSBHQ0NfUFJJTlRGTElLRShmbXQsdmFyKSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQocHJpbnRmLGZtdCx2YXIpKSkKKyNlbHNlCisjZGVmaW5lIEdDQ19QUklOVEZMSUtFKGZtdCx2YXIpIC8qbm90aGluZyovCisjZW5kaWYKKyNpZglHQ0NfU0NBTkYKKyNkZWZpbmUgR0NDX1NDQU5GTElLRShmbXQsdmFyKSAgX19hdHRyaWJ1dGVfXygoZm9ybWF0KHNjYW5mLGZtdCx2YXIpKSkKKyNlbHNlCisjZGVmaW5lIEdDQ19TQ0FORkxJS0UoZm10LHZhcikgIC8qbm90aGluZyovCisjZW5kaWYKK2V4dGVybiB2b2lkIHdvdyhjaGFyICosLi4uKSBHQ0NfU0NBTkZMSUtFKDEsMik7CitleHRlcm4gdm9pZCBvb3BzKGNoYXIgKiwuLi4pIEdDQ19QUklOVEZMSUtFKDEsMikgR0NDX05PUkVUVVJOOworZXh0ZXJuIHZvaWQgZm9vKHZvaWQpIEdDQ19OT1JFVFVSTjsKK2ludCBtYWluKGludCBhcmdjIEdDQ19VTlVTRUQsIGNoYXIgKmFyZ3ZbXSBHQ0NfVU5VU0VEKSB7IHJldHVybiAwOyB9CitFT0YKKwljZl9wcmludGZfYXR0cmlidXRlPW5vCisJY2Zfc2NhbmZfYXR0cmlidXRlPW5vCisJZm9yIGNmX2F0dHJpYnV0ZSBpbiBzY2FuZiBwcmludGYgdW51c2VkIG5vcmV0dXJuCisJZG8KKworY2ZfQVRUUklCVVRFPWBlY2hvICIkY2ZfYXR0cmlidXRlIiB8IHNlZCB5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJWAKKworCQljZl9kaXJlY3RpdmU9Il9fYXR0cmlidXRlX18oKCRjZl9hdHRyaWJ1dGUpKSIKKwkJZWNobyAiY2hlY2tpbmcgZm9yICRDQyAkY2ZfZGlyZWN0aXZlIiAxPiY1CisKKwkJY2FzZSAkY2ZfYXR0cmlidXRlIGluCisJCShwcmludGYpCisJCQljZl9wcmludGZfYXR0cmlidXRlPXllcworCQkJY2F0ID5jb25mdGVzdC5oIDw8RU9GCisjZGVmaW5lIEdDQ18kY2ZfQVRUUklCVVRFIDEKK0VPRgorCQkJOzsKKwkJKHNjYW5mKQorCQkJY2Zfc2NhbmZfYXR0cmlidXRlPXllcworCQkJY2F0ID5jb25mdGVzdC5oIDw8RU9GCisjZGVmaW5lIEdDQ18kY2ZfQVRUUklCVVRFIDEKK0VPRgorCQkJOzsKKwkJKCopCisJCQljYXQgPmNvbmZ0ZXN0LmggPDxFT0YKKyNkZWZpbmUgR0NDXyRjZl9BVFRSSUJVVEUgJGNmX2RpcmVjdGl2ZQorRU9GCisJCQk7OworCQllc2FjCisKKwkJaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTIwOTM6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEyMDk2OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IHRoZW4KKwkJCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIkYXNfbWU6MTIwOTg6IHJlc3VsdDogLi4uICRjZl9hdHRyaWJ1dGUiID4mNQorZWNobyAiJHtFQ0hPX1R9Li4uICRjZl9hdHRyaWJ1dGUiID4mNgorCQkJY2F0IGNvbmZ0ZXN0LmggPj5jb25mZGVmcy5oCisJCQljYXNlICRjZl9hdHRyaWJ1dGUgaW4KKwkJCShub3JldHVybikKKworY2F0ID4+Y29uZmRlZnMuaCA8PEVPRgorI2RlZmluZSBHQ0NfTk9SRVRVUk4gJGNmX2RpcmVjdGl2ZQorRU9GCisKKwkJCQk7OworCQkJKHByaW50ZikKKwkJCQljZl92YWx1ZT0nLyogbm90aGluZyAqLycKKwkJCQlpZiB0ZXN0ICIkY2ZfcHJpbnRmX2F0dHJpYnV0ZSIgIT0gbm8gOyB0aGVuCisJCQkJCWNmX3ZhbHVlPSdfX2F0dHJpYnV0ZV9fKChmb3JtYXQocHJpbnRmLGZtdCx2YXIpKSknCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEdDQ19QUklOVEYgMQorRU9GCisKKwkJCQlmaQorCitjYXQgPj5jb25mZGVmcy5oIDw8RU9GCisjZGVmaW5lIEdDQ19QUklOVEZMSUtFKGZtdCx2YXIpICRjZl92YWx1ZQorRU9GCisKKwkJCQk7OworCQkJKHNjYW5mKQorCQkJCWNmX3ZhbHVlPScvKiBub3RoaW5nICovJworCQkJCWlmIHRlc3QgIiRjZl9zY2FuZl9hdHRyaWJ1dGUiICE9IG5vIDsgdGhlbgorCQkJCQljZl92YWx1ZT0nX19hdHRyaWJ1dGVfXygoZm9ybWF0KHNjYW5mLGZtdCx2YXIpKSknCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEdDQ19TQ0FORiAxCitFT0YKKworCQkJCWZpCisKK2NhdCA+PmNvbmZkZWZzLmggPDxFT0YKKyNkZWZpbmUgR0NDX1NDQU5GTElLRShmbXQsdmFyKSAkY2ZfdmFsdWUKK0VPRgorCisJCQkJOzsKKwkJCSh1bnVzZWQpCisKK2NhdCA+PmNvbmZkZWZzLmggPDxFT0YKKyNkZWZpbmUgR0NDX1VOVVNFRCAkY2ZfZGlyZWN0aXZlCitFT0YKKworCQkJCTs7CisJCQllc2FjCisJCWZpCisJZG9uZQorZWxzZQorCWZncmVwIGRlZmluZSBjb25mdGVzdC5pID4+Y29uZmRlZnMuaAorZmkKK3JtIC1yZiBjb25mdGVzdCoKK2ZpCisKKyMjIwl1c2Ugb3B0aW9uIC0tZW5hYmxlLWFzc2VydGlvbnMgdG8gdHVybiBvbiBnZW5lcmF0aW9uIG9mIGFzc2VydGlvbiBjb2RlCitlY2hvICIkYXNfbWU6MTIxNTg6IGNoZWNraW5nIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBydW50aW1lIGFzc2VydGlvbnMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB5b3Ugd2FudCB0byBlbmFibGUgcnVudGltZSBhc3NlcnRpb25zLi4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtYXNzZXJ0aW9ucyBvciAtLWRpc2FibGUtYXNzZXJ0aW9ucyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9hc3NlcnRpb25zK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0iJGVuYWJsZV9hc3NlcnRpb25zIgorICB3aXRoX2Fzc2VydGlvbnM9JGVuYWJsZXZhbAorZWxzZQorICB3aXRoX2Fzc2VydGlvbnM9bm8KK2ZpOworZWNobyAiJGFzX21lOjEyMTY4OiByZXN1bHQ6ICR3aXRoX2Fzc2VydGlvbnMiID4mNQorZWNobyAiJHtFQ0hPX1R9JHdpdGhfYXNzZXJ0aW9ucyIgPiY2CitpZiB0ZXN0IC1uICIkR0NDIgordGhlbgorCWlmIHRlc3QgIiR3aXRoX2Fzc2VydGlvbnMiID0gbm8KKwl0aGVuCisJCUNQUEZMQUdTPSIkQ1BQRkxBR1MgLUROREVCVUciCisJZWxzZQorCisgCUFEQUZMQUdTPSIkQURBRkxBR1MgLWduYXRhIgorCisJZmkKK2ZpCisKKyMjIwl1c2Ugb3B0aW9uIC0tZGlzYWJsZS1sZWFrcyB0byBzdXBwcmVzcyAicGVybWFuZW50IiBsZWFrcywgZm9yIHRlc3RpbmcKKworY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9OQ19BTExPQ19IIDEKK0VPRgorCisjIyMJdXNlIG9wdGlvbiAtLWVuYWJsZS1leHBhbmRlZCB0byBnZW5lcmF0ZSBjZXJ0YWluIG1hY3JvcyBhcyBmdW5jdGlvbnMKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWV4cGFuZGVkIG9yIC0tZGlzYWJsZS1leHBhbmRlZCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9leHBhbmRlZCtzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9IiRlbmFibGVfZXhwYW5kZWQiCisgIHRlc3QgIiRlbmFibGV2YWwiID0geWVzICYmCitjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBOQ1VSU0VTX0VYUEFOREVEIDEKK0VPRgorCitmaTsKKworIyMjCXVzZSBvcHRpb24gLS1kaXNhYmxlLW1hY3JvcyB0byBzdXBwcmVzcyBtYWNyb3MgaW4gZmF2b3Igb2YgZnVuY3Rpb25zCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1tYWNyb3Mgb3IgLS1kaXNhYmxlLW1hY3JvcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9tYWNyb3Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSIkZW5hYmxlX21hY3JvcyIKKyAgdGVzdCAiJGVuYWJsZXZhbCIgPSBubyAmJgorY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgTkNVUlNFU19OT01BQ1JPUyAxCitFT0YKKworZmk7CisKKyMgTm9ybWFsbHkgd2Ugb25seSBhZGQgdHJhY2UoKSB0byB0aGUgZGVidWctbGlicmFyeS4gIEFsbG93IHRoaXMgdG8gYmUKKyMgZXh0ZW5kZWQgdG8gYWxsIG1vZGVscyBvZiB0aGUgbmN1cnNlcyBsaWJyYXJ5OgorY2ZfYWxsX3RyYWNlcz1ubworY2FzZSAiJENGTEFHUyAkQ1BQRkxBR1MiIGluCisoKi1EVFJBQ0UqKQorCWNmX2FsbF90cmFjZXM9eWVzCisJOzsKK2VzYWMKKworZWNobyAiJGFzX21lOjEyMjIxOiBjaGVja2luZyB3aGV0aGVyIHRvIGFkZCB0cmFjZSBmZWF0dXJlIHRvIGFsbCBtb2RlbHMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRvIGFkZCB0cmFjZSBmZWF0dXJlIHRvIGFsbCBtb2RlbHMuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtdHJhY2Ugb3IgLS13aXRob3V0LXRyYWNlIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF90cmFjZStzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF90cmFjZSIKKyAgY2Zfd2l0aF90cmFjZT0kd2l0aHZhbAorZWxzZQorICBjZl93aXRoX3RyYWNlPSRjZl9hbGxfdHJhY2VzCitmaTsKK2VjaG8gIiRhc19tZToxMjIzMTogcmVzdWx0OiAkY2Zfd2l0aF90cmFjZSIgPiY1CitlY2hvICIke0VDSE9fVH0kY2Zfd2l0aF90cmFjZSIgPiY2CisKK2lmIHRlc3QgIiRjZl93aXRoX3RyYWNlIiA9IHllcyA7IHRoZW4KKwlBREFfVFJBQ0U9VFJVRQorCitjZl9maXhfY3BwZmxhZ3M9bm8KK2NmX25ld19jZmxhZ3M9CitjZl9uZXdfY3BwZmxhZ3M9CitjZl9uZXdfZXh0cmFfY3BwZmxhZ3M9CisKK2ZvciBjZl9hZGRfY2ZsYWdzIGluIC1EVFJBQ0UKK2RvCitjYXNlICRjZl9maXhfY3BwZmxhZ3MgaW4KKyhubykKKwljYXNlICRjZl9hZGRfY2ZsYWdzIGluCisJKC11bmRlZnwtbm9zdGRpbmMqfC1JKnwtRCp8LVUqfC1FfC1QfC1DKQorCQljYXNlICRjZl9hZGRfY2ZsYWdzIGluCisJCSgtRCopCisJCQljZl90c3RfY2ZsYWdzPWBlY2hvICR7Y2ZfYWRkX2NmbGFnc30gfHNlZCAtZSAncy9eLURbXj1dKj0nXCcnXCJbXiJdKi8vJ2AKKworCQkJdGVzdCAieCR7Y2ZfYWRkX2NmbGFnc30iICE9ICJ4JHtjZl90c3RfY2ZsYWdzfSIgXAorCQkJCSYmIHRlc3QgLXogIiR7Y2ZfdHN0X2NmbGFnc30iIFwKKwkJCQkmJiBjZl9maXhfY3BwZmxhZ3M9eWVzCisKKwkJCWlmIHRlc3QgJGNmX2ZpeF9jcHBmbGFncyA9IHllcyA7IHRoZW4KKwkJCQljZl9uZXdfZXh0cmFfY3BwZmxhZ3M9IiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MgJGNmX2FkZF9jZmxhZ3MiCisJCQkJY29udGludWUKKwkJCWVsaWYgdGVzdCAiJHtjZl90c3RfY2ZsYWdzfSIgPSAiXCInIiA7IHRoZW4KKwkJCQljZl9uZXdfZXh0cmFfY3BwZmxhZ3M9IiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MgJGNmX2FkZF9jZmxhZ3MiCisJCQkJY29udGludWUKKwkJCWZpCisJCQk7OworCQllc2FjCisJCWNhc2UgIiRDUFBGTEFHUyIgaW4KKwkJKCokY2ZfYWRkX2NmbGFncykKKwkJCTs7CisJCSgqKQorCQkJY2FzZSAkY2ZfYWRkX2NmbGFncyBpbgorCQkJKC1EKikKKwkJCQljZl90c3RfY3BwZmxhZ3M9YGVjaG8gIngkY2ZfYWRkX2NmbGFncyIgfCBzZWQgLWUgJ3MvXi4uLi8vJyAtZSAncy89LiovLydgCisKK0NQUEZMQUdTPWBlY2hvICIkQ1BQRkxBR1MiIHwgXAorCXNlZAktZSAncy8tW1VEXSciJGNmX3RzdF9jcHBmbGFncyInXCg9W14gCV0qXClcP1sgCV0vIC9nJyBcCisJCS1lICdzLy1bVURdJyIkY2ZfdHN0X2NwcGZsYWdzIidcKD1bXiAJXSpcKVw/JC8vZydgCisKKwkJCQk7OworCQkJZXNhYworCQkJY2ZfbmV3X2NwcGZsYWdzPSIkY2ZfbmV3X2NwcGZsYWdzICRjZl9hZGRfY2ZsYWdzIgorCQkJOzsKKwkJZXNhYworCQk7OworCSgqKQorCQljZl9uZXdfY2ZsYWdzPSIkY2ZfbmV3X2NmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJOzsKKwllc2FjCisJOzsKKyh5ZXMpCisJY2ZfbmV3X2V4dHJhX2NwcGZsYWdzPSIkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzICRjZl9hZGRfY2ZsYWdzIgorCisJY2ZfdHN0X2NmbGFncz1gZWNobyAke2NmX2FkZF9jZmxhZ3N9IHxzZWQgLWUgJ3MvXlteIl0qIidcJycvLydgCisKKwl0ZXN0ICJ4JHtjZl9hZGRfY2ZsYWdzfSIgIT0gIngke2NmX3RzdF9jZmxhZ3N9IiBcCisJCSYmIHRlc3QgLXogIiR7Y2ZfdHN0X2NmbGFnc30iIFwKKwkJJiYgY2ZfZml4X2NwcGZsYWdzPW5vCisJOzsKK2VzYWMKK2RvbmUKKworaWYgdGVzdCAtbiAiJGNmX25ld19jZmxhZ3MiIDsgdGhlbgorCisJQ0ZMQUdTPSIkQ0ZMQUdTICRjZl9uZXdfY2ZsYWdzIgorZmkKKworaWYgdGVzdCAtbiAiJGNmX25ld19jcHBmbGFncyIgOyB0aGVuCisKKwlDUFBGTEFHUz0iJENQUEZMQUdTICRjZl9uZXdfY3BwZmxhZ3MiCitmaQorCitpZiB0ZXN0IC1uICIkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzIiA7IHRoZW4KKworCUVYVFJBX0NQUEZMQUdTPSIkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzICRFWFRSQV9DUFBGTEFHUyIKK2ZpCisKK2Vsc2UKKwlBREFfVFJBQ0U9RkFMU0UKK2ZpCisKK2VjaG8gIiRhc19tZToxMjMxOTogY2hlY2tpbmcgaWYgd2Ugd2FudCB0byB1c2UgR05BVCBwcm9qZWN0cyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHdlIHdhbnQgdG8gdXNlIEdOQVQgcHJvamVjdHMuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1nbmF0LXByb2plY3RzIG9yIC0tZGlzYWJsZS1nbmF0LXByb2plY3RzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2duYXRfcHJvamVjdHMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSIkZW5hYmxlX2duYXRfcHJvamVjdHMiCisgIHRlc3QgIiRlbmFibGV2YWwiICE9IG5vICYmIGVuYWJsZXZhbD15ZXMKKwlpZiB0ZXN0ICIkZW5hYmxldmFsIiAhPSAieWVzIiA7IHRoZW4KKyAgICBlbmFibGVfZ25hdF9wcm9qZWN0cz1ubworCWVsc2UKKwkJZW5hYmxlX2duYXRfcHJvamVjdHM9eWVzCisJZmkKK2Vsc2UKKyAgZW5hYmxldmFsPXllcworCWVuYWJsZV9nbmF0X3Byb2plY3RzPXllcworCitmaTsKK2VjaG8gIiRhc19tZToxMjMzNjogcmVzdWx0OiAkZW5hYmxlX2duYXRfcHJvamVjdHMiID4mNQorZWNobyAiJHtFQ0hPX1R9JGVuYWJsZV9nbmF0X3Byb2plY3RzIiA+JjYKKworIyMjCUNoZWNrcyBmb3IgbGlicmFyaWVzLgorY2FzZSAkY2ZfY3Zfc3lzdGVtX25hbWUgaW4KKygqbWluZ3czMiopCisJOzsKKygqKQorZWNobyAiJGFzX21lOjEyMzQ0OiBjaGVja2luZyBmb3IgZ2V0dGltZW9mZGF5IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGdldHRpbWVvZmRheS4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfZnVuY19nZXR0aW1lb2ZkYXkrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMjM1MCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciBnZXR0aW1lb2ZkYXkgKCk7IGJlbG93LiAgKi8KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKy8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KK2NoYXIgZ2V0dGltZW9mZGF5ICgpOworY2hhciAoKmYpICgpOworCitpbnQKK21haW4gKCkKK3sKKy8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKKyAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAorICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworI2lmIGRlZmluZWQgKF9fc3R1Yl9nZXR0aW1lb2ZkYXkpIHx8IGRlZmluZWQgKF9fc3R1Yl9fX2dldHRpbWVvZmRheSkKK2Nob2tlIG1lCisjZWxzZQorZiA9IGdldHRpbWVvZmRheTsgLyogd29ya2Fyb3VuZCBmb3IgSUNDIDEyLjAuMyAqLyBpZiAoZiA9PSAwKSByZXR1cm4gMTsKKyNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxMjM4MTogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTIzODQ6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToxMjM4NzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEyMzkwOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3ZfZnVuY19nZXR0aW1lb2ZkYXk9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2FjX2N2X2Z1bmNfZ2V0dGltZW9mZGF5PW5vCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2VjaG8gIiRhc19tZToxMjQwMDogcmVzdWx0OiAkYWNfY3ZfZnVuY19nZXR0aW1lb2ZkYXkiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2Z1bmNfZ2V0dGltZW9mZGF5IiA+JjYKK2lmIHRlc3QgJGFjX2N2X2Z1bmNfZ2V0dGltZW9mZGF5ID0geWVzOyB0aGVuCisgIGNhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEhBVkVfR0VUVElNRU9GREFZIDEKK0VPRgorCitlbHNlCisKK2VjaG8gIiRhc19tZToxMjQwOTogY2hlY2tpbmcgZm9yIGdldHRpbWVvZmRheSBpbiAtbGJzZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBnZXR0aW1lb2ZkYXkgaW4gLWxic2QuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9ic2RfZ2V0dGltZW9mZGF5K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sYnNkICAkTElCUyIKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTI0MTcgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIGdldHRpbWVvZmRheSAoKTsKK2ludAorbWFpbiAoKQoreworZ2V0dGltZW9mZGF5ICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTI0MzY6IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEyNDM5OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTI0NDI6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMjQ0NTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X2xpYl9ic2RfZ2V0dGltZW9mZGF5PXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CithY19jdl9saWJfYnNkX2dldHRpbWVvZmRheT1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCitlY2hvICIkYXNfbWU6MTI0NTY6IHJlc3VsdDogJGFjX2N2X2xpYl9ic2RfZ2V0dGltZW9mZGF5IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfYnNkX2dldHRpbWVvZmRheSIgPiY2CitpZiB0ZXN0ICRhY19jdl9saWJfYnNkX2dldHRpbWVvZmRheSA9IHllczsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX0dFVFRJTUVPRkRBWSAxCitFT0YKKworCUxJQlM9IiRMSUJTIC1sYnNkIgorZmkKKworZmkKKwk7OworZXNhYworCisjIyMJQ2hlY2tzIGZvciBoZWFkZXIgZmlsZXMuCitlY2hvICIkYXNfbWU6MTI0NzI6IGNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIEFOU0kgQyBoZWFkZXIgZmlsZXMuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl9zdGRjK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTI0NzggImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGZsb2F0Lmg+CisKK19BQ0VPRgoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTI0ODY6IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZWdyZXAgLXYgJ14gKlwrJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOjEyNDkyOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKyAgZWxzZQorICAgIGFjX2NwcF9lcnI9CisgIGZpCitlbHNlCisgIGFjX2NwcF9lcnI9eWVzCitmaQoraWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCisgIGFjX2N2X2hlYWRlcl9zdGRjPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorCitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorICAjIFN1bk9TIDQueCBzdHJpbmcuaCBkb2VzIG5vdCBkZWNsYXJlIG1lbSosIGNvbnRyYXJ5IHRvIEFOU0kuCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTI1MTQgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHN0cmluZy5oPgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgZWdyZXAgIm1lbWNociIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIDoKK2Vsc2UKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KK2ZpCitybSAtcmYgY29uZnRlc3QqCisKK2ZpCisKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisgICMgSVNDIDIuMC4yIHN0ZGxpYi5oIGRvZXMgbm90IGRlY2xhcmUgZnJlZSwgY29udHJhcnkgdG8gQU5TSS4KKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMjUzMiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3RkbGliLmg+CisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICBlZ3JlcCAiZnJlZSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIDoKK2Vsc2UKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KK2ZpCitybSAtcmYgY29uZnRlc3QqCisKK2ZpCisKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisgICMgL2Jpbi9jYyBpbiBJcml4LTQuMC41IGdldHMgbm9uLUFOU0kgY3R5cGUgbWFjcm9zIHVubGVzcyB1c2luZyAtYW5zaS4KKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgOgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDEyNTUzICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2lmICgoJyAnICYgMHgwRkYpID09IDB4MDIwKQorIyBkZWZpbmUgSVNMT1dFUihjKSAoJ2EnIDw9IChjKSAmJiAoYykgPD0gJ3onKQorIyBkZWZpbmUgVE9VUFBFUihjKSAoSVNMT1dFUihjKSA/ICdBJyArICgoYykgLSAnYScpIDogKGMpKQorI2Vsc2UKKyMgZGVmaW5lIElTTE9XRVIoYykgKCgnYScgPD0gKGMpICYmIChjKSA8PSAnaScpIFwKKyAgICAgICAgICAgICAgICAgICAgIHx8ICgnaicgPD0gKGMpICYmIChjKSA8PSAncicpIFwKKyAgICAgICAgICAgICAgICAgICAgIHx8ICgncycgPD0gKGMpICYmIChjKSA8PSAneicpKQorIyBkZWZpbmUgVE9VUFBFUihjKSAoSVNMT1dFUihjKSA/ICgoYykgfCAweDQwKSA6IChjKSkKKyNlbmRpZgorCisjZGVmaW5lIFhPUihlLCBmKSAoKChlKSAmJiAhKGYpKSB8fCAoIShlKSAmJiAoZikpKQoraW50CittYWluICgpCit7CisgIGludCBpOworICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCisgICAgaWYgKFhPUiAoaXNsb3dlciAoaSksIElTTE9XRVIgKGkpKQorICAgICAgICB8fCB0b3VwcGVyIChpKSAhPSBUT1VQUEVSIChpKSkKKyAgICAgICRhY19tYWluX3JldHVybigyKTsKKyAgJGFjX21haW5fcmV0dXJuICgwKTsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxMjU3OTogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTI1ODI6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjEyNTg0OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTI1ODc6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICA6CitlbHNlCisgIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1CitlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CithY19jdl9oZWFkZXJfc3RkYz1ubworZmkKK3JtIC1mIGNvcmUgY29yZS4qICouY29yZSBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZmkKK2ZpCitlY2hvICIkYXNfbWU6MTI2MDA6IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9zdGRjIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9oZWFkZXJfc3RkYyIgPiY2CitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBTVERDX0hFQURFUlMgMQorRU9GCisKK2ZpCisKK2FjX2hlYWRlcl9kaXJlbnQ9bm8KK2ZvciBhY19oZHIgaW4gZGlyZW50Lmggc3lzL25kaXIuaCBzeXMvZGlyLmggbmRpci5oOyBkbworICBhc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl9kaXJlbnRfJGFjX2hkciIgfCAkYXNfdHJfc2hgCitlY2hvICIkYXNfbWU6MTI2MTM6IGNoZWNraW5nIGZvciAkYWNfaGRyIHRoYXQgZGVmaW5lcyBESVIiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hkciB0aGF0IGRlZmluZXMgRElSLi4uICRFQ0hPX0MiID4mNgoraWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDEyNjE5ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDwkYWNfaGRyPgorCitpbnQKK21haW4gKCkKK3sKK2lmICgoRElSICopIDApCityZXR1cm4gMDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTI2MzQ6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEyNjM3OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjEyNjQwOiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTI2NDM6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBldmFsICIkYXNfYWNfSGVhZGVyPXllcyIKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorZXZhbCAiJGFzX2FjX0hlYWRlcj1ubyIKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6MTI2NTM6IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQorZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgoraWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgorICBjYXQgPj5jb25mZGVmcy5oIDw8RU9GCisjZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZHIiIHwgJGFzX3RyX2NwcGAgMQorRU9GCisKK2FjX2hlYWRlcl9kaXJlbnQ9JGFjX2hkcjsgYnJlYWsKK2ZpCisKK2RvbmUKKyMgVHdvIHZlcnNpb25zIG9mIG9wZW5kaXIgZXQgYWwuIGFyZSBpbiAtbGRpciBhbmQgLWx4IG9uIFNDTyBYZW5peC4KK2lmIHRlc3QgJGFjX2hlYWRlcl9kaXJlbnQgPSBkaXJlbnQuaDsgdGhlbgorICBlY2hvICIkYXNfbWU6MTI2NjY6IGNoZWNraW5nIGZvciBvcGVuZGlyIGluIC1sZGlyIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG9wZW5kaXIgaW4gLWxkaXIuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9kaXJfb3BlbmRpcitzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGRpciAgJExJQlMiCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDEyNjc0ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciBvcGVuZGlyICgpOworaW50CittYWluICgpCit7CitvcGVuZGlyICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTI2OTM6IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEyNjk2OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTI2OTk6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMjcwMjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X2xpYl9kaXJfb3BlbmRpcj15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorYWNfY3ZfbGliX2Rpcl9vcGVuZGlyPW5vCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK2VjaG8gIiRhc19tZToxMjcxMzogcmVzdWx0OiAkYWNfY3ZfbGliX2Rpcl9vcGVuZGlyIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfZGlyX29wZW5kaXIiID4mNgoraWYgdGVzdCAkYWNfY3ZfbGliX2Rpcl9vcGVuZGlyID0geWVzOyB0aGVuCisgIExJQlM9IiRMSUJTIC1sZGlyIgorZmkKKworZWxzZQorICBlY2hvICIkYXNfbWU6MTI3MjA6IGNoZWNraW5nIGZvciBvcGVuZGlyIGluIC1seCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBvcGVuZGlyIGluIC1seC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfbGliX3hfb3BlbmRpcitzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbHggICRMSUJTIgorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMjcyOCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKy8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KK2NoYXIgb3BlbmRpciAoKTsKK2ludAorbWFpbiAoKQoreworb3BlbmRpciAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjEyNzQ3OiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMjc1MDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjEyNzUzOiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTI3NTY6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9saWJfeF9vcGVuZGlyPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CithY19jdl9saWJfeF9vcGVuZGlyPW5vCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK2VjaG8gIiRhc19tZToxMjc2NzogcmVzdWx0OiAkYWNfY3ZfbGliX3hfb3BlbmRpciIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX3hfb3BlbmRpciIgPiY2CitpZiB0ZXN0ICRhY19jdl9saWJfeF9vcGVuZGlyID0geWVzOyB0aGVuCisgIExJQlM9IiRMSUJTIC1seCIKK2ZpCisKK2ZpCisKK2VjaG8gIiRhc19tZToxMjc3NTogY2hlY2tpbmcgd2hldGhlciB0aW1lLmggYW5kIHN5cy90aW1lLmggbWF5IGJvdGggYmUgaW5jbHVkZWQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRpbWUuaCBhbmQgc3lzL3RpbWUuaCBtYXkgYm90aCBiZSBpbmNsdWRlZC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX3RpbWUrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMjc4MSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisKK2ludAorbWFpbiAoKQoreworaWYgKChzdHJ1Y3QgdG0gKikgMCkKK3JldHVybiAwOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxMjc5NzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTI4MDA6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTI4MDM6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMjgwNjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X2hlYWRlcl90aW1lPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CithY19jdl9oZWFkZXJfdGltZT1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2VjaG8gIiRhc19tZToxMjgxNjogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3RpbWUiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hlYWRlcl90aW1lIiA+JjYKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl90aW1lID0geWVzOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIFRJTUVfV0lUSF9TWVNfVElNRSAxCitFT0YKKworZmkKKworIyMjCWNoZWNrcyBmb3IgY29tcGlsZXIgY2hhcmFjdGVyaXN0aWNzCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CithY19tYWluX3JldHVybj1yZXR1cm4KKworZWNobyAiJGFzX21lOjEyODM0OiBjaGVja2luZyBmb3IgYW4gQU5TSSBDLWNvbmZvcm1pbmcgY29uc3QiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgYW4gQU5TSSBDLWNvbmZvcm1pbmcgY29uc3QuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X2NfY29uc3Qrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMjg0MCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKK2ludAorbWFpbiAoKQoreworLyogRklYTUU6IEluY2x1ZGUgdGhlIGNvbW1lbnRzIHN1Z2dlc3RlZCBieSBQYXVsLiAqLworI2lmbmRlZiBfX2NwbHVzcGx1cworICAvKiBVbHRyaXggbWlwcyBjYyByZWplY3RzIHRoaXMuICAqLworICB0eXBlZGVmIGludCBjaGFyc2V0WzJdOworICBjb25zdCBjaGFyc2V0IHg7CisgIC8qIFN1bk9TIDQuMS4xIGNjIHJlamVjdHMgdGhpcy4gICovCisgIGNoYXIgY29uc3QgKmNvbnN0ICpjY3A7CisgIGNoYXIgKipwOworICAvKiBORUMgU1ZSNC4wLjIgbWlwcyBjYyByZWplY3RzIHRoaXMuICAqLworICBzdHJ1Y3QgcG9pbnQge2ludCB4LCB5O307CisgIHN0YXRpYyBzdHJ1Y3QgcG9pbnQgY29uc3QgemVybyA9IHswLDB9OworICAvKiBBSVggWEwgQyAxLjAyLjAuMCByZWplY3RzIHRoaXMuCisgICAgIEl0IGRvZXMgbm90IGxldCB5b3Ugc3VidHJhY3Qgb25lIGNvbnN0IFgqIHBvaW50ZXIgZnJvbSBhbm90aGVyIGluCisgICAgIGFuIGFybSBvZiBhbiBpZi1leHByZXNzaW9uIHdob3NlIGlmLXBhcnQgaXMgbm90IGEgY29uc3RhbnQKKyAgICAgZXhwcmVzc2lvbiAqLworICBjb25zdCBjaGFyICpnID0gInN0cmluZyI7CisgIGNjcCA9ICZnICsgKGcgPyBnLWcgOiAwKTsKKyAgLyogSFBVWCA3LjAgY2MgcmVqZWN0cyB0aGVzZS4gKi8KKyAgKytjY3A7CisgIHAgPSAoY2hhcioqKSBjY3A7CisgIGNjcCA9IChjaGFyIGNvbnN0ICpjb25zdCAqKSBwOworICB7IC8qIFNDTyAzLjJ2NCBjYyByZWplY3RzIHRoaXMuICAqLworICAgIGNoYXIgKnQ7CisgICAgY2hhciBjb25zdCAqcyA9IDAgPyAoY2hhciAqKSAwIDogKGNoYXIgY29uc3QgKikgMDsKKworICAgICp0KysgPSAwOworICB9CisgIHsgLyogU29tZW9uZSB0aGlua3MgdGhlIFN1biBzdXBwb3NlZGx5LUFOU0kgY29tcGlsZXIgd2lsbCByZWplY3QgdGhpcy4gICovCisgICAgaW50IHhbXSA9IHsyNSwgMTd9OworICAgIGNvbnN0IGludCAqZm9vID0gJnhbMF07CisgICAgKytmb287CisgIH0KKyAgeyAvKiBTdW4gU0MxLjAgQU5TSSBjb21waWxlciByZWplY3RzIHRoaXMgLS0gYnV0IG5vdCB0aGUgYWJvdmUuICovCisgICAgdHlwZWRlZiBjb25zdCBpbnQgKmlwdHI7CisgICAgaXB0ciBwID0gMDsKKyAgICArK3A7CisgIH0KKyAgeyAvKiBBSVggWEwgQyAxLjAyLjAuMCByZWplY3RzIHRoaXMgc2F5aW5nCisgICAgICAgImsuYyIsIGxpbmUgMi4yNzogMTUwNi0wMjUgKFMpIE9wZXJhbmQgbXVzdCBiZSBhIG1vZGlmaWFibGUgbHZhbHVlLiAqLworICAgIHN0cnVjdCBzIHsgaW50IGo7IGNvbnN0IGludCAqYXBbM107IH07CisgICAgc3RydWN0IHMgKmI7IGItPmogPSA1OworICB9CisgIHsgLyogVUxUUklYLTMyIFYzLjEgKFJldiA5KSB2Y2MgcmVqZWN0cyB0aGlzICovCisgICAgY29uc3QgaW50IGZvbyA9IDEwOworICB9CisjZW5kaWYKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxMjg5ODogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTI5MDE6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTI5MDQ6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMjkwNzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X2NfY29uc3Q9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2FjX2N2X2NfY29uc3Q9bm8KK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6MTI5MTc6IHJlc3VsdDogJGFjX2N2X2NfY29uc3QiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2NfY29uc3QiID4mNgoraWYgdGVzdCAkYWNfY3ZfY19jb25zdCA9IG5vOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIGNvbnN0CitFT0YKKworZmkKKworIyMjCUNoZWNrcyBmb3IgZXh0ZXJuYWwtZGF0YQorCitlY2hvICIkYXNfbWU6MTI5Mjk6IGNoZWNraW5nIGlmIGRhdGEtb25seSBsaWJyYXJ5IG1vZHVsZSBsaW5rcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIGRhdGEtb25seSBsaWJyYXJ5IG1vZHVsZSBsaW5rcy4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7Y2ZfY3ZfbGlua19kYXRhb25seStzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorCisJcm0gLWYgY29uZnRlc3QuYQorCWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMTI5MzcgImNvbmZpZ3VyZSIKK2ludAl0ZXN0ZGF0YVszXSA9IHsgMTIzLCA0NTYsIDc4OSB9OworRU9GCisJaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTI5NDA6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEyOTQzOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gOyB0aGVuCisJCW12IGNvbmZ0ZXN0Lm8gZGF0YS5vICYmIFwKKwkJKCAkQVIgJEFSRkxBR1MgY29uZnRlc3QuYSBkYXRhLm8gKSAyPiY1IDE+L2Rldi9udWxsCisJZmkKKwlybSAtZiBjb25mdGVzdC4kYWNfZXh0IGRhdGEubworCWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMTI5NTAgImNvbmZpZ3VyZSIKK2ludAl0ZXN0ZnVuYygpCit7CisjaWYgZGVmaW5lZChOZVhUKQorCSR7Y2ZfY3ZfbWFpbl9yZXR1cm46LXJldHVybn0oMSk7CS8qIEknbSB0b2xkIHRoaXMgbGlua2VyIGlzIGJyb2tlbiAqLworI2Vsc2UKKwlleHRlcm4gaW50IHRlc3RkYXRhWzNdOworCXJldHVybiB0ZXN0ZGF0YVswXSA9PSAxMjMKKwkgICAmJiAgdGVzdGRhdGFbMV0gPT0gNDU2CisJICAgJiYgIHRlc3RkYXRhWzJdID09IDc4OTsKKyNlbmRpZgorfQorRU9GCisJaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTI5NjM6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEyOTY2OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IHRoZW4KKwkJbXYgY29uZnRlc3QubyBmdW5jLm8gJiYgXAorCQkoICRBUiAkQVJGTEFHUyBjb25mdGVzdC5hIGZ1bmMubyApIDI+JjUgMT4vZGV2L251bGwKKwlmaQorCXJtIC1mIGNvbmZ0ZXN0LiRhY19leHQgZnVuYy5vCisJKCBldmFsICRSQU5MSUIgY29uZnRlc3QuYSApIDI+JjUgPi9kZXYvbnVsbAorCWNmX3NhdmVMSUJTPSIkTElCUyIKKwlMSUJTPSJjb25mdGVzdC5hICRMSUJTIgorCWlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgIGNmX2N2X2xpbmtfZGF0YW9ubHk9dW5rbm93bgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDEyOTc5ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworCWludCBtYWluKCkKKwl7CisJCWV4dGVybiBpbnQgdGVzdGZ1bmMoKTsKKwkJJHtjZl9jdl9tYWluX3JldHVybjotcmV0dXJufSAoIXRlc3RmdW5jKCkpOworCX0KKworX0FDRU9GCitybSAtZiBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjEyOTkwOiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMjk5MzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTI5OTU6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMjk5ODogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGNmX2N2X2xpbmtfZGF0YW9ubHk9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1CitlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitjZl9jdl9saW5rX2RhdGFvbmx5PW5vCitmaQorcm0gLWYgY29yZSBjb3JlLiogKi5jb3JlIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisJTElCUz0iJGNmX3NhdmVMSUJTIgorCitmaQorCitlY2hvICIkYXNfbWU6MTMwMTM6IHJlc3VsdDogJGNmX2N2X2xpbmtfZGF0YW9ubHkiID4mNQorZWNobyAiJHtFQ0hPX1R9JGNmX2N2X2xpbmtfZGF0YW9ubHkiID4mNgorCitpZiB0ZXN0ICIkY2ZfY3ZfbGlua19kYXRhb25seSIgPSBubyA7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgQlJPS0VOX0xJTktFUiAxCitFT0YKKworCUJST0tFTl9MSU5LRVI9MQorZmkKKworIyMjCUNoZWNrcyBmb3IgbGlicmFyeSBmdW5jdGlvbnMuCisKK2VjaG8gIiRhc19tZToxMzAyNzogY2hlY2tpbmcgZm9yIHdvcmtpbmcgbWtzdGVtcCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciB3b3JraW5nIG1rc3RlbXAuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2NmX2N2X2Z1bmNfbWtzdGVtcCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorCitybSAtcmYgY29uZnRlc3QqCitpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICBjZl9jdl9mdW5jX21rc3RlbXA9bWF5YmUKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMzAzOCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CitpbnQgbWFpbigpCit7CisJY2hhciAqdG1wbCA9ICJjb25mdGVzdFhYWFhYWCI7CisJY2hhciBuYW1lWzJdWzgwXTsKKwlpbnQgbjsKKwlpbnQgcmVzdWx0ID0gMDsKKwlpbnQgZmQ7CisJc3RydWN0IHN0YXQgc2I7CisKKwl1bWFzaygwNzcpOworCWZvciAobiA9IDA7IG4gPCAyOyArK24pIHsKKwkJc3RyY3B5KG5hbWVbbl0sIHRtcGwpOworCQlpZiAoKGZkID0gbWtzdGVtcChuYW1lW25dKSkgPj0gMCkgeworCQkJaWYgKCFzdHJjbXAobmFtZVtuXSwgdG1wbCkKKwkJCSB8fCBzdGF0KG5hbWVbbl0sICZzYikgIT0gMAorCQkJIHx8IChzYi5zdF9tb2RlICYgU19JRk1UKSAhPSBTX0lGUkVHCisJCQkgfHwgKHNiLnN0X21vZGUgJiAwNzcpICE9IDApIHsKKwkJCQlyZXN1bHQgPSAxOworCQkJfQorCQkJY2xvc2UoZmQpOworCQl9CisJfQorCWlmIChyZXN1bHQgPT0gMAorCSAmJiAhc3RyY21wKG5hbWVbMF0sIG5hbWVbMV0pKQorCQlyZXN1bHQgPSAxOworCSR7Y2ZfY3ZfbWFpbl9yZXR1cm46LXJldHVybn0ocmVzdWx0KTsKK30KKworX0FDRU9GCitybSAtZiBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjEzMDc2OiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMzA3OTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTMwODE6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMzA4NDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGNmX2N2X2Z1bmNfbWtzdGVtcD15ZXMKKworZWxzZQorICBlY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorY2ZfY3ZfZnVuY19ta3N0ZW1wPW5vCisKK2ZpCitybSAtZiBjb3JlIGNvcmUuKiAqLmNvcmUgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKKworZmkKK2VjaG8gIiRhc19tZToxMzA5OTogcmVzdWx0OiAkY2ZfY3ZfZnVuY19ta3N0ZW1wIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9jdl9mdW5jX21rc3RlbXAiID4mNgoraWYgdGVzdCAieCRjZl9jdl9mdW5jX21rc3RlbXAiID0geG1heWJlIDsgdGhlbgorCWVjaG8gIiRhc19tZToxMzEwMjogY2hlY2tpbmcgZm9yIG1rc3RlbXAiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbWtzdGVtcC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfZnVuY19ta3N0ZW1wK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTMxMDggImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgbWtzdGVtcCAoKTsgYmVsb3cuICAqLworI2luY2x1ZGUgPGFzc2VydC5oPgorLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciBta3N0ZW1wICgpOworY2hhciAoKmYpICgpOworCitpbnQKK21haW4gKCkKK3sKKy8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKKyAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAorICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworI2lmIGRlZmluZWQgKF9fc3R1Yl9ta3N0ZW1wKSB8fCBkZWZpbmVkIChfX3N0dWJfX19ta3N0ZW1wKQorY2hva2UgbWUKKyNlbHNlCitmID0gbWtzdGVtcDsgLyogd29ya2Fyb3VuZCBmb3IgSUNDIDEyLjAuMyAqLyBpZiAoZiA9PSAwKSByZXR1cm4gMTsKKyNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxMzEzOTogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTMxNDI6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToxMzE0NTogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEzMTQ4OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3ZfZnVuY19ta3N0ZW1wPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CithY19jdl9mdW5jX21rc3RlbXA9bm8KK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZWNobyAiJGFzX21lOjEzMTU4OiByZXN1bHQ6ICRhY19jdl9mdW5jX21rc3RlbXAiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2Z1bmNfbWtzdGVtcCIgPiY2CisKK2ZpCitpZiB0ZXN0ICJ4JGNmX2N2X2Z1bmNfbWtzdGVtcCIgPSB4eWVzIHx8IHRlc3QgIngkYWNfY3ZfZnVuY19ta3N0ZW1wIiA9IHh5ZXMgOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEhBVkVfTUtTVEVNUCAxCitFT0YKKworZmkKKworaWYgdGVzdCAteiAiJGNmX3VzZXJfQ0ZMQUdTIiAmJiB0ZXN0ICIkd2l0aF9ub19sZWFrcyIgPSBubyA7IHRoZW4KKwlDRkxBR1M9YGVjaG8gJHtDRkxBR1N9IHwgc2VkIC1lICdzJS1nICUlJyAtZSAncyUtZyQlJSdgCisJQ1hYRkxBR1M9YGVjaG8gJHtDWFhGTEFHU30gfCBzZWQgLWUgJ3MlLWcgJSUnIC1lICdzJS1nJCUlJ2AKK2ZpCisKK2NmX3dpdGhfYWRhPXllcworaWYgdGVzdCAiJGNmX3dpdGhfYWRhIiAhPSAibm8iIDsgdGhlbgorCitjZl9hZGFfbWFrZT1nbmF0bWFrZQorIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkY2ZfYWRhX21ha2UiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRjZl9hZGFfbWFrZTsgYWNfd29yZD0kMgorZWNobyAiJGFzX21lOjEzMTgxOiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfZ25hdF9leGlzdHMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGduYXRfZXhpc3RzIjsgdGhlbgorICBhY19jdl9wcm9nX2duYXRfZXhpc3RzPSIkZ25hdF9leGlzdHMiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorICBhY19zYXZlX0lGUz0kSUZTOyBJRlM9JGFjX3BhdGhfc2VwYXJhdG9yCithY19kdW1teT0iJFBBVEgiCitmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKyAgSUZTPSRhY19zYXZlX0lGUworICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAkYXNfZXhlY3V0YWJsZV9wICIkYWNfZGlyLyRhY193b3JkIiB8fCBjb250aW51ZQorYWNfY3ZfcHJvZ19nbmF0X2V4aXN0cz0ieWVzIgorZWNobyAiJGFzX21lOjEzMTk2OiBmb3VuZCAkYWNfZGlyLyRhY193b3JkIiA+JjUKK2JyZWFrCitkb25lCisKKyAgdGVzdCAteiAiJGFjX2N2X3Byb2dfZ25hdF9leGlzdHMiICYmIGFjX2N2X3Byb2dfZ25hdF9leGlzdHM9Im5vIgorZmkKK2ZpCitnbmF0X2V4aXN0cz0kYWNfY3ZfcHJvZ19nbmF0X2V4aXN0cworaWYgdGVzdCAtbiAiJGduYXRfZXhpc3RzIjsgdGhlbgorICBlY2hvICIkYXNfbWU6MTMyMDU6IHJlc3VsdDogJGduYXRfZXhpc3RzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRnbmF0X2V4aXN0cyIgPiY2CitlbHNlCisgIGVjaG8gIiRhc19tZToxMzIwODogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2CitmaQorCitpZiB0ZXN0ICIkYWNfY3ZfcHJvZ19nbmF0X2V4aXN0cyIgPSBubzsgdGhlbgorCWNmX2FkYV9tYWtlPQorCWNmX2N2X3Byb2dfZ25hdF9jb3JyZWN0PW5vCitlbHNlCisKK2VjaG8gIiRhc19tZToxMzIxNzogY2hlY2tpbmcgZm9yIGduYXQgdmVyc2lvbiIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBnbmF0IHZlcnNpb24uLi4gJEVDSE9fQyIgPiY2CitjZl9nbmF0X3ZlcnNpb249YCR7Y2ZfYWRhX21ha2U6LWduYXRtYWtlfSAtdiAyPiYxIHwgXAorCWdyZXAgJ1swLTldLlswLTldWzAtOV0qJyB8XAorCXNlZCAtZSAnMiwkZCcgLWUgJ3MvW14wLTkgXC5dLy9nJyAtZSAncy9eWyBdKi8vJyAtZSAncy8gLiovLydgCitlY2hvICIkYXNfbWU6MTMyMjI6IHJlc3VsdDogJGNmX2duYXRfdmVyc2lvbiIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfZ25hdF92ZXJzaW9uIiA+JjYKKworY2FzZSAkY2ZfZ25hdF92ZXJzaW9uIGluCisoMy4xWzEtOV0qfDMuWzItOV0qfFs0LTldLip8MjBbMC05XVswLTldKQorCWNmX2N2X3Byb2dfZ25hdF9jb3JyZWN0PXllcworCTs7CisoKikKKwl7IGVjaG8gIiRhc19tZToxMzIzMDogV0FSTklORzogVW5zdXBwb3J0ZWQgR05BVCB2ZXJzaW9uICRjZl9nbmF0X3ZlcnNpb24uIFdlIHJlcXVpcmUgMy4xMSBvciBiZXR0ZXIuIERpc2FibGluZyBBZGE5NSBiaW5kaW5nLiIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6IFVuc3VwcG9ydGVkIEdOQVQgdmVyc2lvbiAkY2ZfZ25hdF92ZXJzaW9uLiBXZSByZXF1aXJlIDMuMTEgb3IgYmV0dGVyLiBEaXNhYmxpbmcgQWRhOTUgYmluZGluZy4iID4mMjt9CisJY2ZfY3ZfcHJvZ19nbmF0X2NvcnJlY3Q9bm8KKwk7OworZXNhYworCisJIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJtNCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgbTQ7IGFjX3dvcmQ9JDIKK2VjaG8gIiRhc19tZToxMzIzODogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9wcm9nX000X2V4aXN0cytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkTTRfZXhpc3RzIjsgdGhlbgorICBhY19jdl9wcm9nX000X2V4aXN0cz0iJE00X2V4aXN0cyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCisgIGFjX3NhdmVfSUZTPSRJRlM7IElGUz0kYWNfcGF0aF9zZXBhcmF0b3IKK2FjX2R1bW15PSIkUEFUSCIKK2ZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbworICBJRlM9JGFjX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICRhc19leGVjdXRhYmxlX3AgIiRhY19kaXIvJGFjX3dvcmQiIHx8IGNvbnRpbnVlCithY19jdl9wcm9nX000X2V4aXN0cz0ieWVzIgorZWNobyAiJGFzX21lOjEzMjUzOiBmb3VuZCAkYWNfZGlyLyRhY193b3JkIiA+JjUKK2JyZWFrCitkb25lCisKKyAgdGVzdCAteiAiJGFjX2N2X3Byb2dfTTRfZXhpc3RzIiAmJiBhY19jdl9wcm9nX000X2V4aXN0cz0ibm8iCitmaQorZmkKK000X2V4aXN0cz0kYWNfY3ZfcHJvZ19NNF9leGlzdHMKK2lmIHRlc3QgLW4gIiRNNF9leGlzdHMiOyB0aGVuCisgIGVjaG8gIiRhc19tZToxMzI2MjogcmVzdWx0OiAkTTRfZXhpc3RzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRNNF9leGlzdHMiID4mNgorZWxzZQorICBlY2hvICIkYXNfbWU6MTMyNjU6IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorZmkKKworCWlmIHRlc3QgIiRhY19jdl9wcm9nX000X2V4aXN0cyIgPSBubzsgdGhlbgorCQljZl9jdl9wcm9nX2duYXRfY29ycmVjdD1ubworCQllY2hvIEFkYTk1IGJpbmRpbmcgcmVxdWlyZWQgcHJvZ3JhbSBtNCBub3QgZm91bmQuIEFkYTk1IGJpbmRpbmcgZGlzYWJsZWQuCisJZmkKKwlpZiB0ZXN0ICIkY2ZfY3ZfcHJvZ19nbmF0X2NvcnJlY3QiID0geWVzOyB0aGVuCisJCWVjaG8gIiRhc19tZToxMzI3NDogY2hlY2tpbmcgaWYgR05BVCB3b3JrcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIEdOQVQgd29ya3MuLi4gJEVDSE9fQyIgPiY2CisKK3JtIC1yZiBjb25mdGVzdCogKn5jb25mdGVzdCoKK2NhdCA+PmNvbmZ0ZXN0LmFkcyA8PENGX0VPRgorcHJvY2VkdXJlIGNvbmZ0ZXN0OworQ0ZfRU9GCitjYXQgPj5jb25mdGVzdC5hZGIgPDxDRl9FT0YKK3dpdGggVGV4dF9JTzsKK3dpdGggR05BVC5PU19MaWI7Citwcm9jZWR1cmUgY29uZnRlc3QgaXMKK2JlZ2luCisgICBUZXh0X0lPLlB1dCAoIkhlbGxvIFdvcmxkIik7CisgICBUZXh0X0lPLk5ld19MaW5lOworICAgR05BVC5PU19MaWIuT1NfRXhpdCAoMCk7CitlbmQgY29uZnRlc3Q7CitDRl9FT0YKK2lmICggJGNmX2FkYV9tYWtlICRBREFGTEFHUyBjb25mdGVzdCAxPiY1IDI+JjEgKSA7IHRoZW4KKyAgIGlmICggLi9jb25mdGVzdCAxPiY1IDI+JjEgKSA7IHRoZW4KKyAgICAgIGNmX2N2X3Byb2dfZ25hdF9jb3JyZWN0PXllcworICAgZWxzZQorICAgICAgY2ZfY3ZfcHJvZ19nbmF0X2NvcnJlY3Q9bm8KKyAgIGZpCitlbHNlCisgICBjZl9jdl9wcm9nX2duYXRfY29ycmVjdD1ubworZmkKK3JtIC1yZiBjb25mdGVzdCogKn5jb25mdGVzdCoKKworCQllY2hvICIkYXNfbWU6MTMzMDI6IHJlc3VsdDogJGNmX2N2X3Byb2dfZ25hdF9jb3JyZWN0IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9jdl9wcm9nX2duYXRfY29ycmVjdCIgPiY2CisJZmkKK2ZpCisKKwlpZiB0ZXN0CSIkY2ZfY3ZfcHJvZ19nbmF0X2NvcnJlY3QiID0geWVzOyB0aGVuCisKKwllY2hvICIkYXNfbWU6MTMzMDk6IGNoZWNraW5nIG9wdGltaXphdGlvbiBvcHRpb25zIGZvciBBREFGTEFHUyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIG9wdGltaXphdGlvbiBvcHRpb25zIGZvciBBREFGTEFHUy4uLiAkRUNIT19DIiA+JjYKKwljYXNlICIkQ0ZMQUdTIiBpbgorCSgqLWcqKQorCisgCUFEQUZMQUdTPSIkQURBRkxBR1MgLWciCisKKwkJOzsKKwllc2FjCisJY2FzZSAiJENGTEFHUyIgaW4KKwkoKi1PKikKKwkJY2ZfT19mbGFnPWBlY2hvICIkQ0ZMQUdTIiB8c2VkIC1lICdzL14uKi1PLy1PLycgLWUgJ3MvWyAJXS4qLy8nYAorCisgCUFEQUZMQUdTPSIkQURBRkxBR1MgJGNmX09fZmxhZyIKKworCQk7OworCWVzYWMKKwllY2hvICIkYXNfbWU6MTMzMjY6IHJlc3VsdDogJEFEQUZMQUdTIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRBREFGTEFHUyIgPiY2CisKK2VjaG8gIiRhc19tZToxMzMyOTogY2hlY2tpbmcgaWYgR05BVFBSRVAgc3VwcG9ydHMgLVQgb3B0aW9uIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgR05BVFBSRVAgc3VwcG9ydHMgLVQgb3B0aW9uLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHtjZl9jdl9nbmF0cHJlcF9vcHRfdCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorCitjZl9jdl9nbmF0cHJlcF9vcHRfdD1ubworZ25hdHByZXAgLVQgMj4vZGV2L251bGwgPi9kZXYvbnVsbCAmJiBjZl9jdl9nbmF0cHJlcF9vcHRfdD15ZXMKKworZmkKK2VjaG8gIiRhc19tZToxMzMzOTogcmVzdWx0OiAkY2ZfY3ZfZ25hdHByZXBfb3B0X3QiID4mNQorZWNobyAiJHtFQ0hPX1R9JGNmX2N2X2duYXRwcmVwX29wdF90IiA+JjYKK3Rlc3QgIiRjZl9jdl9nbmF0cHJlcF9vcHRfdCIgPSB5ZXMgJiYgR05BVFBSRVBfT1BUUz0iLVQgJEdOQVRQUkVQX09QVFMiCisKK2VjaG8gIiRhc19tZToxMzM0MzogY2hlY2tpbmcgaWYgR05BVCBzdXBwb3J0cyBnZW5lcmljcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIEdOQVQgc3VwcG9ydHMgZ2VuZXJpY3MuLi4gJEVDSE9fQyIgPiY2CitjYXNlICRjZl9nbmF0X3ZlcnNpb24gaW4KKygzLlsxLTldKnxbNC05XS4qKQorCWNmX2duYXRfZ2VuZXJpY3M9eWVzCisJOzsKKygqKQorCWNmX2duYXRfZ2VuZXJpY3M9bm8KKwk7OworZXNhYworZWNobyAiJGFzX21lOjEzMzUzOiByZXN1bHQ6ICRjZl9nbmF0X2dlbmVyaWNzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9nbmF0X2dlbmVyaWNzIiA+JjYKKworaWYgdGVzdCAiJGNmX2duYXRfZ2VuZXJpY3MiID0geWVzCit0aGVuCisJY2ZfY29tcGlsZV9nZW5lcmljcz1nZW5lcmljcworCWNmX2dlbmVyaWNfb2JqZWN0cz0iXCR7R0VOT0JKU30iCitlbHNlCisJY2ZfY29tcGlsZV9nZW5lcmljcz0KKwljZl9nZW5lcmljX29iamVjdHM9CitmaQorCitlY2hvICIkYXNfbWU6MTMzNjU6IGNoZWNraW5nIGlmIEdOQVQgc3VwcG9ydHMgU0lHSU5UIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgR05BVCBzdXBwb3J0cyBTSUdJTlQuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2NmX2N2X2duYXRfc2lnaW50K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKK3JtIC1yZiBjb25mdGVzdCogKn5jb25mdGVzdCoKK2NhdCA+PmNvbmZ0ZXN0LmFkcyA8PENGX0VPRgord2l0aCBBZGEuSW50ZXJydXB0cy5OYW1lczsKKworcGFja2FnZSBDb25mVGVzdCBpcworCisgICBwcmFnbWEgV2FybmluZ3MgKE9mZik7ICAtLSAgdGhlIG5leHQgcHJhZ21hIGV4aXN0cyBzaW5jZSAzLjExcAorICAgcHJhZ21hIFVucmVzZXJ2ZV9BbGxfSW50ZXJydXB0czsKKyAgIHByYWdtYSBXYXJuaW5ncyAoT24pOworCisgICBwcm90ZWN0ZWQgUHJvY2VzcyBpcworICAgICAgcHJvY2VkdXJlIFN0b3A7CisgICAgICBmdW5jdGlvbiBDb250aW51ZSByZXR1cm4gQm9vbGVhbjsKKyAgICAgIHByYWdtYSBBdHRhY2hfSGFuZGxlciAoU3RvcCwgQWRhLkludGVycnVwdHMuTmFtZXMuU0lHSU5UKTsKKyAgIHByaXZhdGUKKyAgICAgIERvbmUgOiBCb29sZWFuIDo9IEZhbHNlOworICAgZW5kIFByb2Nlc3M7CisKK2VuZCBDb25mVGVzdDsKK0NGX0VPRgorY2F0ID4+Y29uZnRlc3QuYWRiIDw8Q0ZfRU9GCitwYWNrYWdlIGJvZHkgQ29uZlRlc3QgaXMKKyAgIHByb3RlY3RlZCBib2R5IFByb2Nlc3MgaXMKKyAgICAgIHByb2NlZHVyZSBTdG9wIGlzCisgICAgICBiZWdpbgorICAgICAgICAgRG9uZSA6PSBUcnVlOworICAgICAgZW5kIFN0b3A7CisgICAgICBmdW5jdGlvbiBDb250aW51ZSByZXR1cm4gQm9vbGVhbiBpcworICAgICAgYmVnaW4KKyAgICAgICAgIHJldHVybiBub3QgRG9uZTsKKyAgICAgIGVuZCBDb250aW51ZTsKKyAgIGVuZCBQcm9jZXNzOworZW5kIENvbmZUZXN0OworQ0ZfRU9GCitpZiAoICRjZl9hZGFfbWFrZSAkQURBRkxBR1MgY29uZnRlc3QgMT4mNSAyPiYxICkgOyB0aGVuCisgICAgICBjZl9jdl9nbmF0X3NpZ2ludD15ZXMKK2Vsc2UKKyAgIGNmX2N2X2duYXRfc2lnaW50PW5vCitmaQorcm0gLXJmIGNvbmZ0ZXN0KiAqfmNvbmZ0ZXN0KgorCitmaQorZWNobyAiJGFzX21lOjEzNDEzOiByZXN1bHQ6ICRjZl9jdl9nbmF0X3NpZ2ludCIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfY3ZfZ25hdF9zaWdpbnQiID4mNgorCitpZiB0ZXN0ICRjZl9jdl9nbmF0X3NpZ2ludCA9IHllcyA7IHRoZW4KKwlVU0VfR05BVF9TSUdJTlQ9IiIKK2Vsc2UKKwlVU0VfR05BVF9TSUdJTlQ9IiMiCitmaQorCitjZl9nbmF0X2xpYnJhcmllcz1ubworY2ZfZ25hdF9wcm9qZWN0cz1ubworCitpZiB0ZXN0ICIkZW5hYmxlX2duYXRfcHJvamVjdHMiICE9IG5vIDsgdGhlbgorZWNobyAiJGFzX21lOjEzNDI2OiBjaGVja2luZyBpZiBHTkFUIHN1cHBvcnRzIHByb2plY3QgZmlsZXMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiBHTkFUIHN1cHBvcnRzIHByb2plY3QgZmlsZXMuLi4gJEVDSE9fQyIgPiY2CitjYXNlICRjZl9nbmF0X3ZlcnNpb24gaW4KKygzLlswLTldKikKKwk7OworKCopCisJY2FzZSAkY2ZfY3Zfc3lzdGVtX25hbWUgaW4KKwkoY3lnd2luKnxtc3lzKikKKwkJOzsKKwkoKikKKwkJbWtkaXIgY29uZnRlc3Quc3JjIGNvbmZ0ZXN0LmJpbiBjb25mdGVzdC5saWIKKwkJY2QgY29uZnRlc3Quc3JjCisJCXJtIC1yZiBjb25mdGVzdCogKn5jb25mdGVzdCoKKwkJY2F0ID4+bGlicmFyeS5ncHIgPDxDRl9FT0YKK3Byb2plY3QgTGlicmFyeSBpcworICBLaW5kIDo9IEV4dGVybmFsICgiTElCX0tJTkQiKTsKKyAgZm9yIExpYnJhcnlfTmFtZSB1c2UgIkNvbmZUZXN0IjsKKyAgZm9yIE9iamVjdF9EaXIgdXNlICIuIjsKKyAgZm9yIExpYnJhcnlfQUxJX0RpciB1c2UgRXh0ZXJuYWwoIkxJQlJBUllfRElSIik7CisgIGZvciBMaWJyYXJ5X1ZlcnNpb24gdXNlIEV4dGVybmFsICgiU09OQU1FIik7CisgIGZvciBMaWJyYXJ5X0tpbmQgdXNlIEtpbmQ7CisgIGZvciBMaWJyYXJ5X0RpciB1c2UgRXh0ZXJuYWwoIkJVSUxEX0RJUiIpOworICBTb3VyY2VfRGlyIDo9IEV4dGVybmFsICgiU09VUkNFX0RJUiIpOworICBmb3IgU291cmNlX0RpcnMgdXNlIChTb3VyY2VfRGlyKTsKK2VuZCBMaWJyYXJ5OworQ0ZfRU9GCisJCWNhdCA+PmNvbmZwYWNrYWdlLmFkcyA8PENGX0VPRgorcGFja2FnZSBDb25mUGFja2FnZSBpcworICAgcHJvY2VkdXJlIGNvbmZ0ZXN0OworZW5kIENvbmZQYWNrYWdlOworQ0ZfRU9GCisJCWNhdCA+PmNvbmZwYWNrYWdlLmFkYiA8PENGX0VPRgord2l0aCBUZXh0X0lPOworcGFja2FnZSBib2R5IENvbmZQYWNrYWdlIGlzCisgICBwcm9jZWR1cmUgY29uZnRlc3QgaXMKKyAgIGJlZ2luCisgICAgICBUZXh0X0lPLlB1dCAoIkhlbGxvIFdvcmxkIik7CisgICAgICBUZXh0X0lPLk5ld19MaW5lOworICAgZW5kIGNvbmZ0ZXN0OworZW5kIENvbmZQYWNrYWdlOworQ0ZfRU9GCisJCWlmICggJGNmX2FkYV9tYWtlICRBREFGTEFHUyBcCisJCQkJLVBsaWJyYXJ5LmdwciBcCisJCQkJLVhCVUlMRF9ESVI9YGNkIC4uL2NvbmZ0ZXN0LmJpbjtwd2RgIFwKKwkJCQktWExJQlJBUllfRElSPWBjZCAuLi9jb25mdGVzdC5saWI7cHdkYCBcCisJCQkJLVhTT1VSQ0VfRElSPWBwd2RgIFwKKwkJCQktWFNPTkFNRT1saWJDb25mVGVzdC5zby4xIFwKKwkJCQktWExJQl9LSU5EPXN0YXRpYyAxPiY1IDI+JjEgKSA7IHRoZW4KKwkJCWNmX2duYXRfcHJvamVjdHM9eWVzCisJCWZpCisJCWNkIC4uCisJCWlmIHRlc3QgLWYgY29uZnRlc3QubGliL2NvbmZwYWNrYWdlLmFsaQorCQl0aGVuCisJCQljZl9nbmF0X2xpYnJhcmllcz15ZXMKKwkJZmkKKwkJcm0gLXJmIGNvbmZ0ZXN0KiAqfmNvbmZ0ZXN0KgorCQk7OworCWVzYWMKKwk7OworZXNhYworZWNobyAiJGFzX21lOjEzNDg2OiByZXN1bHQ6ICRjZl9nbmF0X3Byb2plY3RzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9nbmF0X3Byb2plY3RzIiA+JjYKK2ZpICMgZW5hYmxlX2duYXRfcHJvamVjdHMKKworaWYgdGVzdCAkY2ZfZ25hdF9wcm9qZWN0cyA9IHllcwordGhlbgorCWVjaG8gIiRhc19tZToxMzQ5MjogY2hlY2tpbmcgaWYgR05BVCBzdXBwb3J0cyBsaWJyYXJpZXMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiBHTkFUIHN1cHBvcnRzIGxpYnJhcmllcy4uLiAkRUNIT19DIiA+JjYKKwllY2hvICIkYXNfbWU6MTM0OTQ6IHJlc3VsdDogJGNmX2duYXRfbGlicmFyaWVzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9nbmF0X2xpYnJhcmllcyIgPiY2CitmaQorCitpZiB0ZXN0ICIkY2ZfZ25hdF9wcm9qZWN0cyIgPSB5ZXMKK3RoZW4KKwlVU0VfT0xEX01BS0VSVUxFUz0iIyIKKwlVU0VfR05BVF9QUk9KRUNUUz0iIgorZWxzZQorCVVTRV9PTERfTUFLRVJVTEVTPSIiCisJVVNFX0dOQVRfUFJPSkVDVFM9IiMiCitmaQorCitpZiB0ZXN0ICIkY2ZfZ25hdF9saWJyYXJpZXMiID0geWVzCit0aGVuCisJVVNFX0dOQVRfTElCUkFSSUVTPSIiCitlbHNlCisJVVNFX0dOQVRfTElCUkFSSUVTPSIjIgorZmkKKworZWNobyAiJGFzX21lOjEzNTE0OiBjaGVja2luZyBmb3IgYWRhLWNvbXBpbGVyIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGFkYS1jb21waWxlci4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1hZGEtY29tcGlsZXIgb3IgLS13aXRob3V0LWFkYS1jb21waWxlciB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfYWRhX2NvbXBpbGVyK3NldH0iID0gc2V0OyB0aGVuCisgIHdpdGh2YWw9IiR3aXRoX2FkYV9jb21waWxlciIKKyAgY2ZfYWRhX2NvbXBpbGVyPSR3aXRodmFsCitlbHNlCisgIGNmX2FkYV9jb21waWxlcj1nbmF0bWFrZQorZmk7CisKK2VjaG8gIiRhc19tZToxMzUyNTogcmVzdWx0OiAkY2ZfYWRhX2NvbXBpbGVyIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9hZGFfY29tcGlsZXIiID4mNgorCisJCWNmX2FkYV9wYWNrYWdlPXRlcm1pbmFsX2ludGVyZmFjZQorCitlY2hvICIkYXNfbWU6MTM1MzA6IGNoZWNraW5nIGZvciBhZGEtaW5jbHVkZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBhZGEtaW5jbHVkZS4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1hZGEtaW5jbHVkZSBvciAtLXdpdGhvdXQtYWRhLWluY2x1ZGUgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2FkYV9pbmNsdWRlK3NldH0iID0gc2V0OyB0aGVuCisgIHdpdGh2YWw9IiR3aXRoX2FkYV9pbmNsdWRlIgorCitlbHNlCisgIHdpdGh2YWw9IiR7QURBX0lOQ0xVREU6LSRwcmVmaXgvc2hhcmUvYWRhL2FkYWluY2x1ZGV9IgorZmk7IGlmIHRlc3QgLW4gIiRwcmVmaXgvc2hhcmUvYWRhL2FkYWluY2x1ZGUiIDsgdGhlbgorCitpZiB0ZXN0ICJ4JHByZWZpeCIgIT0geE5PTkU7IHRoZW4KKwljZl9wYXRoX3N5bnRheD0iJHByZWZpeCIKK2Vsc2UKKwljZl9wYXRoX3N5bnRheD0iJGFjX2RlZmF1bHRfcHJlZml4IgorZmkKKworY2FzZSAiLiR3aXRodmFsIiBpbgorKC5cJFwoKlwpKnwuXCcqXCcqKQorCTs7CisoLi58Li8qfC5cXCopCisJOzsKKyguW2EtekEtWl06W1xcL10qKSAjIE9TLzIgRU1YCisJOzsKKyguXCR7KnByZWZpeH0qfC5cJHsqZGlyfSopCisJZXZhbCB3aXRodmFsPSIkd2l0aHZhbCIKKwljYXNlICIuJHdpdGh2YWwiIGluCisJKC5OT05FLyopCisJCXdpdGh2YWw9YGVjaG8gJHdpdGh2YWwgfCBzZWQgLWUgcyVOT05FJSRjZl9wYXRoX3N5bnRheCVgCisJCTs7CisJZXNhYworCTs7CisoLm5vfC5OT05FLyopCisJd2l0aHZhbD1gZWNobyAkd2l0aHZhbCB8IHNlZCAtZSBzJU5PTkUlJGNmX3BhdGhfc3ludGF4JWAKKwk7OworKCopCisJeyB7IGVjaG8gIiRhc19tZToxMzU2NjogZXJyb3I6IGV4cGVjdGVkIGEgcGF0aG5hbWUsIG5vdCBcIiR3aXRodmFsXCIiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogZXhwZWN0ZWQgYSBwYXRobmFtZSwgbm90IFwiJHdpdGh2YWxcIiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorCTs7Citlc2FjCisKK2ZpCitldmFsIEFEQV9JTkNMVURFPSIkd2l0aHZhbCIKKworZWNobyAiJGFzX21lOjEzNTc1OiByZXN1bHQ6ICRBREFfSU5DTFVERSIgPiY1CitlY2hvICIke0VDSE9fVH0kQURBX0lOQ0xVREUiID4mNgorCitlY2hvICIkYXNfbWU6MTM1Nzg6IGNoZWNraW5nIGZvciBhZGEtb2JqZWN0cyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBhZGEtb2JqZWN0cy4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1hZGEtb2JqZWN0cyBvciAtLXdpdGhvdXQtYWRhLW9iamVjdHMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2FkYV9vYmplY3RzK3NldH0iID0gc2V0OyB0aGVuCisgIHdpdGh2YWw9IiR3aXRoX2FkYV9vYmplY3RzIgorCitlbHNlCisgIHdpdGh2YWw9IiR7QURBX09CSkVDVFM6LSRwcmVmaXgvbGliL2FkYS9hZGFsaWJ9IgorZmk7IGlmIHRlc3QgLW4gIiRwcmVmaXgvbGliL2FkYS9hZGFsaWIiIDsgdGhlbgorCitpZiB0ZXN0ICJ4JHByZWZpeCIgIT0geE5PTkU7IHRoZW4KKwljZl9wYXRoX3N5bnRheD0iJHByZWZpeCIKK2Vsc2UKKwljZl9wYXRoX3N5bnRheD0iJGFjX2RlZmF1bHRfcHJlZml4IgorZmkKKworY2FzZSAiLiR3aXRodmFsIiBpbgorKC5cJFwoKlwpKnwuXCcqXCcqKQorCTs7CisoLi58Li8qfC5cXCopCisJOzsKKyguW2EtekEtWl06W1xcL10qKSAjIE9TLzIgRU1YCisJOzsKKyguXCR7KnByZWZpeH0qfC5cJHsqZGlyfSopCisJZXZhbCB3aXRodmFsPSIkd2l0aHZhbCIKKwljYXNlICIuJHdpdGh2YWwiIGluCisJKC5OT05FLyopCisJCXdpdGh2YWw9YGVjaG8gJHdpdGh2YWwgfCBzZWQgLWUgcyVOT05FJSRjZl9wYXRoX3N5bnRheCVgCisJCTs7CisJZXNhYworCTs7CisoLm5vfC5OT05FLyopCisJd2l0aHZhbD1gZWNobyAkd2l0aHZhbCB8IHNlZCAtZSBzJU5PTkUlJGNmX3BhdGhfc3ludGF4JWAKKwk7OworKCopCisJeyB7IGVjaG8gIiRhc19tZToxMzYxNDogZXJyb3I6IGV4cGVjdGVkIGEgcGF0aG5hbWUsIG5vdCBcIiR3aXRodmFsXCIiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogZXhwZWN0ZWQgYSBwYXRobmFtZSwgbm90IFwiJHdpdGh2YWxcIiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorCTs7Citlc2FjCisKK2ZpCitldmFsIEFEQV9PQkpFQ1RTPSIkd2l0aHZhbCIKKworZWNobyAiJGFzX21lOjEzNjIzOiByZXN1bHQ6ICRBREFfT0JKRUNUUyIgPiY1CitlY2hvICIke0VDSE9fVH0kQURBX09CSkVDVFMiID4mNgorCitlY2hvICIkYXNfbWU6MTM2MjY6IGNoZWNraW5nIGlmIGFuIEFkYTk1IHNoYXJlZC1saWJyYXJ5IHNob3VsZCBiZSBidWlsdCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIGFuIEFkYTk1IHNoYXJlZC1saWJyYXJ5IHNob3VsZCBiZSBidWlsdC4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1hZGEtc2hhcmVkbGliIG9yIC0td2l0aG91dC1hZGEtc2hhcmVkbGliIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9hZGFfc2hhcmVkbGliK3NldH0iID0gc2V0OyB0aGVuCisgIHdpdGh2YWw9IiR3aXRoX2FkYV9zaGFyZWRsaWIiCisgIHdpdGhfYWRhX3NoYXJlZGxpYj0kd2l0aHZhbAorZWxzZQorICB3aXRoX2FkYV9zaGFyZWRsaWI9bm8KK2ZpOworZWNobyAiJGFzX21lOjEzNjM2OiByZXN1bHQ6ICR3aXRoX2FkYV9zaGFyZWRsaWIiID4mNQorZWNobyAiJHtFQ0hPX1R9JHdpdGhfYWRhX3NoYXJlZGxpYiIgPiY2CisKK0FEQV9TSEFSRURMSUI9J2xpYiQoTElCX05BTUUpLnNvLjEnCitNQUtFX0FEQV9TSEFSRURMSUI9IiMiCisKK2lmIHRlc3QgIngkd2l0aF9hZGFfc2hhcmVkbGliIiAhPSB4bm8KK3RoZW4KKwlNQUtFX0FEQV9TSEFSRURMSUI9CisJaWYgdGVzdCAieCR3aXRoX2FkYV9zaGFyZWRsaWIiICE9IHh5ZXMKKwl0aGVuCisJCUFEQV9TSEFSRURMSUI9IiR3aXRoX2FkYV9zaGFyZWRsaWIiCisJZmkKK2ZpCisKKwllbHNlCisJCXsgeyBlY2hvICIkYXNfbWU6MTM2NTI6IGVycm9yOiBObyB1c2FibGUgQWRhIGNvbXBpbGVyIGZvdW5kIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IE5vIHVzYWJsZSBBZGEgY29tcGlsZXIgZm91bmQiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKwlmaQorZWxzZQorCXsgeyBlY2hvICIkYXNfbWU6MTM2NTc6IGVycm9yOiBUaGUgQWRhIGNvbXBpbGVyIGlzIG5lZWRlZCBmb3IgdGhpcyBwYWNrYWdlIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IFRoZSBBZGEgY29tcGlsZXIgaXMgbmVlZGVkIGZvciB0aGlzIHBhY2thZ2UiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK2ZpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgbm90IG5lZWRlZAorVElORk9fTERGTEFHUzI9CisKK1RJTkZPX0xJQlM9CisKKyMjIyBDb25zdHJ1Y3QgdGhlIGxpc3Qgb2YgaW5jbHVkZS1kaXJlY3RvcmllcyB0byBiZSBnZW5lcmF0ZWQKKworaWYgdGVzdCAiJHNyY2RpciIgIT0gIi4iOyB0aGVuCisJQ1BQRkxBR1M9Ii1JXCR7c3JjZGlyfS8uLi9pbmNsdWRlICRDUFBGTEFHUyIKK2ZpCitDUFBGTEFHUz0iLUkuLi9pbmNsdWRlICRDUFBGTEFHUyIKK2lmIHRlc3QgIiRzcmNkaXIiICE9ICIuIjsgdGhlbgorCUNQUEZMQUdTPSItSVwke3NyY2Rpcn0gJENQUEZMQUdTIgorZmkKK0NQUEZMQUdTPSItSS4gJENQUEZMQUdTIgorCitBQ1BQRkxBR1M9Ii1JLiAtSS4uL2luY2x1ZGUgLUkuLi8uLi9pbmNsdWRlICRBQ1BQRkxBR1MiCitpZiB0ZXN0ICIkc3JjZGlyIiAhPSAiLiI7IHRoZW4KKwlBQ1BQRkxBR1M9Ii1JXCR7c3JjZGlyfS8uLi8uLi9pbmNsdWRlICRBQ1BQRkxBR1MiCitmaQoraWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisJQUNQUEZMQUdTPSIkQUNQUEZMQUdTIC1JXCR7aW5jbHVkZWRpcn0iCitlbGlmIHRlc3QgIiRpbmNsdWRlZGlyIiAhPSAiL3Vzci9pbmNsdWRlIjsgdGhlbgorCWlmIHRlc3QgIiRpbmNsdWRlZGlyIiA9ICcke3ByZWZpeH0vaW5jbHVkZScgOyB0aGVuCisJCWlmIHRlc3QgeCRwcmVmaXggIT0geC91c3IgOyB0aGVuCisJCQlBQ1BQRkxBR1M9IiRBQ1BQRkxBR1MgLUlcJHtpbmNsdWRlZGlyfSIKKwkJZmkKKwllbHNlCisJCUFDUFBGTEFHUz0iJEFDUFBGTEFHUyAtSVwke2luY2x1ZGVkaXJ9IgorCWZpCitmaQorCisjIyMgQnVpbGQgdXAgcGllY2VzIGZvciBtYWtlZmlsZSBydWxlcworZWNobyAiJGFzX21lOjEzNjk3OiBjaGVja2luZyBkZWZhdWx0IGxpYnJhcnkgc3VmZml4IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZGVmYXVsdCBsaWJyYXJ5IHN1ZmZpeC4uLiAkRUNIT19DIiA+JjYKKworCWNhc2UgJERGVF9MV1JfTU9ERUwgaW4KKwkobGlidG9vbCkgREZUX0FSR19TVUZGSVg9JycgICA7OworCShub3JtYWwpICBERlRfQVJHX1NVRkZJWD0nJyAgIDs7CisJKGRlYnVnKSAgIERGVF9BUkdfU1VGRklYPSdfZycgOzsKKwkocHJvZmlsZSkgREZUX0FSR19TVUZGSVg9J19wJyA7OworCShzaGFyZWQpICBERlRfQVJHX1NVRkZJWD0nJyAgIDs7CisJZXNhYworCXRlc3QgLW4gIiRMSUJfU1VGRklYIiAmJiBERlRfQVJHX1NVRkZJWD0iJHtMSUJfU1VGRklYfSR7REZUX0FSR19TVUZGSVh9IgorZWNobyAiJGFzX21lOjEzNzA4OiByZXN1bHQ6ICRERlRfQVJHX1NVRkZJWCIgPiY1CitlY2hvICIke0VDSE9fVH0kREZUX0FSR19TVUZGSVgiID4mNgorCitlY2hvICIkYXNfbWU6MTM3MTE6IGNoZWNraW5nIGRlZmF1bHQgbGlicmFyeS1kZXBlbmRlbmN5IHN1ZmZpeCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGRlZmF1bHQgbGlicmFyeS1kZXBlbmRlbmN5IHN1ZmZpeC4uLiAkRUNIT19DIiA+JjYKKworCWNhc2UgWCRERlRfTFdSX01PREVMIGluCisJKFhsaWJ0b29sKQorCQlERlRfTElCX1NVRkZJWD0nLmxhJworCQlERlRfREVQX1NVRkZJWD0kREZUX0xJQl9TVUZGSVgKKwkJOzsKKwkoWGRlYnVnKQorCQlERlRfTElCX1NVRkZJWD0nX2cuYScKKwkJREZUX0RFUF9TVUZGSVg9JERGVF9MSUJfU1VGRklYCisJCTs7CisJKFhwcm9maWxlKQorCQlERlRfTElCX1NVRkZJWD0nX3AuYScKKwkJREZUX0RFUF9TVUZGSVg9JERGVF9MSUJfU1VGRklYCisJCTs7CisJKFhzaGFyZWQpCisJCWNhc2UgJGNmX2N2X3N5c3RlbV9uYW1lIGluCisJCShhaXhbNS03XSopCisJCQlERlRfTElCX1NVRkZJWD0nLnNvJworCQkJREZUX0RFUF9TVUZGSVg9JERGVF9MSUJfU1VGRklYCisJCQk7OworCQkoY3lnd2luKnxtc3lzKnxtaW5ndyopCisJCQlERlRfTElCX1NVRkZJWD0nLmRsbCcKKwkJCURGVF9ERVBfU1VGRklYPScuZGxsLmEnCisJCQk7OworCQkoZGFyd2luKikKKwkJCURGVF9MSUJfU1VGRklYPScuZHlsaWInCisJCQlERlRfREVQX1NVRkZJWD0kREZUX0xJQl9TVUZGSVgKKwkJCTs7CisJCShocHV4KikKKwkJCWNhc2UgJHRhcmdldCBpbgorCQkJKGlhNjQqKQorCQkJCURGVF9MSUJfU1VGRklYPScuc28nCisJCQkJREZUX0RFUF9TVUZGSVg9JERGVF9MSUJfU1VGRklYCisJCQkJOzsKKwkJCSgqKQorCQkJCURGVF9MSUJfU1VGRklYPScuc2wnCisJCQkJREZUX0RFUF9TVUZGSVg9JERGVF9MSUJfU1VGRklYCisJCQkJOzsKKwkJCWVzYWMKKwkJCTs7CisJCSgqKQorCQkJREZUX0xJQl9TVUZGSVg9Jy5zbycKKwkJCURGVF9ERVBfU1VGRklYPSRERlRfTElCX1NVRkZJWAorCQkJOzsKKwkJZXNhYworCQk7OworCSgqKQorCQlERlRfTElCX1NVRkZJWD0nLmEnCisJCURGVF9ERVBfU1VGRklYPSRERlRfTElCX1NVRkZJWAorCQk7OworCWVzYWMKKwlpZiB0ZXN0IC1uICIke0xJQl9TVUZGSVh9JHtFWFRSQV9TVUZGSVh9IgorCXRoZW4KKwkJREZUX0xJQl9TVUZGSVg9IiR7TElCX1NVRkZJWH0ke0VYVFJBX1NVRkZJWH0ke0RGVF9MSUJfU1VGRklYfSIKKwkJREZUX0RFUF9TVUZGSVg9IiR7TElCX1NVRkZJWH0ke0VYVFJBX1NVRkZJWH0ke0RGVF9ERVBfU1VGRklYfSIKKwlmaQorZWNobyAiJGFzX21lOjEzNzY5OiByZXN1bHQ6ICRERlRfREVQX1NVRkZJWCIgPiY1CitlY2hvICIke0VDSE9fVH0kREZUX0RFUF9TVUZGSVgiID4mNgorCitlY2hvICIkYXNfbWU6MTM3NzI6IGNoZWNraW5nIGRlZmF1bHQgb2JqZWN0IGRpcmVjdG9yeSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGRlZmF1bHQgb2JqZWN0IGRpcmVjdG9yeS4uLiAkRUNIT19DIiA+JjYKKworCWNhc2UgJERGVF9MV1JfTU9ERUwgaW4KKwkobGlidG9vbCkgREZUX09CSl9TVUJESVI9J29ial9sbycgIDs7CisJKG5vcm1hbCkgIERGVF9PQkpfU1VCRElSPSdvYmplY3RzJyA7OworCShkZWJ1ZykgICBERlRfT0JKX1NVQkRJUj0nb2JqX2cnIDs7CisJKHByb2ZpbGUpIERGVF9PQkpfU1VCRElSPSdvYmpfcCcgOzsKKwkoc2hhcmVkKQorCQljYXNlICRjZl9jdl9zeXN0ZW1fbmFtZSBpbgorCQkoY3lnd2lufG1zeXMpCisJCQlERlRfT0JKX1NVQkRJUj0nb2JqZWN0cycgOzsKKwkJKCopCisJCQlERlRfT0JKX1NVQkRJUj0nb2JqX3MnIDs7CisJCWVzYWMKKwllc2FjCitlY2hvICIkYXNfbWU6MTM3ODg6IHJlc3VsdDogJERGVF9PQkpfU1VCRElSIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRERlRfT0JKX1NVQkRJUiIgPiY2CisKKyMjIyBTZXQgdXAgbG93LWxldmVsIHRlcm1pbmZvIGRlcGVuZGVuY2llcyBmb3IgbWFrZWZpbGVzLgorCitpZiB0ZXN0ICIkREZUX0xXUl9NT0RFTCIgPSBzaGFyZWQgOyB0aGVuCisJY2FzZSAkY2ZfY3Zfc3lzdGVtX25hbWUgaW4KKwkoY3lnd2luKikKKwkJIyAibGliIiBmaWxlcyBoYXZlICIuZGxsLmEiIHN1ZmZpeCwgImN5ZyIgZmlsZXMgaGF2ZSAiLmRsbCIKKwkJOzsKKwkobXN5cyopCisJCSMgImxpYiIgZmlsZXMgaGF2ZSAiLmRsbC5hIiBzdWZmaXgsICJtc3lzLSIgZmlsZXMgaGF2ZSAiLmRsbCIKKwkJOzsKKwllc2FjCitmaQorCitVU0VfQ0ZHX1NVRkZJWD0ke0RGVF9BUkdfU1VGRklYfQorCisjIyMgQ29uc3RydWN0IHRoZSBsaXN0IG9mIHN1YmRpcmVjdG9yaWVzIGZvciB3aGljaCB3ZSdsbCBjdXN0b21pemUgbWFrZWZpbGVzCisjIyMgd2l0aCB0aGUgYXBwcm9wcmlhdGUgY29tcGlsZS1ydWxlcy4KKworU1VCX01BS0VGSUxFUz0iZ2VuL2FkYWN1cnNlcyR7VVNFX0FSR19TVUZGSVh9LWNvbmZpZzpnZW4vYWRhY3Vyc2VzLWNvbmZpZy5pbiIKKworY2F0ID4+Y29uZmRlZnMuaCA8PEVPRgorI2RlZmluZSBOQ1VSU0VTX1BBVEhTRVAgJyRQQVRIX1NFUEFSQVRPUicKK0VPRgorCisjIyMgTm93IHRoYXQgd2UncmUgZG9uZSBydW5uaW5nIHRlc3RzLCBhZGQgdGhlIGNvbXBpbGVyLXdhcm5pbmdzLCBpZiBhbnkKKworY2ZfZml4X2NwcGZsYWdzPW5vCitjZl9uZXdfY2ZsYWdzPQorY2ZfbmV3X2NwcGZsYWdzPQorY2ZfbmV3X2V4dHJhX2NwcGZsYWdzPQorCitmb3IgY2ZfYWRkX2NmbGFncyBpbiAkRVhUUkFfQ0ZMQUdTCitkbworY2FzZSAkY2ZfZml4X2NwcGZsYWdzIGluCisobm8pCisJY2FzZSAkY2ZfYWRkX2NmbGFncyBpbgorCSgtdW5kZWZ8LW5vc3RkaW5jKnwtSSp8LUQqfC1VKnwtRXwtUHwtQykKKwkJY2FzZSAkY2ZfYWRkX2NmbGFncyBpbgorCQkoLUQqKQorCQkJY2ZfdHN0X2NmbGFncz1gZWNobyAke2NmX2FkZF9jZmxhZ3N9IHxzZWQgLWUgJ3MvXi1EW149XSo9J1wnJ1wiW14iXSovLydgCisKKwkJCXRlc3QgIngke2NmX2FkZF9jZmxhZ3N9IiAhPSAieCR7Y2ZfdHN0X2NmbGFnc30iIFwKKwkJCQkmJiB0ZXN0IC16ICIke2NmX3RzdF9jZmxhZ3N9IiBcCisJCQkJJiYgY2ZfZml4X2NwcGZsYWdzPXllcworCisJCQlpZiB0ZXN0ICRjZl9maXhfY3BwZmxhZ3MgPSB5ZXMgOyB0aGVuCisJCQkJY2ZfbmV3X2V4dHJhX2NwcGZsYWdzPSIkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzICRjZl9hZGRfY2ZsYWdzIgorCQkJCWNvbnRpbnVlCisJCQllbGlmIHRlc3QgIiR7Y2ZfdHN0X2NmbGFnc30iID0gIlwiJyIgOyB0aGVuCisJCQkJY2ZfbmV3X2V4dHJhX2NwcGZsYWdzPSIkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzICRjZl9hZGRfY2ZsYWdzIgorCQkJCWNvbnRpbnVlCisJCQlmaQorCQkJOzsKKwkJZXNhYworCQljYXNlICIkQ1BQRkxBR1MiIGluCisJCSgqJGNmX2FkZF9jZmxhZ3MpCisJCQk7OworCQkoKikKKwkJCWNhc2UgJGNmX2FkZF9jZmxhZ3MgaW4KKwkJCSgtRCopCisJCQkJY2ZfdHN0X2NwcGZsYWdzPWBlY2hvICJ4JGNmX2FkZF9jZmxhZ3MiIHwgc2VkIC1lICdzL14uLi4vLycgLWUgJ3MvPS4qLy8nYAorCitDUFBGTEFHUz1gZWNobyAiJENQUEZMQUdTIiB8IFwKKwlzZWQJLWUgJ3MvLVtVRF0nIiRjZl90c3RfY3BwZmxhZ3MiJ1woPVteIAldKlwpXD9bIAldLyAvZycgXAorCQktZSAncy8tW1VEXSciJGNmX3RzdF9jcHBmbGFncyInXCg9W14gCV0qXClcPyQvL2cnYAorCisJCQkJOzsKKwkJCWVzYWMKKwkJCWNmX25ld19jcHBmbGFncz0iJGNmX25ld19jcHBmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJCTs7CisJCWVzYWMKKwkJOzsKKwkoKikKKwkJY2ZfbmV3X2NmbGFncz0iJGNmX25ld19jZmxhZ3MgJGNmX2FkZF9jZmxhZ3MiCisJCTs7CisJZXNhYworCTs7CisoeWVzKQorCWNmX25ld19leHRyYV9jcHBmbGFncz0iJGNmX25ld19leHRyYV9jcHBmbGFncyAkY2ZfYWRkX2NmbGFncyIKKworCWNmX3RzdF9jZmxhZ3M9YGVjaG8gJHtjZl9hZGRfY2ZsYWdzfSB8c2VkIC1lICdzL15bXiJdKiInXCcnLy8nYAorCisJdGVzdCAieCR7Y2ZfYWRkX2NmbGFnc30iICE9ICJ4JHtjZl90c3RfY2ZsYWdzfSIgXAorCQkmJiB0ZXN0IC16ICIke2NmX3RzdF9jZmxhZ3N9IiBcCisJCSYmIGNmX2ZpeF9jcHBmbGFncz1ubworCTs7Citlc2FjCitkb25lCisKK2lmIHRlc3QgLW4gIiRjZl9uZXdfY2ZsYWdzIiA7IHRoZW4KKworCUNGTEFHUz0iJENGTEFHUyAkY2ZfbmV3X2NmbGFncyIKK2ZpCisKK2lmIHRlc3QgLW4gIiRjZl9uZXdfY3BwZmxhZ3MiIDsgdGhlbgorCisJQ1BQRkxBR1M9IiRDUFBGTEFHUyAkY2ZfbmV3X2NwcGZsYWdzIgorZmkKKworaWYgdGVzdCAtbiAiJGNmX25ld19leHRyYV9jcHBmbGFncyIgOyB0aGVuCisKKwlFWFRSQV9DUFBGTEFHUz0iJGNmX25ld19leHRyYV9jcHBmbGFncyAkRVhUUkFfQ1BQRkxBR1MiCitmaQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitURVNUX0FSRzI9CisKK1RFU1RfTElCUzI9CisKK05DVVJTRVNfU0hMSUIyPSJzaCAtYyIKKworQURBX1NVQkRJUlM9ImluY2x1ZGUgZ2VuIHNyYyBkb2MiCitpZiB0ZXN0ICJ4JGNmX3dpdGhfdGVzdHMiICE9ICJ4bm8iIDsgdGhlbgorCUFEQV9TVUJESVJTPSIkQURBX1NVQkRJUlMgc2FtcGxlcyIKK2ZpCitmb3IgY2ZfZGlyIGluICRBREFfU1VCRElSUworZG8KKwlTVUJfTUFLRUZJTEVTPSIkU1VCX01BS0VGSUxFUyAkY2ZfZGlyL01ha2VmaWxlIgorZG9uZQorCitOQ1VSU0VTX1RSRUU9IiMiCisKK0VYVEVSTkFMX1RSRUU9CisKKyMgbWF0Y2ggbGF5b3V0IHVzZWQgYnkgbWFrZS10YXIuc2gKK0FEQUhUTUxfRElSPS4uL2RvYy9hZGEKKworYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzICRTVUJfTUFLRUZJTEVTIGRvYy9hZGFjdXJzZXMke0RGVF9BUkdfU1VGRklYfS1jb25maWcuMTpkb2MvTUthZGFfY29uZmlnLmluIE1ha2VmaWxlIgorYWNfY29uZmlnX2NvbW1hbmRzPSIkYWNfY29uZmlnX2NvbW1hbmRzIGRlZmF1bHQiCitjYXQgPmNvbmZjYWNoZSA8PFxfQUNFT0YKKyMgVGhpcyBmaWxlIGlzIGEgc2hlbGwgc2NyaXB0IHRoYXQgY2FjaGVzIHRoZSByZXN1bHRzIG9mIGNvbmZpZ3VyZQorIyB0ZXN0cyBydW4gb24gdGhpcyBzeXN0ZW0gc28gdGhleSBjYW4gYmUgc2hhcmVkIGJldHdlZW4gY29uZmlndXJlCisjIHNjcmlwdHMgYW5kIGNvbmZpZ3VyZSBydW5zLCBzZWUgY29uZmlndXJlJ3Mgb3B0aW9uIC0tY29uZmlnLWNhY2hlLgorIyBJdCBpcyBub3QgdXNlZnVsIG9uIG90aGVyIHN5c3RlbXMuICBJZiBpdCBjb250YWlucyByZXN1bHRzIHlvdSBkb24ndAorIyB3YW50IHRvIGtlZXAsIHlvdSBtYXkgcmVtb3ZlIG9yIGVkaXQgaXQuCisjCisjIGNvbmZpZy5zdGF0dXMgb25seSBwYXlzIGF0dGVudGlvbiB0byB0aGUgY2FjaGUgZmlsZSBpZiB5b3UgZ2l2ZSBpdAorIyB0aGUgLS1yZWNoZWNrIG9wdGlvbiB0byByZXJ1biBjb25maWd1cmUuCisjCisjIGBhY19jdl9lbnZfZm9vJyB2YXJpYWJsZXMgKHNldCBvciB1bnNldCkgd2lsbCBiZSBvdmVycmlkZW4gd2hlbgorIyBsb2FkaW5nIHRoaXMgZmlsZSwgb3RoZXIgKnVuc2V0KiBgYWNfY3ZfZm9vJyB3aWxsIGJlIGFzc2lnbmVkIHRoZQorIyBmb2xsb3dpbmcgdmFsdWVzLgorCitfQUNFT0YKKworIyBUaGUgZm9sbG93aW5nIHdheSBvZiB3cml0aW5nIHRoZSBjYWNoZSBtaXNoYW5kbGVzIG5ld2xpbmVzIGluIHZhbHVlcywKKyMgYnV0IHdlIGtub3cgb2Ygbm8gd29ya2Fyb3VuZCB0aGF0IGlzIHNpbXBsZSwgcG9ydGFibGUsIGFuZCBlZmZpY2llbnQuCisjIFNvLCBkb24ndCBwdXQgbmV3bGluZXMgaW4gY2FjaGUgdmFyaWFibGVzJyB2YWx1ZXMuCisjIFVsdHJpeCBzaCBzZXQgd3JpdGVzIHRvIHN0ZGVyciBhbmQgY2FuJ3QgYmUgcmVkaXJlY3RlZCBkaXJlY3RseSwKKyMgYW5kIHNldHMgdGhlIGhpZ2ggYml0IGluIHRoZSBjYWNoZSBmaWxlIHVubGVzcyB3ZSBhc3NpZ24gdG8gdGhlIHZhcnMuCit7CisgIChzZXQpIDI+JjEgfAorICAgIGNhc2UgYChhY19zcGFjZT0nICc7IHNldCB8IGdyZXAgYWNfc3BhY2UpIDI+JjFgIGluCisgICAgKmFjX3NwYWNlPVwgKikKKyAgICAgICMgYHNldCcgZG9lcyBub3QgcXVvdGUgY29ycmVjdGx5LCBzbyBhZGQgcXVvdGVzIChkb3VibGUtcXVvdGUKKyAgICAgICMgc3Vic3RpdHV0aW9uIHR1cm5zIFxcXFwgaW50byBcXCwgYW5kIHNlZCB0dXJucyBcXCBpbnRvIFwpLgorICAgICAgc2VkIC1uIFwKKyAgICAgICAgInMvJy8nXFxcXCcnL2c7CisgICAgCSAgcy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT0nXFwyJy9wIgorICAgICAgOzsKKyAgICAqKQorICAgICAgIyBgc2V0JyBxdW90ZXMgY29ycmVjdGx5IGFzIHJlcXVpcmVkIGJ5IFBPU0lYLCBzbyBkbyBub3QgYWRkIHF1b3Rlcy4KKyAgICAgIHNlZCAtbiBcCisgICAgICAgICJzL15cXChbXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSpcXCk9XFwoLipcXCkvXFwxPVxcMi9wIgorICAgICAgOzsKKyAgICBlc2FjOworfSB8CisgIHNlZCAnCisgICAgIHQgY2xlYXIKKyAgICAgOiBjbGVhcgorICAgICBzL15cKFtePV0qXCk9XCguKlt7fV0uKlwpJC90ZXN0ICIke1wxK3NldH0iID0gc2V0IHx8ICYvCisgICAgIHQgZW5kCisgICAgIC9eYWNfY3ZfZW52LyFzL15cKFtePV0qXCk9XCguKlwpJC9cMT0ke1wxPVwyfS8KKyAgICAgOiBlbmQnID4+Y29uZmNhY2hlCitpZiBjbXAgLXMgJGNhY2hlX2ZpbGUgY29uZmNhY2hlOyB0aGVuIDo7IGVsc2UKKyAgaWYgdGVzdCAtdyAkY2FjaGVfZmlsZTsgdGhlbgorICAgIHRlc3QgIngkY2FjaGVfZmlsZSIgIT0gIngvZGV2L251bGwiICYmIGVjaG8gInVwZGF0aW5nIGNhY2hlICRjYWNoZV9maWxlIgorICAgIGNhdCBjb25mY2FjaGUgPiRjYWNoZV9maWxlCisgIGVsc2UKKyAgICBlY2hvICJub3QgdXBkYXRpbmcgdW53cml0YWJsZSBjYWNoZSAkY2FjaGVfZmlsZSIKKyAgZmkKK2ZpCitybSAtZiBjb25mY2FjaGUKKwordGVzdCAieCRwcmVmaXgiID0geE5PTkUgJiYgcHJlZml4PSRhY19kZWZhdWx0X3ByZWZpeAorIyBMZXQgbWFrZSBleHBhbmQgZXhlY19wcmVmaXguCit0ZXN0ICJ4JGV4ZWNfcHJlZml4IiA9IHhOT05FICYmIGV4ZWNfcHJlZml4PScke3ByZWZpeH0nCisKKyMgVlBBVEggbWF5IGNhdXNlIHRyb3VibGUgd2l0aCBzb21lIG1ha2VzLCBzbyB3ZSByZW1vdmUgJChzcmNkaXIpLAorIyAke3NyY2Rpcn0gYW5kIEBzcmNkaXJAIGZyb20gVlBBVEggaWYgc3JjZGlyIGlzICIuIiwgc3RyaXAgbGVhZGluZyBhbmQKKyMgdHJhaWxpbmcgY29sb25zIGFuZCB0aGVuIHJlbW92ZSB0aGUgd2hvbGUgbGluZSBpZiBWUEFUSCBiZWNvbWVzIGVtcHR5CisjIChhY3R1YWxseSB3ZSBsZWF2ZSBhbiBlbXB0eSBsaW5lIHRvIHByZXNlcnZlIGxpbmUgbnVtYmVycykuCitpZiB0ZXN0ICJ4JHNyY2RpciIgPSB4LjsgdGhlbgorICBhY192cHN1Yj0nL15bIAldKlZQQVRIWyAJXSo9L3sKK3MvOipcJChzcmNkaXIpOiovOi87CitzLzoqXCR7c3JjZGlyfToqLzovOworcy86KkBzcmNkaXJAOiovOi87CitzL15cKFtePV0qPVsgCV0qXCk6Ki9cMS87CitzLzoqJC8vOworcy9eW149XSo9WyAJXSokLy87Cit9JworZmkKKworREVGUz0tREhBVkVfQ09ORklHX0gKKworOiAke0NPTkZJR19TVEFUVVM9Li9jb25maWcuc3RhdHVzfQorYWNfY2xlYW5fZmlsZXNfc2F2ZT0kYWNfY2xlYW5fZmlsZXMKK2FjX2NsZWFuX2ZpbGVzPSIkYWNfY2xlYW5fZmlsZXMgJENPTkZJR19TVEFUVVMiCit7IGVjaG8gIiRhc19tZToxNDAwMDogY3JlYXRpbmcgJENPTkZJR19TVEFUVVMiID4mNQorZWNobyAiJGFzX21lOiBjcmVhdGluZyAkQ09ORklHX1NUQVRVUyIgPiY2O30KK2NhdCA+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YKKyMhICRTSEVMTAorIyBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBjb25maWd1cmUuCisjIFJ1biB0aGlzIGZpbGUgdG8gcmVjcmVhdGUgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4KKyMgQ29tcGlsZXIgb3V0cHV0IHByb2R1Y2VkIGJ5IGNvbmZpZ3VyZSwgdXNlZnVsIGZvciBkZWJ1Z2dpbmcKKyMgY29uZmlndXJlLCBpcyBpbiBjb25maWcubG9nIGlmIGl0IGV4aXN0cy4KKworZGVidWc9ZmFsc2UKK1NIRUxMPVwke0NPTkZJR19TSEVMTC0kU0hFTEx9CithY19jc19pbnZvY2F0aW9uPSJcJDAgXCRAIgorCitfQUNFT0YKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCisjIEJlIEJvdXJuZSBjb21wYXRpYmxlCitpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgZW11bGF0ZSBzaAorICBOVUxMQ01EPToKK2VsaWYgdGVzdCAtbiAiJHtCQVNIX1ZFUlNJT04rc2V0fSIgJiYgKHNldCAtbyBwb3NpeCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIHNldCAtbyBwb3NpeAorZmkKKworIyBOYW1lIG9mIHRoZSBleGVjdXRhYmxlLgorYXNfbWU9YGVjaG8gIiQwIiB8c2VkICdzLC4qW1xcL10sLCdgCisKK2lmIGV4cHIgYSA6ICdcKGFcKScgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGFzX2V4cHI9ZXhwcgorZWxzZQorICBhc19leHByPWZhbHNlCitmaQorCitybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZmlsZQorZWNobyA+Y29uZiQkLmZpbGUKK2lmIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgorICAjIFdlIGNvdWxkIGp1c3QgY2hlY2sgZm9yIERKR1BQOyBidXQgdGhpcyB0ZXN0IGEpIHdvcmtzIGIpIGlzIG1vcmUgZ2VuZXJpYworICAjIGFuZCBjKSB3aWxsIHJlbWFpbiB2YWxpZCBvbmNlIERKR1BQIHN1cHBvcnRzIHN5bWxpbmtzIChESkdQUCAyLjA0KS4KKyAgaWYgdGVzdCAtZiBjb25mJCQuZXhlOyB0aGVuCisgICAgIyBEb24ndCB1c2UgbG4gYXQgYWxsOyB3ZSBkb24ndCBoYXZlIGFueSBsaW5rcworICAgIGFzX2xuX3M9J2NwIC1wJworICBlbHNlCisgICAgYXNfbG5fcz0nbG4gLXMnCisgIGZpCitlbGlmIGxuIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgorICBhc19sbl9zPWxuCitlbHNlCisgIGFzX2xuX3M9J2NwIC1wJworZmkKK3JtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5maWxlCisKK2FzX2V4ZWN1dGFibGVfcD0idGVzdCAtZiIKKworIyBTdXBwb3J0IHVuc2V0IHdoZW4gcG9zc2libGUuCitpZiAoRk9PPUZPTzsgdW5zZXQgRk9PKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgYXNfdW5zZXQ9dW5zZXQKK2Vsc2UKKyAgYXNfdW5zZXQ9ZmFsc2UKK2ZpCisKKyMgTkxTIG51aXNhbmNlcy4KKyRhc191bnNldCBMQU5HIHx8IHRlc3QgIiR7TEFORytzZXR9IiAhPSBzZXQgfHwgeyBMQU5HPUM7IGV4cG9ydCBMQU5HOyB9CiskYXNfdW5zZXQgTENfQUxMIHx8IHRlc3QgIiR7TENfQUxMK3NldH0iICE9IHNldCB8fCB7IExDX0FMTD1DOyBleHBvcnQgTENfQUxMOyB9CiskYXNfdW5zZXQgTENfVElNRSB8fCB0ZXN0ICIke0xDX1RJTUUrc2V0fSIgIT0gc2V0IHx8IHsgTENfVElNRT1DOyBleHBvcnQgTENfVElNRTsgfQorJGFzX3Vuc2V0IExDX0NUWVBFIHx8IHRlc3QgIiR7TENfQ1RZUEUrc2V0fSIgIT0gc2V0IHx8IHsgTENfQ1RZUEU9QzsgZXhwb3J0IExDX0NUWVBFOyB9CiskYXNfdW5zZXQgTEFOR1VBR0UgfHwgdGVzdCAiJHtMQU5HVUFHRStzZXR9IiAhPSBzZXQgfHwgeyBMQU5HVUFHRT1DOyBleHBvcnQgTEFOR1VBR0U7IH0KKyRhc191bnNldCBMQ19DT0xMQVRFIHx8IHRlc3QgIiR7TENfQ09MTEFURStzZXR9IiAhPSBzZXQgfHwgeyBMQ19DT0xMQVRFPUM7IGV4cG9ydCBMQ19DT0xMQVRFOyB9CiskYXNfdW5zZXQgTENfTlVNRVJJQyB8fCB0ZXN0ICIke0xDX05VTUVSSUMrc2V0fSIgIT0gc2V0IHx8IHsgTENfTlVNRVJJQz1DOyBleHBvcnQgTENfTlVNRVJJQzsgfQorJGFzX3Vuc2V0IExDX01FU1NBR0VTIHx8IHRlc3QgIiR7TENfTUVTU0FHRVMrc2V0fSIgIT0gc2V0IHx8IHsgTENfTUVTU0FHRVM9QzsgZXhwb3J0IExDX01FU1NBR0VTOyB9CisKKyMgSUZTCisjIFdlIG5lZWQgc3BhY2UsIHRhYiBhbmQgbmV3IGxpbmUsIGluIHByZWNpc2VseSB0aGF0IG9yZGVyLgorYXNfbmw9JworJworSUZTPSIgCSRhc19ubCIKKworIyBDRFBBVEguCiskYXNfdW5zZXQgQ0RQQVRIIHx8IHRlc3QgIiR7Q0RQQVRIK3NldH0iICE9IHNldCB8fCB7IENEUEFUSD06OyBleHBvcnQgQ0RQQVRIOyB9CisKK2V4ZWMgNj4mMQorCitfQUNFT0YKKworIyBGaWxlcyB0aGF0IGNvbmZpZy5zdGF0dXMgd2FzIG1hZGUgZm9yLgoraWYgdGVzdCAtbiAiJGFjX2NvbmZpZ19maWxlcyI7IHRoZW4KKyAgZWNobyAiY29uZmlnX2ZpbGVzPVwiJGFjX2NvbmZpZ19maWxlc1wiIiA+PiRDT05GSUdfU1RBVFVTCitmaQorCitpZiB0ZXN0IC1uICIkYWNfY29uZmlnX2hlYWRlcnMiOyB0aGVuCisgIGVjaG8gImNvbmZpZ19oZWFkZXJzPVwiJGFjX2NvbmZpZ19oZWFkZXJzXCIiID4+JENPTkZJR19TVEFUVVMKK2ZpCisKK2lmIHRlc3QgLW4gIiRhY19jb25maWdfbGlua3MiOyB0aGVuCisgIGVjaG8gImNvbmZpZ19saW5rcz1cIiRhY19jb25maWdfbGlua3NcIiIgPj4kQ09ORklHX1NUQVRVUworZmkKKworaWYgdGVzdCAtbiAiJGFjX2NvbmZpZ19jb21tYW5kcyI7IHRoZW4KKyAgZWNobyAiY29uZmlnX2NvbW1hbmRzPVwiJGFjX2NvbmZpZ19jb21tYW5kc1wiIiA+PiRDT05GSUdfU1RBVFVTCitmaQorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxFT0YKKworYWNfY3NfdXNhZ2U9IlwKK1xgJGFzX21lJyBpbnN0YW50aWF0ZXMgZmlsZXMgZnJvbSB0ZW1wbGF0ZXMgYWNjb3JkaW5nIHRvIHRoZQorY3VycmVudCBjb25maWd1cmF0aW9uLgorCitVc2FnZTogJDAgW09QVElPTlNdIFtGSUxFXS4uLgorCisgIC1oLCAtLWhlbHAgICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKKyAgLVYsIC0tdmVyc2lvbiAgICBwcmludCB2ZXJzaW9uIG51bWJlciwgdGhlbiBleGl0CisgIC1kLCAtLWRlYnVnICAgICAgZG9uJ3QgcmVtb3ZlIHRlbXBvcmFyeSBmaWxlcworICAgICAgLS1yZWNoZWNrICAgIHVwZGF0ZSAkYXNfbWUgYnkgcmVjb25maWd1cmluZyBpbiB0aGUgc2FtZSBjb25kaXRpb25zCisgIC0tZmlsZT1GSUxFWzpURU1QTEFURV0KKyAgICAgICAgICAgICAgICAgICBpbnN0YW50aWF0ZSB0aGUgY29uZmlndXJhdGlvbiBmaWxlIEZJTEUKKyAgLS1oZWFkZXI9RklMRVs6VEVNUExBVEVdCisgICAgICAgICAgICAgICAgICAgaW5zdGFudGlhdGUgdGhlIGNvbmZpZ3VyYXRpb24gaGVhZGVyIEZJTEUKKworQ29uZmlndXJhdGlvbiBmaWxlczoKKyRjb25maWdfZmlsZXMKKworQ29uZmlndXJhdGlvbiBoZWFkZXJzOgorJGNvbmZpZ19oZWFkZXJzCisKK0NvbmZpZ3VyYXRpb24gY29tbWFuZHM6CiskY29uZmlnX2NvbW1hbmRzCisKK1JlcG9ydCBidWdzIHRvIDxkaWNrZXlAaW52aXNpYmxlLWlzbGFuZC5uZXQ+LiIKK0VPRgorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PEVPRgorYWNfY3NfdmVyc2lvbj0iXFwKK2NvbmZpZy5zdGF0dXMKK2NvbmZpZ3VyZWQgYnkgJDAsIGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi41Mi4yMDE0MTIwNCwKKyAgd2l0aCBvcHRpb25zIFxcImBlY2hvICIkYWNfY29uZmlndXJlX2FyZ3MiIHwgc2VkICdzL1tcXCIiXGBcJF0vXFxcXCYvZydgXFwiCisKK0NvcHlyaWdodCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK1RoaXMgY29uZmlnLnN0YXR1cyBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LiIKK3NyY2Rpcj0kc3JjZGlyCitJTlNUQUxMPSIkSU5TVEFMTCIKK0VPRgorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxFT0YKKyMgSWYgbm8gZmlsZSBhcmUgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyLCB0aGVuIHdlIG5lZWQgdG8gcHJvdmlkZSBkZWZhdWx0CisjIHZhbHVlLiAgQnkgd2UgbmVlZCB0byBrbm93IGlmIGZpbGVzIHdlcmUgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyLgorYWNfbmVlZF9kZWZhdWx0cz06Cit3aGlsZSB0ZXN0ICQjICE9IDAKK2RvCisgIGNhc2UgJDEgaW4KKyAgLS0qPSopCisgICAgYWNfb3B0aW9uPWBleHByICJ4JDEiIDogJ3hcKFtePV0qXCk9J2AKKyAgICBhY19vcHRhcmc9YGV4cHIgIngkMSIgOiAneFtePV0qPVwoLipcKSdgCisgICAgc2hpZnQKKyAgICBzZXQgZHVtbXkgIiRhY19vcHRpb24iICIkYWNfb3B0YXJnIiAkezErIiRAIn0KKyAgICBzaGlmdAorICAgIDs7CisgIC0qKTs7CisgICopICMgVGhpcyBpcyBub3QgYW4gb3B0aW9uLCBzbyB0aGUgdXNlciBoYXMgcHJvYmFibHkgZ2l2ZW4gZXhwbGljaXQKKyAgICAgIyBhcmd1bWVudHMuCisgICAgIGFjX25lZWRfZGVmYXVsdHM9ZmFsc2U7OworICBlc2FjCisKKyAgY2FzZSAkMSBpbgorICAjIEhhbmRsaW5nIG9mIHRoZSBvcHRpb25zLgorRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PEVPRgorICAtcmVjaGVjayB8IC0tcmVjaGVjayB8IC0tcmVjaGVjIHwgLS1yZWNoZSB8IC0tcmVjaCB8IC0tcmVjIHwgLS1yZSB8IC0tcikKKyAgICBlY2hvICJydW5uaW5nICRTSEVMTCAkMCAiICRhY19jb25maWd1cmVfYXJncyAiIC0tbm8tY3JlYXRlIC0tbm8tcmVjdXJzaW9uIgorICAgIGV4ZWMgJFNIRUxMICQwICRhY19jb25maWd1cmVfYXJncyAtLW5vLWNyZWF0ZSAtLW5vLXJlY3Vyc2lvbiA7OworRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxFT0YKKyAgLS12ZXJzaW9uIHwgLS12ZXJzKiB8IC1WICkKKyAgICBlY2hvICIkYWNfY3NfdmVyc2lvbiI7IGV4aXQgMCA7OworICAtLWhlIHwgLS1oKQorICAgICMgQ29uZmxpY3QgYmV0d2VlbiAtLWhlbHAgYW5kIC0taGVhZGVyCisgICAgeyB7IGVjaG8gIiRhc19tZToxNDE3NjogZXJyb3I6IGFtYmlndW91cyBvcHRpb246ICQxCitUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBhbWJpZ3VvdXMgb3B0aW9uOiAkMQorVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07OworICAtLWhlbHAgfCAtLWhlbCB8IC1oICkKKyAgICBlY2hvICIkYWNfY3NfdXNhZ2UiOyBleGl0IDAgOzsKKyAgLS1kZWJ1ZyB8IC0tZCogfCAtZCApCisgICAgZGVidWc9OiA7OworICAtLWZpbGUgfCAtLWZpbCB8IC0tZmkgfCAtLWYgKQorICAgIHNoaWZ0CisgICAgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTICQxIgorICAgIGFjX25lZWRfZGVmYXVsdHM9ZmFsc2U7OworICAtLWhlYWRlciB8IC0taGVhZGUgfCAtLWhlYWQgfCAtLWhlYSApCisgICAgc2hpZnQKKyAgICBDT05GSUdfSEVBREVSUz0iJENPTkZJR19IRUFERVJTICQxIgorICAgIGFjX25lZWRfZGVmYXVsdHM9ZmFsc2U7OworCisgICMgVGhpcyBpcyBhbiBlcnJvci4KKyAgLSopIHsgeyBlY2hvICIkYXNfbWU6MTQxOTU6IGVycm9yOiB1bnJlY29nbml6ZWQgb3B0aW9uOiAkMQorVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogdW5yZWNvZ25pemVkIG9wdGlvbjogJDEKK1RyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9IDs7CisKKyAgKikgYWNfY29uZmlnX3RhcmdldHM9IiRhY19jb25maWdfdGFyZ2V0cyAkMSIgOzsKKworICBlc2FjCisgIHNoaWZ0Citkb25lCisKK2V4ZWMgNT4+Y29uZmlnLmxvZworY2F0ID4mNSA8PCBfQUNFT0YKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFJ1bm5pbmcgY29uZmlnLnN0YXR1cy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCitUaGlzIGZpbGUgd2FzIGV4dGVuZGVkIGJ5ICRhc19tZSAyLjUyLjIwMTQxMjA0LCBleGVjdXRlZCB3aXRoCisgIENPTkZJR19GSUxFUyAgICA9ICRDT05GSUdfRklMRVMKKyAgQ09ORklHX0hFQURFUlMgID0gJENPTkZJR19IRUFERVJTCisgIENPTkZJR19MSU5LUyAgICA9ICRDT05GSUdfTElOS1MKKyAgQ09ORklHX0NPTU1BTkRTID0gJENPTkZJR19DT01NQU5EUworICA+ICRhY19jc19pbnZvY2F0aW9uCitvbiBgKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWAKKworX0FDRU9GCitFT0YKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxFT0YKKyMKKyMgSU5JVC1DT01NQU5EUyBzZWN0aW9uLgorIworCisjIyMgU3BlY2lhbCBpbml0aWFsaXphdGlvbiBjb21tYW5kcywgdXNlZCB0byBwYXNzIGluZm9ybWF0aW9uIGZyb20gdGhlCisjIyMgY29uZmlndXJhdGlvbi1ydW4gaW50byBjb25maWcuc3RhdHVzCisKK0FXSz0iJEFXSyIKK0RGVF9BUkdfU1VGRklYPSIkREZUX0FSR19TVUZGSVgiCitERlRfTFdSX01PREVMPSIkREZUX0xXUl9NT0RFTCIKK0xJQl9OQU1FPSIkTElCX05BTUUiCitMSUJfUFJFRklYPSIkTElCX1BSRUZJWCIKK0xJQl9TVUZGSVg9IiRMSUJfU1VGRklYIgorTE5fUz0iJExOX1MiCitOQ1VSU0VTX01BSk9SPSIkTkNVUlNFU19NQUpPUiIKK05DVVJTRVNfTUlOT1I9IiROQ1VSU0VTX01JTk9SIgorTkNVUlNFU19QQVRDSD0iJE5DVVJTRVNfUEFUQ0giCitVU0VfT0xEX01BS0VSVUxFUz0iJFVTRV9PTERfTUFLRVJVTEVTIgorY2ZfY3ZfYWJpX3ZlcnNpb249IiRjZl9jdl9hYmlfdmVyc2lvbiIKK2NmX2N2X3JlbF92ZXJzaW9uPSIkY2ZfY3ZfcmVsX3ZlcnNpb24iCitjZl9jdl9ybV9zb19sb2NzPSIkY2ZfY3Zfcm1fc29fbG9jcyIKK2NmX2N2X3NoYXJlZF9zb25hbWU9JyRjZl9jdl9zaGFyZWRfc29uYW1lJworY2ZfY3Zfc2hsaWJfdmVyc2lvbj0iJGNmX2N2X3NobGliX3ZlcnNpb24iCitjZl9jdl9zaGxpYl92ZXJzaW9uX2luZml4PSIkY2ZfY3Zfc2hsaWJfdmVyc2lvbl9pbmZpeCIKK2NmX2N2X3N5c3RlbV9uYW1lPSIkY2ZfY3Zfc3lzdGVtX25hbWUiCitob3N0PSIkaG9zdCIKK3RhcmdldD0iJHRhcmdldCIKKworRU9GCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XEVPRgorZm9yIGFjX2NvbmZpZ190YXJnZXQgaW4gJGFjX2NvbmZpZ190YXJnZXRzCitkbworICBjYXNlICIkYWNfY29uZmlnX3RhcmdldCIgaW4KKyAgIyBIYW5kbGluZyBvZiBhcmd1bWVudHMuCisgICIkU1VCX01BS0VGSUxFUyIgKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgJFNVQl9NQUtFRklMRVMiIDs7CisgICJkb2MvYWRhY3Vyc2VzJHtERlRfQVJHX1NVRkZJWH0tY29uZmlnLjEiICkgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGRvYy9hZGFjdXJzZXMke0RGVF9BUkdfU1VGRklYfS1jb25maWcuMTpkb2MvTUthZGFfY29uZmlnLmluIiA7OworICAiTWFrZWZpbGUiICkgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIE1ha2VmaWxlIiA7OworICAiZGVmYXVsdCIgKSBDT05GSUdfQ09NTUFORFM9IiRDT05GSUdfQ09NTUFORFMgZGVmYXVsdCIgOzsKKyAgImluY2x1ZGUvbmN1cnNlc19jZmcuaCIgKSBDT05GSUdfSEVBREVSUz0iJENPTkZJR19IRUFERVJTIGluY2x1ZGUvbmN1cnNlc19jZmcuaDppbmNsdWRlL25jdXJzZXNfY2ZnLmhpbiIgOzsKKyAgKikgeyB7IGVjaG8gIiRhc19tZToxNDI2NjogZXJyb3I6IGludmFsaWQgYXJndW1lbnQ6ICRhY19jb25maWdfdGFyZ2V0IiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgYXJndW1lbnQ6ICRhY19jb25maWdfdGFyZ2V0IiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OzsKKyAgZXNhYworZG9uZQorCisjIElmIHRoZSB1c2VyIGRpZCBub3QgdXNlIHRoZSBhcmd1bWVudHMgdG8gc3BlY2lmeSB0aGUgaXRlbXMgdG8gaW5zdGFudGlhdGUsCisjIHRoZW4gdGhlIGVudnZhciBpbnRlcmZhY2UgaXMgdXNlZC4gIFNldCBvbmx5IHRob3NlIHRoYXQgYXJlIG5vdC4KKyMgV2UgdXNlIHRoZSBsb25nIGZvcm0gZm9yIHRoZSBkZWZhdWx0IGFzc2lnbm1lbnQgYmVjYXVzZSBvZiBhbiBleHRyZW1lbHkKKyMgYml6YXJyZSBidWcgb24gU3VuT1MgNC4xLjMuCitpZiAkYWNfbmVlZF9kZWZhdWx0czsgdGhlbgorICB0ZXN0ICIke0NPTkZJR19GSUxFUytzZXR9IiA9IHNldCB8fCBDT05GSUdfRklMRVM9JGNvbmZpZ19maWxlcworICB0ZXN0ICIke0NPTkZJR19IRUFERVJTK3NldH0iID0gc2V0IHx8IENPTkZJR19IRUFERVJTPSRjb25maWdfaGVhZGVycworICB0ZXN0ICIke0NPTkZJR19DT01NQU5EUytzZXR9IiA9IHNldCB8fCBDT05GSUdfQ09NTUFORFM9JGNvbmZpZ19jb21tYW5kcworZmkKKworIyBDcmVhdGUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5LCBhbmQgaG9vayBmb3IgaXRzIHJlbW92YWwgdW5sZXNzIGRlYnVnZ2luZy4KKyRkZWJ1ZyB8fAoreworICB0cmFwICdleGl0X3N0YXR1cz0kPzsgcm0gLXJmICR0bXAgJiYgZXhpdCAkZXhpdF9zdGF0dXMnIDAKKyAgdHJhcCAneyAoZXhpdCAxKTsgZXhpdCAxOyB9JyAxIDIgMTMgMTUKK30KKworIyBDcmVhdGUgYSAoc2VjdXJlKSB0bXAgZGlyZWN0b3J5IGZvciB0bXAgZmlsZXMuCis6ICR7VE1QRElSPS90bXB9Cit7CisgIHRtcD1gKHVtYXNrIDA3NyAmJiBta3RlbXAgLWQgLXEgIiRUTVBESVIvY3NYWFhYWFgiKSAyPi9kZXYvbnVsbGAgJiYKKyAgdGVzdCAtbiAiJHRtcCIgJiYgdGVzdCAtZCAiJHRtcCIKK30gIHx8Cit7CisgIHRtcD0kVE1QRElSL2NzJCQtJFJBTkRPTQorICAodW1hc2sgMDc3ICYmIG1rZGlyICR0bXApCit9IHx8Cit7CisgICBlY2hvICIkbWU6IGNhbm5vdCBjcmVhdGUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGluICRUTVBESVIiID4mMgorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9Cit9CisKK0VPRgorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PEVPRgorCisjCisjIENPTkZJR19GSUxFUyBzZWN0aW9uLgorIworCisjIE5vIG5lZWQgdG8gZ2VuZXJhdGUgdGhlIHNjcmlwdHMgaWYgdGhlcmUgYXJlIG5vIENPTkZJR19GSUxFUy4KKyMgVGhpcyBoYXBwZW5zIGZvciBpbnN0YW5jZSB3aGVuIC4vY29uZmlnLnN0YXR1cyBjb25maWcuaAoraWYgdGVzdCAtbiAiXCRDT05GSUdfRklMRVMiOyB0aGVuCisgICMgUHJvdGVjdCBhZ2FpbnN0IGJlaW5nIG9uIHRoZSByaWdodCBzaWRlIG9mIGEgc2VkIHN1YnN0IGluIGNvbmZpZy5zdGF0dXMuCisgIHNlZCAncy8sQC9AQC87IHMvQCwvQEAvOyBzLyw7dCB0XCQvQDt0IHQvOyAvQDt0IHRcJC9zL1tcXFxcJixdL1xcXFwmL2c7CisgICBzL0BALyxALzsgcy9AQC9ALC87IHMvQDt0IHRcJC8sO3QgdC8nID5cJHRtcC9zdWJzLnNlZCA8PFxcQ0VPRgorcyxAU0hFTExALCRTSEVMTCw7dCB0CitzLEBleGVjX3ByZWZpeEAsJGV4ZWNfcHJlZml4LDt0IHQKK3MsQHByZWZpeEAsJHByZWZpeCw7dCB0CitzLEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQCwkcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSw7dCB0CitzLEBiaW5kaXJALCRiaW5kaXIsO3QgdAorcyxAc2JpbmRpckAsJHNiaW5kaXIsO3QgdAorcyxAbGliZXhlY2RpckAsJGxpYmV4ZWNkaXIsO3QgdAorcyxAZGF0YXJvb3RkaXJALCRkYXRhcm9vdGRpciw7dCB0CitzLEBkYXRhZGlyQCwkZGF0YWRpciw7dCB0CitzLEBzeXNjb25mZGlyQCwkc3lzY29uZmRpciw7dCB0CitzLEBzaGFyZWRzdGF0ZWRpckAsJHNoYXJlZHN0YXRlZGlyLDt0IHQKK3MsQGxvY2Fsc3RhdGVkaXJALCRsb2NhbHN0YXRlZGlyLDt0IHQKK3MsQGxpYmRpckAsJGxpYmRpciw7dCB0CitzLEBpbmNsdWRlZGlyQCwkaW5jbHVkZWRpciw7dCB0CitzLEBvbGRpbmNsdWRlZGlyQCwkb2xkaW5jbHVkZWRpciw7dCB0CitzLEBpbmZvZGlyQCwkaW5mb2Rpciw7dCB0CitzLEBtYW5kaXJALCRtYW5kaXIsO3QgdAorcyxAUEFDS0FHRV9OQU1FQCwkUEFDS0FHRV9OQU1FLDt0IHQKK3MsQFBBQ0tBR0VfVEFSTkFNRUAsJFBBQ0tBR0VfVEFSTkFNRSw7dCB0CitzLEBQQUNLQUdFX1ZFUlNJT05ALCRQQUNLQUdFX1ZFUlNJT04sO3QgdAorcyxAUEFDS0FHRV9TVFJJTkdALCRQQUNLQUdFX1NUUklORyw7dCB0CitzLEBQQUNLQUdFX0JVR1JFUE9SVEAsJFBBQ0tBR0VfQlVHUkVQT1JULDt0IHQKK3MsQGJ1aWxkX2FsaWFzQCwkYnVpbGRfYWxpYXMsO3QgdAorcyxAaG9zdF9hbGlhc0AsJGhvc3RfYWxpYXMsO3QgdAorcyxAdGFyZ2V0X2FsaWFzQCwkdGFyZ2V0X2FsaWFzLDt0IHQKK3MsQEVDSE9fQ0AsJEVDSE9fQyw7dCB0CitzLEBFQ0hPX05ALCRFQ0hPX04sO3QgdAorcyxARUNIT19UQCwkRUNIT19ULDt0IHQKK3MsQFBBVEhfU0VQQVJBVE9SQCwkUEFUSF9TRVBBUkFUT1IsO3QgdAorcyxAREVGU0AsJERFRlMsO3QgdAorcyxATElCU0AsJExJQlMsO3QgdAorcyxAdG9wX2J1aWxkZGlyQCwkdG9wX2J1aWxkZGlyLDt0IHQKK3MsQGJ1aWxkQCwkYnVpbGQsO3QgdAorcyxAYnVpbGRfY3B1QCwkYnVpbGRfY3B1LDt0IHQKK3MsQGJ1aWxkX3ZlbmRvckAsJGJ1aWxkX3ZlbmRvciw7dCB0CitzLEBidWlsZF9vc0AsJGJ1aWxkX29zLDt0IHQKK3MsQGhvc3RALCRob3N0LDt0IHQKK3MsQGhvc3RfY3B1QCwkaG9zdF9jcHUsO3QgdAorcyxAaG9zdF92ZW5kb3JALCRob3N0X3ZlbmRvciw7dCB0CitzLEBob3N0X29zQCwkaG9zdF9vcyw7dCB0CitzLEB0YXJnZXRALCR0YXJnZXQsO3QgdAorcyxAdGFyZ2V0X2NwdUAsJHRhcmdldF9jcHUsO3QgdAorcyxAdGFyZ2V0X3ZlbmRvckAsJHRhcmdldF92ZW5kb3IsO3QgdAorcyxAdGFyZ2V0X29zQCwkdGFyZ2V0X29zLDt0IHQKK3MsQENDQCwkQ0MsO3QgdAorcyxAQ0ZMQUdTQCwkQ0ZMQUdTLDt0IHQKK3MsQExERkxBR1NALCRMREZMQUdTLDt0IHQKK3MsQENQUEZMQUdTQCwkQ1BQRkxBR1MsO3QgdAorcyxAYWNfY3RfQ0NALCRhY19jdF9DQyw7dCB0CitzLEBFWEVFWFRALCRFWEVFWFQsO3QgdAorcyxAT0JKRVhUQCwkT0JKRVhULDt0IHQKK3MsQEVYVFJBX0NQUEZMQUdTQCwkRVhUUkFfQ1BQRkxBR1MsO3QgdAorcyxAQ1BQQCwkQ1BQLDt0IHQKK3MsQEFXS0AsJEFXSyw7dCB0CitzLEBFR1JFUEAsJEVHUkVQLDt0IHQKK3MsQElOU1RBTExfUFJPR1JBTUAsJElOU1RBTExfUFJPR1JBTSw7dCB0CitzLEBJTlNUQUxMX1NDUklQVEAsJElOU1RBTExfU0NSSVBULDt0IHQKK3MsQElOU1RBTExfREFUQUAsJElOU1RBTExfREFUQSw7dCB0CitzLEBMTl9TQCwkTE5fUyw7dCB0CitzLEBQS0dfQ09ORklHQCwkUEtHX0NPTkZJRyw7dCB0CitzLEBhY19wdF9QS0dfQ09ORklHQCwkYWNfcHRfUEtHX0NPTkZJRyw7dCB0CitzLEBQS0dfQ09ORklHX0xJQkRJUkAsJFBLR19DT05GSUdfTElCRElSLDt0IHQKK3MsQFNFVF9NQUtFQCwkU0VUX01BS0UsO3QgdAorcyxAQ1RBR1NALCRDVEFHUyw7dCB0CitzLEBFVEFHU0AsJEVUQUdTLDt0IHQKK3MsQE1BS0VfTE9XRVJfVEFHU0AsJE1BS0VfTE9XRVJfVEFHUyw7dCB0CitzLEBNQUtFX1VQUEVSX1RBR1NALCRNQUtFX1VQUEVSX1RBR1MsO3QgdAorcyxAY2ZfY3ZfbWFrZWZsYWdzQCwkY2ZfY3ZfbWFrZWZsYWdzLDt0IHQKK3MsQFJBTkxJQkAsJFJBTkxJQiw7dCB0CitzLEBhY19jdF9SQU5MSUJALCRhY19jdF9SQU5MSUIsO3QgdAorcyxATERALCRMRCw7dCB0CitzLEBhY19jdF9MREAsJGFjX2N0X0xELDt0IHQKK3MsQEFSQCwkQVIsO3QgdAorcyxAYWNfY3RfQVJALCRhY19jdF9BUiw7dCB0CitzLEBBUkZMQUdTQCwkQVJGTEFHUyw7dCB0CitzLEBERVNURElSQCwkREVTVERJUiw7dCB0CitzLEBCVUlMRF9DQ0AsJEJVSUxEX0NDLDt0IHQKK3MsQEJVSUxEX0NQUEAsJEJVSUxEX0NQUCw7dCB0CitzLEBCVUlMRF9DRkxBR1NALCRCVUlMRF9DRkxBR1MsO3QgdAorcyxAQlVJTERfQ1BQRkxBR1NALCRCVUlMRF9DUFBGTEFHUyw7dCB0CitzLEBCVUlMRF9MREZMQUdTQCwkQlVJTERfTERGTEFHUyw7dCB0CitzLEBCVUlMRF9MSUJTQCwkQlVJTERfTElCUyw7dCB0CitzLEBCVUlMRF9FWEVFWFRALCRCVUlMRF9FWEVFWFQsO3QgdAorcyxAQlVJTERfT0JKRVhUQCwkQlVJTERfT0JKRVhULDt0IHQKK3MsQERGVF9MV1JfTU9ERUxALCRERlRfTFdSX01PREVMLDt0IHQKK3MsQERGVF9VUFJfTU9ERUxALCRERlRfVVBSX01PREVMLDt0IHQKK3MsQE5DVVJTRVNfQ09ORklHQCwkTkNVUlNFU19DT05GSUcsO3QgdAorcyxAYWNfY3RfTkNVUlNFU19DT05GSUdALCRhY19jdF9OQ1VSU0VTX0NPTkZJRyw7dCB0CitzLEBOQ1VSU0VTX01BSk9SQCwkTkNVUlNFU19NQUpPUiw7dCB0CitzLEBOQ1VSU0VTX01JTk9SQCwkTkNVUlNFU19NSU5PUiw7dCB0CitzLEBOQ1VSU0VTX1BBVENIQCwkTkNVUlNFU19QQVRDSCw7dCB0CitzLEBjZl9jdl9yZWxfdmVyc2lvbkAsJGNmX2N2X3JlbF92ZXJzaW9uLDt0IHQKK3MsQGNmX2N2X2FiaV92ZXJzaW9uQCwkY2ZfY3ZfYWJpX3ZlcnNpb24sO3QgdAorcyxAY2ZfY3ZfYnVpbHRpbl9ib29sQCwkY2ZfY3ZfYnVpbHRpbl9ib29sLDt0IHQKK3MsQGNmX2N2X2hlYWRlcl9zdGRib29sX2hALCRjZl9jdl9oZWFkZXJfc3RkYm9vbF9oLDt0IHQKK3MsQGNmX2N2X3R5cGVfb2ZfYm9vbEAsJGNmX2N2X3R5cGVfb2ZfYm9vbCw7dCB0CitzLEBMSUJfUFJFRklYQCwkTElCX1BSRUZJWCw7dCB0CitzLEBMSUJfU1VGRklYQCwkTElCX1NVRkZJWCw7dCB0CitzLEBDQ19HX09QVEAsJENDX0dfT1BULDt0IHQKK3MsQExEX01PREVMQCwkTERfTU9ERUwsO3QgdAorcyxAc2hsaWJkaXJALCRzaGxpYmRpciw7dCB0CitzLEBNQUtFX0RMTFNALCRNQUtFX0RMTFMsO3QgdAorcyxAQ0NfU0hBUkVEX09QVFNALCRDQ19TSEFSRURfT1BUUyw7dCB0CitzLEBMRF9SUEFUSF9PUFRALCRMRF9SUEFUSF9PUFQsO3QgdAorcyxATERfU0hBUkVEX09QVFNALCRMRF9TSEFSRURfT1BUUyw7dCB0CitzLEBNS19TSEFSRURfTElCQCwkTUtfU0hBUkVEX0xJQiw7dCB0CitzLEBSTV9TSEFSRURfT1BUU0AsJFJNX1NIQVJFRF9PUFRTLDt0IHQKK3MsQExJTktfUFJPR1NALCRMSU5LX1BST0dTLDt0IHQKK3MsQExJTktfVEVTVFNALCRMSU5LX1RFU1RTLDt0IHQKK3MsQEVYVFJBX0xERkxBR1NALCRFWFRSQV9MREZMQUdTLDt0IHQKK3MsQExPQ0FMX0xERkxBR1NALCRMT0NBTF9MREZMQUdTLDt0IHQKK3MsQExPQ0FMX0xERkxBR1MyQCwkTE9DQUxfTERGTEFHUzIsO3QgdAorcyxASU5TVEFMTF9MSUJALCRJTlNUQUxMX0xJQiw7dCB0CitzLEBSUEFUSF9MSVNUQCwkUlBBVEhfTElTVCw7dCB0CitzLEBCUk9LRU5fTElOS0VSQCwkQlJPS0VOX0xJTktFUiw7dCB0CitzLEBOQ1VSU0VTX0VYVF9GVU5DU0AsJE5DVVJTRVNfRVhUX0ZVTkNTLDt0IHQKK3MsQE5DVVJTRVNfQ09OU1RALCROQ1VSU0VTX0NPTlNULDt0IHQKK3MsQFBUSFJFQURALCRQVEhSRUFELDt0IHQKK3MsQGNmX2N2X2VuYWJsZV9yZWVudHJhbnRALCRjZl9jdl9lbmFibGVfcmVlbnRyYW50LDt0IHQKK3MsQE5DVVJTRVNfV1JBUF9QUkVGSVhALCROQ1VSU0VTX1dSQVBfUFJFRklYLDt0IHQKK3MsQEVDSE9fTFRALCRFQ0hPX0xULDt0IHQKK3MsQEVDSE9fTERALCRFQ0hPX0xELDt0IHQKK3MsQFJVTEVfQ0NALCRSVUxFX0NDLDt0IHQKK3MsQFNIT1dfQ0NALCRTSE9XX0NDLDt0IHQKK3MsQEVDSE9fQ0NALCRFQ0hPX0NDLDt0IHQKK3MsQEFEQUZMQUdTQCwkQURBRkxBR1MsO3QgdAorcyxARVhUUkFfQ0ZMQUdTQCwkRVhUUkFfQ0ZMQUdTLDt0IHQKK3MsQEFEQV9UUkFDRUAsJEFEQV9UUkFDRSw7dCB0CitzLEBnbmF0X2V4aXN0c0AsJGduYXRfZXhpc3RzLDt0IHQKK3MsQE00X2V4aXN0c0AsJE00X2V4aXN0cyw7dCB0CitzLEBjZl9hZGFfbWFrZUAsJGNmX2FkYV9tYWtlLDt0IHQKK3MsQEdOQVRQUkVQX09QVFNALCRHTkFUUFJFUF9PUFRTLDt0IHQKK3MsQGNmX2NvbXBpbGVfZ2VuZXJpY3NALCRjZl9jb21waWxlX2dlbmVyaWNzLDt0IHQKK3MsQGNmX2dlbmVyaWNfb2JqZWN0c0AsJGNmX2dlbmVyaWNfb2JqZWN0cyw7dCB0CitzLEBVU0VfR05BVF9TSUdJTlRALCRVU0VfR05BVF9TSUdJTlQsO3QgdAorcyxAVVNFX09MRF9NQUtFUlVMRVNALCRVU0VfT0xEX01BS0VSVUxFUyw7dCB0CitzLEBVU0VfR05BVF9QUk9KRUNUU0AsJFVTRV9HTkFUX1BST0pFQ1RTLDt0IHQKK3MsQFVTRV9HTkFUX0xJQlJBUklFU0AsJFVTRV9HTkFUX0xJQlJBUklFUyw7dCB0CitzLEBjZl9hZGFfY29tcGlsZXJALCRjZl9hZGFfY29tcGlsZXIsO3QgdAorcyxAY2ZfYWRhX3BhY2thZ2VALCRjZl9hZGFfcGFja2FnZSw7dCB0CitzLEBBREFfSU5DTFVERUAsJEFEQV9JTkNMVURFLDt0IHQKK3MsQEFEQV9PQkpFQ1RTQCwkQURBX09CSkVDVFMsO3QgdAorcyxAQURBX1NIQVJFRExJQkAsJEFEQV9TSEFSRURMSUIsO3QgdAorcyxATUFLRV9BREFfU0hBUkVETElCQCwkTUFLRV9BREFfU0hBUkVETElCLDt0IHQKK3MsQFRJTkZPX0xERkxBR1MyQCwkVElORk9fTERGTEFHUzIsO3QgdAorcyxAVElORk9fTElCU0AsJFRJTkZPX0xJQlMsO3QgdAorcyxAQUNQUEZMQUdTQCwkQUNQUEZMQUdTLDt0IHQKK3MsQERGVF9BUkdfU1VGRklYQCwkREZUX0FSR19TVUZGSVgsO3QgdAorcyxAREZUX0RFUF9TVUZGSVhALCRERlRfREVQX1NVRkZJWCw7dCB0CitzLEBERlRfT0JKX1NVQkRJUkAsJERGVF9PQkpfU1VCRElSLDt0IHQKK3MsQFVTRV9DRkdfU1VGRklYQCwkVVNFX0NGR19TVUZGSVgsO3QgdAorcyxAVEVTVF9BUkcyQCwkVEVTVF9BUkcyLDt0IHQKK3MsQFRFU1RfTElCUzJALCRURVNUX0xJQlMyLDt0IHQKK3MsQE5DVVJTRVNfU0hMSUIyQCwkTkNVUlNFU19TSExJQjIsO3QgdAorcyxAQURBX1NVQkRJUlNALCRBREFfU1VCRElSUyw7dCB0CitzLEBOQ1VSU0VTX1RSRUVALCROQ1VSU0VTX1RSRUUsO3QgdAorcyxARVhURVJOQUxfVFJFRUAsJEVYVEVSTkFMX1RSRUUsO3QgdAorcyxAQURBSFRNTF9ESVJALCRBREFIVE1MX0RJUiw7dCB0CitDRU9GCisKK0VPRgorCisgIGNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XEVPRgorICAjIFNwbGl0IHRoZSBzdWJzdGl0dXRpb25zIGludG8gYml0ZS1zaXplZCBwaWVjZXMgZm9yIHNlZHMgd2l0aAorICAjIHNtYWxsIGNvbW1hbmQgbnVtYmVyIGxpbWl0cywgbGlrZSBvbiBEaWdpdGFsIE9TRi8xIGFuZCBIUC1VWC4KKyAgYWNfbWF4X3NlZF9saW5lcz00OAorICBhY19zZWRfZnJhZz0xICMgTnVtYmVyIG9mIGN1cnJlbnQgZmlsZS4KKyAgYWNfYmVnPTEgIyBGaXJzdCBsaW5lIGZvciBjdXJyZW50IGZpbGUuCisgIGFjX2VuZD0kYWNfbWF4X3NlZF9saW5lcyAjIExpbmUgYWZ0ZXIgbGFzdCBsaW5lIGZvciBjdXJyZW50IGZpbGUuCisgIGFjX21vcmVfbGluZXM9OgorICBhY19zZWRfY21kcz0KKyAgd2hpbGUgJGFjX21vcmVfbGluZXM7IGRvCisgICAgaWYgdGVzdCAkYWNfYmVnIC1ndCAxOyB0aGVuCisgICAgICBzZWQgIjEsJHthY19iZWd9ZDsgJHthY19lbmR9cSIgJHRtcC9zdWJzLnNlZCA+JHRtcC9zdWJzLmZyYWcKKyAgICBlbHNlCisgICAgICBzZWQgIiR7YWNfZW5kfXEiICR0bXAvc3Vicy5zZWQgPiR0bXAvc3Vicy5mcmFnCisgICAgZmkKKyAgICBpZiB0ZXN0ICEgLXMgJHRtcC9zdWJzLmZyYWc7IHRoZW4KKyAgICAgIGFjX21vcmVfbGluZXM9ZmFsc2UKKyAgICBlbHNlCisgICAgICAjIFRoZSBwdXJwb3NlIG9mIHRoZSBsYWJlbCBhbmQgb2YgdGhlIGJyYW5jaGluZyBjb25kaXRpb24gaXMgdG8KKyAgICAgICMgc3BlZWQgdXAgdGhlIHNlZCBwcm9jZXNzaW5nIChpZiB0aGVyZSBhcmUgbm8gYEAnIGF0IGFsbCwgdGhlcmUKKyAgICAgICMgaXMgbm8gbmVlZCB0byBicm93c2UgYW55IG9mIHRoZSBzdWJzdGl0dXRpb25zKS4KKyAgICAgICMgVGhlc2UgYXJlIHRoZSB0d28gZXh0cmEgc2VkIGNvbW1hbmRzIG1lbnRpb25lZCBhYm92ZS4KKyAgICAgIChlY2hvICc6dAorICAvQFthLXpBLVpfXVthLXpBLVpfMC05XSpALyFiJyAmJiBjYXQgJHRtcC9zdWJzLmZyYWcpID4kdG1wL3N1YnMtJGFjX3NlZF9mcmFnLnNlZAorICAgICAgaWYgdGVzdCAteiAiJGFjX3NlZF9jbWRzIjsgdGhlbgorICAJYWNfc2VkX2NtZHM9InNlZCAtZiAkdG1wL3N1YnMtJGFjX3NlZF9mcmFnLnNlZCIKKyAgICAgIGVsc2UKKyAgCWFjX3NlZF9jbWRzPSIkYWNfc2VkX2NtZHMgfCBzZWQgLWYgJHRtcC9zdWJzLSRhY19zZWRfZnJhZy5zZWQiCisgICAgICBmaQorICAgICAgYWNfc2VkX2ZyYWc9YGV4cHIgJGFjX3NlZF9mcmFnICsgMWAKKyAgICAgIGFjX2JlZz0kYWNfZW5kCisgICAgICBhY19lbmQ9YGV4cHIgJGFjX2VuZCArICRhY19tYXhfc2VkX2xpbmVzYAorICAgIGZpCisgIGRvbmUKKyAgaWYgdGVzdCAteiAiJGFjX3NlZF9jbWRzIjsgdGhlbgorICAgIGFjX3NlZF9jbWRzPWNhdAorICBmaQorZmkgIyB0ZXN0IC1uICIkQ09ORklHX0ZJTEVTIgorCitFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XEVPRgorZm9yIGFjX2ZpbGUgaW4gOiAkQ09ORklHX0ZJTEVTOyBkbyB0ZXN0ICJ4JGFjX2ZpbGUiID0geDogJiYgY29udGludWUKKyAgIyBTdXBwb3J0ICJvdXRmaWxlWzppbmZpbGVbOmluZmlsZS4uLl1dIiwgZGVmYXVsdGluZyBpbmZpbGU9Im91dGZpbGUuaW4iLgorICBjYXNlICRhY19maWxlIGluCisgIC0gfCAqOi0gfCAqOi06KiApICMgaW5wdXQgZnJvbSBzdGRpbgorICAgICAgICBjYXQgPiR0bXAvc3RkaW4KKyAgICAgICAgYWNfZmlsZV9pbj1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLFteOl0qOiwsJ2AKKyAgICAgICAgYWNfZmlsZT1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLDouKiwsJ2AgOzsKKyAgKjoqICkgYWNfZmlsZV9pbj1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLFteOl0qOiwsJ2AKKyAgICAgICAgYWNfZmlsZT1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLDouKiwsJ2AgOzsKKyAgKiApICAgYWNfZmlsZV9pbj0kYWNfZmlsZS5pbiA7OworICBlc2FjCisKKyAgIyBDb21wdXRlIEBzcmNkaXJALCBAdG9wX3NyY2RpckAsIGFuZCBASU5TVEFMTEAgZm9yIHN1YmRpcmVjdG9yaWVzLgorICBhY19kaXI9YCRhc19leHByIFgiJGFjX2ZpbGUiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisgICAgICAgICBYIiRhY19maWxlIiA6ICdYXCgvL1wpW14vXScgXHwgXAorICAgICAgICAgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKSQnIFx8IFwKKyAgICAgICAgIFgiJGFjX2ZpbGUiIDogJ1hcKC9cKScgXHwgXAorICAgICAgICAgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8CitlY2hvIFgiJGFjX2ZpbGUiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wvXCkkL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cKS4qL3sgcy8vXDEvOyBxOyB9CisgIAkgIHMvLiovLi87IHEnYAorICBpZiB0ZXN0ICIkYWNfZGlyIiAhPSAiJGFjX2ZpbGUiICYmIHRlc3QgIiRhY19kaXIiICE9IC47IHRoZW4KKyAgICB7IGNhc2UgIiRhY19kaXIiIGluCisgIFtcXC9dKiB8ID86W1xcL10qICkgYXNfaW5jcl9kaXI9OzsKKyAgKikgICAgICAgICAgICAgICAgICAgICAgYXNfaW5jcl9kaXI9Ljs7Citlc2FjCithc19kdW1teT0iJGFjX2RpciIKK2ZvciBhc19ta2Rpcl9kaXIgaW4gYElGUz0nL1xcJzsgc2V0IFggJGFzX2R1bW15OyBzaGlmdDsgZWNobyAiJEAiYDsgZG8KKyAgY2FzZSAkYXNfbWtkaXJfZGlyIGluCisgICAgIyBTa2lwIERPUyBkcml2ZXNwZWMKKyAgICA/OikgYXNfaW5jcl9kaXI9JGFzX21rZGlyX2RpciA7OworICAgICopCisgICAgICBhc19pbmNyX2Rpcj0kYXNfaW5jcl9kaXIvJGFzX21rZGlyX2RpcgorICAgICAgdGVzdCAtZCAiJGFzX2luY3JfZGlyIiB8fCBta2RpciAiJGFzX2luY3JfZGlyIgorICAgIDs7CisgIGVzYWMKK2RvbmU7IH0KKworICAgIGFjX2Rpcl9zdWZmaXg9Ii9gZWNobyAkYWNfZGlyfHNlZCAncyxeXC4vLCwnYCIKKyAgICAjIEEgIi4uLyIgZm9yIGVhY2ggZGlyZWN0b3J5IGluICRhY19kaXJfc3VmZml4LgorICAgIGFjX2RvdHM9YGVjaG8gIiRhY19kaXJfc3VmZml4IiB8IHNlZCAncywvW14vXSosLi4vLGcnYAorICBlbHNlCisgICAgYWNfZGlyX3N1ZmZpeD0gYWNfZG90cz0KKyAgZmkKKworICBjYXNlICRzcmNkaXIgaW4KKyAgLikgIGFjX3NyY2Rpcj0uCisgICAgICBpZiB0ZXN0IC16ICIkYWNfZG90cyI7IHRoZW4KKyAgICAgICAgIGFjX3RvcF9zcmNkaXI9LgorICAgICAgZWxzZQorICAgICAgICAgYWNfdG9wX3NyY2Rpcj1gZWNobyAkYWNfZG90cyB8IHNlZCAncywvJCwsJ2AKKyAgICAgIGZpIDs7CisgIFtcXC9dKiB8ID86W1xcL10qICkKKyAgICAgIGFjX3NyY2Rpcj0kc3JjZGlyJGFjX2Rpcl9zdWZmaXg7CisgICAgICBhY190b3Bfc3JjZGlyPSRzcmNkaXIgOzsKKyAgKikgIyBSZWxhdGl2ZSBwYXRoLgorICAgIGFjX3NyY2Rpcj0kYWNfZG90cyRzcmNkaXIkYWNfZGlyX3N1ZmZpeAorICAgIGFjX3RvcF9zcmNkaXI9JGFjX2RvdHMkc3JjZGlyIDs7CisgIGVzYWMKKworICBjYXNlICRJTlNUQUxMIGluCisgIFtcXC8kXSogfCA/OltcXC9dKiApIGFjX0lOU1RBTEw9JElOU1RBTEwgOzsKKyAgKikgYWNfSU5TVEFMTD0kYWNfZG90cyRJTlNUQUxMIDs7CisgIGVzYWMKKworICBpZiB0ZXN0IHgiJGFjX2ZpbGUiICE9IHgtOyB0aGVuCisgICAgeyBlY2hvICIkYXNfbWU6MTQ1OTA6IGNyZWF0aW5nICRhY19maWxlIiA+JjUKK2VjaG8gIiRhc19tZTogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNjt9CisgICAgcm0gLWYgIiRhY19maWxlIgorICBmaQorICAjIExldCdzIHN0aWxsIHByZXRlbmQgaXQgaXMgYGNvbmZpZ3VyZScgd2hpY2ggaW5zdGFudGlhdGVzIChpLmUuLCBkb24ndAorICAjIHVzZSAkYXNfbWUpLCBwZW9wbGUgd291bGQgYmUgc3VycHJpc2VkIHRvIHJlYWQ6CisgICMgICAgLyogY29uZmlnLmguICBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBjb25maWcuc3RhdHVzLiAgKi8KKyAgY29uZmlndXJlX2lucHV0PSJHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBmcm9tIGBlY2hvICRhY19maWxlX2luIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWQgJ3MsLiovLCwnYCBieSBjb25maWd1cmUuIgorCisgICMgRmlyc3QgbG9vayBmb3IgdGhlIGlucHV0IGZpbGVzIGluIHRoZSBidWlsZCB0cmVlLCBvdGhlcndpc2UgaW4gdGhlCisgICMgc3JjIHRyZWUuCisgIGFjX2ZpbGVfaW5wdXRzPWBJRlM9OgorICAgIGZvciBmIGluICRhY19maWxlX2luOyBkbworICAgICAgY2FzZSAkZiBpbgorICAgICAgLSkgZWNobyAkdG1wL3N0ZGluIDs7CisgICAgICBbXFwvJF0qKQorICAgICAgICAgIyBBYnNvbHV0ZSAoY2FuJ3QgYmUgRE9TLXN0eWxlLCBhcyBJRlM9OikKKyAgICAgICAgIHRlc3QgLWYgIiRmIiB8fCB7IHsgZWNobyAiJGFzX21lOjE0NjA4OiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgICAgICAgIGVjaG8gJGY7OworICAgICAgKikgIyBSZWxhdGl2ZQorICAgICAgICAgaWYgdGVzdCAtZiAiJGYiOyB0aGVuCisgICAgICAgICAgICMgQnVpbGQgdHJlZQorICAgICAgICAgICBlY2hvICRmCisgICAgICAgICBlbGlmIHRlc3QgLWYgIiRzcmNkaXIvJGYiOyB0aGVuCisgICAgICAgICAgICMgU291cmNlIHRyZWUKKyAgICAgICAgICAgZWNobyAkc3JjZGlyLyRmCisgICAgICAgICBlbHNlCisgICAgICAgICAgICMgL2Rldi9udWxsIHRyZWUKKyAgICAgICAgICAgeyB7IGVjaG8gIiRhc19tZToxNDYyMTogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgICAgICAgICBmaTs7CisgICAgICBlc2FjCisgICAgZG9uZWAgfHwgeyAoZXhpdCAxKTsgZXhpdCAxOyB9CitFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XEVPRgorICBhY193YXJuX2RhdGFyb290ZGlyPW5vCisgIGlmIHRlc3QgeCIkYWNfZmlsZSIgIT0geC07IHRoZW4KKyAgICBmb3IgYWNfaXRlbSBpbiAkYWNfZmlsZV9pbnB1dHMKKyAgICBkbworICAgICAgYWNfc2Vlbj1gZ3JlcCAnQFwoZGF0YWRpclx8bWFuZGlyXHxpbmZvZGlyXClAJyAkYWNfaXRlbWAKKyAgICAgIGlmIHRlc3QgLW4gIiRhY19zZWVuIjsgdGhlbgorICAgICAgICBhY191c2VkPWBncmVwICdAZGF0YXJvb3RkaXJAJyAkYWNfaXRlbWAKKyAgICAgICAgaWYgdGVzdCAteiAiJGFjX3VzZWQiOyB0aGVuCisgICAgICAgICAgeyBlY2hvICIkYXNfbWU6MTQ2Mzc6IFdBUk5JTkc6IGRhdGFyb290ZGlyIHdhcyB1c2VkIGltcGxpY2l0bHkgYnV0IG5vdCBzZXQ6CiskYWNfc2VlbiIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6IGRhdGFyb290ZGlyIHdhcyB1c2VkIGltcGxpY2l0bHkgYnV0IG5vdCBzZXQ6CiskYWNfc2VlbiIgPiYyO30KKyAgICAgICAgICBhY193YXJuX2RhdGFyb290ZGlyPXllcworICAgICAgICBmaQorICAgICAgZmkKKyAgICAgIGFjX3NlZW49YGdyZXAgJyR7ZGF0YXJvb3RkaXJ9JyAkYWNfaXRlbWAKKyAgICAgIGlmIHRlc3QgLW4gIiRhY19zZWVuIjsgdGhlbgorICAgICAgICB7IGVjaG8gIiRhc19tZToxNDY0NjogV0FSTklORzogZGF0YXJvb3RkaXIgd2FzIHVzZWQgZXhwbGljaXRseSBidXQgbm90IHNldDoKKyRhY19zZWVuIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogZGF0YXJvb3RkaXIgd2FzIHVzZWQgZXhwbGljaXRseSBidXQgbm90IHNldDoKKyRhY19zZWVuIiA+JjI7fQorICAgICAgICBhY193YXJuX2RhdGFyb290ZGlyPXllcworICAgICAgZmkKKyAgICBkb25lCisgIGZpCisKK2lmIHRlc3QgIngkYWNfd2Fybl9kYXRhcm9vdGRpciIgPSB4eWVzOyB0aGVuCisgIGFjX3NlZF9jbWRzPSIkYWNfc2VkX2NtZHMgfCBzZWQgLWUgJ3MsQGRhdGFyb290ZGlyQCxcJHtwcmVmaXh9L3NoYXJlLGcnIC1lICdzLFwke2RhdGFyb290ZGlyfSxcJHtwcmVmaXh9L3NoYXJlLGcnIgorZmkKKworRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PEVPRgorICBzZWQgIiRhY192cHN1YgorJGV4dHJhc3ViCitFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XEVPRgorOnQKKy9AW2EtekEtWl9dW2EtekEtWl8wLTldKkAvIWIKK3MsQGNvbmZpZ3VyZV9pbnB1dEAsJGNvbmZpZ3VyZV9pbnB1dCw7dCB0CitzLEBzcmNkaXJALCRhY19zcmNkaXIsO3QgdAorcyxAdG9wX3NyY2RpckAsJGFjX3RvcF9zcmNkaXIsO3QgdAorcyxASU5TVEFMTEAsJGFjX0lOU1RBTEwsO3QgdAorIiAkYWNfZmlsZV9pbnB1dHMgfCAoZXZhbCAiJGFjX3NlZF9jbWRzIikgPiR0bXAvb3V0CisgIHJtIC1mICR0bXAvc3RkaW4KKyAgaWYgdGVzdCB4IiRhY19maWxlIiAhPSB4LTsgdGhlbgorICAgIGNwICR0bXAvb3V0ICRhY19maWxlCisKKyAgICBmb3IgYWNfbmFtZSBpbiBwcmVmaXggZXhlY19wcmVmaXggZGF0YXJvb3RkaXIKKyAgICBkbworICAgICAgICBhY19zZWVuPWBmZ3JlcCAtbiAnJHsnJGFjX25hbWUnWzo9XS4qfScgJGFjX2ZpbGVgCisgICAgICAgIGlmIHRlc3QgLW4gIiRhY19zZWVuIjsgdGhlbgorICAgICAgICAgICAgYWNfaW5pdD1gZWdyZXAgJ1sgCV0qJyRhY19uYW1lJ1sgCV0qPScgJGFjX2ZpbGVgCisgICAgICAgICAgICBpZiB0ZXN0IC16ICIkYWNfaW5pdCI7IHRoZW4KKyAgICAgICAgICAgICAgYWNfc2Vlbj1gZWNobyAiJGFjX3NlZW4iIHxzZWQgLWUgJ3MsXiwnJGFjX2ZpbGUnOiwnYAorICAgICAgICAgICAgICB7IGVjaG8gIiRhc19tZToxNDY4MzogV0FSTklORzogVmFyaWFibGUgJGFjX25hbWUgaXMgdXNlZCBidXQgd2FzIG5vdCBzZXQ6CiskYWNfc2VlbiIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6IFZhcmlhYmxlICRhY19uYW1lIGlzIHVzZWQgYnV0IHdhcyBub3Qgc2V0OgorJGFjX3NlZW4iID4mMjt9CisgICAgICAgICAgICBmaQorICAgICAgICBmaQorICAgIGRvbmUKKyAgICBlZ3JlcCAtbiAnQFthLXpfXVthLXpfMC05XStAJyAkYWNfZmlsZSA+JHRtcC9vdXQKKyAgICBlZ3JlcCAtbiAnQFtBLVpfXVtBLVpfMC05XStAJyAkYWNfZmlsZSA+PiR0bXAvb3V0CisgICAgaWYgdGVzdCAtcyAkdG1wL291dDsgdGhlbgorICAgICAgYWNfc2Vlbj1gc2VkIC1lICdzLF4sJyRhY19maWxlJzosJyA8ICR0bXAvb3V0YAorICAgICAgeyBlY2hvICIkYXNfbWU6MTQ2OTQ6IFdBUk5JTkc6IFNvbWUgdmFyaWFibGVzIG1heSBub3QgYmUgc3Vic3RpdHV0ZWQ6CiskYWNfc2VlbiIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6IFNvbWUgdmFyaWFibGVzIG1heSBub3QgYmUgc3Vic3RpdHV0ZWQ6CiskYWNfc2VlbiIgPiYyO30KKyAgICBmaQorICBlbHNlCisgICAgY2F0ICR0bXAvb3V0CisgIGZpCisgIHJtIC1mICR0bXAvb3V0CisKK2RvbmUKK0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcRU9GCisKKyMKKyMgQ09ORklHX0hFQURFUiBzZWN0aW9uLgorIworCisjIFRoZXNlIHNlZCBjb21tYW5kcyBhcmUgcGFzc2VkIHRvIHNlZCBhcyAiQSBOQU1FIEIgTkFNRSBDIFZBTFVFIEQiLCB3aGVyZQorIyBOQU1FIGlzIHRoZSBjcHAgbWFjcm8gYmVpbmcgZGVmaW5lZCBhbmQgVkFMVUUgaXMgdGhlIHZhbHVlIGl0IGlzIGJlaW5nIGdpdmVuLgorIworIyBhY19kIHNldHMgdGhlIHZhbHVlIGluICIjZGVmaW5lIE5BTUUgVkFMVUUiIGxpbmVzLgorYWNfZEE9J3MsXlwoWyAJXSpcKSNcKFsgCV0qZGVmaW5lWyAJXVsgCV0qXCknCithY19kQj0nWyAJXS4qJCxcMSNcMicKK2FjX2RDPScgJworYWNfZEQ9Jyw7dCcKKyMgYWNfaSB0dXJucyAiI3VuZGVmIE5BTUUiIHdpdGggdHJhaWxpbmcgYmxhbmtzIGludG8gIiNkZWZpbmUgTkFNRSBWQUxVRSIuCithY19pQT0ncyxeXChbIAldKlwpI1woWyAJXSpcKXVuZGVmXChbIAldWyAJXSpcKScKK2FjX2lCPSdcKFsgCV1cKSxcMSNcMmRlZmluZVwzJworYWNfaUM9JyAnCithY19pRD0nXDQsO3QnCisjIGFjX3UgdHVybnMgIiN1bmRlZiBOQU1FIiB3aXRob3V0IHRyYWlsaW5nIGJsYW5rcyBpbnRvICIjZGVmaW5lIE5BTUUgVkFMVUUiLgorYWNfdUE9J3MsXlwoWyAJXSpcKSNcKFsgCV0qXCl1bmRlZlwoWyAJXVsgCV0qXCknCithY191Qj0nJCxcMSNcMmRlZmluZVwzJworYWNfdUM9JyAnCithY191RD0nLDt0JworCitmb3IgYWNfZmlsZSBpbiA6ICRDT05GSUdfSEVBREVSUzsgZG8gdGVzdCAieCRhY19maWxlIiA9IHg6ICYmIGNvbnRpbnVlCisgICMgU3VwcG9ydCAib3V0ZmlsZVs6aW5maWxlWzppbmZpbGUuLi5dXSIsIGRlZmF1bHRpbmcgaW5maWxlPSJvdXRmaWxlLmluIi4KKyAgY2FzZSAkYWNfZmlsZSBpbgorICAtIHwgKjotIHwgKjotOiogKSAjIGlucHV0IGZyb20gc3RkaW4KKyAgICAgICAgY2F0ID4kdG1wL3N0ZGluCisgICAgICAgIGFjX2ZpbGVfaW49YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyxbXjpdKjosLCdgCisgICAgICAgIGFjX2ZpbGU9YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyw6LiosLCdgIDs7CisgICo6KiApIGFjX2ZpbGVfaW49YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyxbXjpdKjosLCdgCisgICAgICAgIGFjX2ZpbGU9YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyw6LiosLCdgIDs7CisgICogKSAgIGFjX2ZpbGVfaW49JGFjX2ZpbGUuaW4gOzsKKyAgZXNhYworCisgIHRlc3QgeCIkYWNfZmlsZSIgIT0geC0gJiYgeyBlY2hvICIkYXNfbWU6MTQ3NDM6IGNyZWF0aW5nICRhY19maWxlIiA+JjUKK2VjaG8gIiRhc19tZTogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNjt9CisKKyAgIyBGaXJzdCBsb29rIGZvciB0aGUgaW5wdXQgZmlsZXMgaW4gdGhlIGJ1aWxkIHRyZWUsIG90aGVyd2lzZSBpbiB0aGUKKyAgIyBzcmMgdHJlZS4KKyAgYWNfZmlsZV9pbnB1dHM9YElGUz06CisgICAgZm9yIGYgaW4gJGFjX2ZpbGVfaW47IGRvCisgICAgICBjYXNlICRmIGluCisgICAgICAtKSBlY2hvICR0bXAvc3RkaW4gOzsKKyAgICAgIFtcXC8kXSopCisgICAgICAgICAjIEFic29sdXRlIChjYW4ndCBiZSBET1Mtc3R5bGUsIGFzIElGUz06KQorICAgICAgICAgdGVzdCAtZiAiJGYiIHx8IHsgeyBlY2hvICIkYXNfbWU6MTQ3NTQ6IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAgICAgICAgZWNobyAkZjs7CisgICAgICAqKSAjIFJlbGF0aXZlCisgICAgICAgICBpZiB0ZXN0IC1mICIkZiI7IHRoZW4KKyAgICAgICAgICAgIyBCdWlsZCB0cmVlCisgICAgICAgICAgIGVjaG8gJGYKKyAgICAgICAgIGVsaWYgdGVzdCAtZiAiJHNyY2Rpci8kZiI7IHRoZW4KKyAgICAgICAgICAgIyBTb3VyY2UgdHJlZQorICAgICAgICAgICBlY2hvICRzcmNkaXIvJGYKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIyAvZGV2L251bGwgdHJlZQorICAgICAgICAgICB7IHsgZWNobyAiJGFzX21lOjE0NzY3OiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgICAgICAgIGZpOzsKKyAgICAgIGVzYWMKKyAgICBkb25lYCB8fCB7IChleGl0IDEpOyBleGl0IDE7IH0KKyAgIyBSZW1vdmUgdGhlIHRyYWlsaW5nIHNwYWNlcy4KKyAgc2VkICdzL1sgCV0qJC8vJyAkYWNfZmlsZV9pbnB1dHMgPiR0bXAvaW4KKworRU9GCisKKyMgVHJhbnNmb3JtIGNvbmZkZWZzLmggaW50byBhIGxpc3Qgb2YgI2RlZmluZSdzLiAgV2Ugd29uJ3QgdXNlIGl0IGFzIGEgc2VkCisjIHNjcmlwdCwgYnV0IGFzIGRhdGEgdG8gaW5zZXJ0IHdoZXJlIHdlIHNlZSBAREVGU0AuICBXZSBleHBlY3QgQUNfU0FWRV9ERUZTIHRvCisjIGJlIGVpdGhlciAnY2F0JyBvciAnc29ydCcuCitjYXQgY29uZmRlZnMuaCB8IHVuaXEgPmNvbmZ0ZXN0LnZhbHMKKworIyBCcmVhayB1cCBjb25mdGVzdC52YWxzIGJlY2F1c2Ugc29tZSBzaGVsbHMgaGF2ZSBhIGxpbWl0IG9uCisjIHRoZSBzaXplIG9mIGhlcmUgZG9jdW1lbnRzLCBhbmQgb2xkIHNlZHMgaGF2ZSBzbWFsbCBsaW1pdHMgdG9vLgorCitybSAtZiBjb25mdGVzdC50YWlsCitlY2hvICcgIHJtIC1mIGNvbmZ0ZXN0LmZyYWcnID4+ICRDT05GSUdfU1RBVFVTCit3aGlsZSBncmVwIC4gY29uZnRlc3QudmFscyA+L2Rldi9udWxsCitkbworICAjIFdyaXRlIGNodW5rcyBvZiBhIGxpbWl0ZWQtc2l6ZSBoZXJlIGRvY3VtZW50IHRvIGNvbmZ0ZXN0LmZyYWcuCisgIGVjaG8gJyAgY2F0ID4+IGNvbmZ0ZXN0LmZyYWcgPDxDRU9GJyA+PiAkQ09ORklHX1NUQVRVUworICBzZWQgJHthY19tYXhfaGVyZV9saW5lc31xIGNvbmZ0ZXN0LnZhbHMgfCBzZWQgLWUgJ3MvI2lmZGVmLiovI2lmIDAvJyA+PiAkQ09ORklHX1NUQVRVUworICBlY2hvICdDRU9GJyA+PiAkQ09ORklHX1NUQVRVUworICBzZWQgMSwke2FjX21heF9oZXJlX2xpbmVzfWQgY29uZnRlc3QudmFscyA+IGNvbmZ0ZXN0LnRhaWwKKyAgcm0gLWYgY29uZnRlc3QudmFscworICBtdiBjb25mdGVzdC50YWlsIGNvbmZ0ZXN0LnZhbHMKK2RvbmUKK3JtIC1mIGNvbmZ0ZXN0LnZhbHMKKworIyBSdW4gc2VkIHRvIHN1YnN0aXR1dGUgdGhlIGNvbnRlbnRzIG9mIGNvbmZ0ZXN0LmZyYWcgaW50byAkdG1wL2luIGF0IHRoZQorIyBtYXJrZXIgQERFRlNALgorZWNobyAnICBjYXQgPj4gY29uZnRlc3QuZWRpdCA8PENFT0YKKy9AREVGU0AvciBjb25mdGVzdC5mcmFnCisvQERFRlNAL2QKK0NFT0YKK3NlZCAtZiBjb25mdGVzdC5lZGl0ICR0bXAvaW4gPiAkdG1wL291dAorcm0gLWYgJHRtcC9pbgorbXYgJHRtcC9vdXQgJHRtcC9pbgorcm0gLWYgY29uZnRlc3QuZWRpdCBjb25mdGVzdC5mcmFnCisnID4+ICRDT05GSUdfU1RBVFVTCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XEVPRgorICAjIExldCdzIHN0aWxsIHByZXRlbmQgaXQgaXMgYGNvbmZpZ3VyZScgd2hpY2ggaW5zdGFudGlhdGVzIChpLmUuLCBkb24ndAorICAjIHVzZSAkYXNfbWUpLCBwZW9wbGUgd291bGQgYmUgc3VycHJpc2VkIHRvIHJlYWQ6CisgICMgICAgLyogY29uZmlnLmguICBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBjb25maWcuc3RhdHVzLiAgKi8KKyAgaWYgdGVzdCB4IiRhY19maWxlIiA9IHgtOyB0aGVuCisgICAgZWNobyAiLyogR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgY29uZmlndXJlLiAgKi8iID4kdG1wL2NvbmZpZy5oCisgIGVsc2UKKyAgICBlY2hvICIvKiAkYWNfZmlsZS4gIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IGNvbmZpZ3VyZS4gICovIiA+JHRtcC9jb25maWcuaAorICBmaQorICBjYXQgJHRtcC9pbiA+PiR0bXAvY29uZmlnLmgKKyAgcm0gLWYgJHRtcC9pbgorICBpZiB0ZXN0IHgiJGFjX2ZpbGUiICE9IHgtOyB0aGVuCisgICAgaWYgY21wIC1zICRhY19maWxlICR0bXAvY29uZmlnLmggMj4vZGV2L251bGw7IHRoZW4KKyAgICAgIHsgZWNobyAiJGFzX21lOjE0ODI1OiAkYWNfZmlsZSBpcyB1bmNoYW5nZWQiID4mNQorZWNobyAiJGFzX21lOiAkYWNfZmlsZSBpcyB1bmNoYW5nZWQiID4mNjt9CisgICAgZWxzZQorICAgICAgYWNfZGlyPWAkYXNfZXhwciBYIiRhY19maWxlIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorICAgICAgICAgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKVteL10nIFx8IFwKKyAgICAgICAgIFgiJGFjX2ZpbGUiIDogJ1hcKC8vXCkkJyBcfCBcCisgICAgICAgICBYIiRhY19maWxlIiA6ICdYXCgvXCknIFx8IFwKKyAgICAgICAgIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorZWNobyBYIiRhY19maWxlIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXCkuKi97IHMvL1wxLzsgcTsgfQorICAJICBzLy4qLy4vOyBxJ2AKKyAgICAgIGlmIHRlc3QgIiRhY19kaXIiICE9ICIkYWNfZmlsZSIgJiYgdGVzdCAiJGFjX2RpciIgIT0gLjsgdGhlbgorICAgICAgICB7IGNhc2UgIiRhY19kaXIiIGluCisgIFtcXC9dKiB8ID86W1xcL10qICkgYXNfaW5jcl9kaXI9OzsKKyAgKikgICAgICAgICAgICAgICAgICAgICAgYXNfaW5jcl9kaXI9Ljs7Citlc2FjCithc19kdW1teT0iJGFjX2RpciIKK2ZvciBhc19ta2Rpcl9kaXIgaW4gYElGUz0nL1xcJzsgc2V0IFggJGFzX2R1bW15OyBzaGlmdDsgZWNobyAiJEAiYDsgZG8KKyAgY2FzZSAkYXNfbWtkaXJfZGlyIGluCisgICAgIyBTa2lwIERPUyBkcml2ZXNwZWMKKyAgICA/OikgYXNfaW5jcl9kaXI9JGFzX21rZGlyX2RpciA7OworICAgICopCisgICAgICBhc19pbmNyX2Rpcj0kYXNfaW5jcl9kaXIvJGFzX21rZGlyX2RpcgorICAgICAgdGVzdCAtZCAiJGFzX2luY3JfZGlyIiB8fCBta2RpciAiJGFzX2luY3JfZGlyIgorICAgIDs7CisgIGVzYWMKK2RvbmU7IH0KKworICAgICAgZmkKKyAgICAgIHJtIC1mICRhY19maWxlCisgICAgICBtdiAkdG1wL2NvbmZpZy5oICRhY19maWxlCisgICAgZmkKKyAgZWxzZQorICAgIGNhdCAkdG1wL2NvbmZpZy5oCisgICAgcm0gLWYgJHRtcC9jb25maWcuaAorICBmaQorZG9uZQorRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxFT0YKKyMKKyMgQ09ORklHX0NPTU1BTkRTIHNlY3Rpb24uCisjCitmb3IgYWNfZmlsZSBpbiA6ICRDT05GSUdfQ09NTUFORFM7IGRvIHRlc3QgIngkYWNfZmlsZSIgPSB4OiAmJiBjb250aW51ZQorICBhY19kZXN0PWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsOi4qLCwnYAorICBhY19zb3VyY2U9YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyxbXjpdKjosLCdgCisKKyAgY2FzZSAkYWNfZGVzdCBpbgorICAgIGRlZmF1bHQgKQoraWYgdGVzdCAteiAiJFVTRV9PTERfTUFLRVJVTEVTIiA7IHRoZW4KKwkkQVdLIC1mICRzcmNkaXIvbWstMXN0LmF3ayA8JHNyY2Rpci9zcmMvbW9kdWxlcyA+PnNyYy9NYWtlZmlsZQorZmkKKyA7OworICBlc2FjCitkb25lCitFT0YKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcRU9GCisKK3sgKGV4aXQgMCk7IGV4aXQgMDsgfQorRU9GCitjaG1vZCAreCAkQ09ORklHX1NUQVRVUworYWNfY2xlYW5fZmlsZXM9JGFjX2NsZWFuX2ZpbGVzX3NhdmUKKworIyBjb25maWd1cmUgaXMgd3JpdGluZyB0byBjb25maWcubG9nLCBhbmQgdGhlbiBjYWxscyBjb25maWcuc3RhdHVzLgorIyBjb25maWcuc3RhdHVzIGRvZXMgaXRzIG93biByZWRpcmVjdGlvbiwgYXBwZW5kaW5nIHRvIGNvbmZpZy5sb2cuCisjIFVuZm9ydHVuYXRlbHksIG9uIERPUyB0aGlzIGZhaWxzLCBhcyBjb25maWcubG9nIGlzIHN0aWxsIGtlcHQgb3BlbgorIyBieSBjb25maWd1cmUsIHNvIGNvbmZpZy5zdGF0dXMgd29uJ3QgYmUgYWJsZSB0byB3cml0ZSB0byBpdDsgaXRzCisjIG91dHB1dCBpcyBzaW1wbHkgZGlzY2FyZGVkLiAgU28gd2UgZXhlYyB0aGUgRkQgdG8gL2Rldi9udWxsLAorIyBlZmZlY3RpdmVseSBjbG9zaW5nIGNvbmZpZy5sb2csIHNvIGl0IGNhbiBiZSBwcm9wZXJseSAocmUpb3BlbmVkIGFuZAorIyBhcHBlbmRlZCB0byBieSBjb25maWcuc3RhdHVzLiAgV2hlbiBjb21pbmcgYmFjayB0byBjb25maWd1cmUsIHdlCisjIG5lZWQgdG8gbWFrZSB0aGUgRkQgYXZhaWxhYmxlIGFnYWluLgoraWYgdGVzdCAiJG5vX2NyZWF0ZSIgIT0geWVzOyB0aGVuCisgIGFjX2NzX3N1Y2Nlc3M9OgorICBleGVjIDU+L2Rldi9udWxsCisgICRTSEVMTCAkQ09ORklHX1NUQVRVUyB8fCBhY19jc19zdWNjZXNzPWZhbHNlCisgIGV4ZWMgNT4+Y29uZmlnLmxvZworICAjIFVzZSB8fCwgbm90ICYmLCB0byBhdm9pZCBleGl0aW5nIGZyb20gdGhlIGlmIHdpdGggJD8gPSAxLCB3aGljaAorICAjIHdvdWxkIG1ha2UgY29uZmlndXJlIGZhaWwgaWYgdGhpcyBpcyB0aGUgbGFzdCBpbnN0cnVjdGlvbi4KKyAgJGFjX2NzX3N1Y2Nlc3MgfHwgeyAoZXhpdCAxKTsgZXhpdCAxOyB9CitmaQorJHtNQUtFOi1tYWtlfSBwcmVpbnN0YWxsCmRpZmYgLS1naXQgYS9BZGE5NS9jb25maWd1cmUuaW4gYi9BZGE5NS9jb25maWd1cmUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA3MThmNAotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L2NvbmZpZ3VyZS5pbgpAQCAtMCwwICsxLDYyMCBAQAorZG5sKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitkbmwgQ29weXJpZ2h0IChjKSAyMDEwLTIwMTQsMjAxNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKK2RubCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorZG5sIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCitkbmwgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKK2RubCAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorZG5sIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCitkbmwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKK2RubCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorZG5sIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCitkbmwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKK2RubCBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorZG5sIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCitkbmwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKK2RubCBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorZG5sIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCitkbmwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKK2RubCBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorZG5sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCitkbmwgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKK2RubCBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorZG5sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCitkbmwgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKK2RubCBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorZG5sIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCitkbmwgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKK2RubCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZG5sCitkbmwgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5CitkbmwKK2RubCAkSWQ6IGNvbmZpZ3VyZS5pbix2IDEuNjAgMjAxNS8wNC8xOCAxODo0OTo1NyB0b20gRXhwICQKK2RubCBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9jb25mIHRvIHByb2R1Y2UgYSBjb25maWd1cmUgc2NyaXB0LgorZG5sCitkbmwgU2VlIGh0dHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC9hdXRvY29uZi8gZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCitkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX1BSRVJFUSgyLjUyLjIwMDMwMjA4KQorQUNfUkVWSVNJT04oJFJldmlzaW9uOiAxLjYwICQpCitBQ19JTklUKGdlbi9nZW4uYykKK0FDX0NPTkZJR19IRUFERVIoaW5jbHVkZS9uY3Vyc2VzX2NmZy5oOmluY2x1ZGUvbmN1cnNlc19jZmcuaGluKQorCitDRl9UT1BfQlVJTERESVIKKworQ0ZfV0lUSF9TWVNUWVBFCisKKyMjIwlTYXZlIHRoZSBnaXZlbiAkQ0ZMQUdTIHRvIGFsbG93IHVzZXItb3ZlcnJpZGUuCitjZl91c2VyX0NGTEFHUz0iJENGTEFHUyIKKworIyMjCURlZmF1bHQgaW5zdGFsbC1sb2NhdGlvbgorQ0ZfQ0ZHX0RFRkFVTFRTCisKKyMjIwlDaGVja3MgZm9yIHByb2dyYW1zLgorQ0ZfUFJPR19DQyhnbmF0Z2NjIGdjYyBjYykKK0FDX1BST0dfQ1BQCitBQ19QUk9HX0dDQ19UUkFESVRJT05BTAorQ0ZfUFJPR19DQ19DX08oQ0MpCisKK0FDX0FSR19QUk9HUkFNCisKK0NGX1BST0dfQVdLCitDRl9QUk9HX0VHUkVQCitBQ19QUk9HX0lOU1RBTEwKK0NGX1BST0dfTE5fUworCitBQ19TWVNfTE9OR19GSUxFX05BTUVTCisKKyMgaWYgd2UgZmluZCBwa2ctY29uZmlnLCBjaGVjayBpZiB3ZSBzaG91bGQgaW5zdGFsbCB0aGUgIi5wYyIgZmlsZXMuCitDRl9QS0dfQ09ORklHCitDRl9XSVRIX1BLR19DT05GSUdfTElCRElSCisKK0FDX01TR19DSEVDS0lORyhpZiB5b3Ugd2FudCB0byBidWlsZCB0ZXN0LXByb2dyYW1zKQorQUNfQVJHX1dJVEgodGVzdHMsCisJWyAgLS13aXRob3V0LXRlc3RzICAgICAgICAgc3VwcHJlc3MgYnVpbGQgd2l0aCB0ZXN0LXByb2dyYW1zXSwKKwlbY2Zfd2l0aF90ZXN0cz0kd2l0aHZhbF0sCisJW2NmX3dpdGhfdGVzdHM9eWVzXSkKK0FDX01TR19SRVNVTFQoJGNmX3dpdGhfdGVzdHMpCisKK0FDX01TR19DSEVDS0lORyhpZiB3ZSBzaG91bGQgYXNzdW1lIG1peGVkLWNhc2UgZmlsZW5hbWVzKQorQUNfQVJHX0VOQUJMRShtaXhlZC1jYXNlLAorCVsgIC0tZW5hYmxlLW1peGVkLWNhc2UgICAgIHRpYyBzaG91bGQgYXNzdW1lIG1peGVkLWNhc2UgZmlsZW5hbWVzXSwKKwlbZW5hYmxlX21peGVkY2FzZT0kZW5hYmxldmFsXSwKKwlbZW5hYmxlX21peGVkY2FzZT1hdXRvXSkKK0FDX01TR19SRVNVTFQoJGVuYWJsZV9taXhlZGNhc2UpCitpZiB0ZXN0ICIkZW5hYmxlX21peGVkY2FzZSIgPSAiYXV0byIgOyB0aGVuCisJQ0ZfTUlYRURDQVNFX0ZJTEVOQU1FUworZWxzZQorCWNmX2N2X21peGVkY2FzZT0kZW5hYmxlX21peGVkY2FzZQorCWlmIHRlc3QgIiRlbmFibGVfbWl4ZWRjYXNlIiA9ICJ5ZXMiIDsgdGhlbgorCQlBQ19ERUZJTkUoTUlYRURDQVNFX0ZJTEVOQU1FUykKKwlmaQorZmkKKworIyBkbyB0aGlzIGFmdGVyIG1peGVkLWNhc2Ugb3B0aW9uICh0YWdzL1RBR1MgaXMgbm90IGFzIGltcG9ydGFudCBhcyB0aWMpLgorQUNfUFJPR19NQUtFX1NFVAorQ0ZfTUFLRV9UQUdTCitDRl9NQUtFRkxBR1MKKworZG5sIFRoZXNlIGFyZSBzdGFuZGFyZCBhbW9uZyAqTklYIHN5c3RlbXMsIGJ1dCBub3Qgd2hlbiBjcm9zcy1jb21waWxpbmcKK0FDX0NIRUNLX1RPT0woUkFOTElCLCByYW5saWIsICc6JykKK0FDX0NIRUNLX1RPT0woTEQsIGxkLCBsZCkKK0FDX0NIRUNLX1RPT0woQVIsIGFyLCBhcikKK0NGX0FSX0ZMQUdTCitDRl9QQVRIU0VQCisKK2RubCBTcGVjaWFsIG9wdGlvbiBmb3IgdXNlIGJ5IHN5c3RlbS1idWlsZGVyczogdGhlIGluc3RhbGwtcHJlZml4IGlzIHVzZWQgdG8KK2RubCBhZGp1c3QgdGhlIGxvY2F0aW9uIGludG8gd2hpY2ggdGhlIGFjdHVhbCBpbnN0YWxsIGlzIGRvbmUsIHNvIHRoYXQgYW4KK2RubCBhcmNoaXZlIGNhbiBiZSBidWlsdCB3aXRob3V0IG1vZGlmeWluZyB0aGUgaG9zdCBzeXN0ZW0ncyBjb25maWd1cmF0aW9uLgorQUNfTVNHX0NIRUNLSU5HKGlmIHlvdSBoYXZlIHNwZWNpZmllZCBhbiBpbnN0YWxsLXByZWZpeCkKK0FDX0FSR19XSVRIKGluc3RhbGwtcHJlZml4LAorCVsgIC0td2l0aC1pbnN0YWxsLXByZWZpeCAgIHByZWZpeGVzIGFjdHVhbCBpbnN0YWxsLWxvY2F0aW9uICgkREVTVERJUildLAorCVtjYXNlICIkd2l0aHZhbCIgaW4KKwkoeWVzfG5vKQorCQk7OworCSgqKQlERVNURElSPSIkd2l0aHZhbCIKKwkJOzsKKwllc2FjXSkKK0FDX01TR19SRVNVTFQoJERFU1RESVIpCitBQ19TVUJTVChERVNURElSKQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitDRl9IRUxQX01FU1NBR0UoQnVpbGQtVG9vbHMgTmVlZGVkIHRvIENvbXBpbGUgVGVtcG9yYXJ5IEFwcGxpY2F0aW9ucyBmb3IgQ3Jvc3MtY29tcGlsaW5nOikKKyMgSWYgd2UncmUgY3Jvc3MtY29tcGlsaW5nLCBhbGxvdyB0aGUgdXNlciB0byBvdmVycmlkZSB0aGUgdG9vbHMgYW5kIHRoZWlyCisjIG9wdGlvbnMuICBUaGUgY29uZmlndXJlIHNjcmlwdCBpcyBvcmllbnRlZCB0b3dhcmQgaWRlbnRpZnlpbmcgdGhlIGhvc3QKKyMgY29tcGlsZXIsIGV0Yy4sIGJ1dCB3ZSBuZWVkIGEgYnVpbGQgY29tcGlsZXIgdG8gZ2VuZXJhdGUgcGFydHMgb2YgdGhlIHNvdXJjZS4KK0NGX0JVSUxEX0NDCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK0NGX0hFTFBfTUVTU0FHRShPcHRpb25zIHRvIFNwZWNpZnkgdGhlIExpYnJhcmllcyBCdWlsdC9Vc2VkOikKKworIyMjIE9wdGlvbnMgdG8gYWxsb3cgdGhlIHVzZXIgdG8gc3BlY2lmeSB0aGUgc2V0IG9mIGxpYnJhcmllcyB3aGljaCBhcmUgdXNlZC4KKyMjIyBVc2UgIi0td2l0aG91dC1ub3JtYWwgLS13aXRoLXNoYXJlZCIgdG8gYWxsb3cgdGhlIGRlZmF1bHQgbW9kZWwgdG8gYmUKKyMjIyBzaGFyZWQsIGZvciBleGFtcGxlLgorY2ZfbGlzdF9tb2RlbHM9IiIKKworQUNfTVNHX0NIRUNLSU5HKGlmIHlvdSB3YW50IHRvIGJ1aWxkIHNoYXJlZCBDLW9iamVjdHMpCitBQ19BUkdfV0lUSChzaGFyZWQsCisJWyAgLS13aXRoLXNoYXJlZCAgICAgICAgICAgZ2VuZXJhdGUgc2hhcmVkIEMtb2JqZWN0cyAobmVlZGVkIGZvciAtLXdpdGgtYWRhLXNoYXJlZGxpYildLAorCVt3aXRoX3NoYXJlZD0kd2l0aHZhbF0sCisJW3dpdGhfc2hhcmVkPW5vXSkKK0FDX01TR19SRVNVTFQoJHdpdGhfc2hhcmVkKQordGVzdCAiJHdpdGhfc2hhcmVkIiA9ICJ5ZXMiICYmIGNmX2xpc3RfbW9kZWxzPSIkY2ZfbGlzdF9tb2RlbHMgc2hhcmVkIgorCitBQ19NU0dfQ0hFQ0tJTkcoZm9yIHNwZWNpZmllZCBtb2RlbHMpCit0ZXN0IC16ICIkY2ZfbGlzdF9tb2RlbHMiICYmIGNmX2xpc3RfbW9kZWxzPW5vcm1hbAorQUNfTVNHX1JFU1VMVCgkY2ZfbGlzdF9tb2RlbHMpCisKKyMjIyBVc2UgdGhlIGZpcnN0IG1vZGVsIGFzIHRoZSBkZWZhdWx0LCBhbmQgc2F2ZSBpdHMgc3VmZml4IGZvciB1c2UgaW4gYnVpbGRpbmcKKyMjIyB1cCB0ZXN0LWFwcGxpY2F0aW9ucy4KK0FDX01TR19DSEVDS0lORyhmb3IgZGVmYXVsdCBtb2RlbCkKK0RGVF9MV1JfTU9ERUw9YGVjaG8gIiRjZl9saXN0X21vZGVscyIgfCAkQVdLICd7cHJpbnQgJDF9J2AKK0FDX01TR19SRVNVTFQoJERGVF9MV1JfTU9ERUwpCisKK0NGX1VQUEVSKERGVF9VUFJfTU9ERUwsJERGVF9MV1JfTU9ERUwpZG5sCisKK0FDX1NVQlNUKERGVF9MV1JfTU9ERUwpZG5sCXRoZSBkZWZhdWx0IG1vZGVsICgibm9ybWFsIikKK0FDX1NVQlNUKERGVF9VUFJfTU9ERUwpZG5sCXRoZSBkZWZhdWx0IG1vZGVsICgiTk9STUFMIikKKworQ0ZfTkNVUlNFU19BRERPTgorCitDRl9XSVRIX0xJQl9QUkVGSVgoY2ZfcHJlZml4KQorCitMSUJfU1VGRklYPQorQUNfU1VCU1QoTElCX1NVRkZJWCkKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitkbmwgTm90IGFsbCBwb3J0cyBvZiBnY2Mgc3VwcG9ydCB0aGUgLWcgb3B0aW9uCisKK2lmIHRlc3QgWCIkQ0NfR19PUFQiID0gWCIiIDsgdGhlbgorCUNDX0dfT1BUPSctZycKKwl0ZXN0IC1uICIkR0NDIiAmJiB0ZXN0ICIke2FjX2N2X3Byb2dfY2NfZ30iICE9IHllcyAmJiBDQ19HX09QVD0nJworZmkKK0FDX1NVQlNUKENDX0dfT1BUKQorCitBQ19NU0dfQ0hFQ0tJTkcoZm9yIGRlZmF1bHQgbG9hZGVyIGZsYWdzKQorY2FzZSAkREZUX0xXUl9NT0RFTCBpbgorKG5vcm1hbCkgIExEX01PREVMPScnICAgOzsKKyhkZWJ1ZykgICBMRF9NT0RFTD0kQ0NfR19PUFQgOzsKKyhwcm9maWxlKSBMRF9NT0RFTD0nLXBnJzs7Cisoc2hhcmVkKSAgTERfTU9ERUw9JycgICA7OworZXNhYworQUNfU1VCU1QoTERfTU9ERUwpZG5sCQl0aGUgdHlwZSBvZiBsaW5rIChlLmcuLCAtZyBvciAtcGcpCitBQ19NU0dfUkVTVUxUKCRMRF9NT0RFTCkKKworQ0ZfU0hBUkVEX09QVFMKKworIyBUaGUgdGVzdC9zYW1wbGUgcHJvZ3JhbXMgaW4gdGhlIG9yaWdpbmFsIHRyZWUgbGluayB1c2luZyBycGF0aCBvcHRpb24uCisjIE1ha2UgaXQgb3B0aW9uYWwgZm9yIHBhY2thZ2Vycy4KK2lmIHRlc3QgLW4gIiRMT0NBTF9MREZMQUdTIgordGhlbgorCUFDX01TR19DSEVDS0lORyhpZiB5b3Ugd2FudCB0byBsaW5rIHNhbXBsZSBwcm9ncmFtcyB3aXRoIHJwYXRoIG9wdGlvbikKKwlBQ19BUkdfRU5BQkxFKHJwYXRoLWxpbmssCisJCVsgIC0tZW5hYmxlLXJwYXRoLWxpbmsgICAgIGxpbmsgc2FtcGxlIHByb2dyYW1zIHdpdGggcnBhdGggb3B0aW9uXSwKKwkJW3dpdGhfcnBhdGhfbGluaz0kZW5hYmxldmFsXSwKKwkJW3dpdGhfcnBhdGhfbGluaz15ZXNdKQorCUFDX01TR19SRVNVTFQoJHdpdGhfcnBhdGhfbGluaykKKwlpZiB0ZXN0ICIkd2l0aF9ycGF0aF9saW5rIiA9IG5vCisJdGhlbgorCQlMT0NBTF9MREZMQUdTPQorCQlMT0NBTF9MREZMQUdTMj0KKwlmaQorZmkKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworQ0ZfSEVMUF9NRVNTQUdFKEZpbmUtVHVuaW5nIFlvdXIgQ29uZmlndXJhdGlvbjopCisKKyMjIyAgIHVzZSBvcHRpb24gLS1lbmFibGUtYnJva2VuLWxpbmtlciB0byBmb3JjZSBvbiB1c2Ugb2YgYnJva2VuLWxpbmtlciBzdXBwb3J0CitBQ19NU0dfQ0hFQ0tJTkcoaWYgeW91IHdhbnQgYnJva2VuLWxpbmtlciBzdXBwb3J0IGNvZGUpCitBQ19BUkdfRU5BQkxFKGJyb2tlbl9saW5rZXIsCisJWyAgLS1lbmFibGUtYnJva2VuX2xpbmtlciAgY29tcGlsZSB3aXRoIGJyb2tlbi1saW5rZXIgc3VwcG9ydCBjb2RlXSwKKwlbd2l0aF9icm9rZW5fbGlua2VyPSRlbmFibGV2YWxdLAorCVt3aXRoX2Jyb2tlbl9saW5rZXI9JHtCUk9LRU5fTElOS0VSOi1ub31dKQorQUNfTVNHX1JFU1VMVCgkd2l0aF9icm9rZW5fbGlua2VyKQorCitCUk9LRU5fTElOS0VSPTAKK2lmIHRlc3QgIiR3aXRoX2Jyb2tlbl9saW5rZXIiID0geWVzIDsgdGhlbgorCUFDX0RFRklORShCUk9LRU5fTElOS0VSKQorCUJST0tFTl9MSU5LRVI9MQorZWxpZiB0ZXN0ICIkREZUX0xXUl9NT0RFTCIgPSBzaGFyZWQgOyB0aGVuCisJY2FzZSAkY2ZfY3Zfc3lzdGVtX25hbWUgaW4KKwkoY3lnd2luKikKKwkJQUNfREVGSU5FKEJST0tFTl9MSU5LRVIpCisJCUJST0tFTl9MSU5LRVI9MQorCQlDRl9WRVJCT1NFKGN5Z3dpbiBsaW5rZXIgaXMgYnJva2VuIGFueXdheSkKKwkJOzsKKwllc2FjCitmaQorQUNfU1VCU1QoQlJPS0VOX0xJTktFUikKKworIyBDaGVjayB0byBkZWZpbmUgX1hPUEVOX1NPVVJDRSAiYXV0b21hdGljYWxseSIKK0NGX1hPUEVOX1NPVVJDRQorCitDRl9MQVJHRUZJTEUKKworIyMjIEVuYWJsZSBjb21waWxpbmctaW4gcmNzIGlkJ3MKK0FDX01TR19DSEVDS0lORyhpZiBSQ1MgaWRlbnRpZmllcnMgc2hvdWxkIGJlIGNvbXBpbGVkLWluKQorQUNfQVJHX1dJVEgocmNzLWlkcywKKwlbICAtLXdpdGgtcmNzLWlkcyAgICAgICAgICBjb21waWxlLWluIFJDUyBpZGVudGlmaWVyc10sCisJW3dpdGhfcmNzX2lkcz0kd2l0aHZhbF0sCisJW3dpdGhfcmNzX2lkcz1ub10pCitBQ19NU0dfUkVTVUxUKCR3aXRoX3Jjc19pZHMpCit0ZXN0ICIkd2l0aF9yY3NfaWRzIiA9IHllcyAmJiBBQ19ERUZJTkUoVVNFX1JDU19JRFMsMSxbRGVmaW5lIHRvIDEgaWYgUkNTIGlkZW50aWZpZXJzIHNob3VsZCBiZSBjb21waWxlZC1pbildKQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitDRl9IRUxQX01FU1NBR0UoRXh0ZW5zaW9uczopCisKKyMjIyBOb3RlIHRoYXQgc29tZSBmdW5jdGlvbnMgKHN1Y2ggYXMgY29uc3QpIGFyZSBub3JtYWxseSBkaXNhYmxlZCBhbnl3YXkuCitBQ19NU0dfQ0hFQ0tJTkcoaWYgeW91IHdhbnQgdG8gYnVpbGQgd2l0aCBmdW5jdGlvbiBleHRlbnNpb25zKQorQUNfQVJHX0VOQUJMRShleHQtZnVuY3MsCisJWyAgLS1kaXNhYmxlLWV4dC1mdW5jcyAgICAgZGlzYWJsZSBmdW5jdGlvbi1leHRlbnNpb25zXSwKKwlbd2l0aF9leHRfZnVuY3M9JGVuYWJsZXZhbF0sCisJW3dpdGhfZXh0X2Z1bmNzPXllc10pCitBQ19NU0dfUkVTVUxUKCR3aXRoX2V4dF9mdW5jcykKK2lmIHRlc3QgIiR3aXRoX2V4dF9mdW5jcyIgPSB5ZXMgOyB0aGVuCisJTkNVUlNFU19FWFRfRlVOQ1M9MQorCUFDX0RFRklORShIQVZFX1VTRV9ERUZBVUxUX0NPTE9SUywxLFtEZWZpbmUgdG8gMSBpZiB3ZSBoYXZlIHVzZV9kZWZhdWx0X2NvbG9ycyBmdW5jdGlvbl0pCisJQUNfREVGSU5FKE5DVVJTRVNfRVhUX0ZVTkNTLDEsW0RlZmluZSB0byAxIGlmIHdlIGhhdmUgbmN1cnNlcyBleHRlbmRlZCBmdW5jdGlvbnNdKQorZWxzZQorCU5DVVJTRVNfRVhUX0ZVTkNTPTAKK2ZpCitBQ19TVUJTVChOQ1VSU0VTX0VYVF9GVU5DUykKKworIyMjICAgdXNlIG9wdGlvbiAtLWVuYWJsZS1jb25zdCB0byB0dXJuIG9uIHVzZSBvZiBjb25zdCBiZXlvbmQgdGhhdCBpbiBYU0kuCitBQ19NU0dfQ0hFQ0tJTkcoZm9yIGV4dGVuZGVkIHVzZSBvZiBjb25zdCBrZXl3b3JkKQorQUNfQVJHX0VOQUJMRShjb25zdCwKKwlbICAtLWVuYWJsZS1jb25zdCAgICAgICAgICBjb21waWxlIHdpdGggZXh0cmEvbm9uLXN0YW5kYXJkIGNvbnN0XSwKKwlbd2l0aF9leHRfY29uc3Q9JGVuYWJsZXZhbF0sCisJW3dpdGhfZXh0X2NvbnN0PW5vXSkKK0FDX01TR19SRVNVTFQoJHdpdGhfZXh0X2NvbnN0KQorTkNVUlNFU19DT05TVD0nLypub3RoaW5nKi8nCitpZiB0ZXN0ICIkd2l0aF9leHRfY29uc3QiID0geWVzIDsgdGhlbgorCU5DVVJTRVNfQ09OU1Q9Y29uc3QKK2ZpCitBQ19TVUJTVChOQ1VSU0VTX0NPTlNUKQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRoZXNlIG9wdGlvbnMgYXJlIHJlbGF0aXZlbHkgc2FmZSB0byBleHBlcmltZW50IHdpdGguCitDRl9IRUxQX01FU1NBR0UoRGV2ZWxvcG1lbnQgQ29kZTopCitBQ19NU0dfQ0hFQ0tJTkcoaWYgeW91IHdhbnQgYWxsIGRldmVsb3BtZW50IGNvZGUpCitBQ19BUkdfV0lUSChkZXZlbG9wLAorCVsgIC0td2l0aG91dC1kZXZlbG9wICAgICAgIGRpc2FibGUgZGV2ZWxvcG1lbnQgb3B0aW9uc10sCisJW3dpdGhfZGV2ZWxvcD0kd2l0aHZhbF0sCisJW3dpdGhfZGV2ZWxvcD1ub10pCitBQ19NU0dfUkVTVUxUKCR3aXRoX2RldmVsb3ApCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGhlc2UgYXJlIGp1c3QgZXhwZXJpbWVudGFsLCBwcm9iYWJseSBzaG91bGQgbm90IGJlIGluIGEgcGFja2FnZToKK0NGX0hFTFBfTUVTU0FHRShFeHBlcmltZW50YWwgQ29kZTopCisKKyMgVGhpcyBpcyBzdGlsbCBleHBlcmltZW50YWwgKDIwMDgwMzI5KSwgYnV0IHNob3VsZCB1bHRpbWF0ZWx5IGJlIG1vdmVkIHRvCisjIHRoZSBzY3JpcHQtYmxvY2sgLS13aXRoLW5vcm1hbCwgZXRjLgorQ0ZfV0lUSF9QVEhSRUFECisKK0FDX01TR19DSEVDS0lORyhpZiB5b3Ugd2FudCB0byB1c2Ugd2Vhay1zeW1ib2xzIGZvciBwdGhyZWFkcykKK0FDX0FSR19FTkFCTEUod2Vhay1zeW1ib2xzLAorCVsgIC0tZW5hYmxlLXdlYWstc3ltYm9scyAgIGVuYWJsZSB3ZWFrLXN5bWJvbHMgZm9yIHB0aHJlYWRzXSwKKwlbdXNlX3dlYWtfc3ltYm9scz0kd2l0aHZhbF0sCisJW3VzZV93ZWFrX3N5bWJvbHM9bm9dKQorQUNfTVNHX1JFU1VMVCgkdXNlX3dlYWtfc3ltYm9scykKK2lmIHRlc3QgIiR1c2Vfd2Vha19zeW1ib2xzIiA9IHllcyA7IHRoZW4KKwlDRl9XRUFLX1NZTUJPTFMKK2Vsc2UKKwljZl9jdl93ZWFrX3N5bWJvbHM9bm8KK2ZpCisKK2lmIHRlc3QgJGNmX2N2X3dlYWtfc3ltYm9scyA9IHllcyA7IHRoZW4KKwlBQ19ERUZJTkUoVVNFX1dFQUtfU1lNQk9MUywxLFtEZWZpbmUgdG8gMSB0byBlbmFibGUgd2Vhay1zeW1ib2xzIGZvciBwdGhyZWFkc10pCitmaQorCitQVEhSRUFEPQoraWYgdGVzdCAiJHdpdGhfcHRocmVhZCIgPSAieWVzIiA7IHRoZW4KKwlBQ19ERUZJTkUoVVNFX1BUSFJFQURTLDEsW0RlZmluZSB0byAxIHRvIHVzZSB0aGUgcHRocmVhZHMgbGlicmFyeV0pCisJZW5hYmxlX3JlZW50cmFudD15ZXMKKwlpZiB0ZXN0ICRjZl9jdl93ZWFrX3N5bWJvbHMgPSB5ZXMgOyB0aGVuCisJCVBUSFJFQUQ9LWxwdGhyZWFkCisJZmkKK2ZpCitBQ19TVUJTVChQVEhSRUFEKQorCisjIE9wZW5TVVNFIGlzIGluc3RhbGxpbmcgbmN1cnNlczYsIHVzaW5nIHJlZW50cmFudCBvcHRpb24uCitBQ19DSEVDS19GVU5DKF9uY19UQUJTSVpFLFthc3N1bWVfcmVlbnRyYW50PXllc10sIFthc3N1bWVfcmVlbnRyYW50PW5vXSkKKworIyBSZWVudHJhbnQgY29kZSBoYXMgdG8gYmUgb3BhcXVlOyB0aGVyZSdzIGxpdHRsZSBhZHZhbnRhZ2UgdG8gbWFraW5nIG5jdXJzZXMKKyMgb3BhcXVlIG91dHNpZGUgb2YgdGhhdCwgc28gdGhlcmUgaXMgbm8gLS1lbmFibGUtb3BhcXVlIG9wdGlvbi4gIFdlIGNhbiB1c2UKKyMgdGhpcyBvcHRpb24gd2l0aG91dCAtLXdpdGgtcHRocmVhZHMsIGJ1dCB0aGlzIHdpbGwgYmUgYWx3YXlzIHNldCBmb3IKKyMgcHRocmVhZHMuCitBQ19NU0dfQ0hFQ0tJTkcoaWYgeW91IHdhbnQgZXhwZXJpbWVudGFsIHJlZW50cmFudCBjb2RlKQorQUNfQVJHX0VOQUJMRShyZWVudHJhbnQsCisJWyAgLS1lbmFibGUtcmVlbnRyYW50ICAgICAgY29tcGlsZSB3aXRoIGV4cGVyaW1lbnRhbCByZWVudHJhbnQgY29kZV0sCisJW3dpdGhfcmVlbnRyYW50PSRlbmFibGV2YWxdLAorCVt3aXRoX3JlZW50cmFudD0kYXNzdW1lX3JlZW50cmFudF0pCitBQ19NU0dfUkVTVUxUKCR3aXRoX3JlZW50cmFudCkKK2lmIHRlc3QgIiR3aXRoX3JlZW50cmFudCIgPSB5ZXMgOyB0aGVuCisJY2ZfY3ZfZW5hYmxlX3JlZW50cmFudD0xCisJaWYgdGVzdCAkY2ZfY3Zfd2Vha19zeW1ib2xzID0geWVzIDsgdGhlbgorCQlDRl9SRU1PVkVfTElCKExJQlMsJExJQlMscHRocmVhZCkKKwllbGlmIHRlc3QgIiRhc3N1bWVfcmVlbnRyYW50IiA9IG5vIDsgdGhlbgorCQlMSUJfU1VGRklYPSJ0JHtMSUJfU1VGRklYfSIKKwlmaQorCUFDX0RFRklORShVU0VfUkVFTlRSQU5ULDEsW0RlZmluZSB0byAxIHRvIGNvbXBpbGUgd2l0aCBleHBlcmltZW50YWwgcmVlbnRyYW50IGNvZGVdKQorZWxzZQorCWNmX2N2X2VuYWJsZV9yZWVudHJhbnQ9MAorZmkKK0FDX1NVQlNUKGNmX2N2X2VuYWJsZV9yZWVudHJhbnQpCisKKyMjIyBBbGxvdyB1c2luZyBhIGRpZmZlcmVudCB3cmFwLXByZWZpeAoraWYgdGVzdCAiJGNmX2N2X2VuYWJsZV9yZWVudHJhbnQiICE9IDAgfHwgdGVzdCAiJEJST0tFTl9MSU5LRVIiID0gMSA7IHRoZW4KKwlBQ19NU0dfQ0hFQ0tJTkcoZm9yIHByZWZpeCB1c2VkIHRvIHdyYXAgcHVibGljIHZhcmlhYmxlcykKKwlBQ19BUkdfV0lUSCh3cmFwLXByZWZpeCwKKwkJWyAgLS13aXRoLXdyYXAtcHJlZml4PVhYWCAgb3ZlcnJpZGUgcHJlZml4IHVzZWQgZm9yIHB1YmxpYyB2YXJpYWJsZXNdLAorCQlbTkNVUlNFU19XUkFQX1BSRUZJWD0kd2l0aHZhbF0sCisJCVtOQ1VSU0VTX1dSQVBfUFJFRklYPV9uY19dKQorCUFDX01TR19SRVNVTFQoJE5DVVJTRVNfV1JBUF9QUkVGSVgpCitlbHNlCisJTkNVUlNFU19XUkFQX1BSRUZJWD1fbmNfCitmaQorQUNfU1VCU1QoTkNVUlNFU19XUkFQX1BSRUZJWCkKK0FDX0RFRklORV9VTlFVT1RFRChOQ1VSU0VTX1dSQVBfUFJFRklYLCIkTkNVUlNFU19XUkFQX1BSRUZJWCIsW0RlZmluZSB0byBvdmVycmlkZSBfbmNfIG5jdXJzZXMgaW50ZXJuYWwgcHJlZml4XSkKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworQ0ZfSEVMUF9NRVNTQUdFKFRlc3RpbmcvZGV2ZWxvcG1lbnQgT3B0aW9uczopCisKKyMjIwl1c2Ugb3B0aW9uIC0tZGlzYWJsZS1lY2hvIHRvIHN1cHByZXNzIGZ1bGwgZGlzcGxheSBjb21waWxpbmcgY29tbWFuZHMKK0NGX0RJU0FCTEVfRUNITworCisjIyMJdXNlIG9wdGlvbiAtLWVuYWJsZS13YXJuaW5ncyB0byB0dXJuIG9uIGFsbCBnY2Mgd2FybmluZ3MKK0FDX01TR19DSEVDS0lORyhpZiB5b3Ugd2FudCB0byBzZWUgY29tcGlsZXIgd2FybmluZ3MpCitBQ19BUkdfRU5BQkxFKHdhcm5pbmdzLAorCVsgIC0tZW5hYmxlLXdhcm5pbmdzICAgICAgIGJ1aWxkOiB0dXJuIG9uIEdDQyBjb21waWxlciB3YXJuaW5nc10sCisJW3dpdGhfd2FybmluZ3M9JGVuYWJsZXZhbF0pCitBQ19NU0dfUkVTVUxUKCR3aXRoX3dhcm5pbmdzKQorCitpZiB0ZXN0ICJ4JHdpdGhfd2FybmluZ3MiID0gInh5ZXMiOyB0aGVuCisgCUNGX0FERF9BREFGTEFHUygtZ25hdGcpCisJQ0ZfR0NDX1dBUk5JTkdTKFduby11bmtub3duLXByYWdtYXMgV3N3aXRjaC1lbnVtKQorZmkKK0NGX0dDQ19BVFRSSUJVVEVTCisKKyMjIwl1c2Ugb3B0aW9uIC0tZW5hYmxlLWFzc2VydGlvbnMgdG8gdHVybiBvbiBnZW5lcmF0aW9uIG9mIGFzc2VydGlvbiBjb2RlCitBQ19NU0dfQ0hFQ0tJTkcoaWYgeW91IHdhbnQgdG8gZW5hYmxlIHJ1bnRpbWUgYXNzZXJ0aW9ucykKK0FDX0FSR19FTkFCTEUoYXNzZXJ0aW9ucywKKwlbICAtLWVuYWJsZS1hc3NlcnRpb25zICAgICB0ZXN0OiB0dXJuIG9uIGdlbmVyYXRpb24gb2YgYXNzZXJ0aW9uIGNvZGVdLAorCVt3aXRoX2Fzc2VydGlvbnM9JGVuYWJsZXZhbF0sCisJW3dpdGhfYXNzZXJ0aW9ucz1ub10pCitBQ19NU0dfUkVTVUxUKCR3aXRoX2Fzc2VydGlvbnMpCitpZiB0ZXN0IC1uICIkR0NDIgordGhlbgorCWlmIHRlc3QgIiR3aXRoX2Fzc2VydGlvbnMiID0gbm8KKwl0aGVuCisJCUNQUEZMQUdTPSIkQ1BQRkxBR1MgLUROREVCVUciCisJZWxzZQorCQlDRl9BRERfQURBRkxBR1MoLWduYXRhKQorCWZpCitmaQorCisjIyMJdXNlIG9wdGlvbiAtLWRpc2FibGUtbGVha3MgdG8gc3VwcHJlc3MgInBlcm1hbmVudCIgbGVha3MsIGZvciB0ZXN0aW5nCitBQ19ERUZJTkUoSEFWRV9OQ19BTExPQ19ILDEsW0RlZmluZSB0byAxIGlmIHdlIGhhdmUgbmNfYWxsb2MuaCBoZWFkZXJdKQorCisjIyMJdXNlIG9wdGlvbiAtLWVuYWJsZS1leHBhbmRlZCB0byBnZW5lcmF0ZSBjZXJ0YWluIG1hY3JvcyBhcyBmdW5jdGlvbnMKK0FDX0FSR19FTkFCTEUoZXhwYW5kZWQsCisJWyAgLS1lbmFibGUtZXhwYW5kZWQgICAgICAgdGVzdDogZ2VuZXJhdGUgZnVuY3Rpb25zIGZvciBjZXJ0YWluIG1hY3Jvc10sCisJW3Rlc3QgIiRlbmFibGV2YWwiID0geWVzICYmIEFDX0RFRklORShOQ1VSU0VTX0VYUEFOREVELDEsW0RlZmluZSB0byAxIGlmIG5jdXJzZXMgbWFjcm9zIHNob3VsZCBiZSBleHBhbmRlZCBhcyBmdW5jdGlvbnNdKV0pCisKKyMjIwl1c2Ugb3B0aW9uIC0tZGlzYWJsZS1tYWNyb3MgdG8gc3VwcHJlc3MgbWFjcm9zIGluIGZhdm9yIG9mIGZ1bmN0aW9ucworQUNfQVJHX0VOQUJMRShtYWNyb3MsCisJWyAgLS1kaXNhYmxlLW1hY3JvcyAgICAgICAgdGVzdDogdXNlIGZ1bmN0aW9ucyByYXRoZXIgdGhhbiBtYWNyb3NdLAorCVt0ZXN0ICIkZW5hYmxldmFsIiA9IG5vICYmIEFDX0RFRklORShOQ1VSU0VTX05PTUFDUk9TLDEsW0RlZmluZSB0byAxIGlmIG5jdXJzZXMgbWFjcm9zIHNob3VsZCBiZSBleHBhbmRlZCBhcyBmdW5jdGlvbnNdKV0pCisKKyMgTm9ybWFsbHkgd2Ugb25seSBhZGQgdHJhY2UoKSB0byB0aGUgZGVidWctbGlicmFyeS4gIEFsbG93IHRoaXMgdG8gYmUKKyMgZXh0ZW5kZWQgdG8gYWxsIG1vZGVscyBvZiB0aGUgbmN1cnNlcyBsaWJyYXJ5OgorY2ZfYWxsX3RyYWNlcz1ubworY2FzZSAiJENGTEFHUyAkQ1BQRkxBR1MiIGluCisoKi1EVFJBQ0UqKQorCWNmX2FsbF90cmFjZXM9eWVzCisJOzsKK2VzYWMKKworQUNfTVNHX0NIRUNLSU5HKHdoZXRoZXIgdG8gYWRkIHRyYWNlIGZlYXR1cmUgdG8gYWxsIG1vZGVscykKK0FDX0FSR19XSVRIKHRyYWNlLAorWyAgLS13aXRoLXRyYWNlICAgICAgICAgICAgdGVzdDogYWRkIHRyYWNlKCkgZnVuY3Rpb24gdG8gYWxsIG1vZGVscyBvZiBuY3Vyc2VzXSwKK1tjZl93aXRoX3RyYWNlPSR3aXRodmFsXSwKK1tjZl93aXRoX3RyYWNlPSRjZl9hbGxfdHJhY2VzXSkKK0FDX01TR19SRVNVTFQoJGNmX3dpdGhfdHJhY2UpCisKK2lmIHRlc3QgIiRjZl93aXRoX3RyYWNlIiA9IHllcyA7IHRoZW4KKwlBREFfVFJBQ0U9VFJVRQorCUNGX0FERF9DRkxBR1MoLURUUkFDRSkKK2Vsc2UKKwlBREFfVFJBQ0U9RkFMU0UKK2ZpCisKK0FDX1NVQlNUKEFEQV9UUkFDRSkKKworQ0ZfRElTQUJMRV9HTkFUX1BST0pFQ1RTCisKKyMjIwlDaGVja3MgZm9yIGxpYnJhcmllcy4KK2Nhc2UgJGNmX2N2X3N5c3RlbV9uYW1lIGluCisoKm1pbmd3MzIqKQorCTs7CisoKikKK0FDX0NIRUNLX0ZVTkMoZ2V0dGltZW9mZGF5LAorCUFDX0RFRklORShIQVZFX0dFVFRJTUVPRkRBWSksWworCitBQ19DSEVDS19MSUIoYnNkLCBnZXR0aW1lb2ZkYXksCisJQUNfREVGSU5FKEhBVkVfR0VUVElNRU9GREFZLDEsW0RlZmluZSB0byAxIGlmIHdlIGhhdmUgZ2V0dGltZW9mZGF5XSkKKwlMSUJTPSIkTElCUyAtbGJzZCIpXSlkbmwgQ0xJWDogYnplcm8sIHNlbGVjdCwgZ2V0dGltZW9mZGF5CisJOzsKK2VzYWMKKworIyMjCUNoZWNrcyBmb3IgaGVhZGVyIGZpbGVzLgorQUNfU1REQ19IRUFERVJTCitBQ19IRUFERVJfRElSRU5UCitBQ19IRUFERVJfVElNRQorCisjIyMJY2hlY2tzIGZvciBjb21waWxlciBjaGFyYWN0ZXJpc3RpY3MKK0FDX0xBTkdfQworQUNfQ19DT05TVAorCisjIyMJQ2hlY2tzIGZvciBleHRlcm5hbC1kYXRhCitDRl9MSU5LX0RBVEFPTkxZCisKKyMjIwlDaGVja3MgZm9yIGxpYnJhcnkgZnVuY3Rpb25zLgorQ0ZfTUtTVEVNUAorCitkbmwgV2UnbGwgZG8gb3VyIG93biAtZyBsaWJyYXJpZXMsIHVubGVzcyB0aGUgdXNlcidzIG92ZXJyaWRkZW4gdmlhICRDRkxBR1MKK2lmIHRlc3QgLXogIiRjZl91c2VyX0NGTEFHUyIgJiYgdGVzdCAiJHdpdGhfbm9fbGVha3MiID0gbm8gOyB0aGVuCisJQ0ZfU1RSSVBfR19PUFQoQ0ZMQUdTKQorCUNGX1NUUklQX0dfT1BUKENYWEZMQUdTKQorZmkKKworQ0ZfSEVMUF9NRVNTQUdFKEFkYTk1IEJpbmRpbmcgT3B0aW9uczopCitjZl93aXRoX2FkYT15ZXMKK2RubCBDaGVjayBmb3IgYXZhaWxhYmlsaXR5IG9mIEdOVSBBZGEgVHJhbnNsYXRvciAoR05BVCkuCitkbmwgQXQgdGhlIG1vbWVudCB3ZSBzdXBwb3J0IG5vIG90aGVyIEFkYTk1IGNvbXBpbGVyLgoraWYgdGVzdCAiJGNmX3dpdGhfYWRhIiAhPSAibm8iIDsgdGhlbgorCUNGX1BST0dfR05BVAorCWlmIHRlc3QJIiRjZl9jdl9wcm9nX2duYXRfY29ycmVjdCIgPSB5ZXM7IHRoZW4KKwkJQ0ZfRklYVVBfQURBRkxBR1MKKworCQlDRl9HTkFUUFJFUF9PUFRfVAorCisJCUNGX0dOQVRfR0VORVJJQ1MKKwkJQ0ZfR05BVF9TSUdJTlQKKwkJQ0ZfR05BVF9QUk9KRUNUUworCisJCUNGX1dJVEhfQURBX0NPTVBJTEVSCisKKwkJY2ZfYWRhX3BhY2thZ2U9dGVybWluYWxfaW50ZXJmYWNlCisJCUFDX1NVQlNUKGNmX2FkYV9wYWNrYWdlKQorCisJCUNGX1dJVEhfQURBX0lOQ0xVREUKKwkJQ0ZfV0lUSF9BREFfT0JKRUNUUworCQlDRl9XSVRIX0FEQV9TSEFSRURMSUIKKwllbHNlCisJCUFDX01TR19FUlJPUihObyB1c2FibGUgQWRhIGNvbXBpbGVyIGZvdW5kKQorCWZpCitlbHNlCisJQUNfTVNHX0VSUk9SKFRoZSBBZGEgY29tcGlsZXIgaXMgbmVlZGVkIGZvciB0aGlzIHBhY2thZ2UpCitmaQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIG5vdCBuZWVkZWQKK1RJTkZPX0xERkxBR1MyPQorQUNfU1VCU1QoVElORk9fTERGTEFHUzIpCitUSU5GT19MSUJTPQorQUNfU1VCU1QoVElORk9fTElCUykKKworIyMjIENvbnN0cnVjdCB0aGUgbGlzdCBvZiBpbmNsdWRlLWRpcmVjdG9yaWVzIHRvIGJlIGdlbmVyYXRlZAorQ0ZfSU5DTFVERV9ESVJTCitDRl9BREFfSU5DTFVERV9ESVJTCisKKyMjIyBCdWlsZCB1cCBwaWVjZXMgZm9yIG1ha2VmaWxlIHJ1bGVzCitBQ19NU0dfQ0hFQ0tJTkcoZGVmYXVsdCBsaWJyYXJ5IHN1ZmZpeCkKK0NGX0xJQl9UWVBFKCRERlRfTFdSX01PREVMLERGVF9BUkdfU1VGRklYKWRubAorQUNfU1VCU1QoREZUX0FSR19TVUZGSVgpZG5sIHRoZSBzdHJpbmcgdG8gYXBwZW5kIHRvICItbG5jdXJzZXMiICgiIikKK0FDX01TR19SRVNVTFQoJERGVF9BUkdfU1VGRklYKQorCitBQ19NU0dfQ0hFQ0tJTkcoZGVmYXVsdCBsaWJyYXJ5LWRlcGVuZGVuY3kgc3VmZml4KQorQ0ZfTElCX1NVRkZJWCgkREZUX0xXUl9NT0RFTCxERlRfTElCX1NVRkZJWCxERlRfREVQX1NVRkZJWClkbmwKK0FDX1NVQlNUKERGVF9ERVBfU1VGRklYKWRubCB0aGUgY29ycmVzcG9uZGluZyBsaWJyYXJ5LXN1ZmZpeCAoIi5hIikKK0FDX01TR19SRVNVTFQoJERGVF9ERVBfU1VGRklYKQorCitBQ19NU0dfQ0hFQ0tJTkcoZGVmYXVsdCBvYmplY3QgZGlyZWN0b3J5KQorQ0ZfT0JKX1NVQkRJUigkREZUX0xXUl9NT0RFTCxERlRfT0JKX1NVQkRJUilkbmwKK0FDX1NVQlNUKERGVF9PQkpfU1VCRElSKWRubCB0aGUgZGVmYXVsdCBvYmplY3QtZGlyZWN0b3J5ICgib2JqIikKK0FDX01TR19SRVNVTFQoJERGVF9PQkpfU1VCRElSKQorCisjIyMgU2V0IHVwIGxvdy1sZXZlbCB0ZXJtaW5mbyBkZXBlbmRlbmNpZXMgZm9yIG1ha2VmaWxlcy4KKworaWYgdGVzdCAiJERGVF9MV1JfTU9ERUwiID0gc2hhcmVkIDsgdGhlbgorCWNhc2UgJGNmX2N2X3N5c3RlbV9uYW1lIGluCisJKGN5Z3dpbiopCisJCSMgImxpYiIgZmlsZXMgaGF2ZSAiLmRsbC5hIiBzdWZmaXgsICJjeWciIGZpbGVzIGhhdmUgIi5kbGwiCisJCTs7CisJKG1zeXMqKQorCQkjICJsaWIiIGZpbGVzIGhhdmUgIi5kbGwuYSIgc3VmZml4LCAibXN5cy0iIGZpbGVzIGhhdmUgIi5kbGwiCisJCTs7CisJZXNhYworZmkKKworVVNFX0NGR19TVUZGSVg9JHtERlRfQVJHX1NVRkZJWH0KK0FDX1NVQlNUKFVTRV9DRkdfU1VGRklYKQorCisjIyMgQ29uc3RydWN0IHRoZSBsaXN0IG9mIHN1YmRpcmVjdG9yaWVzIGZvciB3aGljaCB3ZSdsbCBjdXN0b21pemUgbWFrZWZpbGVzCisjIyMgd2l0aCB0aGUgYXBwcm9wcmlhdGUgY29tcGlsZS1ydWxlcy4KKworU1VCX01BS0VGSUxFUz0iZ2VuL2FkYWN1cnNlcyR7VVNFX0FSR19TVUZGSVh9LWNvbmZpZzpnZW4vYWRhY3Vyc2VzLWNvbmZpZy5pbiIKKworQUNfREVGSU5FX1VOUVVPVEVEKE5DVVJTRVNfUEFUSFNFUCwnJFBBVEhfU0VQQVJBVE9SJyxbRGVmaW5lIHRvIG92ZXJyaWRlICc6JyBhcyB0aGUgbGlicmFyeSBwYXRoLXNlcGFyYXRvcl0pCisKKyMjIyBOb3cgdGhhdCB3ZSdyZSBkb25lIHJ1bm5pbmcgdGVzdHMsIGFkZCB0aGUgY29tcGlsZXItd2FybmluZ3MsIGlmIGFueQorQ0ZfQUREX0NGTEFHUygkRVhUUkFfQ0ZMQUdTKQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitURVNUX0FSRzI9CitBQ19TVUJTVChURVNUX0FSRzIpCisKK1RFU1RfTElCUzI9CitBQ19TVUJTVChURVNUX0xJQlMyKQorCitkbmwgZm9yIHNlcGFyYXRlIGJ1aWxkLCB0aGlzIGlzIGdvb2QgZW5vdWdoIGZvciAic2ggJCh0b3Bfc3JjZGlyKS9taXNjL3NobGliIgorTkNVUlNFU19TSExJQjI9InNoIC1jIgorQUNfU1VCU1QoTkNVUlNFU19TSExJQjIpCisKK0FEQV9TVUJESVJTPSJpbmNsdWRlIGdlbiBzcmMgZG9jIgoraWYgdGVzdCAieCRjZl93aXRoX3Rlc3RzIiAhPSAieG5vIiA7IHRoZW4KKwlBREFfU1VCRElSUz0iJEFEQV9TVUJESVJTIHNhbXBsZXMiCitmaQorZm9yIGNmX2RpciBpbiAkQURBX1NVQkRJUlMKK2RvCisJU1VCX01BS0VGSUxFUz0iJFNVQl9NQUtFRklMRVMgJGNmX2Rpci9NYWtlZmlsZSIKK2RvbmUKK0FDX1NVQlNUKEFEQV9TVUJESVJTKQorCitOQ1VSU0VTX1RSRUU9IiMiCitBQ19TVUJTVChOQ1VSU0VTX1RSRUUpCisKK0VYVEVSTkFMX1RSRUU9CitBQ19TVUJTVChFWFRFUk5BTF9UUkVFKQorCisjIG1hdGNoIGxheW91dCB1c2VkIGJ5IG1ha2UtdGFyLnNoCitBREFIVE1MX0RJUj0uLi9kb2MvYWRhCitBQ19TVUJTVChBREFIVE1MX0RJUikKKworQUNfT1VUUFVUKCBcCisJJFNVQl9NQUtFRklMRVMgXAorCWRvYy9hZGFjdXJzZXMke0RGVF9BUkdfU1VGRklYfS1jb25maWcuMTpkb2MvTUthZGFfY29uZmlnLmluIFwKKwlNYWtlZmlsZSxbCitpZiB0ZXN0IC16ICIkVVNFX09MRF9NQUtFUlVMRVMiIDsgdGhlbgorCSRBV0sgLWYgJHNyY2Rpci9tay0xc3QuYXdrIDwkc3JjZGlyL3NyYy9tb2R1bGVzID4+c3JjL01ha2VmaWxlCitmaQorXSxbCisjIyMgU3BlY2lhbCBpbml0aWFsaXphdGlvbiBjb21tYW5kcywgdXNlZCB0byBwYXNzIGluZm9ybWF0aW9uIGZyb20gdGhlCisjIyMgY29uZmlndXJhdGlvbi1ydW4gaW50byBjb25maWcuc3RhdHVzCisKK0FXSz0iJEFXSyIKK0RGVF9BUkdfU1VGRklYPSIkREZUX0FSR19TVUZGSVgiCitERlRfTFdSX01PREVMPSIkREZUX0xXUl9NT0RFTCIKK0xJQl9OQU1FPSIkTElCX05BTUUiCitMSUJfUFJFRklYPSIkTElCX1BSRUZJWCIKK0xJQl9TVUZGSVg9IiRMSUJfU1VGRklYIgorTE5fUz0iJExOX1MiCitOQ1VSU0VTX01BSk9SPSIkTkNVUlNFU19NQUpPUiIKK05DVVJTRVNfTUlOT1I9IiROQ1VSU0VTX01JTk9SIgorTkNVUlNFU19QQVRDSD0iJE5DVVJTRVNfUEFUQ0giCitVU0VfT0xEX01BS0VSVUxFUz0iJFVTRV9PTERfTUFLRVJVTEVTIgorY2ZfY3ZfYWJpX3ZlcnNpb249IiRjZl9jdl9hYmlfdmVyc2lvbiIKK2NmX2N2X3JlbF92ZXJzaW9uPSIkY2ZfY3ZfcmVsX3ZlcnNpb24iCitjZl9jdl9ybV9zb19sb2NzPSIkY2ZfY3Zfcm1fc29fbG9jcyIKK2NmX2N2X3NoYXJlZF9zb25hbWU9JyRjZl9jdl9zaGFyZWRfc29uYW1lJworY2ZfY3Zfc2hsaWJfdmVyc2lvbj0iJGNmX2N2X3NobGliX3ZlcnNpb24iCitjZl9jdl9zaGxpYl92ZXJzaW9uX2luZml4PSIkY2ZfY3Zfc2hsaWJfdmVyc2lvbl9pbmZpeCIKK2NmX2N2X3N5c3RlbV9uYW1lPSIkY2ZfY3Zfc3lzdGVtX25hbWUiCitob3N0PSIkaG9zdCIKK3RhcmdldD0iJHRhcmdldCIKKworXSxjYXQpZG5sCiske01BS0U6LW1ha2V9IHByZWluc3RhbGwKZGlmZiAtLWdpdCBhL0FkYTk1L2RvYy9NYWtlZmlsZS5pbiBiL0FkYTk1L2RvYy9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTczODI3Ci0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvZG9jL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsODIgQEAKKyMgJElkOiBNYWtlZmlsZS5pbix2IDEuNCAyMDE1LzA4LzA1IDIzOjE1OjQxIHRvbSBFeHAgJAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMjAxMS0yMDEyLDIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiAgIworIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSAgICAjCisjIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvICMKKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSAgIworIyBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gIworIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgIworIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgICAjCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMICAgICMKKyMgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICAgICAgIworIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAgICAjCisjIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgICAgICAgICMKKyMgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgICMKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgIworIyB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgICAgICAgICAjCisjIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkKKyMKKyMgTWFrZWZpbGUgZm9yIEFkYUN1cnNlcyBtYW51YWwgcGFnZXMuCisKK1NIRUxMCQk9IEBTSEVMTEAKK1ZQQVRICQk9IEBzcmNkaXJACisKK0RFU1RESVIJCT0gQERFU1RESVJACitzcmNkaXIJCT0gQHNyY2RpckAKK3ByZWZpeAkJPSBAcHJlZml4QAorZXhlY19wcmVmaXgJPSBAZXhlY19wcmVmaXhACitkYXRhcm9vdGRpcgk9IEBkYXRhcm9vdGRpckAKK2RhdGFkaXIJCT0gQGRhdGFkaXJACittYW5kaXIJCT0gQG1hbmRpckAKKworSU5TVEFMTAkJPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQQk9IEBJTlNUQUxMX0RBVEFACisKK0RGVF9BUkdfU1VGRklYCT0gQERGVF9BUkdfU1VGRklYQAorCitUSElTCQk9IEFkYUN1cnNlcworRE9DRElSCQk9ICQoREVTVERJUikkKGRhdGFkaXIpL2RvYy8kKFRISVMpCitNQU5ESVIJCT0gJChERVNURElSKSQobWFuZGlyKS9tYW4xCisKK2FsbCBcCitzb3VyY2VzIFwKK2RlcGVuZCBcCit0YWdzIDoKKworJChET0NESVIpIFwKKyQoTUFORElSKSA6CisJbWtkaXIgLXAgJEAKKworaW5zdGFsbCBpbnN0YWxsLm1hbiA6ICQoTUFORElSKQorCSQoSU5TVEFMTF9EQVRBKSBhZGFjdXJzZXMke0RGVF9BUkdfU1VGRklYfS1jb25maWcuMSAkKE1BTkRJUikKKwordW5pbnN0YWxsIHVuaW5zdGFsbC5tYW4gOgorCS1ybSAtZiAkKE1BTkRJUikvYWRhY3Vyc2VzJHtERlRfQVJHX1NVRkZJWH0tY29uZmlnLjEKKworIyBIVE1MIGRvY3VtZW50YXRpb24gaXMgb3B0aW9uYWwsIHVzdWFsbHkgaW4gYSBzZXBhcmF0ZSBwYWNrYWdlLgoraW5zdGFsbC5odG1sIDogJChET0NESVIpCisJY2QgJChzcmNkaXIpICYmIHRhciAtY2YgLSAqLmh0bSogYWRhIHwgdGFyIC1DICQoRE9DRElSKSAteGYgLQorCit1bmluc3RhbGwuaHRtbCA6CisJLXJtIC1yZiAkKERPQ0RJUikKKworbW9zdGx5Y2xlYW4gOgorCS1ybSAtZiBjb3JlIHRhZ3MgVEFHUyAqfiAqLmJhayAqLmxuICouYXRhYyB0cmFjZQorCitjbGVhbjoJbW9zdGx5Y2xlYW4KKworZGlzdGNsZWFuIHJlYWxjbGVhbjogY2xlYW4KKwktcm0gLWYgTWFrZWZpbGUgKi1jb25maWcuMQpkaWZmIC0tZ2l0IGEvQWRhOTUvZ2VuL01ha2VmaWxlLmluIGIvQWRhOTUvZ2VuL01ha2VmaWxlLmluCmluZGV4IGI3ZTNiZWMuLjQ4ZGYzMTggMTAwNjQ0Ci0tLSBhL0FkYTk1L2dlbi9NYWtlZmlsZS5pbgorKysgYi9BZGE5NS9nZW4vTWFrZWZpbGUuaW4KQEAgLTEsNSArMSw1IEBACiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgIworIyBDb3B5cmlnaHQgKGMpIDE5OTgtMjAxNCwyMDE1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAjCiAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKICMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAgIwogIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCAjCkBAIC0yOCwxNCArMjgsMTUgQEAKICMKICMgIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgogIwotIyAgJElkOiBNYWtlZmlsZS5pbix2IDEuNjEgMjAwOC8xMC8wNCAyMjo1ODozMSB0b20gRXhwICQKKyMgICRJZDogTWFrZWZpbGUuaW4sdiAxLjg1IDIwMTUvMDgvMDUgMjM6MDY6MzEgdG9tIEV4cCAkCiAjCiAuU1VGRklYRVM6CiAKLVNIRUxMCQk9IC9iaW4vc2gKK1NIRUxMCQk9IEBTSEVMTEAKK1ZQQVRICQk9IEBzcmNkaXJACiBUSElTCQk9IE1ha2VmaWxlCiAKLXgJCT0gQFBST0dfRVhUQAoreAkJPSBARVhFRVhUQAogCiB0b3Bfc3JjZGlyCT0gQHRvcF9zcmNkaXJACiBERVNURElSCQk9IEBERVNURElSQApAQCAtNDMsOSArNDQsNyBAQAogcHJlZml4CQk9IEBwcmVmaXhACiBleGVjX3ByZWZpeAk9IEBleGVjX3ByZWZpeEAKIGJpbmRpcgkJPSBAYmluZGlyQAotCi1BREFfSU5DTFVERQk9ICQoREVTVERJUilAQURBX0lOQ0xVREVACi1BREFfT0JKRUNUUwk9ICQoREVTVERJUilAQURBX09CSkVDVFNACitpbmNsdWRlZGlyCT0gQGluY2x1ZGVkaXJACiAKIElOU1RBTEwJCT0gQElOU1RBTExACiBJTlNUQUxMX1BST0cJPSBASU5TVEFMTF9QUk9HUkFNQApAQCAtNTYsMTIgKzU1LDE1IEBACiAKIENDCQk9IEBDQ0AKIEhPU1RfQ0MJCT0gQEJVSUxEX0NDQAotQ0ZMQUdTCQk9IEBDRkxBR1NACiAKLUNQUEZMQUdTCT0gQEFDUFBGTEFHU0AgXAorQ0ZMQUdTCQk9IEBDRkxBR1NACitIT1NUX0NGTEFHUwk9IEBCVUlMRF9DRkxBR1NACisKK0NQUEZMQUdTCT0gQENQUEZMQUdTQAorSE9TVF9DUFBGTEFHUwk9IEBBQ1BQRkxBR1NAIEBCVUlMRF9DUFBGTEFHU0AgXAogCQkgIC1ESEFWRV9DT05GSUdfSCAtSSQoc3JjZGlyKQogCi1DQ0ZMQUdTCQk9ICQoQ1BQRkxBR1MpICQoQ0ZMQUdTKQorQ0NGTEFHUwkJPSAkKEhPU1RfQ1BQRkxBR1MpICQoSE9TVF9DRkxBR1MpCiBDRkxBR1NfTk9STUFMCT0gJChDQ0ZMQUdTKQogQ0ZMQUdTX0RFQlVHCT0gJChDQ0ZMQUdTKSBAQ0NfR19PUFRAIC1EVFJBQ0UKIENGTEFHU19QUk9GSUxFCT0gJChDQ0ZMQUdTKSAtcGcKQEAgLTc0LDIwICs3NiwzMiBAQAogTE9DQUxfTElCRElSCT0gQHRvcF9idWlsZGRpckAvbGliCiAKIExJTksJCT0gJChIT1NUX0NDKQotTERfRkxBR1MJPSBATERfTU9ERUxAICQoTE9DQUxfTElCUykgQExERkxBR1NAIEBMSUJTQCBATE9DQUxfTERGTEFHUzJAICQoTERGTEFHUykgQFRJTkZPX0FSR1MyQAorTERGTEFHUwkJPSBATERGTEFHU0AKK0xJQlMJCT0gQExJQlNACisKKyMgRm9yIHRoZSB3aWRlLWNoYXJhY3RlciBjb25maWd1cmF0aW9uIGNvbWJpbmVkIHdpdGggYnJva2VuX2xpbmtlciwgd2UgbmVlZAorIyBhZGRyZXNzZXMgb2YgQUNTX3h4eCBjb25zdGFudHMsIHdoaWNoIHJlcXVpcmVzIGxpbmtpbmcgd2l0aCB0aGUgbmV3bHkgYnVpbHQKKyMgbmN1cnNlcyBsaWJyYXJ5LiAgSWYgY3Jvc3MtY29tcGlsaW5nLCB0aGUgZGV2ZWxvcGVyIGhhcyB0byBmaWxsIGluIGEgd29ya2FibGUKKyMgbmF0aXZlIGxpYnJhcnkgZm9yIHRoaXMgcHVycG9zZS4KK05BVElWRV9MREZMQUdTCT0gQExEX01PREVMQCAkKExPQ0FMX0xJQlMpIEBUSU5GT19MREZMQUdTMkAgJChMREZMQUdTKSBATElCU0AgQExPQ0FMX0xERkxBR1MyQCAkKExERkxBR1MpIEBUSU5GT19MSUJTQAorQ1JPU1NfTERGTEFHUwk9IEBCVUlMRF9MREZMQUdTQCBAQlVJTERfTElCU0AKKworQUNUVUFMX0xERkxBR1MJPSBAQURBR0VOX0xERkxBR1NACiAKIFJBTkxJQgkJPSBAUkFOTElCQAogCiBNNAkJPSBtNAogTTRGTEFHUwkJPSAtRE5DVVJTRVNfRVhUX0ZVTkNTPUBOQ1VSU0VTX0VYVF9GVU5DU0AKIAotQURBQ1VSU0VTX0NPTkZJRyA9IGFkYWN1cnNlcy1jb25maWcKK0FEQUNVUlNFU19DT05GSUcgPSBhZGFjdXJzZXNAVVNFX0NGR19TVUZGSVhALWNvbmZpZwogCi1XUkFQUEVSCQk9IHNoICQodG9wX3NyY2RpcikvbWlzYy9zaGxpYgotR0VORVJBVEUJPSAuL2dlbiR4ICdAREZUX0FSR19TVUZGSVhAJworV1JBUFBFUgkJPSBATkNVUlNFU19TSExJQjJACisKK1BST0dfR0VORVJBVEUJPSAuL2dlbmVyYXRlJHgKK0dFTkVSQVRFCT0gJChQUk9HX0dFTkVSQVRFKSAnQERGVF9BUkdfU1VGRklYQCcKIERFTF9BREFNT0RFCT0gc2VkIC1lICcvXlwtXC1cIFwgXC1cKlwtXCBhZGFcIFwtXCpcLS4qL2QnCiAKLUdOQVRIVE1MCT0gYHR5cGUgLXAgZ25hdGh0bWwgfHwgdHlwZSAtcCBnbmF0aHRtbC5wbGAKK0dOQVRIVE1MCT0gYHR5cGUgLXAgZ25hdGh0bWwgfHwgdHlwZSAtcCBnbmF0aHRtbC5wbCAyPi9kZXYvbnVsbGAKIEdOQVRIUCAgICAgICAgICA9IHd3dy5nbmF0LmNvbQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpAQCAtOTYsMzkgKzExMCw2IEBACiAKIEFEQV9TUkNESVIJPSAuLi9zcmMKIAotR0VOX0ZJTEVTMCAgICAgID0gQmFzZV9EZWZzCi0KLUdFTl9GSUxFUzEgICAgICA9IEFDU19NYXAgICAgICAgICAgICAgICAgICAgICAgCQlcCi0JCSAgQUNfUmVwICAgICAgICAgICAgICAgICAgICAgICAJCVwKLQkJICBCYXNlX0RlZnMJCQkgICAgICAgIFwKLQkJICBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldF9SZXAgIAkJXAotCQkgIENvbG9yX0RlZnMgICAgICAgICAgICAgICAgICAgCQlcCi0JCSAgS2V5X0RlZmluaXRpb25zICAgICAgICAgICAgICAJCVwKLQkJICBMaW5rZXJfT3B0aW9ucyAgICAgICAgICAgICAgIAkJXAotCQkgIE9sZF9LZXlzICAgICAgICAgICAgICAgICAgICAgCQlcCi0JCSAgUHVibGljX1ZhcmlhYmxlcyAgICAgICAgICAgICAgICAgICAgICBcCi0JCSAgVHJhY2VfRGVmcwkJCQlcCi0JCSAgVmVyc2lvbl9JbmZvCQkJCVwKLQkJICBXaW5kb3dfT2Zmc2V0cwotCi1HRU5fRklMRVMyICAgICAgPSBNZW51X09wdF9SZXAgICAgICAgIAkJICAgIAlcCi0JCSAgTWVudV9CYXNlX0RlZnMgICAgICAgICAgICAgICAJCVwKLQkJICBNZW51X0xpbmtlcl9PcHRpb25zICAgICAgICAgIAkJXAotCQkgIEl0ZW1fUmVwCi0KLUdFTl9GSUxFUzMgICAgICA9IEZvcm1fT3B0X1JlcCAgICAgICAgICAgICAgICAgCQlcCi0JCSAgRm9ybV9CYXNlX0RlZnMgICAgICAgICAgICAgICAJCVwKLQkJICBGb3JtX0xpbmtlcl9PcHRpb25zICAgICAgICAgIAkJXAotCQkgIEZpZWxkX1JlcAotCi1HRU5fRklMRVM0ICAgICAgPSBNb3VzZV9CYXNlX0RlZnMgICAgICAgICAgICAgIAkJXAotCQkgIE1vdXNlX0V2ZW50X1JlcAkJCVwKLQkJICBNb3VzZV9FdmVudHMgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJICBQYW5lbF9MaW5rZXJfT3B0aW9ucwotCi1HRU5fRklMRVM1CT0gQ2h0eXBlX0RlZiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCSAgRXRpX0RlZnMKLQogR0VOX1RBUkdFVFMgICAgID0gJChBREFfU1JDRElSKS8kKEFCQVNFKS5hZHMgICAgICAgICAJCQlcCiAJCSAgJChBREFfU1JDRElSKS8kKEFCQVNFKS5hZGIgICAgICAgICAJCQlcCiAJICAgICAgICAgICQoQURBX1NSQ0RJUikvJChBQkFTRSktYXV4LmFkcyAgIAkJCVwKQEAgLTE0Miw3ICsxMjMsOCBAQAogCSAgICAgICAgICAkKEFEQV9TUkNESVIpLyQoQUJBU0UpLWZvcm1zLWZvcm1fdXNlcl9kYXRhLmFkcwlcCiAJICAgICAgICAgICQoQURBX1NSQ0RJUikvJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMuYWRzCQlcCiAJICAgICAgICAgICQoQURBX1NSQ0RJUikvJChBQkFTRSktZm9ybXMtZmllbGRfdXNlcl9kYXRhLmFkcwlcCi0JICAgICAgICAgICQoQURBX1NSQ0RJUikvJChBQkFTRSktcGFuZWxzLXVzZXJfZGF0YS5hZHMKKwkgICAgICAgICAgJChBREFfU1JDRElSKS8kKEFCQVNFKS1wYW5lbHMtdXNlcl9kYXRhLmFkcyAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgJChBREFfU1JDRElSKS8kKEFCQVNFKV9jb25zdGFudHMuYWRzCiAKIEdFTl9TUkMJCT0gJChzcmNkaXIpLyQoQUJBU0UpLmFkcy5tNAkJCQlcCiAJCSAgJChzcmNkaXIpLyQoQUJBU0UpLmFkYi5tNAkJCQlcCkBAIC0xNjYsMTY2ICsxNDgsNjQgQEAKIAogc291cmNlczoKIAotJChBREFfSU5DTFVERSkgXAotJChBREFfT0JKRUNUUykgOgotCXNoICQodG9wX3NyY2RpcikvbWtkaXJzLnNoICRACiskKERFU1RESVIpJChiaW5kaXIpIDoKKwlta2RpciAtcCAkQAogCiBpbnN0YWxsIFwKLWluc3RhbGwubGlicyA6OiAkKEFEQV9JTkNMVURFKQotCUBlY2hvIGluc3RhbGxpbmcgcGFja2FnZSAkKEFMSUIpIGluICQoQURBX0lOQ0xVREUpCi0JQCQodG9wX3NyY2RpcikvdGFyLWNvcHkuc2ggJyQoQUxJQikqLmFkPycgJChBREFfU1JDRElSKSAkKEFEQV9JTkNMVURFKQotCUAkKHRvcF9zcmNkaXIpL3Rhci1jb3B5LnNoICckKEFMSUIpWy0uXSouYWQ/JyAkKEFEQV9TUkNESVIpICQoQURBX0lOQ0xVREUpCi0JQHRlc3QgJChzcmNkaXIpICE9IC4vICYmICQodG9wX3NyY2RpcikvdGFyLWNvcHkuc2ggJyQoQUxJQikqLmFkPycgJChzcmNkaXIpLy4uL3NyYyAkKEFEQV9JTkNMVURFKQotCUB0ZXN0ICQoc3JjZGlyKSAhPSAuLyAmJiAkKHRvcF9zcmNkaXIpL3Rhci1jb3B5LnNoICckKEFMSUIpWy0uXSouYWQ/JyAkKHNyY2RpcikvLi4vc3JjICQoQURBX0lOQ0xVREUpCi0KLWluc3RhbGwgXAotaW5zdGFsbC5saWJzIDo6ICQoQURBX09CSkVDVFMpCi0JQGVjaG8gaW5zdGFsbGluZyBwYWNrYWdlICQoQUxJQikgaW4gJChBREFfT0JKRUNUUykKLQlALWNobW9kIGEtd3ggJChBREFfU1JDRElSKS8qLmFsaQotCUAkKHRvcF9zcmNkaXIpL3Rhci1jb3B5LnNoICckKEFMSUIpKi5hbGknICQoQURBX1NSQ0RJUikgJChBREFfT0JKRUNUUykKLQlAJCh0b3Bfc3JjZGlyKS90YXItY29weS5zaCAnJChBTElCKVstLl0qLmFsaScgJChBREFfU1JDRElSKSAkKEFEQV9PQkpFQ1RTKQotCUAtY2htb2QgdSt4ICQoQURBX1NSQ0RJUikvKi5hbGkKLQotaW5zdGFsbCBcCi1pbnN0YWxsLmxpYnMgOjogJChERVNURElSKSQoYmluZGlyKSBhZGFjdXJzZXMtY29uZmlnCi0JJChJTlNUQUxMX1BST0cpIGFkYWN1cnNlcy1jb25maWcgJChERVNURElSKSQoYmluZGlyKS8kKEFEQUNVUlNFU19DT05GSUcpCi0KLXVuaW5zdGFsbCBcCi11bmluc3RhbGwubGlicyA6OgotCUBlY2hvIHJlbW92aW5nIHBhY2thZ2UgJChBTElCKSBmcm9tICQoQURBX0lOQ0xVREUpCi0JLUBjZCAkKEFEQV9JTkNMVURFKSAmJiBybSAtZiAkKEFMSUIpWy0uXSoKLQotdW5pbnN0YWxsIFwKLXVuaW5zdGFsbC5saWJzIDo6Ci0JQGVjaG8gcmVtb3ZpbmcgcGFja2FnZSAkKEFMSUIpIGZyb20gJChBREFfT0JKRUNUUykKLQktQGNkICQoQURBX09CSkVDVFMpICYmIHJtIC1mICQoQUxJQilbLS5dKgoraW5zdGFsbC5saWJzIDo6ICQoREVTVERJUikkKGJpbmRpcikgJChBREFDVVJTRVNfQ09ORklHKQorCSQoSU5TVEFMTF9QUk9HKSAkKEFEQUNVUlNFU19DT05GSUcpICQoREVTVERJUikkKGJpbmRpcikvJChBREFDVVJTRVNfQ09ORklHKQogCiB1bmluc3RhbGwgXAogdW5pbnN0YWxsLmxpYnMgOjoKIAktcm0gLWYgJChERVNURElSKSQoYmluZGlyKS8kKEFEQUNVUlNFU19DT05GSUcpCiAKLWdlbiR4OglnZW4ubwotCUBFQ0hPX0xJTktAICQoTElOSykgJChDRkxBR1NfTk9STUFMKSBnZW4ubyAkKExEX0ZMQUdTKSAtbyAkQAorJChQUk9HX0dFTkVSQVRFKTogIGdlbi5vCisJQEVDSE9fTERAICQoTElOSykgJChDRkxBR1NfTk9STUFMKSBnZW4ubyAkKEFDVFVBTF9MREZMQUdTKSAtbyAkQAogCiBnZW4ubzoJJChzcmNkaXIpL2dlbi5jCiAJJChIT1NUX0NDKSAkKENGTEFHU19OT1JNQUwpIC1jIC1vICRAICQoc3JjZGlyKS9nZW4uYwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLUNoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0X1JlcDogZ2VuJHgKLQkkKFdSQVBQRVIpICIkKEdFTkVSQVRFKSBCIEEiID4kQAogCi1CYXNlX0RlZnM6IGdlbiR4Ci0JJChXUkFQUEVSKSAiJChHRU5FUkFURSkgQiBCIiA+JEAKLQotQ29sb3JfRGVmczogZ2VuJHgKLQkkKFdSQVBQRVIpICIkKEdFTkVSQVRFKSBCIEMiID4kQAotCi1XaW5kb3dfT2Zmc2V0czogZ2VuJHgKLQkkKFdSQVBQRVIpICIkKEdFTkVSQVRFKSBCIEQiID4kQAotCi1LZXlfRGVmaW5pdGlvbnM6IGdlbiR4Ci0JJChXUkFQUEVSKSAiJChHRU5FUkFURSkgQiBLIiA+JEAKLQotTGlua2VyX09wdGlvbnM6IGdlbiR4Ci0JJChXUkFQUEVSKSAiJChHRU5FUkFURSkgQiBMIiA+JEAKLQotQUNTX01hcDogZ2VuJHgKLQkkKFdSQVBQRVIpICIkKEdFTkVSQVRFKSBCIE0iID4kQAotCi1PbGRfS2V5czogZ2VuJHgKLQkkKFdSQVBQRVIpICIkKEdFTkVSQVRFKSBCIE8iID4kQAotCi1QdWJsaWNfVmFyaWFibGVzOiBnZW4keAotCSQoV1JBUFBFUikgIiQoR0VORVJBVEUpIEIgUCIgPiRACi0KLUFDX1JlcDogZ2VuJHgKLQkkKFdSQVBQRVIpICIkKEdFTkVSQVRFKSBCIFIiID4kQAotCi1WZXJzaW9uX0luZm86IGdlbiR4Ci0JJChXUkFQUEVSKSAiJChHRU5FUkFURSkgQiBWIiA+JEAKLQotVHJhY2VfRGVmczogZ2VuJHgKLQkkKFdSQVBQRVIpICIkKEdFTkVSQVRFKSBCIFQiID4kQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLU1lbnVfT3B0X1JlcDogZ2VuJHgKLQkkKFdSQVBQRVIpICIkKEdFTkVSQVRFKSBNIFIiID4kQAotCi1NZW51X0Jhc2VfRGVmczogZ2VuJHgKLQkkKFdSQVBQRVIpICIkKEdFTkVSQVRFKSBNIEIiID4kQAotCi1NZW51X0xpbmtlcl9PcHRpb25zOiBnZW4keAotCSQoV1JBUFBFUikgIiQoR0VORVJBVEUpIE0gTCIgPiRACi0KLUl0ZW1fUmVwOiBnZW4keAotCSQoV1JBUFBFUikgIiQoR0VORVJBVEUpIE0gSSIgPiRACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotRm9ybV9PcHRfUmVwOiBnZW4keAotCSQoV1JBUFBFUikgIiQoR0VORVJBVEUpIEYgUiIgPiRACi0KLUZvcm1fQmFzZV9EZWZzOiBnZW4keAotCSQoV1JBUFBFUikgIiQoR0VORVJBVEUpIEYgQiIgPiRACi0KLUZvcm1fTGlua2VyX09wdGlvbnM6IGdlbiR4Ci0JJChXUkFQUEVSKSAiJChHRU5FUkFURSkgRiBMIiA+JEAKLQotRmllbGRfUmVwOiBnZW4keAotCSQoV1JBUFBFUikgIiQoR0VORVJBVEUpIEYgSSIgPiRACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotTW91c2VfQmFzZV9EZWZzOiBnZW4keAotCSQoV1JBUFBFUikgIiQoR0VORVJBVEUpIFAgQiIgPiRACi0KLU1vdXNlX0V2ZW50X1JlcDogZ2VuJHgKLQkkKFdSQVBQRVIpICIkKEdFTkVSQVRFKSBQIE0iID4kQAotCi1Nb3VzZV9FdmVudHM6IGdlbiR4Ci0JJChXUkFQUEVSKSAiJChHRU5FUkFURSkgQiBFIiA+JEAKLQotUGFuZWxfTGlua2VyX09wdGlvbnM6IGdlbiR4Ci0JJChXUkFQUEVSKSAiJChHRU5FUkFURSkgUCBMIiA+JEAKLQotQ2h0eXBlX0RlZjogZ2VuJHgKLQkkKFdSQVBQRVIpICIkKEdFTkVSQVRFKSBFIEMiID4kQAotCi1FdGlfRGVmczogZ2VuJHgKLQkkKFdSQVBQRVIpICIkKEdFTkVSQVRFKSBFIEUiID4kQAorJChBREFfU1JDRElSKS8kKEFCQVNFKV9jb25zdGFudHMuYWRzOiAkKFBST0dfR0VORVJBVEUpCisJJChXUkFQUEVSKSAiJChHRU5FUkFURSkiID4kQAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICQoQURBX1NSQ0RJUikvJChBQkFTRSkuYWRzOiAJJChzcmNkaXIpLyQoQUJBU0UpLmFkcy5tNCBcCi0JCQkJJChHRU5fRklMRVMxKSAkKHNyY2Rpcikvbm9ybWFsLm00CisJCQkJJChzcmNkaXIpL25vcm1hbC5tNAogCSQoTTQpICQoTTRGTEFHUykgLURNNE1BQ1JPPSQoc3JjZGlyKS9ub3JtYWwubTQgXAogCSQoc3JjZGlyKS8kKEFCQVNFKS5hZHMubTQgfFwKIAkkKERFTF9BREFNT0RFKSA+JEAKIAogJChBREFfU1JDRElSKS8kKEFCQVNFKS5hZGI6IAkkKHNyY2RpcikvJChBQkFTRSkuYWRiLm00IFwKLQkJCQkkKEdFTl9GSUxFUzEpICQoc3JjZGlyKS9ub3JtYWwubTQKKwkJCQkkKHNyY2Rpcikvbm9ybWFsLm00CiAJJChNNCkgJChNNEZMQUdTKSAtRE00TUFDUk89JChzcmNkaXIpL25vcm1hbC5tNCBcCiAJJChzcmNkaXIpLyQoQUJBU0UpLmFkYi5tNCB8XAogCSQoREVMX0FEQU1PREUpID4kQAogCiAkKEFEQV9TUkNESVIpLyQoQUJBU0UpLWF1eC5hZHM6ICQoc3JjZGlyKS8kKEFCQVNFKS1hdXguYWRzLm00IFwKLQkJCQkkKEdFTl9GSUxFUzUpICQoc3JjZGlyKS9ub3JtYWwubTQKKwkJCQkkKHNyY2Rpcikvbm9ybWFsLm00CiAJJChNNCkgJChNNEZMQUdTKSAtRE00TUFDUk89JChzcmNkaXIpL25vcm1hbC5tNCBcCiAJJChzcmNkaXIpLyQoQUJBU0UpLWF1eC5hZHMubTQgfFwKIAkkKERFTF9BREFNT0RFKSA+JEAKIAogJChBREFfU1JDRElSKS8kKEFCQVNFKS10cmFjZS5hZHM6ICQoc3JjZGlyKS8kKEFCQVNFKS10cmFjZS5hZHMubTQgXAotCQkJCSQoR0VOX0ZJTEVTNSkgJChzcmNkaXIpL25vcm1hbC5tNAorCQkJCSAgJChzcmNkaXIpL25vcm1hbC5tNAogCSQoTTQpICQoTTRGTEFHUykgLURNNE1BQ1JPPSQoc3JjZGlyKS9ub3JtYWwubTQgXAogCSQoc3JjZGlyKS8kKEFCQVNFKS10cmFjZS5hZHMubTQgfFwKIAkkKERFTF9BREFNT0RFKSA+JEAKIAogJChBREFfU1JDRElSKS8kKEFCQVNFKS1tZW51cy5hZHM6ICQoc3JjZGlyKS8kKEFCQVNFKS1tZW51cy5hZHMubTQgXAotCQkJCSAgJChHRU5fRklMRVMyKSAkKHNyY2Rpcikvbm9ybWFsLm00CisJCQkJICAkKHNyY2Rpcikvbm9ybWFsLm00CiAJJChNNCkgJChNNEZMQUdTKSAtRE00TUFDUk89JChzcmNkaXIpL25vcm1hbC5tNCBcCiAJJChzcmNkaXIpLyQoQUJBU0UpLW1lbnVzLmFkcy5tNCB8XAogCSQoREVMX0FEQU1PREUpID4kQAogCiAkKEFEQV9TUkNESVIpLyQoQUJBU0UpLWZvcm1zLmFkczogJChzcmNkaXIpLyQoQUJBU0UpLWZvcm1zLmFkcy5tNCBcCi0JCQkJICAkKEdFTl9GSUxFUzMpICQoc3JjZGlyKS9ub3JtYWwubTQKKwkJCQkgICQoc3JjZGlyKS9ub3JtYWwubTQKIAkkKE00KSAkKE00RkxBR1MpIC1ETTRNQUNSTz0kKHNyY2Rpcikvbm9ybWFsLm00IFwKIAkkKHNyY2RpcikvJChBQkFTRSktZm9ybXMuYWRzLm00IHxcCiAJJChERUxfQURBTU9ERSkgPiRACiAKICQoQURBX1NSQ0RJUikvJChBQkFTRSktbW91c2UuYWRzOiAkKHNyY2RpcikvJChBQkFTRSktbW91c2UuYWRzLm00IFwKLQkJCQkgICQoR0VOX0ZJTEVTNCkgJChzcmNkaXIpL25vcm1hbC5tNAorCQkJCSAgJChzcmNkaXIpL25vcm1hbC5tNAogCSQoTTQpICQoTTRGTEFHUykgLURNNE1BQ1JPPSQoc3JjZGlyKS9ub3JtYWwubTQgXAogCSQoc3JjZGlyKS8kKEFCQVNFKS1tb3VzZS5hZHMubTQgfFwKIAkkKERFTF9BREFNT0RFKSA+JEAKQEAgLTM4NywyMyArMjY3LDE4IEBACiBATUFLRV9VUFBFUl9UQUdTQAlldGFncyAqLltjaF0KIAogbW9zdGx5Y2xlYW4gOjoKLQktcm0gLWYgYS5vdXQgY29yZSBnZW4keCAqLm8KLQktcm0gLWYgJChHRU5fRklMRVMxKQotCS1ybSAtZiAkKEdFTl9GSUxFUzIpCi0JLXJtIC1mICQoR0VOX0ZJTEVTMykKLQktcm0gLWYgJChHRU5fRklMRVM0KQotCS1ybSAtZiAkKEdFTl9GSUxFUzUpCisJLXJtIC1mIGEub3V0IGNvcmUgJChQUk9HX0dFTkVSQVRFKSAqLm8KIAogY2xlYW4gOjogbW9zdGx5Y2xlYW4KIAktcm0gLWYgJChHRU5fVEFSR0VUUykgaW5zdGFiLnRtcCAqLmFkW2JzXSAqLmh0bWwgKi5hbGkgKi50bXAKIAogZGlzdGNsZWFuIDo6IGNsZWFuCi0JLXJtIC1mIGFkYWN1cnNlcy1jb25maWcKKwktcm0gLWYgJChBREFDVVJTRVNfQ09ORklHKQogCS1ybSAtZiBNYWtlZmlsZQogCiByZWFsY2xlYW4gOjogZGlzdGNsZWFuCiAKLUhUTUxfRElSID0gLi4vLi4vZG9jL2h0bWwvYWRhCitIVE1MX0RJUiA9IEBBREFIVE1MX0RJUkAKIAogaW5zdGFiLnRtcCA6IHRhYmxlLm00ICQoR0VOX1NSQykKIAlAcm0gLWYgJEAKQEAgLTQzMSwxMCArMzA2LDEyIEBACiAJQHJtIC1mIGluc3RhYi50bXAKIAogYWRhaHRtbDoKKwl0ZXN0IC1uICIkKEdOQVRIVE1MKSIgfHwgZXhpdCAxCiAJQGZpbmQgJChIVE1MX0RJUikgLXR5cGUgZiAtZXhlYyBybSAtZiB7fSBcOwogCUBta2RpciAtcCAkKEhUTUxfRElSKQogCWNwIC1wIC4uL3NyYy8qLmFkW3NiXSAuICYmIGNobW9kICt3ICouYWRbc2JdCi0JbG4gLXNmIC4uL3NyYy8qLmFsaSAuCitAVVNFX09MRF9NQUtFUlVMRVNACWxuIC1zZiAuLi9zcmMvKi5hbGkgLgorQFVTRV9HTkFUX1BST0pFQ1RTQAlsbiAtc2YgLi4vc3RhdGljLWFsaS8qLmFsaSAuCiAJQGVjaG8gIkZpbHRlcmluZyBnZW5lcmF0ZWQgZmlsZXMiCiAJQGZvciBmIGluICQoR0VOX1NSQyk7IGRvIFwKIAkgICBoPWBiYXNlbmFtZSAkJGZgIDtcCmRpZmYgLS1naXQgYS9BZGE5NS9nZW4vYWRhY3Vyc2VzLWNvbmZpZyBiL0FkYTk1L2dlbi9hZGFjdXJzZXMtY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiN2U5YTBlLi4wMDAwMDAwCi0tLSBhL0FkYTk1L2dlbi9hZGFjdXJzZXMtY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotIyEgL2Jpbi9zaAotIyAkSWQ6IGFkYWN1cnNlcy1jb25maWcuaW4sdiAxLjIgMjAwNy8wNC8wNyAyMTowNjo1MCB0b20gRXhwICQKLSMKLSMgVGhpcyBzY3JpcHQgd2lsbCByZXR1cm4gdGhlIG9wdGlvbiB0byBhZGQgdG8gYGduYXRtYWtlJyBmb3IgdXNpbmcKLSMgQWRhQ3Vyc2VzLgotIwotCi1wcmVmaXg9Ii91c3IvbG9jYWwiCi1leGVjX3ByZWZpeD0iJHtwcmVmaXh9IgotbGliZGlyPSIke2V4ZWNfcHJlZml4fS9saWIiCi0KLVZFUlNJT049IjUuNy4yMDA4MTEwMiIKLQotQ0ZMQUdTPSItSSRsaWJkaXIvYWRhY3Vyc2VzIC1MJGxpYmRpci9hZGFjdXJzZXMiCi1MSUJTPSItTCRwcmVmaXgvbGliIC1sQWRhQ3Vyc2VzIgotCi1jYXNlICJ4JDEiIGluCi0gICAgeC0tdmVyc2lvbikKLSAgICAgICAgZWNobyBBZGFDdXJzZXMgJFZFUlNJT04KLSAgICAgICAgOzsKLSAgICB4LS1jZmxhZ3MpCi0gICAgICAgIGVjaG8gJENGTEFHUwotICAgICAgICA7OwotICAgIHgtLWxpYnMpCi0gICAgICAgIGVjaG8gJExJQlMKLSAgICAgICAgOzsKLSAgICB4KQotICAgIAkjIGlmIG5vIHBhcmFtZXRlciBpcyBnaXZlbiwgZ2l2ZSB3aGF0IGduYXRtYWtlIG5lZWRzCi0gICAgICAgIGVjaG8gJENGTEFHUyAtbGFyZ3MgJExJQlMKLSAgICAgICAgOzsKLSAgICAqKQotICAgICAgICBlY2hvICdVc2FnZTogYWRhY3Vyc2VzLWNvbmZpZyBbLS12ZXJzaW9uIHwgLS1jZmxhZ3MgfCAtLWxpYnNdJyA+JjIKLSAgICAgICAgZXhpdCAxCi0gICAgICAgIDs7Ci1lc2FjCmRpZmYgLS1naXQgYS9BZGE5NS9nZW4vYWRhY3Vyc2VzLWNvbmZpZy5pbiBiL0FkYTk1L2dlbi9hZGFjdXJzZXMtY29uZmlnLmluCmluZGV4IGM4OGQ4NWIuLmUyOWMzMDkgMTAwNjQ0Ci0tLSBhL0FkYTk1L2dlbi9hZGFjdXJzZXMtY29uZmlnLmluCisrKyBiL0FkYTk1L2dlbi9hZGFjdXJzZXMtY29uZmlnLmluCkBAIC0xLDM1ICsxLDgxIEBACiAjISAvYmluL3NoCi0jICRJZDogYWRhY3Vyc2VzLWNvbmZpZy5pbix2IDEuMiAyMDA3LzA0LzA3IDIxOjA2OjUwIHRvbSBFeHAgJAorIyAkSWQ6IGFkYWN1cnNlcy1jb25maWcuaW4sdiAxLjkgMjAxNC8wNi8wNyAxOTozMjoyMiBQYXNjYWwuUGlnbmFyZCBFeHAgJAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMjAwNy0yMDEwLDIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiAgIworIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSAgICAjCisjIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvICMKKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSAgIworIyBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gIworIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgIworIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgICAjCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMICAgICMKKyMgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICAgICAgIworIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAgICAjCisjIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgICAgICAgICMKKyMgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgICMKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgIworIyB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgICAgICAgICAjCisjIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIwotIyBUaGlzIHNjcmlwdCB3aWxsIHJldHVybiB0aGUgb3B0aW9uIHRvIGFkZCB0byBgZ25hdG1ha2UnIGZvciB1c2luZwotIyBBZGFDdXJzZXMuCi0jCisjIFRoaXMgc2NyaXB0IHJldHVybnMgdGhlIG9wdGlvbnMgdG8gYWRkIHRvIGBnbmF0bWFrZScgZm9yIHVzaW5nIEFkYUN1cnNlcy4KIAotcHJlZml4PSJAcHJlZml4QCIKLWV4ZWNfcHJlZml4PSJAZXhlY19wcmVmaXhAIgotbGliZGlyPSJAbGliZGlyQCIKK0RFU1RESVI9QERFU1RESVJACitwcmVmaXg9QHByZWZpeEAKK2V4ZWNfcHJlZml4PUBleGVjX3ByZWZpeEAKK2xpYmRpcj1AbGliZGlyQAogCi1WRVJTSU9OPSJATkNVUlNFU19NQUpPUkAuQE5DVVJTRVNfTUlOT1JALkBOQ1VSU0VTX1BBVENIQCIKK0FEQV9JTkNMVURFPUBBREFfSU5DTFVERUAKK0FEQV9PQkpFQ1RTPUBBREFfT0JKRUNUU0AKIAotQ0ZMQUdTPSItSSRsaWJkaXIvYWRhY3Vyc2VzIC1MJGxpYmRpci9hZGFjdXJzZXMiCi1MSUJTPSItTCRwcmVmaXgvbGliIC1sQWRhQ3Vyc2VzIgorVkVSU0lPTj1ATkNVUlNFU19NQUpPUkAuQE5DVVJTRVNfTUlOT1JALkBOQ1VSU0VTX1BBVENIQAorCitDRkxBR1M9Ii1hSSRBREFfSU5DTFVERSAtYU8kQURBX09CSkVDVFMiCitMSUJTPSItTCRBREFfT0JKRUNUUyAtbEFkYUN1cnNlcyIKKworVEhJUz0iYWRhY3Vyc2VzIgogCiBjYXNlICJ4JDEiIGluCi0gICAgeC0tdmVyc2lvbikKLSAgICAgICAgZWNobyBBZGFDdXJzZXMgJFZFUlNJT04KLSAgICAgICAgOzsKLSAgICB4LS1jZmxhZ3MpCi0gICAgICAgIGVjaG8gJENGTEFHUwotICAgICAgICA7OwotICAgIHgtLWxpYnMpCi0gICAgICAgIGVjaG8gJExJQlMKLSAgICAgICAgOzsKLSAgICB4KQotICAgIAkjIGlmIG5vIHBhcmFtZXRlciBpcyBnaXZlbiwgZ2l2ZSB3aGF0IGduYXRtYWtlIG5lZWRzCi0gICAgICAgIGVjaG8gJENGTEFHUyAtbGFyZ3MgJExJQlMKLSAgICAgICAgOzsKLSAgICAqKQotICAgICAgICBlY2hvICdVc2FnZTogYWRhY3Vyc2VzLWNvbmZpZyBbLS12ZXJzaW9uIHwgLS1jZmxhZ3MgfCAtLWxpYnNdJyA+JjIKLSAgICAgICAgZXhpdCAxCi0gICAgICAgIDs7CisJeC0tdmVyc2lvbikKKwkJZWNobyBBZGFDdXJzZXMgJFZFUlNJT04KKwkJOzsKKwl4LS1jZmxhZ3MpCisJCWVjaG8gJENGTEFHUworCQk7OworCXgtLWxpYnMpCisJCWVjaG8gJExJQlMKKwkJOzsKKwl4KQorCQkjIGlmIG5vIHBhcmFtZXRlciBpcyBnaXZlbiwgZ2l2ZSB3aGF0IGduYXRtYWtlIG5lZWRzCisJCWVjaG8gIiRDRkxBR1MgLWxhcmdzICRMSUJTIgorCQk7OworCXgtLWhlbHApCisJCWNhdCA8PEVOREhFTFAKK1VzYWdlOiAke1RISVN9LWNvbmZpZyBbb3B0aW9uc10KKworT3B0aW9uczoKKyAgLS1jZmxhZ3MgICAgICAgICAgIGVjaG9zIHRoZSBnbmF0IChBZGEgY29tcGlsZXIpIGZsYWdzIG5lZWRlZCB0byBjb21waWxlIHdpdGggJHtUSElTfQorICAtLWxpYnMgICAgICAgICAgICAgZWNob3MgdGhlIGduYXQgbGlicmFyaWVzIG5lZWRlZCB0byBsaW5rIHdpdGggJHtUSElTfQorCisgIC0tdmVyc2lvbiAgICAgICAgICBlY2hvcyB0aGUgcmVsZWFzZStwYXRjaGRhdGUgdmVyc2lvbiBvZiAke1RISVN9CisKKyAgLS1oZWxwICAgICAgICAgICAgIHByaW50cyB0aGlzIG1lc3NhZ2UKKworSWYgbm8gb3B0aW9ucyBhcmUgZ2l2ZW4sIGVjaG9zIHRoZSBmdWxsIHNldCBvZiBmbGFncyBuZWVkZWQgYnkgZ25hdG1ha2UuCitFTkRIRUxQCisJCTs7CisJKikKKwkJZWNobyAnVXNhZ2U6IGFkYWN1cnNlc0BERlRfQVJHX1NVRkZJWEAtY29uZmlnIFstLXZlcnNpb24gfCAtLWNmbGFncyB8IC0tbGlic10nID4mMgorCQlleGl0IDEKKwkJOzsKIGVzYWMKZGlmZiAtLWdpdCBhL0FkYTk1L2dlbi9nZW4uYyBiL0FkYTk1L2dlbi9nZW4uYwppbmRleCBkOGVhNDRmLi40ZTk4NmE0IDEwMDY0NAotLS0gYS9BZGE5NS9nZW4vZ2VuLmMKKysrIGIvQWRhOTUvZ2VuL2dlbi5jCkBAIC0xLDUgKzEsNSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMTk5OCwyMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAxMywyMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCiAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgpAQCAtMzIsMTQ5MiArMzIsNTAzIEBACiAKIC8qCiAgICAgVmVyc2lvbiBDb250cm9sCi0gICAgJElkOiBnZW4uYyx2IDEuNDkgMjAwOC8xMC8wNCAyMTo1OTozNyB0b20gRXhwICQKKyAgICAkSWQ6IGdlbi5jLHYgMS42OSAyMDE0LzA1LzMxIDIxOjAwOjA4IHRvbSBFeHAgJAogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKgotICBUaGlzIHByb2dyYW0gZ2VuZXJhdGVzIHZhcmlvdXMgcmVjb3JkIHN0cnVjdHVyZXMgYW5kIGNvbnN0YW50cyBmcm9tIHRoZQotICBuY3Vyc2VzIGhlYWRlciBmaWxlIGZvciB0aGUgQWRhOTUgcGFja2FnZXMuIEVzc2VudGlhbGx5IGl0IHByb2R1Y2VzCi0gIEFkYTk1IHNvdXJjZSBvbiBzdGRvdXQsIHdoaWNoIGlzIHRoZW4gbWVyZ2VkIHVzaW5nIG00IGludG8gYSB0ZW1wbGF0ZQotICB0byBwcm9kdWNlIHRoZSByZWFsIHNvdXJjZS4KLSAgKi8KKyAgVGhpcyBwcm9ncmFtIHByaW50cyBvbiBpdHMgc3RhbmRhcmQgb3V0cHV0IHRoZSBzb3VyY2UgZm9yIHRoZQorICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzX0NvbnN0YW50cyBBZGEgcGFja2FnZSBzcGVjaWZpY2F0aW9uLiBUaGlzIHB1cmUKKyAgcGFja2FnZSBvbmx5IGV4cG9ydHMgQyBjb25zdGFudHMgdG8gdGhlIEFkYSBjb21waWxlci4KKyAqLwogCisjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgPG5jdXJzZXNfY2ZnLmg+CisjZWxzZQorI2luY2x1ZGUgPG5jdXJzZXMuaD4KKyNlbmRpZgogCiAjaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RkZGVmLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jaW5jbHVkZSA8Y3R5cGUuaD4KIAogI2luY2x1ZGUgPG1lbnUuaD4KICNpbmNsdWRlIDxmb3JtLmg+CiAKLSNkZWZpbmUgUkVTX05BTUUgIlJlc2VydmVkIgorI3VuZGVmIFVDSEFSCisjdW5kZWYgVUlOVAogCi1zdGF0aWMgY29uc3QgY2hhciAqbW9kZWwgPSAiIjsKLXN0YXRpYyBpbnQgbGl0dGxlX2VuZGlhbiA9IDA7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgVUNIQVI7Cit0eXBlZGVmIHVuc2lnbmVkIGludCBVSU5UOwogCi10eXBlZGVmIHN0cnVjdAotICB7Ci0gICAgY29uc3QgY2hhciAqbmFtZTsKLSAgICB1bnNpZ25lZCBsb25nIGF0dHI7Ci0gIH0KLW5hbWVfYXR0cmlidXRlX3BhaXI7CisvKiBUaGVzZSBnbG9iYWwgdmFyaWFibGVzIHdpbGwgYmUgc2V0IGJ5IG1haW4gKCkgKi8KK3N0YXRpYyBpbnQgbGl0dGxlX2VuZGlhbjsKK3N0YXRpYyBjb25zdCBjaGFyICpteV9wcm9ncmFtX2ludm9jYXRpb25fbmFtZSA9IE5VTEw7CiAKLXN0YXRpYyBpbnQKLWZpbmRfcG9zKGNoYXIgKnMsIHVuc2lnbmVkIGxlbiwgaW50ICpsb3csIGludCAqaGlnaCkKK3N0YXRpYyB2b2lkCitteV9lcnJvcihjb25zdCBjaGFyICptZXNzYWdlKQogewotICB1bnNpZ25lZCBpbnQgaSwgajsKLSAgaW50IGwgPSAwOworICBmcHJpbnRmKHN0ZGVyciwgIiVzOiAlc1xuIiwgbXlfcHJvZ3JhbV9pbnZvY2F0aW9uX25hbWUsIG1lc3NhZ2UpOworICBleGl0KEVYSVRfRkFJTFVSRSk7Cit9CiAKLSAgKmhpZ2ggPSAtMTsKLSAgKmxvdyA9IDggKiBsZW47CitzdGF0aWMgdm9pZAorcHJpbnRfY29uc3RhbnQoY29uc3QgY2hhciAqbmFtZSwKKwkgICAgICAgbG9uZyB2YWx1ZSkKK3sKKyAgcHJpbnRmKCIgICAlLTI4cyA6IGNvbnN0YW50IDo9ICVsZDtcbiIsIG5hbWUsIHZhbHVlKTsKK30KIAotICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyssIHMrKykKLSAgICB7Ci0gICAgICBpZiAoKnMpCi0JewotCSAgZm9yIChqID0gMDsgaiA8IDggKiBzaXplb2YoY2hhcik7IGorKykKKyNkZWZpbmUgUFJJTlRfTkFNRURfQ09OU1RBTlQobmFtZSkgXAorICBwcmludF9jb25zdGFudCAoI25hbWUsIG5hbWUpCiAKLQkgICAgewotCSAgICAgIGlmICgoKGxpdHRsZV9lbmRpYW4gJiYgKCgqcykgJiAweDAxKSkgfHwKLQkJICAgKCFsaXR0bGVfZW5kaWFuICYmICgoKnMpICYgMHg4MCkpKSkKLQkJewotCQkgIGlmIChsID4gKmhpZ2gpCi0JCSAgICAqaGlnaCA9IGw7Ci0JCSAgaWYgKGwgPCAqbG93KQotCQkgICAgKmxvdyA9IGw7Ci0JCX0KLQkgICAgICBsKys7Ci0JICAgICAgaWYgKGxpdHRsZV9lbmRpYW4pCi0JCSpzID4+PSAxOwotCSAgICAgIGVsc2UKLQkJKnMgPDw9IDE7Ci0JICAgIH0KLQl9Ci0gICAgICBlbHNlCi0JbCArPSA4OwotICAgIH0KLSAgcmV0dXJuICgqaGlnaCA+PSAwICYmICgqbG93IDw9ICpoaWdoKSkgPyAqbG93IDogLTE7CitzdGF0aWMgdm9pZAorcHJpbnRfY29tbWVudChjb25zdCBjaGFyICptZXNzYWdlKQoreworICBwcmludGYoIlxuICAgLS0gICVzXG5cbiIsIG1lc3NhZ2UpOwogfQogCiAvKgotICogVGhpcyBoZWxwZXIgcm91dGluZSBnZW5lcmF0ZXMgYSByZXByZXNlbnRhdGlvbiBjbGF1c2UgZm9yIGEKLSAqIHJlY29yZCB0eXBlIGRlZmluZWQgaW4gdGhlIGJpbmRpbmcuCi0gKiBXZSBhcmUgb25seSBkZWFsaW5nIHdpdGggcmVjb3JkIHR5cGVzIHdoaWNoIGFyZSBvZiAzMiBvciAxNgotICogYml0IHNpemUsIGkuZS4gdGhleSBmaXQgaW50byBhbiAodSlpbnQgb3IgYSAodSlzaG9ydC4KKyAqIE1ha2Ugc3VyZSB0aGF0IEtFWV9NSU4gYW5kIEtFWV9NQVggYXJlIGRlZmluZWQuCisgKiBtYWluICgpIHdpbGwgcHJvdGVzdCBpZiBLRVlfTUlOID09IDI1NgogICovCi1zdGF0aWMgdm9pZAotICBnZW5fcmVwcwotICAoY29uc3QgbmFtZV9hdHRyaWJ1dGVfcGFpciAqIG5hcCwJLyogYXJyYXkgb2YgbmFtZV9hdHRyaWJ1dGVfcGFpciByZWNvcmRzICovCi0gICBjb25zdCBjaGFyICpuYW1lLAkJLyogbmFtZSBvZiB0aGUgcmVwcmVzZW50ZWQgcmVjb3JkIHR5cGUgICovCi0gICBpbnQgbGVuLAkJCS8qIHNpemUgb2YgdGhlIHJlY29yZCBpbiBieXRlcyAgICAgICAgICAqLwotICAgaW50IGJpYXMpCi17Ci0gIGludCBpLCBuLCBsLCBjbnQgPSAwLCBsb3csIGhpZ2g7Ci0gIGludCB3aWR0aCA9IHN0cmxlbihSRVNfTkFNRSkgKyAzOwotICB1bnNpZ25lZCBsb25nIGE7Ci0gIHVuc2lnbmVkIGxvbmcgbWFzayA9IDA7Ci0KLSAgYXNzZXJ0KG5hcCAhPSBOVUxMKTsKLQotICBmb3IgKGkgPSAwOyBuYXBbaV0ubmFtZSAhPSAoY2hhciAqKTA7IGkrKykKLSAgICB7Ci0gICAgICBjbnQrKzsKLSAgICAgIGwgPSBzdHJsZW4obmFwW2ldLm5hbWUpOwotICAgICAgaWYgKGwgPiB3aWR0aCkKLQl3aWR0aCA9IGw7Ci0gICAgfQotICBhc3NlcnQod2lkdGggPiAwKTsKLQotICBwcmludGYoIiAgIHR5cGUgJXMgaXNcbiIsIG5hbWUpOwotICBwcmludGYoIiAgICAgIHJlY29yZFxuIik7Ci0gIGZvciAoaSA9IDA7IG5hcFtpXS5uYW1lICE9IChjaGFyICopMDsgaSsrKQotICAgIHsKLSAgICAgIHByaW50ZigiICAgICAgICAgJS0qcyA6IEJvb2xlYW47XG4iLCB3aWR0aCwgbmFwW2ldLm5hbWUpOwotICAgIH0KLSAgcHJpbnRmKCIgICAgICBlbmQgcmVjb3JkO1xuIik7Ci0gIHByaW50ZigiICAgcHJhZ21hIENvbnZlbnRpb24gKEMsICVzKTtcblxuIiwgbmFtZSk7Ci0KLSAgcHJpbnRmKCIgICBmb3IgJXMgdXNlXG4iLCBuYW1lKTsKLSAgcHJpbnRmKCIgICAgICByZWNvcmRcbiIpOwotCi0gIGZvciAoaSA9IDA7IG5hcFtpXS5uYW1lICE9IChjaGFyICopMDsgaSsrKQotICAgIHsKLSAgICAgIGEgPSBuYXBbaV0uYXR0cjsKLSAgICAgIG1hc2sgfD0gYTsKLSAgICAgIGwgPSBmaW5kX3BvcygoY2hhciAqKSZhLCBzaXplb2YoYSksICZsb3csICZoaWdoKTsKLSAgICAgIGlmIChsID49IDApCi0JcHJpbnRmKCIgICAgICAgICAlLSpzIGF0IDAgcmFuZ2UgJTJkIC4uICUyZDtcbiIsIHdpZHRoLCBuYXBbaV0ubmFtZSwKLQkgICAgICAgbG93IC0gYmlhcywgaGlnaCAtIGJpYXMpOwotICAgIH0KLSAgaSA9IDE7Ci0gIG4gPSBjbnQ7Ci0gIHByaW50ZigiICAgICAgZW5kIHJlY29yZDtcbiIpOwotICBwcmludGYoIiAgIGZvciAlcydTaXplIHVzZSAlZDtcbiIsIG5hbWUsIDggKiBsZW4pOwotICBwcmludGYoIiAgIC0tICBQbGVhc2Ugbm90ZTogdGhpcyByZXAuIGNsYXVzZSBpcyBnZW5lcmF0ZWQgYW5kIG1heSBiZVxuIik7Ci0gIHByaW50ZigiICAgLS0gICAgICAgICAgICAgICBkaWZmZXJlbnQgb24geW91ciBzeXN0ZW0uIik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jaHR5cGVfcmVwKGNvbnN0IGNoYXIgKm5hbWUsIGF0dHJfdCBtYXNrKQotewotICBhdHRyX3QgeCA9IC0xOwotICBhdHRyX3QgdCA9IHggJiBtYXNrOwotICBpbnQgbG93LCBoaWdoOwotICBpbnQgbCA9IGZpbmRfcG9zKChjaGFyICopJnQsIHNpemVvZih0KSwgJmxvdywgJmhpZ2gpOwotCi0gIGlmIChsID49IDApCi0gICAgcHJpbnRmKCIgICAgICAgICAlLTVzIGF0IDAgcmFuZ2UgJTJkIC4uICUyZDtcbiIsIG5hbWUsIGxvdywgaGlnaCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nZW5fY2h0eXBlX3JlcChjb25zdCBjaGFyICpuYW1lKQotewotICBwcmludGYoIiAgIGZvciAlcyB1c2VcbiAgICAgIHJlY29yZFxuIiwgbmFtZSk7Ci0gIGNodHlwZV9yZXAoIkNoIiwgQV9DSEFSVEVYVCk7Ci0gIGNodHlwZV9yZXAoIkNvbG9yIiwgQV9DT0xPUik7Ci0gIGNodHlwZV9yZXAoIkF0dHIiLCAoQV9BVFRSSUJVVEVTICYgfkFfQ09MT1IpKTsKLSAgcHJpbnRmKCIgICAgICBlbmQgcmVjb3JkO1xuICAgZm9yICVzJ1NpemUgdXNlICVsZDtcbiIsCi0JIG5hbWUsIChsb25nKSg4ICogc2l6ZW9mKGNodHlwZSkpKTsKLQotICBwcmludGYoIiAgICAgIC0tICBQbGVhc2Ugbm90ZTogdGhpcyByZXAuIGNsYXVzZSBpcyBnZW5lcmF0ZWQgYW5kIG1heSBiZVxuIik7Ci0gIHByaW50ZigiICAgICAgLS0gICAgICAgICAgICAgICBkaWZmZXJlbnQgb24geW91ciBzeXN0ZW0uXG4iKTsKLX0KLQotc3RhdGljIHZvaWQKLW1yZXBfcmVwKGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKnJlYykKLXsKLSAgaW50IGxvdywgaGlnaDsKLSAgaW50IGwgPSBmaW5kX3BvcygoY2hhciAqKXJlYywgc2l6ZW9mKE1FVkVOVCksICZsb3csICZoaWdoKTsKLQotICBpZiAobCA+PSAwKQotICAgIHByaW50ZigiICAgICAgICAgJS03cyBhdCAwIHJhbmdlICUzZCAuLiAlM2Q7XG4iLCBuYW1lLCBsb3csIGhpZ2gpOwotfQotCi1zdGF0aWMgdm9pZAotZ2VuX21yZXBfcmVwKGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0gIE1FVkVOVCB4OwotCi0gIHByaW50ZigiICAgZm9yICVzIHVzZVxuICAgICAgcmVjb3JkXG4iLCBuYW1lKTsKLQotICBtZW1zZXQoJngsIDAsIHNpemVvZih4KSk7Ci0gIHguaWQgPSAtMTsKLSAgbXJlcF9yZXAoIklkIiwgJngpOwotCi0gIG1lbXNldCgmeCwgMCwgc2l6ZW9mKHgpKTsKLSAgeC54ID0gLTE7Ci0gIG1yZXBfcmVwKCJYIiwgJngpOwotCi0gIG1lbXNldCgmeCwgMCwgc2l6ZW9mKHgpKTsKLSAgeC55ID0gLTE7Ci0gIG1yZXBfcmVwKCJZIiwgJngpOwotCi0gIG1lbXNldCgmeCwgMCwgc2l6ZW9mKHgpKTsKLSAgeC56ID0gLTE7Ci0gIG1yZXBfcmVwKCJaIiwgJngpOwotCi0gIG1lbXNldCgmeCwgMCwgc2l6ZW9mKHgpKTsKLSAgeC5ic3RhdGUgPSAtMTsKLSAgbXJlcF9yZXAoIkJzdGF0ZSIsICZ4KTsKLQotICBwcmludGYoIiAgICAgIGVuZCByZWNvcmQ7XG4iKTsKLSAgcHJpbnRmKCIgICAgICAtLSAgUGxlYXNlIG5vdGU6IHRoaXMgcmVwLiBjbGF1c2UgaXMgZ2VuZXJhdGVkIGFuZCBtYXkgYmVcbiIpOwotICBwcmludGYoIiAgICAgIC0tICAgICAgICAgICAgICAgZGlmZmVyZW50IG9uIHlvdXIgc3lzdGVtLlxuIik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nZW5fYXR0cl9zZXQoY29uc3QgY2hhciAqbmFtZSkKLXsKLSAgLyogQWxsIG9mIHRoZSBBX3h4eCBzeW1ib2xzIGFyZSBkZWZpbmVkIGluIG5jdXJzZXMsIGJ1dCBub3QgYWxsIGFyZSBub256ZXJvCi0gICAqIGlmICJjb25maWd1cmUgLS1lbmFibGUtd2lkZWMiIGlzIHNwZWNpZmllZC4KLSAgICovCi0gIHN0YXRpYyBjb25zdCBuYW1lX2F0dHJpYnV0ZV9wYWlyIG5hcFtdID0KLSAgewotI2lmIEFfU1RBTkRPVVQKLSAgICB7IlN0YW5kX091dCIsIEFfU1RBTkRPVVR9LAotI2VuZGlmCi0jaWYgQV9VTkRFUkxJTkUKLSAgICB7IlVuZGVyX0xpbmUiLCBBX1VOREVSTElORX0sCi0jZW5kaWYKLSNpZiBBX1JFVkVSU0UKLSAgICB7IlJldmVyc2VfVmlkZW8iLCBBX1JFVkVSU0V9LAotI2VuZGlmCi0jaWYgQV9CTElOSwotICAgIHsiQmxpbmsiLCBBX0JMSU5LfSwKLSNlbmRpZgotI2lmIEFfRElNCi0gICAgeyJEaW1fQ2hhcmFjdGVyIiwgQV9ESU19LAotI2VuZGlmCi0jaWYgQV9CT0xECi0gICAgeyJCb2xkX0NoYXJhY3RlciIsIEFfQk9MRH0sCi0jZW5kaWYKLSNpZiBBX0FMVENIQVJTRVQKLSAgICB7IkFsdGVybmF0ZV9DaGFyYWN0ZXJfU2V0IiwgQV9BTFRDSEFSU0VUfSwKLSNlbmRpZgotI2lmIEFfSU5WSVMKLSAgICB7IkludmlzaWJsZV9DaGFyYWN0ZXIiLCBBX0lOVklTfSwKLSNlbmRpZgotI2lmIEFfUFJPVEVDVAotICAgIHsiUHJvdGVjdGVkX0NoYXJhY3RlciIsIEFfUFJPVEVDVH0sCi0jZW5kaWYKLSNpZiBBX0hPUklaT05UQUwKLSAgICB7Ikhvcml6b250YWwiLCBBX0hPUklaT05UQUx9LAotI2VuZGlmCi0jaWYgQV9MRUZUCi0gICAgeyJMZWZ0IiwgQV9MRUZUfSwKLSNlbmRpZgotI2lmIEFfTE9XCi0gICAgeyJMb3ciLCBBX0xPV30sCi0jZW5kaWYKLSNpZiBBX1JJR0hUCi0gICAgeyJSaWdodCIsIEFfUklHSFR9LAotI2VuZGlmCi0jaWYgQV9UT1AKLSAgICB7IlRvcCIsIEFfVE9QfSwKLSNlbmRpZgotI2lmIEFfVkVSVElDQUwKLSAgICB7IlZlcnRpY2FsIiwgQV9WRVJUSUNBTH0sCi0jZW5kaWYKLSAgICB7KGNoYXIgKikwLCAwfQotICB9OwotICBjaHR5cGUgYXR0ciA9IEFfQVRUUklCVVRFUyAmIH5BX0NPTE9SOwotICBpbnQgc3RhcnQgPSAtMTsKLSAgaW50IGxlbiA9IDA7Ci0gIGludCBpLCBzZXQ7Ci0gIGZvciAoaSA9IDA7IGkgPCAoaW50KSg4ICogc2l6ZW9mKGNodHlwZSkpOyBpKyspCi0KLSAgICB7Ci0gICAgICBzZXQgPSBhdHRyICYgMTsKLSAgICAgIGlmIChzZXQpCi0JewotCSAgaWYgKHN0YXJ0IDwgMCkKLQkgICAgc3RhcnQgPSBpOwotCSAgaWYgKHN0YXJ0ID49IDApCi0JICAgIHsKLQkgICAgICBsZW4rKzsKLQkgICAgfQotCX0KLSAgICAgIGF0dHIgPSBhdHRyID4+IDE7Ci0gICAgfQotICBnZW5fcmVwcyhuYXAsIG5hbWUsIChsZW4gKyA3KSAvIDgsIGxpdHRsZV9lbmRpYW4gPyBzdGFydCA6IDApOwotfQotCi1zdGF0aWMgdm9pZAotZ2VuX3RyYWNlKGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0gIHN0YXRpYyBjb25zdCBuYW1lX2F0dHJpYnV0ZV9wYWlyIG5hcFtdID0KLSAgewotICAgIHsiVGltZXMiLCBUUkFDRV9USU1FU30sCi0gICAgeyJUcHV0cyIsIFRSQUNFX1RQVVRTfSwKLSAgICB7IlVwZGF0ZSIsIFRSQUNFX1VQREFURX0sCi0gICAgeyJDdXJzb3JfTW92ZSIsIFRSQUNFX01PVkV9LAotICAgIHsiQ2hhcmFjdGVyX091dHB1dCIsIFRSQUNFX0NIQVJQVVR9LAotICAgIHsiQ2FsbHMiLCBUUkFDRV9DQUxMU30sCi0gICAgeyJWaXJ0dWFsX1B1dHMiLCBUUkFDRV9WSVJUUFVUfSwKLSAgICB7IklucHV0X0V2ZW50cyIsIFRSQUNFX0lFVkVOVH0sCi0gICAgeyJUVFlfU3RhdGUiLCBUUkFDRV9CSVRTfSwKLSAgICB7IkludGVybmFsX0NhbGxzIiwgVFJBQ0VfSUNBTExTfSwKLSAgICB7IkNoYXJhY3Rlcl9DYWxscyIsIFRSQUNFX0NDQUxMU30sCi0gICAgeyJUZXJtY2FwX1Rlcm1JbmZvIiwgVFJBQ0VfREFUQUJBU0V9LAotICAgIHsoY2hhciAqKTAsIDB9Ci0gIH07Ci0gIGdlbl9yZXBzKG5hcCwgbmFtZSwgc2l6ZW9mKGludCksIDApOwotfQotCi1zdGF0aWMgdm9pZAotZ2VuX21lbnVfb3B0X3JlcChjb25zdCBjaGFyICpuYW1lKQotewotICBzdGF0aWMgY29uc3QgbmFtZV9hdHRyaWJ1dGVfcGFpciBuYXBbXSA9Ci0gIHsKLSNpZmRlZiBPX09ORVZBTFVFCi0gICAgeyJPbmVfVmFsdWVkIiwgT19PTkVWQUxVRX0sCi0jZW5kaWYKLSNpZmRlZiBPX1NIT1dERVNDCi0gICAgeyJTaG93X0Rlc2NyaXB0aW9ucyIsIE9fU0hPV0RFU0N9LAotI2VuZGlmCi0jaWZkZWYgT19ST1dNQUpPUgotICAgIHsiUm93X01ham9yX09yZGVyIiwgT19ST1dNQUpPUn0sCi0jZW5kaWYKLSNpZmRlZiBPX0lHTk9SRUNBU0UKLSAgICB7Iklnbm9yZV9DYXNlIiwgT19JR05PUkVDQVNFfSwKLSNlbmRpZgotI2lmZGVmIE9fU0hPV01BVENICi0gICAgeyJTaG93X01hdGNoZXMiLCBPX1NIT1dNQVRDSH0sCi0jZW5kaWYKLSNpZmRlZiBPX05PTkNZQ0xJQwotICAgIHsiTm9uX0N5Y2xpYyIsIE9fTk9OQ1lDTElDfSwKLSNlbmRpZgotICAgIHsoY2hhciAqKTAsIDB9Ci0gIH07Ci0gIGdlbl9yZXBzKG5hcCwgbmFtZSwgc2l6ZW9mKGludCksIDApOwotfQotCi1zdGF0aWMgdm9pZAotZ2VuX2l0ZW1fb3B0X3JlcChjb25zdCBjaGFyICpuYW1lKQotewotICBzdGF0aWMgY29uc3QgbmFtZV9hdHRyaWJ1dGVfcGFpciBuYXBbXSA9Ci0gIHsKLSNpZmRlZiBPX1NFTEVDVEFCTEUKLSAgICB7IlNlbGVjdGFibGUiLCBPX1NFTEVDVEFCTEV9LAotI2VuZGlmCi0gICAgeyhjaGFyICopMCwgMH0KLSAgfTsKLSAgZ2VuX3JlcHMobmFwLCBuYW1lLCBzaXplb2YoaW50KSwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nZW5fZm9ybV9vcHRfcmVwKGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0gIHN0YXRpYyBjb25zdCBuYW1lX2F0dHJpYnV0ZV9wYWlyIG5hcFtdID0KLSAgewotI2lmZGVmIE9fTkxfT1ZFUkxPQUQKLSAgICB7Ik5MX092ZXJsb2FkIiwgT19OTF9PVkVSTE9BRH0sCi0jZW5kaWYKLSNpZmRlZiBPX0JTX09WRVJMT0FECi0gICAgeyJCU19PdmVybG9hZCIsIE9fQlNfT1ZFUkxPQUR9LAotI2VuZGlmCi0gICAgeyhjaGFyICopMCwgMH0KLSAgfTsKLSAgZ2VuX3JlcHMobmFwLCBuYW1lLCBzaXplb2YoaW50KSwgMCk7Ci19Ci0KLS8qCi0gKiBHZW5lcmF0ZSB0aGUgcmVwcmVzZW50YXRpb24gY2xhdXNlIGZvciB0aGUgRmllbGRfT3B0aW9uX1NldCByZWNvcmQKLSAqLwotc3RhdGljIHZvaWQKLWdlbl9maWVsZF9vcHRfcmVwKGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0gIHN0YXRpYyBjb25zdCBuYW1lX2F0dHJpYnV0ZV9wYWlyIG5hcFtdID0KLSAgewotI2lmZGVmIE9fVklTSUJMRQotICAgIHsiVmlzaWJsZSIsIE9fVklTSUJMRX0sCi0jZW5kaWYKLSNpZmRlZiBPX0FDVElWRQotICAgIHsiQWN0aXZlIiwgT19BQ1RJVkV9LAotI2VuZGlmCi0jaWZkZWYgT19QVUJMSUMKLSAgICB7IlB1YmxpYyIsIE9fUFVCTElDfSwKLSNlbmRpZgotI2lmZGVmIE9fRURJVAotICAgIHsiRWRpdCIsIE9fRURJVH0sCi0jZW5kaWYKLSNpZmRlZiBPX1dSQVAKLSAgICB7IldyYXAiLCBPX1dSQVB9LAotI2VuZGlmCi0jaWZkZWYgT19CTEFOSwotICAgIHsiQmxhbmsiLCBPX0JMQU5LfSwKLSNlbmRpZgotI2lmZGVmIE9fQVVUT1NLSVAKLSAgICB7IkF1dG9fU2tpcCIsIE9fQVVUT1NLSVB9LAotI2VuZGlmCi0jaWZkZWYgT19OVUxMT0sKLSAgICB7Ik51bGxfT2siLCBPX05VTExPS30sCi0jZW5kaWYKLSNpZmRlZiBPX1BBU1NPSwotICAgIHsiUGFzc19PayIsIE9fUEFTU09LfSwKLSNlbmRpZgotI2lmZGVmIE9fU1RBVElDCi0gICAgeyJTdGF0aWMiLCBPX1NUQVRJQ30sCi0jZW5kaWYKLSAgICB7KGNoYXIgKikwLCAwfQotICB9OwotICBnZW5fcmVwcyhuYXAsIG5hbWUsIHNpemVvZihpbnQpLCAwKTsKLX0KLQotLyoKLSAqIEdlbmVyYXRlIGEgc2luZ2xlIGtleSBjb2RlIGNvbnN0YW50IGRlZmluaXRpb24uCi0gKi8KLXN0YXRpYyB2b2lkCi1rZXlkZWYoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqb2xkX25hbWUsIGludCB2YWx1ZSwgaW50IG1vZGUpCi17Ci0gIGlmIChtb2RlID09IDApCQkvKiBHZW5lcmF0ZSB0aGUgbmV3IG5hbWUgKi8KLSAgICBwcmludGYoIiAgICUtMzBzIDogY29uc3RhbnQgU3BlY2lhbF9LZXlfQ29kZSA6PSA4IyUzbyM7XG4iLCBuYW1lLCB2YWx1ZSk7Ci0gIGVsc2UKLSAgICB7CQkJCS8qIGdlbmVyYXRlIHRoZSBvbGQgbmFtZSwgYnV0IG9ubHkgaWYgaXQgZG9lc24ndCBjb25mbGljdCB3aXRoIHRoZSBvbGQKLQkJCQkgKiBuYW1lIChBZGE5NSBpc24ndCBjYXNlIHNlbnNpdGl2ZSEpCi0JCQkJICovCi0gICAgICBjb25zdCBjaGFyICpzID0gb2xkX25hbWU7Ci0gICAgICBjb25zdCBjaGFyICp0ID0gbmFtZTsKLQotICAgICAgd2hpbGUgKCpzICYmICp0ICYmICh0b3VwcGVyKCpzKyspID09IHRvdXBwZXIoKnQrKykpKTsKLSAgICAgIGlmICgqcyB8fCAqdCkKLQlwcmludGYoIiAgICUtMTZzIDogU3BlY2lhbF9LZXlfQ29kZSByZW5hbWVzICVzO1xuIiwgb2xkX25hbWUsIG5hbWUpOwotICAgIH0KLX0KLQotLyoKLSAqIEdlbmVyYXRlIGNvbnN0YW50cyBmb3IgdGhlIGtleSBjb2Rlcy4gV2hlbiBjYWxsZWQgd2l0aCBtb2RlPT0wLCBhCi0gKiBjb21wbGV0ZSBsaXN0IHdpdGggbmljZSBjb25zdGFudCBuYW1lcyBpbiBwcm9wZXIgY2FzaW5nIHN0eWxlIHdpbGwKLSAqIGJlIGdlbmVyYXRlZC4gT3RoZXJ3aXNlIGEgbGlzdCBvZiBvbGQgKGkuZS4gQy1zdHlsZSkgbmFtZXMgd2lsbCBiZQotICogZ2VuZXJhdGVkLCBnaXZlbiB0aGF0IHRoZSBuYW1lIHdhc24ndCBhbHJlYWR5IGRlZmluZWQgaW4gdGhlICJuaWNlIgotICogbGlzdC4KLSAqLwotc3RhdGljIHZvaWQKLWdlbl9rZXlkZWZzKGludCBtb2RlKQotewotICBjaGFyIGJ1ZlsxNl07Ci0gIGNoYXIgb2J1ZlsxNl07Ci0gIGludCBpOwotCi0jaWZkZWYgS0VZX0NPREVfWUVTCi0gIGtleWRlZigiS2V5X0NvZGVfWWVzIiwgIktFWV9DT0RFX1lFUyIsIEtFWV9DT0RFX1lFUywgbW9kZSk7Ci0jZW5kaWYKLSNpZmRlZiBLRVlfTUlOCi0gIGtleWRlZigiS2V5X01pbiIsICJLRVlfTUlOIiwgS0VZX01JTiwgbW9kZSk7Ci0jZW5kaWYKLSNpZmRlZiBLRVlfQlJFQUsKLSAga2V5ZGVmKCJLZXlfQnJlYWsiLCAiS0VZX0JSRUFLIiwgS0VZX0JSRUFLLCBtb2RlKTsKLSNlbmRpZgotI2lmZGVmIEtFWV9ET1dOCi0gIGtleWRlZigiS2V5X0N1cnNvcl9Eb3duIiwgIktFWV9ET1dOIiwgS0VZX0RPV04sIG1vZGUpOwotI2VuZGlmCi0jaWZkZWYgS0VZX1VQCi0gIGtleWRlZigiS2V5X0N1cnNvcl9VcCIsICJLRVlfVVAiLCBLRVlfVVAsIG1vZGUpOwotI2VuZGlmCi0jaWZkZWYgS0VZX0xFRlQKLSAga2V5ZGVmKCJLZXlfQ3Vyc29yX0xlZnQiLCAiS0VZX0xFRlQiLCBLRVlfTEVGVCwgbW9kZSk7Ci0jZW5kaWYKLSNpZmRlZiBLRVlfUklHSFQKLSAga2V5ZGVmKCJLZXlfQ3Vyc29yX1JpZ2h0IiwgIktFWV9SSUdIVCIsIEtFWV9SSUdIVCwgbW9kZSk7Ci0jZW5kaWYKLSNpZmRlZiBLRVlfSE9NRQotICBrZXlkZWYoIktleV9Ib21lIiwgIktFWV9IT01FIiwgS0VZX0hPTUUsIG1vZGUpOwotI2VuZGlmCi0jaWZkZWYgS0VZX0JBQ0tTUEFDRQotICBrZXlkZWYoIktleV9CYWNrc3BhY2UiLCAiS0VZX0JBQ0tTUEFDRSIsIEtFWV9CQUNLU1BBQ0UsIG1vZGUpOwotI2VuZGlmCi0jaWZkZWYgS0VZX0YwCi0gIGtleWRlZigiS2V5X0YwIiwgIktFWV9GMCIsIEtFWV9GMCwgbW9kZSk7Ci0jZW5kaWYKLSNpZmRlZiBLRVlfRgotICBmb3IgKGkgPSAxOyBpIDw9IDI0OyBpKyspCi0gICAgewotICAgICAgc3ByaW50ZihidWYsICJLZXlfRiVkIiwgaSk7Ci0gICAgICBzcHJpbnRmKG9idWYsICJLRVlfRiVkIiwgaSk7Ci0gICAgICBrZXlkZWYoYnVmLCBvYnVmLCBLRVlfRihpKSwgbW9kZSk7Ci0gICAgfQotI2VuZGlmCi0jaWZkZWYgS0VZX0RMCi0gIGtleWRlZigiS2V5X0RlbGV0ZV9MaW5lIiwgIktFWV9ETCIsIEtFWV9ETCwgbW9kZSk7Ci0jZW5kaWYKLSNpZmRlZiBLRVlfSUwKLSAga2V5ZGVmKCJLZXlfSW5zZXJ0X0xpbmUiLCAiS0VZX0lMIiwgS0VZX0lMLCBtb2RlKTsKLSNlbmRpZgotI2lmZGVmIEtFWV9EQwotICBrZXlkZWYoIktleV9EZWxldGVfQ2hhciIsICJLRVlfREMiLCBLRVlfREMsIG1vZGUpOwotI2VuZGlmCi0jaWZkZWYgS0VZX0lDCi0gIGtleWRlZigiS2V5X0luc2VydF9DaGFyIiwgIktFWV9JQyIsIEtFWV9JQywgbW9kZSk7Ci0jZW5kaWYKLSNpZmRlZiBLRVlfRUlDCi0gIGtleWRlZigiS2V5X0V4aXRfSW5zZXJ0X01vZGUiLCAiS0VZX0VJQyIsIEtFWV9FSUMsIG1vZGUpOwotI2VuZGlmCi0jaWZkZWYgS0VZX0NMRUFSCi0gIGtleWRlZigiS2V5X0NsZWFyX1NjcmVlbiIsICJLRVlfQ0xFQVIiLCBLRVlfQ0xFQVIsIG1vZGUpOwotI2VuZGlmCi0jaWZkZWYgS0VZX0VPUwotICBrZXlkZWYoIktleV9DbGVhcl9FbmRfT2ZfU2NyZWVuIiwgIktFWV9FT1MiLCBLRVlfRU9TLCBtb2RlKTsKLSNlbmRpZgotI2lmZGVmIEtFWV9FT0wKLSAga2V5ZGVmKCJLZXlfQ2xlYXJfRW5kX09mX0xpbmUiLCAiS0VZX0VPTCIsIEtFWV9FT0wsIG1vZGUpOwotI2VuZGlmCi0jaWZkZWYgS0VZX1NGCi0gIGtleWRlZigiS2V5X1Njcm9sbF8xX0ZvcndhcmQiLCAiS0VZX1NGIiwgS0VZX1NGLCBtb2RlKTsKLSNlbmRpZgotI2lmZGVmIEtFWV9TUgotICBrZXlkZWYoIktleV9TY3JvbGxfMV9CYWNrd2FyZCIsICJLRVlfU1IiLCBLRVlfU1IsIG1vZGUpOwotI2VuZGlmCi0jaWZkZWYgS0VZX05QQUdFCi0gIGtleWRlZigiS2V5X05leHRfUGFnZSIsICJLRVlfTlBBR0UiLCBLRVlfTlBBR0UsIG1vZGUpOwotI2VuZGlmCi0jaWZkZWYgS0VZX1BQQUdFCi0gIGtleWRlZigiS2V5X1ByZXZpb3VzX1BhZ2UiLCAiS0VZX1BQQUdFIiwgS0VZX1BQQUdFLCBtb2RlKTsKLSNlbmRpZgotI2lmZGVmIEtFWV9TVEFCCi0gIGtleWRlZigiS2V5X1NldF9UYWIiLCAiS0VZX1NUQUIiLCBLRVlfU1RBQiwgbW9kZSk7Ci0jZW5kaWYKLSNpZmRlZiBLRVlfQ1RBQgotICBrZXlkZWYoIktleV9DbGVhcl9UYWIiLCAiS0VZX0NUQUIiLCBLRVlfQ1RBQiwgbW9kZSk7Ci0jZW5kaWYKLSNpZmRlZiBLRVlfQ0FUQUIKLSAga2V5ZGVmKCJLZXlfQ2xlYXJfQWxsX1RhYnMiLCAiS0VZX0NBVEFCIiwgS0VZX0NBVEFCLCBtb2RlKTsKLSNlbmRpZgotI2lmZGVmIEtFWV9FTlRFUgotICBrZXlkZWYoIktleV9FbnRlcl9Pcl9TZW5kIiwgIktFWV9FTlRFUiIsIEtFWV9FTlRFUiwgbW9kZSk7Ci0jZW5kaWYKLSNpZmRlZiBLRVlfU1JFU0VUCi0gIGtleWRlZigiS2V5X1NvZnRfUmVzZXQiLCAiS0VZX1NSRVNFVCIsIEtFWV9TUkVTRVQsIG1vZGUpOwotI2VuZGlmCi0jaWZkZWYgS0VZX1JFU0VUCi0gIGtleWRlZigiS2V5X1Jlc2V0IiwgIktFWV9SRVNFVCIsIEtFWV9SRVNFVCwgbW9kZSk7Ci0jZW5kaWYKLSNpZmRlZiBLRVlfUFJJTlQKLSAga2V5ZGVmKCJLZXlfUHJpbnQiLCAiS0VZX1BSSU5UIiwgS0VZX1BSSU5ULCBtb2RlKTsKLSNlbmRpZgotI2lmZGVmIEtFWV9MTAotICBrZXlkZWYoIktleV9Cb3R0b20iLCAiS0VZX0xMIiwgS0VZX0xMLCBtb2RlKTsKLSNlbmRpZgotI2lmZGVmIEtFWV9BMQotICBrZXlkZWYoIktleV9VcHBlcl9MZWZ0X09mX0tleXBhZCIsICJLRVlfQTEiLCBLRVlfQTEsIG1vZGUpOwotI2VuZGlmCi0jaWZkZWYgS0VZX0EzCi0gIGtleWRlZigiS2V5X1VwcGVyX1JpZ2h0X09mX0tleXBhZCIsICJLRVlfQTMiLCBLRVlfQTMsIG1vZGUpOwotI2VuZGlmCi0jaWZkZWYgS0VZX0IyCi0gIGtleWRlZigiS2V5X0NlbnRlcl9PZl9LZXlwYWQiLCAiS0VZX0IyIiwgS0VZX0IyLCBtb2RlKTsKLSNlbmRpZgotI2lmZGVmIEtFWV9DMQotICBrZXlkZWYoIktleV9Mb3dlcl9MZWZ0X09mX0tleXBhZCIsICJLRVlfQzEiLCBLRVlfQzEsIG1vZGUpOwotI2VuZGlmCi0jaWZkZWYgS0VZX0MzCi0gIGtleWRlZigiS2V5X0xvd2VyX1JpZ2h0X09mX0tleXBhZCIsICJLRVlfQzMiLCBLRVlfQzMsIG1vZGUpOwotI2VuZGlmCi0jaWZkZWYgS0VZX0JUQUIKLSAga2V5ZGVmKCJLZXlfQmFja19UYWIiLCAiS0VZX0JUQUIiLCBLRVlfQlRBQiwgbW9kZSk7Ci0jZW5kaWYKLSNpZmRlZiBLRVlfQkVHCi0gIGtleWRlZigiS2V5X0JlZ2lubmluZyIsICJLRVlfQkVHIiwgS0VZX0JFRywgbW9kZSk7Ci0jZW5kaWYKLSNpZmRlZiBLRVlfQ0FOQ0VMCi0gIGtleWRlZigiS2V5X0NhbmNlbCIsICJLRVlfQ0FOQ0VMIiwgS0VZX0NBTkNFTCwgbW9kZSk7Ci0jZW5kaWYKLSNpZmRlZiBLRVlfQ0xPU0UKLSAga2V5ZGVmKCJLZXlfQ2xvc2UiLCAiS0VZX0NMT1NFIiwgS0VZX0NMT1NFLCBtb2RlKTsKLSNlbmRpZgotI2lmZGVmIEtFWV9DT01NQU5ECi0gIGtleWRlZigiS2V5X0NvbW1hbmQiLCAiS0VZX0NPTU1BTkQiLCBLRVlfQ09NTUFORCwgbW9kZSk7Ci0jZW5kaWYKLSNpZmRlZiBLRVlfQ09QWQotICBrZXlkZWYoIktleV9Db3B5IiwgIktFWV9DT1BZIiwgS0VZX0NPUFksIG1vZGUpOwotI2VuZGlmCi0jaWZkZWYgS0VZX0NSRUFURQotICBrZXlkZWYoIktleV9DcmVhdGUiLCAiS0VZX0NSRUFURSIsIEtFWV9DUkVBVEUsIG1vZGUpOwotI2VuZGlmCi0jaWZkZWYgS0VZX0VORAotICBrZXlkZWYoIktleV9FbmQiLCAiS0VZX0VORCIsIEtFWV9FTkQsIG1vZGUpOwotI2VuZGlmCi0jaWZkZWYgS0VZX0VYSVQKLSAga2V5ZGVmKCJLZXlfRXhpdCIsICJLRVlfRVhJVCIsIEtFWV9FWElULCBtb2RlKTsKLSNlbmRpZgotI2lmZGVmIEtFWV9GSU5ECi0gIGtleWRlZigiS2V5X0ZpbmQiLCAiS0VZX0ZJTkQiLCBLRVlfRklORCwgbW9kZSk7Ci0jZW5kaWYKLSNpZmRlZiBLRVlfSEVMUAotICBrZXlkZWYoIktleV9IZWxwIiwgIktFWV9IRUxQIiwgS0VZX0hFTFAsIG1vZGUpOwotI2VuZGlmCi0jaWZkZWYgS0VZX01BUksKLSAga2V5ZGVmKCJLZXlfTWFyayIsICJLRVlfTUFSSyIsIEtFWV9NQVJLLCBtb2RlKTsKLSNlbmRpZgotI2lmZGVmIEtFWV9NRVNTQUdFCi0gIGtleWRlZigiS2V5X01lc3NhZ2UiLCAiS0VZX01FU1NBR0UiLCBLRVlfTUVTU0FHRSwgbW9kZSk7Ci0jZW5kaWYKLSNpZmRlZiBLRVlfTU9WRQotICBrZXlkZWYoIktleV9Nb3ZlIiwgIktFWV9NT1ZFIiwgS0VZX01PVkUsIG1vZGUpOwotI2VuZGlmCi0jaWZkZWYgS0VZX05FWFQKLSAga2V5ZGVmKCJLZXlfTmV4dCIsICJLRVlfTkVYVCIsIEtFWV9ORVhULCBtb2RlKTsKLSNlbmRpZgotI2lmZGVmIEtFWV9PUEVOCi0gIGtleWRlZigiS2V5X09wZW4iLCAiS0VZX09QRU4iLCBLRVlfT1BFTiwgbW9kZSk7Ci0jZW5kaWYKLSNpZmRlZiBLRVlfT1BUSU9OUwotICBrZXlkZWYoIktleV9PcHRpb25zIiwgIktFWV9PUFRJT05TIiwgS0VZX09QVElPTlMsIG1vZGUpOwotI2VuZGlmCi0jaWZkZWYgS0VZX1BSRVZJT1VTCi0gIGtleWRlZigiS2V5X1ByZXZpb3VzIiwgIktFWV9QUkVWSU9VUyIsIEtFWV9QUkVWSU9VUywgbW9kZSk7Ci0jZW5kaWYKLSNpZmRlZiBLRVlfUkVETwotICBrZXlkZWYoIktleV9SZWRvIiwgIktFWV9SRURPIiwgS0VZX1JFRE8sIG1vZGUpOwotI2VuZGlmCi0jaWZkZWYgS0VZX1JFRkVSRU5DRQotICBrZXlkZWYoIktleV9SZWZlcmVuY2UiLCAiS0VZX1JFRkVSRU5DRSIsIEtFWV9SRUZFUkVOQ0UsIG1vZGUpOwotI2VuZGlmCi0jaWZkZWYgS0VZX1JFRlJFU0gKLSAga2V5ZGVmKCJLZXlfUmVmcmVzaCIsICJLRVlfUkVGUkVTSCIsIEtFWV9SRUZSRVNILCBtb2RlKTsKLSNlbmRpZgotI2lmZGVmIEtFWV9SRVBMQUNFCi0gIGtleWRlZigiS2V5X1JlcGxhY2UiLCAiS0VZX1JFUExBQ0UiLCBLRVlfUkVQTEFDRSwgbW9kZSk7Ci0jZW5kaWYKLSNpZmRlZiBLRVlfUkVTVEFSVAotICBrZXlkZWYoIktleV9SZXN0YXJ0IiwgIktFWV9SRVNUQVJUIiwgS0VZX1JFU1RBUlQsIG1vZGUpOwotI2VuZGlmCi0jaWZkZWYgS0VZX1JFU1VNRQotICBrZXlkZWYoIktleV9SZXN1bWUiLCAiS0VZX1JFU1VNRSIsIEtFWV9SRVNVTUUsIG1vZGUpOwotI2VuZGlmCi0jaWZkZWYgS0VZX1NBVkUKLSAga2V5ZGVmKCJLZXlfU2F2ZSIsICJLRVlfU0FWRSIsIEtFWV9TQVZFLCBtb2RlKTsKLSNlbmRpZgotI2lmZGVmIEtFWV9TQkVHCi0gIGtleWRlZigiS2V5X1NoaWZ0X0JlZ2luIiwgIktFWV9TQkVHIiwgS0VZX1NCRUcsIG1vZGUpOwotI2VuZGlmCi0jaWZkZWYgS0VZX1NDQU5DRUwKLSAga2V5ZGVmKCJLZXlfU2hpZnRfQ2FuY2VsIiwgIktFWV9TQ0FOQ0VMIiwgS0VZX1NDQU5DRUwsIG1vZGUpOwotI2VuZGlmCi0jaWZkZWYgS0VZX1NDT01NQU5ECi0gIGtleWRlZigiS2V5X1NoaWZ0X0NvbW1hbmQiLCAiS0VZX1NDT01NQU5EIiwgS0VZX1NDT01NQU5ELCBtb2RlKTsKLSNlbmRpZgotI2lmZGVmIEtFWV9TQ09QWQotICBrZXlkZWYoIktleV9TaGlmdF9Db3B5IiwgIktFWV9TQ09QWSIsIEtFWV9TQ09QWSwgbW9kZSk7Ci0jZW5kaWYKLSNpZmRlZiBLRVlfU0NSRUFURQotICBrZXlkZWYoIktleV9TaGlmdF9DcmVhdGUiLCAiS0VZX1NDUkVBVEUiLCBLRVlfU0NSRUFURSwgbW9kZSk7Ci0jZW5kaWYKLSNpZmRlZiBLRVlfU0RDCi0gIGtleWRlZigiS2V5X1NoaWZ0X0RlbGV0ZV9DaGFyIiwgIktFWV9TREMiLCBLRVlfU0RDLCBtb2RlKTsKLSNlbmRpZgotI2lmZGVmIEtFWV9TREwKLSAga2V5ZGVmKCJLZXlfU2hpZnRfRGVsZXRlX0xpbmUiLCAiS0VZX1NETCIsIEtFWV9TREwsIG1vZGUpOwotI2VuZGlmCi0jaWZkZWYgS0VZX1NFTEVDVAotICBrZXlkZWYoIktleV9TZWxlY3QiLCAiS0VZX1NFTEVDVCIsIEtFWV9TRUxFQ1QsIG1vZGUpOwotI2VuZGlmCi0jaWZkZWYgS0VZX1NFTkQKLSAga2V5ZGVmKCJLZXlfU2hpZnRfRW5kIiwgIktFWV9TRU5EIiwgS0VZX1NFTkQsIG1vZGUpOwotI2VuZGlmCi0jaWZkZWYgS0VZX1NFT0wKLSAga2V5ZGVmKCJLZXlfU2hpZnRfQ2xlYXJfRW5kX09mX0xpbmUiLCAiS0VZX1NFT0wiLCBLRVlfU0VPTCwgbW9kZSk7Ci0jZW5kaWYKLSNpZmRlZiBLRVlfU0VYSVQKLSAga2V5ZGVmKCJLZXlfU2hpZnRfRXhpdCIsICJLRVlfU0VYSVQiLCBLRVlfU0VYSVQsIG1vZGUpOwotI2VuZGlmCi0jaWZkZWYgS0VZX1NGSU5ECi0gIGtleWRlZigiS2V5X1NoaWZ0X0ZpbmQiLCAiS0VZX1NGSU5EIiwgS0VZX1NGSU5ELCBtb2RlKTsKLSNlbmRpZgotI2lmZGVmIEtFWV9TSEVMUAotICBrZXlkZWYoIktleV9TaGlmdF9IZWxwIiwgIktFWV9TSEVMUCIsIEtFWV9TSEVMUCwgbW9kZSk7Ci0jZW5kaWYKLSNpZmRlZiBLRVlfU0hPTUUKLSAga2V5ZGVmKCJLZXlfU2hpZnRfSG9tZSIsICJLRVlfU0hPTUUiLCBLRVlfU0hPTUUsIG1vZGUpOwotI2VuZGlmCi0jaWZkZWYgS0VZX1NJQwotICBrZXlkZWYoIktleV9TaGlmdF9JbnNlcnRfQ2hhciIsICJLRVlfU0lDIiwgS0VZX1NJQywgbW9kZSk7Ci0jZW5kaWYKLSNpZmRlZiBLRVlfU0xFRlQKLSAga2V5ZGVmKCJLZXlfU2hpZnRfQ3Vyc29yX0xlZnQiLCAiS0VZX1NMRUZUIiwgS0VZX1NMRUZULCBtb2RlKTsKLSNlbmRpZgotI2lmZGVmIEtFWV9TTUVTU0FHRQotICBrZXlkZWYoIktleV9TaGlmdF9NZXNzYWdlIiwgIktFWV9TTUVTU0FHRSIsIEtFWV9TTUVTU0FHRSwgbW9kZSk7Ci0jZW5kaWYKLSNpZmRlZiBLRVlfU01PVkUKLSAga2V5ZGVmKCJLZXlfU2hpZnRfTW92ZSIsICJLRVlfU01PVkUiLCBLRVlfU01PVkUsIG1vZGUpOwotI2VuZGlmCi0jaWZkZWYgS0VZX1NORVhUCi0gIGtleWRlZigiS2V5X1NoaWZ0X05leHRfUGFnZSIsICJLRVlfU05FWFQiLCBLRVlfU05FWFQsIG1vZGUpOwotI2VuZGlmCi0jaWZkZWYgS0VZX1NPUFRJT05TCi0gIGtleWRlZigiS2V5X1NoaWZ0X09wdGlvbnMiLCAiS0VZX1NPUFRJT05TIiwgS0VZX1NPUFRJT05TLCBtb2RlKTsKLSNlbmRpZgotI2lmZGVmIEtFWV9TUFJFVklPVVMKLSAga2V5ZGVmKCJLZXlfU2hpZnRfUHJldmlvdXNfUGFnZSIsICJLRVlfU1BSRVZJT1VTIiwgS0VZX1NQUkVWSU9VUywgbW9kZSk7Ci0jZW5kaWYKLSNpZmRlZiBLRVlfU1BSSU5UCi0gIGtleWRlZigiS2V5X1NoaWZ0X1ByaW50IiwgIktFWV9TUFJJTlQiLCBLRVlfU1BSSU5ULCBtb2RlKTsKLSNlbmRpZgotI2lmZGVmIEtFWV9TUkVETwotICBrZXlkZWYoIktleV9TaGlmdF9SZWRvIiwgIktFWV9TUkVETyIsIEtFWV9TUkVETywgbW9kZSk7Ci0jZW5kaWYKLSNpZmRlZiBLRVlfU1JFUExBQ0UKLSAga2V5ZGVmKCJLZXlfU2hpZnRfUmVwbGFjZSIsICJLRVlfU1JFUExBQ0UiLCBLRVlfU1JFUExBQ0UsIG1vZGUpOwotI2VuZGlmCi0jaWZkZWYgS0VZX1NSSUdIVAotICBrZXlkZWYoIktleV9TaGlmdF9DdXJzb3JfUmlnaHQiLCAiS0VZX1NSSUdIVCIsIEtFWV9TUklHSFQsIG1vZGUpOwotI2VuZGlmCi0jaWZkZWYgS0VZX1NSU1VNRQotICBrZXlkZWYoIktleV9TaGlmdF9SZXN1bWUiLCAiS0VZX1NSU1VNRSIsIEtFWV9TUlNVTUUsIG1vZGUpOwotI2VuZGlmCi0jaWZkZWYgS0VZX1NTQVZFCi0gIGtleWRlZigiS2V5X1NoaWZ0X1NhdmUiLCAiS0VZX1NTQVZFIiwgS0VZX1NTQVZFLCBtb2RlKTsKLSNlbmRpZgotI2lmZGVmIEtFWV9TU1VTUEVORAotICBrZXlkZWYoIktleV9TaGlmdF9TdXNwZW5kIiwgIktFWV9TU1VTUEVORCIsIEtFWV9TU1VTUEVORCwgbW9kZSk7Ci0jZW5kaWYKLSNpZmRlZiBLRVlfU1VORE8KLSAga2V5ZGVmKCJLZXlfU2hpZnRfVW5kbyIsICJLRVlfU1VORE8iLCBLRVlfU1VORE8sIG1vZGUpOwotI2VuZGlmCi0jaWZkZWYgS0VZX1NVU1BFTkQKLSAga2V5ZGVmKCJLZXlfU3VzcGVuZCIsICJLRVlfU1VTUEVORCIsIEtFWV9TVVNQRU5ELCBtb2RlKTsKLSNlbmRpZgotI2lmZGVmIEtFWV9VTkRPCi0gIGtleWRlZigiS2V5X1VuZG8iLCAiS0VZX1VORE8iLCBLRVlfVU5ETywgbW9kZSk7Ci0jZW5kaWYKLSNpZmRlZiBLRVlfTU9VU0UKLSAga2V5ZGVmKCJLZXlfTW91c2UiLCAiS0VZX01PVVNFIiwgS0VZX01PVVNFLCBtb2RlKTsKLSNlbmRpZgotI2lmZGVmIEtFWV9SRVNJWkUKLSAga2V5ZGVmKCJLZXlfUmVzaXplIiwgIktFWV9SRVNJWkUiLCBLRVlfUkVTSVpFLCBtb2RlKTsKLSNlbmRpZgotfQotCi0vKgotICogR2VuZXJhdGUgYSBjb25zdGFudCB3aXRoIHRoZSBnaXZlbiBuYW1lLiBUaGUgc2Vjb25kIHBhcmFtZXRlcgotICogaXMgYSByZWZlcmVuY2UgdG8gdGhlIEFDUyBjaGFyYWN0ZXIgaW4gdGhlIGFjc19tYXBbXSBhcnJheSBhbmQKLSAqIHdpbGwgYmUgdHJhbnNsYXRlZCBpbnRvIGFuIGluZGV4LgotICovCi1zdGF0aWMgdm9pZAotYWNzX2RlZihjb25zdCBjaGFyICpuYW1lLCBjaHR5cGUgKmEpCi17Ci0gIGludCBjID0gYSAtICZhY3NfbWFwWzBdOwotCi0gIHByaW50ZigiICAgJS0yNHMgOiBjb25zdGFudCBDaGFyYWN0ZXIgOj0gIiwgbmFtZSk7Ci0gIGlmIChpc3ByaW50KGMpICYmIChjICE9ICdgJykpCi0gICAgcHJpbnRmKCInJWMnO1xuIiwgYyk7Ci0gIGVsc2UKLSAgICBwcmludGYoIkNoYXJhY3RlcidWYWwgKCVkKTtcbiIsIGMpOwotfQotCi0vKgotICogR2VuZXJhdGUgdGhlIGNvbnN0YW50cyBmb3IgdGhlIEFDUyBjaGFyYWN0ZXJzCi0gKi8KLXN0YXRpYyB2b2lkCi1nZW5fYWNzKHZvaWQpCi17Ci0gIHByaW50ZigiICAgdHlwZSBDX0FDU19NYXAgaXMgYXJyYXkgKENoYXJhY3RlcidWYWwgKDApIC4uIENoYXJhY3RlcidWYWwgKDEyNykpXG4iKTsKLSAgcHJpbnRmKCIgICAgICAgIG9mIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyO1xuIik7Ci0jaWYgVVNFX1JFRU5UUkFOVCB8fCBCUk9LRU5fTElOS0VSCi0gIHByaW50ZigiICAgdHlwZSBDX0FDU19QdHIgaXMgYWNjZXNzIENfQUNTX01hcDtcbiIpOwotICBwcmludGYoIiAgIGZ1bmN0aW9uIEFDU19NYXAgcmV0dXJuIENfQUNTX1B0cjtcbiIpOwotICBwcmludGYoIiAgIHByYWdtYSBJbXBvcnQgKEMsIEFDU19NYXAsIFwiX25jX2Fjc19tYXBcIik7XG4iKTsKLSNlbHNlCi0gIHByaW50ZigiICAgQUNTX01hcCA6IENfQUNTX01hcDtcbiIpOwotICBwcmludGYoIiAgIHByYWdtYSBJbXBvcnQgKEMsIEFDU19NYXAsIFwiYWNzX21hcFwiKTtcbiIpOwotI2VuZGlmCi0gIHByaW50ZigiICAgLS1cbiIpOwotICBwcmludGYoIiAgIC0tXG4iKTsKLSAgcHJpbnRmKCIgICAtLSAgQ29uc3RhbnRzIGZvciBzZXZlcmFsIGNoYXJhY3RlcnMgZnJvbSB0aGUgQWx0ZXJuYXRlIENoYXJhY3RlciBTZXRcbiIpOwotICBwcmludGYoIiAgIC0tICBZb3UgbXVzdCB1c2UgdGhlc2UgY29uc3RhbnRzIGFzIGluZGljZXMgaW50byB0aGUgQUNTX01hcCBhcnJheVxuIik7Ci0gIHByaW50ZigiICAgLS0gIHRvIGdldCB0aGUgY29ycmVzcG9uZGluZyBhdHRyaWJ1dGVkIGNoYXJhY3RlciBhdCBydW50aW1lLlxuIik7Ci0gIHByaW50ZigiICAgLS1cbiIpOwotCi0jaWZkZWYgQUNTX1VMQ09STkVSCi0gIGFjc19kZWYoIkFDU19VcHBlcl9MZWZ0X0Nvcm5lciIsICZBQ1NfVUxDT1JORVIpOwotI2VuZGlmCi0jaWZkZWYgQUNTX0xMQ09STkVSCi0gIGFjc19kZWYoIkFDU19Mb3dlcl9MZWZ0X0Nvcm5lciIsICZBQ1NfTExDT1JORVIpOwotI2VuZGlmCi0jaWZkZWYgQUNTX1VSQ09STkVSCi0gIGFjc19kZWYoIkFDU19VcHBlcl9SaWdodF9Db3JuZXIiLCAmQUNTX1VSQ09STkVSKTsKLSNlbmRpZgotI2lmZGVmIEFDU19MUkNPUk5FUgotICBhY3NfZGVmKCJBQ1NfTG93ZXJfUmlnaHRfQ29ybmVyIiwgJkFDU19MUkNPUk5FUik7Ci0jZW5kaWYKLSNpZmRlZiBBQ1NfTFRFRQotICBhY3NfZGVmKCJBQ1NfTGVmdF9UZWUiLCAmQUNTX0xURUUpOwotI2VuZGlmCi0jaWZkZWYgQUNTX1JURUUKLSAgYWNzX2RlZigiQUNTX1JpZ2h0X1RlZSIsICZBQ1NfUlRFRSk7Ci0jZW5kaWYKLSNpZmRlZiBBQ1NfQlRFRQotICBhY3NfZGVmKCJBQ1NfQm90dG9tX1RlZSIsICZBQ1NfQlRFRSk7Ci0jZW5kaWYKLSNpZmRlZiBBQ1NfVFRFRQotICBhY3NfZGVmKCJBQ1NfVG9wX1RlZSIsICZBQ1NfVFRFRSk7Ci0jZW5kaWYKLSNpZmRlZiBBQ1NfSExJTkUKLSAgYWNzX2RlZigiQUNTX0hvcml6b250YWxfTGluZSIsICZBQ1NfSExJTkUpOwotI2VuZGlmCi0jaWZkZWYgQUNTX1ZMSU5FCi0gIGFjc19kZWYoIkFDU19WZXJ0aWNhbF9MaW5lIiwgJkFDU19WTElORSk7Ci0jZW5kaWYKLSNpZmRlZiBBQ1NfUExVUwotICBhY3NfZGVmKCJBQ1NfUGx1c19TeW1ib2wiLCAmQUNTX1BMVVMpOwotI2VuZGlmCi0jaWZkZWYgQUNTX1MxCi0gIGFjc19kZWYoIkFDU19TY2FuX0xpbmVfMSIsICZBQ1NfUzEpOwotI2VuZGlmCi0jaWZkZWYgQUNTX1M5Ci0gIGFjc19kZWYoIkFDU19TY2FuX0xpbmVfOSIsICZBQ1NfUzkpOwotI2VuZGlmCi0jaWZkZWYgQUNTX0RJQU1PTkQKLSAgYWNzX2RlZigiQUNTX0RpYW1vbmQiLCAmQUNTX0RJQU1PTkQpOwotI2VuZGlmCi0jaWZkZWYgQUNTX0NLQk9BUkQKLSAgYWNzX2RlZigiQUNTX0NoZWNrZXJfQm9hcmQiLCAmQUNTX0NLQk9BUkQpOwotI2VuZGlmCi0jaWZkZWYgQUNTX0RFR1JFRQotICBhY3NfZGVmKCJBQ1NfRGVncmVlIiwgJkFDU19ERUdSRUUpOwotI2VuZGlmCi0jaWZkZWYgQUNTX1BMTUlOVVMKLSAgYWNzX2RlZigiQUNTX1BsdXNfTWludXMiLCAmQUNTX1BMTUlOVVMpOwotI2VuZGlmCi0jaWZkZWYgQUNTX0JVTExFVAotICBhY3NfZGVmKCJBQ1NfQnVsbGV0IiwgJkFDU19CVUxMRVQpOwotI2VuZGlmCi0jaWZkZWYgQUNTX0xBUlJPVwotICBhY3NfZGVmKCJBQ1NfTGVmdF9BcnJvdyIsICZBQ1NfTEFSUk9XKTsKLSNlbmRpZgotI2lmZGVmIEFDU19SQVJST1cKLSAgYWNzX2RlZigiQUNTX1JpZ2h0X0Fycm93IiwgJkFDU19SQVJST1cpOwotI2VuZGlmCi0jaWZkZWYgQUNTX0RBUlJPVwotICBhY3NfZGVmKCJBQ1NfRG93bl9BcnJvdyIsICZBQ1NfREFSUk9XKTsKLSNlbmRpZgotI2lmZGVmIEFDU19VQVJST1cKLSAgYWNzX2RlZigiQUNTX1VwX0Fycm93IiwgJkFDU19VQVJST1cpOwotI2VuZGlmCi0jaWZkZWYgQUNTX0JPQVJECi0gIGFjc19kZWYoIkFDU19Cb2FyZF9PZl9TcXVhcmVzIiwgJkFDU19CT0FSRCk7Ci0jZW5kaWYKLSNpZmRlZiBBQ1NfTEFOVEVSTgotICBhY3NfZGVmKCJBQ1NfTGFudGVybiIsICZBQ1NfTEFOVEVSTik7Ci0jZW5kaWYKLSNpZmRlZiBBQ1NfQkxPQ0sKLSAgYWNzX2RlZigiQUNTX1NvbGlkX0Jsb2NrIiwgJkFDU19CTE9DSyk7Ci0jZW5kaWYKLSNpZmRlZiBBQ1NfUzMKLSAgYWNzX2RlZigiQUNTX1NjYW5fTGluZV8zIiwgJkFDU19TMyk7Ci0jZW5kaWYKLSNpZmRlZiBBQ1NfUzcKLSAgYWNzX2RlZigiQUNTX1NjYW5fTGluZV83IiwgJkFDU19TNyk7Ci0jZW5kaWYKLSNpZmRlZiBBQ1NfTEVRVUFMCi0gIGFjc19kZWYoIkFDU19MZXNzX09yX0VxdWFsIiwgJkFDU19MRVFVQUwpOwotI2VuZGlmCi0jaWZkZWYgQUNTX0dFUVVBTAotICBhY3NfZGVmKCJBQ1NfR3JlYXRlcl9Pcl9FcXVhbCIsICZBQ1NfR0VRVUFMKTsKLSNlbmRpZgotI2lmZGVmIEFDU19QSQotICBhY3NfZGVmKCJBQ1NfUEkiLCAmQUNTX1BJKTsKLSNlbmRpZgotI2lmZGVmIEFDU19ORVFVQUwKLSAgYWNzX2RlZigiQUNTX05vdF9FcXVhbCIsICZBQ1NfTkVRVUFMKTsKLSNlbmRpZgotI2lmZGVmIEFDU19TVEVSTElORwotICBhY3NfZGVmKCJBQ1NfU3RlcmxpbmciLCAmQUNTX1NURVJMSU5HKTsKLSNlbmRpZgotfQotCi0jZGVmaW5lIEdFTl9FVkVOVChuYW1lLHZhbHVlKSBcCi0gICBwcmludGYoIiAgICUtMjVzIDogY29uc3RhbnQgRXZlbnRfTWFzayA6PSA4IyUwMTFsbyM7XG4iLCBcCi0gICAgICAgICAgI25hbWUsIHZhbHVlKQotCi0jZGVmaW5lIEdFTl9NRVZFTlQobmFtZSkgXAotICAgcHJpbnRmKCIgICAlLTI1cyA6IGNvbnN0YW50IEV2ZW50X01hc2sgOj0gOCMlMDExbG8jO1xuIiwgXAotICAgICAgICAgICNuYW1lLCBuYW1lKQotCi1zdGF0aWMgdm9pZAotZ2VuX21vdXNlX2V2ZW50cyh2b2lkKQotewotICBtbWFza190IGFsbDEgPSAwOwotICBtbWFza190IGFsbDIgPSAwOwotICBtbWFza190IGFsbDMgPSAwOwotICBtbWFza190IGFsbDQgPSAwOwotCi0jaWZkZWYgQlVUVE9OMV9SRUxFQVNFRAotICBHRU5fTUVWRU5UKEJVVFRPTjFfUkVMRUFTRUQpOwotICBhbGwxIHw9IEJVVFRPTjFfUkVMRUFTRUQ7Ci0jZW5kaWYKLSNpZmRlZiBCVVRUT04xX1BSRVNTRUQKLSAgR0VOX01FVkVOVChCVVRUT04xX1BSRVNTRUQpOwotICBhbGwxIHw9IEJVVFRPTjFfUFJFU1NFRDsKLSNlbmRpZgotI2lmZGVmIEJVVFRPTjFfQ0xJQ0tFRAotICBHRU5fTUVWRU5UKEJVVFRPTjFfQ0xJQ0tFRCk7Ci0gIGFsbDEgfD0gQlVUVE9OMV9DTElDS0VEOwotI2VuZGlmCi0jaWZkZWYgQlVUVE9OMV9ET1VCTEVfQ0xJQ0tFRAotICBHRU5fTUVWRU5UKEJVVFRPTjFfRE9VQkxFX0NMSUNLRUQpOwotICBhbGwxIHw9IEJVVFRPTjFfRE9VQkxFX0NMSUNLRUQ7Ci0jZW5kaWYKLSNpZmRlZiBCVVRUT04xX1RSSVBMRV9DTElDS0VECi0gIEdFTl9NRVZFTlQoQlVUVE9OMV9UUklQTEVfQ0xJQ0tFRCk7Ci0gIGFsbDEgfD0gQlVUVE9OMV9UUklQTEVfQ0xJQ0tFRDsKLSNlbmRpZgotI2lmZGVmIEJVVFRPTjFfUkVTRVJWRURfRVZFTlQKLSAgR0VOX01FVkVOVChCVVRUT04xX1JFU0VSVkVEX0VWRU5UKTsKLSAgYWxsMSB8PSBCVVRUT04xX1JFU0VSVkVEX0VWRU5UOwotI2VuZGlmCi0jaWZkZWYgQlVUVE9OMl9SRUxFQVNFRAotICBHRU5fTUVWRU5UKEJVVFRPTjJfUkVMRUFTRUQpOwotICBhbGwyIHw9IEJVVFRPTjJfUkVMRUFTRUQ7Ci0jZW5kaWYKLSNpZmRlZiBCVVRUT04yX1BSRVNTRUQKLSAgR0VOX01FVkVOVChCVVRUT04yX1BSRVNTRUQpOwotICBhbGwyIHw9IEJVVFRPTjJfUFJFU1NFRDsKLSNlbmRpZgotI2lmZGVmIEJVVFRPTjJfQ0xJQ0tFRAotICBHRU5fTUVWRU5UKEJVVFRPTjJfQ0xJQ0tFRCk7Ci0gIGFsbDIgfD0gQlVUVE9OMl9DTElDS0VEOwotI2VuZGlmCi0jaWZkZWYgQlVUVE9OMl9ET1VCTEVfQ0xJQ0tFRAotICBHRU5fTUVWRU5UKEJVVFRPTjJfRE9VQkxFX0NMSUNLRUQpOwotICBhbGwyIHw9IEJVVFRPTjJfRE9VQkxFX0NMSUNLRUQ7Ci0jZW5kaWYKLSNpZmRlZiBCVVRUT04yX1RSSVBMRV9DTElDS0VECi0gIEdFTl9NRVZFTlQoQlVUVE9OMl9UUklQTEVfQ0xJQ0tFRCk7Ci0gIGFsbDIgfD0gQlVUVE9OMl9UUklQTEVfQ0xJQ0tFRDsKLSNlbmRpZgotI2lmZGVmIEJVVFRPTjJfUkVTRVJWRURfRVZFTlQKLSAgR0VOX01FVkVOVChCVVRUT04yX1JFU0VSVkVEX0VWRU5UKTsKLSAgYWxsMiB8PSBCVVRUT04yX1JFU0VSVkVEX0VWRU5UOwotI2VuZGlmCi0jaWZkZWYgQlVUVE9OM19SRUxFQVNFRAotICBHRU5fTUVWRU5UKEJVVFRPTjNfUkVMRUFTRUQpOwotICBhbGwzIHw9IEJVVFRPTjNfUkVMRUFTRUQ7Ci0jZW5kaWYKLSNpZmRlZiBCVVRUT04zX1BSRVNTRUQKLSAgR0VOX01FVkVOVChCVVRUT04zX1BSRVNTRUQpOwotICBhbGwzIHw9IEJVVFRPTjNfUFJFU1NFRDsKLSNlbmRpZgotI2lmZGVmIEJVVFRPTjNfQ0xJQ0tFRAotICBHRU5fTUVWRU5UKEJVVFRPTjNfQ0xJQ0tFRCk7Ci0gIGFsbDMgfD0gQlVUVE9OM19DTElDS0VEOwotI2VuZGlmCi0jaWZkZWYgQlVUVE9OM19ET1VCTEVfQ0xJQ0tFRAotICBHRU5fTUVWRU5UKEJVVFRPTjNfRE9VQkxFX0NMSUNLRUQpOwotICBhbGwzIHw9IEJVVFRPTjNfRE9VQkxFX0NMSUNLRUQ7Ci0jZW5kaWYKLSNpZmRlZiBCVVRUT04zX1RSSVBMRV9DTElDS0VECi0gIEdFTl9NRVZFTlQoQlVUVE9OM19UUklQTEVfQ0xJQ0tFRCk7Ci0gIGFsbDMgfD0gQlVUVE9OM19UUklQTEVfQ0xJQ0tFRDsKLSNlbmRpZgotI2lmZGVmIEJVVFRPTjNfUkVTRVJWRURfRVZFTlQKLSAgR0VOX01FVkVOVChCVVRUT04zX1JFU0VSVkVEX0VWRU5UKTsKLSAgYWxsMyB8PSBCVVRUT04zX1JFU0VSVkVEX0VWRU5UOwotI2VuZGlmCi0jaWZkZWYgQlVUVE9ONF9SRUxFQVNFRAotICBHRU5fTUVWRU5UKEJVVFRPTjRfUkVMRUFTRUQpOwotICBhbGw0IHw9IEJVVFRPTjRfUkVMRUFTRUQ7Ci0jZW5kaWYKLSNpZmRlZiBCVVRUT040X1BSRVNTRUQKLSAgR0VOX01FVkVOVChCVVRUT040X1BSRVNTRUQpOwotICBhbGw0IHw9IEJVVFRPTjRfUFJFU1NFRDsKLSNlbmRpZgotI2lmZGVmIEJVVFRPTjRfQ0xJQ0tFRAotICBHRU5fTUVWRU5UKEJVVFRPTjRfQ0xJQ0tFRCk7Ci0gIGFsbDQgfD0gQlVUVE9ONF9DTElDS0VEOwotI2VuZGlmCi0jaWZkZWYgQlVUVE9ONF9ET1VCTEVfQ0xJQ0tFRAotICBHRU5fTUVWRU5UKEJVVFRPTjRfRE9VQkxFX0NMSUNLRUQpOwotICBhbGw0IHw9IEJVVFRPTjRfRE9VQkxFX0NMSUNLRUQ7Ci0jZW5kaWYKLSNpZmRlZiBCVVRUT040X1RSSVBMRV9DTElDS0VECi0gIEdFTl9NRVZFTlQoQlVUVE9ONF9UUklQTEVfQ0xJQ0tFRCk7Ci0gIGFsbDQgfD0gQlVUVE9ONF9UUklQTEVfQ0xJQ0tFRDsKLSNlbmRpZgotI2lmZGVmIEJVVFRPTjRfUkVTRVJWRURfRVZFTlQKLSAgR0VOX01FVkVOVChCVVRUT040X1JFU0VSVkVEX0VWRU5UKTsKLSAgYWxsNCB8PSBCVVRUT040X1JFU0VSVkVEX0VWRU5UOwotI2VuZGlmCi0jaWZkZWYgQlVUVE9OX0NUUkwKLSAgR0VOX01FVkVOVChCVVRUT05fQ1RSTCk7Ci0jZW5kaWYKLSNpZmRlZiBCVVRUT05fU0hJRlQKLSAgR0VOX01FVkVOVChCVVRUT05fU0hJRlQpOwotI2VuZGlmCi0jaWZkZWYgQlVUVE9OX0FMVAotICBHRU5fTUVWRU5UKEJVVFRPTl9BTFQpOwotI2VuZGlmCi0jaWZkZWYgUkVQT1JUX01PVVNFX1BPU0lUSU9OCi0gIEdFTl9NRVZFTlQoUkVQT1JUX01PVVNFX1BPU0lUSU9OKTsKLSNlbmRpZgotI2lmZGVmIEFMTF9NT1VTRV9FVkVOVFMKLSAgR0VOX01FVkVOVChBTExfTU9VU0VfRVZFTlRTKTsKLSNlbmRpZgotCi0gIEdFTl9FVkVOVChCVVRUT04xX0VWRU5UUywgYWxsMSk7Ci0gIEdFTl9FVkVOVChCVVRUT04yX0VWRU5UUywgYWxsMik7Ci0gIEdFTl9FVkVOVChCVVRUT04zX0VWRU5UUywgYWxsMyk7Ci0gIEdFTl9FVkVOVChCVVRUT040X0VWRU5UUywgYWxsNCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi13cmFwX29uZV92YXIoY29uc3QgY2hhciAqY192YXIsCi0JICAgICBjb25zdCBjaGFyICpjX3R5cGUsCi0JICAgICBjb25zdCBjaGFyICphZGFfZnVuYywKLQkgICAgIGNvbnN0IGNoYXIgKmFkYV90eXBlKQotewotI2lmIFVTRV9SRUVOVFJBTlQKLSAgLyogbXVzdCB3cmFwIHZhcmlhYmxlcyAqLwotICBwcmludGYoIlxuIik7Ci0gIHByaW50ZigiICAgZnVuY3Rpb24gJXMgcmV0dXJuICVzXG4iLCBhZGFfZnVuYywgYWRhX3R5cGUpOwotICBwcmludGYoIiAgIGlzXG4iKTsKLSAgcHJpbnRmKCIgICAgICBmdW5jdGlvbiBSZXN1bHQgcmV0dXJuICVzO1xuIiwgY190eXBlKTsKLSAgcHJpbnRmKCIgICAgICBwcmFnbWEgSW1wb3J0IChDLCBSZXN1bHQsIFwiX25jXyVzXCIpO1xuIiwgY192YXIpOwotICBwcmludGYoIiAgIGJlZ2luXG4iKTsKLSAgaWYgKHN0cmNtcChjX3R5cGUsIGFkYV90eXBlKSkKLSAgICBwcmludGYoIiAgICAgIHJldHVybiAlcyAoUmVzdWx0KTtcbiIsIGFkYV90eXBlKTsKLSAgZWxzZQotICAgIHByaW50ZigiICAgICAgcmV0dXJuIFJlc3VsdDtcbiIpOwotICBwcmludGYoIiAgIGVuZCAlcztcbiIsIGFkYV9mdW5jKTsKLSNlbHNlCi0gIC8qIGdsb2JhbCB2YXJpYWJsZXMgYXJlIHJlYWxseSBnbG9iYWwgKi8KLSAgcHJpbnRmKCJcbiIpOwotICBwcmludGYoIiAgIGZ1bmN0aW9uICVzIHJldHVybiAlc1xuIiwgYWRhX2Z1bmMsIGFkYV90eXBlKTsKLSAgcHJpbnRmKCIgICBpc1xuIik7Ci0gIHByaW50ZigiICAgICAgUmVzdWx0IDogJXM7XG4iLCBjX3R5cGUpOwotICBwcmludGYoIiAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFJlc3VsdCwgXCIlc1wiKTtcbiIsIGNfdmFyKTsKLSAgcHJpbnRmKCIgICBiZWdpblxuIik7Ci0gIGlmIChzdHJjbXAoY190eXBlLCBhZGFfdHlwZSkpCi0gICAgcHJpbnRmKCIgICAgICByZXR1cm4gJXMgKFJlc3VsdCk7XG4iLCBhZGFfdHlwZSk7Ci0gIGVsc2UKLSAgICBwcmludGYoIiAgICAgIHJldHVybiBSZXN1bHQ7XG4iKTsKLSAgcHJpbnRmKCIgICBlbmQgJXM7XG4iLCBhZGFfZnVuYyk7Ci0jZW5kaWYKLX0KLQotI2RlZmluZSBHRU5fUFVCTElDX1ZBUihjX3ZhciwgY190eXBlLCBhZGFfZnVuYywgYWRhX3R5cGUpIFwKLQl3cmFwX29uZV92YXIoI2NfdmFyLCAjY190eXBlLCAjYWRhX2Z1bmMsICNhZGFfdHlwZSkKLQotc3RhdGljIHZvaWQKLWdlbl9wdWJsaWNfdmFycyh2b2lkKQotewotICBHRU5fUFVCTElDX1ZBUihzdGRzY3IsIFdpbmRvdywgU3RhbmRhcmRfV2luZG93LCBXaW5kb3cpOwotICBHRU5fUFVCTElDX1ZBUihjdXJzY3IsIFdpbmRvdywgQ3VycmVudF9XaW5kb3csIFdpbmRvdyk7Ci0gIEdFTl9QVUJMSUNfVkFSKExJTkVTLCBDX0ludCwgTGluZXMsIExpbmVfQ291bnQpOwotICBHRU5fUFVCTElDX1ZBUihDT0xTLCBDX0ludCwgQ29sdW1ucywgQ29sdW1uX0NvdW50KTsKLSAgR0VOX1BVQkxJQ19WQVIoVEFCU0laRSwgQ19JbnQsIFRhYl9TaXplLCBOYXR1cmFsKTsKLSAgR0VOX1BVQkxJQ19WQVIoQ09MT1JTLCBDX0ludCwgTnVtYmVyX09mX0NvbG9ycywgTmF0dXJhbCk7Ci0gIEdFTl9QVUJMSUNfVkFSKENPTE9SX1BBSVJTLCBDX0ludCwgTnVtYmVyX09mX0NvbG9yX1BhaXJzLCBOYXR1cmFsKTsKLX0KLQotLyoKLSAqIE91dHB1dCBzb21lIGNvbW1lbnQgbGluZXMgaW5kaWNhdGluZyB0aGF0IHRoZSBmaWxlIGlzIGdlbmVyYXRlZC4KLSAqIFRoZSBuYW1lIHBhcmFtZXRlciBpcyB0aGUgbmFtZSBvZiB0aGUgZmFjaWxpdHkgdG8gYmUgdXNlZCBpbgotICogdGhlIGNvbW1lbnQuCi0gKi8KLXN0YXRpYyB2b2lkCi1wcm9sb2d1ZShjb25zdCBjaGFyICpuYW1lKQotewotICBwcmludGYoIi0tICAlcyBiaW5kaW5nLlxuIiwgbmFtZSk7Ci0gIHByaW50ZigiLS0gIFRoaXMgbW9kdWxlIGlzIGdlbmVyYXRlZC4gUGxlYXNlIGRvbid0IGNoYW5nZSBpdCBtYW51YWxseSFcbiIpOwotICBwcmludGYoIi0tICBSdW4gdGhlIGdlbmVyYXRvciBpbnN0ZWFkLlxuLS0gIHwiKTsKLQotICBwcmludGYoImRlZmluZShgTTRfQklUX09SREVSJyxgJXNfT3JkZXJfRmlyc3QnKSIsCi0JIGxpdHRsZV9lbmRpYW4gPyAiTG93IiA6ICJIaWdoIik7Ci19Ci0KLS8qCi0gKiBXcml0ZSB0aGUgcHJvbG9ndWUgZm9yIHRoZSBjdXJzZXMgZmFjaWxpdHkgYW5kIG1ha2Ugc3VyZSB0aGF0Ci0gKiBLRVlfTUlOIGFuZCBLRVlfTUFYIGFyZSBkZWZpbmVkIGZvciB0aGUgcmVzdCBvZiB0aGlzIHNvdXJjZS4KLSAqLwotc3RhdGljIHZvaWQKLWJhc2VkZWZzKHZvaWQpCi17Ci0gIHByb2xvZ3VlKCJjdXJzZXMiKTsKICNpZm5kZWYgS0VZX01BWAogIyAgZGVmaW5lIEtFWV9NQVggMDc3NwogI2VuZGlmCi0gIHByaW50ZigiZGVmaW5lKGBNNF9LRVlfTUFYJyxgOCMlbyMnKSIsIEtFWV9NQVgpOwogI2lmbmRlZiBLRVlfTUlOCiAjICBkZWZpbmUgS0VZX01JTiAwNDAxCiAjZW5kaWYKLSAgaWYgKEtFWV9NSU4gPT0gMjU2KQotICAgIHsKLSAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5leHBlY3RlZCB2YWx1ZSBmb3IgS0VZX01JTjogJWRcbiIsIEtFWV9NSU4pOwotICAgICAgZXhpdCgxKTsKLSAgICB9Ci0gIHByaW50ZigiZGVmaW5lKGBNNF9TUEVDSUFMX0ZJUlNUJyxgOCMlbyMnKSIsIEtFWV9NSU4gLSAxKTsKLX0KIAotLyoKLSAqIFdyaXRlIG91dCB0aGUgY29tbWVudCBsaW5lcyBmb3IgdGhlIG1lbnUgZmFjaWxpdHkKLSAqLwotc3RhdGljIHZvaWQKLW1lbnVfYmFzZWRlZnModm9pZCkKK3N0YXRpYyBVQ0hBUgorYml0X2lzX3NldChjb25zdCBVQ0hBUiAqIGNvbnN0IGRhdGEsCisJICAgY29uc3QgVUlOVCBvZmZzZXQpCiB7Ci0gIHByb2xvZ3VlKCJtZW51Iik7CisgIGNvbnN0IFVDSEFSIGJ5dGUgPSBkYXRhW29mZnNldCA+PiAzXTsKKyAgVUlOVCBiaXQ7CisKKyAgaWYgKGxpdHRsZV9lbmRpYW4pCisgICAgYml0ID0gb2Zmc2V0OwkJLyogb2Zmc2V0ICovCisgIGVsc2UJCQkJLyogb3IgKi8KKyAgICBiaXQgPSB+b2Zmc2V0OwkJLyogNyAtIG9mZnNldCAqLworICBiaXQgJj0gNzsJCQkvKiBtb2R1bG8gOCAqLworICByZXR1cm4gYnl0ZSAmIChVQ0hBUikgKDEgPDwgYml0KTsKIH0KIAotLyoKLSAqIFdyaXRlIG91dCB0aGUgY29tbWVudCBsaW5lcyBmb3IgdGhlIGZvcm0gZmFjaWxpdHkKLSAqLwotc3RhdGljIHZvaWQKLWZvcm1fYmFzZWRlZnModm9pZCkKLXsKLSAgcHJvbG9ndWUoImZvcm0iKTsKLX0KLQotLyoKLSAqIFdyaXRlIG91dCB0aGUgY29tbWVudCBsaW5lcyBmb3IgdGhlIG1vdXNlIGZhY2lsaXR5Ci0gKi8KLXN0YXRpYyB2b2lkCi1tb3VzZV9iYXNlZGVmcyh2b2lkKQotewotICBwcm9sb2d1ZSgibW91c2UiKTsKLX0KLQotLyoKLSAqIFdyaXRlIHRoZSBkZWZpbml0aW9uIG9mIGEgc2luZ2xlIGNvbG9yCi0gKi8KLXN0YXRpYyB2b2lkCi1jb2xvcl9kZWYoY29uc3QgY2hhciAqbmFtZSwgaW50IHZhbHVlKQotewotICBwcmludGYoIiAgICUtMTZzIDogY29uc3RhbnQgQ29sb3JfTnVtYmVyIDo9ICVkO1xuIiwgbmFtZSwgdmFsdWUpOwotfQotCi0vKgotICogR2VuZXJhdGUgYWxsIGNvbG9yIGRlZmluaXRpb25zCi0gKi8KLXN0YXRpYyB2b2lkCi1nZW5fY29sb3Iodm9pZCkKLXsKLSNpZiBIQVZFX1VTRV9ERUZBVUxUX0NPTE9SUwotICBjb2xvcl9kZWYoIkRlZmF1bHRfQ29sb3IiLCAtMSk7Ci0jZW5kaWYKLSNpZmRlZiBDT0xPUl9CTEFDSwotICBjb2xvcl9kZWYoIkJsYWNrIiwgQ09MT1JfQkxBQ0spOwotI2VuZGlmCi0jaWZkZWYgQ09MT1JfUkVECi0gIGNvbG9yX2RlZigiUmVkIiwgQ09MT1JfUkVEKTsKLSNlbmRpZgotI2lmZGVmIENPTE9SX0dSRUVOCi0gIGNvbG9yX2RlZigiR3JlZW4iLCBDT0xPUl9HUkVFTik7Ci0jZW5kaWYKLSNpZmRlZiBDT0xPUl9ZRUxMT1cKLSAgY29sb3JfZGVmKCJZZWxsb3ciLCBDT0xPUl9ZRUxMT1cpOwotI2VuZGlmCi0jaWZkZWYgQ09MT1JfQkxVRQotICBjb2xvcl9kZWYoIkJsdWUiLCBDT0xPUl9CTFVFKTsKLSNlbmRpZgotI2lmZGVmIENPTE9SX01BR0VOVEEKLSAgY29sb3JfZGVmKCJNYWdlbnRhIiwgQ09MT1JfTUFHRU5UQSk7Ci0jZW5kaWYKLSNpZmRlZiBDT0xPUl9DWUFOCi0gIGNvbG9yX2RlZigiQ3lhbiIsIENPTE9SX0NZQU4pOwotI2VuZGlmCi0jaWZkZWYgQ09MT1JfV0hJVEUKLSAgY29sb3JfZGVmKCJXaGl0ZSIsIENPTE9SX1dISVRFKTsKLSNlbmRpZgotfQotCi0vKgotICogR2VuZXJhdGUgdGhlIGxpbmtlciBvcHRpb25zIGZvciB0aGUgYmFzZSBmYWNpbGl0eQotICovCi1zdGF0aWMgdm9pZAotZ2VuX2xpbmtvcHRzKHZvaWQpCi17Ci0gIHByaW50ZigiICAgcHJhZ21hIExpbmtlcl9PcHRpb25zIChcIi1sbmN1cnNlcyVzXCIpO1xuIiwgbW9kZWwpOwotfQotCi0vKgotICogR2VuZXJhdGUgdGhlIGxpbmtlciBvcHRpb25zIGZvciB0aGUgbWVudSBmYWNpbGl0eQotICovCi1zdGF0aWMgdm9pZAotZ2VuX21lbnVfbGlua29wdHModm9pZCkKLXsKLSAgcHJpbnRmKCIgICBwcmFnbWEgTGlua2VyX09wdGlvbnMgKFwiLWxtZW51JXNcIik7XG4iLCBtb2RlbCk7Ci19Ci0KLS8qCi0gKiBHZW5lcmF0ZSB0aGUgbGlua2VyIG9wdGlvbnMgZm9yIHRoZSBmb3JtIGZhY2lsaXR5Ci0gKi8KLXN0YXRpYyB2b2lkCi1nZW5fZm9ybV9saW5rb3B0cyh2b2lkKQotewotICBwcmludGYoIiAgIHByYWdtYSBMaW5rZXJfT3B0aW9ucyAoXCItbGZvcm0lc1wiKTtcbiIsIG1vZGVsKTsKLX0KLQotLyoKLSAqIEdlbmVyYXRlIHRoZSBsaW5rZXIgb3B0aW9ucyBmb3IgdGhlIHBhbmVsIGZhY2lsaXR5Ci0gKi8KLXN0YXRpYyB2b2lkCi1nZW5fcGFuZWxfbGlua29wdHModm9pZCkKLXsKLSAgcHJpbnRmKCIgICBwcmFnbWEgTGlua2VyX09wdGlvbnMgKFwiLWxwYW5lbCVzXCIpO1xuIiwgbW9kZWwpOwotfQotCi1zdGF0aWMgdm9pZAotZ2VuX3ZlcnNpb25faW5mbyh2b2lkKQotewotICBzdGF0aWMgY29uc3QgY2hhciAqdjEgPQotICAiICAgTkNfTWFqb3JfVmVyc2lvbiA6IGNvbnN0YW50IDo9ICVkOyAtLSAgTWFqb3IgdmVyc2lvbiBvZiB0aGUgbGlicmFyeVxuIjsKLSAgc3RhdGljIGNvbnN0IGNoYXIgKnYyID0KLSAgIiAgIE5DX01pbm9yX1ZlcnNpb24gOiBjb25zdGFudCA6PSAlZDsgLS0gIE1pbm9yIHZlcnNpb24gb2YgdGhlIGxpYnJhcnlcbiI7Ci0gIHN0YXRpYyBjb25zdCBjaGFyICp2MyA9Ci0gICIgICBOQ19WZXJzaW9uIDogY29uc3RhbnQgU3RyaW5nIDo9ICVjJWQuJWQlYzsgIC0tICBWZXJzaW9uIG9mIGxpYnJhcnlcbiI7Ci0KLSAgcHJpbnRmKHYxLCBOQ1VSU0VTX1ZFUlNJT05fTUFKT1IpOwotICBwcmludGYodjIsIE5DVVJTRVNfVkVSU0lPTl9NSU5PUik7Ci0gIHByaW50Zih2MywgJyInLCBOQ1VSU0VTX1ZFUlNJT05fTUFKT1IsIE5DVVJTRVNfVkVSU0lPTl9NSU5PUiwgJyInKTsKLX0KLQorLyogRmluZCBsb3dlc3QgYW5kIGhpZ2hlc3QgdXNlZCBvZmZzZXQgaW4gYSBieXRlIGFycmF5LiAqLworLyogUmV0dXJucyAwIGlmIGFuZCBvbmx5IGlmIGFsbCBiaXRzIGFyZSB1bnNldC4gKi8KIHN0YXRpYyBpbnQKLWV0aV9nZW4oY2hhciAqYnVmLCBpbnQgY29kZSwgY29uc3QgY2hhciAqbmFtZSwgaW50ICpldGltaW4sIGludCAqZXRpbWF4KQorZmluZF9wb3MoY29uc3QgVUNIQVIgKiBjb25zdCBkYXRhLAorCSBjb25zdCBVSU5UIHNpemVvZl9kYXRhLAorCSBVSU5UICogY29uc3QgbG93LAorCSBVSU5UICogY29uc3QgaGlnaCkKIHsKLSAgc3ByaW50ZihidWYsICIgICBFXyUtMTZzIDogY29uc3RhbnQgRXRpX0Vycm9yIDo9ICVkO1xuIiwgbmFtZSwgY29kZSk7Ci0gIGlmIChjb2RlIDwgKmV0aW1pbikKLSAgICAqZXRpbWluID0gY29kZTsKLSAgaWYgKGNvZGUgPiAqZXRpbWF4KQotICAgICpldGltYXggPSBjb2RlOwotICByZXR1cm4gc3RybGVuKGJ1Zik7CisgIGNvbnN0IFVJTlQgbGFzdCA9IChzaXplb2ZfZGF0YSA8PCAzKSAtIDE7CisgIFVJTlQgb2Zmc2V0OworCisgIGZvciAob2Zmc2V0ID0gbGFzdDsgIWJpdF9pc19zZXQoZGF0YSwgb2Zmc2V0KTsgb2Zmc2V0LS0pCisgICAgaWYgKCFvZmZzZXQpCQkvKiBBbGwgYml0cyBhcmUgMC4gKi8KKyAgICAgIHJldHVybiAwOworICAqaGlnaCA9IG9mZnNldDsKKworICBmb3IgKG9mZnNldCA9IDA7ICFiaXRfaXNfc2V0KGRhdGEsIG9mZnNldCk7IG9mZnNldCsrKQorICAgIHsKKyAgICB9CisgICpsb3cgPSBvZmZzZXQ7CisKKyAgcmV0dXJuIC0xOwogfQogCi1zdGF0aWMgdm9pZAotZ2VuX29mZnNldHModm9pZCkKLXsKLSAgY29uc3QgY2hhciAqc19ib29sID0gIiI7CisjZGVmaW5lIFBSSU5UX0JJVE1BU0soY190eXBlLCBhZGFfbmFtZSwgbWFza19tYWNybykgICAgICAgICAgICAgICAgICAgICBcCisgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgVUlOVCBmaXJzdCwgbGFzdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY190eXBlIG1hc2sgPSAobWFza19tYWNybyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKCFmaW5kX3BvcyAoKFVDSEFSICopJm1hc2ssIHNpemVvZiAobWFzayksICZmaXJzdCwgJmxhc3QpKSAgICAgICBcCisgICAgICBteV9lcnJvciAoImZhaWxlZCB0byBsb2NhdGUgIiBhZGFfbmFtZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcHJpbnRfY29uc3RhbnQgKGFkYV9uYW1lICJfRmlyc3QiLCBmaXJzdCk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcHJpbnRfY29uc3RhbnQgKGFkYV9uYW1lICJfTGFzdCIsIGxhc3QpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0KIAotICBpZiAoc2l6ZW9mKGJvb2wpID09IHNpemVvZihjaGFyKSkKLSAgICB7Ci0gICAgICBzX2Jvb2wgPSAiY2hhciI7Ci0gICAgfQotICBlbHNlIGlmIChzaXplb2YoYm9vbCkgPT0gc2l6ZW9mKHNob3J0KSkKLSAgICB7Ci0gICAgICBzX2Jvb2wgPSAic2hvcnQiOwotICAgIH0KLSAgZWxzZSBpZiAoc2l6ZW9mKGJvb2wpID09IHNpemVvZihpbnQpKQotICAgIHsKLSAgICAgIHNfYm9vbCA9ICJpbnQiOwotICAgIH0KLSAgcHJpbnRmKCIgICBTaXplb2YlLSpzIDogY29uc3RhbnQgTmF0dXJhbCA6PSAlMmxkOyAtLSAgJXNcbiIsCi0JIDEyLCAiX2Jvb2wiLCAobG9uZylzaXplb2YoYm9vbCksICJib29sIik7CisjZGVmaW5lIFBSSU5UX05BTUVEX0JJVE1BU0soY190eXBlLCBtYXNrX21hY3JvKSAgICAgICAgIFwKKyAgUFJJTlRfQklUTUFTSyAoY190eXBlLCAjbWFza19tYWNybywgbWFza19tYWNybykKIAotICAvKiBJbiBuY3Vyc2VzIF9tYXh5IGFuZCBfbWF4eCBuZWVkcyBhbiBvZmZzZXQgZm9yIHRoZSAicHVibGljIgotICAgKiB2YWx1ZQotICAgKi8KLSAgcHJpbnRmKCIgICBPZmZzZXQlLSpzIDogY29uc3RhbnQgTmF0dXJhbCA6PSAlMmQ7IC0tICAlc1xuIiwKLQkgMTIsICJfWFkiLCAxLCAiaW50Iik7Ci0gIHByaW50ZigiXG4iKTsKLSAgcHJpbnRmKCIgICB0eXBlIEN1cnNlc19Cb29sIGlzIG1vZCAyICoqIEludGVyZmFjZXMuQy4lcydTaXplO1xuIiwgc19ib29sKTsKLX0KKyNkZWZpbmUgU1RSVUNUX09GRlNFVChyZWNvcmQsIGZpZWxkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBVSU5UIGZpcnN0LCBsYXN0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICByZWNvcmQgbWFzazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtZW1zZXQgKCZtYXNrLCAwLCBzaXplb2YgKG1hc2spKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtZW1zZXQgKCZtYXNrLmZpZWxkLCAweGZmLCBzaXplb2YobWFzay5maWVsZCkpOyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoIWZpbmRfcG9zICgoVUNIQVIgKikmbWFzaywgc2l6ZW9mIChtYXNrKSwgJmZpcnN0LCAmbGFzdCkpICAgICAgIFwKKyAgICAgIG15X2Vycm9yICgiZmFpbGVkIHRvIGxvY2F0ZSIgI3JlY29yZCAiXyIgI2ZpZWxkKTsgICAgICAgICAgICAgICAgIFwKKyAgICBwcmludF9jb25zdGFudCAoI3JlY29yZCAiXyIgI2ZpZWxkICJfRmlyc3QiLCBmaXJzdCk7ICAgICAgICAgICAgICAgIFwKKyAgICBwcmludF9jb25zdGFudCAoI3JlY29yZCAiXyIgI2ZpZWxkICJfTGFzdCIsIGxhc3QpOyAgICAgICAgICAgICAgICAgIFwKKyAgfQogCi0vKgotICogbWFpbigpIGV4cGVjdHMgdHdvIGFyZ3VtZW50cyBvbiB0aGUgY29tbWFuZGxpbmUsIGJvdGggc2luZ2xlIGNoYXJhY3RlcnMuCi0gKiBUaGUgZmlyc3QgY2hhcmFjdGVyIGRlbm90ZXMgdGhlIGZhY2lsaXR5IGZvciB3aGljaCB3ZSBnZW5lcmF0ZSBvdXRwdXQuCi0gKiBQb3NzaWJsZSB2YWx1ZXMgYXJlCi0gKiAgIEIgLSBCYXNlCi0gKiAgIE0gLSBNZW51cwotICogICBGIC0gRm9ybXMKLSAqICAgUCAtIFBvaW50ZXIgRGV2aWNlIChNb3VzZSkKLSAqICAgRSAtIEVUSSBiYXNlIGRlZmluaXRpb25zCi0gKgotICogVGhlIHNlY29uZCBjaGFyYWN0ZXIgdGhlbiBkZW5vdGVzIHRoZSBzcGVjaWZpYyBvdXRwdXQgdGhhdCBzaG91bGQgYmUKLSAqIGdlbmVyYXRlZCBmb3IgdGhlIHNlbGVjdGVkIGZhY2lsaXR5LgotICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICBTdGFydCBvZiBtYWluICgpLiAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKIGludAotbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqYXJndltdKQogewotICBpbnQgeCA9IDB4MTIzNDU2Nzg7Ci0gIGNoYXIgKnMgPSAoY2hhciAqKSZ4OworICBjb25zdCBpbnQgeCA9IDB4MTIzNDU2Nzg7CiAKLSAgaWYgKCpzID09IDB4NzgpCi0gICAgbGl0dGxlX2VuZGlhbiA9IDE7CisgIGxpdHRsZV9lbmRpYW4gPSAoKigoY29uc3QgY2hhciAqKSZ4KSA9PSAweDc4KTsKIAotICBpZiAoYXJnYyAhPSA0KQotICAgIGV4aXQoMSk7Ci0gIG1vZGVsID0gKisrYXJndjsKKyAgbXlfcHJvZ3JhbV9pbnZvY2F0aW9uX25hbWUgPSBhcmd2WzBdOwogCi0gIHN3aXRjaCAoYXJndlsxXVswXSkKLSAgICB7Ci0gICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLSAgICBjYXNlICdCJzoJCQkvKiBUaGUgQmFzZSBmYWNpbGl0eSAqLwotICAgICAgc3dpdGNoIChhcmd2WzJdWzBdKQotCXsKLQljYXNlICdBJzoJCS8qIGNodHlwZSB0cmFuc2xhdGlvbiBpbnRvIEFkYTk1IHJlY29yZCB0eXBlICovCi0JICBnZW5fYXR0cl9zZXQoIkNoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0Iik7Ci0JICBicmVhazsKLQljYXNlICdCJzoJCS8qIHdyaXRlIHNvbWUgaW5pdGlhbCBjb21tZW50IGxpbmVzICovCi0JICBiYXNlZGVmcygpOwotCSAgYnJlYWs7Ci0JY2FzZSAnQyc6CQkvKiBnZW5lcmF0ZSBjb2xvciBjb25zdGFudHMgKi8KLQkgIGdlbl9jb2xvcigpOwotCSAgYnJlYWs7Ci0JY2FzZSAnRCc6CQkvKiBnZW5lcmF0ZSBkaXNwbGFjZW1lbnRzIG9mIGZpZWxkcyBpbiBXSU5ET1cgc3RydWN0LiAqLwotCSAgZ2VuX29mZnNldHMoKTsKLQkgIGJyZWFrOwotCWNhc2UgJ0UnOgkJLyogZ2VuZXJhdGUgTW91c2UgRXZlbnQgY29kZXMgKi8KLQkgIGdlbl9tb3VzZV9ldmVudHMoKTsKLQkgIGJyZWFrOwotCWNhc2UgJ0snOgkJLyogdHJhbnNsYXRpb24gb2Yga2V5Y29kZXMgKi8KLQkgIGdlbl9rZXlkZWZzKDApOwotCSAgYnJlYWs7Ci0JY2FzZSAnTCc6CQkvKiBnZW5lcmF0ZSB0aGUgTGlua2VyX09wdGlvbnMgcHJhZ21hICovCi0JICBnZW5fbGlua29wdHMoKTsKLQkgIGJyZWFrOwotCWNhc2UgJ00nOgkJLyogZ2VuZXJhdGUgY29uc3RhbnRzIGZvciB0aGUgQUNTIGNoYXJhY3RlcnMgKi8KLQkgIGdlbl9hY3MoKTsKLQkgIGJyZWFrOwotCWNhc2UgJ08nOgkJLyogZ2VuZXJhdGUgZGVmaW5pdGlvbnMgb2YgdGhlIG9sZCBrZXkgY29kZSBuYW1lcyAqLwotCSAgZ2VuX2tleWRlZnMoMSk7Ci0JICBicmVhazsKLQljYXNlICdQJzoJCS8qIGdlbmVyYXRlIGRlZmluaXRpb25zIG9mIHRoZSBwdWJsaWMgdmFyaWFibGVzICovCi0JICBnZW5fcHVibGljX3ZhcnMoKTsKLQkgIGJyZWFrOwotCWNhc2UgJ1InOgkJLyogZ2VuZXJhdGUgcmVwcmVzZW50YXRpb24gY2xhdXNlIGZvciBBdHRyaWJ1dGVkIGNoYXJhY3RlciAqLwotCSAgZ2VuX2NodHlwZV9yZXAoIkF0dHJpYnV0ZWRfQ2hhcmFjdGVyIik7Ci0JICBicmVhazsKLQljYXNlICdUJzoJCS8qIGdlbmVyYXRlIHRoZSBUcmFjZSBpbmZvICovCi0JICBnZW5fdHJhY2UoIlRyYWNlX0F0dHJpYnV0ZV9TZXQiKTsKLQkgIGJyZWFrOwotCWNhc2UgJ1YnOgkJLyogZ2VuZXJhdGUgdmVyc2lvbiBpbmZvICovCi0JICBnZW5fdmVyc2lvbl9pbmZvKCk7Ci0JICBicmVhazsKLQlkZWZhdWx0OgotCSAgYnJlYWs7Ci0JfQotICAgICAgYnJlYWs7Ci0gICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLSAgICBjYXNlICdNJzoJCQkvKiBUaGUgTWVudSBmYWNpbGl0eSAqLwotICAgICAgc3dpdGNoIChhcmd2WzJdWzBdKQotCXsKLQljYXNlICdSJzoJCS8qIGdlbmVyYXRlIHJlcHJlc2VudGF0aW9uIGNsYXVzZSBmb3IgTWVudV9PcHRpb25fU2V0ICovCi0JICBnZW5fbWVudV9vcHRfcmVwKCJNZW51X09wdGlvbl9TZXQiKTsKLQkgIGJyZWFrOwotCWNhc2UgJ0InOgkJLyogd3JpdGUgc29tZSBpbml0aWFsIGNvbW1lbnQgbGluZXMgKi8KLQkgIG1lbnVfYmFzZWRlZnMoKTsKLQkgIGJyZWFrOwotCWNhc2UgJ0wnOgkJLyogZ2VuZXJhdGUgdGhlIExpbmtlcl9PcHRpb25zIHByYWdtYSAqLwotCSAgZ2VuX21lbnVfbGlua29wdHMoKTsKLQkgIGJyZWFrOwotCWNhc2UgJ0knOgkJLyogZ2VuZXJhdGUgcmVwcmVzZW50YXRpb24gY2xhdXNlIGZvciBJdGVtX09wdGlvbl9TZXQgKi8KLQkgIGdlbl9pdGVtX29wdF9yZXAoIkl0ZW1fT3B0aW9uX1NldCIpOwotCSAgYnJlYWs7Ci0JZGVmYXVsdDoKLQkgIGJyZWFrOwotCX0KLSAgICAgIGJyZWFrOwotICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0gICAgY2FzZSAnRic6CQkJLyogVGhlIEZvcm0gZmFjaWxpdHkgKi8KLSAgICAgIHN3aXRjaCAoYXJndlsyXVswXSkKLQl7Ci0JY2FzZSAnUic6CQkvKiBnZW5lcmF0ZSByZXByZXNlbnRhdGlvbiBjbGF1c2UgZm9yIEZvcm1fT3B0aW9uX1NldCAqLwotCSAgZ2VuX2Zvcm1fb3B0X3JlcCgiRm9ybV9PcHRpb25fU2V0Iik7Ci0JICBicmVhazsKLQljYXNlICdCJzoJCS8qIHdyaXRlIHNvbWUgaW5pdGlhbCBjb21tZW50IGxpbmVzICovCi0JICBmb3JtX2Jhc2VkZWZzKCk7Ci0JICBicmVhazsKLQljYXNlICdMJzoJCS8qIGdlbmVyYXRlIHRoZSBMaW5rZXJfT3B0aW9ucyBwcmFnbWEgKi8KLQkgIGdlbl9mb3JtX2xpbmtvcHRzKCk7Ci0JICBicmVhazsKLQljYXNlICdJJzoJCS8qIGdlbmVyYXRlIHJlcHJlc2VudGF0aW9uIGNsYXVzZSBmb3IgRmllbGRfT3B0aW9uX1NldCAqLwotCSAgZ2VuX2ZpZWxkX29wdF9yZXAoIkZpZWxkX09wdGlvbl9TZXQiKTsKLQkgIGJyZWFrOwotCWRlZmF1bHQ6Ci0JICBicmVhazsKLQl9Ci0gICAgICBicmVhazsKLSAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotICAgIGNhc2UgJ1AnOgkJCS8qIFRoZSBQb2ludGVyKD1Nb3VzZSkgZmFjaWxpdHkgKi8KLSAgICAgIHN3aXRjaCAoYXJndlsyXVswXSkKLQl7Ci0JY2FzZSAnQic6CQkvKiB3cml0ZSBzb21lIGluaXRpYWwgY29tbWVudCBsaW5lcyAqLwotCSAgbW91c2VfYmFzZWRlZnMoKTsKLQkgIGJyZWFrOwotCWNhc2UgJ00nOgkJLyogZ2VuZXJhdGUgcmVwcmVzZW50YXRpb24gY2xhdXNlIGZvciBNb3VzZV9FdmVudCAqLwotCSAgZ2VuX21yZXBfcmVwKCJNb3VzZV9FdmVudCIpOwotCSAgYnJlYWs7Ci0JY2FzZSAnTCc6CQkvKiBnZW5lcmF0ZSB0aGUgTGlua2VyX09wdGlvbnMgcHJhZ21hICovCi0JICBnZW5fcGFuZWxfbGlua29wdHMoKTsKLQkgIGJyZWFrOwotCWRlZmF1bHQ6Ci0JICBicmVhazsKLQl9Ci0gICAgICBicmVhazsKLSAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotICAgIGNhc2UgJ0UnOgkJCS8qIGNodHlwZSBzaXplIGRldGVjdGlvbiAqLwotICAgICAgc3dpdGNoIChhcmd2WzJdWzBdKQotCXsKLQljYXNlICdDJzoKLQkgIHsKLQkgICAgY29uc3QgY2hhciAqZm10ID0gIiAgIHR5cGUgICAgQ19DaHR5cGUgICBpcyBuZXcgJXM7XG4iOwotCSAgICBjb25zdCBjaGFyICphZm10ID0gIiAgIHR5cGUgICAgQ19BdHRyVHlwZSBpcyBuZXcgJXM7XG4iOworICBpZiAoS0VZX01JTiA9PSAyNTYpCisgICAgbXlfZXJyb3IoInVuZXhwZWN0ZWQgdmFsdWUgZm9yIEtFWV9NSU46IDI1NiIpOwogCi0JICAgIGlmIChzaXplb2YoY2h0eXBlKSA9PSBzaXplb2YoaW50KSkKLQkgICAgICB7Ci0JCWlmIChzaXplb2YoaW50KSA9PSBzaXplb2YobG9uZykpCi0JCSAgICBwcmludGYoZm10LCAiQ19VTG9uZyIpOworICBpZiAoYXJnYyAhPSAyKQorICAgIG15X2Vycm9yKCJPbmx5IG9uZSBhcmd1bWVudCBleHBlY3RlZCAoREZUX0FSR19TVUZGSVgpIik7CiAKLQkJZWxzZQotCQkgIHByaW50ZihmbXQsICJDX1VJbnQiKTsKLQkgICAgICB9Ci0JICAgIGVsc2UgaWYgKHNpemVvZihjaHR5cGUpID09IHNpemVvZihsb25nKSkKLQkgICAgICB7Ci0JCXByaW50ZihmbXQsICJDX1VMb25nIik7Ci0JICAgICAgfQotCSAgICBlbHNlCi0JICAgICAgcHJpbnRmKCJFcnJvclxuIik7CisgIHByaW50ZigiLS0gIEdlbmVyYXRlZCBieSB0aGUgQyBwcm9ncmFtICVzIChzb3VyY2UgIiBfX0ZJTEVfXyAiKS5cbiIsCisJIG15X3Byb2dyYW1faW52b2NhdGlvbl9uYW1lKTsKKyAgcHJpbnRmKCItLSAgRG8gbm90IGVkaXQgdGhpcyBmaWxlIGRpcmVjdGx5LlxuIik7CisgIHByaW50ZigiLS0gIFRoZSB2YWx1ZXMgcHJvdmlkZWQgaGVyZSBtYXkgdmFyeSBvbiB5b3VyIHN5c3RlbS5cbiIpOworICBwcmludGYoIlxuIik7CisgIHByaW50Zigid2l0aCBTeXN0ZW07XG4iKTsKKyAgcHJpbnRmKCJwYWNrYWdlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXNfQ29uc3RhbnRzIGlzXG4iKTsKKyAgcHJpbnRmKCIgICBwcmFnbWEgUHVyZTtcbiIpOworICBwcmludGYoIlxuIik7CiAKLQkgICAgaWYgKHNpemVvZihhdHRyX3QpID09IHNpemVvZihpbnQpKQotCSAgICAgIHsKLQkJaWYgKHNpemVvZihpbnQpID09IHNpemVvZihsb25nKSkKLQkJICAgIHByaW50ZihhZm10LCAiQ19VTG9uZyIpOworICBwcmludGYoIiAgIERGVF9BUkdfU1VGRklYIDogY29uc3RhbnQgU3RyaW5nIDo9IFwiJXNcIjtcbiIsIGFyZ3ZbMV0pOworICBwcmludGYoIiAgIEJpdF9PcmRlciA6IGNvbnN0YW50IFN5c3RlbS5CaXRfT3JkZXIgOj0gU3lzdGVtLiVzX09yZGVyX0ZpcnN0O1xuIiwKKwkgbGl0dGxlX2VuZGlhbiA/ICJMb3ciIDogIkhpZ2giKTsKKyAgcHJpbnRfY29uc3RhbnQoIlNpemVvZl9Cb29sIiwgOCAqIHNpemVvZihib29sKSk7CiAKLQkJZWxzZQotCQkgIHByaW50ZihhZm10LCAiQ19VSW50Iik7Ci0JICAgICAgfQotCSAgICBlbHNlIGlmIChzaXplb2YoYXR0cl90KSA9PSBzaXplb2YobG9uZykpCi0JICAgICAgewotCQlwcmludGYoYWZtdCwgIkNfVUxvbmciKTsKLQkgICAgICB9Ci0JICAgIGVsc2UKLQkgICAgICBwcmludGYoIkVycm9yXG4iKTsKKyAgUFJJTlRfTkFNRURfQ09OU1RBTlQoT0spOworICBQUklOVF9OQU1FRF9DT05TVEFOVChFUlIpOworICBwcmludGYoIiAgIHByYWdtYSBXYXJuaW5ncyAoT2ZmKTsgLS0gcmVkZWZpbml0aW9uIG9mIFN0YW5kYXJkLlRydWUgYW5kIEZhbHNlXG4iKTsKKyAgUFJJTlRfTkFNRURfQ09OU1RBTlQoVFJVRSk7CisgIFBSSU5UX05BTUVEX0NPTlNUQU5UKEZBTFNFKTsKKyAgcHJpbnRmKCIgICBwcmFnbWEgV2FybmluZ3MgKE9uKTtcbiIpOwogCi0JICAgIHByaW50ZigiZGVmaW5lKGBDRl9DVVJTRVNfT0snLGAlZCcpIiwgT0spOwotCSAgICBwcmludGYoImRlZmluZShgQ0ZfQ1VSU0VTX0VSUicsYCVkJykiLCBFUlIpOwotCSAgICBwcmludGYoImRlZmluZShgQ0ZfQ1VSU0VTX1RSVUUnLGAlZCcpIiwgVFJVRSk7Ci0JICAgIHByaW50ZigiZGVmaW5lKGBDRl9DVVJTRVNfRkFMU0UnLGAlZCcpIiwgRkFMU0UpOwotCSAgfQotCSAgYnJlYWs7Ci0JY2FzZSAnRSc6Ci0JICB7Ci0JICAgIGNoYXIgKmJ1ZiA9IChjaGFyICopbWFsbG9jKDIwNDgpOwotCSAgICBjaGFyICpwID0gYnVmOwotCSAgICBpbnQgZXRpbWluID0gRV9PSzsKLQkgICAgaW50IGV0aW1heCA9IEVfT0s7CisgIHByaW50X2NvbW1lbnQoIlZlcnNpb24gb2YgdGhlIG5jdXJzZXMgbGlicmFyeSBmcm9tIGV4dGVuc2lvbnMoM05DVVJTRVMpIik7CisgIFBSSU5UX05BTUVEX0NPTlNUQU5UKE5DVVJTRVNfVkVSU0lPTl9NQUpPUik7CisgIFBSSU5UX05BTUVEX0NPTlNUQU5UKE5DVVJTRVNfVkVSU0lPTl9NSU5PUik7CisgIHByaW50ZigiICAgVmVyc2lvbiA6IGNvbnN0YW50IFN0cmluZyA6PSBcIiVkLiVkXCI7XG4iLAorCSBOQ1VSU0VTX1ZFUlNJT05fTUFKT1IsIE5DVVJTRVNfVkVSU0lPTl9NSU5PUik7CiAKLQkgICAgaWYgKHApCi0JICAgICAgewotCQlwICs9IGV0aV9nZW4ocCwgRV9PSywgIk9rIiwgJmV0aW1pbiwgJmV0aW1heCk7Ci0JCXAgKz0gZXRpX2dlbihwLCBFX1NZU1RFTV9FUlJPUiwgIlN5c3RlbV9FcnJvciIsICZldGltaW4sICZldGltYXgpOwotCQlwICs9IGV0aV9nZW4ocCwgRV9CQURfQVJHVU1FTlQsICJCYWRfQXJndW1lbnQiLCAmZXRpbWluLCAmZXRpbWF4KTsKLQkJcCArPSBldGlfZ2VuKHAsIEVfUE9TVEVELCAiUG9zdGVkIiwgJmV0aW1pbiwgJmV0aW1heCk7Ci0JCXAgKz0gZXRpX2dlbihwLCBFX0NPTk5FQ1RFRCwgIkNvbm5lY3RlZCIsICZldGltaW4sICZldGltYXgpOwotCQlwICs9IGV0aV9nZW4ocCwgRV9CQURfU1RBVEUsICJCYWRfU3RhdGUiLCAmZXRpbWluLCAmZXRpbWF4KTsKLQkJcCArPSBldGlfZ2VuKHAsIEVfTk9fUk9PTSwgIk5vX1Jvb20iLCAmZXRpbWluLCAmZXRpbWF4KTsKLQkJcCArPSBldGlfZ2VuKHAsIEVfTk9UX1BPU1RFRCwgIk5vdF9Qb3N0ZWQiLCAmZXRpbWluLCAmZXRpbWF4KTsKLQkJcCArPSBldGlfZ2VuKHAsIEVfVU5LTk9XTl9DT01NQU5ELAotCQkJICAgICAiVW5rbm93bl9Db21tYW5kIiwgJmV0aW1pbiwgJmV0aW1heCk7Ci0JCXAgKz0gZXRpX2dlbihwLCBFX05PX01BVENILCAiTm9fTWF0Y2giLCAmZXRpbWluLCAmZXRpbWF4KTsKLQkJcCArPSBldGlfZ2VuKHAsIEVfTk9UX1NFTEVDVEFCTEUsCi0JCQkgICAgICJOb3RfU2VsZWN0YWJsZSIsICZldGltaW4sICZldGltYXgpOwotCQlwICs9IGV0aV9nZW4ocCwgRV9OT1RfQ09OTkVDVEVELAotCQkJICAgICAiTm90X0Nvbm5lY3RlZCIsICZldGltaW4sICZldGltYXgpOwotCQlwICs9IGV0aV9nZW4ocCwgRV9SRVFVRVNUX0RFTklFRCwKLQkJCSAgICAgIlJlcXVlc3RfRGVuaWVkIiwgJmV0aW1pbiwgJmV0aW1heCk7Ci0JCXAgKz0gZXRpX2dlbihwLCBFX0lOVkFMSURfRklFTEQsCi0JCQkgICAgICJJbnZhbGlkX0ZpZWxkIiwgJmV0aW1pbiwgJmV0aW1heCk7Ci0JCXAgKz0gZXRpX2dlbihwLCBFX0NVUlJFTlQsCi0JCQkgICAgICJDdXJyZW50IiwgJmV0aW1pbiwgJmV0aW1heCk7Ci0JICAgICAgfQotCSAgICBwcmludGYoIiAgIHN1YnR5cGUgRXRpX0Vycm9yIGlzIENfSW50IHJhbmdlICVkIC4uICVkO1xuXG4iLAotCQkgICBldGltaW4sIGV0aW1heCk7Ci0JICAgIHByaW50ZihidWYpOwotCSAgfQotCSAgYnJlYWs7Ci0JZGVmYXVsdDoKLQkgIGJyZWFrOwotCX0KLSAgICAgIGJyZWFrOwotICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0gICAgY2FzZSAnVic6CQkJLyogcGxhaW4gdmVyc2lvbiBkdW1wICovCi0gICAgICB7Ci0Jc3dpdGNoIChhcmd2WzJdWzBdKQotCSAgewotCSAgY2FzZSAnMSc6CQkvKiBtYWpvciB2ZXJzaW9uICovCi0jaWZkZWYgTkNVUlNFU19WRVJTSU9OX01BSk9SCi0JICAgIHByaW50ZigiJWQiLCBOQ1VSU0VTX1ZFUlNJT05fTUFKT1IpOworICBwcmludF9jb21tZW50KCJDaGFyYWN0ZXIgbm9uLWNvbG9yIGF0dHJpYnV0ZXMgZnJvbSBhdHRyKDNOQ1VSU0VTKSIpOworICBwcmludGYoIiAgIC0tICBhdHRyX3QgYW5kIGNodHlwZSBtYXkgYmUgc2lnbmVkIGluIEMuXG4iKTsKKyAgcHJpbnRmKCIgICB0eXBlIGF0dHJfdCBpcyBtb2QgMiAqKiAlbHU7XG4iLCAobG9uZyB1bnNpZ25lZCkoOCAqIHNpemVvZihhdHRyX3QpKSk7CisgIFBSSU5UX05BTUVEX0JJVE1BU0soYXR0cl90LCBBX0NIQVJURVhUKTsKKyAgUFJJTlRfTkFNRURfQklUTUFTSyhhdHRyX3QsIEFfQ09MT1IpOworICBQUklOVF9CSVRNQVNLKGF0dHJfdCwgIkF0dHIiLCBBX0FUVFJJQlVURVMgJiB+QV9DT0xPUik7CisgIFBSSU5UX05BTUVEX0JJVE1BU0soYXR0cl90LCBBX1NUQU5ET1VUKTsKKyAgUFJJTlRfTkFNRURfQklUTUFTSyhhdHRyX3QsIEFfVU5ERVJMSU5FKTsKKyAgUFJJTlRfTkFNRURfQklUTUFTSyhhdHRyX3QsIEFfUkVWRVJTRSk7CisgIFBSSU5UX05BTUVEX0JJVE1BU0soYXR0cl90LCBBX0JMSU5LKTsKKyAgUFJJTlRfTkFNRURfQklUTUFTSyhhdHRyX3QsIEFfRElNKTsKKyAgUFJJTlRfTkFNRURfQklUTUFTSyhhdHRyX3QsIEFfQk9MRCk7CisgIFBSSU5UX05BTUVEX0JJVE1BU0soYXR0cl90LCBBX1BST1RFQ1QpOworICBQUklOVF9OQU1FRF9CSVRNQVNLKGF0dHJfdCwgQV9JTlZJUyk7CisgIFBSSU5UX05BTUVEX0JJVE1BU0soYXR0cl90LCBBX0FMVENIQVJTRVQpOworICBQUklOVF9OQU1FRF9CSVRNQVNLKGF0dHJfdCwgQV9IT1JJWk9OVEFMKTsKKyAgUFJJTlRfTkFNRURfQklUTUFTSyhhdHRyX3QsIEFfTEVGVCk7CisgIFBSSU5UX05BTUVEX0JJVE1BU0soYXR0cl90LCBBX0xPVyk7CisgIFBSSU5UX05BTUVEX0JJVE1BU0soYXR0cl90LCBBX1JJR0hUKTsKKyAgUFJJTlRfTkFNRURfQklUTUFTSyhhdHRyX3QsIEFfVE9QKTsKKyAgUFJJTlRfTkFNRURfQklUTUFTSyhhdHRyX3QsIEFfVkVSVElDQUwpOworICBwcmludF9jb25zdGFudCgiY2h0eXBlX1NpemUiLCA4ICogc2l6ZW9mKGNodHlwZSkpOworCisgIHByaW50X2NvbW1lbnQoInByZWRlZmluZWQgY29sb3IgbnVtYmVycyBmcm9tIGNvbG9yKDNOQ1VSU0VTKSIpOworICBQUklOVF9OQU1FRF9DT05TVEFOVChDT0xPUl9CTEFDSyk7CisgIFBSSU5UX05BTUVEX0NPTlNUQU5UKENPTE9SX1JFRCk7CisgIFBSSU5UX05BTUVEX0NPTlNUQU5UKENPTE9SX0dSRUVOKTsKKyAgUFJJTlRfTkFNRURfQ09OU1RBTlQoQ09MT1JfWUVMTE9XKTsKKyAgUFJJTlRfTkFNRURfQ09OU1RBTlQoQ09MT1JfQkxVRSk7CisgIFBSSU5UX05BTUVEX0NPTlNUQU5UKENPTE9SX01BR0VOVEEpOworICBQUklOVF9OQU1FRF9DT05TVEFOVChDT0xPUl9DWUFOKTsKKyAgUFJJTlRfTkFNRURfQ09OU1RBTlQoQ09MT1JfV0hJVEUpOworCisgIHByaW50X2NvbW1lbnQoIkVUSSByZXR1cm4gY29kZXMgZnJvbSBuY3Vyc2VzLmgiKTsKKyAgUFJJTlRfTkFNRURfQ09OU1RBTlQoRV9PSyk7CisgIFBSSU5UX05BTUVEX0NPTlNUQU5UKEVfU1lTVEVNX0VSUk9SKTsKKyAgUFJJTlRfTkFNRURfQ09OU1RBTlQoRV9CQURfQVJHVU1FTlQpOworICBQUklOVF9OQU1FRF9DT05TVEFOVChFX1BPU1RFRCk7CisgIFBSSU5UX05BTUVEX0NPTlNUQU5UKEVfQ09OTkVDVEVEKTsKKyAgUFJJTlRfTkFNRURfQ09OU1RBTlQoRV9CQURfU1RBVEUpOworICBQUklOVF9OQU1FRF9DT05TVEFOVChFX05PX1JPT00pOworICBQUklOVF9OQU1FRF9DT05TVEFOVChFX05PVF9QT1NURUQpOworICBQUklOVF9OQU1FRF9DT05TVEFOVChFX1VOS05PV05fQ09NTUFORCk7CisgIFBSSU5UX05BTUVEX0NPTlNUQU5UKEVfTk9fTUFUQ0gpOworICBQUklOVF9OQU1FRF9DT05TVEFOVChFX05PVF9TRUxFQ1RBQkxFKTsKKyAgUFJJTlRfTkFNRURfQ09OU1RBTlQoRV9OT1RfQ09OTkVDVEVEKTsKKyAgUFJJTlRfTkFNRURfQ09OU1RBTlQoRV9SRVFVRVNUX0RFTklFRCk7CisgIFBSSU5UX05BTUVEX0NPTlNUQU5UKEVfSU5WQUxJRF9GSUVMRCk7CisgIFBSSU5UX05BTUVEX0NPTlNUQU5UKEVfQ1VSUkVOVCk7CisKKyAgcHJpbnRfY29tbWVudCgiSW5wdXQga2V5IGNvZGVzIG5vdCBkZWZpbmVkIGluIGFueSBuY3Vyc2VzIG1hbnBhZ2UiKTsKKyAgUFJJTlRfTkFNRURfQ09OU1RBTlQoS0VZX01JTik7CisgIFBSSU5UX05BTUVEX0NPTlNUQU5UKEtFWV9NQVgpOworI2lmZGVmIEtFWV9DT0RFX1lFUworICBQUklOVF9OQU1FRF9DT05TVEFOVChLRVlfQ09ERV9ZRVMpOwogI2VuZGlmCi0JICAgIGJyZWFrOwotCSAgY2FzZSAnMic6CQkvKiBtaW5vciB2ZXJzaW9uICovCi0jaWZkZWYgTkNVUlNFU19WRVJTSU9OX01JTk9SCi0JICAgIHByaW50ZigiJWQiLCBOQ1VSU0VTX1ZFUlNJT05fTUlOT1IpOworCisgIHByaW50X2NvbW1lbnQoIklucHV0IGtleSBjb2RlcyBmcm9tIGdldGNoKDNOQ1VSU0VTKSIpOworICBQUklOVF9OQU1FRF9DT05TVEFOVChLRVlfQlJFQUspOworICBQUklOVF9OQU1FRF9DT05TVEFOVChLRVlfRE9XTik7CisgIFBSSU5UX05BTUVEX0NPTlNUQU5UKEtFWV9VUCk7CisgIFBSSU5UX05BTUVEX0NPTlNUQU5UKEtFWV9MRUZUKTsKKyAgUFJJTlRfTkFNRURfQ09OU1RBTlQoS0VZX1JJR0hUKTsKKyAgUFJJTlRfTkFNRURfQ09OU1RBTlQoS0VZX0hPTUUpOworICBQUklOVF9OQU1FRF9DT05TVEFOVChLRVlfQkFDS1NQQUNFKTsKKyAgUFJJTlRfTkFNRURfQ09OU1RBTlQoS0VZX0YwKTsKKyAgcHJpbnRfY29uc3RhbnQoIktFWV9GMSIsIEtFWV9GKDEpKTsKKyAgcHJpbnRfY29uc3RhbnQoIktFWV9GMiIsIEtFWV9GKDIpKTsKKyAgcHJpbnRfY29uc3RhbnQoIktFWV9GMyIsIEtFWV9GKDMpKTsKKyAgcHJpbnRfY29uc3RhbnQoIktFWV9GNCIsIEtFWV9GKDQpKTsKKyAgcHJpbnRfY29uc3RhbnQoIktFWV9GNSIsIEtFWV9GKDUpKTsKKyAgcHJpbnRfY29uc3RhbnQoIktFWV9GNiIsIEtFWV9GKDYpKTsKKyAgcHJpbnRfY29uc3RhbnQoIktFWV9GNyIsIEtFWV9GKDcpKTsKKyAgcHJpbnRfY29uc3RhbnQoIktFWV9GOCIsIEtFWV9GKDgpKTsKKyAgcHJpbnRfY29uc3RhbnQoIktFWV9GOSIsIEtFWV9GKDkpKTsKKyAgcHJpbnRfY29uc3RhbnQoIktFWV9GMTAiLCBLRVlfRigxMCkpOworICBwcmludF9jb25zdGFudCgiS0VZX0YxMSIsIEtFWV9GKDExKSk7CisgIHByaW50X2NvbnN0YW50KCJLRVlfRjEyIiwgS0VZX0YoMTIpKTsKKyAgcHJpbnRfY29uc3RhbnQoIktFWV9GMTMiLCBLRVlfRigxMykpOworICBwcmludF9jb25zdGFudCgiS0VZX0YxNCIsIEtFWV9GKDE0KSk7CisgIHByaW50X2NvbnN0YW50KCJLRVlfRjE1IiwgS0VZX0YoMTUpKTsKKyAgcHJpbnRfY29uc3RhbnQoIktFWV9GMTYiLCBLRVlfRigxNikpOworICBwcmludF9jb25zdGFudCgiS0VZX0YxNyIsIEtFWV9GKDE3KSk7CisgIHByaW50X2NvbnN0YW50KCJLRVlfRjE4IiwgS0VZX0YoMTgpKTsKKyAgcHJpbnRfY29uc3RhbnQoIktFWV9GMTkiLCBLRVlfRigxOSkpOworICBwcmludF9jb25zdGFudCgiS0VZX0YyMCIsIEtFWV9GKDIwKSk7CisgIHByaW50X2NvbnN0YW50KCJLRVlfRjIxIiwgS0VZX0YoMjEpKTsKKyAgcHJpbnRfY29uc3RhbnQoIktFWV9GMjIiLCBLRVlfRigyMikpOworICBwcmludF9jb25zdGFudCgiS0VZX0YyMyIsIEtFWV9GKDIzKSk7CisgIHByaW50X2NvbnN0YW50KCJLRVlfRjI0IiwgS0VZX0YoMjQpKTsKKyAgUFJJTlRfTkFNRURfQ09OU1RBTlQoS0VZX0RMKTsKKyAgUFJJTlRfTkFNRURfQ09OU1RBTlQoS0VZX0lMKTsKKyAgUFJJTlRfTkFNRURfQ09OU1RBTlQoS0VZX0RDKTsKKyAgUFJJTlRfTkFNRURfQ09OU1RBTlQoS0VZX0lDKTsKKyAgUFJJTlRfTkFNRURfQ09OU1RBTlQoS0VZX0VJQyk7CisgIFBSSU5UX05BTUVEX0NPTlNUQU5UKEtFWV9DTEVBUik7CisgIFBSSU5UX05BTUVEX0NPTlNUQU5UKEtFWV9FT1MpOworICBQUklOVF9OQU1FRF9DT05TVEFOVChLRVlfRU9MKTsKKyAgUFJJTlRfTkFNRURfQ09OU1RBTlQoS0VZX1NGKTsKKyAgUFJJTlRfTkFNRURfQ09OU1RBTlQoS0VZX1NSKTsKKyAgUFJJTlRfTkFNRURfQ09OU1RBTlQoS0VZX05QQUdFKTsKKyAgUFJJTlRfTkFNRURfQ09OU1RBTlQoS0VZX1BQQUdFKTsKKyAgUFJJTlRfTkFNRURfQ09OU1RBTlQoS0VZX1NUQUIpOworICBQUklOVF9OQU1FRF9DT05TVEFOVChLRVlfQ1RBQik7CisgIFBSSU5UX05BTUVEX0NPTlNUQU5UKEtFWV9DQVRBQik7CisgIFBSSU5UX05BTUVEX0NPTlNUQU5UKEtFWV9FTlRFUik7CisgIFBSSU5UX05BTUVEX0NPTlNUQU5UKEtFWV9TUkVTRVQpOworICBQUklOVF9OQU1FRF9DT05TVEFOVChLRVlfUkVTRVQpOworICBQUklOVF9OQU1FRF9DT05TVEFOVChLRVlfUFJJTlQpOworICBQUklOVF9OQU1FRF9DT05TVEFOVChLRVlfTEwpOworICBQUklOVF9OQU1FRF9DT05TVEFOVChLRVlfQTEpOworICBQUklOVF9OQU1FRF9DT05TVEFOVChLRVlfQTMpOworICBQUklOVF9OQU1FRF9DT05TVEFOVChLRVlfQjIpOworICBQUklOVF9OQU1FRF9DT05TVEFOVChLRVlfQzEpOworICBQUklOVF9OQU1FRF9DT05TVEFOVChLRVlfQzMpOworICBQUklOVF9OQU1FRF9DT05TVEFOVChLRVlfQlRBQik7CisgIFBSSU5UX05BTUVEX0NPTlNUQU5UKEtFWV9CRUcpOworICBQUklOVF9OQU1FRF9DT05TVEFOVChLRVlfQ0FOQ0VMKTsKKyAgUFJJTlRfTkFNRURfQ09OU1RBTlQoS0VZX0NMT1NFKTsKKyAgUFJJTlRfTkFNRURfQ09OU1RBTlQoS0VZX0NPTU1BTkQpOworICBQUklOVF9OQU1FRF9DT05TVEFOVChLRVlfQ09QWSk7CisgIFBSSU5UX05BTUVEX0NPTlNUQU5UKEtFWV9DUkVBVEUpOworICBQUklOVF9OQU1FRF9DT05TVEFOVChLRVlfRU5EKTsKKyAgUFJJTlRfTkFNRURfQ09OU1RBTlQoS0VZX0VYSVQpOworICBQUklOVF9OQU1FRF9DT05TVEFOVChLRVlfRklORCk7CisgIFBSSU5UX05BTUVEX0NPTlNUQU5UKEtFWV9IRUxQKTsKKyAgUFJJTlRfTkFNRURfQ09OU1RBTlQoS0VZX01BUkspOworICBQUklOVF9OQU1FRF9DT05TVEFOVChLRVlfTUVTU0FHRSk7CisgIFBSSU5UX05BTUVEX0NPTlNUQU5UKEtFWV9NT1ZFKTsKKyAgUFJJTlRfTkFNRURfQ09OU1RBTlQoS0VZX05FWFQpOworICBQUklOVF9OQU1FRF9DT05TVEFOVChLRVlfT1BFTik7CisgIFBSSU5UX05BTUVEX0NPTlNUQU5UKEtFWV9PUFRJT05TKTsKKyAgUFJJTlRfTkFNRURfQ09OU1RBTlQoS0VZX1BSRVZJT1VTKTsKKyAgUFJJTlRfTkFNRURfQ09OU1RBTlQoS0VZX1JFRE8pOworICBQUklOVF9OQU1FRF9DT05TVEFOVChLRVlfUkVGRVJFTkNFKTsKKyAgUFJJTlRfTkFNRURfQ09OU1RBTlQoS0VZX1JFRlJFU0gpOworICBQUklOVF9OQU1FRF9DT05TVEFOVChLRVlfUkVQTEFDRSk7CisgIFBSSU5UX05BTUVEX0NPTlNUQU5UKEtFWV9SRVNUQVJUKTsKKyAgUFJJTlRfTkFNRURfQ09OU1RBTlQoS0VZX1JFU1VNRSk7CisgIFBSSU5UX05BTUVEX0NPTlNUQU5UKEtFWV9TQVZFKTsKKyAgUFJJTlRfTkFNRURfQ09OU1RBTlQoS0VZX1NCRUcpOworICBQUklOVF9OQU1FRF9DT05TVEFOVChLRVlfU0NBTkNFTCk7CisgIFBSSU5UX05BTUVEX0NPTlNUQU5UKEtFWV9TQ09NTUFORCk7CisgIFBSSU5UX05BTUVEX0NPTlNUQU5UKEtFWV9TQ09QWSk7CisgIFBSSU5UX05BTUVEX0NPTlNUQU5UKEtFWV9TQ1JFQVRFKTsKKyAgUFJJTlRfTkFNRURfQ09OU1RBTlQoS0VZX1NEQyk7CisgIFBSSU5UX05BTUVEX0NPTlNUQU5UKEtFWV9TREwpOworICBQUklOVF9OQU1FRF9DT05TVEFOVChLRVlfU0VMRUNUKTsKKyAgUFJJTlRfTkFNRURfQ09OU1RBTlQoS0VZX1NFTkQpOworICBQUklOVF9OQU1FRF9DT05TVEFOVChLRVlfU0VPTCk7CisgIFBSSU5UX05BTUVEX0NPTlNUQU5UKEtFWV9TRVhJVCk7CisgIFBSSU5UX05BTUVEX0NPTlNUQU5UKEtFWV9TRklORCk7CisgIFBSSU5UX05BTUVEX0NPTlNUQU5UKEtFWV9TSEVMUCk7CisgIFBSSU5UX05BTUVEX0NPTlNUQU5UKEtFWV9TSE9NRSk7CisgIFBSSU5UX05BTUVEX0NPTlNUQU5UKEtFWV9TSUMpOworICBQUklOVF9OQU1FRF9DT05TVEFOVChLRVlfU0xFRlQpOworICBQUklOVF9OQU1FRF9DT05TVEFOVChLRVlfU01FU1NBR0UpOworICBQUklOVF9OQU1FRF9DT05TVEFOVChLRVlfU01PVkUpOworICBQUklOVF9OQU1FRF9DT05TVEFOVChLRVlfU05FWFQpOworICBQUklOVF9OQU1FRF9DT05TVEFOVChLRVlfU09QVElPTlMpOworICBQUklOVF9OQU1FRF9DT05TVEFOVChLRVlfU1BSRVZJT1VTKTsKKyAgUFJJTlRfTkFNRURfQ09OU1RBTlQoS0VZX1NQUklOVCk7CisgIFBSSU5UX05BTUVEX0NPTlNUQU5UKEtFWV9TUkVETyk7CisgIFBSSU5UX05BTUVEX0NPTlNUQU5UKEtFWV9TUkVQTEFDRSk7CisgIFBSSU5UX05BTUVEX0NPTlNUQU5UKEtFWV9TUklHSFQpOworICBQUklOVF9OQU1FRF9DT05TVEFOVChLRVlfU1JTVU1FKTsKKyAgUFJJTlRfTkFNRURfQ09OU1RBTlQoS0VZX1NTQVZFKTsKKyAgUFJJTlRfTkFNRURfQ09OU1RBTlQoS0VZX1NTVVNQRU5EKTsKKyAgUFJJTlRfTkFNRURfQ09OU1RBTlQoS0VZX1NVTkRPKTsKKyAgUFJJTlRfTkFNRURfQ09OU1RBTlQoS0VZX1NVU1BFTkQpOworICBQUklOVF9OQU1FRF9DT05TVEFOVChLRVlfVU5ETyk7CisgIFBSSU5UX05BTUVEX0NPTlNUQU5UKEtFWV9NT1VTRSk7CisgIFBSSU5UX05BTUVEX0NPTlNUQU5UKEtFWV9SRVNJWkUpOworCisgIHByaW50X2NvbW1lbnQoImFsdGVybmF0ZSBjaGFyYWN0ZXIgY29kZXMgKEFDUykgZnJvbSBhZGRjaCgzTkNVUlNFUykiKTsKKyNkZWZpbmUgUFJJTlRfQUNTKG5hbWUpIHByaW50X2NvbnN0YW50ICgjbmFtZSwgJm5hbWUgLSAmYWNzX21hcFswXSkKKyAgUFJJTlRfQUNTKEFDU19VTENPUk5FUik7CisgIFBSSU5UX0FDUyhBQ1NfTExDT1JORVIpOworICBQUklOVF9BQ1MoQUNTX1VSQ09STkVSKTsKKyAgUFJJTlRfQUNTKEFDU19MUkNPUk5FUik7CisgIFBSSU5UX0FDUyhBQ1NfTFRFRSk7CisgIFBSSU5UX0FDUyhBQ1NfUlRFRSk7CisgIFBSSU5UX0FDUyhBQ1NfQlRFRSk7CisgIFBSSU5UX0FDUyhBQ1NfVFRFRSk7CisgIFBSSU5UX0FDUyhBQ1NfSExJTkUpOworICBQUklOVF9BQ1MoQUNTX1ZMSU5FKTsKKyAgUFJJTlRfQUNTKEFDU19QTFVTKTsKKyAgUFJJTlRfQUNTKEFDU19TMSk7CisgIFBSSU5UX0FDUyhBQ1NfUzkpOworICBQUklOVF9BQ1MoQUNTX0RJQU1PTkQpOworICBQUklOVF9BQ1MoQUNTX0NLQk9BUkQpOworICBQUklOVF9BQ1MoQUNTX0RFR1JFRSk7CisgIFBSSU5UX0FDUyhBQ1NfUExNSU5VUyk7CisgIFBSSU5UX0FDUyhBQ1NfQlVMTEVUKTsKKyAgUFJJTlRfQUNTKEFDU19MQVJST1cpOworICBQUklOVF9BQ1MoQUNTX1JBUlJPVyk7CisgIFBSSU5UX0FDUyhBQ1NfREFSUk9XKTsKKyAgUFJJTlRfQUNTKEFDU19VQVJST1cpOworICBQUklOVF9BQ1MoQUNTX0JPQVJEKTsKKyAgUFJJTlRfQUNTKEFDU19MQU5URVJOKTsKKyAgUFJJTlRfQUNTKEFDU19CTE9DSyk7CisgIFBSSU5UX0FDUyhBQ1NfUzMpOworICBQUklOVF9BQ1MoQUNTX1M3KTsKKyAgUFJJTlRfQUNTKEFDU19MRVFVQUwpOworICBQUklOVF9BQ1MoQUNTX0dFUVVBTCk7CisgIFBSSU5UX0FDUyhBQ1NfUEkpOworICBQUklOVF9BQ1MoQUNTX05FUVVBTCk7CisgIFBSSU5UX0FDUyhBQ1NfU1RFUkxJTkcpOworCisgIHByaW50X2NvbW1lbnQoIk1lbnVfT3B0aW9ucyBmcm9tIG9wdHMoM01FTlUpIik7CisgIFBSSU5UX05BTUVEX0JJVE1BU0soTWVudV9PcHRpb25zLCBPX09ORVZBTFVFKTsKKyAgUFJJTlRfTkFNRURfQklUTUFTSyhNZW51X09wdGlvbnMsIE9fU0hPV0RFU0MpOworICBQUklOVF9OQU1FRF9CSVRNQVNLKE1lbnVfT3B0aW9ucywgT19ST1dNQUpPUik7CisgIFBSSU5UX05BTUVEX0JJVE1BU0soTWVudV9PcHRpb25zLCBPX0lHTk9SRUNBU0UpOworICBQUklOVF9OQU1FRF9CSVRNQVNLKE1lbnVfT3B0aW9ucywgT19TSE9XTUFUQ0gpOworICBQUklOVF9OQU1FRF9CSVRNQVNLKE1lbnVfT3B0aW9ucywgT19OT05DWUNMSUMpOworICBwcmludF9jb25zdGFudCgiTWVudV9PcHRpb25zX1NpemUiLCA4ICogc2l6ZW9mKE1lbnVfT3B0aW9ucykpOworCisgIHByaW50X2NvbW1lbnQoIkl0ZW1fT3B0aW9ucyBmcm9tIG1lbnVfb3B0cygzTUVOVSkiKTsKKyAgUFJJTlRfTkFNRURfQklUTUFTSyhJdGVtX09wdGlvbnMsIE9fU0VMRUNUQUJMRSk7CisgIHByaW50X2NvbnN0YW50KCJJdGVtX09wdGlvbnNfU2l6ZSIsIDggKiBzaXplb2YoSXRlbV9PcHRpb25zKSk7CisKKyAgcHJpbnRfY29tbWVudCgiRmllbGRfT3B0aW9ucyBmcm9tIGZpZWxkX29wdHMoM0ZPUk0pIik7CisgIFBSSU5UX05BTUVEX0JJVE1BU0soRmllbGRfT3B0aW9ucywgT19WSVNJQkxFKTsKKyAgUFJJTlRfTkFNRURfQklUTUFTSyhGaWVsZF9PcHRpb25zLCBPX0FDVElWRSk7CisgIFBSSU5UX05BTUVEX0JJVE1BU0soRmllbGRfT3B0aW9ucywgT19QVUJMSUMpOworICBQUklOVF9OQU1FRF9CSVRNQVNLKEZpZWxkX09wdGlvbnMsIE9fRURJVCk7CisgIFBSSU5UX05BTUVEX0JJVE1BU0soRmllbGRfT3B0aW9ucywgT19XUkFQKTsKKyAgUFJJTlRfTkFNRURfQklUTUFTSyhGaWVsZF9PcHRpb25zLCBPX0JMQU5LKTsKKyAgUFJJTlRfTkFNRURfQklUTUFTSyhGaWVsZF9PcHRpb25zLCBPX0FVVE9TS0lQKTsKKyAgUFJJTlRfTkFNRURfQklUTUFTSyhGaWVsZF9PcHRpb25zLCBPX05VTExPSyk7CisgIFBSSU5UX05BTUVEX0JJVE1BU0soRmllbGRfT3B0aW9ucywgT19QQVNTT0spOworICBQUklOVF9OQU1FRF9CSVRNQVNLKEZpZWxkX09wdGlvbnMsIE9fU1RBVElDKTsKKyAgcHJpbnRfY29uc3RhbnQoIkZpZWxkX09wdGlvbnNfU2l6ZSIsIDggKiBzaXplb2YoRmllbGRfT3B0aW9ucykpOworCisgIHByaW50X2NvbW1lbnQoIkZpZWxkX09wdGlvbnMgZnJvbSBvcHRzKDNGT1JNKSIpOworICBQUklOVF9OQU1FRF9CSVRNQVNLKEZpZWxkX09wdGlvbnMsIE9fTkxfT1ZFUkxPQUQpOworICBQUklOVF9OQU1FRF9CSVRNQVNLKEZpZWxkX09wdGlvbnMsIE9fQlNfT1ZFUkxPQUQpOworICAvKiAgRmllbGRfT3B0aW9uc19TaXplIGlzIGRlZmluZWQgYmVsb3cgKi8KKworICBwcmludF9jb21tZW50KCJNRVZFTlQgc3RydWN0dXJlIGZyb20gbW91c2UoM05DVVJTRVMpIik7CisgIFNUUlVDVF9PRkZTRVQoTUVWRU5ULCBpZCk7CisgIFNUUlVDVF9PRkZTRVQoTUVWRU5ULCB4KTsKKyAgU1RSVUNUX09GRlNFVChNRVZFTlQsIHkpOworICBTVFJVQ1RfT0ZGU0VUKE1FVkVOVCwgeik7CisgIFNUUlVDVF9PRkZTRVQoTUVWRU5ULCBic3RhdGUpOworICBwcmludF9jb25zdGFudCgiTUVWRU5UX1NpemUiLCA4ICogc2l6ZW9mKE1FVkVOVCkpOworCisgIHByaW50X2NvbW1lbnQoIm1vdXNlIGV2ZW50cyBmcm9tIG1vdXNlKDNOQ1VSU0VTKSIpOworICB7CisgICAgbW1hc2tfdCBhbGxfZXZlbnRzOworCisjZGVmaW5lIFBSSU5UX01PVVNFX0VWRU5UKGV2ZW50KSAgICAgICAgICAgICAgICBcCisgICAgcHJpbnRfY29uc3RhbnQgKCNldmVudCwgZXZlbnQpOyAgICAgICAgICAgICBcCisgICAgYWxsX2V2ZW50cyB8PSBldmVudAorCisgICAgYWxsX2V2ZW50cyA9IDA7CisgICAgUFJJTlRfTU9VU0VfRVZFTlQoQlVUVE9OMV9SRUxFQVNFRCk7CisgICAgUFJJTlRfTU9VU0VfRVZFTlQoQlVUVE9OMV9QUkVTU0VEKTsKKyAgICBQUklOVF9NT1VTRV9FVkVOVChCVVRUT04xX0NMSUNLRUQpOworICAgIFBSSU5UX01PVVNFX0VWRU5UKEJVVFRPTjFfRE9VQkxFX0NMSUNLRUQpOworICAgIFBSSU5UX01PVVNFX0VWRU5UKEJVVFRPTjFfVFJJUExFX0NMSUNLRUQpOworI2lmZGVmIEJVVFRPTjFfUkVTRVJWRURfRVZFTlQKKyAgICBQUklOVF9NT1VTRV9FVkVOVChCVVRUT04xX1JFU0VSVkVEX0VWRU5UKTsKICNlbmRpZgotCSAgICBicmVhazsKLQkgIGNhc2UgJzMnOgkJLyogcGF0Y2ggbGV2ZWwgKi8KLSNpZmRlZiBOQ1VSU0VTX1ZFUlNJT05fUEFUQ0gKLQkgICAgcHJpbnRmKCIlZCIsIE5DVVJTRVNfVkVSU0lPTl9QQVRDSCk7CisgICAgcHJpbnRfY29uc3RhbnQoImFsbF9ldmVudHNfYnV0dG9uXzEiLCAobG9uZylhbGxfZXZlbnRzKTsKKworICAgIGFsbF9ldmVudHMgPSAwOworICAgIFBSSU5UX01PVVNFX0VWRU5UKEJVVFRPTjJfUkVMRUFTRUQpOworICAgIFBSSU5UX01PVVNFX0VWRU5UKEJVVFRPTjJfUFJFU1NFRCk7CisgICAgUFJJTlRfTU9VU0VfRVZFTlQoQlVUVE9OMl9DTElDS0VEKTsKKyAgICBQUklOVF9NT1VTRV9FVkVOVChCVVRUT04yX0RPVUJMRV9DTElDS0VEKTsKKyAgICBQUklOVF9NT1VTRV9FVkVOVChCVVRUT04yX1RSSVBMRV9DTElDS0VEKTsKKyNpZmRlZiBCVVRUT04yX1JFU0VSVkVEX0VWRU5UCisgICAgUFJJTlRfTU9VU0VfRVZFTlQoQlVUVE9OMl9SRVNFUlZFRF9FVkVOVCk7CiAjZW5kaWYKLQkgICAgYnJlYWs7Ci0JICBkZWZhdWx0OgotCSAgICBicmVhazsKLQkgIH0KLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgcmV0dXJuIDA7CisgICAgcHJpbnRfY29uc3RhbnQoImFsbF9ldmVudHNfYnV0dG9uXzIiLCAobG9uZylhbGxfZXZlbnRzKTsKKworICAgIGFsbF9ldmVudHMgPSAwOworICAgIFBSSU5UX01PVVNFX0VWRU5UKEJVVFRPTjNfUkVMRUFTRUQpOworICAgIFBSSU5UX01PVVNFX0VWRU5UKEJVVFRPTjNfUFJFU1NFRCk7CisgICAgUFJJTlRfTU9VU0VfRVZFTlQoQlVUVE9OM19DTElDS0VEKTsKKyAgICBQUklOVF9NT1VTRV9FVkVOVChCVVRUT04zX0RPVUJMRV9DTElDS0VEKTsKKyAgICBQUklOVF9NT1VTRV9FVkVOVChCVVRUT04zX1RSSVBMRV9DTElDS0VEKTsKKyNpZmRlZiBCVVRUT04zX1JFU0VSVkVEX0VWRU5UCisgICAgUFJJTlRfTU9VU0VfRVZFTlQoQlVUVE9OM19SRVNFUlZFRF9FVkVOVCk7CisjZW5kaWYKKyAgICBwcmludF9jb25zdGFudCgiYWxsX2V2ZW50c19idXR0b25fMyIsIChsb25nKWFsbF9ldmVudHMpOworCisgICAgYWxsX2V2ZW50cyA9IDA7CisgICAgUFJJTlRfTU9VU0VfRVZFTlQoQlVUVE9ONF9SRUxFQVNFRCk7CisgICAgUFJJTlRfTU9VU0VfRVZFTlQoQlVUVE9ONF9QUkVTU0VEKTsKKyAgICBQUklOVF9NT1VTRV9FVkVOVChCVVRUT040X0NMSUNLRUQpOworICAgIFBSSU5UX01PVVNFX0VWRU5UKEJVVFRPTjRfRE9VQkxFX0NMSUNLRUQpOworICAgIFBSSU5UX01PVVNFX0VWRU5UKEJVVFRPTjRfVFJJUExFX0NMSUNLRUQpOworI2lmZGVmIEJVVFRPTjRfUkVTRVJWRURfRVZFTlQKKyAgICBQUklOVF9NT1VTRV9FVkVOVChCVVRUT040X1JFU0VSVkVEX0VWRU5UKTsKKyNlbmRpZgorICAgIHByaW50X2NvbnN0YW50KCJhbGxfZXZlbnRzX2J1dHRvbl80IiwgKGxvbmcpYWxsX2V2ZW50cyk7CisgIH0KKyAgUFJJTlRfTkFNRURfQ09OU1RBTlQoQlVUVE9OX0NUUkwpOworICBQUklOVF9OQU1FRF9DT05TVEFOVChCVVRUT05fU0hJRlQpOworICBQUklOVF9OQU1FRF9DT05TVEFOVChCVVRUT05fQUxUKTsKKyAgUFJJTlRfTkFNRURfQ09OU1RBTlQoUkVQT1JUX01PVVNFX1BPU0lUSU9OKTsKKyAgUFJJTlRfTkFNRURfQ09OU1RBTlQoQUxMX01PVVNFX0VWRU5UUyk7CisKKyAgcHJpbnRfY29tbWVudCgidHJhY2Ugc2VsZWN0aW9uIGZyb20gdHJhY2UoM05DVVJTRVMpIik7CisgIFBSSU5UX05BTUVEX0JJVE1BU0soVUlOVCwgVFJBQ0VfVElNRVMpOworICBQUklOVF9OQU1FRF9CSVRNQVNLKFVJTlQsIFRSQUNFX1RQVVRTKTsKKyAgUFJJTlRfTkFNRURfQklUTUFTSyhVSU5ULCBUUkFDRV9VUERBVEUpOworICBQUklOVF9OQU1FRF9CSVRNQVNLKFVJTlQsIFRSQUNFX01PVkUpOworICBQUklOVF9OQU1FRF9CSVRNQVNLKFVJTlQsIFRSQUNFX0NIQVJQVVQpOworICBQUklOVF9OQU1FRF9CSVRNQVNLKFVJTlQsIFRSQUNFX0NBTExTKTsKKyAgUFJJTlRfTkFNRURfQklUTUFTSyhVSU5ULCBUUkFDRV9WSVJUUFVUKTsKKyAgUFJJTlRfTkFNRURfQklUTUFTSyhVSU5ULCBUUkFDRV9JRVZFTlQpOworICBQUklOVF9OQU1FRF9CSVRNQVNLKFVJTlQsIFRSQUNFX0JJVFMpOworICBQUklOVF9OQU1FRF9CSVRNQVNLKFVJTlQsIFRSQUNFX0lDQUxMUyk7CisgIFBSSU5UX05BTUVEX0JJVE1BU0soVUlOVCwgVFJBQ0VfQ0NBTExTKTsKKyAgUFJJTlRfTkFNRURfQklUTUFTSyhVSU5ULCBUUkFDRV9EQVRBQkFTRSk7CisgIFBSSU5UX05BTUVEX0JJVE1BU0soVUlOVCwgVFJBQ0VfQVRUUlMpOworICBwcmludF9jb25zdGFudCgiVHJhY2VfU2l6ZSIsIDggKiBzaXplb2YoVUlOVCkpOworCisgIHByaW50ZigiZW5kIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXNfQ29uc3RhbnRzO1xuIik7CisgIGV4aXQoRVhJVF9TVUNDRVNTKTsKIH0KZGlmZiAtLWdpdCBhL0FkYTk1L2dlbi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eC5hZHMubTQgYi9BZGE5NS9nZW4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXguYWRzLm00CmluZGV4IGUwYzkzNDguLmI5MGI4ZGQgMTAwNjQ0Ci0tLSBhL0FkYTk1L2dlbi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eC5hZHMubTQKKysrIGIvQWRhOTUvZ2VuL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4LmFkcy5tNApAQCAtMTAsNyArMTAsNyBAQAogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAxMSwyMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCiAtLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KQEAgLTM4LDE0ICszOCwxMiBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CiAtLSAgVmVyc2lvbiBDb250cm9sOgotLS0gICRSZXZpc2lvbjogMS4xNiAkCistLSAgJFJldmlzaW9uOiAxLjIzICQKIC0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotaW5jbHVkZShgQmFzZV9EZWZzJykKIHdpdGggU3lzdGVtOwogd2l0aCBJbnRlcmZhY2VzLkM7CiB3aXRoIEludGVyZmFjZXMuQy5TdHJpbmdzOyB1c2UgSW50ZXJmYWNlcy5DLlN0cmluZ3M7Ci13aXRoIFVuY2hlY2tlZF9Db252ZXJzaW9uOwogCiBwYWNrYWdlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuQXV4IGlzCiAgICBwcmFnbWEgUHJlZWxhYm9yYXRlIChUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkF1eCk7CkBAIC02MCw0MSArNTgsNDEgQEAKICAgIHN1YnR5cGUgQ19VTG9uZyAgICBpcyBJbnRlcmZhY2VzLkMudW5zaWduZWRfbG9uZzsKICAgIHN1YnR5cGUgQ19DaGFyX1B0ciBpcyBJbnRlcmZhY2VzLkMuU3RyaW5ncy5jaGFyc19wdHI7CiAgICB0eXBlICAgIENfVm9pZF9QdHIgaXMgbmV3IFN5c3RlbS5BZGRyZXNzOwotaW5jbHVkZShgQ2h0eXBlX0RlZicpCisKICAgIC0tICBUaGlzIGlzIGhvdyB0aG9zZSBjb25zdGFudHMgYXJlIGRlZmluZWQgaW4gbmN1cnNlcy4gSSBzZWUgdGhlbSBhbHNvCiAgICAtLSAgZXhhY3RseSBsaWtlIHRoaXMgaW4gYWxsIEVUSSBpbXBsZW1lbnRhdGlvbnMgSSBldmVyIHRlc3RlZC4gU28gaXQKICAgIC0tICBjb3VsZCBiZSB0aGF0IHRoaXMgaXMgcXVpdGUgZ2VuZXJhbCwgYnV0IHBsZWFzZSBjaGVjayB3aXRoIHlvdXIgY3Vyc2VzLgotICAgLS0gIFRoaXMgaXMgY3JpdGljYWwsIGJlY2F1c2UgY3Vyc2VzIHNvbWV0aW1lIG1peGVzIGJvb2xlYW4gcmV0dXJucyB3aXRoCisgICAtLSAgVGhpcyBpcyBjcml0aWNhbCwgYmVjYXVzZSBjdXJzZXMgc29tZXRpbWUgbWl4ZXMgQm9vbGVhbiByZXR1cm5zIHdpdGgKICAgIC0tICByZXR1cm5pbmcgYW4gZXJyb3Igc3RhdHVzLgotICAgQ3Vyc2VzX09rICAgIDogY29uc3RhbnQgQ19JbnQgOj0gQ0ZfQ1VSU0VTX09LOwotICAgQ3Vyc2VzX0VyciAgIDogY29uc3RhbnQgQ19JbnQgOj0gQ0ZfQ1VSU0VTX0VSUjsKKyAgIEN1cnNlc19PayAgICA6IGNvbnN0YW50IENfSW50IDo9IEN1cnNlc19Db25zdGFudHMuT0s7CisgICBDdXJzZXNfRXJyICAgOiBjb25zdGFudCBDX0ludCA6PSBDdXJzZXNfQ29uc3RhbnRzLkVSUjsKIAotICAgQ3Vyc2VzX1RydWUgIDogY29uc3RhbnQgQ19JbnQgOj0gQ0ZfQ1VSU0VTX1RSVUU7Ci0gICBDdXJzZXNfRmFsc2UgOiBjb25zdGFudCBDX0ludCA6PSBDRl9DVVJTRVNfRkFMU0U7CisgICBDdXJzZXNfVHJ1ZSAgOiBjb25zdGFudCBDX0ludCA6PSBDdXJzZXNfQ29uc3RhbnRzLlRSVUU7CisgICBDdXJzZXNfRmFsc2UgOiBjb25zdGFudCBDX0ludCA6PSBDdXJzZXNfQ29uc3RhbnRzLkZBTFNFOwogCiAgICAtLSAgRXRpX0Vycm9yOiB0eXBlIGZvciBlcnJvciBjb2RlcyByZXR1cm5lZCBieSB0aGUgbWVudSBhbmQgZm9ybSBzdWJzeXN0ZW0KLWluY2x1ZGUoYEV0aV9EZWZzJykKKyAgIHR5cGUgRXRpX0Vycm9yIGlzCisgICAgIChFX0N1cnJlbnQsCisgICAgICBFX0ludmFsaWRfRmllbGQsCisgICAgICBFX1JlcXVlc3RfRGVuaWVkLAorICAgICAgRV9Ob3RfQ29ubmVjdGVkLAorICAgICAgRV9Ob3RfU2VsZWN0YWJsZSwKKyAgICAgIEVfTm9fTWF0Y2gsCisgICAgICBFX1Vua25vd25fQ29tbWFuZCwKKyAgICAgIEVfTm90X1Bvc3RlZCwKKyAgICAgIEVfTm9fUm9vbSwKKyAgICAgIEVfQmFkX1N0YXRlLAorICAgICAgRV9Db25uZWN0ZWQsCisgICAgICBFX1Bvc3RlZCwKKyAgICAgIEVfQmFkX0FyZ3VtZW50LAorICAgICAgRV9TeXN0ZW1fRXJyb3IsCisgICAgICBFX09rKTsKKwogICAgcHJvY2VkdXJlIEV0aV9FeGNlcHRpb24gKENvZGUgOiBFdGlfRXJyb3IpOwotICAgLS0gIERpc3BhdGNoIHRoZSBlcnJvciBjb2RlIGFuZCByYWlzZSB0aGUgYXBwcm9wcmlhdGUgZXhjZXB0aW9uCi0gICAtLQotICAgLS0KLSAgIC0tICBTb21lIGhlbHBlcnMKLSAgIGZ1bmN0aW9uIENodHlwZV9Ub19BdHRyQ2hhciBpcyBuZXcKLSAgICAgVW5jaGVja2VkX0NvbnZlcnNpb24gKFNvdXJjZSA9PiBDX0NodHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhcmdldCA9PiBBdHRyaWJ1dGVkX0NoYXJhY3Rlcik7Ci0gICBmdW5jdGlvbiBBdHRyQ2hhcl9Ub19DaHR5cGUgaXMgbmV3Ci0gICAgIFVuY2hlY2tlZF9Db252ZXJzaW9uIChTb3VyY2UgPT4gQXR0cmlidXRlZF9DaGFyYWN0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBUYXJnZXQgPT4gQ19DaHR5cGUpOworICAgLS0gIERvIG5vdGhpbmcgaWYgQ29kZSA9IEVfT2suCisgICAtLSAgRWxzZSBkaXNwYXRjaCB0aGUgZXJyb3IgY29kZSBhbmQgcmFpc2UgdGhlIGFwcHJvcHJpYXRlIGV4Y2VwdGlvbi4KIAotICAgZnVuY3Rpb24gQXR0ckNoYXJfVG9fQXR0clR5cGUgaXMgbmV3Ci0gICAgIFVuY2hlY2tlZF9Db252ZXJzaW9uIChTb3VyY2UgPT4gQXR0cmlidXRlZF9DaGFyYWN0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBUYXJnZXQgPT4gQ19BdHRyVHlwZSk7Ci0KLSAgIGZ1bmN0aW9uIEF0dHJUeXBlX1RvX0F0dHJDaGFyIGlzIG5ldwotICAgICBVbmNoZWNrZWRfQ29udmVyc2lvbiAoU291cmNlID0+IENfQXR0clR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBUYXJnZXQgPT4gQXR0cmlidXRlZF9DaGFyYWN0ZXIpOwotCi0gICBwcm9jZWR1cmUgRmlsbF9TdHJpbmcgKENwICA6IGluICBjaGFyc19wdHI7CisgICBwcm9jZWR1cmUgRmlsbF9TdHJpbmcgKENwICA6IGNoYXJzX3B0cjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyIDogb3V0IFN0cmluZyk7CiAgICAtLSAgRmlsbCB0aGUgU3RyIHBhcmFtZXRlciB3aXRoIHRoZSBzdHJpbmcgZGVub3RlZCBieSB0aGUgY2hhcnNfcHRyCiAgICAtLSAgQy1TdHlsZSBzdHJpbmcuCkBAIC0xMDIsNCArMTAwLDIzIEBACiAgICBmdW5jdGlvbiBGaWxsX1N0cmluZyAoQ3AgOiBjaGFyc19wdHIpIHJldHVybiBTdHJpbmc7CiAgICAtLSAgU2FtZSBidXQgYXMgZnVuY3Rpb24uCiAKK3ByaXZhdGUKKyAgIGZvciBFdGlfRXJyb3InU2l6ZSB1c2UgQ19JbnQnU2l6ZTsKKyAgIHByYWdtYSBDb252ZW50aW9uIChDLCBFdGlfRXJyb3IpOworICAgZm9yIEV0aV9FcnJvciB1c2UKKyAgICAgKEVfQ3VycmVudCAgICAgICAgID0+IEN1cnNlc19Db25zdGFudHMuRV9DVVJSRU5ULAorICAgICAgRV9JbnZhbGlkX0ZpZWxkICAgPT4gQ3Vyc2VzX0NvbnN0YW50cy5FX0lOVkFMSURfRklFTEQsCisgICAgICBFX1JlcXVlc3RfRGVuaWVkICA9PiBDdXJzZXNfQ29uc3RhbnRzLkVfUkVRVUVTVF9ERU5JRUQsCisgICAgICBFX05vdF9Db25uZWN0ZWQgICA9PiBDdXJzZXNfQ29uc3RhbnRzLkVfTk9UX0NPTk5FQ1RFRCwKKyAgICAgIEVfTm90X1NlbGVjdGFibGUgID0+IEN1cnNlc19Db25zdGFudHMuRV9OT1RfU0VMRUNUQUJMRSwKKyAgICAgIEVfTm9fTWF0Y2ggICAgICAgID0+IEN1cnNlc19Db25zdGFudHMuRV9OT19NQVRDSCwKKyAgICAgIEVfVW5rbm93bl9Db21tYW5kID0+IEN1cnNlc19Db25zdGFudHMuRV9VTktOT1dOX0NPTU1BTkQsCisgICAgICBFX05vdF9Qb3N0ZWQgICAgICA9PiBDdXJzZXNfQ29uc3RhbnRzLkVfTk9UX1BPU1RFRCwKKyAgICAgIEVfTm9fUm9vbSAgICAgICAgID0+IEN1cnNlc19Db25zdGFudHMuRV9OT19ST09NLAorICAgICAgRV9CYWRfU3RhdGUgICAgICAgPT4gQ3Vyc2VzX0NvbnN0YW50cy5FX0JBRF9TVEFURSwKKyAgICAgIEVfQ29ubmVjdGVkICAgICAgID0+IEN1cnNlc19Db25zdGFudHMuRV9DT05ORUNURUQsCisgICAgICBFX1Bvc3RlZCAgICAgICAgICA9PiBDdXJzZXNfQ29uc3RhbnRzLkVfUE9TVEVELAorICAgICAgRV9CYWRfQXJndW1lbnQgICAgPT4gQ3Vyc2VzX0NvbnN0YW50cy5FX0JBRF9BUkdVTUVOVCwKKyAgICAgIEVfU3lzdGVtX0Vycm9yICAgID0+IEN1cnNlc19Db25zdGFudHMuRV9TWVNURU1fRVJST1IsCisgICAgICBFX09rICAgICAgICAgICAgICA9PiBDdXJzZXNfQ29uc3RhbnRzLkVfT0spOwogZW5kIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuQXV4OwpkaWZmIC0tZ2l0IGEvQWRhOTUvZ2VuL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMuYWRzLm00IGIvQWRhOTUvZ2VuL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMuYWRzLm00CmluZGV4IDg4MTk4NDQuLjUxNjgyY2QgMTAwNjQ0Ci0tLSBhL0FkYTk1L2dlbi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLmFkcy5tNAorKysgYi9BZGE5NS9nZW4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy5hZHMubTQKQEAgLTEwLDcgKzEwLDcgQEAKIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMTEsMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQogLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCkBAIC0zOCwxMCArMzgsMTEgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgogLS0gIFZlcnNpb24gQ29udHJvbDoKLS0tICAkUmV2aXNpb246IDEuMTQgJAorLS0gICRSZXZpc2lvbjogMS4xOSAkCiAtLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHdpdGggSW50ZXJmYWNlcy5DOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkF1eDsKIAogcGFja2FnZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzIGlzCiAgICBwcmFnbWEgUHJlZWxhYm9yYXRlIChUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzKTsKQEAgLTY0LDggKzY1LDggQEAKICAgIHR5cGUgRmllbGRfVHlwZV9BY2Nlc3MgaXMgYWNjZXNzIGFsbCBGaWVsZF9UeXBlJ0NsYXNzOwogCiAgICAtLSAgQU5DSE9SKGBzZXRfZmllbGRfdHlwZSgpJyxgU2V0X1R5cGUnKQotICAgcHJvY2VkdXJlIFNldF9GaWVsZF9UeXBlIChGbGQgICAgICA6IGluIEZpZWxkOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbGRfVHlwZSA6IGluIEZpZWxkX1R5cGUpIGlzIGFic3RyYWN0OworICAgcHJvY2VkdXJlIFNldF9GaWVsZF9UeXBlIChGbGQgICAgICA6IEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbGRfVHlwZSA6IEZpZWxkX1R5cGUpIGlzIGFic3RyYWN0OwogICAgLS0gIEFLQQogICAgLS0gIEJ1dDogd2UgaGlkZSB0aGUgdmFyYXJnIG1lY2hhbmlzbSBvZiB0aGUgQyBpbnRlcmZhY2UuIFlvdSBhbHdheXMKICAgIC0tICAgICAgIGhhdmUgdG8gcGFzcyBhIHNpbmdsZSBGaWVsZF9UeXBlIHBhcmFtZXRlci4KQEAgLTc1LDcgKzc2LDcgQEAKICAgIC0tICBNQU5QQUdFKGBmb3JtX2ZpZWxkX3ZhbGlkYXRpb24uM3gnKQogCiAgICAtLSAgQU5DSE9SKGBmaWVsZF90eXBlKCknLGBHZXRfVHlwZScpCi0gICBmdW5jdGlvbiBHZXRfVHlwZSAoRmxkIDogaW4gRmllbGQpIHJldHVybiBGaWVsZF9UeXBlX0FjY2VzczsKKyAgIGZ1bmN0aW9uIEdldF9UeXBlIChGbGQgOiBGaWVsZCkgcmV0dXJuIEZpZWxkX1R5cGVfQWNjZXNzOwogICAgLS0gIEFLQQogICAgLS0gIEFMSUFTKGBmaWVsZF9hcmcoKScpCiAgICAtLSAgSW4gQWRhOTUgd2UgY2FuIGNvbWJpbmUgdGhlc2UuIElmIHlvdSB0cnkgdG8gcmV0cmlldmUgdGhlIGZpZWxkIHR5cGUKQEAgLTEwMSwxNSArMTAyLDE1IEBACiAgICBwcmFnbWEgQ29udmVudGlvbiAoQywgRnJlZWFyZ19GdW5jdGlvbik7CiAKICAgIHR5cGUgRmllbGRfQ2hlY2tfRnVuY3Rpb24gaXMgYWNjZXNzCi0gICAgIGZ1bmN0aW9uIChGbGQgOiBGaWVsZDsgVXNyIDogU3lzdGVtLkFkZHJlc3MpIHJldHVybiBDX0ludDsKKyAgICAgZnVuY3Rpb24gKEZsZCA6IEZpZWxkOyBVc3IgOiBTeXN0ZW0uQWRkcmVzcykgcmV0dXJuIEN1cnNlc19Cb29sOwogICAgcHJhZ21hIENvbnZlbnRpb24gKEMsIEZpZWxkX0NoZWNrX0Z1bmN0aW9uKTsKIAogICAgdHlwZSBDaGFyX0NoZWNrX0Z1bmN0aW9uIGlzIGFjY2VzcwotICAgICBmdW5jdGlvbiAoQ2ggOiBDX0ludDsgVXNyIDogU3lzdGVtLkFkZHJlc3MpIHJldHVybiBDX0ludDsKKyAgICAgZnVuY3Rpb24gKENoIDogQ19JbnQ7IFVzciA6IFN5c3RlbS5BZGRyZXNzKSByZXR1cm4gQ3Vyc2VzX0Jvb2w7CiAgICBwcmFnbWEgQ29udmVudGlvbiAoQywgQ2hhcl9DaGVja19GdW5jdGlvbik7CiAKICAgIHR5cGUgQ2hvaWNlX0Z1bmN0aW9uIGlzIGFjY2VzcwotICAgICBmdW5jdGlvbiAoRmxkIDogRmllbGQ7IFVzciA6IFN5c3RlbS5BZGRyZXNzKSByZXR1cm4gQ19JbnQ7CisgICAgIGZ1bmN0aW9uIChGbGQgOiBGaWVsZDsgVXNyIDogU3lzdGVtLkFkZHJlc3MpIHJldHVybiBDdXJzZXNfQm9vbDsKICAgIHByYWdtYSBDb252ZW50aW9uIChDLCBDaG9pY2VfRnVuY3Rpb24pOwogCiAgICAtLSAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTExNyw3ICsxMTgsNyBAQAogICAgLS0gIHwKICAgIHR5cGUgTG93X0xldmVsX0ZpZWxkX1R5cGUgaXMKICAgICAgIHJlY29yZAotICAgICAgICAgU3RhdHVzIDogICAgICAgICAgICAgIEludGVyZmFjZXMuQy5zaG9ydDsKKyAgICAgICAgIFN0YXR1cyA6ICAgICAgICAgICAgICBJbnRlcmZhY2VzLkMudW5zaWduZWRfc2hvcnQ7CiAgICAgICAgICBSZWZfQ291bnQgOiAgICAgICAgICAgSW50ZXJmYWNlcy5DLmxvbmc7CiAgICAgICAgICBMZWZ0LCBSaWdodCA6ICAgICAgICAgU3lzdGVtLkFkZHJlc3M7CiAgICAgICAgICBNYWtlYXJnIDogICAgICAgICAgICAgTWFrZWFyZ19GdW5jdGlvbjsKQEAgLTE1OSw3ICsxNjAsNyBAQAogICAgLS0gIEFueSBvdGhlciB2YWx1ZSB3aWxsIHJhaXNlIGEgRm9ybV9FeGNlcHRpb24uCiAKICAgIGZ1bmN0aW9uIE1ha2VfQXJnIChBcmdzIDogU3lzdGVtLkFkZHJlc3MpIHJldHVybiBTeXN0ZW0uQWRkcmVzczsKLSAgIHByYWdtYSBDb252ZW50aW9uIChDLCBNYWtlX0FyZyk7CisgICBwcmFnbWEgSW1wb3J0IChDLCBNYWtlX0FyZywgInZvaWRfc3Rhcl9tYWtlX2FyZyIpOwogICAgLS0gIFRoaXMgaXMgdGhlIE1ha2VhcmdfRnVuY3Rpb24gZm9yIHRoZSBpbnRlcm5hbCBsb3ctbGV2ZWwgdHlwZXMKICAgIC0tICBpbnRyb2R1Y2VkIGJ5IHRoaXMgYmluZGluZy4KIApAQCAtMTc0LDcgKzE3NSw3IEBACiAgICAtLSAgaW50cm9kdWNlZCBieSB0aGlzIGJpbmRpbmcuCiAKICAgIGZ1bmN0aW9uIEZpZWxkX0NoZWNrX1JvdXRlciAoRmxkIDogRmllbGQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzciA6IFN5c3RlbS5BZGRyZXNzKSByZXR1cm4gQ19JbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzciA6IFN5c3RlbS5BZGRyZXNzKSByZXR1cm4gQ3Vyc2VzX0Jvb2w7CiAgICBwcmFnbWEgQ29udmVudGlvbiAoQywgRmllbGRfQ2hlY2tfUm91dGVyKTsKICAgIC0tICBUaGlzIGlzIHRoZSBGaWVsZF9DaGVja19GdW5jdGlvbiBmb3IgdGhlIGludGVybmFsIGxvdy1sZXZlbCB0eXBlcwogICAgLS0gIGludHJvZHVjZWQgdG8gd3JhcCB0aGUgbG93LWxldmVsIHR5cGVzIGJ5IGEgRmllbGRfVHlwZSBkZXJpdmVkCkBAIC0xODIsNyArMTgzLDcgQEAKICAgIC0tICBmdW5jdGlvbi4KIAogICAgZnVuY3Rpb24gQ2hhcl9DaGVja19Sb3V0ZXIgKENoIDogQ19JbnQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNyIDogU3lzdGVtLkFkZHJlc3MpIHJldHVybiBDX0ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc3IgOiBTeXN0ZW0uQWRkcmVzcykgcmV0dXJuIEN1cnNlc19Cb29sOwogICAgcHJhZ21hIENvbnZlbnRpb24gKEMsIENoYXJfQ2hlY2tfUm91dGVyKTsKICAgIC0tICBUaGlzIGlzIHRoZSBDaGFyX0NoZWNrX0Z1bmN0aW9uIGZvciB0aGUgaW50ZXJuYWwgbG93LWxldmVsIHR5cGVzCiAgICAtLSAgaW50cm9kdWNlZCB0byB3cmFwIHRoZSBsb3ctbGV2ZWwgdHlwZXMgYnkgYSBGaWVsZF9UeXBlIGRlcml2ZWQKQEAgLTE5MCw3ICsxOTEsNyBAQAogICAgLS0gIGZ1bmN0aW9uLgogCiAgICBmdW5jdGlvbiBOZXh0X1JvdXRlciAoRmxkIDogRmllbGQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgVXNyIDogU3lzdGVtLkFkZHJlc3MpIHJldHVybiBDX0ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBVc3IgOiBTeXN0ZW0uQWRkcmVzcykgcmV0dXJuIEN1cnNlc19Cb29sOwogICAgcHJhZ21hIENvbnZlbnRpb24gKEMsIE5leHRfUm91dGVyKTsKICAgIC0tICBUaGlzIGlzIHRoZSBDaG9pY2VfRnVuY3Rpb24gZm9yIHRoZSBpbnRlcm5hbCBsb3ctbGV2ZWwgdHlwZXMKICAgIC0tICBpbnRyb2R1Y2VkIHRvIHdyYXAgdGhlIGxvdy1sZXZlbCB0eXBlcyBieSBhIEZpZWxkX1R5cGUgZGVyaXZlZApAQCAtMTk4LDcgKzE5OSw3IEBACiAgICAtLSAgZnVuY3Rpb24uCiAKICAgIGZ1bmN0aW9uIFByZXZfUm91dGVyIChGbGQgOiBGaWVsZDsKLSAgICAgICAgICAgICAgICAgICAgICAgICBVc3IgOiBTeXN0ZW0uQWRkcmVzcykgcmV0dXJuIENfSW50OworICAgICAgICAgICAgICAgICAgICAgICAgIFVzciA6IFN5c3RlbS5BZGRyZXNzKSByZXR1cm4gQ3Vyc2VzX0Jvb2w7CiAgICBwcmFnbWEgQ29udmVudGlvbiAoQywgUHJldl9Sb3V0ZXIpOwogICAgLS0gIFRoaXMgaXMgdGhlIENob2ljZV9GdW5jdGlvbiBmb3IgdGhlIGludGVybmFsIGxvdy1sZXZlbCB0eXBlcwogICAgLS0gIGludHJvZHVjZWQgdG8gd3JhcCB0aGUgbG93LWxldmVsIHR5cGVzIGJ5IGEgRmllbGRfVHlwZSBkZXJpdmVkCkBAIC0yMjcsMTIgKzIyOCwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hayA6IE1ha2VhcmdfRnVuY3Rpb24gOj0gTWFrZV9BcmcnQWNjZXNzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcCA6IENvcHlhcmdfRnVuY3Rpb24gOj0gQ29weV9BcmcnQWNjZXNzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyZSA6IEZyZWVhcmdfRnVuY3Rpb24gOj0gRnJlZV9BcmcnQWNjZXNzKQotICAgICByZXR1cm4gQ19JbnQ7CisgICAgIHJldHVybiBBdXguRXRpX0Vycm9yOwogICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X0ZpZWxkdHlwZV9BcmcsICJzZXRfZmllbGR0eXBlX2FyZyIpOwogCiAgICBmdW5jdGlvbiBTZXRfRmllbGR0eXBlX0Nob2ljZSAoQ2Z0IDogQ19GaWVsZF9UeXBlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5leHQsIFByZXYgOiBDaG9pY2VfRnVuY3Rpb24pCi0gICAgIHJldHVybiBDX0ludDsKKyAgICAgcmV0dXJuIEF1eC5FdGlfRXJyb3I7CiAgICBwcmFnbWEgSW1wb3J0IChDLCBTZXRfRmllbGR0eXBlX0Nob2ljZSwgInNldF9maWVsZHR5cGVfY2hvaWNlIik7CiAKIGVuZCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzOwpkaWZmIC0tZ2l0IGEvQWRhOTUvZ2VuL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhLmFkcy5tNCBiL0FkYTk1L2dlbi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YS5hZHMubTQKaW5kZXggNDEzOTg4My4uOWRlNzAwYiAxMDA2NDQKLS0tIGEvQWRhOTUvZ2VuL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhLmFkcy5tNAorKysgYi9BZGE5NS9nZW4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGEuYWRzLm00CkBAIC0xMCw3ICsxMCw3IEBACiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KIC0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQpAQCAtMzgsNyArMzgsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CiAtLSAgVmVyc2lvbiBDb250cm9sOgotLS0gICRSZXZpc2lvbjogMS4xNSAkCistLSAgJFJldmlzaW9uOiAxLjE2ICQKIC0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC01MSwxOCArNTEsMTggQEAKICAgIC0tICBNQU5QQUdFKGBmb3JtX2ZpZWxkX3VzZXJwdHIuM3gnKQogCiAgICAtLSAgQU5DSE9SKGBzZXRfZmllbGRfdXNlcnB0cicsYFNldF9Vc2VyX0RhdGEnKQotICAgcHJvY2VkdXJlIFNldF9Vc2VyX0RhdGEgKEZsZCAgOiBpbiBGaWVsZDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhIDogaW4gVXNlcl9BY2Nlc3MpOworICAgcHJvY2VkdXJlIFNldF9Vc2VyX0RhdGEgKEZsZCAgOiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhIDogVXNlcl9BY2Nlc3MpOwogICAgLS0gIEFLQQogICAgcHJhZ21hIElubGluZSAoU2V0X1VzZXJfRGF0YSk7CiAKICAgIC0tICBBTkNIT1IoYGZpZWxkX3VzZXJwdHInLGBHZXRfVXNlcl9EYXRhJykKLSAgIHByb2NlZHVyZSBHZXRfVXNlcl9EYXRhIChGbGQgIDogaW4gIEZpZWxkOworICAgcHJvY2VkdXJlIEdldF9Vc2VyX0RhdGEgKEZsZCAgOiBGaWVsZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhIDogb3V0IFVzZXJfQWNjZXNzKTsKICAgIC0tICBBS0EKIAogICAgLS0gIEFOQ0hPUihgZmllbGRfdXNlcnB0cicsYEdldF9Vc2VyX0RhdGEnKQotICAgZnVuY3Rpb24gR2V0X1VzZXJfRGF0YSAoRmxkICA6IGluICBGaWVsZCkgcmV0dXJuIFVzZXJfQWNjZXNzOworICAgZnVuY3Rpb24gR2V0X1VzZXJfRGF0YSAoRmxkICA6IEZpZWxkKSByZXR1cm4gVXNlcl9BY2Nlc3M7CiAgICAtLSAgQUtBCiAgICAtLSAgU2FtYSBhcyBmdW5jdGlvbgogICAgcHJhZ21hIElubGluZSAoR2V0X1VzZXJfRGF0YSk7CmRpZmYgLS1naXQgYS9BZGE5NS9nZW4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1mb3JtX3VzZXJfZGF0YS5hZHMubTQgYi9BZGE5NS9nZW4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1mb3JtX3VzZXJfZGF0YS5hZHMubTQKaW5kZXggMGM0NDIwZC4uZjdmYjFhNyAxMDA2NDQKLS0tIGEvQWRhOTUvZ2VuL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGEuYWRzLm00CisrKyBiL0FkYTk1L2dlbi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhLmFkcy5tNApAQCAtMTAsNyArMTAsNyBAQAogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCiAtLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KQEAgLTM4LDcgKzM4LDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgogLS0gIFZlcnNpb24gQ29udHJvbDoKLS0tICAkUmV2aXNpb246IDEuMTQgJAorLS0gICRSZXZpc2lvbjogMS4xNSAkCiAtLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtNTEsMTggKzUxLDE4IEBACiAgICAtLSAgTUFOUEFHRShgZm9ybV91c2VycHRyLjN4JykKIAogICAgLS0gIEFOQ0hPUihgc2V0X2Zvcm1fdXNlcnB0cicsYFNldF9Vc2VyX0RhdGEnKQotICAgcHJvY2VkdXJlIFNldF9Vc2VyX0RhdGEgKEZybSAgOiBpbiBGb3JtOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgOiBpbiBVc2VyX0FjY2Vzcyk7CisgICBwcm9jZWR1cmUgU2V0X1VzZXJfRGF0YSAoRnJtICA6IEZvcm07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA6IFVzZXJfQWNjZXNzKTsKICAgIC0tICBBS0EKICAgIHByYWdtYSBJbmxpbmUgKFNldF9Vc2VyX0RhdGEpOwogCiAgICAtLSAgQU5DSE9SKGBmb3JtX3VzZXJwdHInLGBHZXRfVXNlcl9EYXRhJykKLSAgIHByb2NlZHVyZSBHZXRfVXNlcl9EYXRhIChGcm0gIDogaW4gIEZvcm07CisgICBwcm9jZWR1cmUgR2V0X1VzZXJfRGF0YSAoRnJtICA6IEZvcm07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA6IG91dCBVc2VyX0FjY2Vzcyk7CiAgICAtLSAgQUtBCiAKICAgIC0tICBBTkNIT1IoYGZvcm1fdXNlcnB0cicsYEdldF9Vc2VyX0RhdGEnKQotICAgZnVuY3Rpb24gR2V0X1VzZXJfRGF0YSAoRnJtICA6IGluICBGb3JtKSByZXR1cm4gVXNlcl9BY2Nlc3M7CisgICBmdW5jdGlvbiBHZXRfVXNlcl9EYXRhIChGcm0gIDogRm9ybSkgcmV0dXJuIFVzZXJfQWNjZXNzOwogICAgLS0gIEFLQQogICAgLS0gIFNhbWUgYXMgZnVuY3Rpb24KICAgIHByYWdtYSBJbmxpbmUgKEdldF9Vc2VyX0RhdGEpOwpkaWZmIC0tZ2l0IGEvQWRhOTUvZ2VuL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMuYWRzLm00IGIvQWRhOTUvZ2VuL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMuYWRzLm00CmluZGV4IDViNzVlZGIuLmIyNjlmNGMgMTAwNjQ0Ci0tLSBhL0FkYTk1L2dlbi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLmFkcy5tNAorKysgYi9BZGE5NS9nZW4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy5hZHMubTQKQEAgLTEwLDcgKzEwLDcgQEAKIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIENvcHlyaWdodCAoYykgMTk5OCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDksMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQogLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCkBAIC0zOCwxOCArMzgsMTcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgogLS0gIFZlcnNpb24gQ29udHJvbDoKLS0tICAkUmV2aXNpb246IDEuMjkgJAotLS0gICREYXRlOiAyMDA2LzA2LzI1IDE0OjMwOjIxICQKKy0tICAkUmV2aXNpb246IDEuMzMgJAorLS0gICREYXRlOiAyMDE0LzA1LzI0IDIxOjMxOjU3ICQKIC0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotaW5jbHVkZShgRm9ybV9CYXNlX0RlZnMnKQogd2l0aCBTeXN0ZW07CiB3aXRoIEFkYS5DaGFyYWN0ZXJzLkxhdGluXzE7CiAKIHBhY2thZ2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3JtcyBpcwogICAgcHJhZ21hIFByZWVsYWJvcmF0ZSAoVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcyk7Ci1pbmNsdWRlKGBGb3JtX0xpbmtlcl9PcHRpb25zJylkbmwKLWluY2x1ZGUoYExpbmtlcl9PcHRpb25zJykKKyAgIHByYWdtYSBMaW5rZXJfT3B0aW9ucyAoIi1sZm9ybSIgJiBDdXJzZXNfQ29uc3RhbnRzLkRGVF9BUkdfU1VGRklYKTsKKwogICAgU3BhY2UgOiBDaGFyYWN0ZXIgcmVuYW1lcyBBZGEuQ2hhcmFjdGVycy5MYXRpbl8xLlNwYWNlOwogCiAgICB0eXBlIEZpZWxkICAgICAgICBpcyBwcml2YXRlOwpAQCAtNjMsMTggKzYyLDY4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENlbnRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmlnaHQpOwogCi0gICBwcmFnbWEgV2FybmluZ3MgKE9mZik7Ci1pbmNsdWRlKGBGaWVsZF9SZXAnKURubAorICAgdHlwZSBGaWVsZF9PcHRpb25fU2V0IGlzCisgICAgICByZWNvcmQKKyAgICAgICAgIFZpc2libGUgICA6IEJvb2xlYW47CisgICAgICAgICBBY3RpdmUgICAgOiBCb29sZWFuOworICAgICAgICAgUHVibGljICAgIDogQm9vbGVhbjsKKyAgICAgICAgIEVkaXQgICAgICA6IEJvb2xlYW47CisgICAgICAgICBXcmFwICAgICAgOiBCb29sZWFuOworICAgICAgICAgQmxhbmsgICAgIDogQm9vbGVhbjsKKyAgICAgICAgIEF1dG9fU2tpcCA6IEJvb2xlYW47CisgICAgICAgICBOdWxsX09rICAgOiBCb29sZWFuOworICAgICAgICAgUGFzc19PayAgIDogQm9vbGVhbjsKKyAgICAgICAgIFN0YXRpYyAgICA6IEJvb2xlYW47CisgICAgICBlbmQgcmVjb3JkOworICAgcHJhZ21hIENvbnZlbnRpb24gKENfUGFzc19CeV9Db3B5LCBGaWVsZF9PcHRpb25fU2V0KTsKIAorICAgZm9yIEZpZWxkX09wdGlvbl9TZXQgdXNlCisgICAgICByZWNvcmQKKyAgICAgICAgIFZpc2libGUgICBhdCAwIHJhbmdlIEN1cnNlc19Db25zdGFudHMuT19WSVNJQkxFX0ZpcnN0CisgICAgICAgICAgIC4uIEN1cnNlc19Db25zdGFudHMuT19WSVNJQkxFX0xhc3Q7CisgICAgICAgICBBY3RpdmUgICAgYXQgMCByYW5nZSBDdXJzZXNfQ29uc3RhbnRzLk9fQUNUSVZFX0ZpcnN0CisgICAgICAgICAgIC4uIEN1cnNlc19Db25zdGFudHMuT19BQ1RJVkVfTGFzdDsKKyAgICAgICAgIFB1YmxpYyAgICBhdCAwIHJhbmdlIEN1cnNlc19Db25zdGFudHMuT19QVUJMSUNfRmlyc3QKKyAgICAgICAgICAgLi4gQ3Vyc2VzX0NvbnN0YW50cy5PX1BVQkxJQ19MYXN0OworICAgICAgICAgRWRpdCAgICAgIGF0IDAgcmFuZ2UgQ3Vyc2VzX0NvbnN0YW50cy5PX0VESVRfRmlyc3QKKyAgICAgICAgICAgLi4gQ3Vyc2VzX0NvbnN0YW50cy5PX0VESVRfTGFzdDsKKyAgICAgICAgIFdyYXAgICAgICBhdCAwIHJhbmdlIEN1cnNlc19Db25zdGFudHMuT19XUkFQX0ZpcnN0CisgICAgICAgICAgIC4uIEN1cnNlc19Db25zdGFudHMuT19XUkFQX0xhc3Q7CisgICAgICAgICBCbGFuayAgICAgYXQgMCByYW5nZSBDdXJzZXNfQ29uc3RhbnRzLk9fQkxBTktfRmlyc3QKKyAgICAgICAgICAgLi4gQ3Vyc2VzX0NvbnN0YW50cy5PX0JMQU5LX0xhc3Q7CisgICAgICAgICBBdXRvX1NraXAgYXQgMCByYW5nZSBDdXJzZXNfQ29uc3RhbnRzLk9fQVVUT1NLSVBfRmlyc3QKKyAgICAgICAgICAgLi4gQ3Vyc2VzX0NvbnN0YW50cy5PX0FVVE9TS0lQX0xhc3Q7CisgICAgICAgICBOdWxsX09rICAgYXQgMCByYW5nZSBDdXJzZXNfQ29uc3RhbnRzLk9fTlVMTE9LX0ZpcnN0CisgICAgICAgICAgIC4uIEN1cnNlc19Db25zdGFudHMuT19OVUxMT0tfTGFzdDsKKyAgICAgICAgIFBhc3NfT2sgICBhdCAwIHJhbmdlIEN1cnNlc19Db25zdGFudHMuT19QQVNTT0tfRmlyc3QKKyAgICAgICAgICAgLi4gQ3Vyc2VzX0NvbnN0YW50cy5PX1BBU1NPS19MYXN0OworICAgICAgICAgU3RhdGljICAgIGF0IDAgcmFuZ2UgQ3Vyc2VzX0NvbnN0YW50cy5PX1NUQVRJQ19GaXJzdAorICAgICAgICAgICAuLiBDdXJzZXNfQ29uc3RhbnRzLk9fU1RBVElDX0xhc3Q7CisgICAgICBlbmQgcmVjb3JkOworICAgcHJhZ21hIFdhcm5pbmdzIChPZmYpOworICAgZm9yIEZpZWxkX09wdGlvbl9TZXQnU2l6ZSB1c2UgQ3Vyc2VzX0NvbnN0YW50cy5GaWVsZF9PcHRpb25zX1NpemU7CiAgICBwcmFnbWEgV2FybmluZ3MgKE9uKTsKIAogICAgZnVuY3Rpb24gRGVmYXVsdF9GaWVsZF9PcHRpb25zIHJldHVybiBGaWVsZF9PcHRpb25fU2V0OwogICAgLS0gIFRoZSBpbml0aWFsIGRlZmF1bHRzIGZvciB0aGUgZmllbGQgb3B0aW9ucy4KICAgIHByYWdtYSBJbmxpbmUgKERlZmF1bHRfRmllbGRfT3B0aW9ucyk7CiAKLSAgIHByYWdtYSBXYXJuaW5ncyAoT2ZmKTsKLWluY2x1ZGUoYEZvcm1fT3B0X1JlcCcpRG5sCisgICB0eXBlIEZvcm1fT3B0aW9uX1NldCBpcworICAgICAgcmVjb3JkCisgICAgICAgICBOTF9PdmVybG9hZCA6IEJvb2xlYW47CisgICAgICAgICBCU19PdmVybG9hZCA6IEJvb2xlYW47CisgICAgICBlbmQgcmVjb3JkOworICAgcHJhZ21hIENvbnZlbnRpb24gKENfUGFzc19CeV9Db3B5LCBGb3JtX09wdGlvbl9TZXQpOwogCisgICBmb3IgRm9ybV9PcHRpb25fU2V0IHVzZQorICAgICAgcmVjb3JkCisgICAgICAgICBOTF9PdmVybG9hZCBhdCAwIHJhbmdlIEN1cnNlc19Db25zdGFudHMuT19OTF9PVkVSTE9BRF9GaXJzdAorICAgICAgICAgICAuLiBDdXJzZXNfQ29uc3RhbnRzLk9fTkxfT1ZFUkxPQURfTGFzdDsKKyAgICAgICAgIEJTX092ZXJsb2FkIGF0IDAgcmFuZ2UgQ3Vyc2VzX0NvbnN0YW50cy5PX0JTX09WRVJMT0FEX0ZpcnN0CisgICAgICAgICAgIC4uIEN1cnNlc19Db25zdGFudHMuT19CU19PVkVSTE9BRF9MYXN0OworICAgICAgZW5kIHJlY29yZDsKKyAgIHByYWdtYSBXYXJuaW5ncyAoT2ZmKTsKKyAgIGZvciBGb3JtX09wdGlvbl9TZXQnU2l6ZSB1c2UgQ3Vyc2VzX0NvbnN0YW50cy5GaWVsZF9PcHRpb25zX1NpemU7CiAgICBwcmFnbWEgV2FybmluZ3MgKE9uKTsKIAogICAgZnVuY3Rpb24gRGVmYXVsdF9Gb3JtX09wdGlvbnMgcmV0dXJuIEZvcm1fT3B0aW9uX1NldDsKQEAgLTg5LDcgKzEzOCw3IEBACiAgICB0eXBlIEZpZWxkX0FycmF5X0FjY2VzcyBpcyBhY2Nlc3MgRmllbGRfQXJyYXk7CiAKICAgIHByb2NlZHVyZSBGcmVlIChGQSAgICAgICAgICA6IGluIG91dCBGaWVsZF9BcnJheV9BY2Nlc3M7Ci0gICAgICAgICAgICAgICAgICAgRnJlZV9GaWVsZHMgOiBpbiBCb29sZWFuIDo9IEZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICBGcmVlX0ZpZWxkcyA6IEJvb2xlYW4gOj0gRmFsc2UpOwogICAgLS0gIFJlbGVhc2UgdGhlIG1lbW9yeSBmb3IgYW4gYWxsb2NhdGVkIGZpZWxkIGFycmF5CiAgICAtLSAgSWYgRnJlZV9GaWVsZHMgaXMgVHJ1ZSwgY2FsbCBEZWxldGUoKSBmb3IgYWxsIHRoZSBmaWVsZHMgaW4KICAgIC0tICB0aGUgYXJyYXkuCkBAIC0yMjgsNyArMjc3LDcgQEAKICAgIFJFUV9ORVhUX0NIT0lDRSAgOiBGb3JtX1JlcXVlc3RfQ29kZSByZW5hbWVzIEZfTmV4dF9DaG9pY2U7CiAgICBSRVFfUFJFVl9DSE9JQ0UgIDogRm9ybV9SZXF1ZXN0X0NvZGUgcmVuYW1lcyBGX1ByZXZpb3VzX0Nob2ljZTsKIAotICAgcHJvY2VkdXJlIFJlcXVlc3RfTmFtZSAoS2V5ICA6IGluIEZvcm1fUmVxdWVzdF9Db2RlOworICAgcHJvY2VkdXJlIFJlcXVlc3RfTmFtZSAoS2V5ICA6IEZvcm1fUmVxdWVzdF9Db2RlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA6IG91dCBTdHJpbmcpOwogCiAgICBmdW5jdGlvbiAgUmVxdWVzdF9OYW1lIChLZXkgOiBGb3JtX1JlcXVlc3RfQ29kZSkgcmV0dXJuIFN0cmluZzsKQEAgLTI4Nyw4ICszMzYsOCBAQAogICAgLS0gIE1BTlBBR0UoYGZvcm1fZmllbGRfanVzdC4zeCcpCiAKICAgIC0tICBBTkNIT1IoYHNldF9maWVsZF9qdXN0KCknLGBTZXRfSnVzdGlmaWNhdGlvbicpCi0gICBwcm9jZWR1cmUgU2V0X0p1c3RpZmljYXRpb24gKEZsZCAgOiBpbiBGaWVsZDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSnVzdCA6IGluIEZpZWxkX0p1c3RpZmljYXRpb24gOj0gTm9uZSk7CisgICBwcm9jZWR1cmUgU2V0X0p1c3RpZmljYXRpb24gKEZsZCAgOiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSnVzdCA6IEZpZWxkX0p1c3RpZmljYXRpb24gOj0gTm9uZSk7CiAgICAtLSAgQUtBCiAgICBwcmFnbWEgSW5saW5lIChTZXRfSnVzdGlmaWNhdGlvbik7CiAKQEAgLTMwMSwyOSArMzUwLDI5IEBACiAKICAgIC0tICBBTkNIT1IoYHNldF9maWVsZF9idWZmZXIoKScsYFNldF9CdWZmZXInKQogICAgcHJvY2VkdXJlIFNldF9CdWZmZXIKLSAgICAgKEZsZCAgICA6IGluIEZpZWxkOwotICAgICAgQnVmZmVyIDogaW4gQnVmZmVyX051bWJlciA6PSBCdWZmZXJfTnVtYmVyJ0ZpcnN0OwotICAgICAgU3RyICAgIDogaW4gU3RyaW5nKTsKKyAgICAgKEZsZCAgICA6IEZpZWxkOworICAgICAgQnVmZmVyIDogQnVmZmVyX051bWJlciA6PSBCdWZmZXJfTnVtYmVyJ0ZpcnN0OworICAgICAgU3RyICAgIDogU3RyaW5nKTsKICAgIC0tICBBS0EKICAgIC0tICBOb3QgaW5saW5lZAogCiAgICAtLSAgQU5DSE9SKGBmaWVsZF9idWZmZXIoKScsYEdldF9CdWZmZXInKQogICAgcHJvY2VkdXJlIEdldF9CdWZmZXIKLSAgICAgKEZsZCAgICA6IGluIEZpZWxkOwotICAgICAgQnVmZmVyIDogaW4gQnVmZmVyX051bWJlciA6PSBCdWZmZXJfTnVtYmVyJ0ZpcnN0OworICAgICAoRmxkICAgIDogRmllbGQ7CisgICAgICBCdWZmZXIgOiBCdWZmZXJfTnVtYmVyIDo9IEJ1ZmZlcl9OdW1iZXInRmlyc3Q7CiAgICAgICBTdHIgICAgOiBvdXQgU3RyaW5nKTsKICAgIC0tICBBS0EKIAogICAgZnVuY3Rpb24gR2V0X0J1ZmZlcgotICAgICAoRmxkICAgIDogaW4gRmllbGQ7Ci0gICAgICBCdWZmZXIgOiBpbiBCdWZmZXJfTnVtYmVyIDo9IEJ1ZmZlcl9OdW1iZXInRmlyc3QpIHJldHVybiBTdHJpbmc7CisgICAgIChGbGQgICAgOiBGaWVsZDsKKyAgICAgIEJ1ZmZlciA6IEJ1ZmZlcl9OdW1iZXIgOj0gQnVmZmVyX051bWJlcidGaXJzdCkgcmV0dXJuIFN0cmluZzsKICAgIC0tICBBS0EKICAgIC0tICBTYW1lIGJ1dCBhcyBmdW5jdGlvbgogICAgcHJhZ21hIElubGluZSAoR2V0X0J1ZmZlcik7CiAKICAgIC0tICBBTkNIT1IoYHNldF9maWVsZF9zdGF0dXMoKScsYFNldF9TdGF0dXMnKQotICAgcHJvY2VkdXJlIFNldF9TdGF0dXMgKEZsZCAgICA6IGluIEZpZWxkOwotICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1cyA6IGluIEJvb2xlYW4gOj0gVHJ1ZSk7CisgICBwcm9jZWR1cmUgU2V0X1N0YXR1cyAoRmxkICAgIDogRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzIDogQm9vbGVhbiA6PSBUcnVlKTsKICAgIC0tICBBS0EKICAgIHByYWdtYSBJbmxpbmUgKFNldF9TdGF0dXMpOwogCkBAIC0zMzMsMjkgKzM4MiwyOSBAQAogICAgcHJhZ21hIElubGluZSAoQ2hhbmdlZCk7CiAKICAgIC0tICBBTkNIT1IoYHNldF9maWVsZF9tYXgoKScsYFNldF9NYXhpbXVtX1NpemUnKQotICAgcHJvY2VkdXJlIFNldF9NYXhpbXVtX1NpemUgKEZsZCA6IGluIEZpZWxkOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1heCA6IGluIE5hdHVyYWwgOj0gMCk7CisgICBwcm9jZWR1cmUgU2V0X01heGltdW1fU2l6ZSAoRmxkIDogRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF4IDogTmF0dXJhbCA6PSAwKTsKICAgIC0tICBBS0EKICAgIHByYWdtYSBJbmxpbmUgKFNldF9NYXhpbXVtX1NpemUpOwogCiAgICAtLSAgTUFOUEFHRShgZm9ybV9maWVsZF9vcHRzLjN4JykKIAogICAgLS0gIEFOQ0hPUihgc2V0X2ZpZWxkX29wdHMoKScsYFNldF9PcHRpb25zJykKLSAgIHByb2NlZHVyZSBTZXRfT3B0aW9ucyAoRmxkICAgICA6IGluIEZpZWxkOwotICAgICAgICAgICAgICAgICAgICAgICAgICBPcHRpb25zIDogaW4gRmllbGRfT3B0aW9uX1NldCk7CisgICBwcm9jZWR1cmUgU2V0X09wdGlvbnMgKEZsZCAgICAgOiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW9ucyA6IEZpZWxkX09wdGlvbl9TZXQpOwogICAgLS0gIEFLQQogICAgLS0gIEFuIG92ZXJsb2FkZWQgdmVyc2lvbiBpcyBkZWZpbmVkIGxhdGVyLiBQcmFnbWEgSW5saW5lIGFwcGVhcnMgdGhlcmUKIAogICAgLS0gIEFOQ0hPUihgZmllbGRfb3B0c19vbigpJyxgU3dpdGNoX09wdGlvbnMnKQotICAgcHJvY2VkdXJlIFN3aXRjaF9PcHRpb25zIChGbGQgICAgIDogaW4gRmllbGQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbnMgOiBpbiBGaWVsZF9PcHRpb25fU2V0OworICAgcHJvY2VkdXJlIFN3aXRjaF9PcHRpb25zIChGbGQgICAgIDogRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbnMgOiBGaWVsZF9PcHRpb25fU2V0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbiAgICAgIDogQm9vbGVhbiA6PSBUcnVlKTsKICAgIC0tICBBS0EKICAgIC0tICBBTElBUyhgZmllbGRfb3B0c19vZmYoKScpCiAgICAtLSAgQW4gb3ZlcmxvYWRlZCB2ZXJzaW9uIGlzIGRlZmluZWQgbGF0ZXIuIFByYWdtYSBJbmxpbmUgYXBwZWFycyB0aGVyZQogCiAgICAtLSAgQU5DSE9SKGBmaWVsZF9vcHRzKCknLGBHZXRfT3B0aW9ucycpCi0gICBwcm9jZWR1cmUgR2V0X09wdGlvbnMgKEZsZCAgICAgOiBpbiAgRmllbGQ7CisgICBwcm9jZWR1cmUgR2V0X09wdGlvbnMgKEZsZCAgICAgOiBGaWVsZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW9ucyA6IG91dCBGaWVsZF9PcHRpb25fU2V0KTsKICAgIC0tICBBS0EKIApAQCAtMzY5LDE5ICs0MTgsMTkgQEAKIAogICAgLS0gIEFOQ0hPUihgc2V0X2ZpZWxkX2ZvcmUoKScsYFNldF9Gb3JlZ3JvdW5kJykKICAgIHByb2NlZHVyZSBTZXRfRm9yZWdyb3VuZAotICAgICAoRmxkICAgOiBpbiBGaWVsZDsKLSAgICAgIEZvcmUgIDogaW4gQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQgOj0gTm9ybWFsX1ZpZGVvOwotICAgICAgQ29sb3IgOiBpbiBDb2xvcl9QYWlyIDo9IENvbG9yX1BhaXInRmlyc3QpOworICAgICAoRmxkICAgOiBGaWVsZDsKKyAgICAgIEZvcmUgIDogQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQgOj0gTm9ybWFsX1ZpZGVvOworICAgICAgQ29sb3IgOiBDb2xvcl9QYWlyIDo9IENvbG9yX1BhaXInRmlyc3QpOwogICAgLS0gIEFLQQogICAgcHJhZ21hIElubGluZSAoU2V0X0ZvcmVncm91bmQpOwogCiAgICAtLSAgQU5DSE9SKGBmaWVsZF9mb3JlKCknLGBGb3JlZ3JvdW5kJykKLSAgIHByb2NlZHVyZSBGb3JlZ3JvdW5kIChGbGQgIDogaW4gIEZpZWxkOworICAgcHJvY2VkdXJlIEZvcmVncm91bmQgKEZsZCAgOiBGaWVsZDsKICAgICAgICAgICAgICAgICAgICAgICAgICBGb3JlIDogb3V0IENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0KTsKICAgIC0tICBBS0EKIAogICAgLS0gIEFOQ0hPUihgZmllbGRfZm9yZSgpJyxgRm9yZWdyb3VuZCcpCi0gICBwcm9jZWR1cmUgRm9yZWdyb3VuZCAoRmxkICAgOiBpbiAgRmllbGQ7CisgICBwcm9jZWR1cmUgRm9yZWdyb3VuZCAoRmxkICAgOiBGaWVsZDsKICAgICAgICAgICAgICAgICAgICAgICAgICBGb3JlICA6IG91dCBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldDsKICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvciA6IG91dCBDb2xvcl9QYWlyKTsKICAgIC0tICBBS0EKQEAgLTM4OSwzMiArNDM4LDMyIEBACiAKICAgIC0tICBBTkNIT1IoYHNldF9maWVsZF9iYWNrKCknLGBTZXRfQmFja2dyb3VuZCcpCiAgICBwcm9jZWR1cmUgU2V0X0JhY2tncm91bmQKLSAgICAgKEZsZCAgIDogaW4gRmllbGQ7Ci0gICAgICBCYWNrICA6IGluIENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0IDo9IE5vcm1hbF9WaWRlbzsKLSAgICAgIENvbG9yIDogaW4gQ29sb3JfUGFpciA6PSBDb2xvcl9QYWlyJ0ZpcnN0KTsKKyAgICAgKEZsZCAgIDogRmllbGQ7CisgICAgICBCYWNrICA6IENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0IDo9IE5vcm1hbF9WaWRlbzsKKyAgICAgIENvbG9yIDogQ29sb3JfUGFpciA6PSBDb2xvcl9QYWlyJ0ZpcnN0KTsKICAgIC0tICBBS0EKICAgIHByYWdtYSBJbmxpbmUgKFNldF9CYWNrZ3JvdW5kKTsKIAogICAgLS0gIEFOQ0hPUihgZmllbGRfYmFjaygpJyxgQmFja2dyb3VuZCcpCi0gICBwcm9jZWR1cmUgQmFja2dyb3VuZCAoRmxkICA6IGluICBGaWVsZDsKKyAgIHByb2NlZHVyZSBCYWNrZ3JvdW5kIChGbGQgIDogRmllbGQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgQmFjayA6IG91dCBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldCk7CiAgICAtLSAgQUtBCiAKICAgIC0tICBBTkNIT1IoYGZpZWxkX2JhY2soKScsYEJhY2tncm91bmQnKQotICAgcHJvY2VkdXJlIEJhY2tncm91bmQgKEZsZCAgIDogaW4gIEZpZWxkOworICAgcHJvY2VkdXJlIEJhY2tncm91bmQgKEZsZCAgIDogRmllbGQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgQmFjayAgOiBvdXQgQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3IgOiBvdXQgQ29sb3JfUGFpcik7CiAgICAtLSAgQUtBCiAgICBwcmFnbWEgSW5saW5lIChCYWNrZ3JvdW5kKTsKIAogICAgLS0gIEFOQ0hPUihgc2V0X2ZpZWxkX3BhZCgpJyxgU2V0X1BhZF9DaGFyYWN0ZXInKQotICAgcHJvY2VkdXJlIFNldF9QYWRfQ2hhcmFjdGVyIChGbGQgOiBpbiBGaWVsZDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFkIDogaW4gQ2hhcmFjdGVyIDo9IFNwYWNlKTsKKyAgIHByb2NlZHVyZSBTZXRfUGFkX0NoYXJhY3RlciAoRmxkIDogRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhZCA6IENoYXJhY3RlciA6PSBTcGFjZSk7CiAgICAtLSAgQUtBCiAgICBwcmFnbWEgSW5saW5lIChTZXRfUGFkX0NoYXJhY3Rlcik7CiAKICAgIC0tICBBTkNIT1IoYGZpZWxkX3BhZCgpJyxgUGFkX0NoYXJhY3RlcicpCi0gICBwcm9jZWR1cmUgUGFkX0NoYXJhY3RlciAoRmxkIDogaW4gIEZpZWxkOworICAgcHJvY2VkdXJlIFBhZF9DaGFyYWN0ZXIgKEZsZCA6IEZpZWxkOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhZCA6IG91dCBDaGFyYWN0ZXIpOwogICAgLS0gIEFLQQogICAgcHJhZ21hIElubGluZSAoUGFkX0NoYXJhY3Rlcik7CkBAIC00MjIsNyArNDcxLDcgQEAKICAgIC0tICBNQU5QQUdFKGBmb3JtX2ZpZWxkX2luZm8uM3gnKQogCiAgICAtLSAgQU5DSE9SKGBmaWVsZF9pbmZvKCknLGBJbmZvJykKLSAgIHByb2NlZHVyZSBJbmZvIChGbGQgICAgICAgICAgICAgICAgOiBpbiAgRmllbGQ7CisgICBwcm9jZWR1cmUgSW5mbyAoRmxkICAgICAgICAgICAgICAgIDogRmllbGQ7CiAgICAgICAgICAgICAgICAgICAgTGluZXMgICAgICAgICAgICAgIDogb3V0IExpbmVfQ291bnQ7CiAgICAgICAgICAgICAgICAgICAgQ29sdW1ucyAgICAgICAgICAgIDogb3V0IENvbHVtbl9Db3VudDsKICAgICAgICAgICAgICAgICAgICBGaXJzdF9Sb3cgICAgICAgICAgOiBvdXQgTGluZV9Qb3NpdGlvbjsKQEAgLTQzMyw3ICs0ODIsNyBAQAogICAgcHJhZ21hIElubGluZSAoSW5mbyk7CiAKICAgIC0tICBBTkNIT1IoYGR5bmFtaWNfZmllbGRfaW5mbygpJyxgRHluYW1pY19JbmZvJykKLSAgIHByb2NlZHVyZSBEeW5hbWljX0luZm8gKEZsZCAgICAgOiBpbiBGaWVsZDsKKyAgIHByb2NlZHVyZSBEeW5hbWljX0luZm8gKEZsZCAgICAgOiBGaWVsZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpbmVzICAgOiBvdXQgTGluZV9Db3VudDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbHVtbnMgOiBvdXQgQ29sdW1uX0NvdW50OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF4ICAgICA6IG91dCBOYXR1cmFsKTsKQEAgLTQ0Myw4ICs0OTIsOCBAQAogICAgLS0gIE1BTlBBR0UoYGZvcm1fd2luLjN4JykKIAogICAgLS0gIEFOQ0hPUihgc2V0X2Zvcm1fd2luKCknLGBTZXRfV2luZG93JykKLSAgIHByb2NlZHVyZSBTZXRfV2luZG93IChGcm0gOiBpbiBGb3JtOwotICAgICAgICAgICAgICAgICAgICAgICAgIFdpbiA6IGluIFdpbmRvdyk7CisgICBwcm9jZWR1cmUgU2V0X1dpbmRvdyAoRnJtIDogRm9ybTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBXaW4gOiBXaW5kb3cpOwogICAgLS0gIEFLQQogICAgcHJhZ21hIElubGluZSAoU2V0X1dpbmRvdyk7CiAKQEAgLTQ1NCw4ICs1MDMsOCBAQAogICAgcHJhZ21hIElubGluZSAoR2V0X1dpbmRvdyk7CiAKICAgIC0tICBBTkNIT1IoYHNldF9mb3JtX3N1YigpJyxgU2V0X1N1Yl9XaW5kb3cnKQotICAgcHJvY2VkdXJlIFNldF9TdWJfV2luZG93IChGcm0gOiBpbiBGb3JtOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaW4gOiBpbiBXaW5kb3cpOworICAgcHJvY2VkdXJlIFNldF9TdWJfV2luZG93IChGcm0gOiBGb3JtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaW4gOiBXaW5kb3cpOwogICAgLS0gIEFLQQogICAgcHJhZ21hIElubGluZSAoU2V0X1N1Yl9XaW5kb3cpOwogCkBAIC00NjUsNyArNTE0LDcgQEAKICAgIHByYWdtYSBJbmxpbmUgKEdldF9TdWJfV2luZG93KTsKIAogICAgLS0gIEFOQ0hPUihgc2NhbGVfZm9ybSgpJyxgU2NhbGUnKQotICAgcHJvY2VkdXJlIFNjYWxlIChGcm0gICAgIDogaW4gRm9ybTsKKyAgIHByb2NlZHVyZSBTY2FsZSAoRnJtICAgICA6IEZvcm07CiAgICAgICAgICAgICAgICAgICAgIExpbmVzICAgOiBvdXQgTGluZV9Db3VudDsKICAgICAgICAgICAgICAgICAgICAgQ29sdW1ucyA6IG91dCBDb2x1bW5fQ291bnQpOwogICAgLS0gIEFLQQpAQCAtNDczLDMwICs1MjIsMzAgQEAKIAogICAgLS0gIE1BTlBBR0UoYGZvcm1faG9vay4zeCcpCiAKLSAgIHR5cGUgRm9ybV9Ib29rX0Z1bmN0aW9uIGlzIGFjY2VzcyBwcm9jZWR1cmUgKEZybSA6IGluIEZvcm0pOworICAgdHlwZSBGb3JtX0hvb2tfRnVuY3Rpb24gaXMgYWNjZXNzIHByb2NlZHVyZSAoRnJtIDogRm9ybSk7CiAgICBwcmFnbWEgQ29udmVudGlvbiAoQywgRm9ybV9Ib29rX0Z1bmN0aW9uKTsKIAogICAgLS0gIEFOQ0hPUihgc2V0X2ZpZWxkX2luaXQoKScsYFNldF9GaWVsZF9Jbml0X0hvb2snKQotICAgcHJvY2VkdXJlIFNldF9GaWVsZF9Jbml0X0hvb2sgKEZybSAgOiBpbiBGb3JtOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2MgOiBpbiBGb3JtX0hvb2tfRnVuY3Rpb24pOworICAgcHJvY2VkdXJlIFNldF9GaWVsZF9Jbml0X0hvb2sgKEZybSAgOiBGb3JtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2MgOiBGb3JtX0hvb2tfRnVuY3Rpb24pOwogICAgLS0gIEFLQQogICAgcHJhZ21hIElubGluZSAoU2V0X0ZpZWxkX0luaXRfSG9vayk7CiAKICAgIC0tICBBTkNIT1IoYHNldF9maWVsZF90ZXJtKCknLGBTZXRfRmllbGRfVGVybV9Ib29rJykKLSAgIHByb2NlZHVyZSBTZXRfRmllbGRfVGVybV9Ib29rIChGcm0gIDogaW4gRm9ybTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jIDogaW4gRm9ybV9Ib29rX0Z1bmN0aW9uKTsKKyAgIHByb2NlZHVyZSBTZXRfRmllbGRfVGVybV9Ib29rIChGcm0gIDogRm9ybTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jIDogRm9ybV9Ib29rX0Z1bmN0aW9uKTsKICAgIC0tICBBS0EKICAgIHByYWdtYSBJbmxpbmUgKFNldF9GaWVsZF9UZXJtX0hvb2spOwogCiAgICAtLSAgQU5DSE9SKGBzZXRfZm9ybV9pbml0KCknLGBTZXRfRm9ybV9Jbml0X0hvb2snKQotICAgcHJvY2VkdXJlIFNldF9Gb3JtX0luaXRfSG9vayAoRnJtICA6IGluIEZvcm07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jIDogaW4gRm9ybV9Ib29rX0Z1bmN0aW9uKTsKKyAgIHByb2NlZHVyZSBTZXRfRm9ybV9Jbml0X0hvb2sgKEZybSAgOiBGb3JtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYyA6IEZvcm1fSG9va19GdW5jdGlvbik7CiAgICAtLSAgQUtBCiAgICBwcmFnbWEgSW5saW5lIChTZXRfRm9ybV9Jbml0X0hvb2spOwogCiAgICAtLSAgQU5DSE9SKGBzZXRfZm9ybV90ZXJtKCknLGBTZXRfRm9ybV9UZXJtX0hvb2snKQotICAgcHJvY2VkdXJlIFNldF9Gb3JtX1Rlcm1fSG9vayAoRnJtICA6IGluIEZvcm07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jIDogaW4gRm9ybV9Ib29rX0Z1bmN0aW9uKTsKKyAgIHByb2NlZHVyZSBTZXRfRm9ybV9UZXJtX0hvb2sgKEZybSAgOiBGb3JtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYyA6IEZvcm1fSG9va19GdW5jdGlvbik7CiAgICAtLSAgQUtBCiAgICBwcmFnbWEgSW5saW5lIChTZXRfRm9ybV9UZXJtX0hvb2spOwogCkBAIC01MjMsMTQgKzU3MiwxNCBAQAogICAgLS0gIE1BTlBBR0UoYGZvcm1fZmllbGQuM3gnKQogCiAgICAtLSAgQU5DSE9SKGBzZXRfZm9ybV9maWVsZHMoKScsYFJlZGVmaW5lJykKLSAgIHByb2NlZHVyZSBSZWRlZmluZSAoRnJtICA6IGluIEZvcm07Ci0gICAgICAgICAgICAgICAgICAgICAgIEZsZHMgOiBpbiBGaWVsZF9BcnJheV9BY2Nlc3MpOworICAgcHJvY2VkdXJlIFJlZGVmaW5lIChGcm0gIDogRm9ybTsKKyAgICAgICAgICAgICAgICAgICAgICAgRmxkcyA6IEZpZWxkX0FycmF5X0FjY2Vzcyk7CiAgICAtLSAgQUtBCiAgICBwcmFnbWEgSW5saW5lIChSZWRlZmluZSk7CiAKICAgIC0tICBBTkNIT1IoYHNldF9mb3JtX2ZpZWxkcygpJyxgU2V0X0ZpZWxkcycpCi0gICBwcm9jZWR1cmUgU2V0X0ZpZWxkcyAoRnJtICA6IGluIEZvcm07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgRmxkcyA6IGluIEZpZWxkX0FycmF5X0FjY2VzcykgcmVuYW1lcyBSZWRlZmluZTsKKyAgIHByb2NlZHVyZSBTZXRfRmllbGRzIChGcm0gIDogRm9ybTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBGbGRzIDogRmllbGRfQXJyYXlfQWNjZXNzKSByZW5hbWVzIFJlZGVmaW5lOwogICAgLS0gIEFLQQogICAgLS0gIHByYWdtYSBJbmxpbmUgKFNldF9GaWVsZHMpOwogCkBAIC01NDYsOSArNTk1LDkgQEAKICAgIHByYWdtYSBJbmxpbmUgKEZpZWxkX0NvdW50KTsKIAogICAgLS0gIEFOQ0hPUihgbW92ZV9maWVsZCgpJyxgTW92ZScpCi0gICBwcm9jZWR1cmUgTW92ZSAoRmxkICAgIDogaW4gRmllbGQ7Ci0gICAgICAgICAgICAgICAgICAgTGluZSAgIDogaW4gTGluZV9Qb3NpdGlvbjsKLSAgICAgICAgICAgICAgICAgICBDb2x1bW4gOiBpbiBDb2x1bW5fUG9zaXRpb24pOworICAgcHJvY2VkdXJlIE1vdmUgKEZsZCAgICA6IEZpZWxkOworICAgICAgICAgICAgICAgICAgIExpbmUgICA6IExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgQ29sdW1uIDogQ29sdW1uX1Bvc2l0aW9uKTsKICAgIC0tICBBS0EKICAgIHByYWdtYSBJbmxpbmUgKE1vdmUpOwogCkBAIC01NzQsMjEgKzYyMywyMSBAQAogICAgLS0gIE1BTlBBR0UoYGZvcm1fb3B0cy4zeCcpCiAKICAgIC0tICBBTkNIT1IoYHNldF9mb3JtX29wdHMoKScsYFNldF9PcHRpb25zJykKLSAgIHByb2NlZHVyZSBTZXRfT3B0aW9ucyAoRnJtICAgICA6IGluIEZvcm07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbnMgOiBpbiBGb3JtX09wdGlvbl9TZXQpOworICAgcHJvY2VkdXJlIFNldF9PcHRpb25zIChGcm0gICAgIDogRm9ybTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW9ucyA6IEZvcm1fT3B0aW9uX1NldCk7CiAgICAtLSAgQUtBCiAgICBwcmFnbWEgSW5saW5lIChTZXRfT3B0aW9ucyk7CiAKICAgIC0tICBBTkNIT1IoYGZvcm1fb3B0c19vbigpJyxgU3dpdGNoX09wdGlvbnMnKQotICAgcHJvY2VkdXJlIFN3aXRjaF9PcHRpb25zIChGcm0gICAgIDogaW4gRm9ybTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW9ucyA6IGluIEZvcm1fT3B0aW9uX1NldDsKKyAgIHByb2NlZHVyZSBTd2l0Y2hfT3B0aW9ucyAoRnJtICAgICA6IEZvcm07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbnMgOiBGb3JtX09wdGlvbl9TZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9uICAgICAgOiBCb29sZWFuIDo9IFRydWUpOwogICAgLS0gIEFLQQogICAgLS0gIEFMSUFTKGBmb3JtX29wdHNfb2ZmKCknKQogICAgcHJhZ21hIElubGluZSAoU3dpdGNoX09wdGlvbnMpOwogCiAgICAtLSAgQU5DSE9SKGBmb3JtX29wdHMoKScsYEdldF9PcHRpb25zJykKLSAgIHByb2NlZHVyZSBHZXRfT3B0aW9ucyAoRnJtICAgICA6IGluICBGb3JtOworICAgcHJvY2VkdXJlIEdldF9PcHRpb25zIChGcm0gICAgIDogRm9ybTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW9ucyA6IG91dCBGb3JtX09wdGlvbl9TZXQpOwogICAgLS0gIEFLQQogCkBAIC02MDAsOCArNjQ5LDggQEAKICAgIC0tICBNQU5QQUdFKGBmb3JtX3Bvc3QuM3gnKQogCiAgICAtLSAgQU5DSE9SKGBwb3N0X2Zvcm0oKScsYFBvc3QnKQotICAgcHJvY2VkdXJlIFBvc3QgKEZybSAgOiBpbiBGb3JtOwotICAgICAgICAgICAgICAgICAgIFBvc3QgOiBpbiBCb29sZWFuIDo9IFRydWUpOworICAgcHJvY2VkdXJlIFBvc3QgKEZybSAgOiBGb3JtOworICAgICAgICAgICAgICAgICAgIFBvc3QgOiBCb29sZWFuIDo9IFRydWUpOwogICAgLS0gIEFLQQogICAgLS0gIEFMSUFTKGB1bnBvc3RfZm9ybSgpJykKICAgIHByYWdtYSBJbmxpbmUgKFBvc3QpOwpAQCAtNjQzLDE5ICs2OTIsMTkgQEAKICAgIHR5cGUgUGFnZV9OdW1iZXIgaXMgbmV3IE5hdHVyYWw7CiAKICAgIC0tICBBTkNIT1IoYHNldF9jdXJyZW50X2ZpZWxkKCknLGBTZXRfQ3VycmVudCcpCi0gICBwcm9jZWR1cmUgU2V0X0N1cnJlbnQgKEZybSA6IGluIEZvcm07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIEZsZCA6IGluIEZpZWxkKTsKKyAgIHByb2NlZHVyZSBTZXRfQ3VycmVudCAoRnJtIDogRm9ybTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRmxkIDogRmllbGQpOwogICAgLS0gIEFLQQogICAgcHJhZ21hIElubGluZSAoU2V0X0N1cnJlbnQpOwogCiAgICAtLSAgQU5DSE9SKGBjdXJyZW50X2ZpZWxkKCknLGBDdXJyZW50JykKLSAgIGZ1bmN0aW9uIEN1cnJlbnQgKEZybSA6IGluIEZvcm0pIHJldHVybiBGaWVsZDsKKyAgIGZ1bmN0aW9uIEN1cnJlbnQgKEZybSA6IEZvcm0pIHJldHVybiBGaWVsZDsKICAgIC0tICBBS0EKICAgIHByYWdtYSBJbmxpbmUgKEN1cnJlbnQpOwogCiAgICAtLSAgQU5DSE9SKGBzZXRfZm9ybV9wYWdlKCknLGBTZXRfUGFnZScpCi0gICBwcm9jZWR1cmUgU2V0X1BhZ2UgKEZybSAgOiBpbiBGb3JtOwotICAgICAgICAgICAgICAgICAgICAgICBQYWdlIDogaW4gUGFnZV9OdW1iZXIgOj0gUGFnZV9OdW1iZXInRmlyc3QpOworICAgcHJvY2VkdXJlIFNldF9QYWdlIChGcm0gIDogRm9ybTsKKyAgICAgICAgICAgICAgICAgICAgICAgUGFnZSA6IFBhZ2VfTnVtYmVyIDo9IFBhZ2VfTnVtYmVyJ0ZpcnN0KTsKICAgIC0tICBBS0EKICAgIHByYWdtYSBJbmxpbmUgKFNldF9QYWdlKTsKIApAQCAtNjc1LDggKzcyNCw4IEBACiAgICAtLSAgTUFOUEFHRShgZm9ybV9uZXdfcGFnZS4zeCcpCiAKICAgIC0tICBBTkNIT1IoYHNldF9uZXdfcGFnZSgpJyxgU2V0X05ld19QYWdlJykKLSAgIHByb2NlZHVyZSBTZXRfTmV3X1BhZ2UgKEZsZCAgICAgIDogaW4gRmllbGQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBOZXdfUGFnZSA6IGluIEJvb2xlYW4gOj0gVHJ1ZSk7CisgICBwcm9jZWR1cmUgU2V0X05ld19QYWdlIChGbGQgICAgICA6IEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV3X1BhZ2UgOiBCb29sZWFuIDo9IFRydWUpOwogICAgLS0gIEFLQQogICAgcHJhZ21hIElubGluZSAoU2V0X05ld19QYWdlKTsKIApkaWZmIC0tZ2l0IGEvQWRhOTUvZ2VuL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGEuYWRzLm00IGIvQWRhOTUvZ2VuL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGEuYWRzLm00CmluZGV4IDE0YjI0NjYuLjRmZmE0MWIgMTAwNjQ0Ci0tLSBhL0FkYTk1L2dlbi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLWl0ZW1fdXNlcl9kYXRhLmFkcy5tNAorKysgYi9BZGE5NS9nZW4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YS5hZHMubTQKQEAgLTEwLDcgKzEwLDcgQEAKIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIENvcHlyaWdodCAoYykgMTk5OCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQogLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCkBAIC0zOCw4ICszOCw4IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKIC0tICBWZXJzaW9uIENvbnRyb2w6Ci0tLSAgJFJldmlzaW9uOiAxLjE2ICQKLS0tICAkRGF0ZTogMjAwNi8wNi8yNSAxNDozMDoyMiAkCistLSAgJFJldmlzaW9uOiAxLjE3ICQKKy0tICAkRGF0ZTogMjAwOS8xMi8yNiAxNzozMTozNSAkCiAtLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtNTYsMTggKzU2LDE4IEBACiAgICAtLSAgTUFOUEFHRShgbWl0ZW1fdXNlcnB0ci4zeCcpCiAKICAgIC0tICBBTkNIT1IoYHNldF9pdGVtX3VzZXJwdHInLGBTZXRfVXNlcl9EYXRhJykKLSAgIHByb2NlZHVyZSBTZXRfVXNlcl9EYXRhIChJdG0gIDogaW4gSXRlbTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhIDogaW4gVXNlcl9BY2Nlc3MpOworICAgcHJvY2VkdXJlIFNldF9Vc2VyX0RhdGEgKEl0bSAgOiBJdGVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgOiBVc2VyX0FjY2Vzcyk7CiAgICAtLSAgQUtBCiAgICBwcmFnbWEgSW5saW5lIChTZXRfVXNlcl9EYXRhKTsKIAogICAgLS0gIEFOQ0hPUihgaXRlbV91c2VycHRyJyxgR2V0X1VzZXJfRGF0YScpCi0gICBwcm9jZWR1cmUgR2V0X1VzZXJfRGF0YSAoSXRtICA6IGluICBJdGVtOworICAgcHJvY2VkdXJlIEdldF9Vc2VyX0RhdGEgKEl0bSAgOiBJdGVtOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgOiBvdXQgVXNlcl9BY2Nlc3MpOwogICAgLS0gIEFLQQogCiAgICAtLSAgQU5DSE9SKGBpdGVtX3VzZXJwdHInLGBHZXRfVXNlcl9EYXRhJykKLSAgIGZ1bmN0aW9uIEdldF9Vc2VyX0RhdGEgKEl0bSAgOiBpbiAgSXRlbSkgcmV0dXJuIFVzZXJfQWNjZXNzOworICAgZnVuY3Rpb24gR2V0X1VzZXJfRGF0YSAoSXRtICA6IEl0ZW0pIHJldHVybiBVc2VyX0FjY2VzczsKICAgIC0tICBBS0EKICAgIC0tICBTYW1lIGFzIGZ1bmN0aW9uCiAgICBwcmFnbWEgSW5saW5lIChHZXRfVXNlcl9EYXRhKTsKZGlmZiAtLWdpdCBhL0FkYTk1L2dlbi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhLmFkcy5tNCBiL0FkYTk1L2dlbi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhLmFkcy5tNAppbmRleCA2OTYxNDliLi45MTM4YmE2IDEwMDY0NAotLS0gYS9BZGE5NS9nZW4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YS5hZHMubTQKKysrIGIvQWRhOTUvZ2VuL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGEuYWRzLm00CkBAIC0xMCw3ICsxMCw3IEBACiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KIC0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQpAQCAtMzgsNyArMzgsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CiAtLSAgVmVyc2lvbiBDb250cm9sOgotLS0gICRSZXZpc2lvbjogMS4xNCAkCistLSAgJFJldmlzaW9uOiAxLjE1ICQKIC0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC01MSwxOCArNTEsMTggQEAKICAgIC0tICBNQU5QQUdFKGBtZW51X3VzZXJwdHIuM3gnKQogCiAgICAtLSAgQU5DSE9SKGBzZXRfbWVudV91c2VycHRyJyxgU2V0X1VzZXJfRGF0YScpCi0gICBwcm9jZWR1cmUgU2V0X1VzZXJfRGF0YSAoTWVuICA6IGluIE1lbnU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA6IGluIFVzZXJfQWNjZXNzKTsKKyAgIHByb2NlZHVyZSBTZXRfVXNlcl9EYXRhIChNZW4gIDogTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhIDogVXNlcl9BY2Nlc3MpOwogICAgLS0gIEFLQQogICAgcHJhZ21hIElubGluZSAoU2V0X1VzZXJfRGF0YSk7CiAKICAgIC0tICBBTkNIT1IoYG1lbnVfdXNlcnB0cicsYEdldF9Vc2VyX0RhdGEnKQotICAgcHJvY2VkdXJlIEdldF9Vc2VyX0RhdGEgKE1lbiAgOiBpbiAgTWVudTsKKyAgIHByb2NlZHVyZSBHZXRfVXNlcl9EYXRhIChNZW4gIDogTWVudTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhIDogb3V0IFVzZXJfQWNjZXNzKTsKICAgIC0tICBBS0EKIAogICAgLS0gIEFOQ0hPUihgbWVudV91c2VycHRyJyxgR2V0X1VzZXJfRGF0YScpCi0gICBmdW5jdGlvbiBHZXRfVXNlcl9EYXRhIChNZW4gIDogaW4gIE1lbnUpIHJldHVybiBVc2VyX0FjY2VzczsKKyAgIGZ1bmN0aW9uIEdldF9Vc2VyX0RhdGEgKE1lbiAgOiBNZW51KSByZXR1cm4gVXNlcl9BY2Nlc3M7CiAgICAtLSAgQUtBCiAgICAtLSAgU2FtZSBhcyBmdW5jdGlvbgogICAgcHJhZ21hIElubGluZSAoR2V0X1VzZXJfRGF0YSk7CmRpZmYgLS1naXQgYS9BZGE5NS9nZW4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy5hZHMubTQgYi9BZGE5NS9nZW4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy5hZHMubTQKaW5kZXggMTc5OTNlMS4uMGFkOWM0NSAxMDA2NDQKLS0tIGEvQWRhOTUvZ2VuL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRzLm00CisrKyBiL0FkYTk1L2dlbi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkcy5tNApAQCAtMTAsNyArMTAsNyBAQAogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gQ29weXJpZ2h0IChjKSAxOTk4LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwOSwyMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCiAtLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KQEAgLTM4LDE4ICszOCwxNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CiAtLSAgVmVyc2lvbiBDb250cm9sOgotLS0gICRSZXZpc2lvbjogMS4yNyAkCi0tLSAgJERhdGU6IDIwMDcvMDUvMDUgMjA6MjA6NTIgJAorLS0gICRSZXZpc2lvbjogMS4zMSAkCistLSAgJERhdGU6IDIwMTQvMDUvMjQgMjE6MzE6NTcgJAogLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1pbmNsdWRlKGBNZW51X0Jhc2VfRGVmcycpCiB3aXRoIFN5c3RlbTsKIHdpdGggQWRhLkNoYXJhY3RlcnMuTGF0aW5fMTsKIAogcGFja2FnZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLk1lbnVzIGlzCiAgICBwcmFnbWEgUHJlZWxhYm9yYXRlIChUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLk1lbnVzKTsKLWluY2x1ZGUoYE1lbnVfTGlua2VyX09wdGlvbnMnKWRubAotaW5jbHVkZShgTGlua2VyX09wdGlvbnMnKQorICAgcHJhZ21hIExpbmtlcl9PcHRpb25zICgiLWxtZW51IiAmIEN1cnNlc19Db25zdGFudHMuREZUX0FSR19TVUZGSVgpOworCiAgICBTcGFjZSA6IENoYXJhY3RlciByZW5hbWVzIEFkYS5DaGFyYWN0ZXJzLkxhdGluXzEuU3BhY2U7CiAKICAgIHR5cGUgSXRlbSBpcyBwcml2YXRlOwpAQCAtMTAyLDcgKzEwMSw3IEBACiAgICBSRVFfTkVYVF9NQVRDSCAgICA6IE1lbnVfUmVxdWVzdF9Db2RlIHJlbmFtZXMgTV9OZXh0X01hdGNoOwogICAgUkVRX1BSRVZfTUFUQ0ggICAgOiBNZW51X1JlcXVlc3RfQ29kZSByZW5hbWVzIE1fUHJldmlvdXNfTWF0Y2g7CiAKLSAgIHByb2NlZHVyZSBSZXF1ZXN0X05hbWUgKEtleSAgOiBpbiBNZW51X1JlcXVlc3RfQ29kZTsKKyAgIHByb2NlZHVyZSBSZXF1ZXN0X05hbWUgKEtleSAgOiBNZW51X1JlcXVlc3RfQ29kZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgOiBvdXQgU3RyaW5nKTsKIAogICAgZnVuY3Rpb24gIFJlcXVlc3RfTmFtZSAoS2V5IDogTWVudV9SZXF1ZXN0X0NvZGUpIHJldHVybiBTdHJpbmc7CkBAIC0xMTYsOSArMTE1LDM0IEBACiAgICAtLQogICAgLS0gIE1lbnUgb3B0aW9ucwogICAgLS0KLSAgIHByYWdtYSBXYXJuaW5ncyAoT2ZmKTsKLWluY2x1ZGUoYE1lbnVfT3B0X1JlcCcpZG5sCisgICB0eXBlIE1lbnVfT3B0aW9uX1NldCBpcworICAgICAgcmVjb3JkCisgICAgICAgICBPbmVfVmFsdWVkICAgICAgICA6IEJvb2xlYW47CisgICAgICAgICBTaG93X0Rlc2NyaXB0aW9ucyA6IEJvb2xlYW47CisgICAgICAgICBSb3dfTWFqb3JfT3JkZXIgICA6IEJvb2xlYW47CisgICAgICAgICBJZ25vcmVfQ2FzZSAgICAgICA6IEJvb2xlYW47CisgICAgICAgICBTaG93X01hdGNoZXMgICAgICA6IEJvb2xlYW47CisgICAgICAgICBOb25fQ3ljbGljICAgICAgICA6IEJvb2xlYW47CisgICAgICBlbmQgcmVjb3JkOworICAgcHJhZ21hIENvbnZlbnRpb24gKENfUGFzc19CeV9Db3B5LCBNZW51X09wdGlvbl9TZXQpOwogCisgICBmb3IgTWVudV9PcHRpb25fU2V0IHVzZQorICAgICAgcmVjb3JkCisgICAgICAgICBPbmVfVmFsdWVkICAgICAgICBhdCAwIHJhbmdlIEN1cnNlc19Db25zdGFudHMuT19PTkVWQUxVRV9GaXJzdAorICAgICAgICAgICAuLiBDdXJzZXNfQ29uc3RhbnRzLk9fT05FVkFMVUVfTGFzdDsKKyAgICAgICAgIFNob3dfRGVzY3JpcHRpb25zIGF0IDAgcmFuZ2UgQ3Vyc2VzX0NvbnN0YW50cy5PX1NIT1dERVNDX0ZpcnN0CisgICAgICAgICAgIC4uIEN1cnNlc19Db25zdGFudHMuT19TSE9XREVTQ19MYXN0OworICAgICAgICAgUm93X01ham9yX09yZGVyICAgYXQgMCByYW5nZSBDdXJzZXNfQ29uc3RhbnRzLk9fUk9XTUFKT1JfRmlyc3QKKyAgICAgICAgICAgLi4gQ3Vyc2VzX0NvbnN0YW50cy5PX1JPV01BSk9SX0xhc3Q7CisgICAgICAgICBJZ25vcmVfQ2FzZSAgICAgICBhdCAwIHJhbmdlIEN1cnNlc19Db25zdGFudHMuT19JR05PUkVDQVNFX0ZpcnN0CisgICAgICAgICAgIC4uIEN1cnNlc19Db25zdGFudHMuT19JR05PUkVDQVNFX0xhc3Q7CisgICAgICAgICBTaG93X01hdGNoZXMgICAgICBhdCAwIHJhbmdlIEN1cnNlc19Db25zdGFudHMuT19TSE9XTUFUQ0hfRmlyc3QKKyAgICAgICAgICAgLi4gQ3Vyc2VzX0NvbnN0YW50cy5PX1NIT1dNQVRDSF9MYXN0OworICAgICAgICAgTm9uX0N5Y2xpYyAgICAgICAgYXQgMCByYW5nZSBDdXJzZXNfQ29uc3RhbnRzLk9fTk9OQ1lDTElDX0ZpcnN0CisgICAgICAgICAgIC4uIEN1cnNlc19Db25zdGFudHMuT19OT05DWUNMSUNfTGFzdDsKKyAgICAgIGVuZCByZWNvcmQ7CisgICBwcmFnbWEgV2FybmluZ3MgKE9mZik7CisgICBmb3IgTWVudV9PcHRpb25fU2V0J1NpemUgdXNlIEN1cnNlc19Db25zdGFudHMuTWVudV9PcHRpb25zX1NpemU7CiAgICBwcmFnbWEgV2FybmluZ3MgKE9uKTsKIAogICAgZnVuY3Rpb24gRGVmYXVsdF9NZW51X09wdGlvbnMgcmV0dXJuIE1lbnVfT3B0aW9uX1NldDsKQEAgLTEyNyw5ICsxNTEsMTkgQEAKICAgIC0tCiAgICAtLSAgSXRlbSBvcHRpb25zCiAgICAtLQotICAgcHJhZ21hIFdhcm5pbmdzIChPZmYpOwotaW5jbHVkZShgSXRlbV9SZXAnKWRubAorICAgdHlwZSBJdGVtX09wdGlvbl9TZXQgaXMKKyAgICAgIHJlY29yZAorICAgICAgICAgU2VsZWN0YWJsZSA6IEJvb2xlYW47CisgICAgICBlbmQgcmVjb3JkOworICAgcHJhZ21hIENvbnZlbnRpb24gKENfUGFzc19CeV9Db3B5LCBJdGVtX09wdGlvbl9TZXQpOwogCisgICBmb3IgSXRlbV9PcHRpb25fU2V0IHVzZQorICAgICAgcmVjb3JkCisgICAgICAgICBTZWxlY3RhYmxlIGF0IDAgcmFuZ2UgQ3Vyc2VzX0NvbnN0YW50cy5PX1NFTEVDVEFCTEVfRmlyc3QKKyAgICAgICAgICAgLi4gIEN1cnNlc19Db25zdGFudHMuT19TRUxFQ1RBQkxFX0xhc3Q7CisgICAgICBlbmQgcmVjb3JkOworICAgcHJhZ21hIFdhcm5pbmdzIChPZmYpOworICAgZm9yIEl0ZW1fT3B0aW9uX1NldCdTaXplIHVzZSBDdXJzZXNfQ29uc3RhbnRzLkl0ZW1fT3B0aW9uc19TaXplOwogICAgcHJhZ21hIFdhcm5pbmdzIChPbik7CiAKICAgIGZ1bmN0aW9uIERlZmF1bHRfSXRlbV9PcHRpb25zIHJldHVybiBJdGVtX09wdGlvbl9TZXQ7CkBAIC0xNzIsOCArMjA2LDggQEAKICAgIC0tICBNQU5QQUdFKGBtaXRlbV92YWx1ZS4zeCcpCiAKICAgIC0tICBBTkNIT1IoYHNldF9pdGVtX3ZhbHVlKCknLGBTZXRfVmFsdWUnKQotICAgcHJvY2VkdXJlIFNldF9WYWx1ZSAoSXRtICAgOiBpbiBJdGVtOwotICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgOiBpbiBCb29sZWFuIDo9IFRydWUpOworICAgcHJvY2VkdXJlIFNldF9WYWx1ZSAoSXRtICAgOiBJdGVtOworICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgOiBCb29sZWFuIDo9IFRydWUpOwogICAgLS0gIEFLQQogICAgcHJhZ21hIElubGluZSAoU2V0X1ZhbHVlKTsKIApAQCAtMTkyLDE0ICsyMjYsMTQgQEAKICAgIC0tICBNQU5QQUdFKGBtaXRlbV9vcHRzLjN4JykKIAogICAgLS0gIEFOQ0hPUihgc2V0X2l0ZW1fb3B0cygpJyxgU2V0X09wdGlvbnMnKQotICAgcHJvY2VkdXJlIFNldF9PcHRpb25zIChJdG0gICAgIDogaW4gSXRlbTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW9ucyA6IGluIEl0ZW1fT3B0aW9uX1NldCk7CisgICBwcm9jZWR1cmUgU2V0X09wdGlvbnMgKEl0bSAgICAgOiBJdGVtOworICAgICAgICAgICAgICAgICAgICAgICAgICBPcHRpb25zIDogSXRlbV9PcHRpb25fU2V0KTsKICAgIC0tICBBS0EKICAgIC0tICBBbiBvdmVybG9hZGVkIFNldF9PcHRpb25zIGlzIGRlZmluZWQgbGF0ZXIuIFByYWdtYSBJbmxpbmUgYXBwZWFycyB0aGVyZQogCiAgICAtLSAgQU5DSE9SKGBpdGVtX29wdHNfb24oKScsYFN3aXRjaF9PcHRpb25zJykKLSAgIHByb2NlZHVyZSBTd2l0Y2hfT3B0aW9ucyAoSXRtICAgICA6IGluIEl0ZW07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbnMgOiBpbiBJdGVtX09wdGlvbl9TZXQ7CisgICBwcm9jZWR1cmUgU3dpdGNoX09wdGlvbnMgKEl0bSAgICAgOiBJdGVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcHRpb25zIDogSXRlbV9PcHRpb25fU2V0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbiAgICAgIDogQm9vbGVhbiA6PSBUcnVlKTsKICAgIC0tICBBS0EKICAgIC0tICBBTElBUyhgaXRlbV9vcHRzX29mZigpJykKQEAgLTIwNyw3ICsyNDEsNyBAQAogICAgLS0gIFByYWdtYSBJbmxpbmUgYXBwZWFycyB0aGVyZQogCiAgICAtLSAgQU5DSE9SKGBpdGVtX29wdHMoKScsYEdldF9PcHRpb25zJykKLSAgIHByb2NlZHVyZSBHZXRfT3B0aW9ucyAoSXRtICAgICA6IGluICBJdGVtOworICAgcHJvY2VkdXJlIEdldF9PcHRpb25zIChJdG0gICAgIDogSXRlbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW9ucyA6IG91dCBJdGVtX09wdGlvbl9TZXQpOwogICAgLS0gIEFLQQogCkBAIC0yMTksNyArMjUzLDcgQEAKICAgIC0tICBNQU5QQUdFKGBtaXRlbV9uYW1lLjN4JykKIAogICAgLS0gIEFOQ0hPUihgaXRlbV9uYW1lKCknLGBOYW1lJykKLSAgIHByb2NlZHVyZSBOYW1lIChJdG0gIDogaW4gSXRlbTsKKyAgIHByb2NlZHVyZSBOYW1lIChJdG0gIDogSXRlbTsKICAgICAgICAgICAgICAgICAgICBOYW1lIDogb3V0IFN0cmluZyk7CiAgICAtLSAgQUtBCiAgICBmdW5jdGlvbiAgTmFtZSAoSXRtIDogSXRlbSkgcmV0dXJuIFN0cmluZzsKQEAgLTIyOCw3ICsyNjIsNyBAQAogICAgcHJhZ21hIElubGluZSAoTmFtZSk7CiAKICAgIC0tICBBTkNIT1IoYGl0ZW1fZGVzY3JpcHRpb24oKTsnLGBEZXNjcmlwdGlvbicpCi0gICBwcm9jZWR1cmUgRGVzY3JpcHRpb24gKEl0bSAgICAgICAgIDogaW4gSXRlbTsKKyAgIHByb2NlZHVyZSBEZXNjcmlwdGlvbiAoSXRtICAgICAgICAgOiBJdGVtOwogICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbiA6IG91dCBTdHJpbmcpOwogICAgLS0gIEFLQQogCkBAIC0yNDAsOCArMjc0LDggQEAKICAgIC0tICBNQU5QQUdFKGBtaXRlbV9jdXJyZW50LjN4JykKIAogICAgLS0gIEFOQ0hPUihgc2V0X2N1cnJlbnRfaXRlbSgpJyxgU2V0X0N1cnJlbnQnKQotICAgcHJvY2VkdXJlIFNldF9DdXJyZW50IChNZW4gOiBpbiBNZW51OwotICAgICAgICAgICAgICAgICAgICAgICAgICBJdG0gOiBpbiBJdGVtKTsKKyAgIHByb2NlZHVyZSBTZXRfQ3VycmVudCAoTWVuIDogTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSXRtIDogSXRlbSk7CiAgICAtLSAgQUtBCiAgICBwcmFnbWEgSW5saW5lIChTZXRfQ3VycmVudCk7CiAKQEAgLTI1MSw4ICsyODUsOCBAQAogICAgcHJhZ21hIElubGluZSAoQ3VycmVudCk7CiAKICAgIC0tICBBTkNIT1IoYHNldF90b3Bfcm93KCknLGBTZXRfVG9wX1JvdycpCi0gICBwcm9jZWR1cmUgU2V0X1RvcF9Sb3cgKE1lbiAgOiBpbiBNZW51OwotICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5lIDogaW4gTGluZV9Qb3NpdGlvbik7CisgICBwcm9jZWR1cmUgU2V0X1RvcF9Sb3cgKE1lbiAgOiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5lIDogTGluZV9Qb3NpdGlvbik7CiAgICAtLSAgQUtBCiAgICBwcmFnbWEgSW5saW5lIChTZXRfVG9wX1Jvdyk7CiAKQEAgLTI3Miw4ICszMDYsOCBAQAogICAgLS0gIE1BTlBBR0UoYG1lbnVfcG9zdC4zeCcpCiAKICAgIC0tICBBTkNIT1IoYHBvc3RfbWVudSgpJyxgUG9zdCcpCi0gICBwcm9jZWR1cmUgUG9zdCAoTWVuICA6IGluIE1lbnU7Ci0gICAgICAgICAgICAgICAgICAgUG9zdCA6IGluIEJvb2xlYW4gOj0gVHJ1ZSk7CisgICBwcm9jZWR1cmUgUG9zdCAoTWVuICA6IE1lbnU7CisgICAgICAgICAgICAgICAgICAgUG9zdCA6IEJvb2xlYW4gOj0gVHJ1ZSk7CiAgICAtLSAgQUtBCiAgICAtLSAgQUxJQVMoYHVucG9zdF9tZW51KCknKQogICAgcHJhZ21hIElubGluZSAoUG9zdCk7CkBAIC0yODEsMjEgKzMxNSwyMSBAQAogICAgLS0gIE1BTlBBR0UoYG1lbnVfb3B0cy4zeCcpCiAKICAgIC0tICBBTkNIT1IoYHNldF9tZW51X29wdHMoKScsYFNldF9PcHRpb25zJykKLSAgIHByb2NlZHVyZSBTZXRfT3B0aW9ucyAoTWVuICAgICA6IGluIE1lbnU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbnMgOiBpbiBNZW51X09wdGlvbl9TZXQpOworICAgcHJvY2VkdXJlIFNldF9PcHRpb25zIChNZW4gICAgIDogTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW9ucyA6IE1lbnVfT3B0aW9uX1NldCk7CiAgICAtLSAgQUtBCiAgICBwcmFnbWEgSW5saW5lIChTZXRfT3B0aW9ucyk7CiAKICAgIC0tICBBTkNIT1IoYG1lbnVfb3B0c19vbigpJyxgU3dpdGNoX09wdGlvbnMnKQotICAgcHJvY2VkdXJlIFN3aXRjaF9PcHRpb25zIChNZW4gICAgIDogaW4gTWVudTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW9ucyA6IGluIE1lbnVfT3B0aW9uX1NldDsKKyAgIHByb2NlZHVyZSBTd2l0Y2hfT3B0aW9ucyAoTWVuICAgICA6IE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbnMgOiBNZW51X09wdGlvbl9TZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9uICAgICAgOiBCb29sZWFuIDo9IFRydWUpOwogICAgLS0gIEFLQQogICAgLS0gIEFMSUFTKGBtZW51X29wdHNfb2ZmKCknKQogICAgcHJhZ21hIElubGluZSAoU3dpdGNoX09wdGlvbnMpOwogCiAgICAtLSAgQU5DSE9SKGBtZW51X29wdHMoKScsYEdldF9PcHRpb25zJykKLSAgIHByb2NlZHVyZSBHZXRfT3B0aW9ucyAoTWVuICAgICA6IGluICBNZW51OworICAgcHJvY2VkdXJlIEdldF9PcHRpb25zIChNZW4gICAgIDogTWVudTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW9ucyA6IG91dCBNZW51X09wdGlvbl9TZXQpOwogICAgLS0gIEFLQQogCkBAIC0zMDcsOCArMzQxLDggQEAKICAgIC0tICBNQU5QQUdFKGBtZW51X3dpbi4zeCcpCiAKICAgIC0tICBBTkNIT1IoYHNldF9tZW51X3dpbigpJyxgU2V0X1dpbmRvdycpCi0gICBwcm9jZWR1cmUgU2V0X1dpbmRvdyAoTWVuIDogaW4gTWVudTsKLSAgICAgICAgICAgICAgICAgICAgICAgICBXaW4gOiBpbiBXaW5kb3cpOworICAgcHJvY2VkdXJlIFNldF9XaW5kb3cgKE1lbiA6IE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgV2luIDogV2luZG93KTsKICAgIC0tICBBS0EKICAgIHByYWdtYSBJbmxpbmUgKFNldF9XaW5kb3cpOwogCkBAIC0zMTgsOCArMzUyLDggQEAKICAgIHByYWdtYSBJbmxpbmUgKEdldF9XaW5kb3cpOwogCiAgICAtLSAgQU5DSE9SKGBzZXRfbWVudV9zdWIoKScsYFNldF9TdWJfV2luZG93JykKLSAgIHByb2NlZHVyZSBTZXRfU3ViX1dpbmRvdyAoTWVuIDogaW4gTWVudTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2luIDogaW4gV2luZG93KTsKKyAgIHByb2NlZHVyZSBTZXRfU3ViX1dpbmRvdyAoTWVuIDogTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2luIDogV2luZG93KTsKICAgIC0tICBBS0EKICAgIHByYWdtYSBJbmxpbmUgKFNldF9TdWJfV2luZG93KTsKIApAQCAtMzI5LDcgKzM2Myw3IEBACiAgICBwcmFnbWEgSW5saW5lIChHZXRfU3ViX1dpbmRvdyk7CiAKICAgIC0tICBBTkNIT1IoYHNjYWxlX21lbnUoKScsYFNjYWxlJykKLSAgIHByb2NlZHVyZSBTY2FsZSAoTWVuICAgICA6IGluIE1lbnU7CisgICBwcm9jZWR1cmUgU2NhbGUgKE1lbiAgICAgOiBNZW51OwogICAgICAgICAgICAgICAgICAgICBMaW5lcyAgIDogb3V0IExpbmVfQ291bnQ7CiAgICAgICAgICAgICAgICAgICAgIENvbHVtbnMgOiBvdXQgQ29sdW1uX0NvdW50KTsKICAgIC0tICBBS0EKQEAgLTM0NSwxMyArMzc5LDEzIEBACiAgICAtLSAgTUFOUEFHRShgbWVudV9tYXJrLjN4JykKIAogICAgLS0gIEFOQ0hPUihgc2V0X21lbnVfbWFyaygpJyxgU2V0X01hcmsnKQotICAgcHJvY2VkdXJlIFNldF9NYXJrIChNZW4gIDogaW4gTWVudTsKLSAgICAgICAgICAgICAgICAgICAgICAgTWFyayA6IGluIFN0cmluZyk7CisgICBwcm9jZWR1cmUgU2V0X01hcmsgKE1lbiAgOiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICBNYXJrIDogU3RyaW5nKTsKICAgIC0tICBBS0EKICAgIHByYWdtYSBJbmxpbmUgKFNldF9NYXJrKTsKIAogICAgLS0gIEFOQ0hPUihgbWVudV9tYXJrKCknLGBNYXJrJykKLSAgIHByb2NlZHVyZSBNYXJrIChNZW4gIDogaW4gIE1lbnU7CisgICBwcm9jZWR1cmUgTWFyayAoTWVuICA6IE1lbnU7CiAgICAgICAgICAgICAgICAgICAgTWFyayA6IG91dCBTdHJpbmcpOwogICAgLS0gIEFLQQogCkBAIC0zNjQsMTkgKzM5OCwxOSBAQAogCiAgICAtLSAgQU5DSE9SKGBzZXRfbWVudV9mb3JlKCknLGBTZXRfRm9yZWdyb3VuZCcpCiAgICBwcm9jZWR1cmUgU2V0X0ZvcmVncm91bmQKLSAgICAgKE1lbiAgIDogaW4gTWVudTsKLSAgICAgIEZvcmUgIDogaW4gQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQgOj0gTm9ybWFsX1ZpZGVvOwotICAgICAgQ29sb3IgOiBpbiBDb2xvcl9QYWlyIDo9IENvbG9yX1BhaXInRmlyc3QpOworICAgICAoTWVuICAgOiBNZW51OworICAgICAgRm9yZSAgOiBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldCA6PSBOb3JtYWxfVmlkZW87CisgICAgICBDb2xvciA6IENvbG9yX1BhaXIgOj0gQ29sb3JfUGFpcidGaXJzdCk7CiAgICAtLSAgQUtBCiAgICBwcmFnbWEgSW5saW5lIChTZXRfRm9yZWdyb3VuZCk7CiAKICAgIC0tICBBTkNIT1IoYG1lbnVfZm9yZSgpJyxgRm9yZWdyb3VuZCcpCi0gICBwcm9jZWR1cmUgRm9yZWdyb3VuZCAoTWVuICAgOiBpbiAgTWVudTsKKyAgIHByb2NlZHVyZSBGb3JlZ3JvdW5kIChNZW4gICA6IE1lbnU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yZSAgOiBvdXQgQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQpOwogICAgLS0gIEFLQQogCiAgICAtLSAgQU5DSE9SKGBtZW51X2ZvcmUoKScsYEZvcmVncm91bmQnKQotICAgcHJvY2VkdXJlIEZvcmVncm91bmQgKE1lbiAgIDogaW4gIE1lbnU7CisgICBwcm9jZWR1cmUgRm9yZWdyb3VuZCAoTWVuICAgOiBNZW51OwogICAgICAgICAgICAgICAgICAgICAgICAgIEZvcmUgIDogb3V0IENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0OwogICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yIDogb3V0IENvbG9yX1BhaXIpOwogICAgLS0gIEFLQQpAQCAtMzg0LDE5ICs0MTgsMTkgQEAKIAogICAgLS0gIEFOQ0hPUihgc2V0X21lbnVfYmFjaygpJyxgU2V0X0JhY2tncm91bmQnKQogICAgcHJvY2VkdXJlIFNldF9CYWNrZ3JvdW5kCi0gICAgIChNZW4gICA6IGluIE1lbnU7Ci0gICAgICBCYWNrICA6IGluIENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0IDo9IE5vcm1hbF9WaWRlbzsKLSAgICAgIENvbG9yIDogaW4gQ29sb3JfUGFpciA6PSBDb2xvcl9QYWlyJ0ZpcnN0KTsKKyAgICAgKE1lbiAgIDogTWVudTsKKyAgICAgIEJhY2sgIDogQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQgOj0gTm9ybWFsX1ZpZGVvOworICAgICAgQ29sb3IgOiBDb2xvcl9QYWlyIDo9IENvbG9yX1BhaXInRmlyc3QpOwogICAgLS0gIEFLQQogICAgcHJhZ21hIElubGluZSAoU2V0X0JhY2tncm91bmQpOwogCiAgICAtLSAgQU5DSE9SKGBtZW51X2JhY2soKScsYEJhY2tncm91bmQnKQotICAgcHJvY2VkdXJlIEJhY2tncm91bmQgKE1lbiAgOiBpbiAgTWVudTsKKyAgIHByb2NlZHVyZSBCYWNrZ3JvdW5kIChNZW4gIDogTWVudTsKICAgICAgICAgICAgICAgICAgICAgICAgICBCYWNrIDogb3V0IENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0KTsKICAgIC0tICBBS0EKICAgIC0tICBBTkNIT1IoYG1lbnVfYmFjaygpJyxgQmFja2dyb3VuZCcpCiAKLSAgIHByb2NlZHVyZSBCYWNrZ3JvdW5kIChNZW4gICA6IGluICBNZW51OworICAgcHJvY2VkdXJlIEJhY2tncm91bmQgKE1lbiAgIDogTWVudTsKICAgICAgICAgICAgICAgICAgICAgICAgICBCYWNrICA6IG91dCBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldDsKICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvciA6IG91dCBDb2xvcl9QYWlyKTsKICAgIC0tICBBS0EKQEAgLTQwNCwzMyArNDM4LDMzIEBACiAKICAgIC0tICBBTkNIT1IoYHNldF9tZW51X2dyZXkoKScsYFNldF9HcmV5JykKICAgIHByb2NlZHVyZSBTZXRfR3JleQotICAgICAoTWVuICAgOiBpbiBNZW51OwotICAgICAgR3JleSAgOiBpbiBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldCA6PSBOb3JtYWxfVmlkZW87Ci0gICAgICBDb2xvciA6IGluIENvbG9yX1BhaXIgOj0gQ29sb3JfUGFpcidGaXJzdCk7CisgICAgIChNZW4gICA6IE1lbnU7CisgICAgICBHcmV5ICA6IENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0IDo9IE5vcm1hbF9WaWRlbzsKKyAgICAgIENvbG9yIDogQ29sb3JfUGFpciA6PSBDb2xvcl9QYWlyJ0ZpcnN0KTsKICAgIC0tICBBS0EKICAgIHByYWdtYSBJbmxpbmUgKFNldF9HcmV5KTsKIAogICAgLS0gIEFOQ0hPUihgbWVudV9ncmV5KCknLGBHcmV5JykKLSAgIHByb2NlZHVyZSBHcmV5IChNZW4gIDogaW4gIE1lbnU7CisgICBwcm9jZWR1cmUgR3JleSAoTWVuICA6IE1lbnU7CiAgICAgICAgICAgICAgICAgICAgR3JleSA6IG91dCBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldCk7CiAgICAtLSAgQUtBCiAKICAgIC0tICBBTkNIT1IoYG1lbnVfZ3JleSgpJyxgR3JleScpCiAgICBwcm9jZWR1cmUgR3JleQotICAgICAoTWVuICAgOiBpbiAgTWVudTsKKyAgICAgKE1lbiAgIDogTWVudTsKICAgICAgIEdyZXkgIDogb3V0IENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0OwogICAgICAgQ29sb3IgOiBvdXQgQ29sb3JfUGFpcik7CiAgICAtLSAgQUtBCiAgICBwcmFnbWEgSW5saW5lIChHcmV5KTsKIAogICAgLS0gIEFOQ0hPUihgc2V0X21lbnVfcGFkKCknLGBTZXRfUGFkX0NoYXJhY3RlcicpCi0gICBwcm9jZWR1cmUgU2V0X1BhZF9DaGFyYWN0ZXIgKE1lbiA6IGluIE1lbnU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhZCA6IGluIENoYXJhY3RlciA6PSBTcGFjZSk7CisgICBwcm9jZWR1cmUgU2V0X1BhZF9DaGFyYWN0ZXIgKE1lbiA6IE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhZCA6IENoYXJhY3RlciA6PSBTcGFjZSk7CiAgICAtLSAgQUtBCiAgICBwcmFnbWEgSW5saW5lIChTZXRfUGFkX0NoYXJhY3Rlcik7CiAKICAgIC0tICBBTkNIT1IoYG1lbnVfcGFkKCknLGBQYWRfQ2hhcmFjdGVyJykKLSAgIHByb2NlZHVyZSBQYWRfQ2hhcmFjdGVyIChNZW4gOiBpbiAgTWVudTsKKyAgIHByb2NlZHVyZSBQYWRfQ2hhcmFjdGVyIChNZW4gOiBNZW51OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhZCA6IG91dCBDaGFyYWN0ZXIpOwogICAgLS0gIEFLQQogICAgcHJhZ21hIElubGluZSAoUGFkX0NoYXJhY3Rlcik7CkBAIC00MzgsMTUgKzQ3MiwxNSBAQAogICAgLS0gIE1BTlBBR0UoYG1lbnVfc3BhY2luZy4zeCcpCiAKICAgIC0tICBBTkNIT1IoYHNldF9tZW51X3NwYWNpbmcoKScsYFNldF9TcGFjaW5nJykKLSAgIHByb2NlZHVyZSBTZXRfU3BhY2luZyAoTWVuICAgOiBpbiBNZW51OwotICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjciA6IGluIENvbHVtbl9Qb3NpdGlvbiA6PSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgICBSb3cgICA6IGluIExpbmVfUG9zaXRpb24gICA6PSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgICBDb2wgICA6IGluIENvbHVtbl9Qb3NpdGlvbiA6PSAwKTsKKyAgIHByb2NlZHVyZSBTZXRfU3BhY2luZyAoTWVuICAgOiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjciA6IENvbHVtbl9Qb3NpdGlvbiA6PSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICBSb3cgICA6IExpbmVfUG9zaXRpb24gICA6PSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICBDb2wgICA6IENvbHVtbl9Qb3NpdGlvbiA6PSAwKTsKICAgIC0tICBBS0EKICAgIHByYWdtYSBJbmxpbmUgKFNldF9TcGFjaW5nKTsKIAogICAgLS0gIEFOQ0hPUihgbWVudV9zcGFjaW5nKCknLGBTcGFjaW5nJykKLSAgIHByb2NlZHVyZSBTcGFjaW5nIChNZW4gICA6IGluIE1lbnU7CisgICBwcm9jZWR1cmUgU3BhY2luZyAoTWVuICAgOiBNZW51OwogICAgICAgICAgICAgICAgICAgICAgIERlc2NyIDogb3V0IENvbHVtbl9Qb3NpdGlvbjsKICAgICAgICAgICAgICAgICAgICAgICBSb3cgICA6IG91dCBMaW5lX1Bvc2l0aW9uOwogICAgICAgICAgICAgICAgICAgICAgIENvbCAgIDogb3V0IENvbHVtbl9Qb3NpdGlvbik7CkBAIC00NjMsNyArNDk3LDcgQEAKICAgIHByYWdtYSBJbmxpbmUgKFNldF9QYXR0ZXJuKTsKIAogICAgLS0gIEFOQ0hPUihgbWVudV9wYXR0ZXJuKCknLGBQYXR0ZXJuJykKLSAgIHByb2NlZHVyZSBQYXR0ZXJuIChNZW4gIDogaW4gIE1lbnU7CisgICBwcm9jZWR1cmUgUGF0dGVybiAoTWVuICA6IE1lbnU7CiAgICAgICAgICAgICAgICAgICAgICAgVGV4dCA6IG91dCBTdHJpbmcpOwogICAgLS0gIEFLQQogICAgcHJhZ21hIElubGluZSAoUGF0dGVybik7CkBAIC00NzEsOSArNTA1LDkgQEAKICAgIC0tICBNQU5QQUdFKGBtZW51X2Zvcm1hdC4zeCcpCiAKICAgIC0tICBBTkNIT1IoYHNldF9tZW51X2Zvcm1hdCgpJyxgU2V0X0Zvcm1hdCcpCi0gICBwcm9jZWR1cmUgU2V0X0Zvcm1hdCAoTWVuICAgICA6IGluIE1lbnU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgTGluZXMgICA6IGluIExpbmVfQ291bnQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgQ29sdW1ucyA6IGluIENvbHVtbl9Db3VudCk7CisgICBwcm9jZWR1cmUgU2V0X0Zvcm1hdCAoTWVuICAgICA6IE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgTGluZXMgICA6IExpbmVfQ291bnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgQ29sdW1ucyA6IENvbHVtbl9Db3VudCk7CiAgICAtLSAgTm90IGltcGxlbWVudGVkOiAwIGFyZ3VtZW50IGZvciBMaW5lcyBvciBDb2x1bW5zOwogICAgLS0gIGluc3RlYWQgdXNlIEZvcm1hdCB0byBnZXQgdGhlIGN1cnJlbnQgc2l6ZXMKICAgIC0tICAgICAgVGhlICBkZWZhdWx0ICBmb3JtYXQgIGlzICAxNiAgcm93cywgIDEgIGNvbHVtbi4gICAgQ2FsbGluZwpAQCAtNDg1LDcgKzUxOSw3IEBACiAgICBwcmFnbWEgSW5saW5lIChTZXRfRm9ybWF0KTsKIAogICAgLS0gIEFOQ0hPUihgbWVudV9mb3JtYXQoKScsYEZvcm1hdCcpCi0gICBwcm9jZWR1cmUgRm9ybWF0IChNZW4gICAgIDogaW4gIE1lbnU7CisgICBwcm9jZWR1cmUgRm9ybWF0IChNZW4gICAgIDogTWVudTsKICAgICAgICAgICAgICAgICAgICAgIExpbmVzICAgOiBvdXQgTGluZV9Db3VudDsKICAgICAgICAgICAgICAgICAgICAgIENvbHVtbnMgOiBvdXQgQ29sdW1uX0NvdW50KTsKICAgIC0tICBBS0EKQEAgLTQ5MywzMCArNTI3LDMwIEBACiAKICAgIC0tICBNQU5QQUdFKGBtZW51X2hvb2suM3gnKQogCi0gICB0eXBlIE1lbnVfSG9va19GdW5jdGlvbiBpcyBhY2Nlc3MgcHJvY2VkdXJlIChNZW4gOiBpbiBNZW51KTsKKyAgIHR5cGUgTWVudV9Ib29rX0Z1bmN0aW9uIGlzIGFjY2VzcyBwcm9jZWR1cmUgKE1lbiA6IE1lbnUpOwogICAgcHJhZ21hIENvbnZlbnRpb24gKEMsIE1lbnVfSG9va19GdW5jdGlvbik7CiAKICAgIC0tICBBTkNIT1IoYHNldF9pdGVtX2luaXQoKScsYFNldF9JdGVtX0luaXRfSG9vaycpCi0gICBwcm9jZWR1cmUgU2V0X0l0ZW1fSW5pdF9Ib29rIChNZW4gIDogaW4gTWVudTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2MgOiBpbiBNZW51X0hvb2tfRnVuY3Rpb24pOworICAgcHJvY2VkdXJlIFNldF9JdGVtX0luaXRfSG9vayAoTWVuICA6IE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jIDogTWVudV9Ib29rX0Z1bmN0aW9uKTsKICAgIC0tICBBS0EKICAgIHByYWdtYSBJbmxpbmUgKFNldF9JdGVtX0luaXRfSG9vayk7CiAKICAgIC0tICBBTkNIT1IoYHNldF9pdGVtX3Rlcm0oKScsYFNldF9JdGVtX1Rlcm1fSG9vaycpCi0gICBwcm9jZWR1cmUgU2V0X0l0ZW1fVGVybV9Ib29rIChNZW4gIDogaW4gTWVudTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2MgOiBpbiBNZW51X0hvb2tfRnVuY3Rpb24pOworICAgcHJvY2VkdXJlIFNldF9JdGVtX1Rlcm1fSG9vayAoTWVuICA6IE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jIDogTWVudV9Ib29rX0Z1bmN0aW9uKTsKICAgIC0tICBBS0EKICAgIHByYWdtYSBJbmxpbmUgKFNldF9JdGVtX1Rlcm1fSG9vayk7CiAKICAgIC0tICBBTkNIT1IoYHNldF9tZW51X2luaXQoKScsYFNldF9NZW51X0luaXRfSG9vaycpCi0gICBwcm9jZWR1cmUgU2V0X01lbnVfSW5pdF9Ib29rIChNZW4gIDogaW4gTWVudTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2MgOiBpbiBNZW51X0hvb2tfRnVuY3Rpb24pOworICAgcHJvY2VkdXJlIFNldF9NZW51X0luaXRfSG9vayAoTWVuICA6IE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jIDogTWVudV9Ib29rX0Z1bmN0aW9uKTsKICAgIC0tICBBS0EKICAgIHByYWdtYSBJbmxpbmUgKFNldF9NZW51X0luaXRfSG9vayk7CiAKICAgIC0tICBBTkNIT1IoYHNldF9tZW51X3Rlcm0oKScsYFNldF9NZW51X1Rlcm1fSG9vaycpCi0gICBwcm9jZWR1cmUgU2V0X01lbnVfVGVybV9Ib29rIChNZW4gIDogaW4gTWVudTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2MgOiBpbiBNZW51X0hvb2tfRnVuY3Rpb24pOworICAgcHJvY2VkdXJlIFNldF9NZW51X1Rlcm1fSG9vayAoTWVuICA6IE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jIDogTWVudV9Ib29rX0Z1bmN0aW9uKTsKICAgIC0tICBBS0EKICAgIHByYWdtYSBJbmxpbmUgKFNldF9NZW51X1Rlcm1fSG9vayk7CiAKQEAgLTU0MywxMyArNTc3LDEzIEBACiAgICAtLSAgTUFOUEFHRShgbWVudV9pdGVtcy4zeCcpCiAKICAgIC0tICBBTkNIT1IoYHNldF9tZW51X2l0ZW1zKCknLGBSZWRlZmluZScpCi0gICBwcm9jZWR1cmUgUmVkZWZpbmUgKE1lbiAgIDogaW4gTWVudTsKLSAgICAgICAgICAgICAgICAgICAgICAgSXRlbXMgOiBpbiBJdGVtX0FycmF5X0FjY2Vzcyk7CisgICBwcm9jZWR1cmUgUmVkZWZpbmUgKE1lbiAgIDogTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgSXRlbXMgOiBJdGVtX0FycmF5X0FjY2Vzcyk7CiAgICAtLSAgQUtBCiAgICBwcmFnbWEgSW5saW5lIChSZWRlZmluZSk7CiAKLSAgIHByb2NlZHVyZSBTZXRfSXRlbXMgKE1lbiAgIDogaW4gTWVudTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEl0ZW1zIDogaW4gSXRlbV9BcnJheV9BY2Nlc3MpIHJlbmFtZXMgUmVkZWZpbmU7CisgICBwcm9jZWR1cmUgU2V0X0l0ZW1zIChNZW4gICA6IE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICBJdGVtcyA6IEl0ZW1fQXJyYXlfQWNjZXNzKSByZW5hbWVzIFJlZGVmaW5lOwogICAgLS0gIHByYWdtYSBJbmxpbmUgKFNldF9JdGVtcyk7CiAKICAgIC0tICBBTkNIT1IoYG1lbnVfaXRlbXMoKScsYEl0ZW1zJykKZGlmZiAtLWdpdCBhL0FkYTk1L2dlbi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlLmFkcy5tNCBiL0FkYTk1L2dlbi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlLmFkcy5tNAppbmRleCBiNTllYmJmLi44ZDNmOGVkIDEwMDY0NAotLS0gYS9BZGE5NS9nZW4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZS5hZHMubTQKKysrIGIvQWRhOTUvZ2VuL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2UuYWRzLm00CkBAIC0xMCw3ICsxMCw3IEBACiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OC0yMDE0LDIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KIC0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQpAQCAtMzgsMjEgKzM4LDE2IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKIC0tICBWZXJzaW9uIENvbnRyb2w6Ci0tLSAgJFJldmlzaW9uOiAxLjI3ICQKLS0tICAkRGF0ZTogMjAwNi8wNi8yNSAxNDozMDoyMiAkCistLSAgJFJldmlzaW9uOiAxLjMyICQKKy0tICAkRGF0ZTogMjAxNS8wNS8zMCAyMzoxOToxOSAkCiAtLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWluY2x1ZGUoYE1vdXNlX0Jhc2VfRGVmcycpCiB3aXRoIFN5c3RlbTsKIAogcGFja2FnZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLk1vdXNlIGlzCiAgICBwcmFnbWEgUHJlZWxhYm9yYXRlIChUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLk1vdXNlKTsKIAogICAgLS0gIE1BTlBBR0UoYGN1cnNfbW91c2UuM3gnKQotICAgLS0gIFBsZWFzZSBub3RlLCB0aGF0IGluIG5jdXJzZXMtMS45LjllIGRvY3VtZW50YXRpb24gbW91c2Ugc3VwcG9ydAotICAgLS0gIGlzIHN0aWxsIG1hcmtlZCBhcyBleHBlcmltZW50YWwuIFNvIGFsc28gdGhpcyBiaW5kaW5nIHdpbGwgY2hhbmdlCi0gICAtLSAgaWYgdGhlIG5jdXJzZXMgbWV0aG9kcyBjaGFuZ2UuCi0gICAtLQogICAgLS0gIG1vdXNlX3RyYWZvLCB3bW91c2VfdHJhZm8gYXJlIGltcGxlbWVudGVkIGFzIFRyYW5zZm9ybV9Db29yZGluYXRlcwogICAgLS0gIGluIHRoZSBwYXJlbnQgcGFja2FnZS4KICAgIC0tCkBAIC05NSwyMCArOTAsMjAgQEAKICAgIC0tICBSZXR1cm4gdHJ1ZSBpZiBhIG1vdXNlIGRldmljZSBpcyBzdXBwb3J0ZWQsIGZhbHNlIG90aGVyd2lzZS4KIAogICAgcHJvY2VkdXJlIFJlZ2lzdGVyX1JlcG9ydGFibGVfRXZlbnQKLSAgICAgKEJ1dHRvbiA6IGluIE1vdXNlX0J1dHRvbjsKLSAgICAgIFN0YXRlICA6IGluIEJ1dHRvbl9TdGF0ZTsKKyAgICAgKEJ1dHRvbiA6IE1vdXNlX0J1dHRvbjsKKyAgICAgIFN0YXRlICA6IEJ1dHRvbl9TdGF0ZTsKICAgICAgIE1hc2sgICA6IGluIG91dCBFdmVudF9NYXNrKTsKICAgIC0tICBTdG9yZXMgdGhlIGV2ZW50IGRlc2NyaWJlZCBieSB0aGUgYnV0dG9uIGFuZCB0aGUgc3RhdGUgaW4gdGhlIG1hc2suCi0gICAtLSAgQmVmb3JlIHlvdSBjYWxsIHRoaXMgdGhlIGZpcnN0IHRpbWUsIHlvdSBzaG91bGQgaW5pdCB0aGUgbWFzaworICAgLS0gIEJlZm9yZSB5b3UgY2FsbCB0aGlzIHRoZSBmaXJzdCB0aW1lLCB5b3Ugc2hvdWxkIGluaXRpYWxpemUgdGhlIG1hc2sKICAgIC0tICB3aXRoIHRoZSBFbXB0eV9NYXNrIGNvbnN0YW50CiAgICBwcmFnbWEgSW5saW5lIChSZWdpc3Rlcl9SZXBvcnRhYmxlX0V2ZW50KTsKIAogICAgcHJvY2VkdXJlIFJlZ2lzdGVyX1JlcG9ydGFibGVfRXZlbnRzCi0gICAgIChCdXR0b24gOiBpbiBNb3VzZV9CdXR0b247Ci0gICAgICBTdGF0ZSAgOiBpbiBCdXR0b25fU3RhdGVzOworICAgICAoQnV0dG9uIDogTW91c2VfQnV0dG9uOworICAgICAgU3RhdGUgIDogQnV0dG9uX1N0YXRlczsKICAgICAgIE1hc2sgICA6IGluIG91dCBFdmVudF9NYXNrKTsKICAgIC0tICBSZWdpc3RlciBhbGwgZXZlbnRzIGRlc2NyaWJlZCBieSB0aGUgQnV0dG9uIGFuZCB0aGUgU3RhdGUgYml0bWFwLgotICAgLS0gIEJlZm9yZSB5b3UgY2FsbCB0aGlzIHRoZSBmaXJzdCB0aW1lLCB5b3Ugc2hvdWxkIGluaXQgdGhlIG1hc2sKKyAgIC0tICBCZWZvcmUgeW91IGNhbGwgdGhpcyB0aGUgZmlyc3QgdGltZSwgeW91IHNob3VsZCBpbml0aWFsaXplIHRoZSBtYXNrCiAgICAtLSAgd2l0aCB0aGUgRW1wdHlfTWFzayBjb25zdGFudAogCiAgICAtLSAgQU5DSE9SKGBtb3VzZW1hc2soKScsYFN0YXJ0X01vdXNlJykKQEAgLTEyMSw3ICsxMTYsNyBAQAogICAgLS0gIEFLQQogICAgcHJhZ21hIElubGluZSAoU3RhcnRfTW91c2UpOwogCi0gICBwcm9jZWR1cmUgRW5kX01vdXNlIChNYXNrIDogaW4gRXZlbnRfTWFzayA6PSBOb19FdmVudHMpOworICAgcHJvY2VkdXJlIEVuZF9Nb3VzZSAoTWFzayA6IEV2ZW50X01hc2sgOj0gTm9fRXZlbnRzKTsKICAgIC0tICBUZXJtaW5hdGVzIHRoZSBtb3VzZSwgcmVzdG9yZXMgdGhlIHNwZWNpZmllZCBldmVudCBtYXNrCiAgICBwcmFnbWEgSW5saW5lIChFbmRfTW91c2UpOwogCkBAIC0xMzAsNyArMTI1LDcgQEAKICAgIC0tICBBS0EKICAgIHByYWdtYSBJbmxpbmUgKEdldF9Nb3VzZSk7CiAKLSAgIHByb2NlZHVyZSBHZXRfRXZlbnQgKEV2ZW50ICA6IGluICBNb3VzZV9FdmVudDsKKyAgIHByb2NlZHVyZSBHZXRfRXZlbnQgKEV2ZW50ICA6IE1vdXNlX0V2ZW50OwogICAgICAgICAgICAgICAgICAgICAgICAgWSAgICAgIDogb3V0IExpbmVfUG9zaXRpb247CiAgICAgICAgICAgICAgICAgICAgICAgICBYICAgICAgOiBvdXQgQ29sdW1uX1Bvc2l0aW9uOwogICAgICAgICAgICAgICAgICAgICAgICAgQnV0dG9uIDogb3V0IE1vdXNlX0J1dHRvbjsKQEAgLTE0Miw3ICsxMzcsNyBAQAogICAgcHJhZ21hIElubGluZSAoR2V0X0V2ZW50KTsKIAogICAgLS0gIEFOQ0hPUihgdW5nZXRtb3VzZSgpJyxgVW5nZXRfTW91c2UnKQotICAgcHJvY2VkdXJlIFVuZ2V0X01vdXNlIChFdmVudCA6IGluIE1vdXNlX0V2ZW50KTsKKyAgIHByb2NlZHVyZSBVbmdldF9Nb3VzZSAoRXZlbnQgOiBNb3VzZV9FdmVudCk7CiAgICAtLSAgQUtBCiAgICBwcmFnbWEgSW5saW5lIChVbmdldF9Nb3VzZSk7CiAKQEAgLTE1OSw3ICsxNTQsMTAgQEAKICAgIHByYWdtYSBJbmxpbmUgKE1vdXNlX0ludGVydmFsKTsKIAogcHJpdmF0ZQotICAgdHlwZSBFdmVudF9NYXNrIGlzIG5ldyBJbnRlcmZhY2VzLkMudW5zaWduZWRfbG9uZzsKKyAgIC0tICBUaGlzIGNhbiBiZSBhcyBsaXR0bGUgYXMgMzIgYml0cyAodW5zaWduZWQpLCBvciBhcyBsb25nIGFzIHRoZSBzeXN0ZW0ncworICAgLS0gIHVuc2lnbmVkIGxvbmcuICBEZWNsYXJlIGl0IGFzIHRoZSBtaW5pbXVtIHNpemUgdG8gaGFuZGxlIGFsbCB2YWxpZAorICAgLS0gIHNpemVzLgorICAgdHlwZSBFdmVudF9NYXNrIGlzIG1vZCA0Mjk0OTY3Mjk2OwogCiAgICB0eXBlIE1vdXNlX0V2ZW50IGlzCiAgICAgICByZWNvcmQKQEAgLTE3MSwxMiArMTY5LDM1IEBACiAgICAgICBlbmQgcmVjb3JkOwogICAgcHJhZ21hIENvbnZlbnRpb24gKEMsIE1vdXNlX0V2ZW50KTsKIAotaW5jbHVkZShgTW91c2VfRXZlbnRfUmVwJykKLSAgIEdlbmVyYXRpb25fQml0X09yZGVyIDogY29uc3RhbnQgU3lzdGVtLkJpdF9PcmRlciA6PSBTeXN0ZW0uTTRfQklUX09SREVSOwotICAgLS0gIFRoaXMgY29uc3RhbnQgbWF5IGJlIGRpZmZlcmVudCBvbiB5b3VyIHN5c3RlbS4KKyAgIGZvciBNb3VzZV9FdmVudCB1c2UKKyAgICAgIHJlY29yZAorICAgICAgICAgSWQgICAgIGF0IDAgcmFuZ2UgQ3Vyc2VzX0NvbnN0YW50cy5NRVZFTlRfaWRfRmlyc3QKKyAgICAgICAgICAgLi4gQ3Vyc2VzX0NvbnN0YW50cy5NRVZFTlRfaWRfTGFzdDsKKyAgICAgICAgIFggICAgICBhdCAwIHJhbmdlIEN1cnNlc19Db25zdGFudHMuTUVWRU5UX3hfRmlyc3QKKyAgICAgICAgICAgLi4gQ3Vyc2VzX0NvbnN0YW50cy5NRVZFTlRfeF9MYXN0OworICAgICAgICAgWSAgICAgIGF0IDAgcmFuZ2UgQ3Vyc2VzX0NvbnN0YW50cy5NRVZFTlRfeV9GaXJzdAorICAgICAgICAgICAuLiBDdXJzZXNfQ29uc3RhbnRzLk1FVkVOVF95X0xhc3Q7CisgICAgICAgICBaICAgICAgYXQgMCByYW5nZSBDdXJzZXNfQ29uc3RhbnRzLk1FVkVOVF96X0ZpcnN0CisgICAgICAgICAgIC4uIEN1cnNlc19Db25zdGFudHMuTUVWRU5UX3pfTGFzdDsKKyAgICAgICAgIEJzdGF0ZSBhdCAwIHJhbmdlIEN1cnNlc19Db25zdGFudHMuTUVWRU5UX2JzdGF0ZV9GaXJzdAorICAgICAgICAgICAuLiBDdXJzZXNfQ29uc3RhbnRzLk1FVkVOVF9ic3RhdGVfTGFzdDsKKyAgICAgIGVuZCByZWNvcmQ7CisgICBmb3IgTW91c2VfRXZlbnQnU2l6ZSB1c2UgQ3Vyc2VzX0NvbnN0YW50cy5NRVZFTlRfU2l6ZTsKKyAgIEdlbmVyYXRpb25fQml0X09yZGVyIDogU3lzdGVtLkJpdF9PcmRlciByZW5hbWVzIEN1cnNlc19Db25zdGFudHMuQml0X09yZGVyOwogCi1pbmNsdWRlKGBNb3VzZV9FdmVudHMnKQotICAgTm9fRXZlbnRzICA6IGNvbnN0YW50IEV2ZW50X01hc2sgOj0gMDsKLSAgIEFsbF9FdmVudHMgOiBjb25zdGFudCBFdmVudF9NYXNrIDo9IEFMTF9NT1VTRV9FVkVOVFM7CisgICBCVVRUT05fQ1RSTCAgICAgIDogY29uc3RhbnQgRXZlbnRfTWFzayA6PSBDdXJzZXNfQ29uc3RhbnRzLkJVVFRPTl9DVFJMOworICAgQlVUVE9OX1NISUZUICAgICA6IGNvbnN0YW50IEV2ZW50X01hc2sgOj0gQ3Vyc2VzX0NvbnN0YW50cy5CVVRUT05fU0hJRlQ7CisgICBCVVRUT05fQUxUICAgICAgIDogY29uc3RhbnQgRXZlbnRfTWFzayA6PSBDdXJzZXNfQ29uc3RhbnRzLkJVVFRPTl9BTFQ7CisgICBCVVRUT04xX0VWRU5UUyAgIDogY29uc3RhbnQgRXZlbnRfTWFzaworICAgICA6PSBDdXJzZXNfQ29uc3RhbnRzLmFsbF9ldmVudHNfYnV0dG9uXzE7CisgICBCVVRUT04yX0VWRU5UUyAgIDogY29uc3RhbnQgRXZlbnRfTWFzaworICAgICA6PSBDdXJzZXNfQ29uc3RhbnRzLmFsbF9ldmVudHNfYnV0dG9uXzI7CisgICBCVVRUT04zX0VWRU5UUyAgIDogY29uc3RhbnQgRXZlbnRfTWFzaworICAgICA6PSBDdXJzZXNfQ29uc3RhbnRzLmFsbF9ldmVudHNfYnV0dG9uXzM7CisgICBCVVRUT040X0VWRU5UUyAgIDogY29uc3RhbnQgRXZlbnRfTWFzaworICAgICA6PSBDdXJzZXNfQ29uc3RhbnRzLmFsbF9ldmVudHNfYnV0dG9uXzQ7CisgICBBTExfTU9VU0VfRVZFTlRTIDogY29uc3RhbnQgRXZlbnRfTWFzayA6PSBDdXJzZXNfQ29uc3RhbnRzLkFMTF9NT1VTRV9FVkVOVFM7CisgICBOb19FdmVudHMgICAgICAgIDogY29uc3RhbnQgRXZlbnRfTWFzayA6PSAwOworICAgQWxsX0V2ZW50cyAgICAgICA6IGNvbnN0YW50IEV2ZW50X01hc2sgOj0gQUxMX01PVVNFX0VWRU5UUzsKIAogZW5kIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuTW91c2U7CmRpZmYgLS1naXQgYS9BZGE5NS9nZW4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMtdXNlcl9kYXRhLmFkcy5tNCBiL0FkYTk1L2dlbi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGEuYWRzLm00CmluZGV4IGU2ZGVmOWIuLjAzZDgxMTQgMTAwNjQ0Ci0tLSBhL0FkYTk1L2dlbi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGEuYWRzLm00CisrKyBiL0FkYTk1L2dlbi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGEuYWRzLm00CkBAIC0xMCw3ICsxMCw3IEBACiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KIC0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQpAQCAtMzgsNyArMzgsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CiAtLSAgVmVyc2lvbiBDb250cm9sOgotLS0gICRSZXZpc2lvbjogMS4xNCAkCistLSAgJFJldmlzaW9uOiAxLjE1ICQKIC0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC01MSwxOCArNTEsMTggQEAKICAgIC0tICBNQU5QQUdFKGBwYW5lbC4zeCcpCiAKICAgIC0tICBBTkNIT1IoYHNldF9wYW5lbF91c2VycHRyJyxgU2V0X1VzZXJfRGF0YScpCi0gICBwcm9jZWR1cmUgU2V0X1VzZXJfRGF0YSAoUGFuICA6IGluIFBhbmVsOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgOiBpbiBVc2VyX0FjY2Vzcyk7CisgICBwcm9jZWR1cmUgU2V0X1VzZXJfRGF0YSAoUGFuICA6IFBhbmVsOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgOiBVc2VyX0FjY2Vzcyk7CiAgICAtLSAgQUtBCiAgICBwcmFnbWEgSW5saW5lIChTZXRfVXNlcl9EYXRhKTsKIAogICAgLS0gIEFOQ0hPUihgcGFuZWxfdXNlcnB0cicsYEdldF9Vc2VyX0RhdGEnKQotICAgcHJvY2VkdXJlIEdldF9Vc2VyX0RhdGEgKFBhbiAgOiBpbiAgUGFuZWw7CisgICBwcm9jZWR1cmUgR2V0X1VzZXJfRGF0YSAoUGFuICA6IFBhbmVsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgOiBvdXQgVXNlcl9BY2Nlc3MpOwogICAgLS0gIEFLQQogCiAgICAtLSAgQU5DSE9SKGBwYW5lbF91c2VycHRyJyxgR2V0X1VzZXJfRGF0YScpCi0gICBmdW5jdGlvbiBHZXRfVXNlcl9EYXRhIChQYW4gIDogaW4gIFBhbmVsKSByZXR1cm4gVXNlcl9BY2Nlc3M7CisgICBmdW5jdGlvbiBHZXRfVXNlcl9EYXRhIChQYW4gIDogUGFuZWwpIHJldHVybiBVc2VyX0FjY2VzczsKICAgIC0tICBBS0EKICAgIC0tICBTYW1lIGFzIGZ1bmN0aW9uCiAgICBwcmFnbWEgSW5saW5lIChHZXRfVXNlcl9EYXRhKTsKZGlmZiAtLWdpdCBhL0FkYTk1L2dlbi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy5hZHMubTQgYi9BZGE5NS9nZW4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMuYWRzLm00CmluZGV4IDM5YjcyNjAuLmIwZWRhNGQgMTAwNjQ0Ci0tLSBhL0FkYTk1L2dlbi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy5hZHMubTQKKysrIGIvQWRhOTUvZ2VuL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLmFkcy5tNApAQCAtMTAsNyArMTAsNyBAQAogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gQ29weXJpZ2h0IChjKSAxOTk4LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwOSwyMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCiAtLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KQEAgLTM4LDE2ICszOCwxNiBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CiAtLSAgVmVyc2lvbiBDb250cm9sOgotLS0gICRSZXZpc2lvbjogMS4xOSAkCi0tLSAgJERhdGU6IDIwMDYvMDYvMjUgMTQ6MzA6MjIgJAorLS0gICRSZXZpc2lvbjogMS4yMiAkCistLSAgJERhdGU6IDIwMTQvMDUvMjQgMjE6MzE6NTcgJAogLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB3aXRoIFN5c3RlbTsKIAogcGFja2FnZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlBhbmVscyBpcwogICAgcHJhZ21hIFByZWVsYWJvcmF0ZSAoVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5QYW5lbHMpOwotaW5jbHVkZShgUGFuZWxfTGlua2VyX09wdGlvbnMnKWRubAotaW5jbHVkZShgTGlua2VyX09wdGlvbnMnKQorICAgcHJhZ21hIExpbmtlcl9PcHRpb25zICgiLWxwYW5lbCIgJiBDdXJzZXNfQ29uc3RhbnRzLkRGVF9BUkdfU1VGRklYKTsKKwogICAgdHlwZSBQYW5lbCBpcyBwcml2YXRlOwogCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTc0LDE3ICs3NCwxNyBAQAogICAgLS0gIHByYWdtYSBJbmxpbmUgKE5ld19QYW5lbCk7CiAKICAgIC0tICBBTkNIT1IoYGJvdHRvbV9wYW5lbCgpJyxgQm90dG9tJykKLSAgIHByb2NlZHVyZSBCb3R0b20gKFBhbiA6IGluIFBhbmVsKTsKKyAgIHByb2NlZHVyZSBCb3R0b20gKFBhbiA6IFBhbmVsKTsKICAgIC0tICBBS0EKICAgIHByYWdtYSBJbmxpbmUgKEJvdHRvbSk7CiAKICAgIC0tICBBTkNIT1IoYHRvcF9wYW5lbCgpJyxgVG9wJykKLSAgIHByb2NlZHVyZSBUb3AgKFBhbiA6IGluIFBhbmVsKTsKKyAgIHByb2NlZHVyZSBUb3AgKFBhbiA6IFBhbmVsKTsKICAgIC0tICBBS0EKICAgIHByYWdtYSBJbmxpbmUgKFRvcCk7CiAKICAgIC0tICBBTkNIT1IoYHNob3dfcGFuZWwoKScsYFNob3cnKQotICAgcHJvY2VkdXJlIFNob3cgKFBhbiA6IGluIFBhbmVsKTsKKyAgIHByb2NlZHVyZSBTaG93IChQYW4gOiBQYW5lbCk7CiAgICAtLSAgQUtBCiAgICBwcmFnbWEgSW5saW5lIChTaG93KTsKIApAQCAtOTQsNyArOTQsNyBAQAogICAgcHJhZ21hIEltcG9ydCAoQywgVXBkYXRlX1BhbmVscywgInVwZGF0ZV9wYW5lbHMiKTsKIAogICAgLS0gIEFOQ0hPUihgaGlkZV9wYW5lbCgpJyxgSGlkZScpCi0gICBwcm9jZWR1cmUgSGlkZSAoUGFuIDogaW4gUGFuZWwpOworICAgcHJvY2VkdXJlIEhpZGUgKFBhbiA6IFBhbmVsKTsKICAgIC0tICBBS0EKICAgIHByYWdtYSBJbmxpbmUgKEhpZGUpOwogCkBAIC0xMDgsMTUgKzEwOCwxNSBAQAogICAgLS0gIHByYWdtYSBJbmxpbmUgKFBhbmVsX1dpbmRvdyk7CiAKICAgIC0tICBBTkNIT1IoYHJlcGxhY2VfcGFuZWwoKScsYFJlcGxhY2UnKQotICAgcHJvY2VkdXJlIFJlcGxhY2UgKFBhbiA6IGluIFBhbmVsOwotICAgICAgICAgICAgICAgICAgICAgIFdpbiA6IGluIFdpbmRvdyk7CisgICBwcm9jZWR1cmUgUmVwbGFjZSAoUGFuIDogUGFuZWw7CisgICAgICAgICAgICAgICAgICAgICAgV2luIDogV2luZG93KTsKICAgIC0tICBBS0EKICAgIHByYWdtYSBJbmxpbmUgKFJlcGxhY2UpOwogCiAgICAtLSAgQU5DSE9SKGBtb3ZlX3BhbmVsKCknLGBNb3ZlJykKLSAgIHByb2NlZHVyZSBNb3ZlIChQYW4gICAgOiBpbiBQYW5lbDsKLSAgICAgICAgICAgICAgICAgICBMaW5lICAgOiBpbiBMaW5lX1Bvc2l0aW9uOwotICAgICAgICAgICAgICAgICAgIENvbHVtbiA6IGluIENvbHVtbl9Qb3NpdGlvbik7CisgICBwcm9jZWR1cmUgTW92ZSAoUGFuICAgIDogUGFuZWw7CisgICAgICAgICAgICAgICAgICAgTGluZSAgIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICBDb2x1bW4gOiBDb2x1bW5fUG9zaXRpb24pOwogICAgLS0gIEFLQQogICAgcHJhZ21hIElubGluZSAoTW92ZSk7CiAKZGlmZiAtLWdpdCBhL0FkYTk1L2dlbi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRyYWNlLmFkcy5tNCBiL0FkYTk1L2dlbi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRyYWNlLmFkcy5tNAppbmRleCA1NDYwMDRmLi5lMjI3MzQzIDEwMDY0NAotLS0gYS9BZGE5NS9nZW4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10cmFjZS5hZHMubTQKKysrIGIvQWRhOTUvZ2VuL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2UuYWRzLm00CkBAIC05LDcgKzksNyBAQAogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gQ29weXJpZ2h0IChjKSAyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIDIwMDAsMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCiAtLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KQEAgLTM3LDE2ICszNyw2MiBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiBFdWdlbmUgVi4gTWVsYXJhZ25vIDxhbGRvbWVsQGl4Lm5ldGNvbS5jb20+IDIwMDAKIC0tICBWZXJzaW9uIENvbnRyb2w6Ci0tLSAgJFJldmlzaW9uOiAxLjEgJAorLS0gICRSZXZpc2lvbjogMS40ICQKIC0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBwYWNrYWdlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVHJhY2UgaXMKICAgIHByYWdtYSBQcmVlbGFib3JhdGUgKFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVHJhY2UpOwogCi0gICBwcmFnbWEgV2FybmluZ3MgKE9mZik7Ci1pbmNsdWRlKGBUcmFjZV9EZWZzJykKKyAgIHR5cGUgVHJhY2VfQXR0cmlidXRlX1NldCBpcworICAgICAgcmVjb3JkCisgICAgICAgICBUaW1lcyAgICAgICAgICAgIDogQm9vbGVhbjsKKyAgICAgICAgIFRwdXRzICAgICAgICAgICAgOiBCb29sZWFuOworICAgICAgICAgVXBkYXRlICAgICAgICAgICA6IEJvb2xlYW47CisgICAgICAgICBDdXJzb3JfTW92ZSAgICAgIDogQm9vbGVhbjsKKyAgICAgICAgIENoYXJhY3Rlcl9PdXRwdXQgOiBCb29sZWFuOworICAgICAgICAgQ2FsbHMgICAgICAgICAgICA6IEJvb2xlYW47CisgICAgICAgICBWaXJ0dWFsX1B1dHMgICAgIDogQm9vbGVhbjsKKyAgICAgICAgIElucHV0X0V2ZW50cyAgICAgOiBCb29sZWFuOworICAgICAgICAgVFRZX1N0YXRlICAgICAgICA6IEJvb2xlYW47CisgICAgICAgICBJbnRlcm5hbF9DYWxscyAgIDogQm9vbGVhbjsKKyAgICAgICAgIENoYXJhY3Rlcl9DYWxscyAgOiBCb29sZWFuOworICAgICAgICAgVGVybWNhcF9UZXJtSW5mbyA6IEJvb2xlYW47CisgICAgICAgICBBdHRyaWJ1dGVfQ29sb3IgIDogQm9vbGVhbjsKKyAgICAgIGVuZCByZWNvcmQ7CisgICBwcmFnbWEgQ29udmVudGlvbiAoQ19QYXNzX0J5X0NvcHksIFRyYWNlX0F0dHJpYnV0ZV9TZXQpOwogCisgICBmb3IgVHJhY2VfQXR0cmlidXRlX1NldCB1c2UKKyAgICAgIHJlY29yZAorICAgICAgICAgVGltZXMgICAgICAgICAgICBhdCAwIHJhbmdlIEN1cnNlc19Db25zdGFudHMuVFJBQ0VfVElNRVNfRmlyc3QKKyAgICAgICAgICAgLi4gQ3Vyc2VzX0NvbnN0YW50cy5UUkFDRV9USU1FU19MYXN0OworICAgICAgICAgVHB1dHMgICAgICAgICAgICBhdCAwIHJhbmdlIEN1cnNlc19Db25zdGFudHMuVFJBQ0VfVFBVVFNfRmlyc3QKKyAgICAgICAgICAgLi4gQ3Vyc2VzX0NvbnN0YW50cy5UUkFDRV9UUFVUU19MYXN0OworICAgICAgICAgVXBkYXRlICAgICAgICAgICBhdCAwIHJhbmdlIEN1cnNlc19Db25zdGFudHMuVFJBQ0VfVVBEQVRFX0ZpcnN0CisgICAgICAgICAgIC4uIEN1cnNlc19Db25zdGFudHMuVFJBQ0VfVVBEQVRFX0xhc3Q7CisgICAgICAgICBDdXJzb3JfTW92ZSAgICAgIGF0IDAgcmFuZ2UgQ3Vyc2VzX0NvbnN0YW50cy5UUkFDRV9NT1ZFX0ZpcnN0CisgICAgICAgICAgIC4uIEN1cnNlc19Db25zdGFudHMuVFJBQ0VfTU9WRV9MYXN0OworICAgICAgICAgQ2hhcmFjdGVyX091dHB1dCBhdCAwIHJhbmdlIEN1cnNlc19Db25zdGFudHMuVFJBQ0VfQ0hBUlBVVF9GaXJzdAorICAgICAgICAgICAuLiBDdXJzZXNfQ29uc3RhbnRzLlRSQUNFX0NIQVJQVVRfTGFzdDsKKyAgICAgICAgIENhbGxzICAgICAgICAgICAgYXQgMCByYW5nZSBDdXJzZXNfQ29uc3RhbnRzLlRSQUNFX0NBTExTX0ZpcnN0CisgICAgICAgICAgIC4uIEN1cnNlc19Db25zdGFudHMuVFJBQ0VfQ0FMTFNfTGFzdDsKKyAgICAgICAgIFZpcnR1YWxfUHV0cyAgICAgYXQgMCByYW5nZSBDdXJzZXNfQ29uc3RhbnRzLlRSQUNFX1ZJUlRQVVRfRmlyc3QKKyAgICAgICAgICAgLi4gQ3Vyc2VzX0NvbnN0YW50cy5UUkFDRV9WSVJUUFVUX0xhc3Q7CisgICAgICAgICBJbnB1dF9FdmVudHMgICAgIGF0IDAgcmFuZ2UgQ3Vyc2VzX0NvbnN0YW50cy5UUkFDRV9JRVZFTlRfRmlyc3QKKyAgICAgICAgICAgLi4gQ3Vyc2VzX0NvbnN0YW50cy5UUkFDRV9JRVZFTlRfTGFzdDsKKyAgICAgICAgIFRUWV9TdGF0ZSAgICAgICAgYXQgMCByYW5nZSBDdXJzZXNfQ29uc3RhbnRzLlRSQUNFX0JJVFNfRmlyc3QKKyAgICAgICAgICAgLi4gQ3Vyc2VzX0NvbnN0YW50cy5UUkFDRV9CSVRTX0xhc3Q7CisgICAgICAgICBJbnRlcm5hbF9DYWxscyAgIGF0IDAgcmFuZ2UgQ3Vyc2VzX0NvbnN0YW50cy5UUkFDRV9JQ0FMTFNfRmlyc3QKKyAgICAgICAgICAgLi4gQ3Vyc2VzX0NvbnN0YW50cy5UUkFDRV9JQ0FMTFNfTGFzdDsKKyAgICAgICAgIENoYXJhY3Rlcl9DYWxscyAgYXQgMCByYW5nZSBDdXJzZXNfQ29uc3RhbnRzLlRSQUNFX0NDQUxMU19GaXJzdAorICAgICAgICAgICAuLiBDdXJzZXNfQ29uc3RhbnRzLlRSQUNFX0NDQUxMU19MYXN0OworICAgICAgICAgVGVybWNhcF9UZXJtSW5mbyBhdCAwIHJhbmdlIEN1cnNlc19Db25zdGFudHMuVFJBQ0VfREFUQUJBU0VfRmlyc3QKKyAgICAgICAgICAgLi4gQ3Vyc2VzX0NvbnN0YW50cy5UUkFDRV9EQVRBQkFTRV9MYXN0OworICAgICAgICAgQXR0cmlidXRlX0NvbG9yICBhdCAwIHJhbmdlIEN1cnNlc19Db25zdGFudHMuVFJBQ0VfQVRUUlNfRmlyc3QKKyAgICAgICAgICAgLi4gQ3Vyc2VzX0NvbnN0YW50cy5UUkFDRV9BVFRSU19MYXN0OworICAgICAgZW5kIHJlY29yZDsKKyAgIHByYWdtYSBXYXJuaW5ncyAoT2ZmKTsKKyAgIGZvciBUcmFjZV9BdHRyaWJ1dGVfU2V0J1NpemUgdXNlIEN1cnNlc19Db25zdGFudHMuVHJhY2VfU2l6ZTsKICAgIHByYWdtYSBXYXJuaW5ncyAoT24pOwogCiAgICBUcmFjZV9EaXNhYmxlICA6IGNvbnN0YW50IFRyYWNlX0F0dHJpYnV0ZV9TZXQgOj0gKG90aGVycyA9PiBGYWxzZSk7CmRpZmYgLS1naXQgYS9BZGE5NS9nZW4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZGIubTQgYi9BZGE5NS9nZW4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZGIubTQKaW5kZXggNzVkZGI5Ni4uYjk4NzgyYiAxMDA2NDQKLS0tIGEvQWRhOTUvZ2VuL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRiLm00CisrKyBiL0FkYTk1L2dlbi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLmFkYi5tNApAQCAtOSw3ICs5LDcgQEAKIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMTEsMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQogLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCkBAIC0zNyw4ICszNyw4IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC0tICBBdXRob3I6IEp1ZXJnZW4gUGZlaWZlciwgMTk5NgogLS0gIFZlcnNpb24gQ29udHJvbDoKLS0tICAkUmV2aXNpb246IDEuNSAkCi0tLSAgJERhdGU6IDIwMDgvMDcvMjYgMTg6NDY6MzIgJAorLS0gICRSZXZpc2lvbjogMS4xNCAkCistLSAgJERhdGU6IDIwMTQvMDUvMjQgMjE6MzE6MDUgJAogLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB3aXRoIFN5c3RlbTsKQEAgLTYxLDcgKzYxLDcgQEAKICAgIHByYWdtYSBDb252ZW50aW9uIChDLCBjaHR5cGVfYXJyYXkpOwogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgIGZ1bmN0aW9uIEtleV9OYW1lIChLZXkgOiBpbiBSZWFsX0tleV9Db2RlKSByZXR1cm4gU3RyaW5nCisgICBmdW5jdGlvbiBLZXlfTmFtZSAoS2V5IDogUmVhbF9LZXlfQ29kZSkgcmV0dXJuIFN0cmluZwogICAgaXMKICAgICAgIGZ1bmN0aW9uIEtleW5hbWUgKEsgOiBDX0ludCkgcmV0dXJuIGNoYXJzX3B0cjsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEtleW5hbWUsICJrZXluYW1lIik7CkBAIC04OSw3ICs4OSw3IEBACiAgICAgICBlbmQgaWY7CiAgICBlbmQgS2V5X05hbWU7CiAKLSAgIHByb2NlZHVyZSBLZXlfTmFtZSAoS2V5ICA6IGluICBSZWFsX0tleV9Db2RlOworICAgcHJvY2VkdXJlIEtleV9OYW1lIChLZXkgIDogIFJlYWxfS2V5X0NvZGU7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgOiBvdXQgU3RyaW5nKQogICAgaXMKICAgIGJlZ2luCkBAIC0xMzIsOSArMTMyLDkgQEAKICAgICAgIGVuZCBpZjsKICAgIGVuZCBJc19FbmRfV2luZG93OwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICBwcm9jZWR1cmUgTW92ZV9DdXJzb3IgKFdpbiAgICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIExpbmUgICA6IGluIExpbmVfUG9zaXRpb247Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIENvbHVtbiA6IGluIENvbHVtbl9Qb3NpdGlvbikKKyAgIHByb2NlZHVyZSBNb3ZlX0N1cnNvciAoV2luICAgIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTGluZSAgIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sdW1uIDogQ29sdW1uX1Bvc2l0aW9uKQogICAgaXMKICAgICAgIGZ1bmN0aW9uIFdtb3ZlIChXaW4gICAgOiBXaW5kb3c7CiAgICAgICAgICAgICAgICAgICAgICAgTGluZSAgIDogQ19JbnQ7CkBAIC0xNDcsMjAgKzE0NywyMCBAQAogICAgICAgZW5kIGlmOwogICAgZW5kIE1vdmVfQ3Vyc29yOwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICBwcm9jZWR1cmUgQWRkIChXaW4gOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OwotICAgICAgICAgICAgICAgICAgQ2ggIDogaW4gQXR0cmlidXRlZF9DaGFyYWN0ZXIpCisgICBwcm9jZWR1cmUgQWRkIChXaW4gOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgICAgICAgICAgICAgQ2ggIDogQXR0cmlidXRlZF9DaGFyYWN0ZXIpCiAgICBpcwogICAgICAgZnVuY3Rpb24gV2FkZGNoIChXICA6IFdpbmRvdzsKLSAgICAgICAgICAgICAgICAgICAgICAgQ2ggOiBDX0NodHlwZSkgcmV0dXJuIENfSW50OworICAgICAgICAgICAgICAgICAgICAgICBDaCA6IEF0dHJpYnV0ZWRfQ2hhcmFjdGVyKSByZXR1cm4gQ19JbnQ7CiAgICAgICBwcmFnbWEgSW1wb3J0IChDLCBXYWRkY2gsICJ3YWRkY2giKTsKICAgIGJlZ2luCi0gICAgICBpZiBXYWRkY2ggKFdpbiwgQXR0ckNoYXJfVG9fQ2h0eXBlIChDaCkpID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICBpZiBXYWRkY2ggKFdpbiwgQ2gpID0gQ3Vyc2VzX0VyciB0aGVuCiAgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOwogICAgICAgZW5kIGlmOwogICAgZW5kIEFkZDsKIAotICAgcHJvY2VkdXJlIEFkZCAoV2luIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKLSAgICAgICAgICAgICAgICAgIENoICA6IGluIENoYXJhY3RlcikKKyAgIHByb2NlZHVyZSBBZGQgKFdpbiA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICAgICAgICAgICAgICBDaCAgOiBDaGFyYWN0ZXIpCiAgICBpcwogICAgYmVnaW4KICAgICAgIEFkZCAoV2luLApAQCAtMTcwLDI5ICsxNzAsMzAgQEAKICAgIGVuZCBBZGQ7CiAKICAgIHByb2NlZHVyZSBBZGQKLSAgICAgKFdpbiAgICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7Ci0gICAgICBMaW5lICAgOiBpbiBMaW5lX1Bvc2l0aW9uOwotICAgICAgQ29sdW1uIDogaW4gQ29sdW1uX1Bvc2l0aW9uOwotICAgICAgQ2ggICAgIDogaW4gQXR0cmlidXRlZF9DaGFyYWN0ZXIpCisgICAgIChXaW4gICAgOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgTGluZSAgIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgIENvbHVtbiA6IENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgIENoICAgICA6IEF0dHJpYnV0ZWRfQ2hhcmFjdGVyKQogICAgaXMKICAgICAgIGZ1bmN0aW9uIG12d2FkZGNoIChXICA6IFdpbmRvdzsKICAgICAgICAgICAgICAgICAgICAgICAgICBZICA6IENfSW50OwogICAgICAgICAgICAgICAgICAgICAgICAgIFggIDogQ19JbnQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgQ2ggOiBDX0NodHlwZSkgcmV0dXJuIENfSW50OworICAgICAgICAgICAgICAgICAgICAgICAgIENoIDogQXR0cmlidXRlZF9DaGFyYWN0ZXIpIHJldHVybiBDX0ludDsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIG12d2FkZGNoLCAibXZ3YWRkY2giKTsKICAgIGJlZ2luCiAgICAgICBpZiBtdndhZGRjaCAoV2luLCBDX0ludCAoTGluZSksCiAgICAgICAgICAgICAgICAgICAgQ19JbnQgKENvbHVtbiksCi0gICAgICAgICAgICAgICAgICAgQXR0ckNoYXJfVG9fQ2h0eXBlIChDaCkpID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICAgICAgICAgICAgQ2gpID0gQ3Vyc2VzX0VycgorICAgICAgdGhlbgogICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKICAgICAgIGVuZCBpZjsKICAgIGVuZCBBZGQ7CiAKICAgIHByb2NlZHVyZSBBZGQKLSAgICAgKFdpbiAgICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7Ci0gICAgICBMaW5lICAgOiBpbiBMaW5lX1Bvc2l0aW9uOwotICAgICAgQ29sdW1uIDogaW4gQ29sdW1uX1Bvc2l0aW9uOwotICAgICAgQ2ggICAgIDogaW4gQ2hhcmFjdGVyKQorICAgICAoV2luICAgIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIExpbmUgICA6IExpbmVfUG9zaXRpb247CisgICAgICBDb2x1bW4gOiBDb2x1bW5fUG9zaXRpb247CisgICAgICBDaCAgICAgOiBDaGFyYWN0ZXIpCiAgICBpcwogICAgYmVnaW4KICAgICAgIEFkZCAoV2luLApAQCAtMjA0LDIxICsyMDUsMjEgQEAKICAgIGVuZCBBZGQ7CiAKICAgIHByb2NlZHVyZSBBZGRfV2l0aF9JbW1lZGlhdGVfRWNobwotICAgICAoV2luIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKLSAgICAgIENoICA6IGluIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyKQorICAgICAoV2luIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIENoICA6IEF0dHJpYnV0ZWRfQ2hhcmFjdGVyKQogICAgaXMKICAgICAgIGZ1bmN0aW9uIFdlY2hvY2hhciAoVyAgOiBXaW5kb3c7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIENoIDogQ19DaHR5cGUpIHJldHVybiBDX0ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2ggOiBBdHRyaWJ1dGVkX0NoYXJhY3RlcikgcmV0dXJuIENfSW50OwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgV2VjaG9jaGFyLCAid2VjaG9jaGFyIik7CiAgICBiZWdpbgotICAgICAgaWYgV2VjaG9jaGFyIChXaW4sIEF0dHJDaGFyX1RvX0NodHlwZSAoQ2gpKSA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgaWYgV2VjaG9jaGFyIChXaW4sIENoKSA9IEN1cnNlc19FcnIgdGhlbgogICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKICAgICAgIGVuZCBpZjsKICAgIGVuZCBBZGRfV2l0aF9JbW1lZGlhdGVfRWNobzsKIAogICAgcHJvY2VkdXJlIEFkZF9XaXRoX0ltbWVkaWF0ZV9FY2hvCi0gICAgIChXaW4gOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OwotICAgICAgQ2ggIDogaW4gQ2hhcmFjdGVyKQorICAgICAoV2luIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIENoICA6IENoYXJhY3RlcikKICAgIGlzCiAgICBiZWdpbgogICAgICAgQWRkX1dpdGhfSW1tZWRpYXRlX0VjaG8KQEAgLTMzMSw5ICszMzIsOSBAQAogICAgICAgcmV0dXJuIFc7CiAgICBlbmQgRHVwbGljYXRlOwogCi0gICBwcm9jZWR1cmUgTW92ZV9XaW5kb3cgKFdpbiAgICA6IGluIFdpbmRvdzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgTGluZSAgIDogaW4gTGluZV9Qb3NpdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sdW1uIDogaW4gQ29sdW1uX1Bvc2l0aW9uKQorICAgcHJvY2VkdXJlIE1vdmVfV2luZG93IChXaW4gICAgOiBXaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICAgICAgIExpbmUgICA6IExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICAgICAgIENvbHVtbiA6IENvbHVtbl9Qb3NpdGlvbikKICAgIGlzCiAgICAgICBmdW5jdGlvbiBNdndpbiAoV2luICAgIDogV2luZG93OwogICAgICAgICAgICAgICAgICAgICAgIExpbmUgICA6IENfSW50OwpAQCAtMzQ1LDkgKzM0Niw5IEBACiAgICAgICBlbmQgaWY7CiAgICBlbmQgTW92ZV9XaW5kb3c7CiAKLSAgIHByb2NlZHVyZSBNb3ZlX0Rlcml2ZWRfV2luZG93IChXaW4gICAgOiBpbiBXaW5kb3c7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGluZSAgIDogaW4gTGluZV9Qb3NpdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2x1bW4gOiBpbiBDb2x1bW5fUG9zaXRpb24pCisgICBwcm9jZWR1cmUgTW92ZV9EZXJpdmVkX1dpbmRvdyAoV2luICAgIDogV2luZG93OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpbmUgICA6IExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sdW1uIDogQ29sdW1uX1Bvc2l0aW9uKQogICAgaXMKICAgICAgIGZ1bmN0aW9uIE12ZGVyd2luIChXaW4gICAgOiBXaW5kb3c7CiAgICAgICAgICAgICAgICAgICAgICAgICAgTGluZSAgIDogQ19JbnQ7CkBAIC0zNTksOCArMzYwLDggQEAKICAgICAgIGVuZCBpZjsKICAgIGVuZCBNb3ZlX0Rlcml2ZWRfV2luZG93OwogCi0gICBwcm9jZWR1cmUgU2V0X1N5bmNoX01vZGUgKFdpbiAgOiBpbiBXaW5kb3cgIDo9IFN0YW5kYXJkX1dpbmRvdzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTW9kZSA6IGluIEJvb2xlYW4gOj0gRmFsc2UpCisgICBwcm9jZWR1cmUgU2V0X1N5bmNoX01vZGUgKFdpbiAgOiBXaW5kb3cgIDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTW9kZSA6IEJvb2xlYW4gOj0gRmFsc2UpCiAgICBpcwogICAgICAgZnVuY3Rpb24gU3luY29rIChXaW4gIDogV2luZG93OwogICAgICAgICAgICAgICAgICAgICAgICBNb2RlIDogQ3Vyc2VzX0Jvb2wpIHJldHVybiBDX0ludDsKQEAgLTM3MSw5ICszNzIsOSBAQAogICAgICAgZW5kIGlmOwogICAgZW5kIFNldF9TeW5jaF9Nb2RlOwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICBwcm9jZWR1cmUgQWRkIChXaW4gOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OwotICAgICAgICAgICAgICAgICAgU3RyIDogaW4gU3RyaW5nOwotICAgICAgICAgICAgICAgICAgTGVuIDogaW4gSW50ZWdlciA6PSAtMSkKKyAgIHByb2NlZHVyZSBBZGQgKFdpbiA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICAgICAgICAgICAgICBTdHIgOiBTdHJpbmc7CisgICAgICAgICAgICAgICAgICBMZW4gOiBJbnRlZ2VyIDo9IC0xKQogICAgaXMKICAgICAgIGZ1bmN0aW9uIFdhZGRuc3RyIChXaW4gOiBXaW5kb3c7CiAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyIDogY2hhcl9hcnJheTsKQEAgLTM5MCwxMSArMzkxLDExIEBACiAgICBlbmQgQWRkOwogCiAgICBwcm9jZWR1cmUgQWRkCi0gICAgIChXaW4gICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OwotICAgICAgTGluZSAgIDogaW4gTGluZV9Qb3NpdGlvbjsKLSAgICAgIENvbHVtbiA6IGluIENvbHVtbl9Qb3NpdGlvbjsKLSAgICAgIFN0ciAgICA6IGluIFN0cmluZzsKLSAgICAgIExlbiAgICA6IGluIEludGVnZXIgOj0gLTEpCisgICAgIChXaW4gICAgOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgTGluZSAgIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgIENvbHVtbiA6IENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgIFN0ciAgICA6IFN0cmluZzsKKyAgICAgIExlbiAgICA6IEludGVnZXIgOj0gLTEpCiAgICBpcwogICAgYmVnaW4KICAgICAgIE1vdmVfQ3Vyc29yIChXaW4sIExpbmUsIENvbHVtbik7CkBAIC00MDIsOSArNDAzLDkgQEAKICAgIGVuZCBBZGQ7CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIHByb2NlZHVyZSBBZGQKLSAgICAgKFdpbiA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7Ci0gICAgICBTdHIgOiBpbiBBdHRyaWJ1dGVkX1N0cmluZzsKLSAgICAgIExlbiA6IGluIEludGVnZXIgOj0gLTEpCisgICAgIChXaW4gOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgU3RyIDogQXR0cmlidXRlZF9TdHJpbmc7CisgICAgICBMZW4gOiBJbnRlZ2VyIDo9IC0xKQogICAgaXMKICAgICAgIGZ1bmN0aW9uIFdhZGRjaG5zdHIgKFdpbiA6IFdpbmRvdzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0ciA6IGNodHlwZV9hcnJheTsKQEAgLTQxOSwxNyArNDIwLDE4IEBACiAgICAgICBUeHQgKFN0cidMZW5ndGgpIDo9IERlZmF1bHRfQ2hhcmFjdGVyOwogICAgICAgaWYgV2FkZGNobnN0ciAoV2luLAogICAgICAgICAgICAgICAgICAgICAgVHh0LAotICAgICAgICAgICAgICAgICAgICAgQ19JbnQgKExlbikpID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICAgICAgICAgICAgICBDX0ludCAoTGVuKSkgPSBDdXJzZXNfRXJyCisgICAgICB0aGVuCiAgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOwogICAgICAgZW5kIGlmOwogICAgZW5kIEFkZDsKIAogICAgcHJvY2VkdXJlIEFkZAotICAgICAoV2luICAgIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKLSAgICAgIExpbmUgICA6IGluIExpbmVfUG9zaXRpb247Ci0gICAgICBDb2x1bW4gOiBpbiBDb2x1bW5fUG9zaXRpb247Ci0gICAgICBTdHIgICAgOiBpbiBBdHRyaWJ1dGVkX1N0cmluZzsKLSAgICAgIExlbiAgICA6IGluIEludGVnZXIgOj0gLTEpCisgICAgIChXaW4gICAgOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgTGluZSAgIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgIENvbHVtbiA6IENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgIFN0ciAgICA6IEF0dHJpYnV0ZWRfU3RyaW5nOworICAgICAgTGVuICAgIDogSW50ZWdlciA6PSAtMSkKICAgIGlzCiAgICBiZWdpbgogICAgICAgTW92ZV9DdXJzb3IgKFdpbiwgTGluZSwgQ29sdW1uKTsKQEAgLTQzNyw0NiArNDM5LDQ1IEBACiAgICBlbmQgQWRkOwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBwcm9jZWR1cmUgQm9yZGVyCi0gICAgIChXaW4gICAgICAgICAgICAgICAgICAgICAgIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKLSAgICAgIExlZnRfU2lkZV9TeW1ib2wgICAgICAgICAgOiBpbiBBdHRyaWJ1dGVkX0NoYXJhY3RlciA6PSBEZWZhdWx0X0NoYXJhY3RlcjsKLSAgICAgIFJpZ2h0X1NpZGVfU3ltYm9sICAgICAgICAgOiBpbiBBdHRyaWJ1dGVkX0NoYXJhY3RlciA6PSBEZWZhdWx0X0NoYXJhY3RlcjsKLSAgICAgIFRvcF9TaWRlX1N5bWJvbCAgICAgICAgICAgOiBpbiBBdHRyaWJ1dGVkX0NoYXJhY3RlciA6PSBEZWZhdWx0X0NoYXJhY3RlcjsKLSAgICAgIEJvdHRvbV9TaWRlX1N5bWJvbCAgICAgICAgOiBpbiBBdHRyaWJ1dGVkX0NoYXJhY3RlciA6PSBEZWZhdWx0X0NoYXJhY3RlcjsKLSAgICAgIFVwcGVyX0xlZnRfQ29ybmVyX1N5bWJvbCAgOiBpbiBBdHRyaWJ1dGVkX0NoYXJhY3RlciA6PSBEZWZhdWx0X0NoYXJhY3RlcjsKLSAgICAgIFVwcGVyX1JpZ2h0X0Nvcm5lcl9TeW1ib2wgOiBpbiBBdHRyaWJ1dGVkX0NoYXJhY3RlciA6PSBEZWZhdWx0X0NoYXJhY3RlcjsKLSAgICAgIExvd2VyX0xlZnRfQ29ybmVyX1N5bWJvbCAgOiBpbiBBdHRyaWJ1dGVkX0NoYXJhY3RlciA6PSBEZWZhdWx0X0NoYXJhY3RlcjsKLSAgICAgIExvd2VyX1JpZ2h0X0Nvcm5lcl9TeW1ib2wgOiBpbiBBdHRyaWJ1dGVkX0NoYXJhY3RlciA6PSBEZWZhdWx0X0NoYXJhY3RlcikKKyAgICAgKFdpbiAgICAgICAgICAgICAgICAgICAgICAgOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgTGVmdF9TaWRlX1N5bWJvbCAgICAgICAgICA6IEF0dHJpYnV0ZWRfQ2hhcmFjdGVyIDo9IERlZmF1bHRfQ2hhcmFjdGVyOworICAgICAgUmlnaHRfU2lkZV9TeW1ib2wgICAgICAgICA6IEF0dHJpYnV0ZWRfQ2hhcmFjdGVyIDo9IERlZmF1bHRfQ2hhcmFjdGVyOworICAgICAgVG9wX1NpZGVfU3ltYm9sICAgICAgICAgICA6IEF0dHJpYnV0ZWRfQ2hhcmFjdGVyIDo9IERlZmF1bHRfQ2hhcmFjdGVyOworICAgICAgQm90dG9tX1NpZGVfU3ltYm9sICAgICAgICA6IEF0dHJpYnV0ZWRfQ2hhcmFjdGVyIDo9IERlZmF1bHRfQ2hhcmFjdGVyOworICAgICAgVXBwZXJfTGVmdF9Db3JuZXJfU3ltYm9sICA6IEF0dHJpYnV0ZWRfQ2hhcmFjdGVyIDo9IERlZmF1bHRfQ2hhcmFjdGVyOworICAgICAgVXBwZXJfUmlnaHRfQ29ybmVyX1N5bWJvbCA6IEF0dHJpYnV0ZWRfQ2hhcmFjdGVyIDo9IERlZmF1bHRfQ2hhcmFjdGVyOworICAgICAgTG93ZXJfTGVmdF9Db3JuZXJfU3ltYm9sICA6IEF0dHJpYnV0ZWRfQ2hhcmFjdGVyIDo9IERlZmF1bHRfQ2hhcmFjdGVyOworICAgICAgTG93ZXJfUmlnaHRfQ29ybmVyX1N5bWJvbCA6IEF0dHJpYnV0ZWRfQ2hhcmFjdGVyIDo9IERlZmF1bHRfQ2hhcmFjdGVyKQogICAgaXMKICAgICAgIGZ1bmN0aW9uIFdib3JkZXIgKFcgICA6IFdpbmRvdzsKLSAgICAgICAgICAgICAgICAgICAgICAgIExTICA6IENfQ2h0eXBlOwotICAgICAgICAgICAgICAgICAgICAgICAgUlMgIDogQ19DaHR5cGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBUUyAgOiBDX0NodHlwZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEJTICA6IENfQ2h0eXBlOwotICAgICAgICAgICAgICAgICAgICAgICAgVUxDIDogQ19DaHR5cGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBVUkMgOiBDX0NodHlwZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIExMQyA6IENfQ2h0eXBlOwotICAgICAgICAgICAgICAgICAgICAgICAgTFJDIDogQ19DaHR5cGUpIHJldHVybiBDX0ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgIExTICA6IEF0dHJpYnV0ZWRfQ2hhcmFjdGVyOworICAgICAgICAgICAgICAgICAgICAgICAgUlMgIDogQXR0cmlidXRlZF9DaGFyYWN0ZXI7CisgICAgICAgICAgICAgICAgICAgICAgICBUUyAgOiBBdHRyaWJ1dGVkX0NoYXJhY3RlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIEJTICA6IEF0dHJpYnV0ZWRfQ2hhcmFjdGVyOworICAgICAgICAgICAgICAgICAgICAgICAgVUxDIDogQXR0cmlidXRlZF9DaGFyYWN0ZXI7CisgICAgICAgICAgICAgICAgICAgICAgICBVUkMgOiBBdHRyaWJ1dGVkX0NoYXJhY3RlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIExMQyA6IEF0dHJpYnV0ZWRfQ2hhcmFjdGVyOworICAgICAgICAgICAgICAgICAgICAgICAgTFJDIDogQXR0cmlidXRlZF9DaGFyYWN0ZXIpIHJldHVybiBDX0ludDsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFdib3JkZXIsICJ3Ym9yZGVyIik7CiAgICBiZWdpbgogICAgICAgaWYgV2JvcmRlciAoV2luLAotICAgICAgICAgICAgICAgICAgQXR0ckNoYXJfVG9fQ2h0eXBlIChMZWZ0X1NpZGVfU3ltYm9sKSwKLSAgICAgICAgICAgICAgICAgIEF0dHJDaGFyX1RvX0NodHlwZSAoUmlnaHRfU2lkZV9TeW1ib2wpLAotICAgICAgICAgICAgICAgICAgQXR0ckNoYXJfVG9fQ2h0eXBlIChUb3BfU2lkZV9TeW1ib2wpLAotICAgICAgICAgICAgICAgICAgQXR0ckNoYXJfVG9fQ2h0eXBlIChCb3R0b21fU2lkZV9TeW1ib2wpLAotICAgICAgICAgICAgICAgICAgQXR0ckNoYXJfVG9fQ2h0eXBlIChVcHBlcl9MZWZ0X0Nvcm5lcl9TeW1ib2wpLAotICAgICAgICAgICAgICAgICAgQXR0ckNoYXJfVG9fQ2h0eXBlIChVcHBlcl9SaWdodF9Db3JuZXJfU3ltYm9sKSwKLSAgICAgICAgICAgICAgICAgIEF0dHJDaGFyX1RvX0NodHlwZSAoTG93ZXJfTGVmdF9Db3JuZXJfU3ltYm9sKSwKLSAgICAgICAgICAgICAgICAgIEF0dHJDaGFyX1RvX0NodHlwZSAoTG93ZXJfUmlnaHRfQ29ybmVyX1N5bWJvbCkKLSAgICAgICAgICAgICAgICAgICkgPSBDdXJzZXNfRXJyCisgICAgICAgICAgICAgICAgICBMZWZ0X1NpZGVfU3ltYm9sLAorICAgICAgICAgICAgICAgICAgUmlnaHRfU2lkZV9TeW1ib2wsCisgICAgICAgICAgICAgICAgICBUb3BfU2lkZV9TeW1ib2wsCisgICAgICAgICAgICAgICAgICBCb3R0b21fU2lkZV9TeW1ib2wsCisgICAgICAgICAgICAgICAgICBVcHBlcl9MZWZ0X0Nvcm5lcl9TeW1ib2wsCisgICAgICAgICAgICAgICAgICBVcHBlcl9SaWdodF9Db3JuZXJfU3ltYm9sLAorICAgICAgICAgICAgICAgICAgTG93ZXJfTGVmdF9Db3JuZXJfU3ltYm9sLAorICAgICAgICAgICAgICAgICAgTG93ZXJfUmlnaHRfQ29ybmVyX1N5bWJvbCkgPSBDdXJzZXNfRXJyCiAgICAgICB0aGVuCiAgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOwogICAgICAgZW5kIGlmOwogICAgZW5kIEJvcmRlcjsKIAogICAgcHJvY2VkdXJlIEJveAotICAgICAoV2luICAgICAgICAgICAgICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OwotICAgICAgVmVydGljYWxfU3ltYm9sICAgOiBpbiBBdHRyaWJ1dGVkX0NoYXJhY3RlciA6PSBEZWZhdWx0X0NoYXJhY3RlcjsKLSAgICAgIEhvcml6b250YWxfU3ltYm9sIDogaW4gQXR0cmlidXRlZF9DaGFyYWN0ZXIgOj0gRGVmYXVsdF9DaGFyYWN0ZXIpCisgICAgIChXaW4gICAgICAgICAgICAgICA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBWZXJ0aWNhbF9TeW1ib2wgICA6IEF0dHJpYnV0ZWRfQ2hhcmFjdGVyIDo9IERlZmF1bHRfQ2hhcmFjdGVyOworICAgICAgSG9yaXpvbnRhbF9TeW1ib2wgOiBBdHRyaWJ1dGVkX0NoYXJhY3RlciA6PSBEZWZhdWx0X0NoYXJhY3RlcikKICAgIGlzCiAgICBiZWdpbgogICAgICAgQm9yZGVyIChXaW4sCkBAIC00ODUsMzUgKzQ4NiwzNyBAQAogICAgZW5kIEJveDsKIAogICAgcHJvY2VkdXJlIEhvcml6b250YWxfTGluZQotICAgICAoV2luICAgICAgICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OwotICAgICAgTGluZV9TaXplICAgOiBpbiBOYXR1cmFsOwotICAgICAgTGluZV9TeW1ib2wgOiBpbiBBdHRyaWJ1dGVkX0NoYXJhY3RlciA6PSBEZWZhdWx0X0NoYXJhY3RlcikKKyAgICAgKFdpbiAgICAgICAgIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIExpbmVfU2l6ZSAgIDogTmF0dXJhbDsKKyAgICAgIExpbmVfU3ltYm9sIDogQXR0cmlidXRlZF9DaGFyYWN0ZXIgOj0gRGVmYXVsdF9DaGFyYWN0ZXIpCiAgICBpcwogICAgICAgZnVuY3Rpb24gV2hsaW5lIChXICAgOiBXaW5kb3c7Ci0gICAgICAgICAgICAgICAgICAgICAgIENoICA6IENfQ2h0eXBlOworICAgICAgICAgICAgICAgICAgICAgICBDaCAgOiBBdHRyaWJ1dGVkX0NoYXJhY3RlcjsKICAgICAgICAgICAgICAgICAgICAgICAgTGVuIDogQ19JbnQpIHJldHVybiBDX0ludDsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFdobGluZSwgIndobGluZSIpOwogICAgYmVnaW4KICAgICAgIGlmIFdobGluZSAoV2luLAotICAgICAgICAgICAgICAgICBBdHRyQ2hhcl9Ub19DaHR5cGUgKExpbmVfU3ltYm9sKSwKLSAgICAgICAgICAgICAgICAgQ19JbnQgKExpbmVfU2l6ZSkpID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICAgICAgICAgIExpbmVfU3ltYm9sLAorICAgICAgICAgICAgICAgICBDX0ludCAoTGluZV9TaXplKSkgPSBDdXJzZXNfRXJyCisgICAgICB0aGVuCiAgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOwogICAgICAgZW5kIGlmOwogICAgZW5kIEhvcml6b250YWxfTGluZTsKIAogICAgcHJvY2VkdXJlIFZlcnRpY2FsX0xpbmUKLSAgICAgKFdpbiAgICAgICAgIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKLSAgICAgIExpbmVfU2l6ZSAgIDogaW4gTmF0dXJhbDsKLSAgICAgIExpbmVfU3ltYm9sIDogaW4gQXR0cmlidXRlZF9DaGFyYWN0ZXIgOj0gRGVmYXVsdF9DaGFyYWN0ZXIpCisgICAgIChXaW4gICAgICAgICA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBMaW5lX1NpemUgICA6IE5hdHVyYWw7CisgICAgICBMaW5lX1N5bWJvbCA6IEF0dHJpYnV0ZWRfQ2hhcmFjdGVyIDo9IERlZmF1bHRfQ2hhcmFjdGVyKQogICAgaXMKICAgICAgIGZ1bmN0aW9uIFd2bGluZSAoVyAgIDogV2luZG93OwotICAgICAgICAgICAgICAgICAgICAgICBDaCAgOiBDX0NodHlwZTsKKyAgICAgICAgICAgICAgICAgICAgICAgQ2ggIDogQXR0cmlidXRlZF9DaGFyYWN0ZXI7CiAgICAgICAgICAgICAgICAgICAgICAgIExlbiA6IENfSW50KSByZXR1cm4gQ19JbnQ7CiAgICAgICBwcmFnbWEgSW1wb3J0IChDLCBXdmxpbmUsICJ3dmxpbmUiKTsKICAgIGJlZ2luCiAgICAgICBpZiBXdmxpbmUgKFdpbiwKLSAgICAgICAgICAgICAgICAgQXR0ckNoYXJfVG9fQ2h0eXBlIChMaW5lX1N5bWJvbCksCi0gICAgICAgICAgICAgICAgIENfSW50IChMaW5lX1NpemUpKSA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgICAgICAgICBMaW5lX1N5bWJvbCwKKyAgICAgICAgICAgICAgICAgQ19JbnQgKExpbmVfU2l6ZSkpID0gQ3Vyc2VzX0VycgorICAgICAgdGhlbgogICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKICAgICAgIGVuZCBpZjsKICAgIGVuZCBWZXJ0aWNhbF9MaW5lOwpAQCAtNTM0LDcgKzUzNyw3IEBACiAgICAgICBlbmQgaWY7CiAgICBlbmQgR2V0X0tleXN0cm9rZTsKIAotICAgcHJvY2VkdXJlIFVuZG9fS2V5c3Ryb2tlIChLZXkgOiBpbiBSZWFsX0tleV9Db2RlKQorICAgcHJvY2VkdXJlIFVuZG9fS2V5c3Ryb2tlIChLZXkgOiBSZWFsX0tleV9Db2RlKQogICAgaXMKICAgICAgIGZ1bmN0aW9uIFVuZ2V0Y2ggKENoIDogQ19JbnQpIHJldHVybiBDX0ludDsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFVuZ2V0Y2gsICJ1bmdldGNoIik7CkBAIC02MDYsMTUgKzYwOSwxNSBAQAogICAgZW5kIFN0YW5kb3V0OwogCiAgICBwcm9jZWR1cmUgU3dpdGNoX0NoYXJhY3Rlcl9BdHRyaWJ1dGUKLSAgICAgKFdpbiAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OwotICAgICAgQXR0ciA6IGluIENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0IDo9IE5vcm1hbF9WaWRlbzsKLSAgICAgIE9uICAgOiBpbiBCb29sZWFuIDo9IFRydWUpCisgICAgIChXaW4gIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIEF0dHIgOiBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldCA6PSBOb3JtYWxfVmlkZW87CisgICAgICBPbiAgIDogQm9vbGVhbiA6PSBUcnVlKQogICAgaXMKICAgICAgIGZ1bmN0aW9uIFdhdHRyb24gKFdpbiAgICA6IFdpbmRvdzsKLSAgICAgICAgICAgICAgICAgICAgICAgIENfQXR0ciA6IENfQXR0clR5cGUpIHJldHVybiBDX0ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgIENfQXR0ciA6IEF0dHJpYnV0ZWRfQ2hhcmFjdGVyKSByZXR1cm4gQ19JbnQ7CiAgICAgICBwcmFnbWEgSW1wb3J0IChDLCBXYXR0cm9uLCAid2F0dHJfb24iKTsKICAgICAgIGZ1bmN0aW9uIFdhdHRyb2ZmIChXaW4gICAgOiBXaW5kb3c7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgQ19BdHRyIDogQ19BdHRyVHlwZSkgcmV0dXJuIENfSW50OworICAgICAgICAgICAgICAgICAgICAgICAgIENfQXR0ciA6IEF0dHJpYnV0ZWRfQ2hhcmFjdGVyKSByZXR1cm4gQ19JbnQ7CiAgICAgICBwcmFnbWEgSW1wb3J0IChDLCBXYXR0cm9mZiwgIndhdHRyX29mZiIpOwogICAgICAgLS0gIEluIEFkYSB3ZSB1c2UgdGhlIE9uIEJvb2xlYW4gdG8gY29udHJvbCB3aGV0aGVyIG9yIG5vdCB3ZSB3YW50IHRvCiAgICAgICAtLSAgc3dpdGNoIG9uIG9yIG9mZiB0aGUgYXR0cmlidXRlcyBpbiB0aGUgc2V0LgpAQCAtNjI0LDkgKzYyNyw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ciAgPT4gQXR0cik7CiAgICBiZWdpbgogICAgICAgaWYgT24gdGhlbgotICAgICAgICAgRXJyIDo9IFdhdHRyb24gIChXaW4sIEF0dHJDaGFyX1RvX0F0dHJUeXBlIChBQykpOworICAgICAgICAgRXJyIDo9IFdhdHRyb24gIChXaW4sIEFDKTsKICAgICAgIGVsc2UKLSAgICAgICAgIEVyciA6PSBXYXR0cm9mZiAoV2luLCBBdHRyQ2hhcl9Ub19BdHRyVHlwZSAoQUMpKTsKKyAgICAgICAgIEVyciA6PSBXYXR0cm9mZiAoV2luLCBBQyk7CiAgICAgICBlbmQgaWY7CiAgICAgICBpZiBFcnIgPSBDdXJzZXNfRXJyIHRoZW4KICAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CkBAIC02MzQsMTkgKzYzNywxOCBAQAogICAgZW5kIFN3aXRjaF9DaGFyYWN0ZXJfQXR0cmlidXRlOwogCiAgICBwcm9jZWR1cmUgU2V0X0NoYXJhY3Rlcl9BdHRyaWJ1dGVzCi0gICAgIChXaW4gICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7Ci0gICAgICBBdHRyICA6IGluIENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0IDo9IE5vcm1hbF9WaWRlbzsKLSAgICAgIENvbG9yIDogaW4gQ29sb3JfUGFpciA6PSBDb2xvcl9QYWlyJ0ZpcnN0KQorICAgICAoV2luICAgOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgQXR0ciAgOiBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldCA6PSBOb3JtYWxfVmlkZW87CisgICAgICBDb2xvciA6IENvbG9yX1BhaXIgOj0gQ29sb3JfUGFpcidGaXJzdCkKICAgIGlzCiAgICAgICBmdW5jdGlvbiBXYXR0cnNldCAoV2luICAgIDogV2luZG93OwotICAgICAgICAgICAgICAgICAgICAgICAgIENfQXR0ciA6IENfQXR0clR5cGUpIHJldHVybiBDX0ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBDX0F0dHIgOiBBdHRyaWJ1dGVkX0NoYXJhY3RlcikgcmV0dXJuIENfSW50OwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgV2F0dHJzZXQsICJ3YXR0cnNldCIpOyAtLSA/Pz8gd2F0dHJfc2V0CiAgICBiZWdpbgotICAgICAgaWYgV2F0dHJzZXQgKFdpbiwKLSAgICAgICAgICAgICAgICAgICBBdHRyQ2hhcl9Ub19BdHRyVHlwZSAoQXR0cmlidXRlZF9DaGFyYWN0ZXInCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChDaCAgICA9PiBDaGFyYWN0ZXInRmlyc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvciA9PiBDb2xvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHIgID0+IEF0dHIpKSkgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgIGlmIFdhdHRyc2V0IChXaW4sIChDaCA9PiBDaGFyYWN0ZXInRmlyc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3IgPT4gQ29sb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ciA9PiBBdHRyKSkgPSBDdXJzZXNfRXJyCisgICAgICB0aGVuCiAgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOwogICAgICAgZW5kIGlmOwogICAgZW5kIFNldF9DaGFyYWN0ZXJfQXR0cmlidXRlczsKQEAgLTY1NSwyMCArNjU3LDE4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0CiAgICBpcwogICAgICAgZnVuY3Rpb24gV2F0dHJnZXQgKFdpbiA6IFdpbmRvdzsKLSAgICAgICAgICAgICAgICAgICAgICAgICBBdHIgOiBhY2Nlc3MgQ19BdHRyVHlwZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBBdHIgOiBhY2Nlc3MgQXR0cmlidXRlZF9DaGFyYWN0ZXI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sIDogYWNjZXNzIENfU2hvcnQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0IDogU3lzdGVtLkFkZHJlc3MpIHJldHVybiBDX0ludDsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFdhdHRyZ2V0LCAid2F0dHJfZ2V0Iik7CiAKLSAgICAgIEF0dHIgOiBhbGlhc2VkIENfQXR0clR5cGU7CisgICAgICBBdHRyIDogYWxpYXNlZCBBdHRyaWJ1dGVkX0NoYXJhY3RlcjsKICAgICAgIENvbCAgOiBhbGlhc2VkIENfU2hvcnQ7CiAgICAgICBSZXMgIDogY29uc3RhbnQgQ19JbnQgOj0gV2F0dHJnZXQgKFdpbiwgQXR0cidBY2Nlc3MsIENvbCdBY2Nlc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5OdWxsX0FkZHJlc3MpOwotICAgICAgQ2ggICA6IEF0dHJpYnV0ZWRfQ2hhcmFjdGVyOwogICAgYmVnaW4KICAgICAgIGlmIFJlcyA9IEN1cnNlc19PayB0aGVuCi0gICAgICAgICBDaCA6PSBBdHRyVHlwZV9Ub19BdHRyQ2hhciAoQXR0cik7Ci0gICAgICAgICByZXR1cm4gQ2guQXR0cjsKKyAgICAgICAgIHJldHVybiBBdHRyLkF0dHI7CiAgICAgICBlbHNlCiAgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOwogICAgICAgZW5kIGlmOwpAQCAtNjc4LDI3ICs2NzgsMjUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ29sb3JfUGFpcgogICAgaXMKICAgICAgIGZ1bmN0aW9uIFdhdHRyZ2V0IChXaW4gOiBXaW5kb3c7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgQXRyIDogYWNjZXNzIENfQXR0clR5cGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgQXRyIDogYWNjZXNzIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyOwogICAgICAgICAgICAgICAgICAgICAgICAgIENvbCA6IGFjY2VzcyBDX1Nob3J0OwogICAgICAgICAgICAgICAgICAgICAgICAgIE9wdCA6IFN5c3RlbS5BZGRyZXNzKSByZXR1cm4gQ19JbnQ7CiAgICAgICBwcmFnbWEgSW1wb3J0IChDLCBXYXR0cmdldCwgIndhdHRyX2dldCIpOwogCi0gICAgICBBdHRyIDogYWxpYXNlZCBDX0F0dHJUeXBlOworICAgICAgQXR0ciA6IGFsaWFzZWQgQXR0cmlidXRlZF9DaGFyYWN0ZXI7CiAgICAgICBDb2wgIDogYWxpYXNlZCBDX1Nob3J0OwogICAgICAgUmVzICA6IGNvbnN0YW50IENfSW50IDo9IFdhdHRyZ2V0IChXaW4sIEF0dHInQWNjZXNzLCBDb2wnQWNjZXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uTnVsbF9BZGRyZXNzKTsKLSAgICAgIENoICAgOiBBdHRyaWJ1dGVkX0NoYXJhY3RlcjsKICAgIGJlZ2luCiAgICAgICBpZiBSZXMgPSBDdXJzZXNfT2sgdGhlbgotICAgICAgICAgQ2ggOj0gQXR0clR5cGVfVG9fQXR0ckNoYXIgKEF0dHIpOwotICAgICAgICAgcmV0dXJuIENoLkNvbG9yOworICAgICAgICAgcmV0dXJuIEF0dHIuQ29sb3I7CiAgICAgICBlbHNlCiAgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOwogICAgICAgZW5kIGlmOwogICAgZW5kIEdldF9DaGFyYWN0ZXJfQXR0cmlidXRlOwogCi0gICBwcm9jZWR1cmUgU2V0X0NvbG9yIChXaW4gIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKLSAgICAgICAgICAgICAgICAgICAgICAgIFBhaXIgOiBpbiBDb2xvcl9QYWlyKQorICAgcHJvY2VkdXJlIFNldF9Db2xvciAoV2luICA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICAgICBQYWlyIDogQ29sb3JfUGFpcikKICAgIGlzCiAgICAgICBmdW5jdGlvbiBXc2V0X0NvbG9yIChXaW4gICA6IFdpbmRvdzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yIDogQ19TaG9ydDsKQEAgLTcwNyw0MSArNzA1LDQ0IEBACiAgICBiZWdpbgogICAgICAgaWYgV3NldF9Db2xvciAoV2luLAogICAgICAgICAgICAgICAgICAgICAgQ19TaG9ydCAoUGFpciksCi0gICAgICAgICAgICAgICAgICAgICBDX1ZvaWRfUHRyIChTeXN0ZW0uTnVsbF9BZGRyZXNzKSkgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgIENfVm9pZF9QdHIgKFN5c3RlbS5OdWxsX0FkZHJlc3MpKSA9IEN1cnNlc19FcnIKKyAgICAgIHRoZW4KICAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CiAgICAgICBlbmQgaWY7CiAgICBlbmQgU2V0X0NvbG9yOwogCiAgICBwcm9jZWR1cmUgQ2hhbmdlX0F0dHJpYnV0ZXMKLSAgICAgKFdpbiAgIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKLSAgICAgIENvdW50IDogaW4gSW50ZWdlciA6PSAtMTsKLSAgICAgIEF0dHIgIDogaW4gQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQgOj0gTm9ybWFsX1ZpZGVvOwotICAgICAgQ29sb3IgOiBpbiBDb2xvcl9QYWlyIDo9IENvbG9yX1BhaXInRmlyc3QpCisgICAgIChXaW4gICA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBDb3VudCA6IEludGVnZXIgOj0gLTE7CisgICAgICBBdHRyICA6IENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0IDo9IE5vcm1hbF9WaWRlbzsKKyAgICAgIENvbG9yIDogQ29sb3JfUGFpciA6PSBDb2xvcl9QYWlyJ0ZpcnN0KQogICAgaXMKICAgICAgIGZ1bmN0aW9uIFdjaGdhdCAoV2luICAgOiBXaW5kb3c7CiAgICAgICAgICAgICAgICAgICAgICAgIENudCAgIDogQ19JbnQ7Ci0gICAgICAgICAgICAgICAgICAgICAgIEF0dHIgIDogQ19BdHRyVHlwZTsKKyAgICAgICAgICAgICAgICAgICAgICAgQXR0ciAgOiBBdHRyaWJ1dGVkX0NoYXJhY3RlcjsKICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3IgOiBDX1Nob3J0OwogICAgICAgICAgICAgICAgICAgICAgICBPcHRzICA6IFN5c3RlbS5BZGRyZXNzIDo9IFN5c3RlbS5OdWxsX0FkZHJlc3MpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDX0ludDsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFdjaGdhdCwgIndjaGdhdCIpOwotCi0gICAgICBDaCA6IGNvbnN0YW50IEF0dHJpYnV0ZWRfQ2hhcmFjdGVyIDo9Ci0gICAgICAgIChDaCA9PiBDaGFyYWN0ZXInRmlyc3QsIENvbG9yID0+IENvbG9yX1BhaXInRmlyc3QsIEF0dHIgPT4gQXR0cik7CiAgICBiZWdpbgotICAgICAgaWYgV2NoZ2F0IChXaW4sIENfSW50IChDb3VudCksIEF0dHJDaGFyX1RvX0F0dHJUeXBlIChDaCksCi0gICAgICAgICAgICAgICAgIENfU2hvcnQgKENvbG9yKSkgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgIGlmIFdjaGdhdCAoV2luLAorICAgICAgICAgICAgICAgICBDX0ludCAoQ291bnQpLAorICAgICAgICAgICAgICAgICAoQ2ggPT4gQ2hhcmFjdGVyJ0ZpcnN0LAorICAgICAgICAgICAgICAgICAgQ29sb3IgPT4gQ29sb3JfUGFpcidGaXJzdCwKKyAgICAgICAgICAgICAgICAgIEF0dHIgPT4gQXR0ciksCisgICAgICAgICAgICAgICAgIENfU2hvcnQgKENvbG9yKSkgPSBDdXJzZXNfRXJyCisgICAgICB0aGVuCiAgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOwogICAgICAgZW5kIGlmOwogICAgZW5kIENoYW5nZV9BdHRyaWJ1dGVzOwogCiAgICBwcm9jZWR1cmUgQ2hhbmdlX0F0dHJpYnV0ZXMKLSAgICAgKFdpbiAgICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7Ci0gICAgICBMaW5lICAgOiBpbiBMaW5lX1Bvc2l0aW9uIDo9IExpbmVfUG9zaXRpb24nRmlyc3Q7Ci0gICAgICBDb2x1bW4gOiBpbiBDb2x1bW5fUG9zaXRpb24gOj0gQ29sdW1uX1Bvc2l0aW9uJ0ZpcnN0OwotICAgICAgQ291bnQgIDogaW4gSW50ZWdlciA6PSAtMTsKLSAgICAgIEF0dHIgICA6IGluIENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0IDo9IE5vcm1hbF9WaWRlbzsKLSAgICAgIENvbG9yICA6IGluIENvbG9yX1BhaXIgOj0gQ29sb3JfUGFpcidGaXJzdCkKKyAgICAgKFdpbiAgICA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBMaW5lICAgOiBMaW5lX1Bvc2l0aW9uIDo9IExpbmVfUG9zaXRpb24nRmlyc3Q7CisgICAgICBDb2x1bW4gOiBDb2x1bW5fUG9zaXRpb24gOj0gQ29sdW1uX1Bvc2l0aW9uJ0ZpcnN0OworICAgICAgQ291bnQgIDogSW50ZWdlciA6PSAtMTsKKyAgICAgIEF0dHIgICA6IENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0IDo9IE5vcm1hbF9WaWRlbzsKKyAgICAgIENvbG9yICA6IENvbG9yX1BhaXIgOj0gQ29sb3JfUGFpcidGaXJzdCkKICAgIGlzCiAgICBiZWdpbgogICAgICAgTW92ZV9DdXJzb3IgKFdpbiwgTGluZSwgQ29sdW1uKTsKQEAgLTc2OCw3ICs3NjksNyBAQAogICAgICAgZW5kIGlmOwogICAgZW5kIEZsYXNoX1NjcmVlbjsKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgcHJvY2VkdXJlIFNldF9DYnJlYWtfTW9kZSAoU3dpdGNoT24gOiBpbiBCb29sZWFuIDo9IFRydWUpCisgICBwcm9jZWR1cmUgU2V0X0NicmVha19Nb2RlIChTd2l0Y2hPbiA6IEJvb2xlYW4gOj0gVHJ1ZSkKICAgIGlzCiAgICAgICBmdW5jdGlvbiBDYnJlYWsgcmV0dXJuIENfSW50OwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgQ2JyZWFrLCAiY2JyZWFrIik7CkBAIC03ODcsNyArNzg4LDcgQEAKICAgICAgIGVuZCBpZjsKICAgIGVuZCBTZXRfQ2JyZWFrX01vZGU7CiAKLSAgIHByb2NlZHVyZSBTZXRfUmF3X01vZGUgKFN3aXRjaE9uIDogaW4gQm9vbGVhbiA6PSBUcnVlKQorICAgcHJvY2VkdXJlIFNldF9SYXdfTW9kZSAoU3dpdGNoT24gOiBCb29sZWFuIDo9IFRydWUpCiAgICBpcwogICAgICAgZnVuY3Rpb24gUmF3IHJldHVybiBDX0ludDsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFJhdywgInJhdyIpOwpAQCAtODA2LDcgKzgwNyw3IEBACiAgICAgICBlbmQgaWY7CiAgICBlbmQgU2V0X1Jhd19Nb2RlOwogCi0gICBwcm9jZWR1cmUgU2V0X0VjaG9fTW9kZSAoU3dpdGNoT24gOiBpbiBCb29sZWFuIDo9IFRydWUpCisgICBwcm9jZWR1cmUgU2V0X0VjaG9fTW9kZSAoU3dpdGNoT24gOiBCb29sZWFuIDo9IFRydWUpCiAgICBpcwogICAgICAgZnVuY3Rpb24gRWNobyByZXR1cm4gQ19JbnQ7CiAgICAgICBwcmFnbWEgSW1wb3J0IChDLCBFY2hvLCAiZWNobyIpOwpAQCAtODI1LDggKzgyNiw4IEBACiAgICAgICBlbmQgaWY7CiAgICBlbmQgU2V0X0VjaG9fTW9kZTsKIAotICAgcHJvY2VkdXJlIFNldF9NZXRhX01vZGUgKFdpbiAgICAgIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTd2l0Y2hPbiA6IGluIEJvb2xlYW4gOj0gVHJ1ZSkKKyAgIHByb2NlZHVyZSBTZXRfTWV0YV9Nb2RlIChXaW4gICAgICA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3dpdGNoT24gOiBCb29sZWFuIDo9IFRydWUpCiAgICBpcwogICAgICAgZnVuY3Rpb24gTWV0YSAoVyA6IFdpbmRvdzsgTW9kZSA6IEN1cnNlc19Cb29sKSByZXR1cm4gQ19JbnQ7CiAgICAgICBwcmFnbWEgSW1wb3J0IChDLCBNZXRhLCAibWV0YSIpOwpAQCAtODM2LDggKzgzNyw4IEBACiAgICAgICBlbmQgaWY7CiAgICBlbmQgU2V0X01ldGFfTW9kZTsKIAotICAgcHJvY2VkdXJlIFNldF9LZXlQYWRfTW9kZSAoV2luICAgICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3dpdGNoT24gOiBpbiBCb29sZWFuIDo9IFRydWUpCisgICBwcm9jZWR1cmUgU2V0X0tleVBhZF9Nb2RlIChXaW4gICAgICA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTd2l0Y2hPbiA6IEJvb2xlYW4gOj0gVHJ1ZSkKICAgIGlzCiAgICAgICBmdW5jdGlvbiBLZXlwYWQgKFcgOiBXaW5kb3c7IE1vZGUgOiBDdXJzZXNfQm9vbCkgcmV0dXJuIENfSW50OwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgS2V5cGFkLCAia2V5cGFkIik7CkBAIC04NDcsNyArODQ4LDcgQEAKICAgICAgIGVuZCBpZjsKICAgIGVuZCBTZXRfS2V5UGFkX01vZGU7CiAKLSAgIGZ1bmN0aW9uIEdldF9LZXlQYWRfTW9kZSAoV2luIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdykKKyAgIGZ1bmN0aW9uIEdldF9LZXlQYWRfTW9kZSAoV2luIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEJvb2xlYW4KICAgIGlzCiAgICAgICBmdW5jdGlvbiBJc19LZXlwYWQgKFcgOiBXaW5kb3cpIHJldHVybiBDdXJzZXNfQm9vbDsKQEAgLTg1Niw3ICs4NTcsNyBAQAogICAgICAgcmV0dXJuIChJc19LZXlwYWQgKFdpbikgLz0gQ3Vyc2VzX0Jvb2xfRmFsc2UpOwogICAgZW5kIEdldF9LZXlQYWRfTW9kZTsKIAotICAgcHJvY2VkdXJlIEhhbGZfRGVsYXkgKEFtb3VudCA6IGluIEhhbGZfRGVsYXlfQW1vdW50KQorICAgcHJvY2VkdXJlIEhhbGZfRGVsYXkgKEFtb3VudCA6IEhhbGZfRGVsYXlfQW1vdW50KQogICAgaXMKICAgICAgIGZ1bmN0aW9uIEhhbGZkZWxheSAoQW1vdW50IDogQ19JbnQpIHJldHVybiBDX0ludDsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEhhbGZkZWxheSwgImhhbGZkZWxheSIpOwpAQCAtODY3LDggKzg2OCw4IEBACiAgICBlbmQgSGFsZl9EZWxheTsKIAogICAgcHJvY2VkdXJlIFNldF9GbHVzaF9Pbl9JbnRlcnJ1cHRfTW9kZQotICAgICAoV2luICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7Ci0gICAgICBNb2RlIDogaW4gQm9vbGVhbiA6PSBUcnVlKQorICAgICAoV2luICA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBNb2RlIDogQm9vbGVhbiA6PSBUcnVlKQogICAgaXMKICAgICAgIGZ1bmN0aW9uIEludHJmbHVzaCAoV2luIDogV2luZG93OyBNb2RlIDogQ3Vyc2VzX0Jvb2wpIHJldHVybiBDX0ludDsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEludHJmbHVzaCwgImludHJmbHVzaCIpOwpAQCAtODc5LDggKzg4MCw4IEBACiAgICBlbmQgU2V0X0ZsdXNoX09uX0ludGVycnVwdF9Nb2RlOwogCiAgICBwcm9jZWR1cmUgU2V0X1F1ZXVlX0ludGVycnVwdF9Nb2RlCi0gICAgIChXaW4gICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7Ci0gICAgICBGbHVzaCA6IGluIEJvb2xlYW4gOj0gVHJ1ZSkKKyAgICAgKFdpbiAgIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIEZsdXNoIDogQm9vbGVhbiA6PSBUcnVlKQogICAgaXMKICAgICAgIHByb2NlZHVyZSBRaWZsdXNoOwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgUWlmbHVzaCwgInFpZmx1c2giKTsKQEAgLTg5OCw4ICs4OTksOCBAQAogICAgZW5kIFNldF9RdWV1ZV9JbnRlcnJ1cHRfTW9kZTsKIAogICAgcHJvY2VkdXJlIFNldF9Ob0RlbGF5X01vZGUKLSAgICAgKFdpbiAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OwotICAgICAgTW9kZSA6IGluIEJvb2xlYW4gOj0gRmFsc2UpCisgICAgIChXaW4gIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIE1vZGUgOiBCb29sZWFuIDo9IEZhbHNlKQogICAgaXMKICAgICAgIGZ1bmN0aW9uIE5vZGVsYXkgKFdpbiA6IFdpbmRvdzsgTW9kZSA6IEN1cnNlc19Cb29sKSByZXR1cm4gQ19JbnQ7CiAgICAgICBwcmFnbWEgSW1wb3J0IChDLCBOb2RlbGF5LCAibm9kZWxheSIpOwpAQCAtOTA5LDkgKzkxMCw5IEBACiAgICAgICBlbmQgaWY7CiAgICBlbmQgU2V0X05vRGVsYXlfTW9kZTsKIAotICAgcHJvY2VkdXJlIFNldF9UaW1lb3V0X01vZGUgKFdpbiAgICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTW9kZSAgIDogaW4gVGltZW91dF9Nb2RlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFtb3VudCA6IGluIE5hdHVyYWwpCisgICBwcm9jZWR1cmUgU2V0X1RpbWVvdXRfTW9kZSAoV2luICAgIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb2RlICAgOiBUaW1lb3V0X01vZGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQW1vdW50IDogTmF0dXJhbCkKICAgIGlzCiAgICAgICBwcm9jZWR1cmUgV3RpbWVvdXQgKFdpbiA6IFdpbmRvdzsgQW1vdW50IDogQ19JbnQpOwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgV3RpbWVvdXQsICJ3dGltZW91dCIpOwpAQCAtOTMxLDIwICs5MzIsMjEgQEAKICAgIGVuZCBTZXRfVGltZW91dF9Nb2RlOwogCiAgICBwcm9jZWR1cmUgU2V0X0VzY2FwZV9UaW1lcl9Nb2RlCi0gICAgIChXaW4gICAgICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OwotICAgICAgVGltZXJfT2ZmIDogaW4gQm9vbGVhbiA6PSBGYWxzZSkKKyAgICAgKFdpbiAgICAgICA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBUaW1lcl9PZmYgOiBCb29sZWFuIDo9IEZhbHNlKQogICAgaXMKICAgICAgIGZ1bmN0aW9uIE5vdGltZW91dCAoV2luIDogV2luZG93OyBNb2RlIDogQ3Vyc2VzX0Jvb2wpIHJldHVybiBDX0ludDsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIE5vdGltZW91dCwgIm5vdGltZW91dCIpOwogICAgYmVnaW4KICAgICAgIGlmIE5vdGltZW91dCAoV2luLCBDdXJzZXNfQm9vbCAoQm9vbGVhbidQb3MgKFRpbWVyX09mZikpKQotICAgICAgICA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICA9IEN1cnNlc19FcnIKKyAgICAgIHRoZW4KICAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CiAgICAgICBlbmQgaWY7CiAgICBlbmQgU2V0X0VzY2FwZV9UaW1lcl9Nb2RlOwogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgIHByb2NlZHVyZSBTZXRfTkxfTW9kZSAoU3dpdGNoT24gOiBpbiBCb29sZWFuIDo9IFRydWUpCisgICBwcm9jZWR1cmUgU2V0X05MX01vZGUgKFN3aXRjaE9uIDogQm9vbGVhbiA6PSBUcnVlKQogICAgaXMKICAgICAgIGZ1bmN0aW9uIE5MIHJldHVybiBDX0ludDsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIE5MLCAibmwiKTsKQEAgLTk2NCw4ICs5NjYsOCBAQAogICAgZW5kIFNldF9OTF9Nb2RlOwogCiAgICBwcm9jZWR1cmUgQ2xlYXJfT25fTmV4dF9VcGRhdGUKLSAgICAgKFdpbiAgICAgIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKLSAgICAgIERvX0NsZWFyIDogaW4gQm9vbGVhbiA6PSBUcnVlKQorICAgICAoV2luICAgICAgOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgRG9fQ2xlYXIgOiBCb29sZWFuIDo9IFRydWUpCiAgICBpcwogICAgICAgZnVuY3Rpb24gQ2xlYXJfT2sgKFcgOiBXaW5kb3c7IEZsYWcgOiBDdXJzZXNfQm9vbCkgcmV0dXJuIENfSW50OwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgQ2xlYXJfT2ssICJjbGVhcm9rIik7CkBAIC05NzYsOCArOTc4LDggQEAKICAgIGVuZCBDbGVhcl9Pbl9OZXh0X1VwZGF0ZTsKIAogICAgcHJvY2VkdXJlIFVzZV9JbnNlcnRfRGVsZXRlX0xpbmUKLSAgICAgKFdpbiAgICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7Ci0gICAgICBEb19JZGwgOiBpbiBCb29sZWFuIDo9IFRydWUpCisgICAgIChXaW4gICAgOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgRG9fSWRsIDogQm9vbGVhbiA6PSBUcnVlKQogICAgaXMKICAgICAgIGZ1bmN0aW9uIElETF9PayAoVyA6IFdpbmRvdzsgRmxhZyA6IEN1cnNlc19Cb29sKSByZXR1cm4gQ19JbnQ7CiAgICAgICBwcmFnbWEgSW1wb3J0IChDLCBJRExfT2ssICJpZGxvayIpOwpAQCAtOTg4LDggKzk5MCw4IEBACiAgICBlbmQgVXNlX0luc2VydF9EZWxldGVfTGluZTsKIAogICAgcHJvY2VkdXJlIFVzZV9JbnNlcnRfRGVsZXRlX0NoYXJhY3RlcgotICAgICAoV2luICAgIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKLSAgICAgIERvX0lkYyA6IGluIEJvb2xlYW4gOj0gVHJ1ZSkKKyAgICAgKFdpbiAgICA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBEb19JZGMgOiBCb29sZWFuIDo9IFRydWUpCiAgICBpcwogICAgICAgcHJvY2VkdXJlIElEQ19PayAoVyA6IFdpbmRvdzsgRmxhZyA6IEN1cnNlc19Cb29sKTsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIElEQ19PaywgImlkY29rIik7CkBAIC05OTgsOCArMTAwMCw4IEBACiAgICBlbmQgVXNlX0luc2VydF9EZWxldGVfQ2hhcmFjdGVyOwogCiAgICBwcm9jZWR1cmUgTGVhdmVfQ3Vyc29yX0FmdGVyX1VwZGF0ZQotICAgICAoV2luICAgICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OwotICAgICAgRG9fTGVhdmUgOiBpbiBCb29sZWFuIDo9IFRydWUpCisgICAgIChXaW4gICAgICA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBEb19MZWF2ZSA6IEJvb2xlYW4gOj0gVHJ1ZSkKICAgIGlzCiAgICAgICBmdW5jdGlvbiBMZWF2ZV9PayAoVyA6IFdpbmRvdzsgRmxhZyA6IEN1cnNlc19Cb29sKSByZXR1cm4gQ19JbnQ7CiAgICAgICBwcmFnbWEgSW1wb3J0IChDLCBMZWF2ZV9PaywgImxlYXZlb2siKTsKQEAgLTEwMTAsOCArMTAxMiw4IEBACiAgICBlbmQgTGVhdmVfQ3Vyc29yX0FmdGVyX1VwZGF0ZTsKIAogICAgcHJvY2VkdXJlIEltbWVkaWF0ZV9VcGRhdGVfTW9kZQotICAgICAoV2luICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7Ci0gICAgICBNb2RlIDogaW4gQm9vbGVhbiA6PSBGYWxzZSkKKyAgICAgKFdpbiAgOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgTW9kZSA6IEJvb2xlYW4gOj0gRmFsc2UpCiAgICBpcwogICAgICAgcHJvY2VkdXJlIEltbWVkb2sgKFdpbiA6IFdpbmRvdzsgTW9kZSA6IEN1cnNlc19Cb29sKTsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEltbWVkb2ssICJpbW1lZG9rIik7CkBAIC0xMDIwLDggKzEwMjIsOCBAQAogICAgZW5kIEltbWVkaWF0ZV9VcGRhdGVfTW9kZTsKIAogICAgcHJvY2VkdXJlIEFsbG93X1Njcm9sbGluZwotICAgICAoV2luICA6IGluIFdpbmRvdyAgOj0gU3RhbmRhcmRfV2luZG93OwotICAgICAgTW9kZSA6IGluIEJvb2xlYW4gOj0gRmFsc2UpCisgICAgIChXaW4gIDogV2luZG93ICA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBNb2RlIDogQm9vbGVhbiA6PSBGYWxzZSkKICAgIGlzCiAgICAgICBmdW5jdGlvbiBTY3JvbGxvayAoV2luIDogV2luZG93OyBNb2RlIDogQ3Vyc2VzX0Jvb2wpIHJldHVybiBDX0ludDsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNjcm9sbG9rLCAic2Nyb2xsb2siKTsKQEAgLTEwNDEsOSArMTA0Myw5IEBACiAgICBlbmQgU2Nyb2xsaW5nX0FsbG93ZWQ7CiAKICAgIHByb2NlZHVyZSBTZXRfU2Nyb2xsX1JlZ2lvbgotICAgICAoV2luICAgICAgICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OwotICAgICAgVG9wX0xpbmUgICAgOiBpbiBMaW5lX1Bvc2l0aW9uOwotICAgICAgQm90dG9tX0xpbmUgOiBpbiBMaW5lX1Bvc2l0aW9uKQorICAgICAoV2luICAgICAgICAgOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgVG9wX0xpbmUgICAgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgQm90dG9tX0xpbmUgOiBMaW5lX1Bvc2l0aW9uKQogICAgaXMKICAgICAgIGZ1bmN0aW9uIFdzZXRzY3JyZWcgKFdpbiA6IFdpbmRvdzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpbiA6IENfSW50OwpAQCAtMTA1MSw3ICsxMDUzLDggQEAKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFdzZXRzY3JyZWcsICJ3c2V0c2NycmVnIik7CiAgICBiZWdpbgogICAgICAgaWYgV3NldHNjcnJlZyAoV2luLCBDX0ludCAoVG9wX0xpbmUpLCBDX0ludCAoQm90dG9tX0xpbmUpKQotICAgICAgICA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICA9IEN1cnNlc19FcnIKKyAgICAgIHRoZW4KICAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CiAgICAgICBlbmQgaWY7CiAgICBlbmQgU2V0X1Njcm9sbF9SZWdpb247CkBAIC0xMDY2LDcgKzEwNjksNyBAQAogICAgICAgZW5kIGlmOwogICAgZW5kIFVwZGF0ZV9TY3JlZW47CiAKLSAgIHByb2NlZHVyZSBSZWZyZXNoIChXaW4gOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93KQorICAgcHJvY2VkdXJlIFJlZnJlc2ggKFdpbiA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3cpCiAgICBpcwogICAgICAgZnVuY3Rpb24gV3JlZnJlc2ggKFcgOiBXaW5kb3cpIHJldHVybiBDX0ludDsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFdyZWZyZXNoLCAid3JlZnJlc2giKTsKQEAgLTEwNzcsNyArMTA4MCw3IEBACiAgICBlbmQgUmVmcmVzaDsKIAogICAgcHJvY2VkdXJlIFJlZnJlc2hfV2l0aG91dF9VcGRhdGUKLSAgICAgKFdpbiA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3cpCisgICAgIChXaW4gOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93KQogICAgaXMKICAgICAgIGZ1bmN0aW9uIFdub3V0cmVmcmVzaCAoVyA6IFdpbmRvdykgcmV0dXJuIENfSW50OwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgV25vdXRyZWZyZXNoLCAid25vdXRyZWZyZXNoIik7CkBAIC0xMDg3LDcgKzEwOTAsNyBAQAogICAgICAgZW5kIGlmOwogICAgZW5kIFJlZnJlc2hfV2l0aG91dF9VcGRhdGU7CiAKLSAgIHByb2NlZHVyZSBSZWRyYXcgKFdpbiA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3cpCisgICBwcm9jZWR1cmUgUmVkcmF3IChXaW4gOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93KQogICAgaXMKICAgICAgIGZ1bmN0aW9uIFJlZHJhd3dpbiAoV2luIDogV2luZG93KSByZXR1cm4gQ19JbnQ7CiAgICAgICBwcmFnbWEgSW1wb3J0IChDLCBSZWRyYXd3aW4sICJyZWRyYXd3aW4iKTsKQEAgLTEwOTgsOSArMTEwMSw5IEBACiAgICBlbmQgUmVkcmF3OwogCiAgICBwcm9jZWR1cmUgUmVkcmF3Ci0gICAgIChXaW4gICAgICAgIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKLSAgICAgIEJlZ2luX0xpbmUgOiBpbiBMaW5lX1Bvc2l0aW9uOwotICAgICAgTGluZV9Db3VudCA6IGluIFBvc2l0aXZlKQorICAgICAoV2luICAgICAgICA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBCZWdpbl9MaW5lIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgIExpbmVfQ291bnQgOiBQb3NpdGl2ZSkKICAgIGlzCiAgICAgICBmdW5jdGlvbiBXcmVkcmF3bG4gKFdpbiA6IFdpbmRvdzsgRmlyc3QgOiBDX0ludDsgQ250IDogQ19JbnQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDX0ludDsKQEAgLTExMDgsMTMgKzExMTEsMTQgQEAKICAgIGJlZ2luCiAgICAgICBpZiBXcmVkcmF3bG4gKFdpbiwKICAgICAgICAgICAgICAgICAgICAgQ19JbnQgKEJlZ2luX0xpbmUpLAotICAgICAgICAgICAgICAgICAgICBDX0ludCAoTGluZV9Db3VudCkpID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICAgICAgICAgICAgIENfSW50IChMaW5lX0NvdW50KSkgPSBDdXJzZXNfRXJyCisgICAgICB0aGVuCiAgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOwogICAgICAgZW5kIGlmOwogICAgZW5kIFJlZHJhdzsKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICBwcm9jZWR1cmUgRXJhc2UgKFdpbiA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3cpCisgICBwcm9jZWR1cmUgRXJhc2UgKFdpbiA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3cpCiAgICBpcwogICAgICAgZnVuY3Rpb24gV2VyYXNlIChXIDogV2luZG93KSByZXR1cm4gQ19JbnQ7CiAgICAgICBwcmFnbWEgSW1wb3J0IChDLCBXZXJhc2UsICJ3ZXJhc2UiKTsKQEAgLTExMjQsNyArMTEyOCw3IEBACiAgICAgICBlbmQgaWY7CiAgICBlbmQgRXJhc2U7CiAKLSAgIHByb2NlZHVyZSBDbGVhciAoV2luIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdykKKyAgIHByb2NlZHVyZSBDbGVhciAoV2luIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdykKICAgIGlzCiAgICAgICBmdW5jdGlvbiBXY2xlYXIgKFcgOiBXaW5kb3cpIHJldHVybiBDX0ludDsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFdjbGVhciwgIndjbGVhciIpOwpAQCAtMTEzNCw3ICsxMTM4LDcgQEAKICAgICAgIGVuZCBpZjsKICAgIGVuZCBDbGVhcjsKIAotICAgcHJvY2VkdXJlIENsZWFyX1RvX0VuZF9PZl9TY3JlZW4gKFdpbiA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3cpCisgICBwcm9jZWR1cmUgQ2xlYXJfVG9fRW5kX09mX1NjcmVlbiAoV2luIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdykKICAgIGlzCiAgICAgICBmdW5jdGlvbiBXY2xlYXJib3QgKFcgOiBXaW5kb3cpIHJldHVybiBDX0ludDsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFdjbGVhcmJvdCwgIndjbHJ0b2JvdCIpOwpAQCAtMTE0NCw3ICsxMTQ4LDcgQEAKICAgICAgIGVuZCBpZjsKICAgIGVuZCBDbGVhcl9Ub19FbmRfT2ZfU2NyZWVuOwogCi0gICBwcm9jZWR1cmUgQ2xlYXJfVG9fRW5kX09mX0xpbmUgKFdpbiA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3cpCisgICBwcm9jZWR1cmUgQ2xlYXJfVG9fRW5kX09mX0xpbmUgKFdpbiA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3cpCiAgICBpcwogICAgICAgZnVuY3Rpb24gV2NsZWFyZW9sIChXIDogV2luZG93KSByZXR1cm4gQ19JbnQ7CiAgICAgICBwcmFnbWEgSW1wb3J0IChDLCBXY2xlYXJlb2wsICJ3Y2xydG9lb2wiKTsKQEAgLTExNTUsMjMgKzExNTksMjQgQEAKICAgIGVuZCBDbGVhcl9Ub19FbmRfT2ZfTGluZTsKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgcHJvY2VkdXJlIFNldF9CYWNrZ3JvdW5kCi0gICAgIChXaW4gOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OwotICAgICAgQ2ggIDogaW4gQXR0cmlidXRlZF9DaGFyYWN0ZXIpCisgICAgIChXaW4gOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgQ2ggIDogQXR0cmlidXRlZF9DaGFyYWN0ZXIpCiAgICBpcwotICAgICAgcHJvY2VkdXJlIFdCYWNrZ3JvdW5kIChXIDogaW4gV2luZG93OyBDaCA6IGluIENfQ2h0eXBlKTsKKyAgICAgIHByb2NlZHVyZSBXQmFja2dyb3VuZCAoVyA6IFdpbmRvdzsgQ2ggOiBBdHRyaWJ1dGVkX0NoYXJhY3Rlcik7CiAgICAgICBwcmFnbWEgSW1wb3J0IChDLCBXQmFja2dyb3VuZCwgIndia2dkc2V0Iik7CiAgICBiZWdpbgotICAgICAgV0JhY2tncm91bmQgKFdpbiwgQXR0ckNoYXJfVG9fQ2h0eXBlIChDaCkpOworICAgICAgV0JhY2tncm91bmQgKFdpbiwgQ2gpOwogICAgZW5kIFNldF9CYWNrZ3JvdW5kOwogCiAgICBwcm9jZWR1cmUgQ2hhbmdlX0JhY2tncm91bmQKLSAgICAgKFdpbiA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7Ci0gICAgICBDaCAgOiBpbiBBdHRyaWJ1dGVkX0NoYXJhY3RlcikKKyAgICAgKFdpbiA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBDaCAgOiBBdHRyaWJ1dGVkX0NoYXJhY3RlcikKICAgIGlzCi0gICAgICBmdW5jdGlvbiBXQ2hhbmdlQmtnZCAoVyA6IFdpbmRvdzsgQ2ggOiBDX0NodHlwZSkgcmV0dXJuIENfSW50OworICAgICAgZnVuY3Rpb24gV0NoYW5nZUJrZ2QgKFcgOiBXaW5kb3c7IENoIDogQXR0cmlidXRlZF9DaGFyYWN0ZXIpCisgICAgICAgICByZXR1cm4gQ19JbnQ7CiAgICAgICBwcmFnbWEgSW1wb3J0IChDLCBXQ2hhbmdlQmtnZCwgIndia2dkIik7CiAgICBiZWdpbgotICAgICAgaWYgV0NoYW5nZUJrZ2QgKFdpbiwgQXR0ckNoYXJfVG9fQ2h0eXBlIChDaCkpID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICBpZiBXQ2hhbmdlQmtnZCAoV2luLCBDaCkgPSBDdXJzZXNfRXJyIHRoZW4KICAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CiAgICAgICBlbmQgaWY7CiAgICBlbmQgQ2hhbmdlX0JhY2tncm91bmQ7CkBAIC0xMTc5LDE2ICsxMTg0LDE2IEBACiAgICBmdW5jdGlvbiBHZXRfQmFja2dyb3VuZCAoV2luIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdykKICAgICAgcmV0dXJuIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyCiAgICBpcwotICAgICAgZnVuY3Rpb24gV2dldGJrZ2QgKFdpbiA6IFdpbmRvdykgcmV0dXJuIENfQ2h0eXBlOworICAgICAgZnVuY3Rpb24gV2dldGJrZ2QgKFdpbiA6IFdpbmRvdykgcmV0dXJuIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyOwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgV2dldGJrZ2QsICJnZXRia2dkIik7CiAgICBiZWdpbgotICAgICAgcmV0dXJuIENodHlwZV9Ub19BdHRyQ2hhciAoV2dldGJrZ2QgKFdpbikpOworICAgICAgcmV0dXJuIFdnZXRia2dkIChXaW4pOwogICAgZW5kIEdldF9CYWNrZ3JvdW5kOwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICBwcm9jZWR1cmUgQ2hhbmdlX0xpbmVzX1N0YXR1cyAoV2luICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0IDogaW4gTGluZV9Qb3NpdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3VudCA6IGluIFBvc2l0aXZlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlIDogaW4gQm9vbGVhbikKKyAgIHByb2NlZHVyZSBDaGFuZ2VfTGluZXNfU3RhdHVzIChXaW4gICA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnQgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvdW50IDogUG9zaXRpdmU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgOiBCb29sZWFuKQogICAgaXMKICAgICAgIGZ1bmN0aW9uIFd0b3VjaGxuIChXaW4gOiBXaW5kb3c7CiAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhIDogQ19JbnQ7CkBAIC0xMTk3LDMyICsxMjAyLDM1IEBACiAgICAgICBwcmFnbWEgSW1wb3J0IChDLCBXdG91Y2hsbiwgInd0b3VjaGxuIik7CiAgICBiZWdpbgogICAgICAgaWYgV3RvdWNobG4gKFdpbiwgQ19JbnQgKFN0YXJ0KSwgQ19JbnQgKENvdW50KSwKLSAgICAgICAgICAgICAgICAgICBDX0ludCAoQm9vbGVhbidQb3MgKFN0YXRlKSkpID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICAgICAgICAgICAgQ19JbnQgKEJvb2xlYW4nUG9zIChTdGF0ZSkpKSA9IEN1cnNlc19FcnIKKyAgICAgIHRoZW4KICAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CiAgICAgICBlbmQgaWY7CiAgICBlbmQgQ2hhbmdlX0xpbmVzX1N0YXR1czsKIAotICAgcHJvY2VkdXJlIFRvdWNoIChXaW4gOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93KQorICAgcHJvY2VkdXJlIFRvdWNoIChXaW4gOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93KQogICAgaXMKICAgICAgIFkgOiBMaW5lX1Bvc2l0aW9uOwogICAgICAgWCA6IENvbHVtbl9Qb3NpdGlvbjsKICAgIGJlZ2luCiAgICAgICBHZXRfU2l6ZSAoV2luLCBZLCBYKTsKKyAgICAgIHByYWdtYSBXYXJuaW5ncyAoT2ZmLCBYKTsgICAgICAgICAtLSAgdW5yZWZlcmVuY2VkCiAgICAgICBDaGFuZ2VfTGluZXNfU3RhdHVzIChXaW4sIDAsIFBvc2l0aXZlIChZKSwgVHJ1ZSk7CiAgICBlbmQgVG91Y2g7CiAKLSAgIHByb2NlZHVyZSBVbnRvdWNoIChXaW4gOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93KQorICAgcHJvY2VkdXJlIFVudG91Y2ggKFdpbiA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3cpCiAgICBpcwogICAgICAgWSA6IExpbmVfUG9zaXRpb247CiAgICAgICBYIDogQ29sdW1uX1Bvc2l0aW9uOwogICAgYmVnaW4KICAgICAgIEdldF9TaXplIChXaW4sIFksIFgpOworICAgICAgcHJhZ21hIFdhcm5pbmdzIChPZmYsIFgpOyAgICAgICAgIC0tICB1bnJlZmVyZW5jZWQKICAgICAgIENoYW5nZV9MaW5lc19TdGF0dXMgKFdpbiwgMCwgUG9zaXRpdmUgKFkpLCBGYWxzZSk7CiAgICBlbmQgVW50b3VjaDsKIAotICAgcHJvY2VkdXJlIFRvdWNoIChXaW4gICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7Ci0gICAgICAgICAgICAgICAgICAgIFN0YXJ0IDogaW4gTGluZV9Qb3NpdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgQ291bnQgOiBpbiBQb3NpdGl2ZSkKKyAgIHByb2NlZHVyZSBUb3VjaCAoV2luICAgOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgICAgICAgICAgICAgICBTdGFydCA6IExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgIENvdW50IDogUG9zaXRpdmUpCiAgICBpcwogICAgYmVnaW4KICAgICAgIENoYW5nZV9MaW5lc19TdGF0dXMgKFdpbiwgU3RhcnQsIENvdW50LCBUcnVlKTsKQEAgLTEyNTYsMTUgKzEyNjQsMTUgQEAKICAgIGVuZCBJc19Ub3VjaGVkOwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBwcm9jZWR1cmUgQ29weQotICAgICAoU291cmNlX1dpbmRvdyAgICAgICAgICAgIDogaW4gV2luZG93OwotICAgICAgRGVzdGluYXRpb25fV2luZG93ICAgICAgIDogaW4gV2luZG93OwotICAgICAgU291cmNlX1RvcF9Sb3cgICAgICAgICAgIDogaW4gTGluZV9Qb3NpdGlvbjsKLSAgICAgIFNvdXJjZV9MZWZ0X0NvbHVtbiAgICAgICA6IGluIENvbHVtbl9Qb3NpdGlvbjsKLSAgICAgIERlc3RpbmF0aW9uX1RvcF9Sb3cgICAgICA6IGluIExpbmVfUG9zaXRpb247Ci0gICAgICBEZXN0aW5hdGlvbl9MZWZ0X0NvbHVtbiAgOiBpbiBDb2x1bW5fUG9zaXRpb247Ci0gICAgICBEZXN0aW5hdGlvbl9Cb3R0b21fUm93ICAgOiBpbiBMaW5lX1Bvc2l0aW9uOwotICAgICAgRGVzdGluYXRpb25fUmlnaHRfQ29sdW1uIDogaW4gQ29sdW1uX1Bvc2l0aW9uOwotICAgICAgTm9uX0Rlc3RydWN0aXZlX01vZGUgICAgIDogaW4gQm9vbGVhbiA6PSBUcnVlKQorICAgICAoU291cmNlX1dpbmRvdyAgICAgICAgICAgIDogV2luZG93OworICAgICAgRGVzdGluYXRpb25fV2luZG93ICAgICAgIDogV2luZG93OworICAgICAgU291cmNlX1RvcF9Sb3cgICAgICAgICAgIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgIFNvdXJjZV9MZWZ0X0NvbHVtbiAgICAgICA6IENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgIERlc3RpbmF0aW9uX1RvcF9Sb3cgICAgICA6IExpbmVfUG9zaXRpb247CisgICAgICBEZXN0aW5hdGlvbl9MZWZ0X0NvbHVtbiAgOiBDb2x1bW5fUG9zaXRpb247CisgICAgICBEZXN0aW5hdGlvbl9Cb3R0b21fUm93ICAgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgRGVzdGluYXRpb25fUmlnaHRfQ29sdW1uIDogQ29sdW1uX1Bvc2l0aW9uOworICAgICAgTm9uX0Rlc3RydWN0aXZlX01vZGUgICAgIDogQm9vbGVhbiA6PSBUcnVlKQogICAgaXMKICAgICAgIGZ1bmN0aW9uIENvcHl3aW4gKFNyYyA6IFdpbmRvdzsKICAgICAgICAgICAgICAgICAgICAgICAgIERzdCA6IFdpbmRvdzsKQEAgLTEyODYsMTQgKzEyOTQsMTUgQEAKICAgICAgICAgICAgICAgICAgIENfSW50IChEZXN0aW5hdGlvbl9Cb3R0b21fUm93KSwKICAgICAgICAgICAgICAgICAgIENfSW50IChEZXN0aW5hdGlvbl9SaWdodF9Db2x1bW4pLAogICAgICAgICAgICAgICAgICAgQm9vbGVhbidQb3MgKE5vbl9EZXN0cnVjdGl2ZV9Nb2RlKQotICAgICAgICAgICAgICAgICkgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgICAgICAgICAgKSA9IEN1cnNlc19FcnIKKyAgICAgIHRoZW4KICAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CiAgICAgICBlbmQgaWY7CiAgICBlbmQgQ29weTsKIAogICAgcHJvY2VkdXJlIE92ZXJ3cml0ZQotICAgICAoU291cmNlX1dpbmRvdyAgICAgIDogaW4gV2luZG93OwotICAgICAgRGVzdGluYXRpb25fV2luZG93IDogaW4gV2luZG93KQorICAgICAoU291cmNlX1dpbmRvdyAgICAgIDogV2luZG93OworICAgICAgRGVzdGluYXRpb25fV2luZG93IDogV2luZG93KQogICAgaXMKICAgICAgIGZ1bmN0aW9uIE92ZXJ3cml0ZSAoU3JjIDogV2luZG93OyBEc3QgOiBXaW5kb3cpIHJldHVybiBDX0ludDsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIE92ZXJ3cml0ZSwgIm92ZXJ3cml0ZSIpOwpAQCAtMTMwNCw4ICsxMzEzLDggQEAKICAgIGVuZCBPdmVyd3JpdGU7CiAKICAgIHByb2NlZHVyZSBPdmVybGF5Ci0gICAgIChTb3VyY2VfV2luZG93ICAgICAgOiBpbiBXaW5kb3c7Ci0gICAgICBEZXN0aW5hdGlvbl9XaW5kb3cgOiBpbiBXaW5kb3cpCisgICAgIChTb3VyY2VfV2luZG93ICAgICAgOiBXaW5kb3c7CisgICAgICBEZXN0aW5hdGlvbl9XaW5kb3cgOiBXaW5kb3cpCiAgICBpcwogICAgICAgZnVuY3Rpb24gT3ZlcmxheSAoU3JjIDogV2luZG93OyBEc3QgOiBXaW5kb3cpIHJldHVybiBDX0ludDsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIE92ZXJsYXksICJvdmVybGF5Iik7CkBAIC0xMzE3LDggKzEzMjYsOCBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIHByb2NlZHVyZSBJbnNlcnRfRGVsZXRlX0xpbmVzCi0gICAgIChXaW4gICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7Ci0gICAgICBMaW5lcyA6IGluIEludGVnZXIgICAgICAgOj0gMSkgLS0gZGVmYXVsdCBpcyB0byBpbnNlcnQgb25lIGxpbmUgYWJvdmUKKyAgICAgKFdpbiAgIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIExpbmVzIDogSW50ZWdlciAgICAgICA6PSAxKSAtLSBkZWZhdWx0IGlzIHRvIGluc2VydCBvbmUgbGluZSBhYm92ZQogICAgaXMKICAgICAgIGZ1bmN0aW9uIFdpbnNkZWxsbiAoVyA6IFdpbmRvdzsgTiA6IENfSW50KSByZXR1cm4gQ19JbnQ7CiAgICAgICBwcmFnbWEgSW1wb3J0IChDLCBXaW5zZGVsbG4sICJ3aW5zZGVsbG4iKTsKQEAgLTEzMjgsMTMgKzEzMzcsMTMgQEAKICAgICAgIGVuZCBpZjsKICAgIGVuZCBJbnNlcnRfRGVsZXRlX0xpbmVzOwogCi0gICBwcm9jZWR1cmUgRGVsZXRlX0xpbmUgKFdpbiA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3cpCisgICBwcm9jZWR1cmUgRGVsZXRlX0xpbmUgKFdpbiA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3cpCiAgICBpcwogICAgYmVnaW4KICAgICAgIEluc2VydF9EZWxldGVfTGluZXMgKFdpbiwgLTEpOwogICAgZW5kIERlbGV0ZV9MaW5lOwogCi0gICBwcm9jZWR1cmUgSW5zZXJ0X0xpbmUgKFdpbiA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3cpCisgICBwcm9jZWR1cmUgSW5zZXJ0X0xpbmUgKFdpbiA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3cpCiAgICBpcwogICAgYmVnaW4KICAgICAgIEluc2VydF9EZWxldGVfTGluZXMgKFdpbiwgMSk7CkBAIC0xMzQyLDcgKzEzNTEsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICAgIHByb2NlZHVyZSBHZXRfU2l6ZQotICAgICAoV2luICAgICAgICAgICAgICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAoV2luICAgICAgICAgICAgICAgOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OwogICAgICAgTnVtYmVyX09mX0xpbmVzICAgOiBvdXQgTGluZV9Db3VudDsKICAgICAgIE51bWJlcl9PZl9Db2x1bW5zIDogb3V0IENvbHVtbl9Db3VudCkKICAgIGlzCkBAIC0xMzUyLDE3ICsxMzYxLDE1IEBACiAgICAgICBmdW5jdGlvbiBHZXRNYXhYIChXIDogV2luZG93KSByZXR1cm4gQ19JbnQ7CiAgICAgICBwcmFnbWEgSW1wb3J0IChDLCBHZXRNYXhYLCAiZ2V0bWF4eCIpOwogCi0gICAgICBZIDogY29uc3RhbnQgQ19JbnQgOj0gR2V0TWF4WSAoV2luKQotICAgICAgICAgICAgICAgICAgICAgICAgICArIENfSW50IChPZmZzZXRfWFkpOwotICAgICAgWCA6IGNvbnN0YW50IENfSW50IDo9IEdldE1heFggKFdpbikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKyBDX0ludCAoT2Zmc2V0X1hZKTsKKyAgICAgIFkgOiBjb25zdGFudCBDX0ludCA6PSBHZXRNYXhZIChXaW4pOworICAgICAgWCA6IGNvbnN0YW50IENfSW50IDo9IEdldE1heFggKFdpbik7CiAgICBiZWdpbgogICAgICAgTnVtYmVyX09mX0xpbmVzICAgOj0gTGluZV9Db3VudCAoWSk7CiAgICAgICBOdW1iZXJfT2ZfQ29sdW1ucyA6PSBDb2x1bW5fQ291bnQgKFgpOwogICAgZW5kIEdldF9TaXplOwogCiAgICBwcm9jZWR1cmUgR2V0X1dpbmRvd19Qb3NpdGlvbgotICAgICAoV2luICAgICAgICAgICAgIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgKFdpbiAgICAgICAgICAgICA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CiAgICAgICBUb3BfTGVmdF9MaW5lICAgOiBvdXQgTGluZV9Qb3NpdGlvbjsKICAgICAgIFRvcF9MZWZ0X0NvbHVtbiA6IG91dCBDb2x1bW5fUG9zaXRpb24pCiAgICBpcwpAQCAtMTM4MCw3ICsxMzg3LDcgQEAKICAgIGVuZCBHZXRfV2luZG93X1Bvc2l0aW9uOwogCiAgICBwcm9jZWR1cmUgR2V0X0N1cnNvcl9Qb3NpdGlvbgotICAgICAoV2luICAgIDogaW4gIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgIChXaW4gICAgOiAgV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKICAgICAgIExpbmUgICA6IG91dCBMaW5lX1Bvc2l0aW9uOwogICAgICAgQ29sdW1uIDogb3V0IENvbHVtbl9Qb3NpdGlvbikKICAgIGlzCkBAIC0xMzk4LDcgKzE0MDUsNyBAQAogICAgZW5kIEdldF9DdXJzb3JfUG9zaXRpb247CiAKICAgIHByb2NlZHVyZSBHZXRfT3JpZ2luX1JlbGF0aXZlX1RvX1BhcmVudAotICAgICAoV2luICAgICAgICAgICAgICAgIDogaW4gIFdpbmRvdzsKKyAgICAgKFdpbiAgICAgICAgICAgICAgICA6ICBXaW5kb3c7CiAgICAgICBUb3BfTGVmdF9MaW5lICAgICAgOiBvdXQgTGluZV9Qb3NpdGlvbjsKICAgICAgIFRvcF9MZWZ0X0NvbHVtbiAgICA6IG91dCBDb2x1bW5fUG9zaXRpb247CiAgICAgICBJc19Ob3RfQV9TdWJ3aW5kb3cgOiBvdXQgQm9vbGVhbikKQEAgLTE0NjcsMTMgKzE0NzQsMTMgQEAKICAgIGVuZCBTdWJfUGFkOwogCiAgICBwcm9jZWR1cmUgUmVmcmVzaAotICAgICAoUGFkICAgICAgICAgICAgICAgICAgICAgIDogaW4gV2luZG93OwotICAgICAgU291cmNlX1RvcF9Sb3cgICAgICAgICAgIDogaW4gTGluZV9Qb3NpdGlvbjsKLSAgICAgIFNvdXJjZV9MZWZ0X0NvbHVtbiAgICAgICA6IGluIENvbHVtbl9Qb3NpdGlvbjsKLSAgICAgIERlc3RpbmF0aW9uX1RvcF9Sb3cgICAgICA6IGluIExpbmVfUG9zaXRpb247Ci0gICAgICBEZXN0aW5hdGlvbl9MZWZ0X0NvbHVtbiAgOiBpbiBDb2x1bW5fUG9zaXRpb247Ci0gICAgICBEZXN0aW5hdGlvbl9Cb3R0b21fUm93ICAgOiBpbiBMaW5lX1Bvc2l0aW9uOwotICAgICAgRGVzdGluYXRpb25fUmlnaHRfQ29sdW1uIDogaW4gQ29sdW1uX1Bvc2l0aW9uKQorICAgICAoUGFkICAgICAgICAgICAgICAgICAgICAgIDogV2luZG93OworICAgICAgU291cmNlX1RvcF9Sb3cgICAgICAgICAgIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgIFNvdXJjZV9MZWZ0X0NvbHVtbiAgICAgICA6IENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgIERlc3RpbmF0aW9uX1RvcF9Sb3cgICAgICA6IExpbmVfUG9zaXRpb247CisgICAgICBEZXN0aW5hdGlvbl9MZWZ0X0NvbHVtbiAgOiBDb2x1bW5fUG9zaXRpb247CisgICAgICBEZXN0aW5hdGlvbl9Cb3R0b21fUm93ICAgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgRGVzdGluYXRpb25fUmlnaHRfQ29sdW1uIDogQ29sdW1uX1Bvc2l0aW9uKQogICAgaXMKICAgICAgIGZ1bmN0aW9uIFByZWZyZXNoCiAgICAgICAgIChQYWQgICAgICAgICAgICAgICAgICAgICAgOiBXaW5kb3c7CkBAIC0xNDkxLDE5ICsxNDk4LDIwIEBACiAgICAgICAgICAgICAgICAgICAgQ19JbnQgKERlc3RpbmF0aW9uX1RvcF9Sb3cpLAogICAgICAgICAgICAgICAgICAgIENfSW50IChEZXN0aW5hdGlvbl9MZWZ0X0NvbHVtbiksCiAgICAgICAgICAgICAgICAgICAgQ19JbnQgKERlc3RpbmF0aW9uX0JvdHRvbV9Sb3cpLAotICAgICAgICAgICAgICAgICAgIENfSW50IChEZXN0aW5hdGlvbl9SaWdodF9Db2x1bW4pKSA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgICAgICAgICAgIENfSW50IChEZXN0aW5hdGlvbl9SaWdodF9Db2x1bW4pKSA9IEN1cnNlc19FcnIKKyAgICAgIHRoZW4KICAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CiAgICAgICBlbmQgaWY7CiAgICBlbmQgUmVmcmVzaDsKIAogICAgcHJvY2VkdXJlIFJlZnJlc2hfV2l0aG91dF9VcGRhdGUKLSAgICAgKFBhZCAgICAgICAgICAgICAgICAgICAgICA6IGluIFdpbmRvdzsKLSAgICAgIFNvdXJjZV9Ub3BfUm93ICAgICAgICAgICA6IGluIExpbmVfUG9zaXRpb247Ci0gICAgICBTb3VyY2VfTGVmdF9Db2x1bW4gICAgICAgOiBpbiBDb2x1bW5fUG9zaXRpb247Ci0gICAgICBEZXN0aW5hdGlvbl9Ub3BfUm93ICAgICAgOiBpbiBMaW5lX1Bvc2l0aW9uOwotICAgICAgRGVzdGluYXRpb25fTGVmdF9Db2x1bW4gIDogaW4gQ29sdW1uX1Bvc2l0aW9uOwotICAgICAgRGVzdGluYXRpb25fQm90dG9tX1JvdyAgIDogaW4gTGluZV9Qb3NpdGlvbjsKLSAgICAgIERlc3RpbmF0aW9uX1JpZ2h0X0NvbHVtbiA6IGluIENvbHVtbl9Qb3NpdGlvbikKKyAgICAgKFBhZCAgICAgICAgICAgICAgICAgICAgICA6IFdpbmRvdzsKKyAgICAgIFNvdXJjZV9Ub3BfUm93ICAgICAgICAgICA6IExpbmVfUG9zaXRpb247CisgICAgICBTb3VyY2VfTGVmdF9Db2x1bW4gICAgICAgOiBDb2x1bW5fUG9zaXRpb247CisgICAgICBEZXN0aW5hdGlvbl9Ub3BfUm93ICAgICAgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgRGVzdGluYXRpb25fTGVmdF9Db2x1bW4gIDogQ29sdW1uX1Bvc2l0aW9uOworICAgICAgRGVzdGluYXRpb25fQm90dG9tX1JvdyAgIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgIERlc3RpbmF0aW9uX1JpZ2h0X0NvbHVtbiA6IENvbHVtbl9Qb3NpdGlvbikKICAgIGlzCiAgICAgICBmdW5jdGlvbiBQbm91dHJlZnJlc2gKICAgICAgICAgKFBhZCAgICAgICAgICAgICAgICAgICAgICA6IFdpbmRvdzsKQEAgLTE1MjEsMjcgKzE1MjksMjggQEAKICAgICAgICAgICAgICAgICAgICAgICAgQ19JbnQgKERlc3RpbmF0aW9uX1RvcF9Sb3cpLAogICAgICAgICAgICAgICAgICAgICAgICBDX0ludCAoRGVzdGluYXRpb25fTGVmdF9Db2x1bW4pLAogICAgICAgICAgICAgICAgICAgICAgICBDX0ludCAoRGVzdGluYXRpb25fQm90dG9tX1JvdyksCi0gICAgICAgICAgICAgICAgICAgICAgIENfSW50IChEZXN0aW5hdGlvbl9SaWdodF9Db2x1bW4pKSA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICBDX0ludCAoRGVzdGluYXRpb25fUmlnaHRfQ29sdW1uKSkgPSBDdXJzZXNfRXJyCisgICAgICB0aGVuCiAgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOwogICAgICAgZW5kIGlmOwogICAgZW5kIFJlZnJlc2hfV2l0aG91dF9VcGRhdGU7CiAKICAgIHByb2NlZHVyZSBBZGRfQ2hhcmFjdGVyX1RvX1BhZF9BbmRfRWNob19JdAotICAgICAoUGFkIDogaW4gV2luZG93OwotICAgICAgQ2ggIDogaW4gQXR0cmlidXRlZF9DaGFyYWN0ZXIpCisgICAgIChQYWQgOiBXaW5kb3c7CisgICAgICBDaCAgOiBBdHRyaWJ1dGVkX0NoYXJhY3RlcikKICAgIGlzCi0gICAgICBmdW5jdGlvbiBQZWNob2NoYXIgKFBhZCA6IFdpbmRvdzsgQ2ggOiBDX0NodHlwZSkKKyAgICAgIGZ1bmN0aW9uIFBlY2hvY2hhciAoUGFkIDogV2luZG93OyBDaCA6IEF0dHJpYnV0ZWRfQ2hhcmFjdGVyKQogICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ19JbnQ7CiAgICAgICBwcmFnbWEgSW1wb3J0IChDLCBQZWNob2NoYXIsICJwZWNob2NoYXIiKTsKICAgIGJlZ2luCi0gICAgICBpZiBQZWNob2NoYXIgKFBhZCwgQXR0ckNoYXJfVG9fQ2h0eXBlIChDaCkpID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICBpZiBQZWNob2NoYXIgKFBhZCwgQ2gpID0gQ3Vyc2VzX0VyciB0aGVuCiAgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOwogICAgICAgZW5kIGlmOwogICAgZW5kIEFkZF9DaGFyYWN0ZXJfVG9fUGFkX0FuZF9FY2hvX0l0OwogCiAgICBwcm9jZWR1cmUgQWRkX0NoYXJhY3Rlcl9Ub19QYWRfQW5kX0VjaG9fSXQKLSAgICAgKFBhZCA6IGluIFdpbmRvdzsKLSAgICAgIENoICA6IGluIENoYXJhY3RlcikKKyAgICAgKFBhZCA6IFdpbmRvdzsKKyAgICAgIENoICA6IENoYXJhY3RlcikKICAgIGlzCiAgICBiZWdpbgogICAgICAgQWRkX0NoYXJhY3Rlcl9Ub19QYWRfQW5kX0VjaG9fSXQKQEAgLTE1NTEsOCArMTU2MCw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ciAgPT4gTm9ybWFsX1ZpZGVvKSk7CiAgICBlbmQgQWRkX0NoYXJhY3Rlcl9Ub19QYWRfQW5kX0VjaG9fSXQ7CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgIHByb2NlZHVyZSBTY3JvbGwgKFdpbiAgICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7Ci0gICAgICAgICAgICAgICAgICAgICBBbW91bnQgOiBpbiBJbnRlZ2VyIDo9IDEpCisgICBwcm9jZWR1cmUgU2Nyb2xsIChXaW4gICAgOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgICAgICAgICAgICAgICAgQW1vdW50IDogSW50ZWdlciA6PSAxKQogICAgaXMKICAgICAgIGZ1bmN0aW9uIFdzY3JsIChXaW4gOiBXaW5kb3c7IE4gOiBDX0ludCkgcmV0dXJuIENfSW50OwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgV3NjcmwsICJ3c2NybCIpOwpAQCAtMTU2NCw3ICsxNTczLDcgQEAKICAgIGVuZCBTY3JvbGw7CiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgcHJvY2VkdXJlIERlbGV0ZV9DaGFyYWN0ZXIgKFdpbiA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3cpCisgICBwcm9jZWR1cmUgRGVsZXRlX0NoYXJhY3RlciAoV2luIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdykKICAgIGlzCiAgICAgICBmdW5jdGlvbiBXZGVsY2ggKFdpbiA6IFdpbmRvdykgcmV0dXJuIENfSW50OwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgV2RlbGNoLCAid2RlbGNoIik7CkBAIC0xNTc1LDkgKzE1ODQsOSBAQAogICAgZW5kIERlbGV0ZV9DaGFyYWN0ZXI7CiAKICAgIHByb2NlZHVyZSBEZWxldGVfQ2hhcmFjdGVyCi0gICAgIChXaW4gICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OwotICAgICAgTGluZSAgIDogaW4gTGluZV9Qb3NpdGlvbjsKLSAgICAgIENvbHVtbiA6IGluIENvbHVtbl9Qb3NpdGlvbikKKyAgICAgKFdpbiAgICA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBMaW5lICAgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgQ29sdW1uIDogQ29sdW1uX1Bvc2l0aW9uKQogICAgaXMKICAgICAgIGZ1bmN0aW9uIE12d2RlbGNoIChXaW4gOiBXaW5kb3c7CiAgICAgICAgICAgICAgICAgICAgICAgICAgTGluIDogQ19JbnQ7CkBAIC0xNTkyLDEwICsxNjAxLDEwIEBACiAgICBmdW5jdGlvbiBQZWVrIChXaW4gOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93KQogICAgICByZXR1cm4gQXR0cmlidXRlZF9DaGFyYWN0ZXIKICAgIGlzCi0gICAgICBmdW5jdGlvbiBXaW5jaCAoV2luIDogV2luZG93KSByZXR1cm4gQ19DaHR5cGU7CisgICAgICBmdW5jdGlvbiBXaW5jaCAoV2luIDogV2luZG93KSByZXR1cm4gQXR0cmlidXRlZF9DaGFyYWN0ZXI7CiAgICAgICBwcmFnbWEgSW1wb3J0IChDLCBXaW5jaCwgIndpbmNoIik7CiAgICBiZWdpbgotICAgICAgcmV0dXJuIENodHlwZV9Ub19BdHRyQ2hhciAoV2luY2ggKFdpbikpOworICAgICAgcmV0dXJuIFdpbmNoIChXaW4pOwogICAgZW5kIFBlZWs7CiAKICAgIGZ1bmN0aW9uIFBlZWsKQEAgLTE2MDUsNDYgKzE2MTQsNDcgQEAKICAgIGlzCiAgICAgICBmdW5jdGlvbiBNdndpbmNoIChXaW4gOiBXaW5kb3c7CiAgICAgICAgICAgICAgICAgICAgICAgICBMaW4gOiBDX0ludDsKLSAgICAgICAgICAgICAgICAgICAgICAgIENvbCA6IENfSW50KSByZXR1cm4gQ19DaHR5cGU7CisgICAgICAgICAgICAgICAgICAgICAgICBDb2wgOiBDX0ludCkgcmV0dXJuIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyOwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgTXZ3aW5jaCwgIm12d2luY2giKTsKICAgIGJlZ2luCi0gICAgICByZXR1cm4gQ2h0eXBlX1RvX0F0dHJDaGFyIChNdndpbmNoIChXaW4sIENfSW50IChMaW5lKSwgQ19JbnQgKENvbHVtbikpKTsKKyAgICAgIHJldHVybiBNdndpbmNoIChXaW4sIENfSW50IChMaW5lKSwgQ19JbnQgKENvbHVtbikpOwogICAgZW5kIFBlZWs7CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgIHByb2NlZHVyZSBJbnNlcnQgKFdpbiA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7Ci0gICAgICAgICAgICAgICAgICAgICBDaCAgOiBpbiBBdHRyaWJ1dGVkX0NoYXJhY3RlcikKKyAgIHByb2NlZHVyZSBJbnNlcnQgKFdpbiA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICBDaCAgOiBBdHRyaWJ1dGVkX0NoYXJhY3RlcikKICAgIGlzCi0gICAgICBmdW5jdGlvbiBXaW5zY2ggKFdpbiA6IFdpbmRvdzsgQ2ggOiBDX0NodHlwZSkgcmV0dXJuIENfSW50OworICAgICAgZnVuY3Rpb24gV2luc2NoIChXaW4gOiBXaW5kb3c7IENoIDogQXR0cmlidXRlZF9DaGFyYWN0ZXIpIHJldHVybiBDX0ludDsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFdpbnNjaCwgIndpbnNjaCIpOwogICAgYmVnaW4KLSAgICAgIGlmIFdpbnNjaCAoV2luLCBBdHRyQ2hhcl9Ub19DaHR5cGUgKENoKSkgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgIGlmIFdpbnNjaCAoV2luLCBDaCkgPSBDdXJzZXNfRXJyIHRoZW4KICAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CiAgICAgICBlbmQgaWY7CiAgICBlbmQgSW5zZXJ0OwogCiAgICBwcm9jZWR1cmUgSW5zZXJ0Ci0gICAgIChXaW4gICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OwotICAgICAgTGluZSAgIDogaW4gTGluZV9Qb3NpdGlvbjsKLSAgICAgIENvbHVtbiA6IGluIENvbHVtbl9Qb3NpdGlvbjsKLSAgICAgIENoICAgICA6IGluIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyKQorICAgICAoV2luICAgIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIExpbmUgICA6IExpbmVfUG9zaXRpb247CisgICAgICBDb2x1bW4gOiBDb2x1bW5fUG9zaXRpb247CisgICAgICBDaCAgICAgOiBBdHRyaWJ1dGVkX0NoYXJhY3RlcikKICAgIGlzCiAgICAgICBmdW5jdGlvbiBNdndpbnNjaCAoV2luIDogV2luZG93OwogICAgICAgICAgICAgICAgICAgICAgICAgIExpbiA6IENfSW50OwogICAgICAgICAgICAgICAgICAgICAgICAgIENvbCA6IENfSW50OwotICAgICAgICAgICAgICAgICAgICAgICAgIENoICA6IENfQ2h0eXBlKSByZXR1cm4gQ19JbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgQ2ggIDogQXR0cmlidXRlZF9DaGFyYWN0ZXIpIHJldHVybiBDX0ludDsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIE12d2luc2NoLCAibXZ3aW5zY2giKTsKICAgIGJlZ2luCiAgICAgICBpZiBNdndpbnNjaCAoV2luLAogICAgICAgICAgICAgICAgICAgIENfSW50IChMaW5lKSwKICAgICAgICAgICAgICAgICAgICBDX0ludCAoQ29sdW1uKSwKLSAgICAgICAgICAgICAgICAgICBBdHRyQ2hhcl9Ub19DaHR5cGUgKENoKSkgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgICAgICAgICAgICBDaCkgPSBDdXJzZXNfRXJyCisgICAgICB0aGVuCiAgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOwogICAgICAgZW5kIGlmOwogICAgZW5kIEluc2VydDsKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgcHJvY2VkdXJlIEluc2VydCAoV2luIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKLSAgICAgICAgICAgICAgICAgICAgIFN0ciA6IGluIFN0cmluZzsKLSAgICAgICAgICAgICAgICAgICAgIExlbiA6IGluIEludGVnZXIgOj0gLTEpCisgICBwcm9jZWR1cmUgSW5zZXJ0IChXaW4gOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgICAgICAgICAgICAgICAgU3RyIDogU3RyaW5nOworICAgICAgICAgICAgICAgICAgICAgTGVuIDogSW50ZWdlciA6PSAtMSkKICAgIGlzCiAgICAgICBmdW5jdGlvbiBXaW5zbnN0ciAoV2luIDogV2luZG93OwogICAgICAgICAgICAgICAgICAgICAgICAgIFN0ciA6IGNoYXJfYXJyYXk7CkBAIC0xNjYxLDExICsxNjcxLDExIEBACiAgICBlbmQgSW5zZXJ0OwogCiAgICBwcm9jZWR1cmUgSW5zZXJ0Ci0gICAgIChXaW4gICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OwotICAgICAgTGluZSAgIDogaW4gTGluZV9Qb3NpdGlvbjsKLSAgICAgIENvbHVtbiA6IGluIENvbHVtbl9Qb3NpdGlvbjsKLSAgICAgIFN0ciAgICA6IGluIFN0cmluZzsKLSAgICAgIExlbiAgICA6IGluIEludGVnZXIgOj0gLTEpCisgICAgIChXaW4gICAgOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgTGluZSAgIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgIENvbHVtbiA6IENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgIFN0ciAgICA6IFN0cmluZzsKKyAgICAgIExlbiAgICA6IEludGVnZXIgOj0gLTEpCiAgICBpcwogICAgICAgZnVuY3Rpb24gTXZ3aW5zbnN0ciAoV2luICAgIDogV2luZG93OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgTGluZSAgIDogQ19JbnQ7CkBAIC0xNjc5LDE0ICsxNjg5LDE1IEBACiAgICBiZWdpbgogICAgICAgVG9fQyAoU3RyLCBUeHQsIExlbmd0aCk7CiAgICAgICBpZiBNdndpbnNuc3RyIChXaW4sIENfSW50IChMaW5lKSwgQ19JbnQgKENvbHVtbiksIFR4dCwgQ19JbnQgKExlbikpCi0gICAgICAgID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgID0gQ3Vyc2VzX0VycgorICAgICAgdGhlbgogICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKICAgICAgIGVuZCBpZjsKICAgIGVuZCBJbnNlcnQ7CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgIHByb2NlZHVyZSBQZWVrIChXaW4gOiBpbiAgV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgIHByb2NlZHVyZSBQZWVrIChXaW4gOiAgV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKICAgICAgICAgICAgICAgICAgICBTdHIgOiBvdXQgU3RyaW5nOwotICAgICAgICAgICAgICAgICAgIExlbiA6IGluICBJbnRlZ2VyIDo9IC0xKQorICAgICAgICAgICAgICAgICAgIExlbiA6ICBJbnRlZ2VyIDo9IC0xKQogICAgaXMKICAgICAgIGZ1bmN0aW9uIFdpbm5zdHIgKFdpbiA6IFdpbmRvdzsKICAgICAgICAgICAgICAgICAgICAgICAgIFN0ciA6IGNoYXJfYXJyYXk7CkBAIC0xNzE0LDExICsxNzI1LDExIEBACiAgICBlbmQgUGVlazsKIAogICAgcHJvY2VkdXJlIFBlZWsKLSAgICAgKFdpbiAgICA6IGluICBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OwotICAgICAgTGluZSAgIDogaW4gIExpbmVfUG9zaXRpb247Ci0gICAgICBDb2x1bW4gOiBpbiAgQ29sdW1uX1Bvc2l0aW9uOworICAgICAoV2luICAgIDogIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBMaW5lICAgOiAgTGluZV9Qb3NpdGlvbjsKKyAgICAgIENvbHVtbiA6ICBDb2x1bW5fUG9zaXRpb247CiAgICAgICBTdHIgICAgOiBvdXQgU3RyaW5nOwotICAgICAgTGVuICAgIDogaW4gIEludGVnZXIgOj0gLTEpCisgICAgICBMZW4gICAgOiAgSW50ZWdlciA6PSAtMSkKICAgIGlzCiAgICBiZWdpbgogICAgICAgTW92ZV9DdXJzb3IgKFdpbiwgTGluZSwgQ29sdW1uKTsKQEAgLTE3MjYsOSArMTczNyw5IEBACiAgICBlbmQgUGVlazsKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgcHJvY2VkdXJlIFBlZWsKLSAgICAgKFdpbiA6IGluICBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAoV2luIDogIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CiAgICAgICBTdHIgOiBvdXQgQXR0cmlidXRlZF9TdHJpbmc7Ci0gICAgICBMZW4gOiBpbiAgSW50ZWdlciA6PSAtMSkKKyAgICAgIExlbiA6ICBJbnRlZ2VyIDo9IC0xKQogICAgaXMKICAgICAgIGZ1bmN0aW9uIFdpbmNobnN0ciAoV2luIDogV2luZG93OwogICAgICAgICAgICAgICAgICAgICAgICAgICBTdHIgOiBjaHR5cGVfYXJyYXk7ICAgICAgICAgICAgIC0tIG91dApAQCAtMTc2MywyMCArMTc3NCwyMCBAQAogICAgZW5kIFBlZWs7CiAKICAgIHByb2NlZHVyZSBQZWVrCi0gICAgIChXaW4gICAgOiBpbiAgV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKLSAgICAgIExpbmUgICA6IGluICBMaW5lX1Bvc2l0aW9uOwotICAgICAgQ29sdW1uIDogaW4gIENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgKFdpbiAgICA6ICBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgTGluZSAgIDogIExpbmVfUG9zaXRpb247CisgICAgICBDb2x1bW4gOiAgQ29sdW1uX1Bvc2l0aW9uOwogICAgICAgU3RyICAgIDogb3V0IEF0dHJpYnV0ZWRfU3RyaW5nOwotICAgICAgTGVuICAgIDogaW4gSW50ZWdlciA6PSAtMSkKKyAgICAgIExlbiAgICA6IEludGVnZXIgOj0gLTEpCiAgICBpcwogICAgYmVnaW4KICAgICAgIE1vdmVfQ3Vyc29yIChXaW4sIExpbmUsIENvbHVtbik7CiAgICAgICBQZWVrIChXaW4sIFN0ciwgTGVuKTsKICAgIGVuZCBQZWVrOwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICBwcm9jZWR1cmUgR2V0IChXaW4gOiBpbiAgV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgIHByb2NlZHVyZSBHZXQgKFdpbiA6ICBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OwogICAgICAgICAgICAgICAgICAgU3RyIDogb3V0IFN0cmluZzsKLSAgICAgICAgICAgICAgICAgIExlbiA6IGluICBJbnRlZ2VyIDo9IC0xKQorICAgICAgICAgICAgICAgICAgTGVuIDogIEludGVnZXIgOj0gLTEpCiAgICBpcwogICAgICAgZnVuY3Rpb24gV2dldG5zdHIgKFdpbiA6IFdpbmRvdzsKICAgICAgICAgICAgICAgICAgICAgICAgICBTdHIgOiBjaGFyX2FycmF5OwpAQCAtMTgwNCwxMSArMTgxNSwxMSBAQAogICAgZW5kIEdldDsKIAogICAgcHJvY2VkdXJlIEdldAotICAgICAoV2luICAgIDogaW4gIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7Ci0gICAgICBMaW5lICAgOiBpbiAgTGluZV9Qb3NpdGlvbjsKLSAgICAgIENvbHVtbiA6IGluICBDb2x1bW5fUG9zaXRpb247CisgICAgIChXaW4gICAgOiAgV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIExpbmUgICA6ICBMaW5lX1Bvc2l0aW9uOworICAgICAgQ29sdW1uIDogIENvbHVtbl9Qb3NpdGlvbjsKICAgICAgIFN0ciAgICA6IG91dCBTdHJpbmc7Ci0gICAgICBMZW4gICAgOiBpbiAgSW50ZWdlciA6PSAtMSkKKyAgICAgIExlbiAgICA6ICBJbnRlZ2VyIDo9IC0xKQogICAgaXMKICAgIGJlZ2luCiAgICAgICBNb3ZlX0N1cnNvciAoV2luLCBMaW5lLCBDb2x1bW4pOwpAQCAtMTgxNiw3ICsxODI3LDcgQEAKICAgIGVuZCBHZXQ7CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIHByb2NlZHVyZSBJbml0X1NvZnRfTGFiZWxfS2V5cwotICAgICAoRm9ybWF0IDogaW4gU29mdF9MYWJlbF9LZXlfRm9ybWF0IDo9IFRocmVlX1R3b19UaHJlZSkKKyAgICAgKEZvcm1hdCA6IFNvZnRfTGFiZWxfS2V5X0Zvcm1hdCA6PSBUaHJlZV9Ud29fVGhyZWUpCiAgICBpcwogICAgICAgZnVuY3Rpb24gU2xrX0luaXQgKEZtdCA6IENfSW50KSByZXR1cm4gQ19JbnQ7CiAgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTbGtfSW5pdCwgInNsa19pbml0Iik7CkBAIC0xODI2LDkgKzE4MzcsOSBAQAogICAgICAgZW5kIGlmOwogICAgZW5kIEluaXRfU29mdF9MYWJlbF9LZXlzOwogCi0gICBwcm9jZWR1cmUgU2V0X1NvZnRfTGFiZWxfS2V5IChMYWJlbCA6IGluIExhYmVsX051bWJlcjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHQgIDogaW4gU3RyaW5nOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm10ICAgOiBpbiBMYWJlbF9KdXN0aWZpY2F0aW9uIDo9IExlZnQpCisgICBwcm9jZWR1cmUgU2V0X1NvZnRfTGFiZWxfS2V5IChMYWJlbCA6IExhYmVsX051bWJlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHQgIDogU3RyaW5nOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm10ICAgOiBMYWJlbF9KdXN0aWZpY2F0aW9uIDo9IExlZnQpCiAgICBpcwogICAgICAgZnVuY3Rpb24gU2xrX1NldCAoTGFiZWwgOiBDX0ludDsKICAgICAgICAgICAgICAgICAgICAgICAgIFR4dCAgIDogY2hhcl9hcnJheTsKQEAgLTE4NDAsNyArMTg1MSw4IEBACiAgICBiZWdpbgogICAgICAgVG9fQyAoVGV4dCwgVHh0LCBMZW4pOwogICAgICAgaWYgU2xrX1NldCAoQ19JbnQgKExhYmVsKSwgVHh0LAotICAgICAgICAgICAgICAgICAgQ19JbnQgKExhYmVsX0p1c3RpZmljYXRpb24nUG9zIChGbXQpKSkgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgICAgICAgICAgIENfSW50IChMYWJlbF9KdXN0aWZpY2F0aW9uJ1BvcyAoRm10KSkpID0gQ3Vyc2VzX0VycgorICAgICAgdGhlbgogICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKICAgICAgIGVuZCBpZjsKICAgIGVuZCBTZXRfU29mdF9MYWJlbF9LZXk7CkBAIC0xODY1LDcgKzE4NzcsNyBAQAogICAgICAgZW5kIGlmOwogICAgZW5kIFJlZnJlc2hfU29mdF9MYWJlbF9LZXlzX1dpdGhvdXRfVXBkYXRlOwogCi0gICBwcm9jZWR1cmUgR2V0X1NvZnRfTGFiZWxfS2V5IChMYWJlbCA6IGluIExhYmVsX051bWJlcjsKKyAgIHByb2NlZHVyZSBHZXRfU29mdF9MYWJlbF9LZXkgKExhYmVsIDogTGFiZWxfTnVtYmVyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dCAgOiBvdXQgU3RyaW5nKQogICAgaXMKICAgICAgIGZ1bmN0aW9uIFNsa19MYWJlbCAoTGFiZWwgOiBDX0ludCkgcmV0dXJuIGNoYXJzX3B0cjsKQEAgLTE4NzQsNyArMTg4Niw3IEBACiAgICAgICBGaWxsX1N0cmluZyAoU2xrX0xhYmVsIChDX0ludCAoTGFiZWwpKSwgVGV4dCk7CiAgICBlbmQgR2V0X1NvZnRfTGFiZWxfS2V5OwogCi0gICBmdW5jdGlvbiBHZXRfU29mdF9MYWJlbF9LZXkgKExhYmVsIDogaW4gTGFiZWxfTnVtYmVyKSByZXR1cm4gU3RyaW5nCisgICBmdW5jdGlvbiBHZXRfU29mdF9MYWJlbF9LZXkgKExhYmVsIDogTGFiZWxfTnVtYmVyKSByZXR1cm4gU3RyaW5nCiAgICBpcwogICAgICAgZnVuY3Rpb24gU2xrX0xhYmVsIChMYWJlbCA6IENfSW50KSByZXR1cm4gY2hhcnNfcHRyOwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2xrX0xhYmVsLCAic2xrX2xhYmVsIik7CkBAIC0xOTEzLDEyICsxOTI1LDEyIEBACiAgICBlbmQgVG91Y2hfU29mdF9MYWJlbF9LZXlzOwogCiAgICBwcm9jZWR1cmUgU3dpdGNoX1NvZnRfTGFiZWxfS2V5X0F0dHJpYnV0ZXMKLSAgICAgKEF0dHIgOiBpbiBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldDsKLSAgICAgIE9uICAgOiBpbiBCb29sZWFuIDo9IFRydWUpCisgICAgIChBdHRyIDogQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQ7CisgICAgICBPbiAgIDogQm9vbGVhbiA6PSBUcnVlKQogICAgaXMKLSAgICAgIGZ1bmN0aW9uIFNsa19BdHRyb24gKENoIDogQ19DaHR5cGUpIHJldHVybiBDX0ludDsKKyAgICAgIGZ1bmN0aW9uIFNsa19BdHRyb24gKENoIDogQXR0cmlidXRlZF9DaGFyYWN0ZXIpIHJldHVybiBDX0ludDsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNsa19BdHRyb24sICJzbGtfYXR0cm9uIik7Ci0gICAgICBmdW5jdGlvbiBTbGtfQXR0cm9mZiAoQ2ggOiBDX0NodHlwZSkgcmV0dXJuIENfSW50OworICAgICAgZnVuY3Rpb24gU2xrX0F0dHJvZmYgKENoIDogQXR0cmlidXRlZF9DaGFyYWN0ZXIpIHJldHVybiBDX0ludDsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNsa19BdHRyb2ZmLCAic2xrX2F0dHJvZmYiKTsKIAogICAgICAgRXJyIDogQ19JbnQ7CkBAIC0xOTI3LDkgKzE5MzksOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yID0+IENvbG9yX1BhaXInRmlyc3QpOwogICAgYmVnaW4KICAgICAgIGlmIE9uIHRoZW4KLSAgICAgICAgIEVyciA6PSBTbGtfQXR0cm9uICAoQXR0ckNoYXJfVG9fQ2h0eXBlIChDaCkpOworICAgICAgICAgRXJyIDo9IFNsa19BdHRyb24gIChDaCk7CiAgICAgICBlbHNlCi0gICAgICAgICBFcnIgOj0gU2xrX0F0dHJvZmYgKEF0dHJDaGFyX1RvX0NodHlwZSAoQ2gpKTsKKyAgICAgICAgIEVyciA6PSBTbGtfQXR0cm9mZiAoQ2gpOwogICAgICAgZW5kIGlmOwogICAgICAgaWYgRXJyID0gQ3Vyc2VzX0VyciB0aGVuCiAgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOwpAQCAtMTkzNyw0NCArMTk0OSw0NCBAQAogICAgZW5kIFN3aXRjaF9Tb2Z0X0xhYmVsX0tleV9BdHRyaWJ1dGVzOwogCiAgICBwcm9jZWR1cmUgU2V0X1NvZnRfTGFiZWxfS2V5X0F0dHJpYnV0ZXMKLSAgICAgKEF0dHIgIDogaW4gQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQgOj0gTm9ybWFsX1ZpZGVvOwotICAgICAgQ29sb3IgOiBpbiBDb2xvcl9QYWlyIDo9IENvbG9yX1BhaXInRmlyc3QpCisgICAgIChBdHRyICA6IENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0IDo9IE5vcm1hbF9WaWRlbzsKKyAgICAgIENvbG9yIDogQ29sb3JfUGFpciA6PSBDb2xvcl9QYWlyJ0ZpcnN0KQogICAgaXMKLSAgICAgIGZ1bmN0aW9uIFNsa19BdHRyc2V0IChDaCA6IENfQ2h0eXBlKSByZXR1cm4gQ19JbnQ7CisgICAgICBmdW5jdGlvbiBTbGtfQXR0cnNldCAoQ2ggOiBBdHRyaWJ1dGVkX0NoYXJhY3RlcikgcmV0dXJuIENfSW50OwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2xrX0F0dHJzZXQsICJzbGtfYXR0cnNldCIpOwogCiAgICAgICBDaCA6IGNvbnN0YW50IEF0dHJpYnV0ZWRfQ2hhcmFjdGVyIDo9IChDaCAgICA9PiBDaGFyYWN0ZXInRmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRyICA9PiBBdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3IgPT4gQ29sb3IpOwogICAgYmVnaW4KLSAgICAgIGlmIFNsa19BdHRyc2V0IChBdHRyQ2hhcl9Ub19DaHR5cGUgKENoKSkgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgIGlmIFNsa19BdHRyc2V0IChDaCkgPSBDdXJzZXNfRXJyIHRoZW4KICAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CiAgICAgICBlbmQgaWY7CiAgICBlbmQgU2V0X1NvZnRfTGFiZWxfS2V5X0F0dHJpYnV0ZXM7CiAKICAgIGZ1bmN0aW9uIEdldF9Tb2Z0X0xhYmVsX0tleV9BdHRyaWJ1dGVzIHJldHVybiBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldAogICAgaXMKLSAgICAgIGZ1bmN0aW9uIFNsa19BdHRyIHJldHVybiBDX0NodHlwZTsKKyAgICAgIGZ1bmN0aW9uIFNsa19BdHRyIHJldHVybiBBdHRyaWJ1dGVkX0NoYXJhY3RlcjsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNsa19BdHRyLCAic2xrX2F0dHIiKTsKIAotICAgICAgQXR0ciA6IGNvbnN0YW50IENfQ2h0eXBlIDo9IFNsa19BdHRyOworICAgICAgQXR0ciA6IGNvbnN0YW50IEF0dHJpYnV0ZWRfQ2hhcmFjdGVyIDo9IFNsa19BdHRyOwogICAgYmVnaW4KLSAgICAgIHJldHVybiBDaHR5cGVfVG9fQXR0ckNoYXIgKEF0dHIpLkF0dHI7CisgICAgICByZXR1cm4gQXR0ci5BdHRyOwogICAgZW5kIEdldF9Tb2Z0X0xhYmVsX0tleV9BdHRyaWJ1dGVzOwogCiAgICBmdW5jdGlvbiBHZXRfU29mdF9MYWJlbF9LZXlfQXR0cmlidXRlcyByZXR1cm4gQ29sb3JfUGFpcgogICAgaXMKLSAgICAgIGZ1bmN0aW9uIFNsa19BdHRyIHJldHVybiBDX0NodHlwZTsKKyAgICAgIGZ1bmN0aW9uIFNsa19BdHRyIHJldHVybiBBdHRyaWJ1dGVkX0NoYXJhY3RlcjsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNsa19BdHRyLCAic2xrX2F0dHIiKTsKIAotICAgICAgQXR0ciA6IGNvbnN0YW50IENfQ2h0eXBlIDo9IFNsa19BdHRyOworICAgICAgQXR0ciA6IGNvbnN0YW50IEF0dHJpYnV0ZWRfQ2hhcmFjdGVyIDo9IFNsa19BdHRyOwogICAgYmVnaW4KLSAgICAgIHJldHVybiBDaHR5cGVfVG9fQXR0ckNoYXIgKEF0dHIpLkNvbG9yOworICAgICAgcmV0dXJuIEF0dHIuQ29sb3I7CiAgICBlbmQgR2V0X1NvZnRfTGFiZWxfS2V5X0F0dHJpYnV0ZXM7CiAKLSAgIHByb2NlZHVyZSBTZXRfU29mdF9MYWJlbF9LZXlfQ29sb3IgKFBhaXIgOiBpbiBDb2xvcl9QYWlyKQorICAgcHJvY2VkdXJlIFNldF9Tb2Z0X0xhYmVsX0tleV9Db2xvciAoUGFpciA6IENvbG9yX1BhaXIpCiAgICBpcwotICAgICAgZnVuY3Rpb24gU2xrX0NvbG9yIChDb2xvciA6IGluIENfU2hvcnQpIHJldHVybiBDX0ludDsKKyAgICAgIGZ1bmN0aW9uIFNsa19Db2xvciAoQ29sb3IgOiBDX1Nob3J0KSByZXR1cm4gQ19JbnQ7CiAgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTbGtfQ29sb3IsICJzbGtfY29sb3IiKTsKICAgIGJlZ2luCiAgICAgICBpZiBTbGtfQ29sb3IgKENfU2hvcnQgKFBhaXIpKSA9IEN1cnNlc19FcnIgdGhlbgpAQCAtMTk4MywyMSArMTk5NSwyMiBAQAogICAgZW5kIFNldF9Tb2Z0X0xhYmVsX0tleV9Db2xvcjsKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICBwcm9jZWR1cmUgRW5hYmxlX0tleSAoS2V5ICAgIDogaW4gU3BlY2lhbF9LZXlfQ29kZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICBFbmFibGUgOiBpbiBCb29sZWFuIDo9IFRydWUpCisgICBwcm9jZWR1cmUgRW5hYmxlX0tleSAoS2V5ICAgIDogU3BlY2lhbF9LZXlfQ29kZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBFbmFibGUgOiBCb29sZWFuIDo9IFRydWUpCiAgICBpcwogICAgICAgZnVuY3Rpb24gS2V5b2sgKEtleWNvZGUgOiBDX0ludDsKICAgICAgICAgICAgICAgICAgICAgICBPbl9PZmYgIDogQ3Vyc2VzX0Jvb2wpIHJldHVybiBDX0ludDsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEtleW9rLCAia2V5b2siKTsKICAgIGJlZ2luCiAgICAgICBpZiBLZXlvayAoQ19JbnQgKEtleSksIEN1cnNlc19Cb29sIChCb29sZWFuJ1BvcyAoRW5hYmxlKSkpCi0gICAgICAgID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgID0gQ3Vyc2VzX0VycgorICAgICAgdGhlbgogICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKICAgICAgIGVuZCBpZjsKICAgIGVuZCBFbmFibGVfS2V5OwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICBwcm9jZWR1cmUgRGVmaW5lX0tleSAoRGVmaW5pdGlvbiA6IGluIFN0cmluZzsKLSAgICAgICAgICAgICAgICAgICAgICAgICBLZXkgICAgICAgIDogaW4gU3BlY2lhbF9LZXlfQ29kZSkKKyAgIHByb2NlZHVyZSBEZWZpbmVfS2V5IChEZWZpbml0aW9uIDogU3RyaW5nOworICAgICAgICAgICAgICAgICAgICAgICAgIEtleSAgICAgICAgOiBTcGVjaWFsX0tleV9Db2RlKQogICAgaXMKICAgICAgIGZ1bmN0aW9uIERlZmtleSAoRGVmIDogY2hhcl9hcnJheTsKICAgICAgICAgICAgICAgICAgICAgICAgS2V5IDogQ19JbnQpIHJldHVybiBDX0ludDsKQEAgLTIwMTIsMjQgKzIwMjUsMjQgQEAKICAgICAgIGVuZCBpZjsKICAgIGVuZCBEZWZpbmVfS2V5OwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICBwcm9jZWR1cmUgVW5fQ29udHJvbCAoQ2ggIDogaW4gQXR0cmlidXRlZF9DaGFyYWN0ZXI7CisgICBwcm9jZWR1cmUgVW5fQ29udHJvbCAoQ2ggIDogQXR0cmlidXRlZF9DaGFyYWN0ZXI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyIDogb3V0IFN0cmluZykKICAgIGlzCi0gICAgICBmdW5jdGlvbiBVbmN0cmwgKENoIDogQ19DaHR5cGUpIHJldHVybiBjaGFyc19wdHI7CisgICAgICBmdW5jdGlvbiBVbmN0cmwgKENoIDogQXR0cmlidXRlZF9DaGFyYWN0ZXIpIHJldHVybiBjaGFyc19wdHI7CiAgICAgICBwcmFnbWEgSW1wb3J0IChDLCBVbmN0cmwsICJ1bmN0cmwiKTsKICAgIGJlZ2luCi0gICAgICBGaWxsX1N0cmluZyAoVW5jdHJsIChBdHRyQ2hhcl9Ub19DaHR5cGUgKENoKSksIFN0cik7CisgICAgICBGaWxsX1N0cmluZyAoVW5jdHJsIChDaCksIFN0cik7CiAgICBlbmQgVW5fQ29udHJvbDsKIAotICAgZnVuY3Rpb24gVW5fQ29udHJvbCAoQ2ggOiBpbiBBdHRyaWJ1dGVkX0NoYXJhY3RlcikgcmV0dXJuIFN0cmluZworICAgZnVuY3Rpb24gVW5fQ29udHJvbCAoQ2ggOiBBdHRyaWJ1dGVkX0NoYXJhY3RlcikgcmV0dXJuIFN0cmluZwogICAgaXMKLSAgICAgIGZ1bmN0aW9uIFVuY3RybCAoQ2ggOiBDX0NodHlwZSkgcmV0dXJuIGNoYXJzX3B0cjsKKyAgICAgIGZ1bmN0aW9uIFVuY3RybCAoQ2ggOiBBdHRyaWJ1dGVkX0NoYXJhY3RlcikgcmV0dXJuIGNoYXJzX3B0cjsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFVuY3RybCwgInVuY3RybCIpOwogICAgYmVnaW4KLSAgICAgIHJldHVybiBGaWxsX1N0cmluZyAoVW5jdHJsIChBdHRyQ2hhcl9Ub19DaHR5cGUgKENoKSkpOworICAgICAgcmV0dXJuIEZpbGxfU3RyaW5nIChVbmN0cmwgKENoKSk7CiAgICBlbmQgVW5fQ29udHJvbDsKIAotICAgcHJvY2VkdXJlIERlbGF5X091dHB1dCAoTXNlY3MgOiBpbiBOYXR1cmFsKQorICAgcHJvY2VkdXJlIERlbGF5X091dHB1dCAoTXNlY3MgOiBOYXR1cmFsKQogICAgaXMKICAgICAgIGZ1bmN0aW9uIERlbGF5b3V0cHV0IChNc2VjcyA6IENfSW50KSByZXR1cm4gQ19JbnQ7CiAgICAgICBwcmFnbWEgSW1wb3J0IChDLCBEZWxheW91dHB1dCwgImRlbGF5X291dHB1dCIpOwpAQCAtMjA5OSwxMCArMjExMiwxMCBAQAogCiAgICBmdW5jdGlvbiBTdXBwb3J0ZWRfQXR0cmlidXRlcyByZXR1cm4gQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQKICAgIGlzCi0gICAgICBmdW5jdGlvbiBUZXJtYXR0cnMgcmV0dXJuIENfQ2h0eXBlOworICAgICAgZnVuY3Rpb24gVGVybWF0dHJzIHJldHVybiBBdHRyaWJ1dGVkX0NoYXJhY3RlcjsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFRlcm1hdHRycywgInRlcm1hdHRycyIpOwogCi0gICAgICBDaCA6IGNvbnN0YW50IEF0dHJpYnV0ZWRfQ2hhcmFjdGVyIDo9IENodHlwZV9Ub19BdHRyQ2hhciAoVGVybWF0dHJzKTsKKyAgICAgIENoIDogY29uc3RhbnQgQXR0cmlidXRlZF9DaGFyYWN0ZXIgOj0gVGVybWF0dHJzOwogICAgYmVnaW4KICAgICAgIHJldHVybiBDaC5BdHRyOwogICAgZW5kIFN1cHBvcnRlZF9BdHRyaWJ1dGVzOwpAQCAtMjEzOSw5ICsyMTUyLDkgQEAKICAgICAgIHJldHVybiBGaWxsX1N0cmluZyAoVGVybW5hbWUpOwogICAgZW5kIFRlcm1pbmFsX05hbWU7CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgIHByb2NlZHVyZSBJbml0X1BhaXIgKFBhaXIgOiBpbiBSZWRlZmluYWJsZV9Db2xvcl9QYWlyOwotICAgICAgICAgICAgICAgICAgICAgICAgRm9yZSA6IGluIENvbG9yX051bWJlcjsKLSAgICAgICAgICAgICAgICAgICAgICAgIEJhY2sgOiBpbiBDb2xvcl9OdW1iZXIpCisgICBwcm9jZWR1cmUgSW5pdF9QYWlyIChQYWlyIDogUmVkZWZpbmFibGVfQ29sb3JfUGFpcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIEZvcmUgOiBDb2xvcl9OdW1iZXI7CisgICAgICAgICAgICAgICAgICAgICAgICBCYWNrIDogQ29sb3JfTnVtYmVyKQogICAgaXMKICAgICAgIGZ1bmN0aW9uIEluaXRwYWlyIChQYWlyIDogQ19TaG9ydDsKICAgICAgICAgICAgICAgICAgICAgICAgICBGb3JlIDogQ19TaG9ydDsKQEAgLTIxNTIsMTYgKzIxNjUsMTggQEAKICAgICAgICAgIHJhaXNlIENvbnN0cmFpbnRfRXJyb3I7CiAgICAgICBlbmQgaWY7CiAgICAgICBpZiBJbnRlZ2VyIChGb3JlKSA+PSBOdW1iZXJfT2ZfQ29sb3JzIG9yIGVsc2UKLSAgICAgICAgIEludGVnZXIgKEJhY2spID49IE51bWJlcl9PZl9Db2xvcnMgdGhlbgorICAgICAgICAgSW50ZWdlciAoQmFjaykgPj0gTnVtYmVyX09mX0NvbG9ycworICAgICAgdGhlbgogICAgICAgICAgcmFpc2UgQ29uc3RyYWludF9FcnJvcjsKICAgICAgIGVuZCBpZjsKICAgICAgIGlmIEluaXRwYWlyIChDX1Nob3J0IChQYWlyKSwgQ19TaG9ydCAoRm9yZSksIENfU2hvcnQgKEJhY2spKQotICAgICAgICA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICA9IEN1cnNlc19FcnIKKyAgICAgIHRoZW4KICAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CiAgICAgICBlbmQgaWY7CiAgICBlbmQgSW5pdF9QYWlyOwogCi0gICBwcm9jZWR1cmUgUGFpcl9Db250ZW50IChQYWlyIDogaW4gQ29sb3JfUGFpcjsKKyAgIHByb2NlZHVyZSBQYWlyX0NvbnRlbnQgKFBhaXIgOiBDb2xvcl9QYWlyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yZSA6IG91dCBDb2xvcl9OdW1iZXI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYWNrIDogb3V0IENvbG9yX051bWJlcikKICAgIGlzCkBAIC0yMTkzLDEwICsyMjA4LDEwIEBACiAgICAgICBlbmQgaWY7CiAgICBlbmQgSGFzX0NvbG9yczsKIAotICAgcHJvY2VkdXJlIEluaXRfQ29sb3IgKENvbG9yIDogaW4gQ29sb3JfTnVtYmVyOwotICAgICAgICAgICAgICAgICAgICAgICAgIFJlZCAgIDogaW4gUkdCX1ZhbHVlOwotICAgICAgICAgICAgICAgICAgICAgICAgIEdyZWVuIDogaW4gUkdCX1ZhbHVlOwotICAgICAgICAgICAgICAgICAgICAgICAgIEJsdWUgIDogaW4gUkdCX1ZhbHVlKQorICAgcHJvY2VkdXJlIEluaXRfQ29sb3IgKENvbG9yIDogQ29sb3JfTnVtYmVyOworICAgICAgICAgICAgICAgICAgICAgICAgIFJlZCAgIDogUkdCX1ZhbHVlOworICAgICAgICAgICAgICAgICAgICAgICAgIEdyZWVuIDogUkdCX1ZhbHVlOworICAgICAgICAgICAgICAgICAgICAgICAgIEJsdWUgIDogUkdCX1ZhbHVlKQogICAgaXMKICAgICAgIGZ1bmN0aW9uIEluaXRjb2xvciAoQ29sICAgOiBDX1Nob3J0OwogICAgICAgICAgICAgICAgICAgICAgICAgICBSZWQgICA6IENfU2hvcnQ7CkBAIC0yMjA1LDcgKzIyMjAsOCBAQAogICAgICAgcHJhZ21hIEltcG9ydCAoQywgSW5pdGNvbG9yLCAiaW5pdF9jb2xvciIpOwogICAgYmVnaW4KICAgICAgIGlmIEluaXRjb2xvciAoQ19TaG9ydCAoQ29sb3IpLCBDX1Nob3J0IChSZWQpLCBDX1Nob3J0IChHcmVlbiksCi0gICAgICAgICAgICAgICAgICAgIENfU2hvcnQgKEJsdWUpKSA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgICAgICAgICAgICBDX1Nob3J0IChCbHVlKSkgPSBDdXJzZXNfRXJyCisgICAgICB0aGVuCiAgICAgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOwogICAgICAgZW5kIGlmOwogICAgZW5kIEluaXRfQ29sb3I7CkBAIC0yMjIyLDcgKzIyMzgsNyBAQAogICAgICAgZW5kIGlmOwogICAgZW5kIENhbl9DaGFuZ2VfQ29sb3I7CiAKLSAgIHByb2NlZHVyZSBDb2xvcl9Db250ZW50IChDb2xvciA6IGluICBDb2xvcl9OdW1iZXI7CisgICBwcm9jZWR1cmUgQ29sb3JfQ29udGVudCAoQ29sb3IgOiAgQ29sb3JfTnVtYmVyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZCAgIDogb3V0IFJHQl9WYWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmVlbiA6IG91dCBSR0JfVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmx1ZSAgOiBvdXQgUkdCX1ZhbHVlKQpAQCAtMjIzNiw3ICsyMjUyLDggQEAKICAgICAgIFIsIEcsIEIgOiBhbGlhc2VkIENfU2hvcnQ7CiAgICBiZWdpbgogICAgICAgaWYgQ29sb3Jjb250ZW50IChDX1Nob3J0IChDb2xvciksIFInQWNjZXNzLCBHJ0FjY2VzcywgQidBY2Nlc3MpID0KLSAgICAgICAgQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgIEN1cnNlc19FcnIKKyAgICAgIHRoZW4KICAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CiAgICAgICBlbHNlCiAgICAgICAgICBSZWQgICA6PSBSR0JfVmFsdWUgKFIpOwpAQCAtMjI0Niw3ICsyMjYzLDcgQEAKICAgIGVuZCBDb2xvcl9Db250ZW50OwogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgIHByb2NlZHVyZSBTYXZlX0N1cnNlc19Nb2RlIChNb2RlIDogaW4gQ3Vyc2VzX01vZGUpCisgICBwcm9jZWR1cmUgU2F2ZV9DdXJzZXNfTW9kZSAoTW9kZSA6IEN1cnNlc19Nb2RlKQogICAgaXMKICAgICAgIGZ1bmN0aW9uIERlZl9Qcm9nX01vZGUgcmV0dXJuIENfSW50OwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgRGVmX1Byb2dfTW9kZSwgImRlZl9wcm9nX21vZGUiKTsKQEAgLTIyNjQsNyArMjI4MSw3IEBACiAgICAgICBlbmQgaWY7CiAgICBlbmQgU2F2ZV9DdXJzZXNfTW9kZTsKIAotICAgcHJvY2VkdXJlIFJlc2V0X0N1cnNlc19Nb2RlIChNb2RlIDogaW4gQ3Vyc2VzX01vZGUpCisgICBwcm9jZWR1cmUgUmVzZXRfQ3Vyc2VzX01vZGUgKE1vZGUgOiBDdXJzZXNfTW9kZSkKICAgIGlzCiAgICAgICBmdW5jdGlvbiBSZXNldF9Qcm9nX01vZGUgcmV0dXJuIENfSW50OwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgUmVzZXRfUHJvZ19Nb2RlLCAicmVzZXRfcHJvZ19tb2RlIik7CkBAIC0yMzAyLDggKzIzMTksOCBAQAogICAgICAgZW5kIGlmOwogICAgZW5kIFJlc2V0X1Rlcm1pbmFsX1N0YXRlOwogCi0gICBwcm9jZWR1cmUgUmlwX09mZl9MaW5lcyAoTGluZXMgOiBpbiBJbnRlZ2VyOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2MgIDogaW4gU3Rkc2NyX0luaXRfUHJvYykKKyAgIHByb2NlZHVyZSBSaXBfT2ZmX0xpbmVzIChMaW5lcyA6IEludGVnZXI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYyAgOiBTdGRzY3JfSW5pdF9Qcm9jKQogICAgaXMKICAgICAgIGZ1bmN0aW9uIFJpcG9mZmxpbmUgKExpbmVzIDogQ19JbnQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jICA6IFN0ZHNjcl9Jbml0X1Byb2MpIHJldHVybiBDX0ludDsKQEAgLTIzMjcsNyArMjM0NCw3IEBACiAgICAgICBlbmQgaWY7CiAgICBlbmQgU2V0X0N1cnNvcl9WaXNpYmlsaXR5OwogCi0gICBwcm9jZWR1cmUgTmFwX01pbGxpX1NlY29uZHMgKE1zIDogaW4gTmF0dXJhbCkKKyAgIHByb2NlZHVyZSBOYXBfTWlsbGlfU2Vjb25kcyAoTXMgOiBOYXR1cmFsKQogICAgaXMKICAgICAgIGZ1bmN0aW9uIE5hcG1zIChNcyA6IENfSW50KSByZXR1cm4gQ19JbnQ7CiAgICAgICBwcmFnbWEgSW1wb3J0IChDLCBOYXBtcywgIm5hcG1zIik7CkBAIC0yMzM3LDEzICsyMzU0LDUyIEBACiAgICAgICBlbmQgaWY7CiAgICBlbmQgTmFwX01pbGxpX1NlY29uZHM7CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWluY2x1ZGUoYFB1YmxpY19WYXJpYWJsZXMnKQorICAgZnVuY3Rpb24gTGluZXMgcmV0dXJuIExpbmVfQ291bnQKKyAgIGlzCisgICAgICBmdW5jdGlvbiBMSU5FU19Bc19GdW5jdGlvbiByZXR1cm4gSW50ZXJmYWNlcy5DLmludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIExJTkVTX0FzX0Z1bmN0aW9uLCAiTElORVNfYXNfZnVuY3Rpb24iKTsKKyAgIGJlZ2luCisgICAgICByZXR1cm4gTGluZV9Db3VudCAoTElORVNfQXNfRnVuY3Rpb24pOworICAgZW5kIExpbmVzOworCisgICBmdW5jdGlvbiBDb2x1bW5zIHJldHVybiBDb2x1bW5fQ291bnQKKyAgIGlzCisgICAgICBmdW5jdGlvbiBDT0xTX0FzX0Z1bmN0aW9uIHJldHVybiBJbnRlcmZhY2VzLkMuaW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgQ09MU19Bc19GdW5jdGlvbiwgIkNPTFNfYXNfZnVuY3Rpb24iKTsKKyAgIGJlZ2luCisgICAgICByZXR1cm4gQ29sdW1uX0NvdW50IChDT0xTX0FzX0Z1bmN0aW9uKTsKKyAgIGVuZCBDb2x1bW5zOworCisgICBmdW5jdGlvbiBUYWJfU2l6ZSByZXR1cm4gTmF0dXJhbAorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFRBQlNJWkVfQXNfRnVuY3Rpb24gcmV0dXJuIEludGVyZmFjZXMuQy5pbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBUQUJTSVpFX0FzX0Z1bmN0aW9uLCAiVEFCU0laRV9hc19mdW5jdGlvbiIpOworCisgICBiZWdpbgorICAgICAgcmV0dXJuIE5hdHVyYWwgKFRBQlNJWkVfQXNfRnVuY3Rpb24pOworICAgZW5kIFRhYl9TaXplOworCisgICBmdW5jdGlvbiBOdW1iZXJfT2ZfQ29sb3JzIHJldHVybiBOYXR1cmFsCisgICBpcworICAgICAgZnVuY3Rpb24gQ09MT1JTX0FzX0Z1bmN0aW9uIHJldHVybiBJbnRlcmZhY2VzLkMuaW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgQ09MT1JTX0FzX0Z1bmN0aW9uLCAiQ09MT1JTX2FzX2Z1bmN0aW9uIik7CisgICBiZWdpbgorICAgICAgcmV0dXJuIE5hdHVyYWwgKENPTE9SU19Bc19GdW5jdGlvbik7CisgICBlbmQgTnVtYmVyX09mX0NvbG9yczsKKworICAgZnVuY3Rpb24gTnVtYmVyX09mX0NvbG9yX1BhaXJzIHJldHVybiBOYXR1cmFsCisgICBpcworICAgICAgZnVuY3Rpb24gQ09MT1JfUEFJUlNfQXNfRnVuY3Rpb24gcmV0dXJuIEludGVyZmFjZXMuQy5pbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBDT0xPUl9QQUlSU19Bc19GdW5jdGlvbiwgIkNPTE9SX1BBSVJTX2FzX2Z1bmN0aW9uIik7CisgICBiZWdpbgorICAgICAgcmV0dXJuIE5hdHVyYWwgKENPTE9SX1BBSVJTX0FzX0Z1bmN0aW9uKTsKKyAgIGVuZCBOdW1iZXJfT2ZfQ29sb3JfUGFpcnM7CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIHByb2NlZHVyZSBUcmFuc2Zvcm1fQ29vcmRpbmF0ZXMKLSAgICAgKFcgICAgICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgIChXICAgICAgOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OwogICAgICAgTGluZSAgIDogaW4gb3V0IExpbmVfUG9zaXRpb247CiAgICAgICBDb2x1bW4gOiBpbiBvdXQgQ29sdW1uX1Bvc2l0aW9uOwotICAgICAgRGlyICAgIDogaW4gVHJhbnNmb3JtX0RpcmVjdGlvbiA6PSBGcm9tX1NjcmVlbikKKyAgICAgIERpciAgICA6IFRyYW5zZm9ybV9EaXJlY3Rpb24gOj0gRnJvbV9TY3JlZW4pCiAgICBpcwogICAgICAgdHlwZSBJbnRfQWNjZXNzIGlzIGFjY2VzcyBhbGwgQ19JbnQ7CiAgICAgICBmdW5jdGlvbiBUcmFuc2Zvcm0gKFcgICAgOiBXaW5kb3c7CkBAIC0yNDMxLDcgKzI0ODcsNyBAQAogICAgICAgZW5kIGlmOwogICAgZW5kIFVzZV9FeHRlbmRlZF9OYW1lczsKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgcHJvY2VkdXJlIFNjcmVlbl9EdW1wX1RvX0ZpbGUgKEZpbGVuYW1lIDogaW4gU3RyaW5nKQorICAgcHJvY2VkdXJlIFNjcmVlbl9EdW1wX1RvX0ZpbGUgKEZpbGVuYW1lIDogU3RyaW5nKQogICAgaXMKICAgICAgIGZ1bmN0aW9uIHNjcl9kdW1wIChmIDogY2hhcl9hcnJheSkgcmV0dXJuIENfSW50OwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgc2NyX2R1bXAsICJzY3JfZHVtcCIpOwpAQCAtMjQ0NCw3ICsyNTAwLDcgQEAKICAgICAgIGVuZCBpZjsKICAgIGVuZCBTY3JlZW5fRHVtcF9Ub19GaWxlOwogCi0gICBwcm9jZWR1cmUgU2NyZWVuX1Jlc3RvcmVfRnJvbV9GaWxlIChGaWxlbmFtZSA6IGluIFN0cmluZykKKyAgIHByb2NlZHVyZSBTY3JlZW5fUmVzdG9yZV9Gcm9tX0ZpbGUgKEZpbGVuYW1lIDogU3RyaW5nKQogICAgaXMKICAgICAgIGZ1bmN0aW9uIHNjcl9yZXN0b3JlIChmIDogY2hhcl9hcnJheSkgcmV0dXJuIENfSW50OwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgc2NyX3Jlc3RvcmUsICJzY3JfcmVzdG9yZSIpOwpAQCAtMjQ1Nyw3ICsyNTEzLDcgQEAKICAgICAgIGVuZCBpZjsKICAgIGVuZCBTY3JlZW5fUmVzdG9yZV9Gcm9tX0ZpbGU7CiAKLSAgIHByb2NlZHVyZSBTY3JlZW5fSW5pdF9Gcm9tX0ZpbGUgKEZpbGVuYW1lIDogaW4gU3RyaW5nKQorICAgcHJvY2VkdXJlIFNjcmVlbl9Jbml0X0Zyb21fRmlsZSAoRmlsZW5hbWUgOiBTdHJpbmcpCiAgICBpcwogICAgICAgZnVuY3Rpb24gc2NyX2luaXQgKGYgOiBjaGFyX2FycmF5KSByZXR1cm4gQ19JbnQ7CiAgICAgICBwcmFnbWEgSW1wb3J0IChDLCBzY3JfaW5pdCwgInNjcl9pbml0Iik7CkBAIC0yNDcwLDcgKzI1MjYsNyBAQAogICAgICAgZW5kIGlmOwogICAgZW5kIFNjcmVlbl9Jbml0X0Zyb21fRmlsZTsKIAotICAgcHJvY2VkdXJlIFNjcmVlbl9TZXRfRmlsZSAoRmlsZW5hbWUgOiBpbiBTdHJpbmcpCisgICBwcm9jZWR1cmUgU2NyZWVuX1NldF9GaWxlIChGaWxlbmFtZSA6IFN0cmluZykKICAgIGlzCiAgICAgICBmdW5jdGlvbiBzY3Jfc2V0IChmIDogY2hhcl9hcnJheSkgcmV0dXJuIENfSW50OwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgc2NyX3NldCwgInNjcl9zZXQiKTsKQEAgLTI0OTMsNyArMjU0OSw4IEBACiAgICBiZWdpbgogICAgICAgaWYgd3Jlc2l6ZSAoV2luLAogICAgICAgICAgICAgICAgICAgQ19JbnQgKE51bWJlcl9PZl9MaW5lcyksCi0gICAgICAgICAgICAgICAgICBDX0ludCAoTnVtYmVyX09mX0NvbHVtbnMpKSA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgICAgICAgICAgQ19JbnQgKE51bWJlcl9PZl9Db2x1bW5zKSkgPSBDdXJzZXNfRXJyCisgICAgICB0aGVuCiAgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOwogICAgICAgZW5kIGlmOwogICAgZW5kIFJlc2l6ZTsKZGlmZiAtLWdpdCBhL0FkYTk1L2dlbi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLmFkcy5tNCBiL0FkYTk1L2dlbi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLmFkcy5tNAppbmRleCA0YWJjNTVlLi4yNWJiNWQ5IDEwMDY0NAotLS0gYS9BZGE5NS9nZW4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZHMubTQKKysrIGIvQWRhOTUvZ2VuL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRzLm00CkBAIC05LDcgKzksNyBAQAogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAxMSwyMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCiAtLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KQEAgLTM3LDIzICszNywyOCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CiAtLSAgVmVyc2lvbiBDb250cm9sOgotLS0gICRSZXZpc2lvbjogMS40MSAkCi0tLSAgJERhdGU6IDIwMDcvMDUvMDUgMjA6MzM6NTIgJAorLS0gICRSZXZpc2lvbjogMS40NyAkCistLSAgJERhdGU6IDIwMTQvMDUvMjQgMjE6MzE6NTcgJAogLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1pbmNsdWRlKGBCYXNlX0RlZnMnKQogd2l0aCBTeXN0ZW0uU3RvcmFnZV9FbGVtZW50czsKIHdpdGggSW50ZXJmYWNlcy5DOyAgIC0tICBXZSBuZWVkIHRoaXMgZm9yIHNvbWUgYXNzZXJ0aW9ucy4KIAord2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzX0NvbnN0YW50czsKKwogcGFja2FnZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzIGlzCiAgICBwcmFnbWEgUHJlZWxhYm9yYXRlIChUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzKTsKLWluY2x1ZGUoYExpbmtlcl9PcHRpb25zJykKLWluY2x1ZGUoYFZlcnNpb25fSW5mbycpCisgICBwcmFnbWEgTGlua2VyX09wdGlvbnMgKCItbG5jdXJzZXMiICYgQ3Vyc2VzX0NvbnN0YW50cy5ERlRfQVJHX1NVRkZJWCk7CisKKyAgIE1ham9yX1ZlcnNpb24gOiBjb25zdGFudCA6PSBDdXJzZXNfQ29uc3RhbnRzLk5DVVJTRVNfVkVSU0lPTl9NQUpPUjsKKyAgIE1pbm9yX1ZlcnNpb24gOiBjb25zdGFudCA6PSBDdXJzZXNfQ29uc3RhbnRzLk5DVVJTRVNfVkVSU0lPTl9NSU5PUjsKKyAgIE5DX1ZlcnNpb24gOiBTdHJpbmcgcmVuYW1lcyBDdXJzZXNfQ29uc3RhbnRzLlZlcnNpb247CisKICAgIHR5cGUgV2luZG93IGlzIHByaXZhdGU7CiAgICBOdWxsX1dpbmRvdyA6IGNvbnN0YW50IFdpbmRvdzsKIAotICAgdHlwZSBMaW5lX1Bvc2l0aW9uICAgaXMgbmV3IE5hdHVyYWw7IC0tICBsaW5lIGNvb3JkaW5hdGUKLSAgIHR5cGUgQ29sdW1uX1Bvc2l0aW9uIGlzIG5ldyBOYXR1cmFsOyAtLSAgY29sdW1uIGNvb3JkaW5hdGUKKyAgIHR5cGUgTGluZV9Qb3NpdGlvbiAgIGlzIG5ldyBJbnRlZ2VyOyAtLSAgbGluZSBjb29yZGluYXRlCisgICB0eXBlIENvbHVtbl9Qb3NpdGlvbiBpcyBuZXcgSW50ZWdlcjsgLS0gIGNvbHVtbiBjb29yZGluYXRlCiAKICAgIHN1YnR5cGUgTGluZV9Db3VudCAgIGlzIExpbmVfUG9zaXRpb24gICByYW5nZSAxIC4uIExpbmVfUG9zaXRpb24nTGFzdDsKICAgIC0tICBUeXBlIHRvIGNvdW50IGxpbmVzLiBXZSBkbyBub3QgYWxsb3cgbnVsbCB3aW5kb3dzLCBzbyBtdXN0IGJlIHBvc2l0aXZlCkBAIC02NSwyNCArNzAsMzE1IEBACiAgICAtLSAgcmVxdWVzdCBjb2Rlcy4KIAogICAgLS0gIEZJWE1FOiBUaGUgIi0xIiBzaG91bGQgYmUgQ3Vyc2VzX0VycgotICAgc3VidHlwZSBSZWFsX0tleV9Db2RlIGlzIEtleV9Db2RlIHJhbmdlIC0xIC4uIE00X0tFWV9NQVg7CisgICBzdWJ0eXBlIFJlYWxfS2V5X0NvZGUgaXMgS2V5X0NvZGUgcmFuZ2UgLTEgLi4gQ3Vyc2VzX0NvbnN0YW50cy5LRVlfTUFYOwogICAgLS0gIFRoaXMgYXJlIHRoZSBjb2RlcyB0aGF0IHBvdGVudGlhbGx5IHJlcHJlc2VudCBhIHJlYWwga2V5c3Ryb2tlLgogICAgLS0gIE5vdCBhbGwgY29kZXMgbWF5IGJlIHBvc3NpYmxlIG9uIGEgc3BlY2lmaWMgdGVybWluYWwuIFRvIGNoZWNrIHRoZQogICAgLS0gIGF2YWlsYWJpbGl0eSBvZiBhIHNwZWNpYWwga2V5LCB0aGUgSGFzX0tleSBmdW5jdGlvbiBpcyBwcm92aWRlZC4KIAogICAgc3VidHlwZSBTcGVjaWFsX0tleV9Db2RlIGlzIFJlYWxfS2V5X0NvZGUKLSAgICAgcmFuZ2UgTTRfU1BFQ0lBTF9GSVJTVCAuLiBSZWFsX0tleV9Db2RlJ0xhc3Q7CisgICAgIHJhbmdlIEN1cnNlc19Db25zdGFudHMuIEtFWV9NSU4gLSAxIC4uIFJlYWxfS2V5X0NvZGUnTGFzdDsKICAgIC0tICBUeXBlIGZvciBhIGZ1bmN0aW9uLSBvciBzcGVjaWFsIGtleSBudW1iZXIKIAogICAgc3VidHlwZSBOb3JtYWxfS2V5X0NvZGUgaXMgUmVhbF9LZXlfQ29kZSByYW5nZQogICAgICBDaGFyYWN0ZXInUG9zIChDaGFyYWN0ZXInRmlyc3QpIC4uIENoYXJhY3RlcidQb3MgKENoYXJhY3RlcidMYXN0KTsKICAgIC0tICBUaGlzIGFyZSB0aGUgY29kZXMgZm9yIHJlZ3VsYXIgKGluY2wuIG5vbi1ncmFwaGljYWwpIGNoYXJhY3RlcnMuCiAKKyAgIC0tICBGb3IgdGhvc2Ugd2hvIGxpa2UgdG8gdXNlIHRoZSBvcmlnaW5hbCBrZXkgbmFtZXMgd2UgcHJvZHVjZSB0aGVtIHdlcmUKKyAgIC0tICB0aGV5IGRpZmZlciBmcm9tIHRoZSBvcmlnaW5hbC4KKwogICAgLS0gIENvbnN0YW50cyBmb3IgZnVuY3Rpb24tIGFuZCBzcGVjaWFsIGtleXMKLSAgIC0tCi0gICBLZXlfTm9uZSAgICAgICAgICAgICAgICAgICAgICAgOiBjb25zdGFudCBTcGVjaWFsX0tleV9Db2RlIDo9IE00X1NQRUNJQUxfRklSU1Q7Ci1pbmNsdWRlKGBLZXlfRGVmaW5pdGlvbnMnKQotICAgS2V5X01heCAgICAgICAgICAgICAgICAgICAgICAgIDogY29uc3RhbnQgU3BlY2lhbF9LZXlfQ29kZQorICAgS2V5X05vbmUgICAgICAgICAgICAgICAgICAgIDogY29uc3RhbnQgU3BlY2lhbF9LZXlfQ29kZQorICAgICA6PSBDdXJzZXNfQ29uc3RhbnRzLktFWV9NSU4gLSAxOworICAgS2V5X01pbiAgICAgICAgICAgICAgICAgICAgIDogY29uc3RhbnQgU3BlY2lhbF9LZXlfQ29kZQorICAgICA6PSBDdXJzZXNfQ29uc3RhbnRzLktFWV9NSU47CisgICBLZXlfQnJlYWsgICAgICAgICAgICAgICAgICAgOiBjb25zdGFudCBTcGVjaWFsX0tleV9Db2RlCisgICAgIDo9IEN1cnNlc19Db25zdGFudHMuS0VZX0JSRUFLOworICAgS0VZX0RPV04gICAgICAgICAgICAgICAgICAgIDogY29uc3RhbnQgU3BlY2lhbF9LZXlfQ29kZQorICAgICA6PSBDdXJzZXNfQ29uc3RhbnRzLktFWV9ET1dOOworICAgS2V5X0N1cnNvcl9Eb3duICAgICAgICAgICAgIDogU3BlY2lhbF9LZXlfQ29kZSByZW5hbWVzIEtFWV9ET1dOOworICAgS0VZX1VQICAgICAgICAgICAgICAgICAgICAgIDogY29uc3RhbnQgU3BlY2lhbF9LZXlfQ29kZQorICAgICA6PSBDdXJzZXNfQ29uc3RhbnRzLktFWV9VUDsKKyAgIEtleV9DdXJzb3JfVXAgICAgICAgICAgICAgICA6IFNwZWNpYWxfS2V5X0NvZGUgcmVuYW1lcyBLRVlfVVA7CisgICBLRVlfTEVGVCAgICAgICAgICAgICAgICAgICAgOiBjb25zdGFudCBTcGVjaWFsX0tleV9Db2RlCisgICAgIDo9IEN1cnNlc19Db25zdGFudHMuS0VZX0xFRlQ7CisgICBLZXlfQ3Vyc29yX0xlZnQgICAgICAgICAgICAgOiBTcGVjaWFsX0tleV9Db2RlIHJlbmFtZXMgS0VZX0xFRlQ7CisgICBLRVlfUklHSFQgICAgICAgICAgICAgICAgICAgOiBjb25zdGFudCBTcGVjaWFsX0tleV9Db2RlCisgICAgIDo9IEN1cnNlc19Db25zdGFudHMuS0VZX1JJR0hUOworICAgS2V5X0N1cnNvcl9SaWdodCAgICAgICAgICAgIDogU3BlY2lhbF9LZXlfQ29kZSByZW5hbWVzIEtFWV9SSUdIVDsKKyAgIEtleV9Ib21lICAgICAgICAgICAgICAgICAgICA6IGNvbnN0YW50IFNwZWNpYWxfS2V5X0NvZGUKKyAgICAgOj0gQ3Vyc2VzX0NvbnN0YW50cy5LRVlfSE9NRTsKKyAgIEtleV9CYWNrc3BhY2UgICAgICAgICAgICAgICA6IGNvbnN0YW50IFNwZWNpYWxfS2V5X0NvZGUKKyAgICAgOj0gQ3Vyc2VzX0NvbnN0YW50cy5LRVlfQkFDS1NQQUNFOworICAgS2V5X0YwICAgICAgICAgICAgICAgICAgICAgIDogY29uc3RhbnQgU3BlY2lhbF9LZXlfQ29kZQorICAgICA6PSBDdXJzZXNfQ29uc3RhbnRzLktFWV9GMDsKKyAgIEtleV9GMSAgICAgICAgICAgICAgICAgICAgICA6IGNvbnN0YW50IFNwZWNpYWxfS2V5X0NvZGUKKyAgICAgOj0gQ3Vyc2VzX0NvbnN0YW50cy5LRVlfRjE7CisgICBLZXlfRjIgICAgICAgICAgICAgICAgICAgICAgOiBjb25zdGFudCBTcGVjaWFsX0tleV9Db2RlCisgICAgIDo9IEN1cnNlc19Db25zdGFudHMuS0VZX0YyOworICAgS2V5X0YzICAgICAgICAgICAgICAgICAgICAgIDogY29uc3RhbnQgU3BlY2lhbF9LZXlfQ29kZQorICAgICA6PSBDdXJzZXNfQ29uc3RhbnRzLktFWV9GMzsKKyAgIEtleV9GNCAgICAgICAgICAgICAgICAgICAgICA6IGNvbnN0YW50IFNwZWNpYWxfS2V5X0NvZGUKKyAgICAgOj0gQ3Vyc2VzX0NvbnN0YW50cy5LRVlfRjQ7CisgICBLZXlfRjUgICAgICAgICAgICAgICAgICAgICAgOiBjb25zdGFudCBTcGVjaWFsX0tleV9Db2RlCisgICAgIDo9IEN1cnNlc19Db25zdGFudHMuS0VZX0Y1OworICAgS2V5X0Y2ICAgICAgICAgICAgICAgICAgICAgIDogY29uc3RhbnQgU3BlY2lhbF9LZXlfQ29kZQorICAgICA6PSBDdXJzZXNfQ29uc3RhbnRzLktFWV9GNjsKKyAgIEtleV9GNyAgICAgICAgICAgICAgICAgICAgICA6IGNvbnN0YW50IFNwZWNpYWxfS2V5X0NvZGUKKyAgICAgOj0gQ3Vyc2VzX0NvbnN0YW50cy5LRVlfRjc7CisgICBLZXlfRjggICAgICAgICAgICAgICAgICAgICAgOiBjb25zdGFudCBTcGVjaWFsX0tleV9Db2RlCisgICAgIDo9IEN1cnNlc19Db25zdGFudHMuS0VZX0Y4OworICAgS2V5X0Y5ICAgICAgICAgICAgICAgICAgICAgIDogY29uc3RhbnQgU3BlY2lhbF9LZXlfQ29kZQorICAgICA6PSBDdXJzZXNfQ29uc3RhbnRzLktFWV9GOTsKKyAgIEtleV9GMTAgICAgICAgICAgICAgICAgICAgICA6IGNvbnN0YW50IFNwZWNpYWxfS2V5X0NvZGUKKyAgICAgOj0gQ3Vyc2VzX0NvbnN0YW50cy5LRVlfRjEwOworICAgS2V5X0YxMSAgICAgICAgICAgICAgICAgICAgIDogY29uc3RhbnQgU3BlY2lhbF9LZXlfQ29kZQorICAgICA6PSBDdXJzZXNfQ29uc3RhbnRzLktFWV9GMTE7CisgICBLZXlfRjEyICAgICAgICAgICAgICAgICAgICAgOiBjb25zdGFudCBTcGVjaWFsX0tleV9Db2RlCisgICAgIDo9IEN1cnNlc19Db25zdGFudHMuS0VZX0YxMjsKKyAgIEtleV9GMTMgICAgICAgICAgICAgICAgICAgICA6IGNvbnN0YW50IFNwZWNpYWxfS2V5X0NvZGUKKyAgICAgOj0gQ3Vyc2VzX0NvbnN0YW50cy5LRVlfRjEzOworICAgS2V5X0YxNCAgICAgICAgICAgICAgICAgICAgIDogY29uc3RhbnQgU3BlY2lhbF9LZXlfQ29kZQorICAgICA6PSBDdXJzZXNfQ29uc3RhbnRzLktFWV9GMTQ7CisgICBLZXlfRjE1ICAgICAgICAgICAgICAgICAgICAgOiBjb25zdGFudCBTcGVjaWFsX0tleV9Db2RlCisgICAgIDo9IEN1cnNlc19Db25zdGFudHMuS0VZX0YxNTsKKyAgIEtleV9GMTYgICAgICAgICAgICAgICAgICAgICA6IGNvbnN0YW50IFNwZWNpYWxfS2V5X0NvZGUKKyAgICAgOj0gQ3Vyc2VzX0NvbnN0YW50cy5LRVlfRjE2OworICAgS2V5X0YxNyAgICAgICAgICAgICAgICAgICAgIDogY29uc3RhbnQgU3BlY2lhbF9LZXlfQ29kZQorICAgICA6PSBDdXJzZXNfQ29uc3RhbnRzLktFWV9GMTc7CisgICBLZXlfRjE4ICAgICAgICAgICAgICAgICAgICAgOiBjb25zdGFudCBTcGVjaWFsX0tleV9Db2RlCisgICAgIDo9IEN1cnNlc19Db25zdGFudHMuS0VZX0YxODsKKyAgIEtleV9GMTkgICAgICAgICAgICAgICAgICAgICA6IGNvbnN0YW50IFNwZWNpYWxfS2V5X0NvZGUKKyAgICAgOj0gQ3Vyc2VzX0NvbnN0YW50cy5LRVlfRjE5OworICAgS2V5X0YyMCAgICAgICAgICAgICAgICAgICAgIDogY29uc3RhbnQgU3BlY2lhbF9LZXlfQ29kZQorICAgICA6PSBDdXJzZXNfQ29uc3RhbnRzLktFWV9GMjA7CisgICBLZXlfRjIxICAgICAgICAgICAgICAgICAgICAgOiBjb25zdGFudCBTcGVjaWFsX0tleV9Db2RlCisgICAgIDo9IEN1cnNlc19Db25zdGFudHMuS0VZX0YyMTsKKyAgIEtleV9GMjIgICAgICAgICAgICAgICAgICAgICA6IGNvbnN0YW50IFNwZWNpYWxfS2V5X0NvZGUKKyAgICAgOj0gQ3Vyc2VzX0NvbnN0YW50cy5LRVlfRjIyOworICAgS2V5X0YyMyAgICAgICAgICAgICAgICAgICAgIDogY29uc3RhbnQgU3BlY2lhbF9LZXlfQ29kZQorICAgICA6PSBDdXJzZXNfQ29uc3RhbnRzLktFWV9GMjM7CisgICBLZXlfRjI0ICAgICAgICAgICAgICAgICAgICAgOiBjb25zdGFudCBTcGVjaWFsX0tleV9Db2RlCisgICAgIDo9IEN1cnNlc19Db25zdGFudHMuS0VZX0YyNDsKKyAgIEtFWV9ETCAgICAgICAgICAgICAgICAgICAgICA6IGNvbnN0YW50IFNwZWNpYWxfS2V5X0NvZGUKKyAgICAgOj0gQ3Vyc2VzX0NvbnN0YW50cy5LRVlfREw7CisgICBLZXlfRGVsZXRlX0xpbmUgICAgICAgICAgICAgOiBTcGVjaWFsX0tleV9Db2RlIHJlbmFtZXMgS0VZX0RMOworICAgS0VZX0lMICAgICAgICAgICAgICAgICAgICAgIDogY29uc3RhbnQgU3BlY2lhbF9LZXlfQ29kZQorICAgICA6PSBDdXJzZXNfQ29uc3RhbnRzLktFWV9JTDsKKyAgIEtleV9JbnNlcnRfTGluZSAgICAgICAgICAgICA6IFNwZWNpYWxfS2V5X0NvZGUgcmVuYW1lcyBLRVlfSUw7CisgICBLRVlfREMgICAgICAgICAgICAgICAgICAgICAgOiBjb25zdGFudCBTcGVjaWFsX0tleV9Db2RlCisgICAgIDo9IEN1cnNlc19Db25zdGFudHMuS0VZX0RDOworICAgS2V5X0RlbGV0ZV9DaGFyICAgICAgICAgICAgIDogU3BlY2lhbF9LZXlfQ29kZSByZW5hbWVzIEtFWV9EQzsKKyAgIEtFWV9JQyAgICAgICAgICAgICAgICAgICAgICA6IGNvbnN0YW50IFNwZWNpYWxfS2V5X0NvZGUKKyAgICAgOj0gQ3Vyc2VzX0NvbnN0YW50cy5LRVlfSUM7CisgICBLZXlfSW5zZXJ0X0NoYXIgICAgICAgICAgICAgOiBTcGVjaWFsX0tleV9Db2RlIHJlbmFtZXMgS0VZX0lDOworICAgS0VZX0VJQyAgICAgICAgICAgICAgICAgICAgIDogY29uc3RhbnQgU3BlY2lhbF9LZXlfQ29kZQorICAgICA6PSBDdXJzZXNfQ29uc3RhbnRzLktFWV9FSUM7CisgICBLZXlfRXhpdF9JbnNlcnRfTW9kZSAgICAgICAgOiBTcGVjaWFsX0tleV9Db2RlIHJlbmFtZXMgS0VZX0VJQzsKKyAgIEtFWV9DTEVBUiAgICAgICAgICAgICAgICAgICA6IGNvbnN0YW50IFNwZWNpYWxfS2V5X0NvZGUKKyAgICAgOj0gQ3Vyc2VzX0NvbnN0YW50cy5LRVlfQ0xFQVI7CisgICBLZXlfQ2xlYXJfU2NyZWVuICAgICAgICAgICAgOiBTcGVjaWFsX0tleV9Db2RlIHJlbmFtZXMgS0VZX0NMRUFSOworICAgS0VZX0VPUyAgICAgICAgICAgICAgICAgICAgIDogY29uc3RhbnQgU3BlY2lhbF9LZXlfQ29kZQorICAgICA6PSBDdXJzZXNfQ29uc3RhbnRzLktFWV9FT1M7CisgICBLZXlfQ2xlYXJfRW5kX09mX1NjcmVlbiAgICAgOiBTcGVjaWFsX0tleV9Db2RlIHJlbmFtZXMgS0VZX0VPUzsKKyAgIEtFWV9FT0wgICAgICAgICAgICAgICAgICAgICA6IGNvbnN0YW50IFNwZWNpYWxfS2V5X0NvZGUKKyAgICAgOj0gQ3Vyc2VzX0NvbnN0YW50cy5LRVlfRU9MOworICAgS2V5X0NsZWFyX0VuZF9PZl9MaW5lICAgICAgIDogU3BlY2lhbF9LZXlfQ29kZSByZW5hbWVzIEtFWV9FT0w7CisgICBLRVlfU0YgICAgICAgICAgICAgICAgICAgICAgOiBjb25zdGFudCBTcGVjaWFsX0tleV9Db2RlCisgICAgIDo9IEN1cnNlc19Db25zdGFudHMuS0VZX1NGOworICAgS2V5X1Njcm9sbF8xX0ZvcndhcmQgICAgICAgIDogU3BlY2lhbF9LZXlfQ29kZSByZW5hbWVzIEtFWV9TRjsKKyAgIEtFWV9TUiAgICAgICAgICAgICAgICAgICAgICA6IGNvbnN0YW50IFNwZWNpYWxfS2V5X0NvZGUKKyAgICAgOj0gQ3Vyc2VzX0NvbnN0YW50cy5LRVlfU1I7CisgICBLZXlfU2Nyb2xsXzFfQmFja3dhcmQgICAgICAgOiBTcGVjaWFsX0tleV9Db2RlIHJlbmFtZXMgS0VZX1NSOworICAgS0VZX05QQUdFICAgICAgICAgICAgICAgICAgIDogY29uc3RhbnQgU3BlY2lhbF9LZXlfQ29kZQorICAgICA6PSBDdXJzZXNfQ29uc3RhbnRzLktFWV9OUEFHRTsKKyAgIEtleV9OZXh0X1BhZ2UgICAgICAgICAgICAgICA6IFNwZWNpYWxfS2V5X0NvZGUgcmVuYW1lcyBLRVlfTlBBR0U7CisgICBLRVlfUFBBR0UgICAgICAgICAgICAgICAgICAgOiBjb25zdGFudCBTcGVjaWFsX0tleV9Db2RlCisgICAgIDo9IEN1cnNlc19Db25zdGFudHMuS0VZX1BQQUdFOworICAgS2V5X1ByZXZpb3VzX1BhZ2UgICAgICAgICAgIDogU3BlY2lhbF9LZXlfQ29kZSByZW5hbWVzIEtFWV9QUEFHRTsKKyAgIEtFWV9TVEFCICAgICAgICAgICAgICAgICAgICA6IGNvbnN0YW50IFNwZWNpYWxfS2V5X0NvZGUKKyAgICAgOj0gQ3Vyc2VzX0NvbnN0YW50cy5LRVlfU1RBQjsKKyAgIEtleV9TZXRfVGFiICAgICAgICAgICAgICAgICA6IFNwZWNpYWxfS2V5X0NvZGUgcmVuYW1lcyBLRVlfU1RBQjsKKyAgIEtFWV9DVEFCICAgICAgICAgICAgICAgICAgICA6IGNvbnN0YW50IFNwZWNpYWxfS2V5X0NvZGUKKyAgICAgOj0gQ3Vyc2VzX0NvbnN0YW50cy5LRVlfQ1RBQjsKKyAgIEtleV9DbGVhcl9UYWIgICAgICAgICAgICAgICA6IFNwZWNpYWxfS2V5X0NvZGUgcmVuYW1lcyBLRVlfQ1RBQjsKKyAgIEtFWV9DQVRBQiAgICAgICAgICAgICAgICAgICA6IGNvbnN0YW50IFNwZWNpYWxfS2V5X0NvZGUKKyAgICAgOj0gQ3Vyc2VzX0NvbnN0YW50cy5LRVlfQ0FUQUI7CisgICBLZXlfQ2xlYXJfQWxsX1RhYnMgICAgICAgICAgOiBTcGVjaWFsX0tleV9Db2RlIHJlbmFtZXMgS0VZX0NBVEFCOworICAgS0VZX0VOVEVSICAgICAgICAgICAgICAgICAgIDogY29uc3RhbnQgU3BlY2lhbF9LZXlfQ29kZQorICAgICA6PSBDdXJzZXNfQ29uc3RhbnRzLktFWV9FTlRFUjsKKyAgIEtleV9FbnRlcl9Pcl9TZW5kICAgICAgICAgICA6IFNwZWNpYWxfS2V5X0NvZGUgcmVuYW1lcyBLRVlfRU5URVI7CisgICBLRVlfU1JFU0VUICAgICAgICAgICAgICAgICAgOiBjb25zdGFudCBTcGVjaWFsX0tleV9Db2RlCisgICAgIDo9IEN1cnNlc19Db25zdGFudHMuS0VZX1NSRVNFVDsKKyAgIEtleV9Tb2Z0X1Jlc2V0ICAgICAgICAgICAgICA6IFNwZWNpYWxfS2V5X0NvZGUgcmVuYW1lcyBLRVlfU1JFU0VUOworICAgS2V5X1Jlc2V0ICAgICAgICAgICAgICAgICAgIDogY29uc3RhbnQgU3BlY2lhbF9LZXlfQ29kZQorICAgICA6PSBDdXJzZXNfQ29uc3RhbnRzLktFWV9SRVNFVDsKKyAgIEtleV9QcmludCAgICAgICAgICAgICAgICAgICA6IGNvbnN0YW50IFNwZWNpYWxfS2V5X0NvZGUKKyAgICAgOj0gQ3Vyc2VzX0NvbnN0YW50cy5LRVlfUFJJTlQ7CisgICBLRVlfTEwgICAgICAgICAgICAgICAgICAgICAgOiBjb25zdGFudCBTcGVjaWFsX0tleV9Db2RlCisgICAgIDo9IEN1cnNlc19Db25zdGFudHMuS0VZX0xMOworICAgS2V5X0JvdHRvbSAgICAgICAgICAgICAgICAgIDogU3BlY2lhbF9LZXlfQ29kZSByZW5hbWVzIEtFWV9MTDsKKyAgIEtFWV9BMSAgICAgICAgICAgICAgICAgICAgICA6IGNvbnN0YW50IFNwZWNpYWxfS2V5X0NvZGUKKyAgICAgOj0gQ3Vyc2VzX0NvbnN0YW50cy5LRVlfQTE7CisgICBLZXlfVXBwZXJfTGVmdF9PZl9LZXlwYWQgICAgOiBTcGVjaWFsX0tleV9Db2RlIHJlbmFtZXMgS0VZX0ExOworICAgS0VZX0EzICAgICAgICAgICAgICAgICAgICAgIDogY29uc3RhbnQgU3BlY2lhbF9LZXlfQ29kZQorICAgICA6PSBDdXJzZXNfQ29uc3RhbnRzLktFWV9BMzsKKyAgIEtleV9VcHBlcl9SaWdodF9PZl9LZXlwYWQgICA6IFNwZWNpYWxfS2V5X0NvZGUgcmVuYW1lcyBLRVlfQTM7CisgICBLRVlfQjIgICAgICAgICAgICAgICAgICAgICAgOiBjb25zdGFudCBTcGVjaWFsX0tleV9Db2RlCisgICAgIDo9IEN1cnNlc19Db25zdGFudHMuS0VZX0IyOworICAgS2V5X0NlbnRlcl9PZl9LZXlwYWQgICAgICAgIDogU3BlY2lhbF9LZXlfQ29kZSByZW5hbWVzIEtFWV9CMjsKKyAgIEtFWV9DMSAgICAgICAgICAgICAgICAgICAgICA6IGNvbnN0YW50IFNwZWNpYWxfS2V5X0NvZGUKKyAgICAgOj0gQ3Vyc2VzX0NvbnN0YW50cy5LRVlfQzE7CisgICBLZXlfTG93ZXJfTGVmdF9PZl9LZXlwYWQgICAgOiBTcGVjaWFsX0tleV9Db2RlIHJlbmFtZXMgS0VZX0MxOworICAgS0VZX0MzICAgICAgICAgICAgICAgICAgICAgIDogY29uc3RhbnQgU3BlY2lhbF9LZXlfQ29kZQorICAgICA6PSBDdXJzZXNfQ29uc3RhbnRzLktFWV9DMzsKKyAgIEtleV9Mb3dlcl9SaWdodF9PZl9LZXlwYWQgICA6IFNwZWNpYWxfS2V5X0NvZGUgcmVuYW1lcyBLRVlfQzM7CisgICBLRVlfQlRBQiAgICAgICAgICAgICAgICAgICAgOiBjb25zdGFudCBTcGVjaWFsX0tleV9Db2RlCisgICAgIDo9IEN1cnNlc19Db25zdGFudHMuS0VZX0JUQUI7CisgICBLZXlfQmFja19UYWIgICAgICAgICAgICAgICAgOiBTcGVjaWFsX0tleV9Db2RlIHJlbmFtZXMgS0VZX0JUQUI7CisgICBLRVlfQkVHICAgICAgICAgICAgICAgICAgICAgOiBjb25zdGFudCBTcGVjaWFsX0tleV9Db2RlCisgICAgIDo9IEN1cnNlc19Db25zdGFudHMuS0VZX0JFRzsKKyAgIEtleV9CZWdpbm5pbmcgICAgICAgICAgICAgICA6IFNwZWNpYWxfS2V5X0NvZGUgcmVuYW1lcyBLRVlfQkVHOworICAgS2V5X0NhbmNlbCAgICAgICAgICAgICAgICAgIDogY29uc3RhbnQgU3BlY2lhbF9LZXlfQ29kZQorICAgICA6PSBDdXJzZXNfQ29uc3RhbnRzLktFWV9DQU5DRUw7CisgICBLZXlfQ2xvc2UgICAgICAgICAgICAgICAgICAgOiBjb25zdGFudCBTcGVjaWFsX0tleV9Db2RlCisgICAgIDo9IEN1cnNlc19Db25zdGFudHMuS0VZX0NMT1NFOworICAgS2V5X0NvbW1hbmQgICAgICAgICAgICAgICAgIDogY29uc3RhbnQgU3BlY2lhbF9LZXlfQ29kZQorICAgICA6PSBDdXJzZXNfQ29uc3RhbnRzLktFWV9DT01NQU5EOworICAgS2V5X0NvcHkgICAgICAgICAgICAgICAgICAgIDogY29uc3RhbnQgU3BlY2lhbF9LZXlfQ29kZQorICAgICA6PSBDdXJzZXNfQ29uc3RhbnRzLktFWV9DT1BZOworICAgS2V5X0NyZWF0ZSAgICAgICAgICAgICAgICAgIDogY29uc3RhbnQgU3BlY2lhbF9LZXlfQ29kZQorICAgICA6PSBDdXJzZXNfQ29uc3RhbnRzLktFWV9DUkVBVEU7CisgICBLZXlfRW5kICAgICAgICAgICAgICAgICAgICAgOiBjb25zdGFudCBTcGVjaWFsX0tleV9Db2RlCisgICAgIDo9IEN1cnNlc19Db25zdGFudHMuS0VZX0VORDsKKyAgIEtleV9FeGl0ICAgICAgICAgICAgICAgICAgICA6IGNvbnN0YW50IFNwZWNpYWxfS2V5X0NvZGUKKyAgICAgOj0gQ3Vyc2VzX0NvbnN0YW50cy5LRVlfRVhJVDsKKyAgIEtleV9GaW5kICAgICAgICAgICAgICAgICAgICA6IGNvbnN0YW50IFNwZWNpYWxfS2V5X0NvZGUKKyAgICAgOj0gQ3Vyc2VzX0NvbnN0YW50cy5LRVlfRklORDsKKyAgIEtleV9IZWxwICAgICAgICAgICAgICAgICAgICA6IGNvbnN0YW50IFNwZWNpYWxfS2V5X0NvZGUKKyAgICAgOj0gQ3Vyc2VzX0NvbnN0YW50cy5LRVlfSEVMUDsKKyAgIEtleV9NYXJrICAgICAgICAgICAgICAgICAgICA6IGNvbnN0YW50IFNwZWNpYWxfS2V5X0NvZGUKKyAgICAgOj0gQ3Vyc2VzX0NvbnN0YW50cy5LRVlfTUFSSzsKKyAgIEtleV9NZXNzYWdlICAgICAgICAgICAgICAgICA6IGNvbnN0YW50IFNwZWNpYWxfS2V5X0NvZGUKKyAgICAgOj0gQ3Vyc2VzX0NvbnN0YW50cy5LRVlfTUVTU0FHRTsKKyAgIEtleV9Nb3ZlICAgICAgICAgICAgICAgICAgICA6IGNvbnN0YW50IFNwZWNpYWxfS2V5X0NvZGUKKyAgICAgOj0gQ3Vyc2VzX0NvbnN0YW50cy5LRVlfTU9WRTsKKyAgIEtleV9OZXh0ICAgICAgICAgICAgICAgICAgICA6IGNvbnN0YW50IFNwZWNpYWxfS2V5X0NvZGUKKyAgICAgOj0gQ3Vyc2VzX0NvbnN0YW50cy5LRVlfTkVYVDsKKyAgIEtleV9PcGVuICAgICAgICAgICAgICAgICAgICA6IGNvbnN0YW50IFNwZWNpYWxfS2V5X0NvZGUKKyAgICAgOj0gQ3Vyc2VzX0NvbnN0YW50cy5LRVlfT1BFTjsKKyAgIEtleV9PcHRpb25zICAgICAgICAgICAgICAgICA6IGNvbnN0YW50IFNwZWNpYWxfS2V5X0NvZGUKKyAgICAgOj0gQ3Vyc2VzX0NvbnN0YW50cy5LRVlfT1BUSU9OUzsKKyAgIEtleV9QcmV2aW91cyAgICAgICAgICAgICAgICA6IGNvbnN0YW50IFNwZWNpYWxfS2V5X0NvZGUKKyAgICAgOj0gQ3Vyc2VzX0NvbnN0YW50cy5LRVlfUFJFVklPVVM7CisgICBLZXlfUmVkbyAgICAgICAgICAgICAgICAgICAgOiBjb25zdGFudCBTcGVjaWFsX0tleV9Db2RlCisgICAgIDo9IEN1cnNlc19Db25zdGFudHMuS0VZX1JFRE87CisgICBLZXlfUmVmZXJlbmNlICAgICAgICAgICAgICAgOiBjb25zdGFudCBTcGVjaWFsX0tleV9Db2RlCisgICAgIDo9IEN1cnNlc19Db25zdGFudHMuS0VZX1JFRkVSRU5DRTsKKyAgIEtleV9SZWZyZXNoICAgICAgICAgICAgICAgICA6IGNvbnN0YW50IFNwZWNpYWxfS2V5X0NvZGUKKyAgICAgOj0gQ3Vyc2VzX0NvbnN0YW50cy5LRVlfUkVGUkVTSDsKKyAgIEtleV9SZXBsYWNlICAgICAgICAgICAgICAgICA6IGNvbnN0YW50IFNwZWNpYWxfS2V5X0NvZGUKKyAgICAgOj0gQ3Vyc2VzX0NvbnN0YW50cy5LRVlfUkVQTEFDRTsKKyAgIEtleV9SZXN0YXJ0ICAgICAgICAgICAgICAgICA6IGNvbnN0YW50IFNwZWNpYWxfS2V5X0NvZGUKKyAgICAgOj0gQ3Vyc2VzX0NvbnN0YW50cy5LRVlfUkVTVEFSVDsKKyAgIEtleV9SZXN1bWUgICAgICAgICAgICAgICAgICA6IGNvbnN0YW50IFNwZWNpYWxfS2V5X0NvZGUKKyAgICAgOj0gQ3Vyc2VzX0NvbnN0YW50cy5LRVlfUkVTVU1FOworICAgS2V5X1NhdmUgICAgICAgICAgICAgICAgICAgIDogY29uc3RhbnQgU3BlY2lhbF9LZXlfQ29kZQorICAgICA6PSBDdXJzZXNfQ29uc3RhbnRzLktFWV9TQVZFOworICAgS0VZX1NCRUcgICAgICAgICAgICAgICAgICAgIDogY29uc3RhbnQgU3BlY2lhbF9LZXlfQ29kZQorICAgICA6PSBDdXJzZXNfQ29uc3RhbnRzLktFWV9TQkVHOworICAgS2V5X1NoaWZ0X0JlZ2luICAgICAgICAgICAgIDogU3BlY2lhbF9LZXlfQ29kZSByZW5hbWVzIEtFWV9TQkVHOworICAgS0VZX1NDQU5DRUwgICAgICAgICAgICAgICAgIDogY29uc3RhbnQgU3BlY2lhbF9LZXlfQ29kZQorICAgICA6PSBDdXJzZXNfQ29uc3RhbnRzLktFWV9TQ0FOQ0VMOworICAgS2V5X1NoaWZ0X0NhbmNlbCAgICAgICAgICAgIDogU3BlY2lhbF9LZXlfQ29kZSByZW5hbWVzIEtFWV9TQ0FOQ0VMOworICAgS0VZX1NDT01NQU5EICAgICAgICAgICAgICAgIDogY29uc3RhbnQgU3BlY2lhbF9LZXlfQ29kZQorICAgICA6PSBDdXJzZXNfQ29uc3RhbnRzLktFWV9TQ09NTUFORDsKKyAgIEtleV9TaGlmdF9Db21tYW5kICAgICAgICAgICA6IFNwZWNpYWxfS2V5X0NvZGUgcmVuYW1lcyBLRVlfU0NPTU1BTkQ7CisgICBLRVlfU0NPUFkgICAgICAgICAgICAgICAgICAgOiBjb25zdGFudCBTcGVjaWFsX0tleV9Db2RlCisgICAgIDo9IEN1cnNlc19Db25zdGFudHMuS0VZX1NDT1BZOworICAgS2V5X1NoaWZ0X0NvcHkgICAgICAgICAgICAgIDogU3BlY2lhbF9LZXlfQ29kZSByZW5hbWVzIEtFWV9TQ09QWTsKKyAgIEtFWV9TQ1JFQVRFICAgICAgICAgICAgICAgICA6IGNvbnN0YW50IFNwZWNpYWxfS2V5X0NvZGUKKyAgICAgOj0gQ3Vyc2VzX0NvbnN0YW50cy5LRVlfU0NSRUFURTsKKyAgIEtleV9TaGlmdF9DcmVhdGUgICAgICAgICAgICA6IFNwZWNpYWxfS2V5X0NvZGUgcmVuYW1lcyBLRVlfU0NSRUFURTsKKyAgIEtFWV9TREMgICAgICAgICAgICAgICAgICAgICA6IGNvbnN0YW50IFNwZWNpYWxfS2V5X0NvZGUKKyAgICAgOj0gQ3Vyc2VzX0NvbnN0YW50cy5LRVlfU0RDOworICAgS2V5X1NoaWZ0X0RlbGV0ZV9DaGFyICAgICAgIDogU3BlY2lhbF9LZXlfQ29kZSByZW5hbWVzIEtFWV9TREM7CisgICBLRVlfU0RMICAgICAgICAgICAgICAgICAgICAgOiBjb25zdGFudCBTcGVjaWFsX0tleV9Db2RlCisgICAgIDo9IEN1cnNlc19Db25zdGFudHMuS0VZX1NETDsKKyAgIEtleV9TaGlmdF9EZWxldGVfTGluZSAgICAgICA6IFNwZWNpYWxfS2V5X0NvZGUgcmVuYW1lcyBLRVlfU0RMOworICAgS2V5X1NlbGVjdCAgICAgICAgICAgICAgICAgIDogY29uc3RhbnQgU3BlY2lhbF9LZXlfQ29kZQorICAgICA6PSBDdXJzZXNfQ29uc3RhbnRzLktFWV9TRUxFQ1Q7CisgICBLRVlfU0VORCAgICAgICAgICAgICAgICAgICAgOiBjb25zdGFudCBTcGVjaWFsX0tleV9Db2RlCisgICAgIDo9IEN1cnNlc19Db25zdGFudHMuS0VZX1NFTkQ7CisgICBLZXlfU2hpZnRfRW5kICAgICAgICAgICAgICAgOiBTcGVjaWFsX0tleV9Db2RlIHJlbmFtZXMgS0VZX1NFTkQ7CisgICBLRVlfU0VPTCAgICAgICAgICAgICAgICAgICAgOiBjb25zdGFudCBTcGVjaWFsX0tleV9Db2RlCisgICAgIDo9IEN1cnNlc19Db25zdGFudHMuS0VZX1NFT0w7CisgICBLZXlfU2hpZnRfQ2xlYXJfRW5kX09mX0xpbmUgOiBTcGVjaWFsX0tleV9Db2RlIHJlbmFtZXMgS0VZX1NFT0w7CisgICBLRVlfU0VYSVQgICAgICAgICAgICAgICAgICAgOiBjb25zdGFudCBTcGVjaWFsX0tleV9Db2RlCisgICAgIDo9IEN1cnNlc19Db25zdGFudHMuS0VZX1NFWElUOworICAgS2V5X1NoaWZ0X0V4aXQgICAgICAgICAgICAgIDogU3BlY2lhbF9LZXlfQ29kZSByZW5hbWVzIEtFWV9TRVhJVDsKKyAgIEtFWV9TRklORCAgICAgICAgICAgICAgICAgICA6IGNvbnN0YW50IFNwZWNpYWxfS2V5X0NvZGUKKyAgICAgOj0gQ3Vyc2VzX0NvbnN0YW50cy5LRVlfU0ZJTkQ7CisgICBLZXlfU2hpZnRfRmluZCAgICAgICAgICAgICAgOiBTcGVjaWFsX0tleV9Db2RlIHJlbmFtZXMgS0VZX1NGSU5EOworICAgS0VZX1NIRUxQICAgICAgICAgICAgICAgICAgIDogY29uc3RhbnQgU3BlY2lhbF9LZXlfQ29kZQorICAgICA6PSBDdXJzZXNfQ29uc3RhbnRzLktFWV9TSEVMUDsKKyAgIEtleV9TaGlmdF9IZWxwICAgICAgICAgICAgICA6IFNwZWNpYWxfS2V5X0NvZGUgcmVuYW1lcyBLRVlfU0hFTFA7CisgICBLRVlfU0hPTUUgICAgICAgICAgICAgICAgICAgOiBjb25zdGFudCBTcGVjaWFsX0tleV9Db2RlCisgICAgIDo9IEN1cnNlc19Db25zdGFudHMuS0VZX1NIT01FOworICAgS2V5X1NoaWZ0X0hvbWUgICAgICAgICAgICAgIDogU3BlY2lhbF9LZXlfQ29kZSByZW5hbWVzIEtFWV9TSE9NRTsKKyAgIEtFWV9TSUMgICAgICAgICAgICAgICAgICAgICA6IGNvbnN0YW50IFNwZWNpYWxfS2V5X0NvZGUKKyAgICAgOj0gQ3Vyc2VzX0NvbnN0YW50cy5LRVlfU0lDOworICAgS2V5X1NoaWZ0X0luc2VydF9DaGFyICAgICAgIDogU3BlY2lhbF9LZXlfQ29kZSByZW5hbWVzIEtFWV9TSUM7CisgICBLRVlfU0xFRlQgICAgICAgICAgICAgICAgICAgOiBjb25zdGFudCBTcGVjaWFsX0tleV9Db2RlCisgICAgIDo9IEN1cnNlc19Db25zdGFudHMuS0VZX1NMRUZUOworICAgS2V5X1NoaWZ0X0N1cnNvcl9MZWZ0ICAgICAgIDogU3BlY2lhbF9LZXlfQ29kZSByZW5hbWVzIEtFWV9TTEVGVDsKKyAgIEtFWV9TTUVTU0FHRSAgICAgICAgICAgICAgICA6IGNvbnN0YW50IFNwZWNpYWxfS2V5X0NvZGUKKyAgICAgOj0gQ3Vyc2VzX0NvbnN0YW50cy5LRVlfU01FU1NBR0U7CisgICBLZXlfU2hpZnRfTWVzc2FnZSAgICAgICAgICAgOiBTcGVjaWFsX0tleV9Db2RlIHJlbmFtZXMgS0VZX1NNRVNTQUdFOworICAgS0VZX1NNT1ZFICAgICAgICAgICAgICAgICAgIDogY29uc3RhbnQgU3BlY2lhbF9LZXlfQ29kZQorICAgICA6PSBDdXJzZXNfQ29uc3RhbnRzLktFWV9TTU9WRTsKKyAgIEtleV9TaGlmdF9Nb3ZlICAgICAgICAgICAgICA6IFNwZWNpYWxfS2V5X0NvZGUgcmVuYW1lcyBLRVlfU01PVkU7CisgICBLRVlfU05FWFQgICAgICAgICAgICAgICAgICAgOiBjb25zdGFudCBTcGVjaWFsX0tleV9Db2RlCisgICAgIDo9IEN1cnNlc19Db25zdGFudHMuS0VZX1NORVhUOworICAgS2V5X1NoaWZ0X05leHRfUGFnZSAgICAgICAgIDogU3BlY2lhbF9LZXlfQ29kZSByZW5hbWVzIEtFWV9TTkVYVDsKKyAgIEtFWV9TT1BUSU9OUyAgICAgICAgICAgICAgICA6IGNvbnN0YW50IFNwZWNpYWxfS2V5X0NvZGUKKyAgICAgOj0gQ3Vyc2VzX0NvbnN0YW50cy5LRVlfU09QVElPTlM7CisgICBLZXlfU2hpZnRfT3B0aW9ucyAgICAgICAgICAgOiBTcGVjaWFsX0tleV9Db2RlIHJlbmFtZXMgS0VZX1NPUFRJT05TOworICAgS0VZX1NQUkVWSU9VUyAgICAgICAgICAgICAgIDogY29uc3RhbnQgU3BlY2lhbF9LZXlfQ29kZQorICAgICA6PSBDdXJzZXNfQ29uc3RhbnRzLktFWV9TUFJFVklPVVM7CisgICBLZXlfU2hpZnRfUHJldmlvdXNfUGFnZSAgICAgOiBTcGVjaWFsX0tleV9Db2RlIHJlbmFtZXMgS0VZX1NQUkVWSU9VUzsKKyAgIEtFWV9TUFJJTlQgICAgICAgICAgICAgICAgICA6IGNvbnN0YW50IFNwZWNpYWxfS2V5X0NvZGUKKyAgICAgOj0gQ3Vyc2VzX0NvbnN0YW50cy5LRVlfU1BSSU5UOworICAgS2V5X1NoaWZ0X1ByaW50ICAgICAgICAgICAgIDogU3BlY2lhbF9LZXlfQ29kZSByZW5hbWVzIEtFWV9TUFJJTlQ7CisgICBLRVlfU1JFRE8gICAgICAgICAgICAgICAgICAgOiBjb25zdGFudCBTcGVjaWFsX0tleV9Db2RlCisgICAgIDo9IEN1cnNlc19Db25zdGFudHMuS0VZX1NSRURPOworICAgS2V5X1NoaWZ0X1JlZG8gICAgICAgICAgICAgIDogU3BlY2lhbF9LZXlfQ29kZSByZW5hbWVzIEtFWV9TUkVETzsKKyAgIEtFWV9TUkVQTEFDRSAgICAgICAgICAgICAgICA6IGNvbnN0YW50IFNwZWNpYWxfS2V5X0NvZGUKKyAgICAgOj0gQ3Vyc2VzX0NvbnN0YW50cy5LRVlfU1JFUExBQ0U7CisgICBLZXlfU2hpZnRfUmVwbGFjZSAgICAgICAgICAgOiBTcGVjaWFsX0tleV9Db2RlIHJlbmFtZXMgS0VZX1NSRVBMQUNFOworICAgS0VZX1NSSUdIVCAgICAgICAgICAgICAgICAgIDogY29uc3RhbnQgU3BlY2lhbF9LZXlfQ29kZQorICAgICA6PSBDdXJzZXNfQ29uc3RhbnRzLktFWV9TUklHSFQ7CisgICBLZXlfU2hpZnRfQ3Vyc29yX1JpZ2h0ICAgICAgOiBTcGVjaWFsX0tleV9Db2RlIHJlbmFtZXMgS0VZX1NSSUdIVDsKKyAgIEtFWV9TUlNVTUUgICAgICAgICAgICAgICAgICA6IGNvbnN0YW50IFNwZWNpYWxfS2V5X0NvZGUKKyAgICAgOj0gQ3Vyc2VzX0NvbnN0YW50cy5LRVlfU1JTVU1FOworICAgS2V5X1NoaWZ0X1Jlc3VtZSAgICAgICAgICAgIDogU3BlY2lhbF9LZXlfQ29kZSByZW5hbWVzIEtFWV9TUlNVTUU7CisgICBLRVlfU1NBVkUgICAgICAgICAgICAgICAgICAgOiBjb25zdGFudCBTcGVjaWFsX0tleV9Db2RlCisgICAgIDo9IEN1cnNlc19Db25zdGFudHMuS0VZX1NTQVZFOworICAgS2V5X1NoaWZ0X1NhdmUgICAgICAgICAgICAgIDogU3BlY2lhbF9LZXlfQ29kZSByZW5hbWVzIEtFWV9TU0FWRTsKKyAgIEtFWV9TU1VTUEVORCAgICAgICAgICAgICAgICA6IGNvbnN0YW50IFNwZWNpYWxfS2V5X0NvZGUKKyAgICAgOj0gQ3Vyc2VzX0NvbnN0YW50cy5LRVlfU1NVU1BFTkQ7CisgICBLZXlfU2hpZnRfU3VzcGVuZCAgICAgICAgICAgOiBTcGVjaWFsX0tleV9Db2RlIHJlbmFtZXMgS0VZX1NTVVNQRU5EOworICAgS0VZX1NVTkRPICAgICAgICAgICAgICAgICAgIDogY29uc3RhbnQgU3BlY2lhbF9LZXlfQ29kZQorICAgICA6PSBDdXJzZXNfQ29uc3RhbnRzLktFWV9TVU5ETzsKKyAgIEtleV9TaGlmdF9VbmRvICAgICAgICAgICAgICA6IFNwZWNpYWxfS2V5X0NvZGUgcmVuYW1lcyBLRVlfU1VORE87CisgICBLZXlfU3VzcGVuZCAgICAgICAgICAgICAgICAgOiBjb25zdGFudCBTcGVjaWFsX0tleV9Db2RlCisgICAgIDo9IEN1cnNlc19Db25zdGFudHMuS0VZX1NVU1BFTkQ7CisgICBLZXlfVW5kbyAgICAgICAgICAgICAgICAgICAgOiBjb25zdGFudCBTcGVjaWFsX0tleV9Db2RlCisgICAgIDo9IEN1cnNlc19Db25zdGFudHMuS0VZX1VORE87CisgICBLZXlfTW91c2UgICAgICAgICAgICAgICAgICAgOiBjb25zdGFudCBTcGVjaWFsX0tleV9Db2RlCisgICAgIDo9IEN1cnNlc19Db25zdGFudHMuS0VZX01PVVNFOworICAgS2V5X1Jlc2l6ZSAgICAgICAgICAgICAgICAgIDogY29uc3RhbnQgU3BlY2lhbF9LZXlfQ29kZQorICAgICA6PSBDdXJzZXNfQ29uc3RhbnRzLktFWV9SRVNJWkU7CisgICBLZXlfTWF4ICAgICAgICAgICAgICAgICAgICAgOiBjb25zdGFudCBTcGVjaWFsX0tleV9Db2RlCiAgICAgIDo9IFNwZWNpYWxfS2V5X0NvZGUnTGFzdDsKIAogICAgc3VidHlwZSBVc2VyX0tleV9Db2RlIGlzIEtleV9Db2RlCkBAIC05MCwxMiArMzg2LDcgQEAKICAgIC0tICBUaGlzIGlzIHJlc2VydmVkIGZvciB1c2VyIGRlZmluZWQga2V5IGNvZGVzLiBUaGUgcmFuZ2UgYmV0d2VlbiBLZXlfTWF4CiAgICAtLSAgYW5kIHRoZSBmaXJzdCB1c2VyIGNvZGUgaXMgcmVzZXJ2ZWQgZm9yIHN1YnN5c3RlbXMgbGlrZSBtZW51IGFuZCBmb3Jtcy4KIAotICAgLS0gIEZvciB0aG9zZSB3aG8gbGlrZSB0byB1c2UgdGhlIG9yaWdpbmFsIGtleSBuYW1lcyB3ZSBwcm9kdWNlIHRoZW0gd2VyZQotICAgLS0gIHRoZXkgZGlmZmVyIGZyb20gdGhlIG9yaWdpbmFsLiBQbGVhc2Ugbm90ZSB0aGF0IHRoZXkgbWF5IGRpZmZlciBpbgotICAgLS0gIGxvd2VyL3VwcGVyIGNhc2UuCi1pbmNsdWRlKGBPbGRfS2V5cycpZG5sCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogICAgdHlwZSBDb2xvcl9OdW1iZXIgaXMgcmFuZ2UgLTEgLi4gSW50ZWdlciAoSW50ZXJmYWNlcy5DLnNob3J0J0xhc3QpOwogICAgZm9yIENvbG9yX051bWJlcidTaXplIHVzZSBJbnRlcmZhY2VzLkMuc2hvcnQnU2l6ZTsKQEAgLTEwNCw3ICszOTUsMTUgQEAKICAgIC0tICAocG90ZW50aWFsbHkpIGRlZmluYWJsZSBjb2xvcnMuIFNvbWUgb2YgdGhvc2UgaW5kaWNlcyBhcmUKICAgIC0tICBwcmVkZWZpbmVkIChzZWUgYmVsb3cpLCBhbHRob3VnaCB0aGV5IG1heSBub3QgcmVhbGx5IGV4aXN0LgogCi1pbmNsdWRlKGBDb2xvcl9EZWZzJykKKyAgIEJsYWNrICAgOiBjb25zdGFudCBDb2xvcl9OdW1iZXIgOj0gQ3Vyc2VzX0NvbnN0YW50cy5DT0xPUl9CTEFDSzsKKyAgIFJlZCAgICAgOiBjb25zdGFudCBDb2xvcl9OdW1iZXIgOj0gQ3Vyc2VzX0NvbnN0YW50cy5DT0xPUl9SRUQ7CisgICBHcmVlbiAgIDogY29uc3RhbnQgQ29sb3JfTnVtYmVyIDo9IEN1cnNlc19Db25zdGFudHMuQ09MT1JfR1JFRU47CisgICBZZWxsb3cgIDogY29uc3RhbnQgQ29sb3JfTnVtYmVyIDo9IEN1cnNlc19Db25zdGFudHMuQ09MT1JfWUVMTE9XOworICAgQmx1ZSAgICA6IGNvbnN0YW50IENvbG9yX051bWJlciA6PSBDdXJzZXNfQ29uc3RhbnRzLkNPTE9SX0JMVUU7CisgICBNYWdlbnRhIDogY29uc3RhbnQgQ29sb3JfTnVtYmVyIDo9IEN1cnNlc19Db25zdGFudHMuQ09MT1JfTUFHRU5UQTsKKyAgIEN5YW4gICAgOiBjb25zdGFudCBDb2xvcl9OdW1iZXIgOj0gQ3Vyc2VzX0NvbnN0YW50cy5DT0xPUl9DWUFOOworICAgV2hpdGUgICA6IGNvbnN0YW50IENvbG9yX051bWJlciA6PSBDdXJzZXNfQ29uc3RhbnRzLkNPTE9SX1dISVRFOworCiAgICB0eXBlIFJHQl9WYWx1ZSBpcyByYW5nZSAwIC4uIEludGVnZXIgKEludGVyZmFjZXMuQy5zaG9ydCdMYXN0KTsKICAgIGZvciBSR0JfVmFsdWUnU2l6ZSB1c2UgSW50ZXJmYWNlcy5DLnNob3J0J1NpemU7CiAgICAtLSAgU29tZSBzeXN0ZW0gbWF5IGFsbG93IHRvIHJlZGVmaW5lIGEgY29sb3IgYnkgc2V0dGluZyBSR0IgdmFsdWVzLgpAQCAtMTE3LDggKzQxNiw3MyBAQAogICAgLS0gIHR3byBjb2xvcnMgZGVzY3JpYmVkIGJ5IENvbG9yX051bWJlcnMsIG9uZSBmb3IgdGhlIGZvcmVncm91bmQgYW5kCiAgICAtLSAgdGhlIG90aGVyIGZvciB0aGUgYmFja2dyb3VuZAogCi1pbmNsdWRlKGBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldF9SZXAnKQotICAgLS0gIChuKWN1cnNlcyB1c2VzIGFsbCBidXQgdGhlIGxvd2VzdCAxNiBCaXRzIGZvciBBdHRyaWJ1dGVzLgorICAgdHlwZSBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldCBpcworICAgICAgcmVjb3JkCisgICAgICAgICBTdGFuZF9PdXQgICAgICAgICAgICAgICA6IEJvb2xlYW47CisgICAgICAgICBVbmRlcl9MaW5lICAgICAgICAgICAgICA6IEJvb2xlYW47CisgICAgICAgICBSZXZlcnNlX1ZpZGVvICAgICAgICAgICA6IEJvb2xlYW47CisgICAgICAgICBCbGluayAgICAgICAgICAgICAgICAgICA6IEJvb2xlYW47CisgICAgICAgICBEaW1fQ2hhcmFjdGVyICAgICAgICAgICA6IEJvb2xlYW47CisgICAgICAgICBCb2xkX0NoYXJhY3RlciAgICAgICAgICA6IEJvb2xlYW47CisgICAgICAgICBQcm90ZWN0ZWRfQ2hhcmFjdGVyICAgICA6IEJvb2xlYW47CisgICAgICAgICBJbnZpc2libGVfQ2hhcmFjdGVyICAgICA6IEJvb2xlYW47CisgICAgICAgICBBbHRlcm5hdGVfQ2hhcmFjdGVyX1NldCA6IEJvb2xlYW47CisgICAgICAgICBIb3Jpem9udGFsICAgICAgICAgICAgICA6IEJvb2xlYW47CisgICAgICAgICBMZWZ0ICAgICAgICAgICAgICAgICAgICA6IEJvb2xlYW47CisgICAgICAgICBMb3cgICAgICAgICAgICAgICAgICAgICA6IEJvb2xlYW47CisgICAgICAgICBSaWdodCAgICAgICAgICAgICAgICAgICA6IEJvb2xlYW47CisgICAgICAgICBUb3AgICAgICAgICAgICAgICAgICAgICA6IEJvb2xlYW47CisgICAgICAgICBWZXJ0aWNhbCAgICAgICAgICAgICAgICA6IEJvb2xlYW47CisgICAgICBlbmQgcmVjb3JkOworCisgICBmb3IgQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQgdXNlCisgICAgICByZWNvcmQKKyAgICAgICAgIFN0YW5kX091dCBhdCAwIHJhbmdlCisgICAgICAgICAgIEN1cnNlc19Db25zdGFudHMuQV9TVEFORE9VVF9GaXJzdCAtIEN1cnNlc19Db25zdGFudHMuQXR0cl9GaXJzdAorICAgICAgICAgICAuLiBDdXJzZXNfQ29uc3RhbnRzLkFfU1RBTkRPVVRfTGFzdCAtIEN1cnNlc19Db25zdGFudHMuQXR0cl9GaXJzdDsKKyAgICAgICAgIFVuZGVyX0xpbmUgYXQgMCByYW5nZQorICAgICAgICAgICBDdXJzZXNfQ29uc3RhbnRzLkFfVU5ERVJMSU5FX0ZpcnN0IC0gQ3Vyc2VzX0NvbnN0YW50cy5BdHRyX0ZpcnN0CisgICAgICAgICAgIC4uIEN1cnNlc19Db25zdGFudHMuQV9VTkRFUkxJTkVfTGFzdCAtIEN1cnNlc19Db25zdGFudHMuQXR0cl9GaXJzdDsKKyAgICAgICAgIFJldmVyc2VfVmlkZW8gYXQgMCByYW5nZQorICAgICAgICAgICBDdXJzZXNfQ29uc3RhbnRzLkFfUkVWRVJTRV9GaXJzdCAtIEN1cnNlc19Db25zdGFudHMuQXR0cl9GaXJzdAorICAgICAgICAgICAuLiBDdXJzZXNfQ29uc3RhbnRzLkFfUkVWRVJTRV9MYXN0IC0gQ3Vyc2VzX0NvbnN0YW50cy5BdHRyX0ZpcnN0OworICAgICAgICAgQmxpbmsgYXQgMCByYW5nZQorICAgICAgICAgICBDdXJzZXNfQ29uc3RhbnRzLkFfQkxJTktfRmlyc3QgLSBDdXJzZXNfQ29uc3RhbnRzLkF0dHJfRmlyc3QKKyAgICAgICAgICAgLi4gQ3Vyc2VzX0NvbnN0YW50cy5BX0JMSU5LX0xhc3QgLSBDdXJzZXNfQ29uc3RhbnRzLkF0dHJfRmlyc3Q7CisgICAgICAgICBEaW1fQ2hhcmFjdGVyIGF0IDAgcmFuZ2UKKyAgICAgICAgICAgQ3Vyc2VzX0NvbnN0YW50cy5BX0RJTV9GaXJzdCAtIEN1cnNlc19Db25zdGFudHMuQXR0cl9GaXJzdAorICAgICAgICAgICAuLiBDdXJzZXNfQ29uc3RhbnRzLkFfRElNX0xhc3QgLSBDdXJzZXNfQ29uc3RhbnRzLkF0dHJfRmlyc3Q7CisgICAgICAgICBCb2xkX0NoYXJhY3RlciBhdCAwIHJhbmdlCisgICAgICAgICAgIEN1cnNlc19Db25zdGFudHMuQV9CT0xEX0ZpcnN0IC0gQ3Vyc2VzX0NvbnN0YW50cy5BdHRyX0ZpcnN0CisgICAgICAgICAgIC4uIEN1cnNlc19Db25zdGFudHMuQV9CT0xEX0xhc3QgLSBDdXJzZXNfQ29uc3RhbnRzLkF0dHJfRmlyc3Q7CisgICAgICAgICBQcm90ZWN0ZWRfQ2hhcmFjdGVyIGF0IDAgcmFuZ2UKKyAgICAgICAgICAgQ3Vyc2VzX0NvbnN0YW50cy5BX1BST1RFQ1RfRmlyc3QgLSBDdXJzZXNfQ29uc3RhbnRzLkF0dHJfRmlyc3QKKyAgICAgICAgICAgLi4gQ3Vyc2VzX0NvbnN0YW50cy5BX1BST1RFQ1RfTGFzdCAtIEN1cnNlc19Db25zdGFudHMuQXR0cl9GaXJzdDsKKyAgICAgICAgIEludmlzaWJsZV9DaGFyYWN0ZXIgYXQgMCByYW5nZQorICAgICAgICAgICBDdXJzZXNfQ29uc3RhbnRzLkFfSU5WSVNfRmlyc3QgLSBDdXJzZXNfQ29uc3RhbnRzLkF0dHJfRmlyc3QKKyAgICAgICAgICAgLi4gQ3Vyc2VzX0NvbnN0YW50cy5BX0lOVklTX0xhc3QgLSBDdXJzZXNfQ29uc3RhbnRzLkF0dHJfRmlyc3Q7CisgICAgICAgICBBbHRlcm5hdGVfQ2hhcmFjdGVyX1NldCBhdCAwIHJhbmdlCisgICAgICAgICAgIEN1cnNlc19Db25zdGFudHMuQV9BTFRDSEFSU0VUX0ZpcnN0IC0gQ3Vyc2VzX0NvbnN0YW50cy5BdHRyX0ZpcnN0CisgICAgICAgICAgIC4uIEN1cnNlc19Db25zdGFudHMuQV9BTFRDSEFSU0VUX0xhc3QgLSBDdXJzZXNfQ29uc3RhbnRzLkF0dHJfRmlyc3Q7CisgICAgICAgICBIb3Jpem9udGFsIGF0IDAgcmFuZ2UKKyAgICAgICAgICAgQ3Vyc2VzX0NvbnN0YW50cy5BX0hPUklaT05UQUxfRmlyc3QgLSBDdXJzZXNfQ29uc3RhbnRzLkF0dHJfRmlyc3QKKyAgICAgICAgICAgLi4gQ3Vyc2VzX0NvbnN0YW50cy5BX0hPUklaT05UQUxfTGFzdCAtIEN1cnNlc19Db25zdGFudHMuQXR0cl9GaXJzdDsKKyAgICAgICAgIExlZnQgYXQgMCByYW5nZQorICAgICAgICAgICBDdXJzZXNfQ29uc3RhbnRzLkFfTEVGVF9GaXJzdCAtIEN1cnNlc19Db25zdGFudHMuQXR0cl9GaXJzdAorICAgICAgICAgICAuLiBDdXJzZXNfQ29uc3RhbnRzLkFfTEVGVF9MYXN0IC0gQ3Vyc2VzX0NvbnN0YW50cy5BdHRyX0ZpcnN0OworICAgICAgICAgTG93IGF0IDAgcmFuZ2UKKyAgICAgICAgICAgQ3Vyc2VzX0NvbnN0YW50cy5BX0xPV19GaXJzdCAtIEN1cnNlc19Db25zdGFudHMuQXR0cl9GaXJzdAorICAgICAgICAgICAuLiBDdXJzZXNfQ29uc3RhbnRzLkFfTE9XX0xhc3QgLSBDdXJzZXNfQ29uc3RhbnRzLkF0dHJfRmlyc3Q7CisgICAgICAgICBSaWdodCBhdCAwIHJhbmdlCisgICAgICAgICAgIEN1cnNlc19Db25zdGFudHMuQV9SSUdIVF9GaXJzdCAtIEN1cnNlc19Db25zdGFudHMuQXR0cl9GaXJzdAorICAgICAgICAgICAuLiBDdXJzZXNfQ29uc3RhbnRzLkFfUklHSFRfTGFzdCAtIEN1cnNlc19Db25zdGFudHMuQXR0cl9GaXJzdDsKKyAgICAgICAgIFRvcCBhdCAwIHJhbmdlCisgICAgICAgICAgIEN1cnNlc19Db25zdGFudHMuQV9UT1BfRmlyc3QgLSBDdXJzZXNfQ29uc3RhbnRzLkF0dHJfRmlyc3QKKyAgICAgICAgICAgLi4gQ3Vyc2VzX0NvbnN0YW50cy5BX1RPUF9MYXN0IC0gQ3Vyc2VzX0NvbnN0YW50cy5BdHRyX0ZpcnN0OworICAgICAgICAgVmVydGljYWwgYXQgMCByYW5nZQorICAgICAgICAgICBDdXJzZXNfQ29uc3RhbnRzLkFfVkVSVElDQUxfRmlyc3QgLSBDdXJzZXNfQ29uc3RhbnRzLkF0dHJfRmlyc3QKKyAgICAgICAgICAgLi4gQ3Vyc2VzX0NvbnN0YW50cy5BX1ZFUlRJQ0FMX0xhc3QgLSBDdXJzZXNfQ29uc3RhbnRzLkF0dHJfRmlyc3Q7CisgICAgICBlbmQgcmVjb3JkOwogCiAgICBOb3JtYWxfVmlkZW8gOiBjb25zdGFudCBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldCA6PSAob3RoZXJzID0+IEZhbHNlKTsKIApAQCAtMTI4LDE3ICs0OTIsMjkgQEAKICAgICAgICAgIENvbG9yIDogQ29sb3JfUGFpcjsKICAgICAgICAgIENoICAgIDogQ2hhcmFjdGVyOwogICAgICAgZW5kIHJlY29yZDsKLSAgIHByYWdtYSBDb252ZW50aW9uIChDLCBBdHRyaWJ1dGVkX0NoYXJhY3Rlcik7CisgICBwcmFnbWEgQ29udmVudGlvbiAoQ19QYXNzX0J5X0NvcHksIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyKTsKICAgIC0tICBUaGlzIGlzIHRoZSBjb3VudGVycGFydCBmb3IgdGhlIGNodHlwZSBpbiBDLgogCi1pbmNsdWRlKGBBQ19SZXAnKQorICAgZm9yIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyIHVzZQorICAgICAgcmVjb3JkCisgICAgICAgICBDaCAgICBhdCAwIHJhbmdlIEN1cnNlc19Db25zdGFudHMuQV9DSEFSVEVYVF9GaXJzdAorICAgICAgICAgICAuLiBDdXJzZXNfQ29uc3RhbnRzLkFfQ0hBUlRFWFRfTGFzdDsKKyAgICAgICAgIENvbG9yIGF0IDAgcmFuZ2UgQ3Vyc2VzX0NvbnN0YW50cy5BX0NPTE9SX0ZpcnN0CisgICAgICAgICAgIC4uIEN1cnNlc19Db25zdGFudHMuQV9DT0xPUl9MYXN0OworICAgICAgICAgcHJhZ21hIFdhcm5pbmdzIChPZmYpOworICAgICAgICAgQXR0ciAgYXQgMCByYW5nZSBDdXJzZXNfQ29uc3RhbnRzLkF0dHJfRmlyc3QKKyAgICAgICAgICAgLi4gQ3Vyc2VzX0NvbnN0YW50cy5BdHRyX0xhc3Q7CisgICAgICAgICBwcmFnbWEgV2FybmluZ3MgKE9uKTsKKyAgICAgIGVuZCByZWNvcmQ7CisgICBmb3IgQXR0cmlidXRlZF9DaGFyYWN0ZXInU2l6ZSB1c2UgQ3Vyc2VzX0NvbnN0YW50cy5jaHR5cGVfU2l6ZTsKKwogICAgRGVmYXVsdF9DaGFyYWN0ZXIgOiBjb25zdGFudCBBdHRyaWJ1dGVkX0NoYXJhY3RlcgogICAgICA6PSAoQ2ggICAgPT4gQ2hhcmFjdGVyJ0ZpcnN0LAogICAgICAgICAgQ29sb3IgPT4gQ29sb3JfUGFpcidGaXJzdCwKICAgICAgICAgIEF0dHIgID0+IChvdGhlcnMgPT4gRmFsc2UpKTsgIC0tICBwcmVlbGFib3JhdGFibGUgTm9ybWFsX1ZpZGVvCiAKICAgIHR5cGUgQXR0cmlidXRlZF9TdHJpbmcgaXMgYXJyYXkgKFBvc2l0aXZlIHJhbmdlIDw+KSBvZiBBdHRyaWJ1dGVkX0NoYXJhY3RlcjsKLSAgIHByYWdtYSBQYWNrIChBdHRyaWJ1dGVkX1N0cmluZyk7CisgICBwcmFnbWEgQ29udmVudGlvbiAoQywgQXR0cmlidXRlZF9TdHJpbmcpOwogICAgLS0gIEluIHRoaXMgYmluZGluZyB3ZSBhbGxvdyBzdHJpbmdzIG9mIGF0dHJpYnV0ZWQgY2hhcmFjdGVycy4KIAogICAgLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xODgsNyArNTY0LDc4IEBACiAgICBmdW5jdGlvbiBOdW1iZXJfT2ZfQ29sb3JfUGFpcnMgcmV0dXJuIE5hdHVyYWw7CiAgICBwcmFnbWEgSW5saW5lIChOdW1iZXJfT2ZfQ29sb3JfUGFpcnMpOwogCi1pbmNsdWRlKGBBQ1NfTWFwJylkbmwKKyAgIHN1YnR5cGUgQUNTX0luZGV4IGlzIENoYXJhY3RlciByYW5nZQorICAgICBDaGFyYWN0ZXInVmFsICgwKSAuLiBDaGFyYWN0ZXInVmFsICgxMjcpOworICAgZnVuY3Rpb24gQUNTX01hcCAoSW5kZXggOiBBQ1NfSW5kZXgpIHJldHVybiBBdHRyaWJ1dGVkX0NoYXJhY3RlcjsKKyAgIHByYWdtYSBJbXBvcnQgKEMsIEFDU19NYXAsICJhY3NfbWFwX2FzX2Z1bmN0aW9uIik7CisKKyAgIC0tICBDb25zdGFudHMgZm9yIHNldmVyYWwgY2hhcmFjdGVycyBmcm9tIHRoZSBBbHRlcm5hdGUgQ2hhcmFjdGVyIFNldAorICAgLS0gIFlvdSBtdXN0IHVzZSB0aGVzZSBjb25zdGFudHMgYXMgaW5kaWNlcyBpbnRvIHRoZSBBQ1NfTWFwIGZ1bmN0aW9uCisgICAtLSAgdG8gZ2V0IHRoZSBjb3JyZXNwb25kaW5nIGF0dHJpYnV0ZWQgY2hhcmFjdGVyIGF0IHJ1bnRpbWUKKyAgIEFDU19VcHBlcl9MZWZ0X0Nvcm5lciAgOiBjb25zdGFudCBBQ1NfSW5kZXgKKyAgICAgIDo9IENoYXJhY3RlcidWYWwgKEN1cnNlc19Db25zdGFudHMuQUNTX1VMQ09STkVSKTsKKyAgIEFDU19Mb3dlcl9MZWZ0X0Nvcm5lciAgOiBjb25zdGFudCBBQ1NfSW5kZXgKKyAgICAgIDo9IENoYXJhY3RlcidWYWwgKEN1cnNlc19Db25zdGFudHMuQUNTX0xMQ09STkVSKTsKKyAgIEFDU19VcHBlcl9SaWdodF9Db3JuZXIgOiBjb25zdGFudCBBQ1NfSW5kZXgKKyAgICAgIDo9IENoYXJhY3RlcidWYWwgKEN1cnNlc19Db25zdGFudHMuQUNTX1VSQ09STkVSKTsKKyAgIEFDU19Mb3dlcl9SaWdodF9Db3JuZXIgOiBjb25zdGFudCBBQ1NfSW5kZXgKKyAgICAgIDo9IENoYXJhY3RlcidWYWwgKEN1cnNlc19Db25zdGFudHMuQUNTX0xSQ09STkVSKTsKKyAgIEFDU19MZWZ0X1RlZSAgICAgICAgICAgOiBjb25zdGFudCBBQ1NfSW5kZXgKKyAgICAgIDo9IENoYXJhY3RlcidWYWwgKEN1cnNlc19Db25zdGFudHMuQUNTX0xURUUpOworICAgQUNTX1JpZ2h0X1RlZSAgICAgICAgICA6IGNvbnN0YW50IEFDU19JbmRleAorICAgICAgOj0gQ2hhcmFjdGVyJ1ZhbCAoQ3Vyc2VzX0NvbnN0YW50cy5BQ1NfUlRFRSk7CisgICBBQ1NfQm90dG9tX1RlZSAgICAgICAgIDogY29uc3RhbnQgQUNTX0luZGV4CisgICAgICA6PSBDaGFyYWN0ZXInVmFsIChDdXJzZXNfQ29uc3RhbnRzLkFDU19CVEVFKTsKKyAgIEFDU19Ub3BfVGVlICAgICAgICAgICAgOiBjb25zdGFudCBBQ1NfSW5kZXgKKyAgICAgIDo9IENoYXJhY3RlcidWYWwgKEN1cnNlc19Db25zdGFudHMuQUNTX1RURUUpOworICAgQUNTX0hvcml6b250YWxfTGluZSAgICA6IGNvbnN0YW50IEFDU19JbmRleAorICAgICAgOj0gQ2hhcmFjdGVyJ1ZhbCAoQ3Vyc2VzX0NvbnN0YW50cy5BQ1NfSExJTkUpOworICAgQUNTX1ZlcnRpY2FsX0xpbmUgICAgICA6IGNvbnN0YW50IEFDU19JbmRleAorICAgICAgOj0gQ2hhcmFjdGVyJ1ZhbCAoQ3Vyc2VzX0NvbnN0YW50cy5BQ1NfVkxJTkUpOworICAgQUNTX1BsdXNfU3ltYm9sICAgICAgICA6IGNvbnN0YW50IEFDU19JbmRleAorICAgICAgOj0gQ2hhcmFjdGVyJ1ZhbCAoQ3Vyc2VzX0NvbnN0YW50cy5BQ1NfUExVUyk7CisgICBBQ1NfU2Nhbl9MaW5lXzEgICAgICAgIDogY29uc3RhbnQgQUNTX0luZGV4CisgICAgICA6PSBDaGFyYWN0ZXInVmFsIChDdXJzZXNfQ29uc3RhbnRzLkFDU19TMSk7CisgICBBQ1NfU2Nhbl9MaW5lXzkgICAgICAgIDogY29uc3RhbnQgQUNTX0luZGV4CisgICAgICA6PSBDaGFyYWN0ZXInVmFsIChDdXJzZXNfQ29uc3RhbnRzLkFDU19TOSk7CisgICBBQ1NfRGlhbW9uZCAgICAgICAgICAgIDogY29uc3RhbnQgQUNTX0luZGV4CisgICAgICA6PSBDaGFyYWN0ZXInVmFsIChDdXJzZXNfQ29uc3RhbnRzLkFDU19ESUFNT05EKTsKKyAgIEFDU19DaGVja2VyX0JvYXJkICAgICAgOiBjb25zdGFudCBBQ1NfSW5kZXgKKyAgICAgIDo9IENoYXJhY3RlcidWYWwgKEN1cnNlc19Db25zdGFudHMuQUNTX0NLQk9BUkQpOworICAgQUNTX0RlZ3JlZSAgICAgICAgICAgICA6IGNvbnN0YW50IEFDU19JbmRleAorICAgICAgOj0gQ2hhcmFjdGVyJ1ZhbCAoQ3Vyc2VzX0NvbnN0YW50cy5BQ1NfREVHUkVFKTsKKyAgIEFDU19QbHVzX01pbnVzICAgICAgICAgOiBjb25zdGFudCBBQ1NfSW5kZXgKKyAgICAgIDo9IENoYXJhY3RlcidWYWwgKEN1cnNlc19Db25zdGFudHMuQUNTX1BMTUlOVVMpOworICAgQUNTX0J1bGxldCAgICAgICAgICAgICA6IGNvbnN0YW50IEFDU19JbmRleAorICAgICAgOj0gQ2hhcmFjdGVyJ1ZhbCAoQ3Vyc2VzX0NvbnN0YW50cy5BQ1NfQlVMTEVUKTsKKyAgIEFDU19MZWZ0X0Fycm93ICAgICAgICAgOiBjb25zdGFudCBBQ1NfSW5kZXgKKyAgICAgIDo9IENoYXJhY3RlcidWYWwgKEN1cnNlc19Db25zdGFudHMuQUNTX0xBUlJPVyk7CisgICBBQ1NfUmlnaHRfQXJyb3cgICAgICAgIDogY29uc3RhbnQgQUNTX0luZGV4CisgICAgICA6PSBDaGFyYWN0ZXInVmFsIChDdXJzZXNfQ29uc3RhbnRzLkFDU19SQVJST1cpOworICAgQUNTX0Rvd25fQXJyb3cgICAgICAgICA6IGNvbnN0YW50IEFDU19JbmRleAorICAgICAgOj0gQ2hhcmFjdGVyJ1ZhbCAoQ3Vyc2VzX0NvbnN0YW50cy5BQ1NfREFSUk9XKTsKKyAgIEFDU19VcF9BcnJvdyAgICAgICAgICAgOiBjb25zdGFudCBBQ1NfSW5kZXgKKyAgICAgIDo9IENoYXJhY3RlcidWYWwgKEN1cnNlc19Db25zdGFudHMuQUNTX1VBUlJPVyk7CisgICBBQ1NfQm9hcmRfT2ZfU3F1YXJlcyAgIDogY29uc3RhbnQgQUNTX0luZGV4CisgICAgICA6PSBDaGFyYWN0ZXInVmFsIChDdXJzZXNfQ29uc3RhbnRzLkFDU19CT0FSRCk7CisgICBBQ1NfTGFudGVybiAgICAgICAgICAgIDogY29uc3RhbnQgQUNTX0luZGV4CisgICAgICA6PSBDaGFyYWN0ZXInVmFsIChDdXJzZXNfQ29uc3RhbnRzLkFDU19MQU5URVJOKTsKKyAgIEFDU19Tb2xpZF9CbG9jayAgICAgICAgOiBjb25zdGFudCBBQ1NfSW5kZXgKKyAgICAgIDo9IENoYXJhY3RlcidWYWwgKEN1cnNlc19Db25zdGFudHMuQUNTX0JMT0NLKTsKKyAgIEFDU19TY2FuX0xpbmVfMyAgICAgICAgOiBjb25zdGFudCBBQ1NfSW5kZXgKKyAgICAgIDo9IENoYXJhY3RlcidWYWwgKEN1cnNlc19Db25zdGFudHMuQUNTX1MzKTsKKyAgIEFDU19TY2FuX0xpbmVfNyAgICAgICAgOiBjb25zdGFudCBBQ1NfSW5kZXgKKyAgICAgIDo9IENoYXJhY3RlcidWYWwgKEN1cnNlc19Db25zdGFudHMuQUNTX1M3KTsKKyAgIEFDU19MZXNzX09yX0VxdWFsICAgICAgOiBjb25zdGFudCBBQ1NfSW5kZXgKKyAgICAgIDo9IENoYXJhY3RlcidWYWwgKEN1cnNlc19Db25zdGFudHMuQUNTX0xFUVVBTCk7CisgICBBQ1NfR3JlYXRlcl9Pcl9FcXVhbCAgIDogY29uc3RhbnQgQUNTX0luZGV4CisgICAgICA6PSBDaGFyYWN0ZXInVmFsIChDdXJzZXNfQ29uc3RhbnRzLkFDU19HRVFVQUwpOworICAgQUNTX1BJICAgICAgICAgICAgICAgICA6IGNvbnN0YW50IEFDU19JbmRleAorICAgICAgOj0gQ2hhcmFjdGVyJ1ZhbCAoQ3Vyc2VzX0NvbnN0YW50cy5BQ1NfUEkpOworICAgQUNTX05vdF9FcXVhbCAgICAgICAgICA6IGNvbnN0YW50IEFDU19JbmRleAorICAgICAgOj0gQ2hhcmFjdGVyJ1ZhbCAoQ3Vyc2VzX0NvbnN0YW50cy5BQ1NfTkVRVUFMKTsKKyAgIEFDU19TdGVybGluZyAgICAgICAgICAgOiBjb25zdGFudCBBQ1NfSW5kZXgKKyAgICAgIDo9IENoYXJhY3RlcidWYWwgKEN1cnNlc19Db25zdGFudHMuQUNTX1NURVJMSU5HKTsKIAogICAgLS0gIE1BTlBBR0UoYGN1cnNfaW5pdHNjci4zeCcpCiAgICAtLSAgfCBOb3QgaW1wbGVtZW50ZWQ6IG5ld3Rlcm0sIHNldF90ZXJtLCBkZWxzY3JlZW4KQEAgLTE5NiwxMSArNjQzLDEzIEBACiAgICAtLSAgQU5DSE9SKGBzdGRzY3InLGBTdGFuZGFyZF9XaW5kb3cnKQogICAgZnVuY3Rpb24gU3RhbmRhcmRfV2luZG93IHJldHVybiBXaW5kb3c7CiAgICAtLSAgQUtBCisgICBwcmFnbWEgSW1wb3J0IChDLCBTdGFuZGFyZF9XaW5kb3csICJzdGRzY3JfYXNfZnVuY3Rpb24iKTsKICAgIHByYWdtYSBJbmxpbmUgKFN0YW5kYXJkX1dpbmRvdyk7CiAKICAgIC0tICBBTkNIT1IoYGN1cnNjcicsYEN1cnJlbnRfV2luZG93JykKICAgIGZ1bmN0aW9uIEN1cnJlbnRfV2luZG93IHJldHVybiBXaW5kb3c7CiAgICAtLSAgQUtBCisgICBwcmFnbWEgSW1wb3J0IChDLCBDdXJyZW50X1dpbmRvdywgImN1cnNjcl9hc19mdW5jdGlvbiIpOwogICAgcHJhZ21hIElubGluZSAoQ3VycmVudF9XaW5kb3cpOwogCiAgICAtLSAgQU5DSE9SKGBpbml0c2NyKCknLGBJbml0X1NjcmVlbicpCkBAIC0yMjcsOSArNjc2LDkgQEAKICAgIC0tICBNQU5QQUdFKGBjdXJzX21vdmUuM3gnKQogCiAgICAtLSAgQU5DSE9SKGB3bW92ZSgpJyxgTW92ZV9DdXJzb3InKQotICAgcHJvY2VkdXJlIE1vdmVfQ3Vyc29yIChXaW4gICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OwotICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5lICAgOiBpbiBMaW5lX1Bvc2l0aW9uOwotICAgICAgICAgICAgICAgICAgICAgICAgICBDb2x1bW4gOiBpbiBDb2x1bW5fUG9zaXRpb24pOworICAgcHJvY2VkdXJlIE1vdmVfQ3Vyc29yIChXaW4gICAgOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5lICAgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgICAgICBDb2x1bW4gOiBDb2x1bW5fUG9zaXRpb24pOwogICAgLS0gIEFLQQogICAgLS0gIEFMSUFTKGBtb3ZlKCknKQogICAgcHJhZ21hIElubGluZSAoTW92ZV9DdXJzb3IpOwpAQCAtMjM3LDQzICs2ODYsNDMgQEAKICAgIC0tICBNQU5QQUdFKGBjdXJzX2FkZGNoLjN4JykKIAogICAgLS0gIEFOQ0hPUihgd2FkZGNoKCknLGBBZGQnKQotICAgcHJvY2VkdXJlIEFkZCAoV2luIDogIGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7Ci0gICAgICAgICAgICAgICAgICBDaCAgOiAgaW4gQXR0cmlidXRlZF9DaGFyYWN0ZXIpOworICAgcHJvY2VkdXJlIEFkZCAoV2luIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgICAgICAgICAgICAgIENoICA6IEF0dHJpYnV0ZWRfQ2hhcmFjdGVyKTsKICAgIC0tICBBS0EKICAgIC0tICBBTElBUyhgYWRkY2goKScpCiAKLSAgIHByb2NlZHVyZSBBZGQgKFdpbiA6ICBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OwotICAgICAgICAgICAgICAgICAgQ2ggIDogIGluIENoYXJhY3Rlcik7CisgICBwcm9jZWR1cmUgQWRkIChXaW4gOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgICAgICAgICAgICAgQ2ggIDogQ2hhcmFjdGVyKTsKICAgIC0tICBBZGQgYSBzaW5nbGUgY2hhcmFjdGVyIGF0IHRoZSBjdXJyZW50IGxvZ2ljYWwgY3Vyc29yIHBvc2l0aW9uIHRvCiAgICAtLSAgdGhlIHdpbmRvdy4gVXNlIHRoZSBjdXJyZW50IHdpbmRvd3MgYXR0cmlidXRlcy4KIAogICAgLS0gIEFOQ0hPUihgbXZ3YWRkY2goKScsYEFkZCcpCiAgICBwcm9jZWR1cmUgQWRkCi0gICAgIChXaW4gICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OwotICAgICAgTGluZSAgIDogaW4gTGluZV9Qb3NpdGlvbjsKLSAgICAgIENvbHVtbiA6IGluIENvbHVtbl9Qb3NpdGlvbjsKLSAgICAgIENoICAgICA6IGluIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyKTsKKyAgICAgKFdpbiAgICA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBMaW5lICAgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgQ29sdW1uIDogQ29sdW1uX1Bvc2l0aW9uOworICAgICAgQ2ggICAgIDogQXR0cmlidXRlZF9DaGFyYWN0ZXIpOwogICAgLS0gIEFLQQogICAgLS0gIEFMSUFTKGBtdmFkZGNoKCknKQogCiAgICBwcm9jZWR1cmUgQWRkCi0gICAgIChXaW4gICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OwotICAgICAgTGluZSAgIDogaW4gTGluZV9Qb3NpdGlvbjsKLSAgICAgIENvbHVtbiA6IGluIENvbHVtbl9Qb3NpdGlvbjsKLSAgICAgIENoICAgICA6IGluIENoYXJhY3Rlcik7CisgICAgIChXaW4gICAgOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgTGluZSAgIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgIENvbHVtbiA6IENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgIENoICAgICA6IENoYXJhY3Rlcik7CiAgICAtLSAgTW92ZSB0byB0aGUgcG9zaXRpb24gYW5kIGFkZCBhIHNpbmdsZSBjaGFyYWN0ZXIgaW50byB0aGUgd2luZG93CiAgICAtLSAgVGhlcmUgYXJlIG1vcmUgQWRkIHJvdXRpbmVzLCBzbyB0aGUgSW5saW5lIHByYWdtYSBmb2xsb3dzIGxhdGVyCiAKICAgIC0tICBBTkNIT1IoYHdlY2hvY2hhcigpJyxgQWRkX1dpdGhfSW1tZWRpYXRlX0VjaG8nKQogICAgcHJvY2VkdXJlIEFkZF9XaXRoX0ltbWVkaWF0ZV9FY2hvCi0gICAgIChXaW4gOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OwotICAgICAgQ2ggIDogaW4gQXR0cmlidXRlZF9DaGFyYWN0ZXIpOworICAgICAoV2luIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIENoICA6IEF0dHJpYnV0ZWRfQ2hhcmFjdGVyKTsKICAgIC0tICBBS0EKICAgIC0tICBBTElBUyhgZWNob2NoYXIoKScpCiAKICAgIHByb2NlZHVyZSBBZGRfV2l0aF9JbW1lZGlhdGVfRWNobwotICAgICAoV2luIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKLSAgICAgIENoICA6IGluIENoYXJhY3Rlcik7CisgICAgIChXaW4gOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgQ2ggIDogQ2hhcmFjdGVyKTsKICAgIC0tICBBZGQgYSBjaGFyYWN0ZXIgYW5kIGRvIGFuIGltbWVkaWF0ZSByZWZyZXNoIG9mIHRoZSBzY3JlZW4uCiAgICBwcmFnbWEgSW5saW5lIChBZGRfV2l0aF9JbW1lZGlhdGVfRWNobyk7CiAKQEAgLTMzMSw1MiArNzgwLDUyIEBACiAgICBwcmFnbWEgSW5saW5lIChEdXBsaWNhdGUpOwogCiAgICAtLSAgQU5DSE9SKGBtdndpbigpJyxgTW92ZV9XaW5kb3cnKQotICAgcHJvY2VkdXJlIE1vdmVfV2luZG93IChXaW4gICAgOiBpbiBXaW5kb3c7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIExpbmUgICA6IGluIExpbmVfUG9zaXRpb247Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIENvbHVtbiA6IGluIENvbHVtbl9Qb3NpdGlvbik7CisgICBwcm9jZWR1cmUgTW92ZV9XaW5kb3cgKFdpbiAgICA6IFdpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTGluZSAgIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sdW1uIDogQ29sdW1uX1Bvc2l0aW9uKTsKICAgIC0tICBBS0EKICAgIHByYWdtYSBJbmxpbmUgKE1vdmVfV2luZG93KTsKIAogICAgLS0gIEFOQ0hPUihgbXZkZXJ3aW4oKScsYE1vdmVfRGVyaXZlZF9XaW5kb3cnKQotICAgcHJvY2VkdXJlIE1vdmVfRGVyaXZlZF9XaW5kb3cgKFdpbiAgICA6IGluIFdpbmRvdzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5lICAgOiBpbiBMaW5lX1Bvc2l0aW9uOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbHVtbiA6IGluIENvbHVtbl9Qb3NpdGlvbik7CisgICBwcm9jZWR1cmUgTW92ZV9EZXJpdmVkX1dpbmRvdyAoV2luICAgIDogV2luZG93OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpbmUgICA6IExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sdW1uIDogQ29sdW1uX1Bvc2l0aW9uKTsKICAgIC0tICBBS0EKICAgIHByYWdtYSBJbmxpbmUgKE1vdmVfRGVyaXZlZF9XaW5kb3cpOwogCiAgICAtLSAgQU5DSE9SKGB3c3luY3VwKCknLGBTeW5jaHJvbml6ZV9VcHdhcmRzJykKLSAgIHByb2NlZHVyZSBTeW5jaHJvbml6ZV9VcHdhcmRzIChXaW4gOiBpbiBXaW5kb3cpOworICAgcHJvY2VkdXJlIFN5bmNocm9uaXplX1Vwd2FyZHMgKFdpbiA6IFdpbmRvdyk7CiAgICAtLSAgQUtBCiAgICBwcmFnbWEgSW1wb3J0IChDLCBTeW5jaHJvbml6ZV9VcHdhcmRzLCAid3N5bmN1cCIpOwogCiAgICAtLSAgQU5DSE9SKGB3c3luY2Rvd24oKScsYFN5bmNocm9uaXplX0Rvd253YXJkcycpCi0gICBwcm9jZWR1cmUgU3luY2hyb25pemVfRG93bndhcmRzIChXaW4gOiBpbiBXaW5kb3cpOworICAgcHJvY2VkdXJlIFN5bmNocm9uaXplX0Rvd253YXJkcyAoV2luIDogV2luZG93KTsKICAgIC0tICBBS0EKICAgIHByYWdtYSBJbXBvcnQgKEMsIFN5bmNocm9uaXplX0Rvd253YXJkcywgIndzeW5jZG93biIpOwogCiAgICAtLSAgQU5DSE9SKGBzeW5jb2soKScsYFNldF9TeW5jaF9Nb2RlJykKLSAgIHByb2NlZHVyZSBTZXRfU3luY2hfTW9kZSAoV2luICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vZGUgOiBpbiBCb29sZWFuIDo9IEZhbHNlKTsKKyAgIHByb2NlZHVyZSBTZXRfU3luY2hfTW9kZSAoV2luICA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vZGUgOiBCb29sZWFuIDo9IEZhbHNlKTsKICAgIC0tICBBS0EKICAgIHByYWdtYSBJbmxpbmUgKFNldF9TeW5jaF9Nb2RlKTsKIAogICAgLS0gIE1BTlBBR0UoYGN1cnNfYWRkc3RyLjN4JykKIAogICAgLS0gIEFOQ0hPUihgd2FkZG5zdHIoKScsYEFkZCcpCi0gICBwcm9jZWR1cmUgQWRkIChXaW4gOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OwotICAgICAgICAgICAgICAgICAgU3RyIDogaW4gU3RyaW5nOwotICAgICAgICAgICAgICAgICAgTGVuIDogaW4gSW50ZWdlciA6PSAtMSk7CisgICBwcm9jZWR1cmUgQWRkIChXaW4gOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgICAgICAgICAgICAgU3RyIDogU3RyaW5nOworICAgICAgICAgICAgICAgICAgTGVuIDogSW50ZWdlciA6PSAtMSk7CiAgICAtLSAgQUtBCiAgICAtLSAgQUxJQVMoYHdhZGRzdHIoKScpCiAgICAtLSAgQUxJQVMoYGFkZG5zdHIoKScpCiAgICAtLSAgQUxJQVMoYGFkZHN0cigpJykKIAogICAgLS0gIEFOQ0hPUihgbXZ3YWRkbnN0cigpJyxgQWRkJykKLSAgIHByb2NlZHVyZSBBZGQgKFdpbiAgICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7Ci0gICAgICAgICAgICAgICAgICBMaW5lICAgOiBpbiBMaW5lX1Bvc2l0aW9uOwotICAgICAgICAgICAgICAgICAgQ29sdW1uIDogaW4gQ29sdW1uX1Bvc2l0aW9uOwotICAgICAgICAgICAgICAgICAgU3RyICAgIDogaW4gU3RyaW5nOwotICAgICAgICAgICAgICAgICAgTGVuICAgIDogaW4gSW50ZWdlciA6PSAtMSk7CisgICBwcm9jZWR1cmUgQWRkIChXaW4gICAgOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgICAgICAgICAgICAgTGluZSAgIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgIENvbHVtbiA6IENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgIFN0ciAgICA6IFN0cmluZzsKKyAgICAgICAgICAgICAgICAgIExlbiAgICA6IEludGVnZXIgOj0gLTEpOwogICAgLS0gIEFLQQogICAgLS0gIEFMSUFTKGBtdndhZGRzdHIoKScpCiAgICAtLSAgQUxJQVMoYG12YWRkbnN0cigpJykKQEAgLTM4NSwyMCArODM0LDIwIEBACiAgICAtLSAgTUFOUEFHRShgY3Vyc19hZGRjaHN0ci4zeCcpCiAKICAgIC0tICBBTkNIT1IoYHdhZGRjaG5zdHIoKScsYEFkZCcpCi0gICBwcm9jZWR1cmUgQWRkIChXaW4gOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OwotICAgICAgICAgICAgICAgICAgU3RyIDogaW4gQXR0cmlidXRlZF9TdHJpbmc7Ci0gICAgICAgICAgICAgICAgICBMZW4gOiBpbiBJbnRlZ2VyIDo9IC0xKTsKKyAgIHByb2NlZHVyZSBBZGQgKFdpbiA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICAgICAgICAgICAgICBTdHIgOiBBdHRyaWJ1dGVkX1N0cmluZzsKKyAgICAgICAgICAgICAgICAgIExlbiA6IEludGVnZXIgOj0gLTEpOwogICAgLS0gIEFLQQogICAgLS0gIEFMSUFTKGB3YWRkY2hzdHIoKScpCiAgICAtLSAgQUxJQVMoYGFkZGNobnN0cigpJykKICAgIC0tICBBTElBUyhgYWRkY2hzdHIoKScpCiAKICAgIC0tICBBTkNIT1IoYG12d2FkZGNobnN0cigpJyxgQWRkJykKLSAgIHByb2NlZHVyZSBBZGQgKFdpbiAgICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7Ci0gICAgICAgICAgICAgICAgICBMaW5lICAgOiBpbiBMaW5lX1Bvc2l0aW9uOwotICAgICAgICAgICAgICAgICAgQ29sdW1uIDogaW4gQ29sdW1uX1Bvc2l0aW9uOwotICAgICAgICAgICAgICAgICAgU3RyICAgIDogaW4gQXR0cmlidXRlZF9TdHJpbmc7Ci0gICAgICAgICAgICAgICAgICBMZW4gICAgOiBpbiBJbnRlZ2VyIDo9IC0xKTsKKyAgIHByb2NlZHVyZSBBZGQgKFdpbiAgICA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICAgICAgICAgICAgICBMaW5lICAgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgQ29sdW1uIDogQ29sdW1uX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgU3RyICAgIDogQXR0cmlidXRlZF9TdHJpbmc7CisgICAgICAgICAgICAgICAgICBMZW4gICAgOiBJbnRlZ2VyIDo9IC0xKTsKICAgIC0tICBBS0EKICAgIC0tICBBTElBUyhgbXZ3YWRkY2hzdHIoKScpCiAgICAtLSAgQUxJQVMoYG12YWRkY2huc3RyKCknKQpAQCAtNDExLDE1ICs4NjAsMTUgQEAKIAogICAgLS0gIEFOQ0hPUihgd2JvcmRlcigpJyxgQm9yZGVyJykKICAgIHByb2NlZHVyZSBCb3JkZXIKLSAgICAgKFdpbiAgICAgICAgICAgICAgICAgICAgICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OwotICAgICAgTGVmdF9TaWRlX1N5bWJvbCAgICAgICAgICA6IGluIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyIDo9IERlZmF1bHRfQ2hhcmFjdGVyOwotICAgICAgUmlnaHRfU2lkZV9TeW1ib2wgICAgICAgICA6IGluIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyIDo9IERlZmF1bHRfQ2hhcmFjdGVyOwotICAgICAgVG9wX1NpZGVfU3ltYm9sICAgICAgICAgICA6IGluIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyIDo9IERlZmF1bHRfQ2hhcmFjdGVyOwotICAgICAgQm90dG9tX1NpZGVfU3ltYm9sICAgICAgICA6IGluIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyIDo9IERlZmF1bHRfQ2hhcmFjdGVyOwotICAgICAgVXBwZXJfTGVmdF9Db3JuZXJfU3ltYm9sICA6IGluIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyIDo9IERlZmF1bHRfQ2hhcmFjdGVyOwotICAgICAgVXBwZXJfUmlnaHRfQ29ybmVyX1N5bWJvbCA6IGluIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyIDo9IERlZmF1bHRfQ2hhcmFjdGVyOwotICAgICAgTG93ZXJfTGVmdF9Db3JuZXJfU3ltYm9sICA6IGluIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyIDo9IERlZmF1bHRfQ2hhcmFjdGVyOwotICAgICAgTG93ZXJfUmlnaHRfQ29ybmVyX1N5bWJvbCA6IGluIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyIDo9IERlZmF1bHRfQ2hhcmFjdGVyCisgICAgIChXaW4gICAgICAgICAgICAgICAgICAgICAgIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIExlZnRfU2lkZV9TeW1ib2wgICAgICAgICAgOiBBdHRyaWJ1dGVkX0NoYXJhY3RlciA6PSBEZWZhdWx0X0NoYXJhY3RlcjsKKyAgICAgIFJpZ2h0X1NpZGVfU3ltYm9sICAgICAgICAgOiBBdHRyaWJ1dGVkX0NoYXJhY3RlciA6PSBEZWZhdWx0X0NoYXJhY3RlcjsKKyAgICAgIFRvcF9TaWRlX1N5bWJvbCAgICAgICAgICAgOiBBdHRyaWJ1dGVkX0NoYXJhY3RlciA6PSBEZWZhdWx0X0NoYXJhY3RlcjsKKyAgICAgIEJvdHRvbV9TaWRlX1N5bWJvbCAgICAgICAgOiBBdHRyaWJ1dGVkX0NoYXJhY3RlciA6PSBEZWZhdWx0X0NoYXJhY3RlcjsKKyAgICAgIFVwcGVyX0xlZnRfQ29ybmVyX1N5bWJvbCAgOiBBdHRyaWJ1dGVkX0NoYXJhY3RlciA6PSBEZWZhdWx0X0NoYXJhY3RlcjsKKyAgICAgIFVwcGVyX1JpZ2h0X0Nvcm5lcl9TeW1ib2wgOiBBdHRyaWJ1dGVkX0NoYXJhY3RlciA6PSBEZWZhdWx0X0NoYXJhY3RlcjsKKyAgICAgIExvd2VyX0xlZnRfQ29ybmVyX1N5bWJvbCAgOiBBdHRyaWJ1dGVkX0NoYXJhY3RlciA6PSBEZWZhdWx0X0NoYXJhY3RlcjsKKyAgICAgIExvd2VyX1JpZ2h0X0Nvcm5lcl9TeW1ib2wgOiBBdHRyaWJ1dGVkX0NoYXJhY3RlciA6PSBEZWZhdWx0X0NoYXJhY3RlcgogICAgICApOwogICAgLS0gIEFLQQogICAgLS0gIEFMSUFTKGBib3JkZXIoKScpCkBAIC00MjcsMjYgKzg3NiwyNiBAQAogCiAgICAtLSAgQU5DSE9SKGBib3goKScsYEJveCcpCiAgICBwcm9jZWR1cmUgQm94Ci0gICAgIChXaW4gICAgICAgICAgICAgICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7Ci0gICAgICBWZXJ0aWNhbF9TeW1ib2wgICA6IGluIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyIDo9IERlZmF1bHRfQ2hhcmFjdGVyOwotICAgICAgSG9yaXpvbnRhbF9TeW1ib2wgOiBpbiBBdHRyaWJ1dGVkX0NoYXJhY3RlciA6PSBEZWZhdWx0X0NoYXJhY3Rlcik7CisgICAgIChXaW4gICAgICAgICAgICAgICA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBWZXJ0aWNhbF9TeW1ib2wgICA6IEF0dHJpYnV0ZWRfQ2hhcmFjdGVyIDo9IERlZmF1bHRfQ2hhcmFjdGVyOworICAgICAgSG9yaXpvbnRhbF9TeW1ib2wgOiBBdHRyaWJ1dGVkX0NoYXJhY3RlciA6PSBEZWZhdWx0X0NoYXJhY3Rlcik7CiAgICAtLSAgQUtBCiAgICBwcmFnbWEgSW5saW5lIChCb3gpOwogCiAgICAtLSAgQU5DSE9SKGB3aGxpbmUoKScsYEhvcml6b250YWxfTGluZScpCiAgICBwcm9jZWR1cmUgSG9yaXpvbnRhbF9MaW5lCi0gICAgIChXaW4gICAgICAgICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7Ci0gICAgICBMaW5lX1NpemUgICA6IGluIE5hdHVyYWw7Ci0gICAgICBMaW5lX1N5bWJvbCA6IGluIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyIDo9IERlZmF1bHRfQ2hhcmFjdGVyKTsKKyAgICAgKFdpbiAgICAgICAgIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIExpbmVfU2l6ZSAgIDogTmF0dXJhbDsKKyAgICAgIExpbmVfU3ltYm9sIDogQXR0cmlidXRlZF9DaGFyYWN0ZXIgOj0gRGVmYXVsdF9DaGFyYWN0ZXIpOwogICAgLS0gIEFLQQogICAgLS0gIEFMSUFTKGBobGluZSgpJykKICAgIHByYWdtYSBJbmxpbmUgKEhvcml6b250YWxfTGluZSk7CiAKICAgIC0tICBBTkNIT1IoYHd2bGluZSgpJyxgVmVydGljYWxfTGluZScpCiAgICBwcm9jZWR1cmUgVmVydGljYWxfTGluZQotICAgICAoV2luICAgICAgICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OwotICAgICAgTGluZV9TaXplICAgOiBpbiBOYXR1cmFsOwotICAgICAgTGluZV9TeW1ib2wgOiBpbiBBdHRyaWJ1dGVkX0NoYXJhY3RlciA6PSBEZWZhdWx0X0NoYXJhY3Rlcik7CisgICAgIChXaW4gICAgICAgICA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBMaW5lX1NpemUgICA6IE5hdHVyYWw7CisgICAgICBMaW5lX1N5bWJvbCA6IEF0dHJpYnV0ZWRfQ2hhcmFjdGVyIDo9IERlZmF1bHRfQ2hhcmFjdGVyKTsKICAgIC0tICBBS0EKICAgIC0tICBBTElBUyhgdmxpbmUoKScpCiAgICBwcmFnbWEgSW5saW5lIChWZXJ0aWNhbF9MaW5lKTsKQEAgLTQ2MSwxMiArOTEwLDEyIEBACiAgICAtLSAgQUxJQVMoYGdldGNoKCknKQogICAgLS0gIEdldCBhIGNoYXJhY3RlciBmcm9tIHRoZSBrZXlib2FyZCBhbmQgZWNobyBpdCAtIGlmIGVuYWJsZWQgLSB0byB0aGUKICAgIC0tICB3aW5kb3cuCi0gICAtLSAgSWYgZm9yIGFueSByZWFzb24gKGkuZS4gYSB0aW1lb3V0KSB3ZSBjb3VsZG4ndCBnZXQgYSBjaGFyYWN0ZXIgdGhlCisgICAtLSAgSWYgZm9yIGFueSByZWFzb24gKGkuZS4gYSB0aW1lb3V0KSB3ZSBjb3VsZCBub3QgZ2V0IGEgY2hhcmFjdGVyIHRoZQogICAgLS0gIHJldHVybmVkIGtleWNvZGUgaXMgS2V5X05vbmUuCiAgICBwcmFnbWEgSW5saW5lIChHZXRfS2V5c3Ryb2tlKTsKIAogICAgLS0gIEFOQ0hPUihgdW5nZXRjaCgpJyxgVW5kb19LZXlzdHJva2UnKQotICAgcHJvY2VkdXJlIFVuZG9fS2V5c3Ryb2tlIChLZXkgOiBpbiBSZWFsX0tleV9Db2RlKTsKKyAgIHByb2NlZHVyZSBVbmRvX0tleXN0cm9rZSAoS2V5IDogUmVhbF9LZXlfQ29kZSk7CiAgICAtLSAgQUtBCiAgICBwcmFnbWEgSW5saW5lIChVbmRvX0tleXN0cm9rZSk7CiAKQEAgLTUwOSw5ICs5NTgsOSBAQAogCiAgICAtLSAgQU5DSE9SKGB3YXR0cm9uKCknLGBTd2l0Y2hfQ2hhcmFjdGVyX0F0dHJpYnV0ZScpCiAgICBwcm9jZWR1cmUgU3dpdGNoX0NoYXJhY3Rlcl9BdHRyaWJ1dGUKLSAgICAgKFdpbiAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OwotICAgICAgQXR0ciA6IGluIENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0IDo9IE5vcm1hbF9WaWRlbzsKLSAgICAgIE9uICAgOiBpbiBCb29sZWFuIDo9IFRydWUpOyAtLSAgaWYgRmFsc2Ugd2Ugc3dpdGNoIE9mZi4KKyAgICAgKFdpbiAgOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgQXR0ciA6IENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0IDo9IE5vcm1hbF9WaWRlbzsKKyAgICAgIE9uICAgOiBCb29sZWFuIDo9IFRydWUpOyAtLSAgaWYgRmFsc2Ugd2Ugc3dpdGNoIE9mZi4KICAgIC0tICBTd2l0Y2hlcyB0aG9zZSBBdHRyaWJ1dGVzIHNldCB0byB0cnVlIGluIHRoZSBsaXN0LgogICAgLS0gIEFLQQogICAgLS0gIEFMSUFTKGB3YXR0cm9mZigpJykKQEAgLTUyMCw0OSArOTY5LDQ5IEBACiAKICAgIC0tICBBTkNIT1IoYHdhdHRyc2V0KCknLGBTZXRfQ2hhcmFjdGVyX0F0dHJpYnV0ZXMnKQogICAgcHJvY2VkdXJlIFNldF9DaGFyYWN0ZXJfQXR0cmlidXRlcwotICAgICAoV2luICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OwotICAgICAgQXR0ciAgOiBpbiBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldCA6PSBOb3JtYWxfVmlkZW87Ci0gICAgICBDb2xvciA6IGluIENvbG9yX1BhaXIgOj0gQ29sb3JfUGFpcidGaXJzdCk7CisgICAgIChXaW4gICA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBBdHRyICA6IENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0IDo9IE5vcm1hbF9WaWRlbzsKKyAgICAgIENvbG9yIDogQ29sb3JfUGFpciA6PSBDb2xvcl9QYWlyJ0ZpcnN0KTsKICAgIC0tICBBS0EKICAgIC0tICBBTElBUyhgYXR0cnNldCgpJykKICAgIHByYWdtYSBJbmxpbmUgKFNldF9DaGFyYWN0ZXJfQXR0cmlidXRlcyk7CiAKICAgIC0tICBBTkNIT1IoYHdhdHRyX2dldCgpJyxgR2V0X0NoYXJhY3Rlcl9BdHRyaWJ1dGVzJykKICAgIGZ1bmN0aW9uIEdldF9DaGFyYWN0ZXJfQXR0cmlidXRlCi0gICAgIChXaW4gOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93KSByZXR1cm4gQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQ7CisgICAgIChXaW4gOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93KSByZXR1cm4gQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQ7CiAgICAtLSAgQUtBCiAgICAtLSAgQUxJQVMoYGF0dHJfZ2V0KCknKQogCiAgICAtLSAgQU5DSE9SKGB3YXR0cl9nZXQoKScsYEdldF9DaGFyYWN0ZXJfQXR0cmlidXRlJykKICAgIGZ1bmN0aW9uIEdldF9DaGFyYWN0ZXJfQXR0cmlidXRlCi0gICAgIChXaW4gOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93KSByZXR1cm4gQ29sb3JfUGFpcjsKKyAgICAgKFdpbiA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3cpIHJldHVybiBDb2xvcl9QYWlyOwogICAgLS0gIEFLQQogICAgcHJhZ21hIElubGluZSAoR2V0X0NoYXJhY3Rlcl9BdHRyaWJ1dGUpOwogCiAgICAtLSAgQU5DSE9SKGB3Y29sb3Jfc2V0KCknLGBTZXRfQ29sb3InKQotICAgcHJvY2VkdXJlIFNldF9Db2xvciAoV2luICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7Ci0gICAgICAgICAgICAgICAgICAgICAgICBQYWlyIDogaW4gQ29sb3JfUGFpcik7CisgICBwcm9jZWR1cmUgU2V0X0NvbG9yIChXaW4gIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgIFBhaXIgOiBDb2xvcl9QYWlyKTsKICAgIC0tICBBS0EKICAgIC0tICBBTElBUyhgY29sb3Jfc2V0KCknKQogICAgcHJhZ21hIElubGluZSAoU2V0X0NvbG9yKTsKIAogICAgLS0gIEFOQ0hPUihgd2NoZ2F0KCknLGBDaGFuZ2VfQXR0cmlidXRlcycpCiAgICBwcm9jZWR1cmUgQ2hhbmdlX0F0dHJpYnV0ZXMKLSAgICAgKFdpbiAgIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKLSAgICAgIENvdW50IDogaW4gSW50ZWdlciA6PSAtMTsKLSAgICAgIEF0dHIgIDogaW4gQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQgOj0gTm9ybWFsX1ZpZGVvOwotICAgICAgQ29sb3IgOiBpbiBDb2xvcl9QYWlyIDo9IENvbG9yX1BhaXInRmlyc3QpOworICAgICAoV2luICAgOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgQ291bnQgOiBJbnRlZ2VyIDo9IC0xOworICAgICAgQXR0ciAgOiBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldCA6PSBOb3JtYWxfVmlkZW87CisgICAgICBDb2xvciA6IENvbG9yX1BhaXIgOj0gQ29sb3JfUGFpcidGaXJzdCk7CiAgICAtLSAgQUtBCiAgICAtLSAgQUxJQVMoYGNoZ2F0KCknKQogCiAgICAtLSAgQU5DSE9SKGBtdndjaGdhdCgpJyxgQ2hhbmdlX0F0dHJpYnV0ZXMnKQogICAgcHJvY2VkdXJlIENoYW5nZV9BdHRyaWJ1dGVzCi0gICAgIChXaW4gICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OwotICAgICAgTGluZSAgIDogaW4gTGluZV9Qb3NpdGlvbiA6PSBMaW5lX1Bvc2l0aW9uJ0ZpcnN0OwotICAgICAgQ29sdW1uIDogaW4gQ29sdW1uX1Bvc2l0aW9uIDo9IENvbHVtbl9Qb3NpdGlvbidGaXJzdDsKLSAgICAgIENvdW50ICA6IGluIEludGVnZXIgOj0gLTE7Ci0gICAgICBBdHRyICAgOiBpbiBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldCA6PSBOb3JtYWxfVmlkZW87Ci0gICAgICBDb2xvciAgOiBpbiBDb2xvcl9QYWlyIDo9IENvbG9yX1BhaXInRmlyc3QpOworICAgICAoV2luICAgIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIExpbmUgICA6IExpbmVfUG9zaXRpb24gOj0gTGluZV9Qb3NpdGlvbidGaXJzdDsKKyAgICAgIENvbHVtbiA6IENvbHVtbl9Qb3NpdGlvbiA6PSBDb2x1bW5fUG9zaXRpb24nRmlyc3Q7CisgICAgICBDb3VudCAgOiBJbnRlZ2VyIDo9IC0xOworICAgICAgQXR0ciAgIDogQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQgOj0gTm9ybWFsX1ZpZGVvOworICAgICAgQ29sb3IgIDogQ29sb3JfUGFpciA6PSBDb2xvcl9QYWlyJ0ZpcnN0KTsKICAgIC0tICBBS0EKICAgIC0tICBBTElBUyhgbXZjaGdhdCgpJykKICAgIHByYWdtYSBJbmxpbmUgKENoYW5nZV9BdHRyaWJ1dGVzKTsKQEAgLTU4NCwzNiArMTAzMywzNiBAQAogICAgLS0gIHwgTm90IGltcGxlbWVudGVkIDogdHlwZWFoZWFkCiAgICAtLQogICAgLS0gIEFOQ0hPUihgY2JyZWFrKCknLGBTZXRfQ2JyZWFrX01vZGUnKQotICAgcHJvY2VkdXJlIFNldF9DYnJlYWtfTW9kZSAoU3dpdGNoT24gOiBpbiBCb29sZWFuIDo9IFRydWUpOworICAgcHJvY2VkdXJlIFNldF9DYnJlYWtfTW9kZSAoU3dpdGNoT24gOiBCb29sZWFuIDo9IFRydWUpOwogICAgLS0gIEFLQQogICAgLS0gIEFMSUFTKGBub2NicmVhaygpJykKICAgIHByYWdtYSBJbmxpbmUgKFNldF9DYnJlYWtfTW9kZSk7CiAKICAgIC0tICBBTkNIT1IoYHJhdygpJyxgU2V0X1Jhd19Nb2RlJykKLSAgIHByb2NlZHVyZSBTZXRfUmF3X01vZGUgKFN3aXRjaE9uIDogaW4gQm9vbGVhbiA6PSBUcnVlKTsKKyAgIHByb2NlZHVyZSBTZXRfUmF3X01vZGUgKFN3aXRjaE9uIDogQm9vbGVhbiA6PSBUcnVlKTsKICAgIC0tICBBS0EKICAgIC0tICBBTElBUyhgbm9yYXcoKScpCiAgICBwcmFnbWEgSW5saW5lIChTZXRfUmF3X01vZGUpOwogCiAgICAtLSAgQU5DSE9SKGBlY2hvKCknLGBTZXRfRWNob19Nb2RlJykKLSAgIHByb2NlZHVyZSBTZXRfRWNob19Nb2RlIChTd2l0Y2hPbiA6IGluIEJvb2xlYW4gOj0gVHJ1ZSk7CisgICBwcm9jZWR1cmUgU2V0X0VjaG9fTW9kZSAoU3dpdGNoT24gOiBCb29sZWFuIDo9IFRydWUpOwogICAgLS0gIEFLQQogICAgLS0gIEFMSUFTKGBub2VjaG8oKScpCiAgICBwcmFnbWEgSW5saW5lIChTZXRfRWNob19Nb2RlKTsKIAogICAgLS0gIEFOQ0hPUihgbWV0YSgpJyxgU2V0X01ldGFfTW9kZScpCi0gICBwcm9jZWR1cmUgU2V0X01ldGFfTW9kZSAoV2luICAgICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN3aXRjaE9uIDogaW4gQm9vbGVhbiA6PSBUcnVlKTsKKyAgIHByb2NlZHVyZSBTZXRfTWV0YV9Nb2RlIChXaW4gICAgICA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3dpdGNoT24gOiBCb29sZWFuIDo9IFRydWUpOwogICAgLS0gIEFLQQogICAgcHJhZ21hIElubGluZSAoU2V0X01ldGFfTW9kZSk7CiAKICAgIC0tICBBTkNIT1IoYGtleXBhZCgpJyxgU2V0X0tleVBhZF9Nb2RlJykKLSAgIHByb2NlZHVyZSBTZXRfS2V5UGFkX01vZGUgKFdpbiAgICAgIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN3aXRjaE9uIDogaW4gQm9vbGVhbiA6PSBUcnVlKTsKKyAgIHByb2NlZHVyZSBTZXRfS2V5UGFkX01vZGUgKFdpbiAgICAgIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN3aXRjaE9uIDogQm9vbGVhbiA6PSBUcnVlKTsKICAgIC0tICBBS0EKICAgIHByYWdtYSBJbmxpbmUgKFNldF9LZXlQYWRfTW9kZSk7CiAKLSAgIGZ1bmN0aW9uIEdldF9LZXlQYWRfTW9kZSAoV2luIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdykKKyAgIGZ1bmN0aW9uIEdldF9LZXlQYWRfTW9kZSAoV2luIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEJvb2xlYW47CiAgICAtLSAgVGhpcyBoYXMgbm8gcGVuZGFudCBpbiBDLiBUaGVyZSB5b3UndmUgdG8gbG9vayBpbnRvIHRoZSBXSU5ET1dTCiAgICAtLSAgc3RydWN0dXJlIHRvIGdldCB0aGUgdmFsdWUuIEJhZCBwcmFjdGljZSwgbm90IHJlcGVhdGVkIGluIEFkYS4KQEAgLTYyMSwxMDAgKzEwNzAsMTAwIEBACiAgICB0eXBlIEhhbGZfRGVsYXlfQW1vdW50IGlzIHJhbmdlIDEgLi4gMjU1OwogCiAgICAtLSAgQU5DSE9SKGBoYWxmZGVsYXkoKScsYEhhbGZfRGVsYXknKQotICAgcHJvY2VkdXJlIEhhbGZfRGVsYXkgKEFtb3VudCA6IGluIEhhbGZfRGVsYXlfQW1vdW50KTsKKyAgIHByb2NlZHVyZSBIYWxmX0RlbGF5IChBbW91bnQgOiBIYWxmX0RlbGF5X0Ftb3VudCk7CiAgICAtLSAgQUtBCiAgICBwcmFnbWEgSW5saW5lIChIYWxmX0RlbGF5KTsKIAogICAgLS0gIEFOQ0hPUihgaW50cmZsdXNoKCknLGBTZXRfRmx1c2hfT25fSW50ZXJydXB0X01vZGUnKQogICAgcHJvY2VkdXJlIFNldF9GbHVzaF9Pbl9JbnRlcnJ1cHRfTW9kZQotICAgICAoV2luICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7Ci0gICAgICBNb2RlIDogaW4gQm9vbGVhbiA6PSBUcnVlKTsKKyAgICAgKFdpbiAgOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgTW9kZSA6IEJvb2xlYW4gOj0gVHJ1ZSk7CiAgICAtLSAgQUtBCiAgICBwcmFnbWEgSW5saW5lIChTZXRfRmx1c2hfT25fSW50ZXJydXB0X01vZGUpOwogCiAgICAtLSAgQU5DSE9SKGBxaWZsdXNoKCknLGBTZXRfUXVldWVfSW50ZXJydXB0X01vZGUnKQogICAgcHJvY2VkdXJlIFNldF9RdWV1ZV9JbnRlcnJ1cHRfTW9kZQotICAgICAoV2luICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OwotICAgICAgRmx1c2ggOiBpbiBCb29sZWFuIDo9IFRydWUpOworICAgICAoV2luICAgOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgRmx1c2ggOiBCb29sZWFuIDo9IFRydWUpOwogICAgLS0gIEFLQQogICAgLS0gIEFMSUFTKGBub3FpZmx1c2goKScpCiAgICBwcmFnbWEgSW5saW5lIChTZXRfUXVldWVfSW50ZXJydXB0X01vZGUpOwogCiAgICAtLSAgQU5DSE9SKGBub2RlbGF5KCknLGBTZXRfTm9EZWxheV9Nb2RlJykKICAgIHByb2NlZHVyZSBTZXRfTm9EZWxheV9Nb2RlCi0gICAgIChXaW4gIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKLSAgICAgIE1vZGUgOiBpbiBCb29sZWFuIDo9IEZhbHNlKTsKKyAgICAgKFdpbiAgOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgTW9kZSA6IEJvb2xlYW4gOj0gRmFsc2UpOwogICAgLS0gIEFLQQogICAgcHJhZ21hIElubGluZSAoU2V0X05vRGVsYXlfTW9kZSk7CiAKICAgIHR5cGUgVGltZW91dF9Nb2RlIGlzIChCbG9ja2luZywgTm9uX0Jsb2NraW5nLCBEZWxheWVkKTsKIAogICAgLS0gIEFOQ0hPUihgd3RpbWVvdXQoKScsYFNldF9UaW1lb3V0X01vZGUnKQotICAgcHJvY2VkdXJlIFNldF9UaW1lb3V0X01vZGUgKFdpbiAgICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTW9kZSAgIDogaW4gVGltZW91dF9Nb2RlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFtb3VudCA6IGluIE5hdHVyYWwpOyAtLSAgaW4gTWlsbGlzZWNvbmRzCisgICBwcm9jZWR1cmUgU2V0X1RpbWVvdXRfTW9kZSAoV2luICAgIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb2RlICAgOiBUaW1lb3V0X01vZGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQW1vdW50IDogTmF0dXJhbCk7IC0tICBpbiBNaWxsaXNlY29uZHMKICAgIC0tICBBS0EKICAgIC0tICBBTElBUyhgdGltZW91dCgpJykKICAgIC0tICBJbnN0ZWFkIG9mIG92ZXJsb2FkaW5nIHRoZSBzZW1hbnRpYyBvZiB0aGUgc2lnbiBvZiBhbW91bnQsIHdlCiAgICAtLSAgaW50cm9kdWNlIHRoZSBUaW1lb3V0X01vZGUgcGFyYW1ldGVyLiBUaGlzIHNob3VsZCBpbXByb3ZlCiAgICAtLSAgcmVhZGFiaWxpdHkuIEZvciBCbG9ja2luZyBhbmQgTm9uX0Jsb2NraW5nLCB0aGUgQW1vdW50IGlzIG5vdAogICAgLS0gIGV2YWx1YXRlZC4KLSAgIC0tICBXZSBkb24ndCBpbmxpbmUgdGhpcyBwcm9jZWR1cmUuCisgICAtLSAgV2UgZG8gbm90IGlubGluZSB0aGlzIHByb2NlZHVyZS4KIAogICAgLS0gIEFOQ0hPUihgbm90aW1lb3V0KCknLGBTZXRfRXNjYXBlX1RpbWVfTW9kZScpCiAgICBwcm9jZWR1cmUgU2V0X0VzY2FwZV9UaW1lcl9Nb2RlCi0gICAgIChXaW4gICAgICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OwotICAgICAgVGltZXJfT2ZmIDogaW4gQm9vbGVhbiA6PSBGYWxzZSk7CisgICAgIChXaW4gICAgICAgOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgVGltZXJfT2ZmIDogQm9vbGVhbiA6PSBGYWxzZSk7CiAgICAtLSAgQUtBCiAgICBwcmFnbWEgSW5saW5lIChTZXRfRXNjYXBlX1RpbWVyX01vZGUpOwogCiAgICAtLSAgTUFOUEFHRShgY3Vyc19vdXRvcHRzLjN4JykKIAogICAgLS0gIEFOQ0hPUihgbmwoKScsYFNldF9OTF9Nb2RlJykKLSAgIHByb2NlZHVyZSBTZXRfTkxfTW9kZSAoU3dpdGNoT24gOiBpbiBCb29sZWFuIDo9IFRydWUpOworICAgcHJvY2VkdXJlIFNldF9OTF9Nb2RlIChTd2l0Y2hPbiA6IEJvb2xlYW4gOj0gVHJ1ZSk7CiAgICAtLSAgQUtBCiAgICAtLSAgQUxJQVMoYG5vbmwoKScpCiAgICBwcmFnbWEgSW5saW5lIChTZXRfTkxfTW9kZSk7CiAKICAgIC0tICBBTkNIT1IoYGNsZWFyb2soKScsYENsZWFyX09uX05leHRfVXBkYXRlJykKICAgIHByb2NlZHVyZSBDbGVhcl9Pbl9OZXh0X1VwZGF0ZQotICAgICAoV2luICAgICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OwotICAgICAgRG9fQ2xlYXIgOiBpbiBCb29sZWFuIDo9IFRydWUpOworICAgICAoV2luICAgICAgOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgRG9fQ2xlYXIgOiBCb29sZWFuIDo9IFRydWUpOwogICAgLS0gIEFLQQogICAgcHJhZ21hIElubGluZSAoQ2xlYXJfT25fTmV4dF9VcGRhdGUpOwogCiAgICAtLSAgQU5DSE9SKGBpZGxvaygpJyxgVXNlX0luc2VydF9EZWxldGVfTGluZScpCiAgICBwcm9jZWR1cmUgVXNlX0luc2VydF9EZWxldGVfTGluZQotICAgICAoV2luICAgIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKLSAgICAgIERvX0lkbCA6IGluIEJvb2xlYW4gOj0gVHJ1ZSk7CisgICAgIChXaW4gICAgOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgRG9fSWRsIDogQm9vbGVhbiA6PSBUcnVlKTsKICAgIC0tICBBS0EKICAgIHByYWdtYSBJbmxpbmUgKFVzZV9JbnNlcnRfRGVsZXRlX0xpbmUpOwogCiAgICAtLSAgQU5DSE9SKGBpZGNvaygpJyxgVXNlX0luc2VydF9EZWxldGVfQ2hhcmFjdGVyJykKICAgIHByb2NlZHVyZSBVc2VfSW5zZXJ0X0RlbGV0ZV9DaGFyYWN0ZXIKLSAgICAgKFdpbiAgICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7Ci0gICAgICBEb19JZGMgOiBpbiBCb29sZWFuIDo9IFRydWUpOworICAgICAoV2luICAgIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIERvX0lkYyA6IEJvb2xlYW4gOj0gVHJ1ZSk7CiAgICAtLSAgQUtBCiAgICBwcmFnbWEgSW5saW5lIChVc2VfSW5zZXJ0X0RlbGV0ZV9DaGFyYWN0ZXIpOwogCiAgICAtLSAgQU5DSE9SKGBsZWF2ZW9rKCknLGBMZWF2ZV9DdXJzb3JfQWZ0ZXJfVXBkYXRlJykKICAgIHByb2NlZHVyZSBMZWF2ZV9DdXJzb3JfQWZ0ZXJfVXBkYXRlCi0gICAgIChXaW4gICAgICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7Ci0gICAgICBEb19MZWF2ZSA6IGluIEJvb2xlYW4gOj0gVHJ1ZSk7CisgICAgIChXaW4gICAgICA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBEb19MZWF2ZSA6IEJvb2xlYW4gOj0gVHJ1ZSk7CiAgICAtLSAgQUtBCiAgICBwcmFnbWEgSW5saW5lIChMZWF2ZV9DdXJzb3JfQWZ0ZXJfVXBkYXRlKTsKIAogICAgLS0gIEFOQ0hPUihgaW1tZWRvaygpJyxgSW1tZWRpYXRlX1VwZGF0ZV9Nb2RlJykKICAgIHByb2NlZHVyZSBJbW1lZGlhdGVfVXBkYXRlX01vZGUKLSAgICAgKFdpbiAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OwotICAgICAgTW9kZSA6IGluIEJvb2xlYW4gOj0gRmFsc2UpOworICAgICAoV2luICA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBNb2RlIDogQm9vbGVhbiA6PSBGYWxzZSk7CiAgICAtLSAgQUtBCiAgICBwcmFnbWEgSW5saW5lIChJbW1lZGlhdGVfVXBkYXRlX01vZGUpOwogCiAgICAtLSAgQU5DSE9SKGBzY3JvbGxvaygpJyxgQWxsb3dfU2Nyb2xsaW5nJykKICAgIHByb2NlZHVyZSBBbGxvd19TY3JvbGxpbmcKLSAgICAgKFdpbiAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OwotICAgICAgTW9kZSA6IGluIEJvb2xlYW4gOj0gRmFsc2UpOworICAgICAoV2luICA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBNb2RlIDogQm9vbGVhbiA6PSBGYWxzZSk7CiAgICAtLSAgQUtBCiAgICBwcmFnbWEgSW5saW5lIChBbGxvd19TY3JvbGxpbmcpOwogCkBAIC03MjQsOSArMTE3Myw5IEBACiAKICAgIC0tICBBTkNIT1IoYHdzZXRzY3JyZWcoKScsYFNldF9TY3JvbGxfUmVnaW9uJykKICAgIHByb2NlZHVyZSBTZXRfU2Nyb2xsX1JlZ2lvbgotICAgICAoV2luICAgICAgICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OwotICAgICAgVG9wX0xpbmUgICAgOiBpbiBMaW5lX1Bvc2l0aW9uOwotICAgICAgQm90dG9tX0xpbmUgOiBpbiBMaW5lX1Bvc2l0aW9uKTsKKyAgICAgKFdpbiAgICAgICAgIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIFRvcF9MaW5lICAgIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgIEJvdHRvbV9MaW5lIDogTGluZV9Qb3NpdGlvbik7CiAgICAtLSAgQUtBCiAgICAtLSAgQUxJQVMoYHNldHNjcnJlZygpJykKICAgIHByYWdtYSBJbmxpbmUgKFNldF9TY3JvbGxfUmVnaW9uKTsKQEAgLTczOSw3ICsxMTg4LDcgQEAKICAgIHByYWdtYSBJbmxpbmUgKFVwZGF0ZV9TY3JlZW4pOwogCiAgICAtLSAgQU5DSE9SKGB3cmVmcmVzaCgpJyxgUmVmcmVzaCcpCi0gICBwcm9jZWR1cmUgUmVmcmVzaCAoV2luIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdyk7CisgICBwcm9jZWR1cmUgUmVmcmVzaCAoV2luIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdyk7CiAgICAtLSAgQUtBCiAgICAtLSAgVGhlcmUgaXMgYW4gb3ZlcmxvYWRlZCBSZWZyZXNoIGZvciBQYWRzLgogICAgLS0gIFRoZSBJbmxpbmUgcHJhZ21hIGFwcGVhcnMgdGhlcmUKQEAgLTc0Nyw0NyArMTE5Niw0NyBAQAogCiAgICAtLSAgQU5DSE9SKGB3bm91dHJlZnJlc2goKScsYFJlZnJlc2hfV2l0aG91dF9VcGRhdGUnKQogICAgcHJvY2VkdXJlIFJlZnJlc2hfV2l0aG91dF9VcGRhdGUKLSAgICAgKFdpbiA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3cpOworICAgICAoV2luIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdyk7CiAgICAtLSAgQUtBCiAgICAtLSAgVGhlcmUgaXMgYW4gb3ZlcmxvYWRlZCBSZWZyZXNoX1dpdGhvdXRfVXBkYXRlIGZvciBQYWRzLgogICAgLS0gIFRoZSBJbmxpbmUgcHJhZ21hIGFwcGVhcnMgdGhlcmUKIAogICAgLS0gIEFOQ0hPUihgcmVkcmF3d2luKCknLGBSZWRyYXcnKQotICAgcHJvY2VkdXJlIFJlZHJhdyAoV2luIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdyk7CisgICBwcm9jZWR1cmUgUmVkcmF3IChXaW4gOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93KTsKICAgIC0tICBBS0EKIAogICAgLS0gIEFOQ0hPUihgd3JlZHJhd2xuKCknLGBSZWRyYXcnKQotICAgcHJvY2VkdXJlIFJlZHJhdyAoV2luICAgICAgICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7Ci0gICAgICAgICAgICAgICAgICAgICBCZWdpbl9MaW5lIDogaW4gTGluZV9Qb3NpdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgIExpbmVfQ291bnQgOiBpbiBQb3NpdGl2ZSk7CisgICBwcm9jZWR1cmUgUmVkcmF3IChXaW4gICAgICAgIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgIEJlZ2luX0xpbmUgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgTGluZV9Db3VudCA6IFBvc2l0aXZlKTsKICAgIC0tICBBS0EKICAgIHByYWdtYSBJbmxpbmUgKFJlZHJhdyk7CiAKICAgIC0tICBNQU5QQUdFKGBjdXJzX2NsZWFyLjN4JykKIAogICAgLS0gIEFOQ0hPUihgd2VyYXNlKCknLGBFcmFzZScpCi0gICBwcm9jZWR1cmUgRXJhc2UgKFdpbiA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3cpOworICAgcHJvY2VkdXJlIEVyYXNlIChXaW4gOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93KTsKICAgIC0tICBBS0EKICAgIC0tICBBTElBUyhgZXJhc2UoKScpCiAgICBwcmFnbWEgSW5saW5lIChFcmFzZSk7CiAKICAgIC0tICBBTkNIT1IoYHdjbGVhcigpJyxgQ2xlYXInKQogICAgcHJvY2VkdXJlIENsZWFyCi0gICAgIChXaW4gOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93KTsKKyAgICAgKFdpbiA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3cpOwogICAgLS0gIEFLQQogICAgLS0gIEFMSUFTKGBjbGVhcigpJykKICAgIHByYWdtYSBJbmxpbmUgKENsZWFyKTsKIAogICAgLS0gIEFOQ0hPUihgd2NscnRvYm90KCknLGBDbGVhcl9Ub19FbmRfT2ZfU2NyZWVuJykKICAgIHByb2NlZHVyZSBDbGVhcl9Ub19FbmRfT2ZfU2NyZWVuCi0gICAgIChXaW4gOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93KTsKKyAgICAgKFdpbiA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3cpOwogICAgLS0gIEFLQQogICAgLS0gIEFMSUFTKGBjbHJ0b2JvdCgpJykKICAgIHByYWdtYSBJbmxpbmUgKENsZWFyX1RvX0VuZF9PZl9TY3JlZW4pOwogCiAgICAtLSAgQU5DSE9SKGB3Y2xydG9lb2woKScsYENsZWFyX1RvX0VuZF9PZl9MaW5lJykKICAgIHByb2NlZHVyZSBDbGVhcl9Ub19FbmRfT2ZfTGluZQotICAgICAoV2luIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdyk7CisgICAgIChXaW4gOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93KTsKICAgIC0tICBBS0EKICAgIC0tICBBTElBUyhgY2xydG9lb2woKScpCiAgICBwcmFnbWEgSW5saW5lIChDbGVhcl9Ub19FbmRfT2ZfTGluZSk7CkBAIC03OTksMTYgKzEyNDgsMTYgQEAKICAgIC0tICBiZWNhdXNlIGluIEMgaXQgaXMgY29tbW9uIHRvIHNlZSBia2dkc2V0KEFfQk9MRCkgb3IKICAgIC0tICBia2dkc2V0KENPTE9SX1BBSVIobikpCiAgICBwcm9jZWR1cmUgU2V0X0JhY2tncm91bmQKLSAgICAgKFdpbiA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7Ci0gICAgICBDaCAgOiBpbiBBdHRyaWJ1dGVkX0NoYXJhY3Rlcik7CisgICAgIChXaW4gOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgQ2ggIDogQXR0cmlidXRlZF9DaGFyYWN0ZXIpOwogICAgLS0gIEFLQQogICAgLS0gIEFMSUFTKGBia2dkc2V0KCknKQogICAgcHJhZ21hIElubGluZSAoU2V0X0JhY2tncm91bmQpOwogCiAgICAtLSAgQU5DSE9SKGB3YmtnZCgpJyxgQ2hhbmdlX0JhY2tncm91bmQnKQogICAgcHJvY2VkdXJlIENoYW5nZV9CYWNrZ3JvdW5kCi0gICAgIChXaW4gOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OwotICAgICAgQ2ggIDogaW4gQXR0cmlidXRlZF9DaGFyYWN0ZXIpOworICAgICAoV2luIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIENoICA6IEF0dHJpYnV0ZWRfQ2hhcmFjdGVyKTsKICAgIC0tICBBS0EKICAgIC0tICBBTElBUyhgYmtnZCgpJykKICAgIHByYWdtYSBJbmxpbmUgKENoYW5nZV9CYWNrZ3JvdW5kKTsKQEAgLTgyNCwyNiArMTI3MywyNiBAQAogICAgLS0gIE1BTlBBR0UoYGN1cnNfdG91Y2guM3gnKQogCiAgICAtLSAgQU5DSE9SKGB1bnRvdWNod2luKCknLGBVbnRvdWNoJykKLSAgIHByb2NlZHVyZSBVbnRvdWNoIChXaW4gOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93KTsKKyAgIHByb2NlZHVyZSBVbnRvdWNoIChXaW4gOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93KTsKICAgIC0tICBBS0EKICAgIHByYWdtYSBJbmxpbmUgKFVudG91Y2gpOwogCiAgICAtLSAgQU5DSE9SKGB0b3VjaHdpbigpJyxgVG91Y2gnKQotICAgcHJvY2VkdXJlIFRvdWNoIChXaW4gOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93KTsKKyAgIHByb2NlZHVyZSBUb3VjaCAoV2luIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdyk7CiAgICAtLSAgQUtBCiAKICAgIC0tICBBTkNIT1IoYHRvdWNobGluZSgpJyxgVG91Y2gnKQotICAgcHJvY2VkdXJlIFRvdWNoIChXaW4gICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7Ci0gICAgICAgICAgICAgICAgICAgIFN0YXJ0IDogaW4gTGluZV9Qb3NpdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgQ291bnQgOiBpbiBQb3NpdGl2ZSk7CisgICBwcm9jZWR1cmUgVG91Y2ggKFdpbiAgIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgU3RhcnQgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICBDb3VudCA6IFBvc2l0aXZlKTsKICAgIC0tICBBS0EKICAgIHByYWdtYSBJbmxpbmUgKFRvdWNoKTsKIAogICAgLS0gIEFOQ0hPUihgd3RvdWNobG4oKScsYENoYW5nZV9MaW5lX1N0YXR1cycpCi0gICBwcm9jZWR1cmUgQ2hhbmdlX0xpbmVzX1N0YXR1cyAoV2luICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0IDogaW4gTGluZV9Qb3NpdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3VudCA6IGluIFBvc2l0aXZlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlIDogaW4gQm9vbGVhbik7CisgICBwcm9jZWR1cmUgQ2hhbmdlX0xpbmVzX1N0YXR1cyAoV2luICAgOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0IDogTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3VudCA6IFBvc2l0aXZlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlIDogQm9vbGVhbik7CiAgICAtLSAgQUtBCiAgICBwcmFnbWEgSW5saW5lIChDaGFuZ2VfTGluZXNfU3RhdHVzKTsKIApAQCAtODYxLDI3ICsxMzEwLDI3IEBACiAKICAgIC0tICBBTkNIT1IoYGNvcHl3aW4oKScsYENvcHknKQogICAgcHJvY2VkdXJlIENvcHkKLSAgICAgKFNvdXJjZV9XaW5kb3cgICAgICAgICAgICA6IGluIFdpbmRvdzsKLSAgICAgIERlc3RpbmF0aW9uX1dpbmRvdyAgICAgICA6IGluIFdpbmRvdzsKLSAgICAgIFNvdXJjZV9Ub3BfUm93ICAgICAgICAgICA6IGluIExpbmVfUG9zaXRpb247Ci0gICAgICBTb3VyY2VfTGVmdF9Db2x1bW4gICAgICAgOiBpbiBDb2x1bW5fUG9zaXRpb247Ci0gICAgICBEZXN0aW5hdGlvbl9Ub3BfUm93ICAgICAgOiBpbiBMaW5lX1Bvc2l0aW9uOwotICAgICAgRGVzdGluYXRpb25fTGVmdF9Db2x1bW4gIDogaW4gQ29sdW1uX1Bvc2l0aW9uOwotICAgICAgRGVzdGluYXRpb25fQm90dG9tX1JvdyAgIDogaW4gTGluZV9Qb3NpdGlvbjsKLSAgICAgIERlc3RpbmF0aW9uX1JpZ2h0X0NvbHVtbiA6IGluIENvbHVtbl9Qb3NpdGlvbjsKLSAgICAgIE5vbl9EZXN0cnVjdGl2ZV9Nb2RlICAgICA6IGluIEJvb2xlYW4gOj0gVHJ1ZSk7CisgICAgIChTb3VyY2VfV2luZG93ICAgICAgICAgICAgOiBXaW5kb3c7CisgICAgICBEZXN0aW5hdGlvbl9XaW5kb3cgICAgICAgOiBXaW5kb3c7CisgICAgICBTb3VyY2VfVG9wX1JvdyAgICAgICAgICAgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgU291cmNlX0xlZnRfQ29sdW1uICAgICAgIDogQ29sdW1uX1Bvc2l0aW9uOworICAgICAgRGVzdGluYXRpb25fVG9wX1JvdyAgICAgIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgIERlc3RpbmF0aW9uX0xlZnRfQ29sdW1uICA6IENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgIERlc3RpbmF0aW9uX0JvdHRvbV9Sb3cgICA6IExpbmVfUG9zaXRpb247CisgICAgICBEZXN0aW5hdGlvbl9SaWdodF9Db2x1bW4gOiBDb2x1bW5fUG9zaXRpb247CisgICAgICBOb25fRGVzdHJ1Y3RpdmVfTW9kZSAgICAgOiBCb29sZWFuIDo9IFRydWUpOwogICAgLS0gIEFLQQogICAgcHJhZ21hIElubGluZSAoQ29weSk7CiAKICAgIC0tICBBTkNIT1IoYG92ZXJ3cml0ZSgpJyxgT3ZlcndyaXRlJykKLSAgIHByb2NlZHVyZSBPdmVyd3JpdGUgKFNvdXJjZV9XaW5kb3cgICAgICA6IGluIFdpbmRvdzsKLSAgICAgICAgICAgICAgICAgICAgICAgIERlc3RpbmF0aW9uX1dpbmRvdyA6IGluIFdpbmRvdyk7CisgICBwcm9jZWR1cmUgT3ZlcndyaXRlIChTb3VyY2VfV2luZG93ICAgICAgOiBXaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICAgICBEZXN0aW5hdGlvbl9XaW5kb3cgOiBXaW5kb3cpOwogICAgLS0gIEFLQQogICAgcHJhZ21hIElubGluZSAoT3ZlcndyaXRlKTsKIAogICAgLS0gIEFOQ0hPUihgb3ZlcmxheSgpJyxgT3ZlcmxheScpCi0gICBwcm9jZWR1cmUgT3ZlcmxheSAoU291cmNlX1dpbmRvdyAgICAgIDogaW4gV2luZG93OwotICAgICAgICAgICAgICAgICAgICAgIERlc3RpbmF0aW9uX1dpbmRvdyA6IGluIFdpbmRvdyk7CisgICBwcm9jZWR1cmUgT3ZlcmxheSAoU291cmNlX1dpbmRvdyAgICAgIDogV2luZG93OworICAgICAgICAgICAgICAgICAgICAgIERlc3RpbmF0aW9uX1dpbmRvdyA6IFdpbmRvdyk7CiAgICAtLSAgQUtBCiAgICBwcmFnbWEgSW5saW5lIChPdmVybGF5KTsKIApAQCAtODg5LDIwICsxMzM4LDIwIEBACiAKICAgIC0tICBBTkNIT1IoYHdpbnNkZWxsbigpJyxgSW5zZXJ0X0RlbGV0ZV9MaW5lcycpCiAgICBwcm9jZWR1cmUgSW5zZXJ0X0RlbGV0ZV9MaW5lcwotICAgICAoV2luICAgOiBpbiBXaW5kb3cgIDo9IFN0YW5kYXJkX1dpbmRvdzsKLSAgICAgIExpbmVzIDogaW4gSW50ZWdlciA6PSAxKTsgLS0gIGRlZmF1bHQgaXMgdG8gaW5zZXJ0IG9uZSBsaW5lIGFib3ZlCisgICAgIChXaW4gICA6IFdpbmRvdyAgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgTGluZXMgOiBJbnRlZ2VyIDo9IDEpOyAtLSAgZGVmYXVsdCBpcyB0byBpbnNlcnQgb25lIGxpbmUgYWJvdmUKICAgIC0tICBBS0EKICAgIC0tICBBTElBUyhgaW5zZGVsbG4oKScpCiAgICBwcmFnbWEgSW5saW5lIChJbnNlcnRfRGVsZXRlX0xpbmVzKTsKIAogICAgLS0gIEFOQ0hPUihgd2RlbGV0ZWxuKCknLGBEZWxldGVfTGluZScpCi0gICBwcm9jZWR1cmUgRGVsZXRlX0xpbmUgKFdpbiA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3cpOworICAgcHJvY2VkdXJlIERlbGV0ZV9MaW5lIChXaW4gOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93KTsKICAgIC0tICBBS0EKICAgIC0tICBBTElBUyhgZGVsZXRlbG4oKScpCiAgICBwcmFnbWEgSW5saW5lIChEZWxldGVfTGluZSk7CiAKICAgIC0tICBBTkNIT1IoYHdpbnNlcnRsbigpJyxgSW5zZXJ0X0xpbmUnKQotICAgcHJvY2VkdXJlIEluc2VydF9MaW5lIChXaW4gOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93KTsKKyAgIHByb2NlZHVyZSBJbnNlcnRfTGluZSAoV2luIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdyk7CiAgICAtLSAgQUtBCiAgICAtLSAgQUxJQVMoYGluc2VydGxuKCknKQogICAgcHJhZ21hIElubGluZSAoSW5zZXJ0X0xpbmUpOwpAQCAtOTExLDcgKzEzNjAsNyBAQAogCiAgICAtLSAgQU5DSE9SKGBnZXRtYXh5eCgpJyxgR2V0X1NpemUnKQogICAgcHJvY2VkdXJlIEdldF9TaXplCi0gICAgIChXaW4gICAgICAgICAgICAgICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgIChXaW4gICAgICAgICAgICAgICA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CiAgICAgICBOdW1iZXJfT2ZfTGluZXMgICA6IG91dCBMaW5lX0NvdW50OwogICAgICAgTnVtYmVyX09mX0NvbHVtbnMgOiBvdXQgQ29sdW1uX0NvdW50KTsKICAgIC0tICBBS0EKQEAgLTkxOSw3ICsxMzY4LDcgQEAKIAogICAgLS0gIEFOQ0hPUihgZ2V0YmVneXgoKScsYEdldF9XaW5kb3dfUG9zaXRpb24nKQogICAgcHJvY2VkdXJlIEdldF9XaW5kb3dfUG9zaXRpb24KLSAgICAgKFdpbiAgICAgICAgICAgICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgIChXaW4gICAgICAgICAgICAgOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OwogICAgICAgVG9wX0xlZnRfTGluZSAgIDogb3V0IExpbmVfUG9zaXRpb247CiAgICAgICBUb3BfTGVmdF9Db2x1bW4gOiBvdXQgQ29sdW1uX1Bvc2l0aW9uKTsKICAgIC0tICBBS0EKQEAgLTkyNyw3ICsxMzc2LDcgQEAKIAogICAgLS0gIEFOQ0hPUihgZ2V0eXgoKScsYEdldF9DdXJzb3JfUG9zaXRpb24nKQogICAgcHJvY2VkdXJlIEdldF9DdXJzb3JfUG9zaXRpb24KLSAgICAgKFdpbiAgICA6IGluICBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAoV2luICAgIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKICAgICAgIExpbmUgICA6IG91dCBMaW5lX1Bvc2l0aW9uOwogICAgICAgQ29sdW1uIDogb3V0IENvbHVtbl9Qb3NpdGlvbik7CiAgICAtLSAgQUtBCkBAIC05MzUsMTIgKzEzODQsMTIgQEAKIAogICAgLS0gIEFOQ0hPUihgZ2V0cGFyeXgoKScsYEdldF9PcmlnaW5fUmVsYXRpdmVfVG9fUGFyZW50JykKICAgIHByb2NlZHVyZSBHZXRfT3JpZ2luX1JlbGF0aXZlX1RvX1BhcmVudAotICAgICAoV2luICAgICAgICAgICAgICAgIDogaW4gIFdpbmRvdzsKKyAgICAgKFdpbiAgICAgICAgICAgICAgICA6IFdpbmRvdzsKICAgICAgIFRvcF9MZWZ0X0xpbmUgICAgICA6IG91dCBMaW5lX1Bvc2l0aW9uOwogICAgICAgVG9wX0xlZnRfQ29sdW1uICAgIDogb3V0IENvbHVtbl9Qb3NpdGlvbjsKICAgICAgIElzX05vdF9BX1N1YndpbmRvdyA6IG91dCBCb29sZWFuKTsKICAgIC0tICBBS0EKLSAgIC0tICBJbnN0ZWFkIG9mIHBsYWNpbmcgLTEgaW4gdGhlIGNvb3JkaW5hdGVzIGFzIHJldHVybiwgd2UgdXNlIGEgYm9vbGVhbgorICAgLS0gIEluc3RlYWQgb2YgcGxhY2luZyAtMSBpbiB0aGUgY29vcmRpbmF0ZXMgYXMgcmV0dXJuLCB3ZSB1c2UgYSBCb29sZWFuCiAgICAtLSAgdG8gcmV0dXJuIHRoZSBpbmZvIHRoYXQgdGhlIHdpbmRvdyBoYXMgbm8gcGFyZW50LgogICAgcHJhZ21hIElubGluZSAoR2V0X09yaWdpbl9SZWxhdGl2ZV9Ub19QYXJlbnQpOwogCkBAIC05NjQsNDQgKzE0MTMsNDQgQEAKIAogICAgLS0gIEFOQ0hPUihgcHJlZnJlc2goKScsYFJlZnJlc2gnKQogICAgcHJvY2VkdXJlIFJlZnJlc2gKLSAgICAgKFBhZCAgICAgICAgICAgICAgICAgICAgICA6IGluIFdpbmRvdzsKLSAgICAgIFNvdXJjZV9Ub3BfUm93ICAgICAgICAgICA6IGluIExpbmVfUG9zaXRpb247Ci0gICAgICBTb3VyY2VfTGVmdF9Db2x1bW4gICAgICAgOiBpbiBDb2x1bW5fUG9zaXRpb247Ci0gICAgICBEZXN0aW5hdGlvbl9Ub3BfUm93ICAgICAgOiBpbiBMaW5lX1Bvc2l0aW9uOwotICAgICAgRGVzdGluYXRpb25fTGVmdF9Db2x1bW4gIDogaW4gQ29sdW1uX1Bvc2l0aW9uOwotICAgICAgRGVzdGluYXRpb25fQm90dG9tX1JvdyAgIDogaW4gTGluZV9Qb3NpdGlvbjsKLSAgICAgIERlc3RpbmF0aW9uX1JpZ2h0X0NvbHVtbiA6IGluIENvbHVtbl9Qb3NpdGlvbik7CisgICAgIChQYWQgICAgICAgICAgICAgICAgICAgICAgOiBXaW5kb3c7CisgICAgICBTb3VyY2VfVG9wX1JvdyAgICAgICAgICAgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgU291cmNlX0xlZnRfQ29sdW1uICAgICAgIDogQ29sdW1uX1Bvc2l0aW9uOworICAgICAgRGVzdGluYXRpb25fVG9wX1JvdyAgICAgIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgIERlc3RpbmF0aW9uX0xlZnRfQ29sdW1uICA6IENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgIERlc3RpbmF0aW9uX0JvdHRvbV9Sb3cgICA6IExpbmVfUG9zaXRpb247CisgICAgICBEZXN0aW5hdGlvbl9SaWdodF9Db2x1bW4gOiBDb2x1bW5fUG9zaXRpb24pOwogICAgLS0gIEFLQQogICAgcHJhZ21hIElubGluZSAoUmVmcmVzaCk7CiAKICAgIC0tICBBTkNIT1IoYHBub3V0cmVmcmVzaCgpJyxgUmVmcmVzaF9XaXRob3V0X1VwZGF0ZScpCiAgICBwcm9jZWR1cmUgUmVmcmVzaF9XaXRob3V0X1VwZGF0ZQotICAgICAoUGFkICAgICAgICAgICAgICAgICAgICAgIDogaW4gV2luZG93OwotICAgICAgU291cmNlX1RvcF9Sb3cgICAgICAgICAgIDogaW4gTGluZV9Qb3NpdGlvbjsKLSAgICAgIFNvdXJjZV9MZWZ0X0NvbHVtbiAgICAgICA6IGluIENvbHVtbl9Qb3NpdGlvbjsKLSAgICAgIERlc3RpbmF0aW9uX1RvcF9Sb3cgICAgICA6IGluIExpbmVfUG9zaXRpb247Ci0gICAgICBEZXN0aW5hdGlvbl9MZWZ0X0NvbHVtbiAgOiBpbiBDb2x1bW5fUG9zaXRpb247Ci0gICAgICBEZXN0aW5hdGlvbl9Cb3R0b21fUm93ICAgOiBpbiBMaW5lX1Bvc2l0aW9uOwotICAgICAgRGVzdGluYXRpb25fUmlnaHRfQ29sdW1uIDogaW4gQ29sdW1uX1Bvc2l0aW9uKTsKKyAgICAgKFBhZCAgICAgICAgICAgICAgICAgICAgICA6IFdpbmRvdzsKKyAgICAgIFNvdXJjZV9Ub3BfUm93ICAgICAgICAgICA6IExpbmVfUG9zaXRpb247CisgICAgICBTb3VyY2VfTGVmdF9Db2x1bW4gICAgICAgOiBDb2x1bW5fUG9zaXRpb247CisgICAgICBEZXN0aW5hdGlvbl9Ub3BfUm93ICAgICAgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgRGVzdGluYXRpb25fTGVmdF9Db2x1bW4gIDogQ29sdW1uX1Bvc2l0aW9uOworICAgICAgRGVzdGluYXRpb25fQm90dG9tX1JvdyAgIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgIERlc3RpbmF0aW9uX1JpZ2h0X0NvbHVtbiA6IENvbHVtbl9Qb3NpdGlvbik7CiAgICAtLSAgQUtBCiAgICBwcmFnbWEgSW5saW5lIChSZWZyZXNoX1dpdGhvdXRfVXBkYXRlKTsKIAogICAgLS0gIEFOQ0hPUihgcGVjaG9jaGFyKCknLGBBZGRfQ2hhcmFjdGVyX1RvX1BhZF9BbmRfRWNob19JdCcpCiAgICBwcm9jZWR1cmUgQWRkX0NoYXJhY3Rlcl9Ub19QYWRfQW5kX0VjaG9fSXQKLSAgICAgKFBhZCA6IGluIFdpbmRvdzsKLSAgICAgIENoICA6IGluIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyKTsKKyAgICAgKFBhZCA6IFdpbmRvdzsKKyAgICAgIENoICA6IEF0dHJpYnV0ZWRfQ2hhcmFjdGVyKTsKICAgIC0tICBBS0EKIAogICAgcHJvY2VkdXJlIEFkZF9DaGFyYWN0ZXJfVG9fUGFkX0FuZF9FY2hvX0l0Ci0gICAgIChQYWQgOiBpbiBXaW5kb3c7Ci0gICAgICBDaCAgOiBpbiBDaGFyYWN0ZXIpOworICAgICAoUGFkIDogV2luZG93OworICAgICAgQ2ggIDogQ2hhcmFjdGVyKTsKICAgIHByYWdtYSBJbmxpbmUgKEFkZF9DaGFyYWN0ZXJfVG9fUGFkX0FuZF9FY2hvX0l0KTsKIAogICAgLS0gIE1BTlBBR0UoYGN1cnNfc2Nyb2xsLjN4JykKIAogICAgLS0gIEFOQ0hPUihgd3NjcmwoKScsYFNjcm9sbCcpCi0gICBwcm9jZWR1cmUgU2Nyb2xsIChXaW4gICAgOiBpbiBXaW5kb3cgIDo9IFN0YW5kYXJkX1dpbmRvdzsKLSAgICAgICAgICAgICAgICAgICAgIEFtb3VudCA6IGluIEludGVnZXIgOj0gMSk7CisgICBwcm9jZWR1cmUgU2Nyb2xsIChXaW4gICAgOiBXaW5kb3cgIDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgIEFtb3VudCA6IEludGVnZXIgOj0gMSk7CiAgICAtLSAgQUtBCiAgICAtLSAgQUxJQVMoYHNjcm9sbCgpJykKICAgIC0tICBBTElBUyhgc2NybCgpJykKQEAgLTEwMTAsMTUgKzE0NTksMTUgQEAKICAgIC0tICBNQU5QQUdFKGBjdXJzX2RlbGNoLjN4JykKIAogICAgLS0gIEFOQ0hPUihgd2RlbGNoKCknLGBEZWxldGVfQ2hhcmFjdGVyJykKLSAgIHByb2NlZHVyZSBEZWxldGVfQ2hhcmFjdGVyIChXaW4gOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93KTsKKyAgIHByb2NlZHVyZSBEZWxldGVfQ2hhcmFjdGVyIChXaW4gOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93KTsKICAgIC0tICBBS0EKICAgIC0tICBBTElBUyhgZGVsY2goKScpCiAKICAgIC0tICBBTkNIT1IoYG12d2RlbGNoKCknLGBEZWxldGVfQ2hhcmFjdGVyJykKICAgIHByb2NlZHVyZSBEZWxldGVfQ2hhcmFjdGVyCi0gICAgIChXaW4gICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OwotICAgICAgTGluZSAgIDogaW4gTGluZV9Qb3NpdGlvbjsKLSAgICAgIENvbHVtbiA6IGluIENvbHVtbl9Qb3NpdGlvbik7CisgICAgIChXaW4gICAgOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgTGluZSAgIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgIENvbHVtbiA6IENvbHVtbl9Qb3NpdGlvbik7CiAgICAtLSAgQUtBCiAgICAtLSAgQUxJQVMoYG12ZGVsY2goKScpCiAgICBwcmFnbWEgSW5saW5lIChEZWxldGVfQ2hhcmFjdGVyKTsKQEAgLTEwNDMsMzYgKzE0OTIsMzYgQEAKICAgIC0tICBNQU5QQUdFKGBjdXJzX2luc2NoLjN4JykKIAogICAgLS0gIEFOQ0hPUihgd2luc2NoKCknLGBJbnNlcnQnKQotICAgcHJvY2VkdXJlIEluc2VydCAoV2luIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKLSAgICAgICAgICAgICAgICAgICAgIENoICA6IGluIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyKTsKKyAgIHByb2NlZHVyZSBJbnNlcnQgKFdpbiA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICBDaCAgOiBBdHRyaWJ1dGVkX0NoYXJhY3Rlcik7CiAgICAtLSAgQUtBCiAgICAtLSAgQUxJQVMoYGluc2NoKCknKQogCiAgICAtLSAgQU5DSE9SKGBtdndpbnNjaCgpJyxgSW5zZXJ0JykKLSAgIHByb2NlZHVyZSBJbnNlcnQgKFdpbiAgICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7Ci0gICAgICAgICAgICAgICAgICAgICBMaW5lICAgOiBpbiBMaW5lX1Bvc2l0aW9uOwotICAgICAgICAgICAgICAgICAgICAgQ29sdW1uIDogaW4gQ29sdW1uX1Bvc2l0aW9uOwotICAgICAgICAgICAgICAgICAgICAgQ2ggICAgIDogaW4gQXR0cmlidXRlZF9DaGFyYWN0ZXIpOworICAgcHJvY2VkdXJlIEluc2VydCAoV2luICAgIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgIExpbmUgICA6IExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICBDb2x1bW4gOiBDb2x1bW5fUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICBDaCAgICAgOiBBdHRyaWJ1dGVkX0NoYXJhY3Rlcik7CiAgICAtLSAgQUtBCiAgICAtLSAgQUxJQVMoYG12aW5zY2goKScpCiAKICAgIC0tICBNQU5QQUdFKGBjdXJzX2luc3N0ci4zeCcpCiAKICAgIC0tICBBTkNIT1IoYHdpbnNuc3RyKCknLGBJbnNlcnQnKQotICAgcHJvY2VkdXJlIEluc2VydCAoV2luIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKLSAgICAgICAgICAgICAgICAgICAgIFN0ciA6IGluIFN0cmluZzsKLSAgICAgICAgICAgICAgICAgICAgIExlbiA6IGluIEludGVnZXIgOj0gLTEpOworICAgcHJvY2VkdXJlIEluc2VydCAoV2luIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgIFN0ciA6IFN0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgIExlbiA6IEludGVnZXIgOj0gLTEpOwogICAgLS0gIEFLQQogICAgLS0gIEFMSUFTKGB3aW5zc3RyKCknKQogICAgLS0gIEFMSUFTKGBpbnNuc3RyKCknKQogICAgLS0gIEFMSUFTKGBpbnNzdHIoKScpCiAKICAgIC0tICBBTkNIT1IoYG12d2luc25zdHIoKScsYEluc2VydCcpCi0gICBwcm9jZWR1cmUgSW5zZXJ0IChXaW4gICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OwotICAgICAgICAgICAgICAgICAgICAgTGluZSAgIDogaW4gTGluZV9Qb3NpdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgIENvbHVtbiA6IGluIENvbHVtbl9Qb3NpdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgIFN0ciAgICA6IGluIFN0cmluZzsKLSAgICAgICAgICAgICAgICAgICAgIExlbiAgICA6IGluIEludGVnZXIgOj0gLTEpOworICAgcHJvY2VkdXJlIEluc2VydCAoV2luICAgIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgIExpbmUgICA6IExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICBDb2x1bW4gOiBDb2x1bW5fUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICBTdHIgICAgOiBTdHJpbmc7CisgICAgICAgICAgICAgICAgICAgICBMZW4gICAgOiBJbnRlZ2VyIDo9IC0xKTsKICAgIC0tICBBS0EKICAgIC0tICBBTElBUyhgbXZ3aW5zc3RyKCknKQogICAgLS0gIEFMSUFTKGBtdmluc25zdHIoKScpCkBAIC0xMDgyLDIwICsxNTMxLDIwIEBACiAgICAtLSAgTUFOUEFHRShgY3Vyc19pbnN0ci4zeCcpCiAKICAgIC0tICBBTkNIT1IoYHdpbm5zdHIoKScsYFBlZWsnKQotICAgcHJvY2VkdXJlIFBlZWsgKFdpbiA6IGluICBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgcHJvY2VkdXJlIFBlZWsgKFdpbiA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CiAgICAgICAgICAgICAgICAgICAgU3RyIDogb3V0IFN0cmluZzsKLSAgICAgICAgICAgICAgICAgICBMZW4gOiBpbiAgSW50ZWdlciA6PSAtMSk7CisgICAgICAgICAgICAgICAgICAgTGVuIDogSW50ZWdlciA6PSAtMSk7CiAgICAtLSAgQUtBCiAgICAtLSAgQUxJQVMoYHdpbnN0cigpJykKICAgIC0tICBBTElBUyhgaW5uc3RyKCknKQogICAgLS0gIEFMSUFTKGBpbnN0cigpJykKIAogICAgLS0gIEFOQ0hPUihgbXZ3aW5uc3RyKCknLGBQZWVrJykKLSAgIHByb2NlZHVyZSBQZWVrIChXaW4gICAgOiBpbiAgV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKLSAgICAgICAgICAgICAgICAgICBMaW5lICAgOiBpbiAgTGluZV9Qb3NpdGlvbjsKLSAgICAgICAgICAgICAgICAgICBDb2x1bW4gOiBpbiAgQ29sdW1uX1Bvc2l0aW9uOworICAgcHJvY2VkdXJlIFBlZWsgKFdpbiAgICA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICAgICAgICAgICAgICAgTGluZSAgIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICBDb2x1bW4gOiBDb2x1bW5fUG9zaXRpb247CiAgICAgICAgICAgICAgICAgICAgU3RyICAgIDogb3V0IFN0cmluZzsKLSAgICAgICAgICAgICAgICAgICBMZW4gICAgOiBpbiAgSW50ZWdlciA6PSAtMSk7CisgICAgICAgICAgICAgICAgICAgTGVuICAgIDogSW50ZWdlciA6PSAtMSk7CiAgICAtLSAgQUtBCiAgICAtLSAgQUxJQVMoYG12d2luc3RyKCknKQogICAgLS0gIEFMSUFTKGBtdmlubnN0cigpJykKQEAgLTExMDQsMzIgKzE1NTMsMzIgQEAKICAgIC0tICBNQU5QQUdFKGBjdXJzX2luY2hzdHIuM3gnKQogCiAgICAtLSAgQU5DSE9SKGB3aW5jaG5zdHIoKScsYFBlZWsnKQotICAgcHJvY2VkdXJlIFBlZWsgKFdpbiA6IGluICBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgcHJvY2VkdXJlIFBlZWsgKFdpbiA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CiAgICAgICAgICAgICAgICAgICAgU3RyIDogb3V0IEF0dHJpYnV0ZWRfU3RyaW5nOwotICAgICAgICAgICAgICAgICAgIExlbiA6IGluICBJbnRlZ2VyIDo9IC0xKTsKKyAgICAgICAgICAgICAgICAgICBMZW4gOiBJbnRlZ2VyIDo9IC0xKTsKICAgIC0tICBBS0EKICAgIC0tICBBTElBUyhgd2luY2hzdHIoKScpCiAgICAtLSAgQUxJQVMoYGluY2huc3RyKCknKQogICAgLS0gIEFMSUFTKGBpbmNoc3RyKCknKQogCiAgICAtLSAgQU5DSE9SKGBtdndpbmNobnN0cigpJyxgUGVlaycpCi0gICBwcm9jZWR1cmUgUGVlayAoV2luICAgIDogaW4gIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7Ci0gICAgICAgICAgICAgICAgICAgTGluZSAgIDogaW4gIExpbmVfUG9zaXRpb247Ci0gICAgICAgICAgICAgICAgICAgQ29sdW1uIDogaW4gIENvbHVtbl9Qb3NpdGlvbjsKKyAgIHByb2NlZHVyZSBQZWVrIChXaW4gICAgOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgICAgICAgICAgICAgIExpbmUgICA6IExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgQ29sdW1uIDogQ29sdW1uX1Bvc2l0aW9uOwogICAgICAgICAgICAgICAgICAgIFN0ciAgICA6IG91dCBBdHRyaWJ1dGVkX1N0cmluZzsKLSAgICAgICAgICAgICAgICAgICBMZW4gICAgOiBpbiAgSW50ZWdlciA6PSAtMSk7CisgICAgICAgICAgICAgICAgICAgTGVuICAgIDogSW50ZWdlciA6PSAtMSk7CiAgICAtLSAgQUtBCiAgICAtLSAgQUxJQVMoYG12d2luY2hzdHIoKScpCiAgICAtLSAgQUxJQVMoYG12aW5jaG5zdHIoKScpCiAgICAtLSAgQUxJQVMoYG12aW5jaHN0cigpJykKLSAgIC0tICBXZSBkb24ndCBpbmxpbmUgdGhlIFBlZWsgcHJvY2VkdXJlcworICAgLS0gIFdlIGRvIG5vdCBpbmxpbmUgdGhlIFBlZWsgcHJvY2VkdXJlcwogCiAgICAtLSAgTUFOUEFHRShgY3Vyc19nZXRzdHIuM3gnKQogCiAgICAtLSAgQU5DSE9SKGB3Z2V0bnN0cigpJyxgR2V0JykKLSAgIHByb2NlZHVyZSBHZXQgKFdpbiA6IGluICBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgcHJvY2VkdXJlIEdldCAoV2luIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKICAgICAgICAgICAgICAgICAgIFN0ciA6IG91dCBTdHJpbmc7Ci0gICAgICAgICAgICAgICAgICBMZW4gOiBpbiAgSW50ZWdlciA6PSAtMSk7CisgICAgICAgICAgICAgICAgICBMZW4gOiBJbnRlZ2VyIDo9IC0xKTsKICAgIC0tICBBS0EKICAgIC0tICBBTElBUyhgd2dldHN0cigpJykKICAgIC0tICBBTElBUyhgZ2V0bnN0cigpJykKQEAgLTExMzgsMTEgKzE1ODcsMTEgQEAKICAgIC0tICBvdmVyZmxvd3MuCiAKICAgIC0tICBBTkNIT1IoYG12d2dldG5zdHIoKScsYEdldCcpCi0gICBwcm9jZWR1cmUgR2V0IChXaW4gICAgOiBpbiAgV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKLSAgICAgICAgICAgICAgICAgIExpbmUgICA6IGluICBMaW5lX1Bvc2l0aW9uOwotICAgICAgICAgICAgICAgICAgQ29sdW1uIDogaW4gIENvbHVtbl9Qb3NpdGlvbjsKKyAgIHByb2NlZHVyZSBHZXQgKFdpbiAgICA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICAgICAgICAgICAgICBMaW5lICAgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgQ29sdW1uIDogQ29sdW1uX1Bvc2l0aW9uOwogICAgICAgICAgICAgICAgICAgU3RyICAgIDogb3V0IFN0cmluZzsKLSAgICAgICAgICAgICAgICAgIExlbiAgICA6IGluICBJbnRlZ2VyIDo9IC0xKTsKKyAgICAgICAgICAgICAgICAgIExlbiAgICA6IEludGVnZXIgOj0gLTEpOwogICAgLS0gIEFLQQogICAgLS0gIEFMSUFTKGBtdndnZXRzdHIoKScpCiAgICAtLSAgQUxJQVMoYG12Z2V0bnN0cigpJykKQEAgLTExNjIsMTYgKzE2MTEsMTYgQEAKIAogICAgLS0gIEFOQ0hPUihgc2xrX2luaXQoKScsYEluaXRfU29mdF9MYWJlbF9LZXlzJykKICAgIHByb2NlZHVyZSBJbml0X1NvZnRfTGFiZWxfS2V5cwotICAgICAoRm9ybWF0IDogaW4gU29mdF9MYWJlbF9LZXlfRm9ybWF0IDo9IFRocmVlX1R3b19UaHJlZSk7CisgICAgIChGb3JtYXQgOiBTb2Z0X0xhYmVsX0tleV9Gb3JtYXQgOj0gVGhyZWVfVHdvX1RocmVlKTsKICAgIC0tICBBS0EKICAgIHByYWdtYSBJbmxpbmUgKEluaXRfU29mdF9MYWJlbF9LZXlzKTsKIAogICAgLS0gIEFOQ0hPUihgc2xrX3NldCgpJyxgU2V0X1NvZnRfTGFiZWxfS2V5JykKLSAgIHByb2NlZHVyZSBTZXRfU29mdF9MYWJlbF9LZXkgKExhYmVsIDogaW4gTGFiZWxfTnVtYmVyOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dCAgOiBpbiBTdHJpbmc7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbXQgICA6IGluIExhYmVsX0p1c3RpZmljYXRpb24gOj0gTGVmdCk7CisgICBwcm9jZWR1cmUgU2V0X1NvZnRfTGFiZWxfS2V5IChMYWJlbCA6IExhYmVsX051bWJlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHQgIDogU3RyaW5nOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm10ICAgOiBMYWJlbF9KdXN0aWZpY2F0aW9uIDo9IExlZnQpOwogICAgLS0gIEFLQQotICAgLS0gIFdlIGRvbid0IGlubGluZSB0aGlzIHByb2NlZHVyZQorICAgLS0gIFdlIGRvIG5vdCBpbmxpbmUgdGhpcyBwcm9jZWR1cmUKIAogICAgLS0gIEFOQ0hPUihgc2xrX3JlZnJlc2goKScsYFJlZnJlc2hfU29mdF9MYWJlbF9LZXknKQogICAgcHJvY2VkdXJlIFJlZnJlc2hfU29mdF9MYWJlbF9LZXlzOwpAQCAtMTE4NCwxMiArMTYzMywxMiBAQAogICAgcHJhZ21hIElubGluZSAoUmVmcmVzaF9Tb2Z0X0xhYmVsX0tleXNfV2l0aG91dF9VcGRhdGUpOwogCiAgICAtLSAgQU5DSE9SKGBzbGtfbGFiZWwoKScsYEdldF9Tb2Z0X0xhYmVsX0tleScpCi0gICBwcm9jZWR1cmUgR2V0X1NvZnRfTGFiZWxfS2V5IChMYWJlbCA6IGluIExhYmVsX051bWJlcjsKKyAgIHByb2NlZHVyZSBHZXRfU29mdF9MYWJlbF9LZXkgKExhYmVsIDogTGFiZWxfTnVtYmVyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dCAgOiBvdXQgU3RyaW5nKTsKICAgIC0tICBBS0EKIAogICAgLS0gIEFOQ0hPUihgc2xrX2xhYmVsKCknLGBHZXRfU29mdF9MYWJlbF9LZXknKQotICAgZnVuY3Rpb24gR2V0X1NvZnRfTGFiZWxfS2V5IChMYWJlbCA6IGluIExhYmVsX051bWJlcikgcmV0dXJuIFN0cmluZzsKKyAgIGZ1bmN0aW9uIEdldF9Tb2Z0X0xhYmVsX0tleSAoTGFiZWwgOiBMYWJlbF9OdW1iZXIpIHJldHVybiBTdHJpbmc7CiAgICAtLSAgQUtBCiAgICAtLSAgU2FtZSBhcyBmdW5jdGlvbgogICAgcHJhZ21hIElubGluZSAoR2V0X1NvZnRfTGFiZWxfS2V5KTsKQEAgLTEyMTEsMTYgKzE2NjAsMTYgQEAKIAogICAgLS0gIEFOQ0hPUihgc2xrX2F0dHJvbigpJyxgU3dpdGNoX1NvZnRfTGFiZWxfS2V5X0F0dHJpYnV0ZXMnKQogICAgcHJvY2VkdXJlIFN3aXRjaF9Tb2Z0X0xhYmVsX0tleV9BdHRyaWJ1dGVzCi0gICAgIChBdHRyIDogaW4gQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQ7Ci0gICAgICBPbiAgIDogaW4gQm9vbGVhbiA6PSBUcnVlKTsKKyAgICAgKEF0dHIgOiBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldDsKKyAgICAgIE9uICAgOiBCb29sZWFuIDo9IFRydWUpOwogICAgLS0gIEFLQQogICAgLS0gIEFMSUFTKGBzbGtfYXR0cm9mZigpJykKICAgIHByYWdtYSBJbmxpbmUgKFN3aXRjaF9Tb2Z0X0xhYmVsX0tleV9BdHRyaWJ1dGVzKTsKIAogICAgLS0gIEFOQ0hPUihgc2xrX2F0dHJzZXQoKScsYFNldF9Tb2Z0X0xhYmVsX0tleV9BdHRyaWJ1dGVzJykKICAgIHByb2NlZHVyZSBTZXRfU29mdF9MYWJlbF9LZXlfQXR0cmlidXRlcwotICAgICAoQXR0ciAgOiBpbiBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldCA6PSBOb3JtYWxfVmlkZW87Ci0gICAgICBDb2xvciA6IGluIENvbG9yX1BhaXIgOj0gQ29sb3JfUGFpcidGaXJzdCk7CisgICAgIChBdHRyICA6IENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0IDo9IE5vcm1hbF9WaWRlbzsKKyAgICAgIENvbG9yIDogQ29sb3JfUGFpciA6PSBDb2xvcl9QYWlyJ0ZpcnN0KTsKICAgIC0tICBBS0EKICAgIHByYWdtYSBJbmxpbmUgKFNldF9Tb2Z0X0xhYmVsX0tleV9BdHRyaWJ1dGVzKTsKIApAQCAtMTIzNCw3ICsxNjgzLDcgQEAKICAgIHByYWdtYSBJbmxpbmUgKEdldF9Tb2Z0X0xhYmVsX0tleV9BdHRyaWJ1dGVzKTsKIAogICAgLS0gIEFOQ0hPUihgc2xrX2NvbG9yKCknLGBTZXRfU29mdF9MYWJlbF9LZXlfQ29sb3InKQotICAgcHJvY2VkdXJlIFNldF9Tb2Z0X0xhYmVsX0tleV9Db2xvciAoUGFpciA6IGluIENvbG9yX1BhaXIpOworICAgcHJvY2VkdXJlIFNldF9Tb2Z0X0xhYmVsX0tleV9Db2xvciAoUGFpciA6IENvbG9yX1BhaXIpOwogICAgLS0gIEFLQQogICAgcHJhZ21hIElubGluZSAoU2V0X1NvZnRfTGFiZWxfS2V5X0NvbG9yKTsKIApAQCAtMTI0NCwxNiArMTY5MywxNiBAQAogICAgLS0gIE1BTlBBR0UoYGtleW9rLjN4JykKIAogICAgLS0gIEFOQ0hPUihga2V5b2soKScsYEVuYWJsZV9LZXknKQotICAgcHJvY2VkdXJlIEVuYWJsZV9LZXkgKEtleSAgICA6IGluIFNwZWNpYWxfS2V5X0NvZGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgRW5hYmxlIDogaW4gQm9vbGVhbiA6PSBUcnVlKTsKKyAgIHByb2NlZHVyZSBFbmFibGVfS2V5IChLZXkgICAgOiBTcGVjaWFsX0tleV9Db2RlOworICAgICAgICAgICAgICAgICAgICAgICAgIEVuYWJsZSA6IEJvb2xlYW4gOj0gVHJ1ZSk7CiAgICAtLSAgQUtBCiAgICBwcmFnbWEgSW5saW5lIChFbmFibGVfS2V5KTsKIAogICAgLS0gIE1BTlBBR0UoYGRlZmluZV9rZXkuM3gnKQogCiAgICAtLSAgQU5DSE9SKGBkZWZpbmVfa2V5KCknLGBEZWZpbmVfS2V5JykKLSAgIHByb2NlZHVyZSBEZWZpbmVfS2V5IChEZWZpbml0aW9uIDogaW4gU3RyaW5nOwotICAgICAgICAgICAgICAgICAgICAgICAgIEtleSAgICAgICAgOiBpbiBTcGVjaWFsX0tleV9Db2RlKTsKKyAgIHByb2NlZHVyZSBEZWZpbmVfS2V5IChEZWZpbml0aW9uIDogU3RyaW5nOworICAgICAgICAgICAgICAgICAgICAgICAgIEtleSAgICAgICAgOiBTcGVjaWFsX0tleV9Db2RlKTsKICAgIC0tICBBS0EKICAgIHByYWdtYSBJbmxpbmUgKERlZmluZV9LZXkpOwogCkBAIC0xMjY0LDMwICsxNzEzLDMwIEBACiAgICAtLQogCiAgICAtLSAgQU5DSE9SKGBrZXluYW1lKCknLGBLZXlfTmFtZScpCi0gICBwcm9jZWR1cmUgS2V5X05hbWUgKEtleSAgOiBpbiAgUmVhbF9LZXlfQ29kZTsKKyAgIHByb2NlZHVyZSBLZXlfTmFtZSAoS2V5ICA6IFJlYWxfS2V5X0NvZGU7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgOiBvdXQgU3RyaW5nKTsKICAgIC0tICBBS0EKICAgIC0tICBUaGUgZXh0ZXJuYWwgbmFtZSBmb3IgYSByZWFsIGtleXN0cm9rZS4KIAogICAgLS0gIEFOQ0hPUihga2V5bmFtZSgpJyxgS2V5X05hbWUnKQotICAgZnVuY3Rpb24gS2V5X05hbWUgKEtleSAgOiBpbiAgUmVhbF9LZXlfQ29kZSkgcmV0dXJuIFN0cmluZzsKKyAgIGZ1bmN0aW9uIEtleV9OYW1lIChLZXkgIDogUmVhbF9LZXlfQ29kZSkgcmV0dXJuIFN0cmluZzsKICAgIC0tICBBS0EKICAgIC0tICBTYW1lIGFzIGZ1bmN0aW9uCi0gICAtLSAgV2UgZG9uJ3QgaW5saW5lIHRoaXMgcm91dGluZQorICAgLS0gIFdlIGRvIG5vdCBpbmxpbmUgdGhpcyByb3V0aW5lCiAKICAgIC0tICBBTkNIT1IoYHVuY3RybCgpJyxgVW5fQ29udHJvbCcpCi0gICBwcm9jZWR1cmUgVW5fQ29udHJvbCAoQ2ggIDogaW4gQXR0cmlidXRlZF9DaGFyYWN0ZXI7CisgICBwcm9jZWR1cmUgVW5fQ29udHJvbCAoQ2ggIDogQXR0cmlidXRlZF9DaGFyYWN0ZXI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyIDogb3V0IFN0cmluZyk7CiAgICAtLSAgQUtBCiAKICAgIC0tICBBTkNIT1IoYHVuY3RybCgpJyxgVW5fQ29udHJvbCcpCi0gICBmdW5jdGlvbiBVbl9Db250cm9sIChDaCAgOiBpbiBBdHRyaWJ1dGVkX0NoYXJhY3RlcikgcmV0dXJuIFN0cmluZzsKKyAgIGZ1bmN0aW9uIFVuX0NvbnRyb2wgKENoICA6IEF0dHJpYnV0ZWRfQ2hhcmFjdGVyKSByZXR1cm4gU3RyaW5nOwogICAgLS0gIEFLQQogICAgLS0gIFNhbWUgYXMgZnVuY3Rpb24KICAgIHByYWdtYSBJbmxpbmUgKFVuX0NvbnRyb2wpOwogCiAgICAtLSAgQU5DSE9SKGBkZWxheV9vdXRwdXQoKScsYERlbGF5X091dHB1dCcpCi0gICBwcm9jZWR1cmUgRGVsYXlfT3V0cHV0IChNc2VjcyA6IGluIE5hdHVyYWwpOworICAgcHJvY2VkdXJlIERlbGF5X091dHB1dCAoTXNlY3MgOiBOYXR1cmFsKTsKICAgIC0tICBBS0EKICAgIHByYWdtYSBJbmxpbmUgKERlbGF5X091dHB1dCk7CiAKQEAgLTEzNjIsMTQgKzE4MTEsMTQgQEAKICAgIHByYWdtYSBJbXBvcnQgKEMsIFN0YXJ0X0NvbG9yLCAic3RhcnRfY29sb3IiKTsKIAogICAgLS0gIEFOQ0hPUihgaW5pdF9wYWlyKCknLGBJbml0X1BhaXInKQotICAgcHJvY2VkdXJlIEluaXRfUGFpciAoUGFpciA6IGluIFJlZGVmaW5hYmxlX0NvbG9yX1BhaXI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBGb3JlIDogaW4gQ29sb3JfTnVtYmVyOwotICAgICAgICAgICAgICAgICAgICAgICAgQmFjayA6IGluIENvbG9yX051bWJlcik7CisgICBwcm9jZWR1cmUgSW5pdF9QYWlyIChQYWlyIDogUmVkZWZpbmFibGVfQ29sb3JfUGFpcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIEZvcmUgOiBDb2xvcl9OdW1iZXI7CisgICAgICAgICAgICAgICAgICAgICAgICBCYWNrIDogQ29sb3JfTnVtYmVyKTsKICAgIC0tICBBS0EKICAgIHByYWdtYSBJbmxpbmUgKEluaXRfUGFpcik7CiAKICAgIC0tICBBTkNIT1IoYHBhaXJfY29udGVudCgpJyxgUGFpcl9Db250ZW50JykKLSAgIHByb2NlZHVyZSBQYWlyX0NvbnRlbnQgKFBhaXIgOiBpbiBDb2xvcl9QYWlyOworICAgcHJvY2VkdXJlIFBhaXJfQ29udGVudCAoUGFpciA6IENvbG9yX1BhaXI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3JlIDogb3V0IENvbG9yX051bWJlcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhY2sgOiBvdXQgQ29sb3JfTnVtYmVyKTsKICAgIC0tICBBS0EKQEAgLTEzODEsMTAgKzE4MzAsMTAgQEAKICAgIHByYWdtYSBJbmxpbmUgKEhhc19Db2xvcnMpOwogCiAgICAtLSAgQU5DSE9SKGBpbml0X2NvbG9yKCknLGBJbml0X0NvbG9yJykKLSAgIHByb2NlZHVyZSBJbml0X0NvbG9yIChDb2xvciA6IGluIENvbG9yX051bWJlcjsKLSAgICAgICAgICAgICAgICAgICAgICAgICBSZWQgICA6IGluIFJHQl9WYWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICBHcmVlbiA6IGluIFJHQl9WYWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICBCbHVlICA6IGluIFJHQl9WYWx1ZSk7CisgICBwcm9jZWR1cmUgSW5pdF9Db2xvciAoQ29sb3IgOiBDb2xvcl9OdW1iZXI7CisgICAgICAgICAgICAgICAgICAgICAgICAgUmVkICAgOiBSR0JfVmFsdWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgR3JlZW4gOiBSR0JfVmFsdWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgQmx1ZSAgOiBSR0JfVmFsdWUpOwogICAgLS0gIEFLQQogICAgcHJhZ21hIElubGluZSAoSW5pdF9Db2xvcik7CiAKQEAgLTEzOTQsNyArMTg0Myw3IEBACiAgICBwcmFnbWEgSW5saW5lIChDYW5fQ2hhbmdlX0NvbG9yKTsKIAogICAgLS0gIEFOQ0hPUihgY29sb3JfY29udGVudCgpJyxgQ29sb3JfQ29udGVudCcpCi0gICBwcm9jZWR1cmUgQ29sb3JfQ29udGVudCAoQ29sb3IgOiBpbiAgQ29sb3JfTnVtYmVyOworICAgcHJvY2VkdXJlIENvbG9yX0NvbnRlbnQgKENvbG9yIDogQ29sb3JfTnVtYmVyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZCAgIDogb3V0IFJHQl9WYWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmVlbiA6IG91dCBSR0JfVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmx1ZSAgOiBvdXQgUkdCX1ZhbHVlKTsKQEAgLTE0MDcsMTMgKzE4NTYsMTMgQEAKICAgIHR5cGUgQ3Vyc2VzX01vZGUgaXMgKEN1cnNlcywgU2hlbGwpOwogCiAgICAtLSAgQU5DSE9SKGBkZWZfcHJvZ19tb2RlKCknLGBTYXZlX0N1cnNlc19Nb2RlJykKLSAgIHByb2NlZHVyZSBTYXZlX0N1cnNlc19Nb2RlIChNb2RlIDogaW4gQ3Vyc2VzX01vZGUpOworICAgcHJvY2VkdXJlIFNhdmVfQ3Vyc2VzX01vZGUgKE1vZGUgOiBDdXJzZXNfTW9kZSk7CiAgICAtLSAgQUtBCiAgICAtLSAgQUxJQVMoYGRlZl9zaGVsbF9tb2RlKCknKQogICAgcHJhZ21hIElubGluZSAoU2F2ZV9DdXJzZXNfTW9kZSk7CiAKICAgIC0tICBBTkNIT1IoYHJlc2V0X3Byb2dfbW9kZSgpJyxgUmVzZXRfQ3Vyc2VzX01vZGUnKQotICAgcHJvY2VkdXJlIFJlc2V0X0N1cnNlc19Nb2RlIChNb2RlIDogaW4gQ3Vyc2VzX01vZGUpOworICAgcHJvY2VkdXJlIFJlc2V0X0N1cnNlc19Nb2RlIChNb2RlIDogQ3Vyc2VzX01vZGUpOwogICAgLS0gIEFLQQogICAgLS0gIEFMSUFTKGByZXNldF9zaGVsbF9tb2RlKCknKQogICAgcHJhZ21hIElubGluZSAoUmVzZXRfQ3Vyc2VzX01vZGUpOwpAQCAtMTQzNywxMyArMTg4NiwxMyBAQAogICAgLS0gICAgICAgIGFuZCAtMSBvdGhlcndpc2UuCiAKICAgIC0tICBBTkNIT1IoYHJpcG9mZmxpbmUoKScsYFJpcF9PZmZfTGluZXMnKQotICAgcHJvY2VkdXJlIFJpcF9PZmZfTGluZXMgKExpbmVzIDogaW4gSW50ZWdlcjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jICA6IGluIFN0ZHNjcl9Jbml0X1Byb2MpOworICAgcHJvY2VkdXJlIFJpcF9PZmZfTGluZXMgKExpbmVzIDogSW50ZWdlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jICA6IFN0ZHNjcl9Jbml0X1Byb2MpOwogICAgLS0gIEFLQQogICAgLS0gIE4uQi46IHRvIGJlIG1vcmUgcHJlY2lzZSwgdGhpcyB1c2VzIGEgbmN1cnNlcyBzcGVjaWZpYyBlbmhhbmNlbWVudCBvZgogICAgLS0gICAgICAgIHJpcG9mZmxpbmUoKSwgaW4gd2hpY2ggdGhlIExpbmVzIGFyZ3VtZW50IGFic29sdXRlIHZhbHVlIGlzIHRoZQogICAgLS0gICAgICAgIG51bWJlciBvZiBsaW5lcyB0byBiZSByaXBwZWQgb2YuIFRoZSBvZmZpY2lhbCByaXBvZmZsaW5lKCkgb25seQotICAgLS0gICAgICAgIHVzZXMgdGhlIHNpZ24gb2YgTGluZXMgdG8gcmlwIG9mIGEgc2luZ2xlIGxpbmUgZnJvbSBib3R0b20gb3IgdG9wLgorICAgLS0gICAgICAgIHVzZXMgdGhlIHNpZ24gb2YgTGluZXMgdG8gcmVtb3ZlIGEgc2luZ2xlIGxpbmUgZnJvbSBib3R0b20gb3IgdG9wLgogICAgcHJhZ21hIElubGluZSAoUmlwX09mZl9MaW5lcyk7CiAKICAgIHR5cGUgQ3Vyc29yX1Zpc2liaWxpdHkgaXMgKEludmlzaWJsZSwgTm9ybWFsLCBWZXJ5X1Zpc2libGUpOwpAQCAtMTQ1NCw3ICsxOTAzLDcgQEAKICAgIHByYWdtYSBJbmxpbmUgKFNldF9DdXJzb3JfVmlzaWJpbGl0eSk7CiAKICAgIC0tICBBTkNIT1IoYG5hcG1zKCknLGBOYXBfTWlsbGlfU2Vjb25kcycpCi0gICBwcm9jZWR1cmUgTmFwX01pbGxpX1NlY29uZHMgKE1zIDogaW4gTmF0dXJhbCk7CisgICBwcm9jZWR1cmUgTmFwX01pbGxpX1NlY29uZHMgKE1zIDogTmF0dXJhbCk7CiAgICAtLSAgQUtBCiAgICBwcmFnbWEgSW5saW5lIChOYXBfTWlsbGlfU2Vjb25kcyk7CiAKQEAgLTE0NjMsMTkgKzE5MTIsMjEgQEAKICAgIC0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICB0eXBlIFRyYW5zZm9ybV9EaXJlY3Rpb24gaXMgKEZyb21fU2NyZWVuLCBUb19TY3JlZW4pOwogICAgcHJvY2VkdXJlIFRyYW5zZm9ybV9Db29yZGluYXRlcwotICAgICAoVyAgICAgIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgKFcgICAgICA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CiAgICAgICBMaW5lICAgOiBpbiBvdXQgTGluZV9Qb3NpdGlvbjsKICAgICAgIENvbHVtbiA6IGluIG91dCBDb2x1bW5fUG9zaXRpb247Ci0gICAgICBEaXIgICAgOiBpbiBUcmFuc2Zvcm1fRGlyZWN0aW9uIDo9IEZyb21fU2NyZWVuKTsKKyAgICAgIERpciAgICA6IFRyYW5zZm9ybV9EaXJlY3Rpb24gOj0gRnJvbV9TY3JlZW4pOwogICAgLS0gIFRoaXMgcHJvY2VkdXJlIHRyYW5zZm9ybXMgc2NyZWVuIGNvb3JkaW5hdGVzIGludG8gY29vcmRpbmF0ZXMgcmVsYXRpdmUKICAgIC0tICB0byB0aGUgd2luZG93IGFuZCB2aWNlIHZlcnNhLCBkZXBlbmRpbmcgb24gdGhlIERpciBwYXJhbWV0ZXIuCi0gICAtLSAgU2NyZWVuIGNvb3JkaW5hdGVzIGFyZSB0aGUgcG9zaXRpb24gaW5mb3JtYXRpb25zIG9uIHRoZSBwaHlzaWNhbCBkZXZpY2UuCisgICAtLSAgU2NyZWVuIGNvb3JkaW5hdGVzIGFyZSB0aGUgcG9zaXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBwaHlzaWNhbCBkZXZpY2UuCiAgICAtLSAgQW4gQ3Vyc2VzX0V4Y2VwdGlvbiB3aWxsIGJlIHJhaXNlZCBpZiBMaW5lIGFuZCBDb2x1bW4gYXJlIG5vdCBpbiB0aGUKICAgIC0tICBXaW5kb3cgb3IgaWYgeW91IHBhc3MgdGhlIE51bGxfV2luZG93IGFzIGFyZ3VtZW50LgotICAgLS0gIFdlIGRvbid0IGlubGluZSB0aGlzIHByb2NlZHVyZQorICAgLS0gIFdlIGRvIG5vdCBpbmxpbmUgdGhpcyBwcm9jZWR1cmUKIAogICAgLS0gIE1BTlBBR0UoYGRlZmF1bHRfY29sb3JzLjN4JykKIAorICAgRGVmYXVsdF9Db2xvciA6IGNvbnN0YW50IENvbG9yX051bWJlciA6PSAtMTsKKwogICAgLS0gIEFOQ0hPUihgdXNlX2RlZmF1bHRfY29sb3JzKCknLGBVc2VfRGVmYXVsdF9Db2xvcnMnKQogICAgcHJvY2VkdXJlIFVzZV9EZWZhdWx0X0NvbG9yczsKICAgIC0tICBBS0EKQEAgLTE1MDcsMjkgKzE5NTgsMjkgQEAKICAgIC0tICBNQU5QQUdFKGBjdXJzX3Njcl9kdW1wLjN4JykKIAogICAgLS0gIEFOQ0hPUihgc2NyX2R1bXAoKScsYFNjcmVlbl9EdW1wX1RvX0ZpbGUnKQotICAgcHJvY2VkdXJlIFNjcmVlbl9EdW1wX1RvX0ZpbGUgKEZpbGVuYW1lIDogaW4gU3RyaW5nKTsKKyAgIHByb2NlZHVyZSBTY3JlZW5fRHVtcF9Ub19GaWxlIChGaWxlbmFtZSA6IFN0cmluZyk7CiAgICAtLSAgQUtBCiAKICAgIC0tICBBTkNIT1IoYHNjcl9yZXN0b3JlKCknLGBTY3JlZW5fUmVzdG9yZV9Gcm9tX0ZpbGUnKQotICAgcHJvY2VkdXJlIFNjcmVlbl9SZXN0b3JlX0Zyb21fRmlsZSAoRmlsZW5hbWUgOiBpbiBTdHJpbmcpOworICAgcHJvY2VkdXJlIFNjcmVlbl9SZXN0b3JlX0Zyb21fRmlsZSAoRmlsZW5hbWUgOiBTdHJpbmcpOwogICAgLS0gIEFLQQogCiAgICAtLSAgQU5DSE9SKGBzY3JfaW5pdCgpJyxgU2NyZWVuX0luaXRfRnJvbV9GaWxlJykKLSAgIHByb2NlZHVyZSBTY3JlZW5fSW5pdF9Gcm9tX0ZpbGUgKEZpbGVuYW1lIDogaW4gU3RyaW5nKTsKKyAgIHByb2NlZHVyZSBTY3JlZW5fSW5pdF9Gcm9tX0ZpbGUgKEZpbGVuYW1lIDogU3RyaW5nKTsKICAgIC0tICBBS0EKIAogICAgLS0gIEFOQ0hPUihgc2NyX3NldCgpJyxgU2NyZWVuX1NldF9GaWxlJykKLSAgIHByb2NlZHVyZSBTY3JlZW5fU2V0X0ZpbGUgKEZpbGVuYW1lIDogaW4gU3RyaW5nKTsKKyAgIHByb2NlZHVyZSBTY3JlZW5fU2V0X0ZpbGUgKEZpbGVuYW1lIDogU3RyaW5nKTsKICAgIC0tICBBS0EKIAogICAgLS0gIE1BTlBBR0UoYGN1cnNfcHJpbnQuM3gnKQotICAgLS0gIE5vdCBpbXBsZW1lbnRlZDogIG1jcHJpbnQKKyAgIC0tICBOb3QgaW1wbGVtZW50ZWQ6IG1jcHJpbnQKIAogICAgLS0gIE1BTlBBR0UoYGN1cnNfcHJpbnR3LjN4JykKICAgIC0tICBOb3QgaW1wbGVtZW50ZWQ6IHByaW50dywgIHdwcmludHcsIG12cHJpbnR3LCBtdndwcmludHcsIHZ3cHJpbnR3LAogICAgLS0gICAgICAgICAgICAgICAgICAgdndfcHJpbnR3CiAgICAtLSAgUGxlYXNlIHVzZSB0aGUgQWRhIHN0eWxlIFRleHRfSU8gY2hpbGQgcGFja2FnZXMgZm9yIGZvcm1hdHRlZAotICAgLS0gIHByaW50aW5nLiBJdCBkb2Vzbid0IG1ha2UgYSBsb3Qgb2Ygc2Vuc2UgdG8gbWFwIHRoZSBwcmludGYgc3R5bGUKKyAgIC0tICBwcmludGluZy4gSXQgZG9lcyBub3QgbWFrZSBhIGxvdCBvZiBzZW5zZSB0byBtYXAgdGhlIHByaW50ZiBzdHlsZQogICAgLS0gIEMgZnVuY3Rpb25zIHRvIEFkYS4KIAogICAgLS0gIE1BTlBBR0UoYGN1cnNfc2NhbncuM3gnKQpAQCAtMTU1Myw3ICsyMDA0LDExIEBACiAgICAtLSAgVGhlIG5leHQgY29uc3RhbnRzIGFyZSBnZW5lcmF0ZWQgYW5kIG1heSBiZSBkaWZmZXJlbnQgb24geW91cgogICAgLS0gIGFyY2hpdGVjdHVyZS4KICAgIC0tCi1pbmNsdWRlKGBXaW5kb3dfT2Zmc2V0cycpZG5sCisKKyAgIFNpemVvZl9Cb29sIDogY29uc3RhbnQgOj0gQ3Vyc2VzX0NvbnN0YW50cy5TaXplb2ZfQm9vbDsKKworICAgdHlwZSBDdXJzZXNfQm9vbCBpcyBtb2QgMiAqKiBTaXplb2ZfQm9vbDsKKwogICAgQ3Vyc2VzX0Jvb2xfRmFsc2UgOiBjb25zdGFudCBDdXJzZXNfQm9vbCA6PSAwOwogCiBlbmQgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsKZGlmZiAtLWdpdCBhL0FkYTk1L2luY2x1ZGUvTUtuY3Vyc2VzX2RlZi5zaCBiL0FkYTk1L2luY2x1ZGUvTUtuY3Vyc2VzX2RlZi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40YWFjODY1Ci0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvaW5jbHVkZS9NS25jdXJzZXNfZGVmLnNoCkBAIC0wLDAgKzEsODAgQEAKKyMhIC9iaW4vc2gKKyMgJElkOiBNS25jdXJzZXNfZGVmLnNoLHYgMS4yIDIwMDMvMTAvMjUgMTY6MTk6NDYgdG9tIEV4cCAkCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgICMKKyMgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgIworIyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uICAjCisjIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBkaXN0cmlidXRlICAgICMKKyMgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gIworIyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlICAjCisjIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAjCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAjCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAgICMKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgICAgIworIyBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgICAgICAjCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HICAgICMKKyMgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiAgICAgICAgIworIyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAgIworIyBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCAjCisjIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgICAgICAgICMKKyMgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIE1LbmN1cnNlc19kZWYuc2ggLS0gZ2VuZXJhdGUgZmFsbGJhY2sgZGVmaW5pdGlvbnMgZm9yIG5jdXJzZXNfY2ZnLmgKKyMKKyMgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5IDIwMDAKKyMKKyMgR2l2ZW4gdGhlIGNob2ljZSBiZXR3ZWVuIGNvbnN0cnVjdHMgc3VjaCBhcworIworIwkjaWYgZGVmaW5lZChmb28pICYmIGZvbworIwkjaWYgZm9vCisjCisjIHdlIGNob3NlIHRoZSBsYXR0ZXIuICBJdCBpcyBndWFyYW50ZWVkIGJ5IHRoZSBsYW5ndWFnZSBzdGFuZGFyZCwgYW5kIHRoZXJlCisjIGFwcGVhciB0byBiZSBubyBicm9rZW4gY29tcGlsZXJzIHRoYXQgZG8gbm90IGhvbm9yIHRoYXQgZGV0YWlsLiAgQnV0IHNvbWUKKyMgcGVvcGxlIHdhbnQgdG8gdXNlIGdjYydzIC1XdW5kZWYgb3B0aW9uIChjb3JyZXNwb25kaW5nIHRvIG9uZSBvZiB0aGUgbGVzcworIyB1c2VmdWwgZmVhdHVyZXMgaW4gV2F0Y29tJ3MgY29tcGlsZXIpIHRvIGNoZWNrIGZvciBtaXNzcGVsbGluZ3MuICBTbyB3ZQorIyBnZW5lcmF0ZSBhIHNldCBvZiBmYWxsYmFjayBkZWZpbml0aW9ucyB0byBxdWlldCB0aGUgd2FybmluZ3Mgd2l0aG91dCBtYWtpbmcKKyMgdGhlIGNvZGUgdWdseS4KKyMKK0RFRlM9IiR7MS1uY3Vyc2VzX2RlZnN9IgorY2F0IDw8RU9GCisvKgorICogVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBieSAkMAorICovCisKKyNpZm5kZWYgTkNfREVGSU5FX0gKKyNkZWZpbmUgTkNfREVGSU5FX0ggMQorCitFT0YKKworJHtBV0stYXdrfSA8JERFRlMgJworIS9eW0AjXS8geworCWlmICggTkYgPT0gMSApCisJeworCQlwcmludCAiI2lmbmRlZiIsICQxCisJCXByaW50ICIjZGVmaW5lIiwgJDEsICIwIgorCQlwcmludCAiI2VuZGlmIgorCQlwcmludCAiIgorCX0gZWxzZSBpZiAoIE5GICE9IDAgKSB7CisJCXByaW50ICIjaWZuZGVmIiwgJDEKKwkJcHJpbnRmICIjZGVmaW5lIgorCQlmb3IgKG4gPSAxOyBuIDw9IE5GOyBuKyspIHsKKwkJCXByaW50ZiAiICVzIiwgJG4KKwkJfQorCQlwcmludCAiIgorCQlwcmludCAiI2VuZGlmIgorCQlwcmludCAiIgorCX0KK30KK0VORAl7CitwcmludCAiI2VuZGlmIC8qIE5DX0RFRklORV9IICovIgorCX0KKycKZGlmZiAtLWdpdCBhL0FkYTk1L2luY2x1ZGUvTWFrZWZpbGUuaW4gYi9BZGE5NS9pbmNsdWRlL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhODllZDYKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9pbmNsdWRlL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsOTIgQEAKKyMgJElkOiBNYWtlZmlsZS5pbix2IDEuNCAyMDE1LzA4LzA1IDIzOjE1OjQxIHRvbSBFeHAgJAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMjAxMC0yMDExLDIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiAgIworIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSAgICAjCisjIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvICMKKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSAgIworIyBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gIworIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgIworIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgICAjCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMICAgICMKKyMgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICAgICAgIworIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAgICAjCisjIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgICAgICAgICMKKyMgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgICMKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgIworIyB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgICAgICAgICAjCisjIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkKKyMKKyMgTWFrZWZpbGUgZm9yIG5jdXJzZXMgc291cmNlIGNvZGUuCisjCisjIFRoaXMgbWFrZXMgaGVhZGVyIGZpbGVzIHVzZWQgd2hlbiBidWlsZGluZyBBZGE5NSBhcyBhIHNlcGFyYXRlIHRyZWUuCisjCisjIFRoZSB2YXJpYWJsZSAnc3JjZGlyJyByZWZlcnMgdG8gdGhlIHNvdXJjZS1kaXN0cmlidXRpb24sIGFuZCBjYW4gYmUgc2V0IHdpdGgKKyMgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgYnkgIi0tc3JjZGlyPURJUiIuCisKKyMgdHVybiBvZmYgX2FsbF8gc3VmZml4IHJ1bGVzOyB3ZSdsbCBnZW5lcmF0ZSBvdXIgb3duCisuU1VGRklYRVM6CisKK1NIRUxMCQk9IEBTSEVMTEAKK1ZQQVRICQk9IEBzcmNkaXJACitUSElTCQk9IE1ha2VmaWxlCisKK0RFU1RESVIJCT0gQERFU1RESVJACitzcmNkaXIJCT0gQHNyY2RpckAKK3ByZWZpeAkJPSBAcHJlZml4QAorZXhlY19wcmVmaXgJPSBAZXhlY19wcmVmaXhACitpbmNsdWRlZGlyCT0gQGluY2x1ZGVkaXJACisKK0lOU1RBTEwJCT0gQElOU1RBTExACitJTlNUQUxMX0RBVEEJPSBASU5TVEFMTF9EQVRBQAorCitBV0sJCT0gQEFXS0AKKworIyBUaGVzZSBmaWxlcyBhcmUgZ2VuZXJhdGVkIGJ5IHRoaXMgbWFrZWZpbGUKK0FVVE9fU1JDID0gXAorCW5jdXJzZXNfZGVmLmgKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2FsbCBcCitsaWJzIFwKK2RlcGVuZCBcCitzb3VyY2VzIFwKK2luc3RhbGwgOjoJJChBVVRPX1NSQykKKwordW5pbnN0YWxsIDo6CisKK25jdXJzZXNfZGVmLmg6ICQoc3JjZGlyKS9uY3Vyc2VzX2RlZnMgJChzcmNkaXIpL01LbmN1cnNlc19kZWYuc2gKKwlBV0s9JChBV0spICQoU0hFTEwpICQoc3JjZGlyKS9NS25jdXJzZXNfZGVmLnNoICQoc3JjZGlyKS9uY3Vyc2VzX2RlZnMgPiRACisKK3RhZ3M6CisJY3RhZ3MgKi5bY2hdCisKK0BNQUtFX1VQUEVSX1RBR1NAVEFHUzoKK0BNQUtFX1VQUEVSX1RBR1NACWV0YWdzICouW2NoXQorCittb3N0bHljbGVhbiA6OgorCS1ybSAtZiBjb3JlIHRhZ3MgVEFHUyAqfiAqLmJhayAqLmkgKi5sbiAqLmF0YWMgdHJhY2UKKworY2xlYW4gOjogbW9zdGx5Y2xlYW4KKwktcm0gLWYgJChBVVRPX1NSQykKKworZGlzdGNsZWFuIDo6IGNsZWFuCisJLXJtIC1mIE1ha2VmaWxlCisKK3JlYWxjbGVhbiA6OiBkaXN0Y2xlYW4KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUaGUgcmVtYWluZGVyIG9mIHRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBkdXJpbmcgY29uZmlndXJhdGlvbgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvQWRhOTUvaW5jbHVkZS9uY3Vyc2VzX2NmZy5oaW4gYi9BZGE5NS9pbmNsdWRlL25jdXJzZXNfY2ZnLmhpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjhhNDgyCi0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvaW5jbHVkZS9uY3Vyc2VzX2NmZy5oaW4KQEAgLTAsMCArMSw3MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA0LDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgPGRpY2tleUBjbGFyay5uZXQ+IDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiAkSWQ6IG5jdXJzZXNfY2ZnLmhpbix2IDEuNyAyMDA1LzAxLzAyIDAxOjI2OjU4IHRvbSBFeHAgJAorICoKKyAqIFRoaXMgaXMgYSB0ZW1wbGF0ZS1maWxlIHVzZWQgdG8gZ2VuZXJhdGUgdGhlICJuY3Vyc2VzX2NmZy5oIiBmaWxlLgorICoKKyAqIFJhdGhlciB0aGFuIGxpc3QgZXZlcnkgZGVmaW5pdGlvbiwgdGhlIGNvbmZpZ3VyYXRpb24gc2NyaXB0IHN1YnN0aXR1dGVzIHRoZQorICogZGVmaW5pdGlvbnMgdGhhdCBpdCBmaW5kcyB1c2luZyAnc2VkJy4gIFlvdSBuZWVkIGEgcGF0Y2ggKG9yaWdpbmFsIGRhdGUKKyAqIDk3MTIyMikgdG8gYXV0b2NvbmYgMi4xMiBvciAyLjEzIHRvIGRvIHRoaXMuCisgKgorICogU2VlOgorICoJaHR0cDovL2ludmlzaWJsZS1pc2xhbmQubmV0L2F1dG9jb25mLworICoJZnRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvYXV0b2NvbmYvCisgKi8KKyNpZm5kZWYgTkNfQ09ORklHX0gKKyNkZWZpbmUgTkNfQ09ORklHX0gKK0BERUZTQAorCisjaW5jbHVkZSA8bmN1cnNlc19kZWYuaD4KKworCS8qIFRoZSBDIGNvbXBpbGVyIG1heSBub3QgdHJlYXQgdGhlc2UgcHJvcGVybHkgYnV0IEMrKyBoYXMgdG8gKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworI3VuZGVmIGNvbnN0CisjdW5kZWYgaW5saW5lCisjZWxzZQorI2lmIGRlZmluZWQobGludCkgfHwgZGVmaW5lZChUUkFDRSkKKyN1bmRlZiBpbmxpbmUKKyNkZWZpbmUgaW5saW5lIC8qIG5vdGhpbmcgKi8KKyNlbmRpZgorI2VuZGlmCisKKwkvKiBPbiBIUC1VWCwgdGhlIEMgY29tcGlsZXIgZG9lc24ndCBncm9rIG1ic3RhdGVfdCB3aXRob3V0CisJICAgLURfWE9QRU5fU09VUkNFPTUwMC4gSG93ZXZlciwgdGhpcyBjYXVzZXMgcHJvYmxlbXMgb24KKwkgICBJUklYLiBTbywgd2UgI2RlZmluZSBtYnN0YXRlX3QgdG8gaW50IGluIGNvbmZpZ3VyZS5pbgorCSAgIG9ubHkgZm9yIHRoZSBDIGNvbXBpbGVyIGlmIG5lZWRlZC4gKi8KKyNpZm5kZWYgX19jcGx1c3BsdXMKKyNpZmRlZiBORUVEX01CU1RBVEVfVF9ERUYKKyNkZWZpbmUgbWJzdGF0ZV90IGludAorI2VuZGlmCisjZW5kaWYKKworI2VuZGlmIC8qIE5DX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9BZGE5NS9pbmNsdWRlL25jdXJzZXNfZGVmcyBiL0FkYTk1L2luY2x1ZGUvbmN1cnNlc19kZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxNzQ2MjAKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9pbmNsdWRlL25jdXJzZXNfZGVmcwpAQCAtMCwwICsxLDIwNCBAQAorIyAkSWQ6IG5jdXJzZXNfZGVmcyx2IDEuNDQgMjAxMy8wNC8yNyAxOTo1MDoxNyB0b20gRXhwICQKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDIwMDAtMjAxMiwyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAgIworIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCAjCisjIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gICMKKyMgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgICAgIworIyB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byAjCisjIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgICMKKyMgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluICMKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SICMKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksICAgIworIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCAgICAjCisjIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAgICAgICMKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgICAgIworIyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSICAgICAgICAjCisjIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgICAjCisjIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsICMKKyMgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAgICAgICAgIworIyBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgU2VlICJNS25jdXJzZXNfZGVmLnNoIiBmb3IgYW4gZXhwbGFuYXRpb24uCisjCisjIChoaW50OiBkb24ndCB0cnkgdG8gZGVmaW5lIE5ERUJVRyA7LSkKKworQlJPS0VOX0xJTktFUgorQlNEX1RQVVRTCitDUFBfSEFTX1BBUkFNX0lOSVQKK0NVUlNFU19BQ1NfQVJSQVkJYWNzX21hcAorQ1VSU0VTX1dBQ1NfQVJSQVkJX25jX3dhY3MKK0RFQ0xfRVJSTk8KK0VUSVBfTkVFRFNfTUFUSF9ICitHQ0NfTk9SRVRVUk4JLyogbm90aGluZyAqLworR0NDX1VOVVNFRAkvKiBub3RoaW5nICovCitIQVZFX0JJR19DT1JFCitIQVZFX0JTRF9DR0VURU5UCitIQVZFX0JTRF9TSUdOQUxfSAorSEFWRV9CVE9XQyAKK0hBVkVfQlVJTFRJTl9ICitIQVZFX0NIR0FUCTEKK0hBVkVfQ09MT1JfU0VUCTEKK0hBVkVfRElSRU5UX0gKK0hBVkVfRVJSTk8KK0hBVkVfRkNOVExfSAorSEFWRV9GSUxURVIJMQorSEFWRV9GT1JNX0gKK0hBVkVfR0VUQkVHWAkxCitIQVZFX0dFVENVUlgJMQorSEFWRV9HRVRDV0QKK0hBVkVfR0VURUdJRAorSEFWRV9HRVRFVUlECitIQVZFX0dFVE1BWFgJMQorSEFWRV9HRVROU1RSCitIQVZFX0dFVE9QVF9ICitIQVZFX0dFVFBBUlgJMQorSEFWRV9HRVRUSU1FT0ZEQVkKK0hBVkVfR0VUVFRZTkFNCitIQVZFX0dFVFdJTgkxCitIQVZFX0dQTV9ICitIQVZFX0dQUF9CVUlMVElOX0gKK0hBVkVfR1hYX0JVSUxUSU5fSAorSEFWRV9IQVNfS0VZCitIQVZFX0lPU1RSRUFNCitIQVZFX0lTQVNDSUkKK0hBVkVfSVNTRVRVR0lECitIQVZFX0xBTkdJTkZPX0NPREVTRVQKK0hBVkVfTElCQ19ICitIQVZFX0xJQkRCTUFMTE9DCitIQVZFX0xJQkRNQUxMT0MKK0hBVkVfTElCRk9STQorSEFWRV9MSUJHUE0KK0hBVkVfTElCTUVOVQorSEFWRV9MSUJNUEFUUk9MCitIQVZFX0xJQlBBTkVMCitIQVZFX0xJTUlUU19ICitIQVZFX0xJTksKK0hBVkVfTE9DQUxFX0gKK0hBVkVfTE9OR19GSUxFX05BTUVTCitIQVZFX01CTEVOCitIQVZFX01CUkxFTgorSEFWRV9NQlJUT1dDCitIQVZFX01CU1JUT1dDUworSEFWRV9NQlNUT1dDUworSEFWRV9NQlRPV0MKK0hBVkVfTUVOVV9ICitIQVZFX01LU1RFTVAKK0hBVkVfTVZWTElORQkxCitIQVZFX01WV1ZMSU5FCTEKK0hBVkVfTkFOT1NMRUVQCitIQVZFX05DX0FMTE9DX0gKK0hBVkVfUEFORUxfSAorSEFWRV9QT0xMCitIQVZFX1BPTExfSAorSEFWRV9QVVJJRlkKK0hBVkVfUFVUV0MgCitIQVZFX1BVVFdJTgkxCitIQVZFX1JFR0VYUFJfSF9GVU5DUworSEFWRV9SRUdFWFBfSF9GVU5DUworSEFWRV9SRUdFWF9IX0ZVTkNTCitIQVZFX1JFTU9WRQorSEFWRV9SRVNJWkVURVJNCitIQVZFX1JFU0laRV9URVJNCitIQVZFX1JJUE9GRkxJTkUJMQorSEFWRV9TRUxFQ1QKK0hBVkVfU0VUQlVGCitIQVZFX1NFVEJVRkZFUgorSEFWRV9TRVRVUFRFUk0JMQorSEFWRV9TRVRWQlVGCitIQVZFX1NJR0FDVElPTgorSEFWRV9TSUdWRUMKK0hBVkVfU0laRUNIQU5HRQorSEFWRV9TTEtfQ09MT1IKK0hBVkVfU0xLX0lOSVQJMQorSEFWRV9TVFJTVFIKK0hBVkVfU1lNTElOSworSEFWRV9TWVNfQlNEVFlQRVNfSAorSEFWRV9TWVNfSU9DVExfSAorSEFWRV9TWVNfUEFSQU1fSAorSEFWRV9TWVNfUE9MTF9ICitIQVZFX1NZU19TRUxFQ1RfSAorSEFWRV9TWVNfVEVSTUlPX0gKK0hBVkVfU1lTX1RJTUVTX0gKK0hBVkVfU1lTX1RJTUVfSAorSEFWRV9TWVNfVElNRV9TRUxFQ1QKK0hBVkVfVENHRVRBVFRSCitIQVZFX1RDR0VUUEdSUAorSEFWRV9URUxMCitIQVZFX1RFUk1BVFRSUwkxCitIQVZFX1RFUk1JT1NfSAorSEFWRV9URVJNSU9fSAorSEFWRV9URVJNTkFNRQkxCitIQVZFX1RFUk1fSAkxCitIQVZFX1RHRVRFTlQJMQorSEFWRV9USUdFVE5VTQkxCitIQVZFX1RJR0VUU1RSCTEKK0hBVkVfVElNRVMKK0hBVkVfVFRZRU5UX0gKK0hBVkVfVFlQRUFIRUFECTEKK0hBVkVfVFlQRUlORk8KK0hBVkVfVFlQRV9BVFRSX1QKK0hBVkVfVFlQRV9TSUdBQ1RJT04KK0hBVkVfVU5JU1REX0gKK0hBVkVfVU5MSU5LCitIQVZFX1VTRV9ERUZBVUxUX0NPTE9SUworSEFWRV9WRlNDQU5GCitIQVZFX1ZTTlBSSU5URgorSEFWRV9WU1NDQU5GCitIQVZFX1dDU1JUT01CUworSEFWRV9XQ1NUT01CUworSEFWRV9XQ1RPQiAKK0hBVkVfV0NUT01CCitIQVZFX1dDVFlQRV9ICitIQVZFX1dJTlNTVFIJMQorSEFWRV9XT1JLSU5HX1BPTEwKK0hBVkVfV1JFU0laRQorSEFWRV9fRE9TQ0FOCitNSVhFRENBU0VfRklMRU5BTUVTCitOQ1VSU0VTX0NIQVJfRVEKK05DVVJTRVNfRVhQQU5ERUQKK05DVVJTRVNfRVhUX0NPTE9SUworTkNVUlNFU19FWFRfRlVOQ1MKK05DVVJTRVNfTk9fUEFERElORworTkNVUlNFU19QQVRIU0VQCSc6JworTkVFRF9QVEVNX0gKK05PX0xFQUtTCitQVVJFX1RFUk1JTkZPCitTVERDX0hFQURFUlMKK1NWUjRfQUNUSU9OCitTVlI0X1RFUk1JTworU1lTVEVNX05BTUUJInVua25vd24iCitURVJNSU5GTwkibm9uZSIKK1RFUk1QQVRICSJub25lIgorVElNRV9XSVRIX1NZU19USU1FCitUWVBFT0ZfQ0hUWVBFCitVU0VfQ09MT1JGR0JHCitVU0VfREFUQUJBU0UKK1VTRV9HRVRDQVAKK1VTRV9HRVRDQVBfQ0FDSEUKK1VTRV9IQVJEX1RBQlMKK1VTRV9IQVNIRURfREIKK1VTRV9IQVNITUFQCitVU0VfSE9NRV9URVJNSU5GTworVVNFX0xJTktTCitVU0VfTVlfTUVNTU9WRQorVVNFX09LX0JDT1BZCitVU0VfUkNTX0lEUworVVNFX1JFRU5UUkFOVAorVVNFX1NBRkVfU1BSSU5URgorVVNFX1NDUk9MTF9ISU5UUworVVNFX1NJR1dJTkNICitVU0VfU1lNTElOS1MKK1VTRV9TWVNNT1VTRQorVVNFX1RFUk1DQVAKK1VTRV9XRUFLX1NZTUJPTFMKK1VTRV9XSURFQ19TVVBQT1JUCitVU0VfWE1DX1NVUFBPUlQKZGlmZiAtLWdpdCBhL0FkYTk1L21ha2UtdGFyLnNoIGIvQWRhOTUvbWFrZS10YXIuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjNkMGE2NAotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L21ha2UtdGFyLnNoCkBAIC0wLDAgKzEsMTU2IEBACisjIS9iaW4vc2gKKyMgJElkOiBtYWtlLXRhci5zaCx2IDEuMTUgMjAxNS8wNS8xNiAxNzoxMjozNyB0b20gRXhwICQKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDIwMTAtMjAxMywyMDE1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAgIworIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCAjCisjIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gICMKKyMgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgICAgIworIyB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byAjCisjIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgICMKKyMgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluICMKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SICMKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksICAgIworIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCAgICAjCisjIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAgICAgICMKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgICAgIworIyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSICAgICAgICAjCisjIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgICAjCisjIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsICMKKyMgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAgICAgICAgIworIyBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29uc3RydWN0IGEgdGFyLWZpbGUgY29udGFpbmluZyBvbmx5IHRoZSBBZGE5NSB0cmVlIGFzIHdlbGwgYXMgaXRzIGFzc29jaWF0ZWQKKyMgZG9jdW1lbnRhdGlvbi4gIFRoZSByZWFzb24gZm9yIGRvaW5nIHRoYXQgaXMgdG8gc2ltcGxpZnkgZGlzdHJpYnV0aW5nIHRoZQorIyBhZGEgYmluZGluZyBhcyBhIHNlcGFyYXRlIHBhY2thZ2UuCisKK0NEUEFUSD06CitleHBvcnQgQ0RQQVRICisKK1RBUkdFVD1gcHdkYAorCis6ICR7Uk9PVE5BTUU6PW5jdXJzZXMtQWRhOTV9Cis6ICR7UEtHX05BTUU6PUFkYUN1cnNlc30KKzogJHtERVNURElSOj0kVEFSR0VUfQorOiAke1RNUERJUjo9L3RtcH0KKworZ3JlcF9hc3NpZ24oKSB7CisJZ3JlcF9hc3NpZ249YGVncmVwICJeJDJcPiIgIiQxIiB8IHNlZCAtZSAicy9eJDJbIAldKj1bIAldKi8vIiAtZSAncy8iLy9nJ2AKKwlldmFsICQyPVwiJGdyZXBfYXNzaWduXCIKK30KKworZ3JlcF9wYXRjaGRhdGUoKSB7CisJZ3JlcF9hc3NpZ24gLi4vZGlzdC5tayBOQ1VSU0VTX01BSk9SCisJZ3JlcF9hc3NpZ24gLi4vZGlzdC5tayBOQ1VSU0VTX01JTk9SCisJZ3JlcF9hc3NpZ24gLi4vZGlzdC5tayBOQ1VSU0VTX1BBVENICit9CisKKyMgVGhlIHJwbSBzcGVjLWZpbGUgaW4gdGhlIG5jdXJzZXMgdHJlZSBpcyBhIHRlbXBsYXRlLiAgRmlsbCBpbiB0aGUgdmVyc2lvbgorIyBpbmZvcm1hdGlvbiBmcm9tIGRpc3QubWsKK2VkaXRfc3BlY2ZpbGUoKSB7CisJc2VkIFwKKwkJLWUgInMvXFw8TUFKT1JcXD4vJE5DVVJTRVNfTUFKT1IvZyIgXAorCQktZSAicy9cXDxNSU5PUlxcPi8kTkNVUlNFU19NSU5PUi9nIiBcCisJCS1lICJzL1xcPFlZWVlNTUREXFw+LyROQ1VSU0VTX1BBVENIL2ciICQxID4kMS5uZXcKKwljaG1vZCB1K3cgJDEKKwltdiAkMS5uZXcgJDEKK30KKworbWFrZV9jaGFuZ2Vsb2coKSB7CisJdGVzdCAtZiAkMSAmJiBjaG1vZCB1K3cgJDEKKwljYXQgPiQxIDw8RU9GCitgZWNobyAkUEtHX05BTUV8dHIgJ1tBLVpdJyAnW2Etel0nYCAoJE5DVVJTRVNfTUFKT1IuJE5DVVJTRVNfTUlOT1IrJE5DVVJTRVNfUEFUQ0gpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogc25hcHNob3Qgb2YgbmN1cnNlcyBzdWJwYWNrYWdlIGZvciAkUEtHX05BTUUuCisKKyAtLSBgaGVhZCAtbiAxICRIT01FLy5zaWduYXR1cmVgICBgZGF0ZSAtUmAKK0VPRgorfQorCisjIFRoaXMgY2FuIGJlIHJ1biBmcm9tIGVpdGhlciB0aGUgc3ViZGlyZWN0b3J5LCBvciBmcm9tIHRoZSB0b3AtbGV2ZWwKKyMgc291cmNlIGRpcmVjdG9yeS4gIFdlIHdpbGwgcHV0IHRoZSB0YXIgZmlsZSBpbiB0aGUgb3JpZ2luYWwgZGlyZWN0b3J5LgordGVzdCAtZCAuL0FkYTk1ICYmIGNkIC4vQWRhOTUKK1NPVVJDRT1gY2QgLi47cHdkYAorCitCVUlMRD0kVE1QRElSL21ha2UtdGFyJCQKK3RyYXAgImNkIC87IHJtIC1yZiAkQlVJTEQ7IGV4aXQgMCIgMCAxIDIgNSAxNQorCit1bWFzayAwNzcKK2lmICEgKCBta2RpciAkQlVJTEQgKQordGhlbgorCWVjaG8gIj8gY2Fubm90IG1ha2UgYnVpbGQgZGlyZWN0b3J5ICRCVUlMRCIKK2ZpCisKK3VtYXNrIDAyMgorbWtkaXIgJEJVSUxELyRST09UTkFNRQorCitjcCAtcCAtciAqICRCVUlMRC8kUk9PVE5BTUUvIHx8IGV4aXQKKworIyBBZGQgdGhlIGNvbmZpZy4qIHV0aWxpdHkgc2NyaXB0cyBmcm9tIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5LgorZm9yIGkgaW4gLiAuLgorZG8KKwlmb3IgaiBpbiBjb25maWcuZ3Vlc3MgY29uZmlnLnN1YiBpbnN0YWxsLXNoIHRhci1jb3B5LnNoCisJZG8KKwkJdGVzdCAtZiAkaS8kaiAmJiBjcCAtcCAkaS8kaiAkQlVJTEQvJFJPT1ROQU1FLworCWRvbmUKK2RvbmUKKworIyBNYWtlIHJwbSBhbmQgZHBrZyBzY3JpcHRzIGZvciB0ZXN0LWJ1aWxkcworZ3JlcF9wYXRjaGRhdGUKK2ZvciBzcGVjIGluICRCVUlMRC8kUk9PVE5BTUUvcGFja2FnZS8qLnNwZWMKK2RvCisJZWRpdF9zcGVjZmlsZSAkc3BlYworZG9uZQorZm9yIHNwZWMgaW4gJEJVSUxELyRST09UTkFNRS9wYWNrYWdlL2RlYmlhbioKK2RvCisJbWFrZV9jaGFuZ2Vsb2cgJHNwZWMvY2hhbmdlbG9nCitkb25lCisKK2NwIC1wIC4uL21hbi9NS2FkYV9jb25maWcuaW4gJEJVSUxELyRST09UTkFNRS9kb2MvCitpZiB0ZXN0IC16ICIkTk9fSFRNTF9ET0NTIgordGhlbgorCSMgQWRkIHRoZSBhZGEgZG9jdW1lbnRhdGlvbi4KKwljZCAuLi9kb2MvaHRtbCB8fCBleGl0CisKKwljcCAtcCAtciBBZGEqICRCVUlMRC8kUk9PVE5BTUUvZG9jLworCWNwIC1wIC1yIGFkYSAkQlVJTEQvJFJPT1ROQU1FL2RvYy8KK2ZpCisKK2NwIC1wICRTT1VSQ0UvTkVXUyAkQlVJTEQvJFJPT1ROQU1FCisKKyMgY2xlYW51cCBlbXB0eSBkaXJlY3RvcmllcyAoYW4gYXJ0aWZhY3Qgb2YgbmN1cnNlcyBzb3VyY2UgYXJjaGl2ZXMpCisKK3RvdWNoICRCVUlMRC8kUk9PVE5BTUUvTUFOSUZFU1QgCisoIGNkICRCVUlMRC8kUk9PVE5BTUUgJiYgZmluZCAuIC10eXBlIGYgLXByaW50IHwkU09VUkNFL21pc2MvY3NvcnQgPk1BTklGRVNUICkKKworY2QgJEJVSUxEIHx8IGV4aXQgCisKKyMgUmVtb3ZlIGJ1aWxkLWFydGlmYWN0cy4KK2ZpbmQgLiAtbmFtZSBSQ1MgLWV4ZWMgcm0gLXJmIHt9IFw7CitmaW5kICRCVUlMRC8kUk9PVE5BTUUgLXR5cGUgZCAtZXhlYyBybWRpciB7fSBcOyAyPi9kZXYvbnVsbAorZmluZCAkQlVJTEQvJFJPT1ROQU1FIC10eXBlIGQgLWV4ZWMgcm1kaXIge30gXDsgMj4vZGV2L251bGwKK2ZpbmQgJEJVSUxELyRST09UTkFNRSAtdHlwZSBkIC1leGVjIHJtZGlyIHt9IFw7IDI+L2Rldi9udWxsCisKKyMgVGhlcmUgaXMgbm8gbmVlZCBmb3IgdGhpcyBzY3JpcHQgaW4gdGhlIHRhciBmaWxlLgorcm0gLWYgJFJPT1ROQU1FL21ha2UtdGFyLnNoCisKKyMgUmVtb3ZlIGJ1aWxkLWFydGlmYWN0cy4KK2ZpbmQgLiAtbmFtZSAiKi5neiIgLWV4ZWMgcm0gLXJmIHt9IFw7CisKKyMgTWFrZSB0aGUgZmlsZXMgd3JpdGFibGUuLi4KK2NobW9kIC1SIHUrdyAuCisKK3RhciBjZiAtICRST09UTkFNRSB8IGd6aXAgPiRERVNURElSLyRST09UTkFNRS50YXIuZ3oKK2NkICRERVNURElSCisKK3B3ZAorbHMgLWwgJFJPT1ROQU1FLnRhci5negorCisjIHZpOnRzPTQgc3c9NApkaWZmIC0tZ2l0IGEvQWRhOTUvbWstMXN0LmF3ayBiL0FkYTk1L21rLTFzdC5hd2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzcyNjU0OQotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L21rLTFzdC5hd2sKQEAgLTAsMCArMSw5MCBAQAorIyAkSWQ6IG1rLTFzdC5hd2ssdiAxLjQgMjAxMS8wMi8yMiAwOTo0MDowMSB0b20gRXhwICQKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDIwMTAsMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAgIworIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCAjCisjIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gICMKKyMgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgICAgIworIyB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byAjCisjIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgICMKKyMgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluICMKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SICMKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksICAgIworIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCAgICAjCisjIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAgICAgICMKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgICAgIworIyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSICAgICAgICAjCisjIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgICAjCisjIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsICMKKyMgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAgICAgICAgIworIyBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5CisjCisjIEdlbmVyYXRlIGNvbXBpbGUtcnVsZXMgZm9yIHRoZSBBZGE5NSBtb2R1bGVzIHRoYXQgd2UgYXJlIHVzaW5nIGluIGxpYnJhcmllcworIyBvciBwcm9ncmFtcy4gIFRoaXMgc2NyaXB0IGlzIHVzZWQgZm9yIG9sZGVyIHZlcnNpb25zIG9mIGduYXRtYWtlLCB3aGljaCBkbworIyBub3QgYnVpbGQgbGlicmFyaWVzIHJlbGlhYmx5LCBlLmcuLCBnbmF0bWFrZSAzLjE1LgorIworIyBGaWVsZHMgaW4gc3JjL21vZHVsZXM6CisjCSQxID0gbW9kdWxlIG5hbWUKKyMJJDIgPSBkaXJlY3Rvcnkgd2hlcmUgc3BlYy1kZXBlbmRlbmN5ICIuYWRzIiBpcyBmb3VuZAorIwkkMyA9IGRpcmVjdG9yeSB3aGVyZSBib2R5LWRlcGVuZGVuY3kgIi5hZGIiIGlzIGZvdW5kCisjCSQ0ID0gdW5pdCB0byBjb21waWxlIChzcGVjIG9yIGJvZHkpCisjCitCRUdJTgl7CisJCXByaW50ZiAiXG4iOworCQlwcmludGYgIiMgZ2VuZXJhdGVkIGJ5IEFkYTk1L21rLTFzdC5hd2tcbiI7CisJfQorCS9eWyNdLyB7CisJCW5leHQKKwl9CisJL14kLyB7CisJCW5leHQKKwl9CisJeworCQlwcmludGYgIlxuIjsKKwkJcHJpbnRmICIlcy5vIDoiLCAkMTsKKworCQlpZiAoICQyID09ICJub25lIiApIHsKKwkJCXByZV9zcGVjID0gIiI7CisJCX0gZWxzZSBpZiAoICQyID09ICIuIiApIHsKKwkJCXByZV9zcGVjID0gIiI7CisJCQlwcmludGYgIiBcXFxuXHRcdCVzLmFkcyIsICQxOworCQl9IGVsc2UgeworCQkJcHJlX3NwZWMgPSBzcHJpbnRmKCIlcy8iLCAkMik7CisJCQlwcmludGYgIiBcXFxuXHRcdCVzJXMuYWRzIiwgcHJlX3NwZWMsICQxOworCQl9CisKKwkJaWYgKCAkMyA9PSAibm9uZSIgKSB7CisJCQlwcmVfYm9keSA9ICIiOworCQl9IGVsc2UgaWYgKCAkMyA9PSAiLiIgKSB7CisJCQlwcmVfYm9keSA9ICIiOworCQkJcHJpbnRmICIgXFxcblx0XHQlcy5hZGIiLCAkMTsKKwkJfSBlbHNlIHsKKwkJCXByZV9ib2R5ID0gc3ByaW50ZigiJXMvIiwgJDMpOworCQkJcHJpbnRmICIgXFxcblx0XHQlcyVzLmFkYiIsIHByZV9ib2R5LCAkMTsKKwkJCXByaW50ZiAiIFxcXG5cdFx0JChCQVNFREVQUykiOworCQl9CisKKwkJaWYgKCAkNCA9PSAic3BlYyIgKSB7CisJCQlzdWZmaXggPSAiYWRzIjsKKwkJCXByZWZpeCA9IHByZV9zcGVjOworCQl9IGVsc2UgeworCQkJc3VmZml4ID0gImFkYiI7CisJCQlwcmVmaXggPSBwcmVfYm9keTsKKwkJfQorCisJCXByaW50ZiAgIlxuIjsKKwkJcHJpbnRmICJcdCQoQURBKSAkKEFEQUZMQUdTKSAtYyAtbyAkQCAlcyVzLiVzXG4iLCBwcmVmaXgsICQxLCBzdWZmaXgKKwl9CitFTkQJeworCQlwcmludCAgIiIKKwl9CmRpZmYgLS1naXQgYS9BZGE5NS9wYWNrYWdlL0FkYUN1cnNlcy1kb2Muc3BlYyBiL0FkYTk1L3BhY2thZ2UvQWRhQ3Vyc2VzLWRvYy5zcGVjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyYzk2YWMKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9wYWNrYWdlL0FkYUN1cnNlcy1kb2Muc3BlYwpAQCAtMCwwICsxLDUwIEBACitTdW1tYXJ5OiBBZGFDdXJzZXMgLSBBZGE5NSBiaW5kaW5nIGRvY3VtZW50YXRpb24gZm9yIG5jdXJzZXMKKyVkZWZpbmUgQXBwUHJvZ3JhbSBBZGFDdXJzZXMKKyVkZWZpbmUgQXBwVmVyc2lvbiBNQUpPUi5NSU5PUgorJWRlZmluZSBBcHBSZWxlYXNlIFlZWVlNTURECislZGVmaW5lIEFwcFBhY2thZ2UgJXtBcHBQcm9ncmFtfS1kb2MKKyMgJElkOiBBZGFDdXJzZXMtZG9jLnNwZWMsdiAxLjMgMjAxNS8wNC8yNiAyMzozOTozMSB0b20gRXhwICQKK05hbWU6ICV7QXBwUGFja2FnZX0KK1ZlcnNpb246ICV7QXBwVmVyc2lvbn0KK1JlbGVhc2U6ICV7QXBwUmVsZWFzZX0KK0xpY2Vuc2U6IE1JVAorR3JvdXA6IEFwcGxpY2F0aW9ucy9EZXZlbG9wbWVudAorVVJMOiBmdHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC8le0FwcFByb2dyYW19CitTb3VyY2UwOiAle0FwcFByb2dyYW19LSV7QXBwUmVsZWFzZX0udGd6CitQYWNrYWdlcjogVGhvbWFzIERpY2tleSA8ZGlja2V5QGludmlzaWJsZS1pc2xhbmQubmV0PgorCislZGVzY3JpcHRpb24KK1RoaXMgaXMgdGhlIEFkYTk1IGJpbmRpbmcgZG9jdW1lbnRhdGlvbiBmcm9tIHRoZSBuY3Vyc2VzIE1BSk9SLk1JTk9SCitkaXN0cmlidXRpb24sIGZvciBwYXRjaC1kYXRlIFlZWVlNTURELgorJXByZXAKKworJWRlZmluZSBkZWJ1Z19wYWNrYWdlICV7bmlsfQorCislc2V0dXAgLXEgLW4gJXtBcHBQcm9ncmFtfS0le0FwcFJlbGVhc2V9CisKKyVidWlsZAorCitJTlNUQUxMX1BST0dSQU09JyR7SU5TVEFMTH0nIFwKKwkuL2NvbmZpZ3VyZSBcCisJCS0tdGFyZ2V0ICV7X3RhcmdldF9wbGF0Zm9ybX0gXAorCQktLXByZWZpeD0le19wcmVmaXh9IFwKKwkJLS1kYXRhZGlyPSV7X2RhdGFkaXJ9IFwKKwkJLS13aXRoLWFkYS1zaGFyZWRsaWIKKworJWluc3RhbGwKK1sgIiRSUE1fQlVJTERfUk9PVCIgIT0gIi8iIF0gJiYgcm0gLXJmICRSUE1fQlVJTERfUk9PVAorCisoY2QgZG9jICYmIG1ha2UgaW5zdGFsbC5odG1sIERFU1RESVI9JFJQTV9CVUlMRF9ST09UICkKKworJWNsZWFuCitbICIkUlBNX0JVSUxEX1JPT1QiICE9ICIvIiBdICYmIHJtIC1yZiAkUlBNX0JVSUxEX1JPT1QKKworJWZpbGVzCislZGVmYXR0cigtLHJvb3Qscm9vdCkKKyV7X2RhdGFkaXJ9L2RvYy9BZGFDdXJzZXMKKworJWNoYW5nZWxvZworIyBlYWNoIHBhdGNoIHNob3VsZCBhZGQgaXRzIENoYW5nZUxvZyBlbnRyaWVzIGhlcmUKKworKiBTYXQgTWFyIDI2IDIwMTEgVGhvbWFzIERpY2tleQorLSBpbml0aWFsIHZlcnNpb24KZGlmZiAtLWdpdCBhL0FkYTk1L3BhY2thZ2UvQWRhQ3Vyc2VzLnNwZWMgYi9BZGE5NS9wYWNrYWdlL0FkYUN1cnNlcy5zcGVjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlMjM1NGMKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9wYWNrYWdlL0FkYUN1cnNlcy5zcGVjCkBAIC0wLDAgKzEsODQgQEAKK1N1bW1hcnk6IEFkYUN1cnNlcyAtIEFkYTk1IGJpbmRpbmcgZm9yIG5jdXJzZXMKKyVkZWZpbmUgQXBwUHJvZ3JhbSBBZGFDdXJzZXMKKyVkZWZpbmUgQXBwVmVyc2lvbiBNQUpPUi5NSU5PUgorJWRlZmluZSBBcHBSZWxlYXNlIFlZWVlNTURECisjICRJZDogQWRhQ3Vyc2VzLnNwZWMsdiAxLjE1IDIwMTUvMDQvMjYgMjM6NTU6NTUgdG9tIEV4cCAkCitOYW1lOiAle0FwcFByb2dyYW19CitWZXJzaW9uOiAle0FwcFZlcnNpb259CitSZWxlYXNlOiAle0FwcFJlbGVhc2V9CitMaWNlbnNlOiBNSVQKK0dyb3VwOiBBcHBsaWNhdGlvbnMvRGV2ZWxvcG1lbnQKK1VSTDogZnRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvJXtBcHBQcm9ncmFtfQorU291cmNlMDogJXtBcHBQcm9ncmFtfS0le0FwcFJlbGVhc2V9LnRnegorUGFja2FnZXI6IFRob21hcyBEaWNrZXkgPGRpY2tleUBpbnZpc2libGUtaXNsYW5kLm5ldD4KKworJWRlc2NyaXB0aW9uCitUaGlzIGlzIHRoZSBBZGE5NSBiaW5kaW5nIGZyb20gdGhlIG5jdXJzZXMgTUFKT1IuTUlOT1IgZGlzdHJpYnV0aW9uLCBmb3IKK3BhdGNoLWRhdGUgWVlZWU1NREQuCisKK0luIGFkZGl0aW9uIHRvIGEgbGlicmFyeSwgdGhpcyBwYWNrYWdlIGluc3RhbGxzIHNhbXBsZSBwcm9ncmFtcyBpbgorImJpbi9BZGFDdXJzZXMiIHRvIGF2b2lkIGNvbmZsaWN0IHdpdGggb3RoZXIgcGFja2FnZXMuCislcHJlcAorCislZGVmaW5lIGRlYnVnX3BhY2thZ2UgJXtuaWx9CisKKyMgaHR0cDovL2ZlZG9yYXByb2plY3Qub3JnL3dpa2kvRVBFTDpQYWNrYWdpbmdfQXV0b3Byb3ZpZGVzX2FuZF9SZXF1aXJlc19GaWx0ZXJpbmcKKyVmaWx0ZXJfZnJvbV9yZXF1aXJlcyAvbGliQWRhQ3Vyc2VzLnNvLjEvZAorJWZpbHRlcl9zZXR1cAorCislc2V0dXAgLXEgLW4gJXtBcHBQcm9ncmFtfS0le0FwcFJlbGVhc2V9CisKKyVidWlsZAorCislZGVmaW5lIGFkYV9saWJkaXIgJXtfcHJlZml4fS9saWIvYWRhL2FkYWxpYgorCitJTlNUQUxMX1BST0dSQU09JyR7SU5TVEFMTH0nIFwKKwkuL2NvbmZpZ3VyZSBcCisJCS0tdGFyZ2V0ICV7X3RhcmdldF9wbGF0Zm9ybX0gXAorCQktLXByZWZpeD0le19wcmVmaXh9IFwKKwkJLS1iaW5kaXI9JXtfYmluZGlyfSBcCisJCS0tbGliZGlyPSV7X2xpYmRpcn0gXAorCQktLW1hbmRpcj0le19tYW5kaXJ9IFwKKwkJLS1kYXRhZGlyPSV7X2RhdGFkaXJ9IFwKKwkJLS1kaXNhYmxlLXJwYXRoLWxpbmsgXAorCQktLXdpdGgtc2hhcmVkIFwKKwkJLS13aXRoLWFkYS1zaGFyZWRsaWIKKworbWFrZQorCislaW5zdGFsbAorWyAiJFJQTV9CVUlMRF9ST09UIiAhPSAiLyIgXSAmJiBybSAtcmYgJFJQTV9CVUlMRF9ST09UCisKK21ha2UgaW5zdGFsbCAgICAgICAgICAgICAgIERFU1RESVI9JFJQTV9CVUlMRF9ST09UCisKKyggY2Qgc2FtcGxlcyAmJgorICBtYWtlIGluc3RhbGwuZXhhbXBsZXMgXAorICAJREVTVERJUj0kUlBNX0JVSUxEX1JPT1QgXAorCUJJTkRJUj0kUlBNX0JVSUxEX1JPT1Qle19iaW5kaXJ9LyV7QXBwUHJvZ3JhbX0KKykKKworJWNsZWFuCitbICIkUlBNX0JVSUxEX1JPT1QiICE9ICIvIiBdICYmIHJtIC1yZiAkUlBNX0JVSUxEX1JPT1QKKworJWZpbGVzCislZGVmYXR0cigtLHJvb3Qscm9vdCkKKyV7X2JpbmRpcn0vYWRhY3Vyc2VzKi1jb25maWcKKyV7X2JpbmRpcn0vJXtBcHBQcm9ncmFtfS8qCisle19saWJkaXJ9L2xpYkFkYUN1cnNlcy4qCisle2FkYV9saWJkaXJ9L2xpYkFkYUN1cnNlcy4qCisle2FkYV9saWJkaXJ9L3Rlcm1pbmFsX2ludGVyZmFjZSoKKyV7X21hbmRpcn0vbWFuMS9hZGFjdXJzZXMqLWNvbmZpZy4xKgorJXtfZGF0YWRpcn0vJXtBcHBQcm9ncmFtfS8qCisle19kYXRhZGlyfS9hZGEvYWRhaW5jbHVkZS90ZXJtaW5hbF9pbnRlcmZhY2UqCisKKyVjaGFuZ2Vsb2cKKyMgZWFjaCBwYXRjaCBzaG91bGQgYWRkIGl0cyBDaGFuZ2VMb2cgZW50cmllcyBoZXJlCisKKyogVGh1IE1hciAzMSAyMDExIFRob21hcyBEaWNrZXkKKy0gdXNlIC0td2l0aC1zaGFyZWQgb3B0aW9uIGZvciBjb25zaXN0ZW5jeSB3aXRoIC0td2l0aC1hZGEtc2hhcmVsaWIKKy0gZW5zdXJlIHRoYXQgTVlfREFUQURJUiBpcyBzZXQgd2hlbiBpbnN0YWxsaW5nIGV4YW1wbGVzCistIGFkZCBhZGFfbGliZGlyIHN5bWJvbCB0byBoYW5kbGUgc3BlY2lhbCBjYXNlIHdoZXJlIGxpYmRpciBpcyAvdXNyL2xpYjY0CistIHVzZSAtLWRpc2FibGUtcnBhdGgtbGluayB0byBsaW5rIHNhbXBsZSBwcm9ncmFtcyB3aXRob3V0IHJwYXRoCisKKyogRnJpIE1hciAyNSAyMDExIFRob21hcyBEaWNrZXkKKy0gaW5pdGlhbCB2ZXJzaW9uCmRpZmYgLS1naXQgYS9BZGE5NS9wYWNrYWdlL2RlYmlhbi9jb21wYXQgYi9BZGE5NS9wYWNrYWdlL2RlYmlhbi9jb21wYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VkNmZmOAotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L3BhY2thZ2UvZGViaWFuL2NvbXBhdApAQCAtMCwwICsxIEBACis1CmRpZmYgLS1naXQgYS9BZGE5NS9wYWNrYWdlL2RlYmlhbi9jb250cm9sIGIvQWRhOTUvcGFja2FnZS9kZWJpYW4vY29udHJvbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGFmOTcwCi0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvcGFja2FnZS9kZWJpYW4vY29udHJvbApAQCAtMCwwICsxLDE3IEBACitTb3VyY2U6IGFkYWN1cnNlcworTWFpbnRhaW5lcjogVGhvbWFzIEUuIERpY2tleSA8ZGlja2V5QGludmlzaWJsZS1pc2xhbmQubmV0PgorU2VjdGlvbjogbWlzYworUHJpb3JpdHk6IG9wdGlvbmFsCitTdGFuZGFyZHMtVmVyc2lvbjogMy44LjQKK0J1aWxkLURlcGVuZHM6IGRlYmhlbHBlciAoPj0gNSkKK0hvbWVwYWdlOiBodHRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvYWRhY3Vyc2VzLworCitQYWNrYWdlOiBhZGFjdXJzZXMKK0FyY2hpdGVjdHVyZTogYW55CitEZXBlbmRzOiAke3NobGliczpEZXBlbmRzfSwgJHttaXNjOkRlcGVuZHN9CitEZXNjcmlwdGlvbjogQWRhQ3Vyc2VzIC0gQWRhOTUgYmluZGluZyBmb3IgbmN1cnNlcworIFRoaXMgcGFja2FnZSBpbnN0YWxscyBhcyAiYWRhY3Vyc2VzIiB0byBhdm9pZCBjb25mbGljdCB3aXRoIG90aGVyIHBhY2thZ2VzLgorIFRoaXMgaXMgdGhlIEFkYTk1IGJpbmRpbmcgZnJvbSB0aGUgbmN1cnNlcyBkaXN0cmlidXRpb24uCisgLgorIEluIGFkZGl0aW9uIHRvIGEgbGlicmFyeSwgdGhpcyBwYWNrYWdlIGluc3RhbGxzIHNhbXBsZSBwcm9ncmFtcyBpbgorICJiaW4vQWRhQ3Vyc2VzIiB0byBhdm9pZCBjb25mbGljdCB3aXRoIG90aGVyIHBhY2thZ2VzLgpkaWZmIC0tZ2l0IGEvQWRhOTUvcGFja2FnZS9kZWJpYW4vY29weXJpZ2h0IGIvQWRhOTUvcGFja2FnZS9kZWJpYW4vY29weXJpZ2h0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyNDk1MGEKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9wYWNrYWdlL2RlYmlhbi9jb3B5cmlnaHQKQEAgLTAsMCArMSw3OCBAQAorVXBzdHJlYW0gc291cmNlIGh0dHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC9uY3Vyc2VzL25jdXJzZXMtZXhhbXBsZXMuaHRtbAorCitDdXJyZW50IG5jdXJzZXMgbWFpbnRhaW5lcjogVGhvbWFzIERpY2tleSA8ZGlja2V5QGludmlzaWJsZS1pc2xhbmQubmV0PgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitGaWxlczogKgorQ29weXJpZ2h0OiAxOTk4LTIwMTQsMjAxNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK0xpY2VuY2U6IFgxMQorCitGaWxlczogYWNsb2NhbC5tNCBwYWNrYWdlCitDb3B5cmlnaHQ6IDIwMTAtMjAxNCwyMDE1IGJ5IFRob21hcyBFLiBEaWNrZXkKK0xpY2VuY2U6IFgxMQorCisgICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAgICBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgICAgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICAgIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAgICBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAgICBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAgICBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKKyAgICBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTCisgICAgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICAgIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KKyAgICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sCisgICAgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SCisgICAgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SCisgICAgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisKKyAgICBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUKKyAgICBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKyAgICBhdXRob3JpemF0aW9uLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitGaWxlczogaW5zdGFsbC1zaAorQ29weXJpZ2h0OiAgMTk5NCBYIENvbnNvcnRpdW0KK0xpY2VuY2U6IFgxMQorCisgICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICAgIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0bworICAgIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlCisgICAgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yCisgICAgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAgICBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAgICBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgICAgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgICAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICAgIFggQ09OU09SVElVTSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAgICBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUMtCisgICAgVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKworICAgIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lIG9mIHRoZSBYIENvbnNvcnRpdW0gc2hhbGwgbm90CisgICAgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWwtCisgICAgaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBhdXRob3JpemF0aW9uIGZyb20gdGhlIFggQ29uc29yLQorICAgIHRpdW0uCisKKyAgICBGU0YgY2hhbmdlcyB0byB0aGlzIGZpbGUgYXJlIGluIHRoZSBwdWJsaWMgZG9tYWluLgorCisgICAgQ2FsbGluZyB0aGlzIHNjcmlwdCBpbnN0YWxsLXNoIGlzIHByZWZlcnJlZCBvdmVyIGluc3RhbGwuc2gsIHRvIHByZXZlbnQKKyAgICBgbWFrZScgaW1wbGljaXQgcnVsZXMgZnJvbSBjcmVhdGluZyBhIGZpbGUgY2FsbGVkIGluc3RhbGwgZnJvbSBpdAorICAgIHdoZW4gdGhlcmUgaXMgbm8gTWFrZWZpbGUuCisKKyAgICBUaGlzIHNjcmlwdCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIEJTRCBpbnN0YWxsIHNjcmlwdCwgYnV0IHdhcyB3cml0dGVuCisgICAgZnJvbSBzY3JhdGNoLiAgSXQgY2FuIG9ubHkgaW5zdGFsbCBvbmUgZmlsZSBhdCBhIHRpbWUsIGEgcmVzdHJpY3Rpb24KKyAgICBzaGFyZWQgd2l0aCBtYW55IE9TJ3MgaW5zdGFsbCBwcm9ncmFtcy4KKworT24gRGViaWFuIHN5c3RlbXMsIHRoZSBjb21wbGV0ZSB0ZXh0IG9mIHRoZSBHTlUgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgY2FuIGJlIGZvdW5kIGluICcvdXNyL3NoYXJlL2NvbW1vbi1saWNlbnNlcy9HUEwtMicKKworLS0gdmlsZTogdHh0bW9kZSBmaWxlLWVuY29kaW5nPXV0Zi04CmRpZmYgLS1naXQgYS9BZGE5NS9wYWNrYWdlL2RlYmlhbi9kb2NzIGIvQWRhOTUvcGFja2FnZS9kZWJpYW4vZG9jcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODQ1NTY2Ci0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvcGFja2FnZS9kZWJpYW4vZG9jcwpAQCAtMCwwICsxIEBACitSRUFETUUKZGlmZiAtLWdpdCBhL0FkYTk1L3BhY2thZ2UvZGViaWFuL3J1bGVzIGIvQWRhOTUvcGFja2FnZS9kZWJpYW4vcnVsZXMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTgwNWY4YgotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L3BhY2thZ2UvZGViaWFuL3J1bGVzCkBAIC0wLDAgKzEsOTkgQEAKKyMhL3Vzci9iaW4vbWFrZSAtZgorIyBNQWRlIHdpdGggdGhlIGFpZCBvZiBkaF9tYWtlLCBieSBDcmFpZyBTbWFsbAorIyBTYW1wbGUgZGViaWFuL3J1bGVzIHRoYXQgdXNlcyBkZWJoZWxwZXIuIEdOVSBjb3B5cmlnaHQgMTk5NyBieSBKb2V5IEhlc3MuCisjIFNvbWUgbGluZXMgdGFrZW4gZnJvbSBkZWJtYWtlLCBieSBDcmlzdG9waCBMYW1ldGVyLgorCisjIFVuY29tbWVudCB0aGlzIHRvIHR1cm4gb24gdmVyYm9zZSBtb2RlLgorI2V4cG9ydCBESF9WRVJCT1NFPTEKKworIyBUaGVzZSBhcmUgdXNlZCBmb3IgY3Jvc3MtY29tcGlsaW5nIGFuZCBmb3Igc2F2aW5nIHRoZSBjb25maWd1cmUgc2NyaXB0CisjIGZyb20gaGF2aW5nIHRvIGd1ZXNzIG91ciBwbGF0Zm9ybSAoc2luY2Ugd2Uga25vdyBpdCBhbHJlYWR5KQorREVCX0hPU1RfR05VX1RZUEUgICA/PSAkKHNoZWxsIGRwa2ctYXJjaGl0ZWN0dXJlIC1xREVCX0hPU1RfR05VX1RZUEUpCitERUJfQlVJTERfR05VX1RZUEUgID89ICQoc2hlbGwgZHBrZy1hcmNoaXRlY3R1cmUgLXFERUJfQlVJTERfR05VX1RZUEUpCisKK1RBUkdFVF9ESVIgPSAkKENVUkRJUikvZGViaWFuL2FkYWN1cnNlcworU0FNUExFX0RJUiA9ICQoVEFSR0VUX0RJUikvdXNyL2Jpbi9BZGFDdXJzZXMKKworQ0ZMQUdTID0KKworaWZuZXEgKCwkKGZpbmRzdHJpbmcgbm9vcHQsJChERUJfQlVJTERfT1BUSU9OUykpKQorICAgICAgICBDRkxBR1MgKz0gLU8wCitlbHNlCisgICAgICAgIENGTEFHUyArPSAtTzIKK2VuZGlmCitpZmVxICgsJChmaW5kc3RyaW5nIG5vc3RyaXAsJChERUJfQlVJTERfT1BUSU9OUykpKQorICAgICAgICBJTlNUQUxMX1BST0dSQU0gKz0gLXMKK2VuZGlmCisKKworY29uZmlndXJlOiBjb25maWd1cmUtc3RhbXAKK2NvbmZpZ3VyZS1zdGFtcDoKKwlkaF90ZXN0ZGlyCisKKwlDRkxBR1M9IiQoQ0ZMQUdTKSIgLi9jb25maWd1cmUgXAorCQktLWhvc3Q9JChERUJfSE9TVF9HTlVfVFlQRSkgXAorCQktLWJ1aWxkPSQoREVCX0JVSUxEX0dOVV9UWVBFKSBcCisJCS0tcHJlZml4PS91c3IgXAorCQktLWRpc2FibGUtcnBhdGgtbGluayBcCisJCS0td2l0aC1zaGFyZWQgXAorCQktLXdpdGgtYWRhLXNoYXJlZGxpYiBcCisJCS0td2l0aG91dC1wa2ctY29uZmlnCisKKwl0b3VjaCBjb25maWd1cmUtc3RhbXAKKworYnVpbGQ6IGJ1aWxkLXN0YW1wCitidWlsZC1zdGFtcDogY29uZmlndXJlLXN0YW1wCisJZGhfdGVzdGRpcgorCisJJChNQUtFKQorCisJdG91Y2ggYnVpbGQtc3RhbXAKKworY2xlYW46CisJZGhfdGVzdGRpcgorCWRoX3Rlc3Ryb290CisKKwlbICEgLWYgbWFrZWZpbGUgXSB8fCAkKE1BS0UpIGRpc3RjbGVhbgorCisJcm0gLWYgY29uZmlndXJlLXN0YW1wIGJ1aWxkLXN0YW1wIGluc3RhbGwtc3RhbXAKKworCWRoX2NsZWFuCisKK2luc3RhbGw6IGluc3RhbGwtc3RhbXAKK2luc3RhbGwtc3RhbXA6IGJ1aWxkLXN0YW1wCisJZGhfdGVzdGRpcgorCWRoX3Rlc3Ryb290CisJZGhfY2xlYW4gLWsKKwlkaF9pbnN0YWxsZGlycworCisJJChNQUtFKSBpbnN0YWxsIERFU1RESVI9JChUQVJHRVRfRElSKQorCQorCSMgRklYTUU6IGl0IHdvdWxkIGJlIG5pY2UgdG8gbWFrZSB0aGVzZSBpbnRvIHNlcGFyYXRlIHBhY2thZ2VzCisJKCBjZCBzYW1wbGVzICYmICQoTUFLRSkgaW5zdGFsbC5leGFtcGxlcyBERVNURElSPSQoVEFSR0VUX0RJUikgQklORElSPSQoU0FNUExFX0RJUikgKQorCSggY2QgZG9jICYmICQoTUFLRSkgaW5zdGFsbC5odG1sIERFU1RESVI9JChUQVJHRVRfRElSKSApCisKKwl0b3VjaCBpbnN0YWxsLXN0YW1wCisKKyMgQnVpbGQgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGZpbGVzIGhlcmUuCitiaW5hcnktaW5kZXA6IGJ1aWxkIGluc3RhbGwKKyMgTm8gYmluYXJ5LWluZGVwIHRhcmdldC4KKworIyBCdWlsZCBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IGZpbGVzIGhlcmUuCitiaW5hcnktYXJjaDogYnVpbGQgaW5zdGFsbAorCWRoX3Rlc3RkaXIKKwlkaF90ZXN0cm9vdAorCWRoX2luc3RhbGxkb2NzCisJZGhfaW5zdGFsbGV4YW1wbGVzCisJZGhfaW5zdGFsbGNoYW5nZWxvZ3MgTkVXUworCWRoX3N0cmlwCisJZGhfY29tcHJlc3MKKwlkaF9maXhwZXJtcworCWRoX2luc3RhbGxkZWIKKwlkaF9tYWtlc2hsaWJzCisJZGhfc2hsaWJkZXBzCisJZGhfZ2VuY29udHJvbAorCWRoX21kNXN1bXMKKwlkaF9idWlsZGRlYgorCitiaW5hcnk6IGJpbmFyeS1pbmRlcCBiaW5hcnktYXJjaAorLlBIT05ZOiBidWlsZCBjbGVhbiBiaW5hcnktaW5kZXAgYmluYXJ5LWFyY2ggYmluYXJ5IGluc3RhbGwgaW5zdGFsbC1zdGFtcApkaWZmIC0tZ2l0IGEvQWRhOTUvcGFja2FnZS9kZWJpYW4vc291cmNlL2Zvcm1hdCBiL0FkYTk1L3BhY2thZ2UvZGViaWFuL3NvdXJjZS9mb3JtYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODlhZTlkYgotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L3BhY2thZ2UvZGViaWFuL3NvdXJjZS9mb3JtYXQKQEAgLTAsMCArMSBAQAorMy4wIChuYXRpdmUpCmRpZmYgLS1naXQgYS9BZGE5NS9wYWNrYWdlL2RlYmlhbi93YXRjaCBiL0FkYTk1L3BhY2thZ2UvZGViaWFuL3dhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3OTRhZTMKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9wYWNrYWdlL2RlYmlhbi93YXRjaApAQCAtMCwwICsxLDQgQEAKK3ZlcnNpb249MworCitvcHRzPXBhc3NpdmUgZnRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvQWRhQ3Vyc2VzL0FkYUN1cnNlcy0oW1xkLl0rKVwudGd6IFwKKyBkZWJpYW4gIHV1cGRhdGUKZGlmZiAtLWdpdCBhL0FkYTk1L3NhbXBsZXMvTWFrZWZpbGUuaW4gYi9BZGE5NS9zYW1wbGVzL01ha2VmaWxlLmluCmluZGV4IDVlZTc4ZGYuLjViNDAwMjcgMTAwNjQ0Ci0tLSBhL0FkYTk1L3NhbXBsZXMvTWFrZWZpbGUuaW4KKysrIGIvQWRhOTUvc2FtcGxlcy9NYWtlZmlsZS5pbgpAQCAtMSw1ICsxLDUgQEAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNCwyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAjCisjIENvcHlyaWdodCAoYykgMTk5OC0yMDEyLDIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICMKICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIwogIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCiAjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKQEAgLTI4LDE4ICsyOCwyMiBAQAogIwogIyAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CiAjCi0jICAkSWQ6IE1ha2VmaWxlLmluLHYgMS4zNCAyMDA2LzEyLzE3IDE2OjQ1OjAyIHRvbSBFeHAgJAorIyAgJElkOiBNYWtlZmlsZS5pbix2IDEuNDkgMjAxNS8wOC8wNSAyMzoxNTo0MSB0b20gRXhwICQKICMKIC5TVUZGSVhFUzoKIAotU0hFTEwJCT0gL2Jpbi9zaAorU0hFTEwJCT0gQFNIRUxMQAorVlBBVEgJCT0gQHNyY2RpckAKIFRISVMJCT0gTWFrZWZpbGUKIAoteAkJPSBAUFJPR19FWFRACit4CQk9IEBFWEVFWFRACiAKIHNyY2RpcgkJPSBAc3JjZGlyQAogcHJlZml4CQk9IEBwcmVmaXhACiBleGVjX3ByZWZpeAk9IEBleGVjX3ByZWZpeEAKK2JpbmRpcgkJPSBAYmluZGlyQAorZGF0YXJvb3RkaXIJPSBAZGF0YXJvb3RkaXJACitkYXRhZGlyCQk9IEBkYXRhZGlyQAogbGliZGlyCQk9IEBsaWJkaXJACiBpbmNsdWRlZGlyCT0gQGluY2x1ZGVkaXJACiAKQEAgLTczLDYgKzc3LDEzIEBACiAKIFJBTkxJQgkJPSBAUkFOTElCQAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK0JJTkRJUgkJPSAkKERFU1RESVIpJChiaW5kaXIpCitEQVRBRElSCQk9ICQoREVTVERJUikkKGRhdGFkaXIpCitMSUJESVIJCT0gJChERVNURElSKSQobGliZGlyKQorCitNWV9EQVRBRElSCT0gJChEQVRBRElSKS9BZGFDdXJzZXMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIGFkYV9zcmNkaXI9Li4vc3JjCiAKIExEX0ZMQUdTICAgICA9IEBMRF9NT0RFTEAgJChMT0NBTF9MSUJTKSBATERGTEFHU0AgQExJQlNAIEBMT0NBTF9MREZMQUdTMkAgJChMREZMQUdTKQpAQCAtODcsMzMgKzk4LDExIEBACiBBQkFTRSAgICAgICAgPSAkKEFMSUIpLWN1cnNlcwogCiBDQVJHUyAgICAgICAgPS1jYXJncyAkKEFEQUZMQUdTKQotTEFSR1MgICAgICAgID0tbGFyZ3MgQFRFU1RfQVJHMkAgJChMRF9GTEFHUykgLWxBZGFDdXJzZXMKLSAKLVBST0dTICAgICAgICA9IHRvdXIgcmFpbiBuY3Vyc2VzIAorTEFSR1MgICAgICAgID0tbGFyZ3MgLUwuLi9saWIgLWxBZGFDdXJzZXMgQFRFU1RfQVJHMkAgJChMRF9GTEFHUykgQFRFU1RfTElCUzJACiAKLVRPVVJfT0JKUyAgICA9CXRvdXIubyBzYW1wbGUubyBzYW1wbGUtY3Vyc2VzX2RlbW8ubyBzYW1wbGUtZXhwbGFuYXRpb24ubyAJXAotCQlzYW1wbGUtZm9ybV9kZW1vLm8gc2FtcGxlLWZ1bmN0aW9uX2tleV9zZXR0aW5nLm8gCQlcCi0JCXNhbXBsZS1oZWFkZXJfaGFuZGxlci5vIHNhbXBsZS1oZWxwZXJzLm8gCQkJXAotCQlzYW1wbGUta2V5Ym9hcmRfaGFuZGxlci5vIHNhbXBsZS1tYW5pZmVzdC5vIHNhbXBsZS1tZW51X2RlbW8ubwlcCi0JCXNhbXBsZS1tZW51X2RlbW8tYXV4Lm8gc2FtcGxlLXRleHRfaW9fZGVtby5vCQkJXAotCQlzYW1wbGUtY3Vyc2VzX2RlbW8tYXR0cmlidXRlcy5vIHNhbXBsZS1jdXJzZXNfZGVtby1tb3VzZS5vCVwKLQkJc2FtcGxlLWZvcm1fZGVtby1hdXgubyBzYW1wbGUtbXlfZmllbGRfdHlwZS5vCitQUk9HUyAgICAgICAgPSB0b3VyJHggbmN1cnNlcyR4IEBVU0VfR05BVF9TSUdJTlRAIHJhaW4keCAKIAotUkFJTl9PQkpTICAgID0JcmFpbi5vIHN0YXR1cy5vCi0KLU5DVVJTRVNfT0JKUyA9IG5jdXJzZXMubyAgICAgICAgCW5jdXJzZXMyLWdldGNoX3Rlc3QubyBcCi0JbmN1cnNlczItYWNzX2FuZF9zY3JvbGwubyAgICAgICBuY3Vyc2VzMi1tLm8gXAotCW5jdXJzZXMyLWFjc19kaXNwbGF5Lm8gICAgICAgICAgbmN1cnNlczItbWVudV90ZXN0Lm8gXAotCW5jdXJzZXMyLWF0dHJfdGVzdC5vICAgICAgICAgICAgbmN1cnNlczItb3ZlcmxhcF90ZXN0Lm8gXAotCW5jdXJzZXMyLWNvbG9yX2VkaXQubyAgICAgICAgICAgbmN1cnNlczItc2xrX3Rlc3QubyBcCi0JbmN1cnNlczItY29sb3JfdGVzdC5vICAgICAgICAgICBuY3Vyc2VzMi10ZXN0X3Nncl9hdHRyaWJ1dGVzLm8gXAotCW5jdXJzZXMyLWRlbW9fZm9ybXMubyAgICAgICAgICAgbmN1cnNlczItdHJhY2Vfc2V0Lm8gXAotCW5jdXJzZXMyLWRlbW9fcGFkLm8gICAgICAgICAgICAgbmN1cnNlczItdXRpbC5vIFwKLQluY3Vyc2VzMi1kZW1vX3BhbmVscy5vICAgICAgICAgIG5jdXJzZXMyLm8gXAotCW5jdXJzZXMyLWZsdXNoaW5wX3Rlc3QubwotCi0KLWFsbCA6OiAgdG91ciR4IHJhaW4keCBuY3Vyc2VzJHgKK2FsbCA6OiAgJChQUk9HUykKIAlAZWNobyBtYWRlICRACiAKIHNvdXJjZXMgOgpAQCAtMTI4LDE1ICsxMTcsMjggQEAKIHVuaW5zdGFsbC5saWJzIDo6CiAJQGVjaG8gbWFkZSAkQAogCitpbnN0YWxsLmV4YW1wbGVzIDo6ICQoQklORElSKSAkKFBST0dTKQorCSQoSU5TVEFMTCkgJChQUk9HUykgJChCSU5ESVIpCisKK2luc3RhbGwuZXhhbXBsZXMgOjogJChNWV9EQVRBRElSKQorCSQoSU5TVEFMTF9EQVRBKSBleHBsYWluLnR4dCAkKE1ZX0RBVEFESVIpCisKK3VuaW5zdGFsbC5leGFtcGxlcyA6OgorCS1jZCAkKEJJTkRJUikgJiYgcm0gLWYgJChQUk9HUykKKwktcm1kaXIgJChCSU5ESVIpCisJLXJtIC1mICQoTVlfREFUQURJUikvZXhwbGFpbi50eHQKKwktcm1kaXIgJChNWV9EQVRBRElSKQorCiskKEJJTkRJUikgXAorJChNWV9EQVRBRElSKSA6CisJbWtkaXIgLXAgJEAKKwogbmN1cnNlcyR4IDoKIAkkKEFEQU1BS0UpICQoQURBTUFLRUZMQUdTKSBuY3Vyc2VzICQoQ0FSR1MpICQoTEFSR1MpCiAKLXRvdXIkeCA6CWV4cGxhaW4ubXNnCit0b3VyJHggOgogCSQoQURBTUFLRSkgJChBREFNQUtFRkxBR1MpIHRvdXIgJChDQVJHUykgJChMQVJHUykKIAotZXhwbGFpbi5tc2c6CSQoc3JjZGlyKS9leHBsYWluLnR4dAotCWNwICQoc3JjZGlyKS9leHBsYWluLnR4dCAkQAotCiByYWluJHggOgogCSQoQURBTUFLRSkgJChBREFNQUtFRkxBR1MpIHJhaW4gJChDQVJHUykgJChMQVJHUykKIApAQCAtMTQ1LDcgKzE0Nyw3IEBACiAKIGNsZWFuIDo6IG1vc3RseWNsZWFuCiAJcm0gLWYgKi5vICouYWxpIGJfdCouKiAqLnMgJChQUk9HUykgYS5vdXQgY29yZSBiXypfdGVzdC5jICoueHJbYnNdIFwKLQlleHBsYWluLm1zZyB0cmFjZSBzY3JlZW5kdW1wIAorCXRyYWNlIHNjcmVlbmR1bXAgYn4qLmFkW2JzXQogCiBkaXN0Y2xlYW4gOjogY2xlYW4KIAlybSAtZiBNYWtlZmlsZQpkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9leHBsYWluLnR4dCBiL0FkYTk1L3NhbXBsZXMvZXhwbGFpbi50eHQKaW5kZXggNTcwZjYxNy4uYmUyY2JhMSAxMDA2NDQKLS0tIGEvQWRhOTUvc2FtcGxlcy9leHBsYWluLnR4dAorKysgYi9BZGE5NS9zYW1wbGVzL2V4cGxhaW4udHh0CkBAIC01NCwxMyArNTQsMTMgQEAKICNIRUxQCiAjSEVMUEtFWVMKIFlvdSBtYXkgc2Nyb2xsIHdpdGggdGhlIEN1cnNvciBVcC9Eb3duIEtleXMuCi1Zb3UgbWF5IGxlYXZlIHRoZSBoZWxwIHdpdGggdGhlIEZ1bmN0aW9uIEtleSBsYWJlbGxlZCAnUXVpdCcuCitZb3UgbWF5IGxlYXZlIHRoZSBoZWxwIHdpdGggdGhlIEZ1bmN0aW9uIEtleSBsYWJlbGVkICdRdWl0Jy4KICNJTkhFTFAKIFlvdSBhcmUgYWxyZWFkeSBpbiB0aGUgaGVscCBzeXN0ZW0uCi1Zb3UgbWF5IGxlYXZlIHRoZSBoZWxwIHdpdGggdGhlIEZ1bmN0aW9uIEtleSBsYWJlbGxlZCAnUXVpdCcuCitZb3UgbWF5IGxlYXZlIHRoZSBoZWxwIHdpdGggdGhlIEZ1bmN0aW9uIEtleSBsYWJlbGVkICdRdWl0Jy4KICNNQUlOCiBUaGlzIGlzIHRoZSBtYWluIG1lbnUgb2YgdGhlIHNhbXBsZSBwcm9ncmFtIGZvciB0aGUgbmN1cnNlcyBBZGE5NQotYmluZGluZy4gVGhlIG1haW4gaW50ZW50aW9uIG9mIHRoZSBkZW1vIGlzIG5vdCB0byBkZW1vbnN0YXRlIG9yCitiaW5kaW5nLiBUaGUgbWFpbiBpbnRlbnRpb24gb2YgdGhlIGRlbW8gaXMgbm90IHRvIGRlbW9uc3RyYXRlIG9yCiB0ZXN0IGFsbCB0aGUgZmVhdHVyZXMgb2YgbmN1cnNlcyBhbmQgaXQncyBzdWJzeXN0ZW1zLCBidXQgdG8gcHJvdmlkZQogdG8geW91IHNvbWUgc2FtcGxlIGNvZGUgaG93IHRvIHVzZSB0aGUgYmluZGluZyB3aXRoIEFkYTk1LiAKIApAQCAtODYsMjMgKzg2LDIzIEBACiB0aGUgaXRlbSBuYW1lIGFuZCB0aGUgZGVzY3JpcHRpb24uCiAjTUVOVTAxCiBUaGlzIGlzIGEgZGVtbyBvZiB0aGUgc29tZSBvZiB0aGUgbWVudSBsYXlvdXQgb3B0aW9ucy4gT25lIG9mIHRoZW0KLWlzIHRoZSBzcGFjaW5nIGZ1bmN0aW9uYWxpdHkuIEp1c3QgcHJlc3MgdGhlIEtleSBsYWJlbGxlZCAiRmxpcCIgdG8gCitpcyB0aGUgc3BhY2luZyBmdW5jdGlvbmFsaXR5LiBKdXN0IHByZXNzIHRoZSBLZXkgbGFiZWxlZCAiRmxpcCIgdG8gCiBmbGlwIGJldHdlZW4gdGhlIG5vbi1zcGFjZWQgYW5kIGEgc3BhY2VkIHZlcnNpb24gb2YgdGhlIG1lbnUuIFBsZWFzZQogbm90ZSB0aGF0IHRoaXMgZnVuY3Rpb25hbGl0eSBpcyB1bmlxdWUgZm9yIG5jdXJzZXMgYW5kIGlzIG5vdCBmb3VuZCAKIGluIHRoZSBTVnI0IG1lbnUgaW1wbGVtZW50YXRpb24uIAogCi1UaGlzIGlzIGEgbWVudSB0aGF0IHNvbWV0aW1lcyBkb2Vzbid0IGZpdCBpbnRvIGl0J3Mgd2luZG93IGFuZCAKK1RoaXMgaXMgYSBtZW51IHRoYXQgc29tZXRpbWVzIGRvZXMgbm90IGZpdCBpbnRvIGl0J3Mgd2luZG93IGFuZCAKIHRoZXJlZm9yZSBpdCBiZWNvbWVzIGEgc2Nyb2xsIG1lbnUuIAogCiBZb3UgY2FuIGFsc28gc2VlIGhlcmUgdmVyeSBuaWNlbHkgdGhlIHBhdHRlcm4gbWF0Y2hpbmcgZnVuY3Rpb25hbGl0eQogb2YgbWVudXMuIFR5cGUgZm9yIGV4YW1wbGUgYSAnSicgYW5kIHlvdSB3aWxsIGJlIHBvc2l0aW9uZWQgdG8gdGhlCiBuZXh0IGl0ZW0gYWZ0ZXIgdGhlIGN1cnJlbnQgc3RhcnRpbmcgd2l0aCBhICdKJy4gQW55IG1vcmUgY2hhcmFjdGVycwogeW91IHR5cGUgaW4gbWFrZSB0aGUgcGF0dGVybiBtb3JlIHNwZWNpZmljLiBXaXRoIENUUkwtQSBhbmQgQ1RSTC1aCi0oZm9yIG1vcmUgZGV0YWlscyBwcmVzcyB0aGUgS2V5IGxhYmVsbGVkICJLZXlzIikgeW91IGNhbiBicm93c2UKKyhmb3IgbW9yZSBkZXRhaWxzIHByZXNzIHRoZSBLZXkgbGFiZWxlZCAiS2V5cyIpIHlvdSBjYW4gYnJvd3NlCiB0aHJvdWdoIGFsbCB0aGUgaXRlbXMgbWF0Y2hpbmcgdGhlIHBhdHRlcm4uCiAKIFlvdSBtYXkgY2hhbmdlIHRoZSBmb3JtYXQgb2YgdGhlIG1lbnUuIEp1c3QgcHJlc3Mgb25lIG9mIHRoZSBrZXlzCi1sYWJlbGxlZCAiNHgxIiwgIjR4MiIgb3IgIjR4MyIgdG8gZ2V0IGEgbWVudSB3aXRoIHRoYXQgbWFueSByb3dzCitsYWJlbGVkICI0eDEiLCAiNHgyIiBvciAiNHgzIiB0byBnZXQgYSBtZW51IHdpdGggdGhhdCBtYW55IHJvd3MKIGFuZCBjb2x1bW5zLgogCiBXaXRoIHRoZSBLZXlzICJPLVJvdyIgb3IgIk8tQ29sIiAodGhleSBvY2N1cHkgdGhlIHNhbWUgbGFiZWwgYW5kCkBAIC0xMjEsNyArMTIxLDcgQEAKIHN3aXRjaCBvbiBzZWxlY3Rpb24pIHlvdSBjYW4gY2hhbmdlIHdoZXRoZXIgb3Igbm90IHRoZSBkZXNjcmlwdGlvbnMKIGZvciBlYWNoIGl0ZW0gc2hvdWxkIGJlIGRpc3BsYXllZC4gUGxlYXNlIG5vdCB0aGF0IHRoaXMga2V5IGlzCiBub3QgdmlzaWJsZSBpbiB0aGUgIjR4MyIgbGF5b3V0IG1vZGUsIGJlY2F1c2UgaW4gdGhpcyBjYXNlIHRoZQotbWVudSB3b3VsZG4ndCBmaXQgb24gYSB0eXBpY2FsbCA4MHgyNCBzY3JlZW4uCittZW51IHdvdWxkIG5vdCBmaXQgb24gYSB0eXBpY2FsIDgweDI0IHNjcmVlbi4KIAogV2l0aCB0aGUgS2V5cyAiRGlzYWIiIG9yICJFbmFiIiAodGhleSBvY2N1cHkgdGhlIHNhbWUgbGFiZWwgYW5kCiBzd2l0Y2ggb24gc2VsZWN0aW9uKSB5b3UgY2FuIGRpcy0gb3IgZW5hYmxlIHRoZSBzZWxlY3RhYmlsaXR5IG9mCkBAIC0xMzEsMTMgKzEzMSwxMyBAQAogVGhlIEtleXMgIjR4MSIsICI0eDIiIGFuZCAiNHgzIiB3aWxsIGNoYW5nZSB0aGUgZm9ybWF0IG9mIHRoZSBtZW51LgogUGxlYXNlIG5vdGUgdGhhdCB0aGlzIGlzIGEgc2Nyb2xsaW5nIG1lbnUuIFlvdSBtYXkgYWxzbyBwbGF5IHdpdGggdGhlCiBwYXR0ZXJuIG1hdGNoaW5nIGZ1bmN0aW9uYWxpdHkgb3IgdHJ5IHRvIGNoYW5nZSB0aGUgZm9ybWF0IG9mIHRoZSBtZW51LgotRm9yIG1vcmUgZGV0YWlscyBwcmVzcyB0aGUgS2V5IGxhYmVsbGVkICJIZWxwIi4KK0ZvciBtb3JlIGRldGFpbHMgcHJlc3MgdGhlIEtleSBsYWJlbGVkICJIZWxwIi4KICNGT1JNMDAKIFRoaXMgaXMgYSBkZW1vIG9mIHRoZSBmb3JtcyBwYWNrYWdlLgogI0ZPUk0tUEFEMDAKIFBsZWFzZSBub3RlIHRoYXQgdGhpcyBkZW1vIGlzIGZhciBmcm9tIGJlaW5nIGNvbXBsZXRlLiBJdCByZWFsbHkgc2hvd3MKIG9ubHkgYSBzbWFsbCBwYXJ0IG9mIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBmb3JtcyBwYWNrYWdlLiBMZXQncyBob3BlIAotdGhlIG5leHQgdmVyc2lvbiB3aWxsIGhhdmUgYSByaWNoZXIgZGVtbyAoWW91IHdhbid0IHRvIGNvbnRyaWJ1dGUgPykuCit0aGUgbmV4dCB2ZXJzaW9uIHdpbGwgaGF2ZSBhIHJpY2hlciBkZW1vIChZb3Ugd2FudCB0byBjb250cmlidXRlID8pLgogI05PVElNUEwKIFNvcnJ5IHRoaXMgZnVuY3Rpb25hbGl0eSBvZiB0aGUgZGVtbyBpcyBub3QgaW1wbGVtZW50ZWQgYXQgdGhlIG1vbWVudC4KIFJlbWVtYmVyIHRoaXMgaXMgYSBmcmVld2FyZSBwcm9qZWN0LCBzbyBJIGNhbiB1c2Ugb25seSBteSB2ZXJ5IHJhcmUKQEAgLTE0OSwxMyArMTQ5LDEzIEBACiAjQ1VSU0VTLVBBRDAwCiBQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgZGVtbyBpcyBmYXIgZnJvbSBiZWluZyBjb21wbGV0ZS4gSXQgcmVhbGx5IHNob3dzCiBvbmx5IGEgc21hbGwgcGFydCBvZiB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgY3Vyc2VzIHBhY2thZ2UuIExldCdzIGhvcGUgCi10aGUgbmV4dCB2ZXJzaW9uIHdpbGwgaGF2ZSBhIHJpY2hlciBkZW1vIChZb3Ugd2FuJ3QgdG8gY29udHJpYnV0ZSA/KS4KK3RoZSBuZXh0IHZlcnNpb24gd2lsbCBoYXZlIGEgcmljaGVyIGRlbW8gKFlvdSB3YW50IHRvIGNvbnRyaWJ1dGUgPykuCiAjTU9VU0VLRVlTCiBJbiB0aGlzIGRlbW8geW91IG1heSB1c2UgdGhpcyBrZXlzOgogCi0gICAtIEtleSBsYWJlbGxlZCAiSGVscCIgIHRvIGdldCBhIGhlbHAKLSAgIC0gS2V5IGxhYmVsbGVkICJLZXlzIiAgaXMgd2hhdCB5b3UgYXJlIHJlYWRpbmcgbm93Ci0gICAtIEtleSBsYWJlbGxlZCAiUXVpdCIgIHRvIGxlYXZlIHRoZSBkZW1vCisgICAtIEtleSBsYWJlbGVkICJIZWxwIiAgdG8gZ2V0IGEgaGVscAorICAgLSBLZXkgbGFiZWxlZCAiS2V5cyIgIGlzIHdoYXQgeW91IGFyZSByZWFkaW5nIG5vdworICAgLSBLZXkgbGFiZWxlZCAiUXVpdCIgIHRvIGxlYXZlIHRoZSBkZW1vCiAKIFlvdSBtYXkgY2xpY2sgdGhlIG1vdXNlIGJ1dHRvbnMgYXQgYW55IGxvY2F0aW9uIGF0IHRoZSBzY3JlZW4gYW5kIGxvb2sKIGF0IHRoZSBwcm90b2NvbCB3aW5kb3cgIQpAQCAtMTc5LDcgKzE3OSw3IEBACiBZb3UgbWF5IHByZXNzIG9uZSBvZiB0aGUgdGhyZWUgd2VsbCBrbm93biBzdGFuZGFyZCBrZXlzIG9mIHRoaXMgZGVtby4KICNBVFRSSUItUEFEMDAKIEFnYWluIHRoaXMgaXMgYSBtb3JlIHRoYW4gc2ltcGxlIGRlbW8gYW5kIGp1c3QgaGVyZSB0byBnaXZlIHlvdSB0aGUKLXNvdXJjZWNvZGUuIEZlZWwgZnJlZSB0byBjb250cmlidXRlIG1vcmUuCitzb3VyY2UgY29kZS4gRmVlbCBmcmVlIHRvIGNvbnRyaWJ1dGUgbW9yZS4KICNURVhUSU8KICNURVhUSU9LRVlTCiAjVEVYVElPLVBBRDAwCmRpZmYgLS1naXQgYS9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWFjc19hbmRfc2Nyb2xsLmFkYiBiL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItYWNzX2FuZF9zY3JvbGwuYWRiCmluZGV4IDA3YjJkOTEuLjAwZTlhZmMgMTAwNjQ0Ci0tLSBhL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItYWNzX2FuZF9zY3JvbGwuYWRiCisrKyBiL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItYWNzX2FuZF9zY3JvbGwuYWRiCkBAIC03LDcgKzcsNyBAQAogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gQ29weXJpZ2h0IChjKSAyMDAwLTIwMDYsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwOSwyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCiAtLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KQEAgLTM1LDggKzM1LDggQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLS0gIEF1dGhvcjogRXVnZW5lIFYuIE1lbGFyYWdubyA8YWxkb21lbEBpeC5uZXRjb20uY29tPiAyMDAwCiAtLSAgVmVyc2lvbiBDb250cm9sCi0tLSAgJFJldmlzaW9uOiAxLjggJAotLS0gICREYXRlOiAyMDA4LzA3LzI2IDE4OjQ3OjQyICQKKy0tICAkUmV2aXNpb246IDEuMTEgJAorLS0gICREYXRlOiAyMDExLzAzLzIzIDAwOjMzOjAwICQKIC0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLS0gIFdpbmRvd3MgYW5kIHNjcm9sbGluZyB0ZXN0ZXIuCkBAIC05Myw4ICs5Myw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIGR4ICA6IENvbHVtbl9Qb3NpdGlvbik7CiAgICBmdW5jdGlvbiBkZWxldGVfZnJhbWVkIChmcCA6IEZyYW1lQTsgc2hvd2l0IDogQm9vbGVhbikgcmV0dXJuIEZyYW1lQTsKIAotICAgdXNlIEFkYS5TdHJlYW1zLlN0cmVhbV9JTzsKLQogICAgLS0gIEEgbGlua2VkIGxpc3QKICAgIC0tICBJICB3aXNoIHRoZXJlIHdhcyBhIHN0YW5kYXJkIGxpYnJhcnkgbGlua2VkIGxpc3QuIE9oIHdlbGwuCiAgICB0eXBlIEZyYW1lIGlzIHJlY29yZApAQCAtMjg1LDExICsyODMsMTEgQEAKICAgICAgIGVsc2UKICAgICAgICAgIEFkZCAoU3RyID0+ICJBbGwgb3RoZXIiKTsKICAgICAgIGVuZCBpZjsKLSAgICAgIEFkZCAoc3RyID0+ICIgY2hhcmFjdGVycyBhcmUgZWNob2VkLCB3aW5kb3cgc2hvdWxkICIpOworICAgICAgQWRkIChTdHIgPT4gIiBjaGFyYWN0ZXJzIGFyZSBlY2hvZWQsIHdpbmRvdyBzaG91bGQgIik7CiAgICAgICBpZiBub3QgSGF2ZVNjcm9sbCAoY3VycHcpIHRoZW4KICAgICAgICAgIEFkZCAoU3RyID0+ICJub3QgIik7CiAgICAgICBlbmQgaWY7Ci0gICAgICBBZGQgKHN0ciA9PiAic2Nyb2xsIik7CisgICAgICBBZGQgKFN0ciA9PiAic2Nyb2xsIik7CiAKICAgICAgIENsZWFyX1RvX0VuZF9PZl9MaW5lOwogICAgZW5kIHRyYW5zaWVudDsKQEAgLTM0Nyw3ICszNDUsNyBAQAogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgd2hlbiBLRVlfVVAgPT4KICAgICAgICAgICAgICAgIGkgOj0gaSArIHNpIC0gMTsKLSAgICAgICAgICAgICAgIC0tICBzYW1lIGFzICBpIDo9IGkgLSAxIGJlY2F1c2Ugb2YgTW9kdWx1cyBhcml0aGV0aWMsCisgICAgICAgICAgICAgICAtLSAgc2FtZSBhcyAgaSA6PSBpIC0gMSBiZWNhdXNlIG9mIE1vZHVsdXMgYXJpdGhtZXRpYywKICAgICAgICAgICAgICAgIC0tICBvbiBMaW5lX1Bvc2l0aW9uLCB3aGljaCBpcyBhIE5hdHVyYWwKICAgICAgICAgICAgICAgIC0tICB0aGUgQyB2ZXJzaW9uIHVzZXMgdGhpcyBmb3JtIHRvbywgaW50ZXJlc3RpbmdseS4KICAgICAgICAgICAgIHdoZW4gS0VZX0RPV04gPT4KQEAgLTQ1NCwxOSArNDUyLDE5IEBACiAgICBmdW5jdGlvbiBkZWxldGVfZnJhbWVkIChmcCA6IEZyYW1lQTsgc2hvd2l0IDogQm9vbGVhbikgcmV0dXJuIEZyYW1lQSBpcwogICAgICAgbnAgOiBGcmFtZUE7CiAgICBiZWdpbgotICAgICAgZnAubGFzdC5uZXh0IDo9IGZwLm5leHQ7Ci0gICAgICBmcC5uZXh0Lmxhc3QgOj0gZnAubGFzdDsKKyAgICAgIGZwLmFsbC5sYXN0LmFsbC5uZXh0IDo9IGZwLmFsbC5uZXh0OworICAgICAgZnAuYWxsLm5leHQuYWxsLmxhc3QgOj0gZnAuYWxsLmxhc3Q7CiAKICAgICAgIGlmIHNob3dpdCB0aGVuCi0gICAgICAgICBFcmFzZSAoZnAud2luZCk7Ci0gICAgICAgICBSZWZyZXNoIChmcC53aW5kKTsKKyAgICAgICAgIEVyYXNlIChmcC5hbGwud2luZCk7CisgICAgICAgICBSZWZyZXNoIChmcC5hbGwud2luZCk7CiAgICAgICBlbmQgaWY7Ci0gICAgICBEZWxldGUgKGZwLndpbmQpOworICAgICAgRGVsZXRlIChmcC5hbGwud2luZCk7CiAKLSAgICAgIGlmIGZwID0gZnAubmV4dCB0aGVuCisgICAgICBpZiBmcCA9IGZwLmFsbC5uZXh0IHRoZW4KICAgICAgICAgIG5wIDo9IG51bGw7CiAgICAgICBlbHNlCi0gICAgICAgICBucCA6PSBmcC5uZXh0OworICAgICAgICAgbnAgOj0gZnAuYWxsLm5leHQ7CiAgICAgICBlbmQgaWY7CiAgICAgICAtLSAgVE9ETyBmcmVlKGZwKTsKICAgICAgIHJldHVybiBucDsKQEAgLTQ5Niw2NCArNDk0LDY0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmFsc2UsIEZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bGxfV2luZG93KTsKICAgICAgICAgICAgIGJlZ2luCi0gICAgICAgICAgICAgICBuZXd3LndpbmQgOj0gZ2V0d2luZG93OwotICAgICAgICAgICAgICAgaWYgbmV3dy53aW5kID0gTnVsbF9XaW5kb3cgIHRoZW4KKyAgICAgICAgICAgICAgIG5ld3cuYWxsLndpbmQgOj0gZ2V0d2luZG93OworICAgICAgICAgICAgICAgaWYgbmV3dy5hbGwud2luZCA9IE51bGxfV2luZG93ICB0aGVuCiAgICAgICAgICAgICAgICAgICBleGl0OwogICAgICAgICAgICAgICAgICAgLS0gIHdhcyBnb3RvIGJyZWFrb3V0OyBoYSBoYSBoYQogICAgICAgICAgICAgICAgZWxzZQogCiAgICAgICAgICAgICAgICAgICBpZiBjdXJyZW50ID0gbnVsbCAgdGhlbgotICAgICAgICAgICAgICAgICAgICAgbmV3dy5uZXh0IDo9IG5ld3c7Ci0gICAgICAgICAgICAgICAgICAgICBuZXd3Lmxhc3QgOj0gbmV3dzsKKyAgICAgICAgICAgICAgICAgICAgIG5ld3cuYWxsLm5leHQgOj0gbmV3dzsKKyAgICAgICAgICAgICAgICAgICAgIG5ld3cuYWxsLmxhc3QgOj0gbmV3dzsKICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgIG5ld3cubmV4dCA6PSBjdXJyZW50Lm5leHQ7Ci0gICAgICAgICAgICAgICAgICAgICBuZXd3Lmxhc3QgOj0gY3VycmVudDsKLSAgICAgICAgICAgICAgICAgICAgIG5ld3cubGFzdC5uZXh0IDo9IG5ld3c7Ci0gICAgICAgICAgICAgICAgICAgICBuZXd3Lm5leHQubGFzdCA6PSBuZXd3OworICAgICAgICAgICAgICAgICAgICAgbmV3dy5hbGwubmV4dCA6PSBjdXJyZW50LmFsbC5uZXh0OworICAgICAgICAgICAgICAgICAgICAgbmV3dy5hbGwubGFzdCA6PSBjdXJyZW50OworICAgICAgICAgICAgICAgICAgICAgbmV3dy5hbGwubGFzdC5hbGwubmV4dCA6PSBuZXd3OworICAgICAgICAgICAgICAgICAgICAgbmV3dy5hbGwubmV4dC5hbGwubGFzdCA6PSBuZXd3OwogICAgICAgICAgICAgICAgICAgZW5kIGlmOwogICAgICAgICAgICAgICAgICAgY3VycmVudCA6PSBuZXd3OwogCi0gICAgICAgICAgICAgICAgICBTZXRfS2V5UGFkX01vZGUgKGN1cnJlbnQud2luZCwgVHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICBjdXJyZW50LmRvX2tleXBhZCA6PSBIYXZlS2V5UGFkIChjdXJyZW50LndpbmQpOwotICAgICAgICAgICAgICAgICAgY3VycmVudC5kb19zY3JvbGwgOj0gSGF2ZVNjcm9sbCAoY3VycmVudC53aW5kKTsKKyAgICAgICAgICAgICAgICAgIFNldF9LZXlQYWRfTW9kZSAoY3VycmVudC5hbGwud2luZCwgVHJ1ZSk7CisgICAgICAgICAgICAgICAgICBjdXJyZW50LmFsbC5kb19rZXlwYWQgOj0gSGF2ZUtleVBhZCAoY3VycmVudC5hbGwud2luZCk7CisgICAgICAgICAgICAgICAgICBjdXJyZW50LmFsbC5kb19zY3JvbGwgOj0gSGF2ZVNjcm9sbCAoY3VycmVudC5hbGwud2luZCk7CiAgICAgICAgICAgICAgICBlbmQgaWY7CiAgICAgICAgICAgICBlbmQ7CiAgICAgICAgICB3aGVuIENoYXJhY3RlcidQb3MgKCdOJykgbW9kIDE2IzIwIyAgPT4gLS0gIEN0cmwoJ04nKQogICAgICAgICAgICAgaWYgY3VycmVudCAvPSBudWxsIHRoZW4KLSAgICAgICAgICAgICAgIGN1cnJlbnQgOj0gY3VycmVudC5uZXh0OworICAgICAgICAgICAgICAgY3VycmVudCA6PSBjdXJyZW50LmFsbC5uZXh0OwogICAgICAgICAgICAgZW5kIGlmOwogICAgICAgICAgd2hlbiBDaGFyYWN0ZXInUG9zICgnUCcpIG1vZCAxNiMyMCMgID0+IC0tICBDdHJsKCdQJykKICAgICAgICAgICAgIGlmIGN1cnJlbnQgLz0gbnVsbCB0aGVuCi0gICAgICAgICAgICAgICBjdXJyZW50IDo9IGN1cnJlbnQubGFzdDsKKyAgICAgICAgICAgICAgIGN1cnJlbnQgOj0gY3VycmVudC5hbGwubGFzdDsKICAgICAgICAgICAgIGVuZCBpZjsKICAgICAgICAgIHdoZW4gQ2hhcmFjdGVyJ1BvcyAoJ0YnKSBtb2QgMTYjMjAjICA9PiAtLSAgQ3RybCgnRicpCi0gICAgICAgICAgICBpZiBjdXJyZW50IC89IG51bGwgYW5kIHRoZW4gSGF2ZVNjcm9sbCAoY3VycmVudC53aW5kKSB0aGVuCi0gICAgICAgICAgICAgICBTY3JvbGwgKGN1cnJlbnQud2luZCwgMSk7CisgICAgICAgICAgICBpZiBjdXJyZW50IC89IG51bGwgYW5kIHRoZW4gSGF2ZVNjcm9sbCAoY3VycmVudC5hbGwud2luZCkgdGhlbgorICAgICAgICAgICAgICAgU2Nyb2xsIChjdXJyZW50LmFsbC53aW5kLCAxKTsKICAgICAgICAgICAgIGVuZCBpZjsKICAgICAgICAgIHdoZW4gQ2hhcmFjdGVyJ1BvcyAoJ0InKSBtb2QgMTYjMjAjICA9PiAtLSAgQ3RybCgnQicpCi0gICAgICAgICAgICBpZiBjdXJyZW50IC89IG51bGwgYW5kIHRoZW4gSGF2ZVNjcm9sbCAoY3VycmVudC53aW5kKSB0aGVuCisgICAgICAgICAgICBpZiBjdXJyZW50IC89IG51bGwgYW5kIHRoZW4gSGF2ZVNjcm9sbCAoY3VycmVudC5hbGwud2luZCkgdGhlbgogICAgICAgICAgICAgLS0gIFRoZSBDIHZlcnNpb24gb2YgU2Nyb2xsIG1heSByZXR1cm4gRVJSIHdoaWNoIGlzIGlnbm9yZWQKICAgICAgICAgICAgIC0tICB3ZSBuZWVkIHRvIGF2b2lkIHRoZSBleGNlcHRpb24KICAgICAgICAgICAgIC0tICB3aXRoIHRoZSAnYW5kIEhhdmVTY3JvbGwoY3VycmVudC53aW5kKScKLSAgICAgICAgICAgICAgIFNjcm9sbCAoY3VycmVudC53aW5kLCAtMSk7CisgICAgICAgICAgICAgICBTY3JvbGwgKGN1cnJlbnQuYWxsLndpbmQsIC0xKTsKICAgICAgICAgICAgIGVuZCBpZjsKICAgICAgICAgIHdoZW4gQ2hhcmFjdGVyJ1BvcyAoJ0snKSBtb2QgMTYjMjAjICA9PiAtLSAgQ3RybCgnSycpCiAgICAgICAgICAgICBpZiBjdXJyZW50IC89IG51bGwgdGhlbgotICAgICAgICAgICAgICAgY3VycmVudC5kb19rZXlwYWQgOj0gbm90IGN1cnJlbnQuZG9fa2V5cGFkOwotICAgICAgICAgICAgICAgU2V0X0tleVBhZF9Nb2RlIChjdXJyZW50LndpbmQsIGN1cnJlbnQuZG9fa2V5cGFkKTsKKyAgICAgICAgICAgICAgIGN1cnJlbnQuYWxsLmRvX2tleXBhZCA6PSBub3QgY3VycmVudC5hbGwuZG9fa2V5cGFkOworICAgICAgICAgICAgICAgU2V0X0tleVBhZF9Nb2RlIChjdXJyZW50LmFsbC53aW5kLCBjdXJyZW50LmFsbC5kb19rZXlwYWQpOwogICAgICAgICAgICAgZW5kIGlmOwogICAgICAgICAgd2hlbiBDaGFyYWN0ZXInUG9zICgnUycpIG1vZCAxNiMyMCMgID0+IC0tICBDdHJsKCdTJykKICAgICAgICAgICAgIGlmIGN1cnJlbnQgLz0gbnVsbCB0aGVuCi0gICAgICAgICAgICAgICBjdXJyZW50LmRvX3Njcm9sbCA6PSBub3QgY3VycmVudC5kb19zY3JvbGw7Ci0gICAgICAgICAgICAgICBBbGxvd19TY3JvbGxpbmcgKGN1cnJlbnQud2luZCwgY3VycmVudC5kb19zY3JvbGwpOworICAgICAgICAgICAgICAgY3VycmVudC5hbGwuZG9fc2Nyb2xsIDo9IG5vdCBjdXJyZW50LmFsbC5kb19zY3JvbGw7CisgICAgICAgICAgICAgICBBbGxvd19TY3JvbGxpbmcgKGN1cnJlbnQuYWxsLndpbmQsIGN1cnJlbnQuYWxsLmRvX3Njcm9sbCk7CiAgICAgICAgICAgICBlbmQgaWY7CiAgICAgICAgICB3aGVuIENoYXJhY3RlcidQb3MgKCdXJykgbW9kIDE2IzIwIyAgPT4gLS0gIEN0cmwoJ1cnKQotICAgICAgICAgICAgaWYgY3VycmVudCAvPSBjdXJyZW50Lm5leHQgdGhlbgorICAgICAgICAgICAgaWYgY3VycmVudCAvPSBjdXJyZW50LmFsbC5uZXh0IHRoZW4KICAgICAgICAgICAgICAgIENyZWF0ZSAoZiwgTmFtZSA9PiBkdW1wZmlsZSk7IC0tIFRPRE8gZXJyb3IgY2hlY2tpbmcKICAgICAgICAgICAgICAgIGlmIG5vdCBJc19PcGVuIChmKSB0aGVuCiAgICAgICAgICAgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOwogICAgICAgICAgICAgICAgZW5kIGlmOwotICAgICAgICAgICAgICAgUHV0X1dpbmRvdyAoY3VycmVudC53aW5kLCBmKTsKKyAgICAgICAgICAgICAgIFB1dF9XaW5kb3cgKGN1cnJlbnQuYWxsLndpbmQsIGYpOwogICAgICAgICAgICAgICAgQ2xvc2UgKGYpOwogICAgICAgICAgICAgICAgY3VycmVudCA6PSBkZWxldGVfZnJhbWVkIChjdXJyZW50LCBUcnVlKTsKICAgICAgICAgICAgIGVuZCBpZjsKQEAgLTU2NSwxNSArNTYzLDE1IEBACiAgICAgICAgICAgICAgICBPcGVuIChmLCBNb2RlID0+IEluX0ZpbGUsIE5hbWUgPT4gZHVtcGZpbGUpOwogICAgICAgICAgICAgICAgbmV3dyA6PSBuZXcgRnJhbWUnKG51bGwsIG51bGwsIEZhbHNlLCBGYWxzZSwgTnVsbF9XaW5kb3cpOwogCi0gICAgICAgICAgICAgICBuZXd3Lm5leHQgOj0gY3VycmVudC5uZXh0OwotICAgICAgICAgICAgICAgbmV3dy5sYXN0IDo9IGN1cnJlbnQ7Ci0gICAgICAgICAgICAgICBuZXd3Lmxhc3QubmV4dCA6PSBuZXd3OwotICAgICAgICAgICAgICAgbmV3dy5uZXh0Lmxhc3QgOj0gbmV3dzsKKyAgICAgICAgICAgICAgIG5ld3cuYWxsLm5leHQgOj0gY3VycmVudC5hbGwubmV4dDsKKyAgICAgICAgICAgICAgIG5ld3cuYWxsLmxhc3QgOj0gY3VycmVudDsKKyAgICAgICAgICAgICAgIG5ld3cuYWxsLmxhc3QuYWxsLm5leHQgOj0gbmV3dzsKKyAgICAgICAgICAgICAgIG5ld3cuYWxsLm5leHQuYWxsLmxhc3QgOj0gbmV3dzsKIAotICAgICAgICAgICAgICAgbmV3dy53aW5kIDo9IEdldF9XaW5kb3cgKGYpOworICAgICAgICAgICAgICAgbmV3dy5hbGwud2luZCA6PSBHZXRfV2luZG93IChmKTsKICAgICAgICAgICAgICAgIENsb3NlIChmKTsKIAotICAgICAgICAgICAgICAgUmVmcmVzaCAobmV3dy53aW5kKTsKKyAgICAgICAgICAgICAgIFJlZnJlc2ggKG5ld3cuYWxsLndpbmQpOwogICAgICAgICAgICAgZW5kOwogICAgICAgICAgd2hlbiBDaGFyYWN0ZXInUG9zICgnWCcpIG1vZCAxNiMyMCMgPT4gLS0gIEN0cmwoJ1gnKQogICAgICAgICAgICAgaWYgY3VycmVudCAvPSBudWxsIHRoZW4KQEAgLTU4OSw3ICs1ODcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAidG8gbWFyayBuZXcgY29ybmVyIik7CiAgICAgICAgICAgICAgICAgICBSZWZyZXNoOwogCi0gICAgICAgICAgICAgICAgICBHZXRfV2luZG93X1Bvc2l0aW9uIChjdXJyZW50LndpbmQsIHVsLnksIHVsLngpOworICAgICAgICAgICAgICAgICAgR2V0X1dpbmRvd19Qb3NpdGlvbiAoY3VycmVudC5hbGwud2luZCwgdWwueSwgdWwueCk7CiAKICAgICAgICAgICAgICAgICAgIHNlbGVjdGNlbGwgKHVsLnksIHVsLngsIExpbmVzIC0gQm90bGluZXMgLSAyLCBDb2x1bW5zIC0gMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCwgdG1wYm9vbCk7CkBAIC01OTcsNDMgKzU5NSw0MyBAQAogICAgICAgICAgICAgICAgICAgICAgLS0gIHRoZSBDIHZlcnNpb24gaGFkIGEgZ290by4gSSByZWZ1c2UgZ290b3MuCiAgICAgICAgICAgICAgICAgICAgICBCZWVwOwogICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgR2V0X1NpemUgKGN1cnJlbnQud2luZCwgbHIueSwgbHIueCk7CisgICAgICAgICAgICAgICAgICAgICBHZXRfU2l6ZSAoY3VycmVudC5hbGwud2luZCwgbHIueSwgbHIueCk7CiAgICAgICAgICAgICAgICAgICAgICBsci55IDo9IGxyLnkgKyB1bC55IC0gMTsKICAgICAgICAgICAgICAgICAgICAgIGxyLnggOj0gbHIueCArIHVsLnggLSAxOwogICAgICAgICAgICAgICAgICAgICAgT3V0ZXJib3ggKHVsLCBsciwgRmFsc2UpOwogICAgICAgICAgICAgICAgICAgICAgUmVmcmVzaF9XaXRob3V0X1VwZGF0ZTsKIAotICAgICAgICAgICAgICAgICAgICAgR2V0X1NpemUgKGN1cnJlbnQud2luZCwgbXksIG14KTsKKyAgICAgICAgICAgICAgICAgICAgIEdldF9TaXplIChjdXJyZW50LmFsbC53aW5kLCBteSwgbXgpOwogICAgICAgICAgICAgICAgICAgICAgaWYgbXkgPiB0bXAueSAtIHVsLnkgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgR2V0X0N1cnNvcl9Qb3NpdGlvbiAoY3VycmVudC53aW5kLCBsci55LCBsci54KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIE1vdmVfQ3Vyc29yIChjdXJyZW50LndpbmQsIHRtcC55IC0gdWwueSArIDEsIDApOwotICAgICAgICAgICAgICAgICAgICAgICAgQ2xlYXJfVG9fRW5kX09mX1NjcmVlbiAoY3VycmVudC53aW5kKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIE1vdmVfQ3Vyc29yIChjdXJyZW50LndpbmQsIGxyLnksIGxyLngpOworICAgICAgICAgICAgICAgICAgICAgICAgR2V0X0N1cnNvcl9Qb3NpdGlvbiAoY3VycmVudC5hbGwud2luZCwgbHIueSwgbHIueCk7CisgICAgICAgICAgICAgICAgICAgICAgICBNb3ZlX0N1cnNvciAoY3VycmVudC5hbGwud2luZCwgdG1wLnkgLSB1bC55ICsgMSwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBDbGVhcl9Ub19FbmRfT2ZfU2NyZWVuIChjdXJyZW50LmFsbC53aW5kKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE1vdmVfQ3Vyc29yIChjdXJyZW50LmFsbC53aW5kLCBsci55LCBsci54KTsKICAgICAgICAgICAgICAgICAgICAgIGVuZCBpZjsKICAgICAgICAgICAgICAgICAgICAgIGlmIG14ID4gdG1wLnggLSB1bC54IHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIDAgLi4gbXkgLSAxIGxvb3AKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vdmVfQ3Vyc29yIChjdXJyZW50LndpbmQsIGksIHRtcC54IC0gdWwueCArIDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xlYXJfVG9fRW5kX09mX0xpbmUgKGN1cnJlbnQud2luZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBNb3ZlX0N1cnNvciAoY3VycmVudC5hbGwud2luZCwgaSwgdG1wLnggLSB1bC54ICsgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGVhcl9Ub19FbmRfT2ZfTGluZSAoY3VycmVudC5hbGwud2luZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBlbmQgbG9vcDsKICAgICAgICAgICAgICAgICAgICAgIGVuZCBpZjsKLSAgICAgICAgICAgICAgICAgICAgIFJlZnJlc2hfV2l0aG91dF9VcGRhdGUgKGN1cnJlbnQud2luZCk7CisgICAgICAgICAgICAgICAgICAgICBSZWZyZXNoX1dpdGhvdXRfVXBkYXRlIChjdXJyZW50LmFsbC53aW5kKTsKIAogICAgICAgICAgICAgICAgICAgICAgbHIgOj0gdG1wOwogICAgICAgICAgICAgICAgICAgICAgLS0gIFRoZSBDIHZlcnNpb24gcGFzc2VzIGludmFsaWQgYXJncyB0byByZXNpemUKICAgICAgICAgICAgICAgICAgICAgIC0tICB3aGljaCByZXR1cm5zIGFuIEVSUi4gRm9yIEFkYSB3ZSBhdm9pZCB0aGUgZXhjZXB0aW9uLgogICAgICAgICAgICAgICAgICAgICAgaWYgbHIueSAvPSB1bC55IGFuZCBsci54IC89IHVsLnggdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgUmVzaXplIChjdXJyZW50LndpbmQsIGxyLnkgLSB1bC55ICsgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFJlc2l6ZSAoY3VycmVudC5hbGwud2luZCwgbHIueSAtIHVsLnkgKyAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsci54IC0gdWwueCArIDApOwogICAgICAgICAgICAgICAgICAgICAgZW5kIGlmOwogCi0gICAgICAgICAgICAgICAgICAgICBHZXRfV2luZG93X1Bvc2l0aW9uIChjdXJyZW50LndpbmQsIHVsLnksIHVsLngpOwotICAgICAgICAgICAgICAgICAgICAgR2V0X1NpemUgKGN1cnJlbnQud2luZCwgbHIueSwgbHIueCk7CisgICAgICAgICAgICAgICAgICAgICBHZXRfV2luZG93X1Bvc2l0aW9uIChjdXJyZW50LmFsbC53aW5kLCB1bC55LCB1bC54KTsKKyAgICAgICAgICAgICAgICAgICAgIEdldF9TaXplIChjdXJyZW50LmFsbC53aW5kLCBsci55LCBsci54KTsKICAgICAgICAgICAgICAgICAgICAgIGxyLnkgOj0gbHIueSArIHVsLnkgLSAxOwogICAgICAgICAgICAgICAgICAgICAgbHIueCA6PSBsci54ICsgdWwueCAtIDE7CiAgICAgICAgICAgICAgICAgICAgICBPdXRlcmJveCAodWwsIGxyLCBUcnVlKTsKICAgICAgICAgICAgICAgICAgICAgIFJlZnJlc2hfV2l0aG91dF9VcGRhdGU7CiAKLSAgICAgICAgICAgICAgICAgICAgIFJlZnJlc2hfV2l0aG91dF9VcGRhdGUgKGN1cnJlbnQud2luZCk7CisgICAgICAgICAgICAgICAgICAgICBSZWZyZXNoX1dpdGhvdXRfVXBkYXRlIChjdXJyZW50LmFsbC53aW5kKTsKICAgICAgICAgICAgICAgICAgICAgIE1vdmVfQ3Vyc29yIChMaW5lID0+IDAsIENvbHVtbiA9PiAwKTsKICAgICAgICAgICAgICAgICAgICAgIENsZWFyX1RvX0VuZF9PZl9MaW5lOwogICAgICAgICAgICAgICAgICAgICAgVXBkYXRlX1NjcmVlbjsKQEAgLTY0OSwzMCArNjQ3LDMwIEBACiAgICAgICAgICAgICAgICBSZWZyZXNoOwogICAgICAgICAgICAgZW5kOwogICAgICAgICAgd2hlbiBLZXlfQ3Vyc29yX1VwID0+Ci0gICAgICAgICAgICBuZXd3aW5fbW92ZSAoY3VycmVudC53aW5kLCAtMSwgMCk7CisgICAgICAgICAgICBuZXd3aW5fbW92ZSAoY3VycmVudC5hbGwud2luZCwgLTEsIDApOwogICAgICAgICAgd2hlbiBLZXlfQ3Vyc29yX0Rvd24gID0+Ci0gICAgICAgICAgICBuZXd3aW5fbW92ZSAoY3VycmVudC53aW5kLCAxLCAwKTsKKyAgICAgICAgICAgIG5ld3dpbl9tb3ZlIChjdXJyZW50LmFsbC53aW5kLCAxLCAwKTsKICAgICAgICAgIHdoZW4gS2V5X0N1cnNvcl9MZWZ0ICA9PgotICAgICAgICAgICAgbmV3d2luX21vdmUgKGN1cnJlbnQud2luZCwgMCwgLTEpOworICAgICAgICAgICAgbmV3d2luX21vdmUgKGN1cnJlbnQuYWxsLndpbmQsIDAsIC0xKTsKICAgICAgICAgIHdoZW4gS2V5X0N1cnNvcl9SaWdodCAgPT4KLSAgICAgICAgICAgIG5ld3dpbl9tb3ZlIChjdXJyZW50LndpbmQsIDAsIDEpOworICAgICAgICAgICAgbmV3d2luX21vdmUgKGN1cnJlbnQuYWxsLndpbmQsIDAsIDEpOwogICAgICAgICAgd2hlbiBLZXlfQmFja3NwYWNlIHwgS2V5X0RlbGV0ZV9DaGFyICA9PgogICAgICAgICAgICAgZGVjbGFyZQogICAgICAgICAgICAgICAgeSA6IExpbmVfUG9zaXRpb247CiAgICAgICAgICAgICAgICB4IDogQ29sdW1uX1Bvc2l0aW9uOwogICAgICAgICAgICAgICAgdG1wIDogTGluZV9Qb3NpdGlvbjsKICAgICAgICAgICAgIGJlZ2luCi0gICAgICAgICAgICAgICBHZXRfQ3Vyc29yX1Bvc2l0aW9uIChjdXJyZW50LndpbmQsIHksIHgpOworICAgICAgICAgICAgICAgR2V0X0N1cnNvcl9Qb3NpdGlvbiAoY3VycmVudC5hbGwud2luZCwgeSwgeCk7CiAgICAgICAgICAgICAgICAtLSAgeCA6PSB4IC0gMTsKICAgICAgICAgICAgICAgIC0tICBJIGdvdCB0cmlja2VkIGJ5IHRoZSAtMSA9IE1heF9OYXR1cmFsIC0gMSByZXN1bHQKICAgICAgICAgICAgICAgIC0tICB5IDo9IHkgLSAxOwogICAgICAgICAgICAgICAgaWYgbm90ICh4ID0gMCBhbmQgeSA9IDApIHRoZW4KICAgICAgICAgICAgICAgICAgIGlmIHggPSAwIHRoZW4KICAgICAgICAgICAgICAgICAgICAgIHkgOj0geSAtIDE7Ci0gICAgICAgICAgICAgICAgICAgICBHZXRfU2l6ZSAoY3VycmVudC53aW5kLCB0bXAsIHgpOworICAgICAgICAgICAgICAgICAgICAgR2V0X1NpemUgKGN1cnJlbnQuYWxsLndpbmQsIHRtcCwgeCk7CiAgICAgICAgICAgICAgICAgICBlbmQgaWY7CiAgICAgICAgICAgICAgICAgICB4IDo9IHggLSAxOwotICAgICAgICAgICAgICAgICAgRGVsZXRlX0NoYXJhY3RlciAoY3VycmVudC53aW5kLCB5LCB4KTsKKyAgICAgICAgICAgICAgICAgIERlbGV0ZV9DaGFyYWN0ZXIgKGN1cnJlbnQuYWxsLndpbmQsIHksIHgpOwogICAgICAgICAgICAgICAgZW5kIGlmOwogICAgICAgICAgICAgZW5kOwogICAgICAgICAgd2hlbiBvdGhlcnMgPT4KQEAgLTY4MCw3ICs2NzgsNyBAQAogICAgICAgICAgICAgaWYgY3VycmVudCAvPSBudWxsIHRoZW4KICAgICAgICAgICAgICAgIGRlY2xhcmUKICAgICAgICAgICAgICAgIGJlZ2luCi0gICAgICAgICAgICAgICAgICBBZGQgKGN1cnJlbnQud2luZCwgQ2ggPT4gQ29kZV9Ub19DaGFyIChjKSk7CisgICAgICAgICAgICAgICAgICBBZGQgKGN1cnJlbnQuYWxsLndpbmQsIENoID0+IENvZGVfVG9fQ2hhciAoYykpOwogICAgICAgICAgICAgICAgZXhjZXB0aW9uCiAgICAgICAgICAgICAgICAgICB3aGVuIEN1cnNlc19FeGNlcHRpb24gPT4gbnVsbDsKICAgICAgICAgICAgICAgICAgICAgIC0tICB0aGlzIGhhcHBlbnMgaWYgd2UgYXJlIGF0IHRoZQpAQCAtNjkwLDkgKzY4OCw5IEBACiAgICAgICAgICAgICAgICBCZWVwOwogICAgICAgICAgICAgZW5kIGlmOwogICAgICAgZW5kIGNhc2U7Ci0gICAgICBuZXd3aW5fcmVwb3J0IChjdXJyZW50LndpbmQpOworICAgICAgbmV3d2luX3JlcG9ydCAoY3VycmVudC5hbGwud2luZCk7CiAgICAgICBpZiBjdXJyZW50IC89IG51bGwgdGhlbgotICAgICAgICAgdXNlc2NyIDo9IGN1cnJlbnQud2luZDsKKyAgICAgICAgIHVzZXNjciA6PSBjdXJyZW50LmFsbC53aW5kOwogICAgICAgZWxzZQogICAgICAgICAgdXNlc2NyIDo9IFN0YW5kYXJkX1dpbmRvdzsKICAgICAgIGVuZCBpZjsKZGlmZiAtLWdpdCBhL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItY29sb3JfZWRpdC5hZGIgYi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWNvbG9yX2VkaXQuYWRiCmluZGV4IGE2YTM1ZGUuLjA5OGY5OGQgMTAwNjQ0Ci0tLSBhL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItY29sb3JfZWRpdC5hZGIKKysrIGIvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1jb2xvcl9lZGl0LmFkYgpAQCAtNyw3ICs3LDcgQEAKIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIENvcHlyaWdodCAoYykgMjAwMC0yMDA0LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSAyMDAwLTIwMDYsMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQogLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCkBAIC0zNSw4ICszNSw4IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC0tICBBdXRob3I6IEV1Z2VuZSBWLiBNZWxhcmFnbm8gPGFsZG9tZWxAaXgubmV0Y29tLmNvbT4gMjAwMAogLS0gIFZlcnNpb24gQ29udHJvbAotLS0gICRSZXZpc2lvbjogMS41ICQKLS0tICAkRGF0ZTogMjAwNi8wNi8yNSAxNDoyNDo0MCAkCistLSAgJFJldmlzaW9uOiAxLjYgJAorLS0gICREYXRlOiAyMDA5LzEyLzI2IDE3OjM4OjU4ICQKIC0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogd2l0aCBuY3Vyc2VzMi51dGlsOyB1c2UgbmN1cnNlczIudXRpbDsKQEAgLTE3MSw3ICsxNzEsNyBAQAogICAgICAgICAgICAgU2V0X0NoYXJhY3Rlcl9BdHRyaWJ1dGVzOwogICAgICAgICAgZW5kIGlmOwogICAgICAgICAgU2V0X0NoYXJhY3Rlcl9BdHRyaWJ1dGVzOwotICAgICAgICAgQWRkIChjaCA9PiAnKScpOworICAgICAgICAgQWRkIChDaCA9PiAnKScpOwogICAgICAgZW5kIGxvb3A7CiAgICAgICBBZGQgKExpbmUgPT4gTGluZV9Qb3NpdGlvbiAoTnVtYmVyX09mX0NvbG9ycyArIDMpLCBDb2x1bW4gPT4gMCwKICAgICAgICAgICAgU3RyID0+ICJVc2UgdXAvZG93biB0byBzZWxlY3QgYSBjb2xvciwgbGVmdC9yaWdodCB0byBjaGFuZ2UgIiAmCmRpZmYgLS1naXQgYS9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWRlbW9fZm9ybXMuYWRiIGIvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1kZW1vX2Zvcm1zLmFkYgppbmRleCA3MTM3YWEwLi4wZWVlYjVlIDEwMDY0NAotLS0gYS9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWRlbW9fZm9ybXMuYWRiCisrKyBiL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItZGVtb19mb3Jtcy5hZGIKQEAgLTcsNyArNyw3IEBACiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgMjAwMC0yMDExLDIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KIC0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQpAQCAtMzUsOCArMzUsOCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiBFdWdlbmUgVi4gTWVsYXJhZ25vIDxhbGRvbWVsQGl4Lm5ldGNvbS5jb20+IDIwMDAKIC0tICBWZXJzaW9uIENvbnRyb2wKLS0tICAkUmV2aXNpb246IDEuNSAkCi0tLSAgJERhdGU6IDIwMDYvMDYvMjUgMTQ6MjQ6NDAgJAorLS0gICRSZXZpc2lvbjogMS43ICQKKy0tICAkRGF0ZTogMjAxNC8wOS8xMyAxOToxMDoxOCAkCiAtLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHdpdGggbmN1cnNlczIudXRpbDsgdXNlIG5jdXJzZXMyLnV0aWw7CkBAIC0zMTcsOCArMzE3LDkgQEAKICAgIGZ1bmN0aW9uIG15X2Zvcm1fZHJpdmVyIChmIDogRm9ybTsgYyA6IEtleV9Db2RlKSByZXR1cm4gQm9vbGVhbiBpcwogICAgICAgZmxhZyA6IGNvbnN0YW50IERyaXZlcl9SZXN1bHQgOj0gRHJpdmVyIChmLCBGX1ZhbGlkYXRlX0ZpZWxkKTsKICAgIGJlZ2luCi0gICAgICBpZiBjID0gRm9ybV9SZXF1ZXN0X0NvZGUnTGFzdCArIDEKLSAgICAgICAgYW5kIGZsYWcgPSBGb3JtX09rIHRoZW4KKyAgICAgIGlmIGMgPSBGb3JtX1JlcXVlc3RfQ29kZSdMYXN0ICsgMSBhbmQKKyAgICAgICAgIGZsYWcgPSBGb3JtX09rCisgICAgICB0aGVuCiAgICAgICAgICByZXR1cm4gVHJ1ZTsKICAgICAgIGVsc2UKICAgICAgICAgIEJlZXA7CkBAIC00NTEsMTkgKzQ1MiwxOSBAQAogICAgUmVmcmVzaDsKIAogICAgLS0gIGRlc2NyaWJlIHRoZSBmb3JtCi0gICBmICgxKSA6PSBtYWtlX2xhYmVsICgwLCAxNSwgIlNhbXBsZSBGb3JtIik7Ci0gICBmICgyKSA6PSBtYWtlX2xhYmVsICgyLCAwLCAiTGFzdCBOYW1lIik7Ci0gICBmICgzKSA6PSBtYWtlX2ZpZWxkICgzLCAwLCAxLCAxOCwgRmFsc2UpOwotICAgZiAoNCkgOj0gbWFrZV9sYWJlbCAoMiwgMjAsICJGaXJzdCBOYW1lIik7Ci0gICBmICg1KSA6PSBtYWtlX2ZpZWxkICgzLCAyMCwgMSwgMTIsIEZhbHNlKTsKLSAgIGYgKDYpIDo9IG1ha2VfbGFiZWwgKDIsIDM0LCAiTWlkZGxlIE5hbWUiKTsKLSAgIGYgKDcpIDo9IG1ha2VfZmllbGQgKDMsIDM0LCAxLCAxMiwgRmFsc2UpOwotICAgZiAoOCkgOj0gbWFrZV9sYWJlbCAoNSwgMCwgIkNvbW1lbnRzIik7Ci0gICBmICg5KSA6PSBtYWtlX2ZpZWxkICg2LCAwLCA0LCA0NiwgRmFsc2UpOwotICAgZiAoMTApIDo9IG1ha2VfbGFiZWwgKDUsIDIwLCAiUGFzc3dvcmQ6Iik7Ci0gICBmICgxMSkgOj0gbWFrZV9maWVsZCAoNSwgMzAsIDEsIDksIFRydWUpOwotICAgc2VjdXJlIDo9IGYgKDExKTsKLSAgIGYgKDEyKSA6PSBOdWxsX0ZpZWxkOworICAgZi5hbGwgKDEpIDo9IG1ha2VfbGFiZWwgKDAsIDE1LCAiU2FtcGxlIEZvcm0iKTsKKyAgIGYuYWxsICgyKSA6PSBtYWtlX2xhYmVsICgyLCAwLCAiTGFzdCBOYW1lIik7CisgICBmLmFsbCAoMykgOj0gbWFrZV9maWVsZCAoMywgMCwgMSwgMTgsIEZhbHNlKTsKKyAgIGYuYWxsICg0KSA6PSBtYWtlX2xhYmVsICgyLCAyMCwgIkZpcnN0IE5hbWUiKTsKKyAgIGYuYWxsICg1KSA6PSBtYWtlX2ZpZWxkICgzLCAyMCwgMSwgMTIsIEZhbHNlKTsKKyAgIGYuYWxsICg2KSA6PSBtYWtlX2xhYmVsICgyLCAzNCwgIk1pZGRsZSBOYW1lIik7CisgICBmLmFsbCAoNykgOj0gbWFrZV9maWVsZCAoMywgMzQsIDEsIDEyLCBGYWxzZSk7CisgICBmLmFsbCAoOCkgOj0gbWFrZV9sYWJlbCAoNSwgMCwgIkNvbW1lbnRzIik7CisgICBmLmFsbCAoOSkgOj0gbWFrZV9maWVsZCAoNiwgMCwgNCwgNDYsIEZhbHNlKTsKKyAgIGYuYWxsICgxMCkgOj0gbWFrZV9sYWJlbCAoNSwgMjAsICJQYXNzd29yZDoiKTsKKyAgIGYuYWxsICgxMSkgOj0gbWFrZV9maWVsZCAoNSwgMzAsIDEsIDksIFRydWUpOworICAgc2VjdXJlIDo9IGYuYWxsICgxMSk7CisgICBmLmFsbCAoMTIpIDo9IE51bGxfRmllbGQ7CiAKICAgIG15Zm9ybSA6PSBOZXdfRm9ybSAoZik7CiAKZGlmZiAtLWdpdCBhL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItZGVtb19wYWQuYWRiIGIvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1kZW1vX3BhZC5hZGIKaW5kZXggODYyYjhiNy4uMDYyZWM1MyAxMDA2NDQKLS0tIGEvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1kZW1vX3BhZC5hZGIKKysrIGIvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1kZW1vX3BhZC5hZGIKQEAgLTcsNyArNyw3IEBACiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNiwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgMjAwMC0yMDExLDIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KIC0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQpAQCAtMzUsOCArMzUsOCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiBFdWdlbmUgVi4gTWVsYXJhZ25vIDxhbGRvbWVsQGl4Lm5ldGNvbS5jb20+IDIwMDAKIC0tICBWZXJzaW9uIENvbnRyb2wKLS0tICAkUmV2aXNpb246IDEuNyAkCi0tLSAgJERhdGU6IDIwMDgvMDcvMjYgMTg6NDc6MDYgJAorLS0gICRSZXZpc2lvbjogMS45ICQKKy0tICAkRGF0ZTogMjAxNC8wOS8xMyAxOToxMDoxOCAkCiAtLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHdpdGggbmN1cnNlczIudXRpbDsgdXNlIG5jdXJzZXMyLnV0aWw7CkBAIC0xMjEsOCArMTIxLDggQEAKICAgICAgICAgIHJldHZhbC5zZWNvbmRzIDo9IDA7CiAgICAgICAgICByZXR2YWwubWljcm9zZWNvbmRzIDo9IDA7CiAgICAgICBlbHNlCi0gICAgICAgICByZXR2YWwuc2Vjb25kcyA6PSBJbnRlZ2VyICh0LnR2X3NlYyk7Ci0gICAgICAgICByZXR2YWwubWljcm9zZWNvbmRzIDo9IEludGVnZXIgKHQudHZfdXNlYyk7CisgICAgICAgICByZXR2YWwuc2Vjb25kcyA6PSBJbnRlZ2VyICh0LmFsbC50dl9zZWMpOworICAgICAgICAgcmV0dmFsLm1pY3Jvc2Vjb25kcyA6PSBJbnRlZ2VyICh0LmFsbC50dl91c2VjKTsKICAgICAgIGVuZCBpZjsKICAgICAgIHJldHVybiByZXR2YWw7CiAgICBlbmQgZ2V0dGltZTsKQEAgLTQzNyw3ICs0MzcsOCBAQAogICAgICAgICAgICAgICAgLS0gIHBhbiByaWdodHdhcmRzCiAgICAgICAgICAgICAgICAtLSAgaWYgKGJhc2V4ICsgcG9ydHggLSAocHltYXggPiBwb3J0eSkgPCBweG1heCkKICAgICAgICAgICAgICAgIGlmIGJhc2V4ICsgcG9ydHggLQotICAgICAgICAgICAgICAgICAgIENvbHVtbl9Qb3NpdGlvbiAoZ3JlYXRlciAocHltYXgsIHBvcnR5KSkgPCBweG1heCB0aGVuCisgICAgICAgICAgICAgICAgICAgQ29sdW1uX1Bvc2l0aW9uIChncmVhdGVyIChweW1heCwgcG9ydHkpKSA8IHB4bWF4CisgICAgICAgICAgICAgICB0aGVuCiAgICAgICAgICAgICAgICAgICAtLSAgaWYgYmFzZXggKyBwb3J0eCAgPCBweG1heCBvcgogICAgICAgICAgICAgICAgICAgLS0gICAgICAocHltYXggPiBwb3J0eSBhbmQgYmFzZXggKyBwb3J0eCAtIDEgPCBweG1heCkgdGhlbgogICAgICAgICAgICAgICAgICAgYmFzZXggOj0gYmFzZXggKyAxOwpAQCAtNDU3LDcgKzQ1OCw4IEBACiAgICAgICAgICAgICAgICAtLSAgcGFuIGRvd253YXJkcwogICAgICAgICAgICAgICAgLS0gIHNhbWUgYXMgaWYgKGJhc2V5ICsgcG9ydHkgLSAocHhtYXggPiBwb3J0eCkgPCBweW1heCkKICAgICAgICAgICAgICAgIGlmIGJhc2V5ICsgcG9ydHkgLQotICAgICAgICAgICAgICAgICAgIExpbmVfUG9zaXRpb24gKGdyZWF0ZXIgKHB4bWF4LCBwb3J0eCkpIDwgcHltYXggdGhlbgorICAgICAgICAgICAgICAgICAgIExpbmVfUG9zaXRpb24gKGdyZWF0ZXIgKHB4bWF4LCBwb3J0eCkpIDwgcHltYXgKKyAgICAgICAgICAgICAgIHRoZW4KICAgICAgICAgICAgICAgICAgIC0tICBpZiAoYmFzZXkgKyBwb3J0eSAgPCBweW1heCkgb3IKICAgICAgICAgICAgICAgICAgIC0tICAgICAgKHB4bWF4ID4gcG9ydHggYW5kIGJhc2V5ICsgcG9ydHkgLSAxIDwgcHltYXgpIHRoZW4KICAgICAgICAgICAgICAgICAgIGJhc2V5IDo9IGJhc2V5ICsgMTsKZGlmZiAtLWdpdCBhL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItZGVtb19wYW5lbHMuYWRiIGIvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1kZW1vX3BhbmVscy5hZGIKaW5kZXggZDI1NThlZC4uOTY5M2UxYSAxMDA2NDQKLS0tIGEvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1kZW1vX3BhbmVscy5hZGIKKysrIGIvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1kZW1vX3BhbmVscy5hZGIKQEAgLTcsNyArNyw3IEBACiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNCwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgMjAwMC0yMDA4LDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KIC0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQpAQCAtMzUsOCArMzUsOCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiBFdWdlbmUgVi4gTWVsYXJhZ25vIDxhbGRvbWVsQGl4Lm5ldGNvbS5jb20+IDIwMDAKIC0tICBWZXJzaW9uIENvbnRyb2wKLS0tICAkUmV2aXNpb246IDEuNiAkCi0tLSAgJERhdGU6IDIwMDgvMDgvMzAgMjM6MzU6MDEgJAorLS0gICRSZXZpc2lvbjogMS43ICQKKy0tICAkRGF0ZTogMjAxMS8wMy8yMyAwMDo0NDoxMiAkCiAtLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHdpdGggbmN1cnNlczIudXRpbDsgdXNlIG5jdXJzZXMyLnV0aWw7CkBAIC0xMzksNyArMTM5LDcgQEAKIAogICAgcHJvY2VkdXJlIGZpbGxfcGFuZWwgKHBhbiA6IFBhbmVsKSBpcwogICAgICAgd2luIDogY29uc3RhbnQgV2luZG93IDo9IFBhbmVsX1dpbmRvdyAocGFuKTsKLSAgICAgIG51bSA6IGNvbnN0YW50IENoYXJhY3RlciA6PSBHZXRfVXNlcl9EYXRhIChwYW4pICgyKTsKKyAgICAgIG51bSA6IGNvbnN0YW50IENoYXJhY3RlciA6PSBHZXRfVXNlcl9EYXRhIChwYW4pLmFsbCAoMik7CiAgICAgICB0bXA2IDogU3RyaW5nICgxIC4uIDYpIDo9ICItcGFueC0iOwogICAgICAgbWF4eSA6IExpbmVfQ291bnQ7CiAgICAgICBtYXh4IDogQ29sdW1uX0NvdW50OwpkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1nZW5lcmljcHV0cy5hZGIgYi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWdlbmVyaWNwdXRzLmFkYgppbmRleCA2Y2E2NTgzLi44MjlkMDhkIDEwMDY0NAotLS0gYS9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWdlbmVyaWNwdXRzLmFkYgorKysgYi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWdlbmVyaWNwdXRzLmFkYgpAQCAtNyw3ICs3LDcgQEAKIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIENvcHlyaWdodCAoYykgMjAwMC0yMDA2LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSAyMDAwLTIwMDgsMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQogLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCkBAIC0zNSw4ICszNSw4IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC0tICBBdXRob3I6IEV1Z2VuZSBWLiBNZWxhcmFnbm8gPGFsZG9tZWxAaXgubmV0Y29tLmNvbT4gMjAwMAogLS0gIFZlcnNpb24gQ29udHJvbAotLS0gICRSZXZpc2lvbjogMS4zICQKLS0tICAkRGF0ZTogMjAwOC8wNy8yNiAxODo0NjoxOCAkCistLSAgJFJldmlzaW9uOiAxLjQgJAorLS0gICREYXRlOiAyMDA5LzEyLzI2IDE3OjM4OjU4ICQKIC0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogd2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsKQEAgLTQ0LDkgKzQ0LDkgQEAKIAogcGFja2FnZSBib2R5IG5jdXJzZXMyLmdlbmVyaWNQdXRzIGlzCiAKLSAgIHByb2NlZHVyZSBteUdldCAoV2luIDogaW4gIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICBwcm9jZWR1cmUgbXlHZXQgKFdpbiA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CiAgICAgICAgICAgICAgICAgICAgIFN0ciA6IG91dCBCUy5Cb3VuZGVkX1N0cmluZzsKLSAgICAgICAgICAgICAgICAgICAgTGVuIDogaW4gIEludGVnZXIgOj0gLTEpCisgICAgICAgICAgICAgICAgICAgIExlbiA6IEludGVnZXIgOj0gLTEpCiAgICBpcwogICAgICAgZnVuY3Rpb24gV2dldG5zdHIgKFdpbiA6IFdpbmRvdzsKICAgICAgICAgICAgICAgICAgICAgICAgICBTdHIgOiBjaGFyX2FycmF5OwpAQCAtNzQsNyArNzQsNyBAQAogCiAgICBwcm9jZWR1cmUgbXlQdXQgKFN0ciAgOiBvdXQgQlMuQm91bmRlZF9TdHJpbmc7CiAgICAgICAgICAgICAgICAgICAgIGkgICAgOiBJbnRlZ2VyOwotICAgICAgICAgICAgICAgICAgICBCYXNlIDogaW4gICAgIE51bWJlcl9CYXNlIDo9IDEwKSBpcworICAgICAgICAgICAgICAgICAgICBCYXNlIDogTnVtYmVyX0Jhc2UgOj0gMTApIGlzCiAgICAgICBwYWNrYWdlIEludF9JTyBpcyBuZXcgSW50ZWdlcl9JTyAoSW50ZWdlcik7IHVzZSBJbnRfSU87CiAgICAgICB0bXAgOiBTdHJpbmcgKDEgLi4gQlMuTWF4X0xlbmd0aCk7CiAgICBiZWdpbgpAQCAtODksNyArODksNyBAQAogICAgZW5kIG15QWRkOwogCiAgICAtLSAgZnJvbSBuY3Vyc2VzLWF1eAotICAgcHJvY2VkdXJlIEZpbGxfU3RyaW5nIChDcCAgOiBpbiAgY2hhcnNfcHRyOworICAgcHJvY2VkdXJlIEZpbGxfU3RyaW5nIChDcCAgOiBjaGFyc19wdHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0ciA6IG91dCBCUy5Cb3VuZGVkX1N0cmluZykKICAgIGlzCiAgICAgICAtLSAgRmlsbCB0aGUgc3RyaW5nIHdpdGggdGhlIGNoYXJhY3RlcnMgcmVmZXJlbmNlZCBieSB0aGUKZGlmZiAtLWdpdCBhL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItZ2VuZXJpY3B1dHMuYWRzIGIvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1nZW5lcmljcHV0cy5hZHMKaW5kZXggMTYxNGExMS4uYWNjYzNjYyAxMDA2NDQKLS0tIGEvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1nZW5lcmljcHV0cy5hZHMKKysrIGIvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1nZW5lcmljcHV0cy5hZHMKQEAgLTcsNyArNyw3IEBACiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBDb3B5cmlnaHQgKGMpIDIwMDAsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgMjAwMC0yMDA2LDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KIC0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQpAQCAtMzUsOCArMzUsOCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiBFdWdlbmUgVi4gTWVsYXJhZ25vIDxhbGRvbWVsQGl4Lm5ldGNvbS5jb20+IDIwMDAKIC0tICBWZXJzaW9uIENvbnRyb2wKLS0tICAkUmV2aXNpb246IDEuMiAkCi0tLSAgJERhdGU6IDIwMDYvMDYvMjUgMTQ6MjQ6NDAgJAorLS0gICRSZXZpc2lvbjogMS4zICQKKy0tICAkRGF0ZTogMjAwOS8xMi8yNiAxNzozODo1OCAkCiAtLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtNTYsMTcgKzU2LDE3IEBACiAgICAgIEFkYS5TdHJpbmdzLkJvdW5kZWQuR2VuZXJpY19Cb3VuZGVkX0xlbmd0aCAoTWF4KTsKICAgIHVzZSBCUzsKIAotICAgcHJvY2VkdXJlIG15R2V0IChXaW4gOiBpbiAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5XaW5kb3cKLSAgICAgICAgICAgICAgICAgICAgICA6PSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlN0YW5kYXJkX1dpbmRvdzsKKyAgIHByb2NlZHVyZSBteUdldCAoV2luIDogVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5XaW5kb3cKKyAgICAgICAgICAgICAgICAgICAgICAgOj0gVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5TdGFuZGFyZF9XaW5kb3c7CiAgICAgICAgICAgICAgICAgICAgIFN0ciA6IG91dCBCUy5Cb3VuZGVkX1N0cmluZzsKLSAgICAgICAgICAgICAgICAgICAgTGVuIDogaW4gIEludGVnZXIgOj0gLTEpOworICAgICAgICAgICAgICAgICAgICBMZW4gOiAgSW50ZWdlciA6PSAtMSk7CiAKLSAgIHByb2NlZHVyZSBteVB1dCAoU3RyIDogb3V0IEJTLkJvdW5kZWRfU3RyaW5nOwotICAgICAgICAgICAgICAgICAgICBpIDogSW50ZWdlcjsKLSAgICAgICAgICAgICAgICAgICAgQmFzZSA6IGluIE51bWJlcl9CYXNlIDo9IDEwKTsKKyAgIHByb2NlZHVyZSBteVB1dCAoU3RyICA6IG91dCBCUy5Cb3VuZGVkX1N0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgaSAgICA6IEludGVnZXI7CisgICAgICAgICAgICAgICAgICAgIEJhc2UgOiBOdW1iZXJfQmFzZSA6PSAxMCk7CiAgICAtLSAgdGhlIGRlZmF1bHQgc2hvdWxkIGJlIEFkYS5UZXh0X0lPLkludGVnZXJfSU8uRGVmYXVsdF9CYXNlCiAgICAtLSAgYnV0IERlZmF1bHRfQmFzZSBpcyBoaWRkZW4gaW4gdGhlIGdlbmVyaWMgc28gZG9lc24ndCBleGlzdCEKICAgIHByb2NlZHVyZSBteUFkZCAoU3RyIDogQlMuQm91bmRlZF9TdHJpbmcpOwogCi0gICBwcm9jZWR1cmUgRmlsbF9TdHJpbmcgKENwICA6IGluICBjaGFyc19wdHI7IFN0ciA6IG91dCBCUy5Cb3VuZGVkX1N0cmluZyk7CisgICBwcm9jZWR1cmUgRmlsbF9TdHJpbmcgKENwIDogY2hhcnNfcHRyOyBTdHIgOiBvdXQgQlMuQm91bmRlZF9TdHJpbmcpOwogZW5kIG5jdXJzZXMyLmdlbmVyaWNQdXRzOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1nZXRjaF90ZXN0LmFkYiBiL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItZ2V0Y2hfdGVzdC5hZGIKaW5kZXggMTcyMzEyYy4uOGYwMjBlNyAxMDA2NDQKLS0tIGEvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1nZXRjaF90ZXN0LmFkYgorKysgYi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWdldGNoX3Rlc3QuYWRiCkBAIC03LDcgKzcsNyBAQAogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gQ29weXJpZ2h0IChjKSAyMDAwLTIwMDYsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwOSwyMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCiAtLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KQEAgLTM1LDggKzM1LDggQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLS0gIEF1dGhvcjogRXVnZW5lIFYuIE1lbGFyYWdubyA8YWxkb21lbEBpeC5uZXRjb20uY29tPiAyMDAwCiAtLSAgVmVyc2lvbiBDb250cm9sCi0tLSAgJFJldmlzaW9uOiAxLjcgJAotLS0gICREYXRlOiAyMDA4LzA3LzI2IDE4OjQ2OjU4ICQKKy0tICAkUmV2aXNpb246IDEuOSAkCistLSAgJERhdGU6IDIwMTQvMDkvMTMgMTk6MTA6MTggJAogLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQ2hhcmFjdGVyIGlucHV0IHRlc3QKQEAgLTIwNSwxMyArMjA1LDE1IEBACiAgICAgICAgICAgICAgICBBZGQgKFN0ciA9PiAiIEkgc2F3ICciKTsKICAgICAgICAgICAgICAgIG15QWRkIChTdHIgPT4gYm91bmRlZGJ1Zik7CiAgICAgICAgICAgICAgICBBZGQgKFN0ciA9PiAiJy4iKTsKLSAgICAgICAgICAgICAgIEFkZCAoY2ggPT4gbmV3bCk7CisgICAgICAgICAgICAgICBBZGQgKENoID0+IG5ld2wpOwogICAgICAgICAgICAgZW5kIGlmOwogICAgICAgICAgZW5kOwogICAgICAgZWxzaWYgYyA9IENoYXJhY3RlcidQb3MgKCdzJykgdGhlbgogICAgICAgICAgU2hlbGxPdXQgKFRydWUpOwotICAgICAgZWxzaWYgYyA9IENoYXJhY3RlcidQb3MgKCd4Jykgb3IgYyA9IENoYXJhY3RlcidQb3MgKCdxJykgb3IKLSAgICAgICAgKGMgPSBLZXlfTm9uZSBhbmQgYmxvY2tmbGFnID0gQmxvY2tpbmcpIHRoZW4KKyAgICAgIGVsc2lmIGMgPSBDaGFyYWN0ZXInUG9zICgneCcpIG9yCisgICAgICAgICAgICBjID0gQ2hhcmFjdGVyJ1BvcyAoJ3EnKSBvcgorICAgICAgICAgICAoYyA9IEtleV9Ob25lIGFuZCBibG9ja2ZsYWcgPSBCbG9ja2luZykKKyAgICAgIHRoZW4KICAgICAgICAgIGV4aXQ7CiAgICAgICBlbHNpZiBjID0gQ2hhcmFjdGVyJ1BvcyAoJz8nKSB0aGVuCiAgICAgICAgICBBZGQgKFN0ciA9PiAiVHlwZSBhbnkga2V5IHRvIHNlZSBpdHMga2V5cGFkIHZhbHVlLiAgQWxzbzoiKTsKZGlmZiAtLWdpdCBhL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItZ2V0b3B0LmFkYiBiL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItZ2V0b3B0LmFkYgppbmRleCAyMzhjNDM5Li4yOWYxZmVlIDEwMDY0NAotLS0gYS9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWdldG9wdC5hZGIKKysrIGIvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1nZXRvcHQuYWRiCkBAIC03LDcgKzcsNyBAQAogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gQ29weXJpZ2h0IChjKSAyMDAwLTIwMDQsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwOCwyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCiAtLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KQEAgLTM1LDggKzM1LDggQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLS0gIEF1dGhvcjogRXVnZW5lIFYuIE1lbGFyYWdubyA8YWxkb21lbEBpeC5uZXRjb20uY29tPiAyMDAwCiAtLSAgVmVyc2lvbiBDb250cm9sCi0tLSAgJFJldmlzaW9uOiAxLjcgJAotLS0gICREYXRlOiAyMDA4LzA3LzI2IDE4OjQ2OjQ0ICQKKy0tICAkUmV2aXNpb246IDEuOCAkCistLSAgJERhdGU6IDIwMTEvMDMvMTkgMTI6MDk6NTEgJAogLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQSBzaW1wbGlmaWVkIHZlcnNpb24gb2YgdGhlICBHTlUgZ2V0b3B0IGZ1bmN0aW9uCkBAIC01Niw3ICs1Niw3IEBACiAgICAtLSAgYWxzbyB0aGUgdXNlciBpcyBub3QgYWxsb3dlZCB0byBtb2RpZnkgYXJndiBvciBhcmdjCiAgICAtLSAgRG9pbmcgc28gaXMgRXJyb25lb3VzIGV4ZWN1dGlvbi4KIAotICAgLS0gIGxvbmdvcHRpb25zIGFyZSBub3QgaGFuZGxlZC4KKyAgIC0tICBsb25nIG9wdGlvbnMgYXJlIG5vdCBoYW5kbGVkLgogCiAgICBwcm9jZWR1cmUgUWdldG9wdCAocmV0dmFsIDogb3V0IEludGVnZXI7CiAgICAgICAgICAgICAgICAgICAgICAgYXJnYyA6IEludGVnZXI7CkBAIC02Nyw3ICs2Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAtLSAgaWdub3JlZCBmb3IgbmN1cnNlcywgbXVzdCBiZSBpbml0aWFsaXplZCB0byAxIGJ5CiAgICAgICAgICAgICAgICAgICAgICAgICAtLSAgdGhlIGNhbGxlcgogICAgICAgICAgICAgICAgICAgICAgIE9wdGFyZyA6IG91dCBzdHJpbmdhCi0gICAgICAgICAgICAgICAgICAgICAgICAtLSAgYSBnYXJiYWdlIGNvbGVjdG9yIHdvdWxkIGJlIHVzZWZ1bCBoZXJlLgorICAgICAgICAgICAgICAgICAgICAgICAgLS0gIGEgZ2FyYmFnZSBjb2xsZWN0b3Igd291bGQgYmUgdXNlZnVsIGhlcmUuCiAgICAgICAgICAgICAgICAgICAgICApIGlzCiAKICAgICAgIHBhY2thZ2UgQlMgaXMgbmV3IEFkYS5TdHJpbmdzLkJvdW5kZWQuR2VuZXJpY19Cb3VuZGVkX0xlbmd0aCAoMjAwKTsKZGlmZiAtLWdpdCBhL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItbWVudV90ZXN0LmFkYiBiL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItbWVudV90ZXN0LmFkYgppbmRleCBhNGM0ODA3Li5iY2U5NzgyIDEwMDY0NAotLS0gYS9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLW1lbnVfdGVzdC5hZGIKKysrIGIvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1tZW51X3Rlc3QuYWRiCkBAIC03LDcgKzcsNyBAQAogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gQ29weXJpZ2h0IChjKSAyMDAwLTIwMDQsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNiwyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCiAtLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KQEAgLTM1LDggKzM1LDggQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLS0gIEF1dGhvcjogRXVnZW5lIFYuIE1lbGFyYWdubyA8YWxkb21lbEBpeC5uZXRjb20uY29tPiAyMDAwCiAtLSAgVmVyc2lvbiBDb250cm9sCi0tLSAgJFJldmlzaW9uOiAxLjYgJAotLS0gICREYXRlOiAyMDA2LzA2LzI1IDE0OjI0OjQwICQKKy0tICAkUmV2aXNpb246IDEuOCAkCistLSAgJERhdGU6IDIwMTEvMDMvMjMgMDA6Mzk6MjggJAogLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB3aXRoIG5jdXJzZXMyLnV0aWw7IHVzZSBuY3Vyc2VzMi51dGlsOwpAQCAtNDYsMTAgKzQ2LDEwIEBACiB3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuTW91c2U7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLk1vdXNlOwogCiBwcm9jZWR1cmUgbmN1cnNlczIubWVudV90ZXN0IGlzCi0gICBmdW5jdGlvbiBtZW51X3ZpcnR1YWxpemUgKGMgOiBLZXlfQ29kZSkgcmV0dXJuIE1lbnVfUmVxdWVzdF9Db2RlOworICAgZnVuY3Rpb24gbWVudV92aXJ0dWFsaXplIChjIDogS2V5X0NvZGUpIHJldHVybiBLZXlfQ29kZTsKICAgIHByb2NlZHVyZSB4QWRkIChsIDogTGluZV9Qb3NpdGlvbjsgYyA6IENvbHVtbl9Qb3NpdGlvbjsgcyA6IFN0cmluZyk7CiAKLSAgIGZ1bmN0aW9uIG1lbnVfdmlydHVhbGl6ZSAoYyA6IEtleV9Db2RlKSByZXR1cm4gTWVudV9SZXF1ZXN0X0NvZGUgaXMKKyAgIGZ1bmN0aW9uIG1lbnVfdmlydHVhbGl6ZSAoYyA6IEtleV9Db2RlKSByZXR1cm4gS2V5X0NvZGUgaXMKICAgIGJlZ2luCiAgICAgICBjYXNlIGMgaXMKICAgICAgICAgIHdoZW4gQ2hhcmFjdGVyJ1BvcyAobmV3bCkgfCBLZXlfRXhpdCA9PgpAQCAtMTEwLDcgKzExMCw3IEBACiAgICBjMSA6IEtleV9Db2RlOwogCiAgICBjIDogRHJpdmVyX1Jlc3VsdDsKLSAgIHIgOiBNZW51X1JlcXVlc3RfQ29kZTsKKyAgIHIgOiBLZXlfQ29kZTsKIGJlZ2luCiAgICB0bXAgOj0gU3RhcnRfTW91c2U7CiAgICB4QWRkICgwLCAwLCAiVGhpcyBpcyB0aGUgbWVudSB0ZXN0OiIpOwpAQCAtMTIxLDkgKzEyMSw5IEBACiAgICBSZWZyZXNoOwogCiAgICBmb3IgaSBpbiBhbmltYWxzJ1JhbmdlIGxvb3AKLSAgICAgIGl0ZW1zX2EgKGkpIDo9IE5ld19JdGVtIChhbmltYWxzIChpKS5hbGwpOworICAgICAgaXRlbXNfYS5hbGwgKGkpIDo9IE5ld19JdGVtIChhbmltYWxzIChpKS5hbGwpOwogICAgZW5kIGxvb3A7Ci0gICBpdGVtc19hIChhbmltYWxzJ0xhc3QgKyAxKSA6PSBOdWxsX0l0ZW07CisgICBpdGVtc19hLmFsbCAoYW5pbWFscydMYXN0ICsgMSkgOj0gTnVsbF9JdGVtOwogCiAgICBtIDo9IE5ld19NZW51IChpdGVtc19hKTsKIApkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1vdmVybGFwX3Rlc3QuYWRiIGIvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1vdmVybGFwX3Rlc3QuYWRiCmluZGV4IDM3ZThkNGMuLjk0OGIyYjMgMTAwNjQ0Ci0tLSBhL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItb3ZlcmxhcF90ZXN0LmFkYgorKysgYi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLW92ZXJsYXBfdGVzdC5hZGIKQEAgLTcsNyArNyw3IEBACiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBDb3B5cmlnaHQgKGMpIDIwMDAsMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgMjAwMC0yMDE0LDIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KIC0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQpAQCAtMzUsOCArMzUsOCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiBFdWdlbmUgVi4gTWVsYXJhZ25vIDxhbGRvbWVsQGl4Lm5ldGNvbS5jb20+IDIwMDAKIC0tICBWZXJzaW9uIENvbnRyb2wKLS0tICAkUmV2aXNpb246IDEuNCAkCi0tLSAgJERhdGU6IDIwMDQvMDgvMjEgMjE6Mzc6MDAgJAorLS0gICRSZXZpc2lvbjogMS43ICQKKy0tICAkRGF0ZTogMjAxNS8wNy8yNSAyMzo0MzoxOSAkCiAtLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHdpdGggbmN1cnNlczIudXRpbDsgdXNlIG5jdXJzZXMyLnV0aWw7CkBAIC03Miw4ICs3Miw5IEBACiAgICAgICBHZXRfU2l6ZSAod2luLCB5MSwgeDEpOwogICAgICAgZm9yIHkgaW4gMCAuLiB5MSAtIDEgbG9vcAogICAgICAgICAgZm9yIHggaW4gMCAuLiB4MSAtIDEgbG9vcAotICAgICAgICAgICAgaWYgKCh4ID4gKHgxIC0gMSkgLyAzKSBhbmQgKHggPD0gKDIgKiAoeDEgLSAxKSkgLyAzKSkKLSAgICAgICAgICAgICAgICBvciAoKCh5ID4gKHkxIC0gMSkgLyAzKSBhbmQgKHkgPD0gKDIgKiAoeTEgLSAxKSkgLyAzKSkpIHRoZW4KKyAgICAgICAgICAgIGlmICgoeCA+ICh4MSAtIDEpIC8gMykgYW5kICh4IDw9ICgyICogKHgxIC0gMSkpIC8gMykpIG9yCisgICAgICAgICAgICAgICAoKCh5ID4gKHkxIC0gMSkgLyAzKSBhbmQgKHkgPD0gKDIgKiAoeTEgLSAxKSkgLyAzKSkpCisgICAgICAgICAgICB0aGVuCiAgICAgICAgICAgICAgICBNb3ZlX0N1cnNvciAod2luLCB5LCB4KTsKICAgICAgICAgICAgICAgIEFkZCAod2luLCBDaCA9PiBjaCk7CiAgICAgICAgICAgICBlbmQgaWY7CkBAIC05Myw3ICs5NCw3IEBACiAgICBBZGQgKFN0ciA9PiAiVGhpcyB0ZXN0IHNob3dzIHRoZSBiZWhhdmlvciBvZiB3bm91dHJlZnJlc2goKSB3aXRoICIgJgogICAgICAgICAicmVzcGVjdCB0byIpOwogICAgQWRkIChDaCA9PiBuZXdsKTsKLSAgIEFkZCAoU3RyID0+ICJ0aGUgc2hhcmVkIHJlZ2lvbiBvZiB0d28gb3ZlcmxhcHBpbmcgd2luZG93cyBBIGFuZCBCLiAiJgorICAgQWRkIChTdHIgPT4gInRoZSBzaGFyZWQgcmVnaW9uIG9mIHR3byBvdmVybGFwcGluZyB3aW5kb3dzIEEgYW5kIEIuICIgJgogICAgICAgICAiVGhlIGNyb3NzIik7CiAgICBBZGQgKENoID0+IG5ld2wpOwogICAgQWRkIChTdHIgPT4gInBhdHRlcm4gaW4gZWFjaCB3aW5kb3cgZG9lcyBub3Qgb3ZlcmxhcCB0aGUgb3RoZXIuIik7CkBAIC0xMDEsNyArMTAyLDcgQEAKIAogICAgTW92ZV9DdXJzb3IgKExpbmUgPT4gMTgsIENvbHVtbiA9PiAwKTsKICAgIEFkZCAoU3RyID0+ICJhID0gcmVmcmVzaCBBLCB0aGVuIEIsIHRoZW4gZG91cGRhdGUuIGIgPSByZWZyZXNoIEIsICIgJgotICAgICAgICAidGhlbiBBLCB0aGVuIGRvdXBkYXV0ZSIpOworICAgICAgICAidGhlbiBBLCB0aGVuIGRvdXBkYXRlIik7CiAgICBBZGQgKENoID0+IG5ld2wpOwogICAgQWRkIChTdHIgPT4gImMgPSBmaWxsIHdpbmRvdyBBIHdpdGggbGV0dGVyIEEuICAgICAgZCA9IGZpbGwgd2luZG93IEIgIiAmCiAgICAgICAgICJ3aXRoIGxldHRlciBCLiIpOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1zbGtfdGVzdC5hZGIgYi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLXNsa190ZXN0LmFkYgppbmRleCA4YmZlZTRlLi5hYTM2OGJhIDEwMDY0NAotLS0gYS9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLXNsa190ZXN0LmFkYgorKysgYi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLXNsa190ZXN0LmFkYgpAQCAtNyw3ICs3LDcgQEAKIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIENvcHlyaWdodCAoYykgMjAwMC0yMDA0LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSAyMDAwLTIwMDksMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQogLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCkBAIC0zNSw4ICszNSw4IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC0tICBBdXRob3I6IEV1Z2VuZSBWLiBNZWxhcmFnbm8gPGFsZG9tZWxAaXgubmV0Y29tLmNvbT4gMjAwMAogLS0gIFZlcnNpb24gQ29udHJvbAotLS0gICRSZXZpc2lvbjogMS43ICQKLS0tICAkRGF0ZTogMjAwNi8wNi8yNSAxNDoyNDo0MCAkCistLSAgJFJldmlzaW9uOiAxLjkgJAorLS0gICREYXRlOiAyMDExLzAzLzE5IDEyOjAzOjA4ICQKIC0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogd2l0aCBuY3Vyc2VzMi51dGlsOyB1c2UgbmN1cnNlczIudXRpbDsKQEAgLTQ3LDEzICs0NywxMyBAQAogd2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkF1eDsKIAogcHJvY2VkdXJlIG5jdXJzZXMyLnNsa190ZXN0IGlzCi0gICBwcm9jZWR1cmUgbXlHZXQgKFdpbiA6IGluICBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgcHJvY2VkdXJlIG15R2V0IChXaW4gOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OwogICAgICAgICAgICAgICAgICAgICBTdHIgOiBvdXQgQWRhLlN0cmluZ3MuVW5ib3VuZGVkLlVuYm91bmRlZF9TdHJpbmc7Ci0gICAgICAgICAgICAgICAgICAgIExlbiA6IGluICBJbnRlZ2VyIDo9IC0xKTsKKyAgICAgICAgICAgICAgICAgICAgTGVuIDogSW50ZWdlciA6PSAtMSk7CiAKLSAgIHByb2NlZHVyZSBteUdldCAoV2luIDogaW4gIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICBwcm9jZWR1cmUgbXlHZXQgKFdpbiA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CiAgICAgICAgICAgICAgICAgICAgIFN0ciA6IG91dCBBZGEuU3RyaW5ncy5VbmJvdW5kZWQuVW5ib3VuZGVkX1N0cmluZzsKLSAgICAgICAgICAgICAgICAgICAgTGVuIDogaW4gIEludGVnZXIgOj0gLTEpCisgICAgICAgICAgICAgICAgICAgIExlbiA6IEludGVnZXIgOj0gLTEpCiAgICBpcwogICAgICAgdXNlIEFkYS5TdHJpbmdzLlVuYm91bmRlZDsKICAgICAgIHVzZSBJbnRlcmZhY2VzLkM7CkBAIC0xNjEsNyArMTYxLDcgQEAKICAgICAgICAgIHdoZW4gJ3gnIHwgJ3EnID0+CiAgICAgICAgICAgICBleGl0OwogICAgICAgICAgICAgLS0gIHRoZSBDIHZlcnNpb24gbmVlZGVkIGEgZ290bywgaGEgaGEKLSAgICAgICAgICAgIC0tICBicmVha3MgZXhpdCB0aGUgY2FzZSBub3QgdGhlIGxvb3AgYmVjYXVzZSBmYWxsLXRocm91aAorICAgICAgICAgICAgLS0gIGJyZWFrcyBleGl0IHRoZSBjYXNlIG5vdCB0aGUgbG9vcCBiZWNhdXNlIGZhbGwtdGhyb3VnaAogICAgICAgICAgICAgLS0gIGhhcHBlbnMgaW4gQyEKICAgICAgICAgIHdoZW4gb3RoZXJzID0+CiAgICAgICAgICAgICBCZWVwOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi10cmFjZV9zZXQuYWRiIGIvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi10cmFjZV9zZXQuYWRiCmluZGV4IDFlMjcxNmUuLmRmNDQ2OGIgMTAwNjQ0Ci0tLSBhL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItdHJhY2Vfc2V0LmFkYgorKysgYi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLXRyYWNlX3NldC5hZGIKQEAgLTcsNyArNyw3IEBACiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNiwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgMjAwMC0yMDExLDIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KIC0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQpAQCAtMzUsOCArMzUsOCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiBFdWdlbmUgVi4gTWVsYXJhZ25vIDxhbGRvbWVsQGl4Lm5ldGNvbS5jb20+IDIwMDAKIC0tICBWZXJzaW9uIENvbnRyb2wKLS0tICAkUmV2aXNpb246IDEuMyAkCi0tLSAgJERhdGU6IDIwMDgvMDcvMjYgMTg6NDY6MTggJAorLS0gICRSZXZpc2lvbjogMS42ICQKKy0tICAkRGF0ZTogMjAxNC8wOS8xMyAxOToxMDoxOCAkCiAtLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHdpdGggbmN1cnNlczIudXRpbDsgdXNlIG5jdXJzZXMyLnV0aWw7CkBAIC01MCwxNCArNTAsMTQgQEAKIAogcHJvY2VkdXJlIG5jdXJzZXMyLnRyYWNlX3NldCBpcwogCi0gICBmdW5jdGlvbiBtZW51X3ZpcnR1YWxpemUgKGMgOiBLZXlfQ29kZSkgcmV0dXJuIE1lbnVfUmVxdWVzdF9Db2RlOworICAgZnVuY3Rpb24gbWVudV92aXJ0dWFsaXplIChjIDogS2V5X0NvZGUpIHJldHVybiBLZXlfQ29kZTsKICAgIGZ1bmN0aW9uIHN1YnNldCAoc3VwZXIsIHN1YiA6IFRyYWNlX0F0dHJpYnV0ZV9TZXQpIHJldHVybiBCb29sZWFuOwogICAgZnVuY3Rpb24gdHJhY2Vfb3IgKGEsIGIgOiBUcmFjZV9BdHRyaWJ1dGVfU2V0KSByZXR1cm4gVHJhY2VfQXR0cmlidXRlX1NldDsKICAgIGZ1bmN0aW9uIHRyYWNlX251bSAodGxldmVsIDogVHJhY2VfQXR0cmlidXRlX1NldCkgcmV0dXJuIFN0cmluZzsKICAgIGZ1bmN0aW9uIHRyYWNldHJhY2UgKHRsZXZlbCA6IFRyYWNlX0F0dHJpYnV0ZV9TZXQpIHJldHVybiBTdHJpbmc7CiAgICBmdW5jdGlvbiBydW5fdHJhY2VfbWVudSAobSA6IE1lbnU7IGNvdW50IDogSW50ZWdlcikgcmV0dXJuIEJvb2xlYW47CiAKLSAgIGZ1bmN0aW9uIG1lbnVfdmlydHVhbGl6ZSAoYyA6IEtleV9Db2RlKSByZXR1cm4gTWVudV9SZXF1ZXN0X0NvZGUgaXMKKyAgIGZ1bmN0aW9uIG1lbnVfdmlydHVhbGl6ZSAoYyA6IEtleV9Db2RlKSByZXR1cm4gS2V5X0NvZGUgaXMKICAgIGJlZ2luCiAgICAgICBjYXNlIGMgaXMKICAgICAgICAgIHdoZW4gQ2hhcmFjdGVyJ1BvcyAobmV3bCkgfCBLZXlfRXhpdCA9PgpAQCAtMTQxLDcgKzE0MSw4IEBACiAgICAgICAgIChzdXBlci5JbnRlcm5hbF9DYWxscyBvciBub3Qgc3ViLkludGVybmFsX0NhbGxzKSBhbmQKICAgICAgICAgKHN1cGVyLkNoYXJhY3Rlcl9DYWxscyBvciBub3Qgc3ViLkNoYXJhY3Rlcl9DYWxscykgYW5kCiAgICAgICAgIChzdXBlci5UZXJtY2FwX1Rlcm1JbmZvIG9yIG5vdCBzdWIuVGVybWNhcF9UZXJtSW5mbykgYW5kCi0gICAgICAgIFRydWUgdGhlbgorICAgICAgICBUcnVlCisgICAgICB0aGVuCiAgICAgICAgICByZXR1cm4gVHJ1ZTsKICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiBGYWxzZTsKQEAgLTI1MCw5MyArMjUxLDEwNyBAQAogICAgICAgZWxzZQogCiAgICAgICAgICBpZiBzdWJzZXQgKHRsZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgVHJhY2VfQXR0cmlidXRlX1NldCcoVGltZXMgPT4gVHJ1ZSwgb3RoZXJzID0+IEZhbHNlKSkgdGhlbgorICAgICAgICAgICAgICAgICAgICBUcmFjZV9BdHRyaWJ1dGVfU2V0JyhUaW1lcyA9PiBUcnVlLCBvdGhlcnMgPT4gRmFsc2UpKQorICAgICAgICAgdGhlbgogICAgICAgICAgICAgQXBwZW5kIChidWYsICJUaW1lcyIpOwogICAgICAgICAgICAgQXBwZW5kIChidWYsICIsICIpOwogICAgICAgICAgZW5kIGlmOwogCiAgICAgICAgICBpZiBzdWJzZXQgKHRsZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgVHJhY2VfQXR0cmlidXRlX1NldCcoVHB1dHMgPT4gVHJ1ZSwgb3RoZXJzID0+IEZhbHNlKSkgdGhlbgorICAgICAgICAgICAgICAgICAgICBUcmFjZV9BdHRyaWJ1dGVfU2V0JyhUcHV0cyA9PiBUcnVlLCBvdGhlcnMgPT4gRmFsc2UpKQorICAgICAgICAgdGhlbgogICAgICAgICAgICAgQXBwZW5kIChidWYsICJUcHV0cyIpOwogICAgICAgICAgICAgQXBwZW5kIChidWYsICIsICIpOwogICAgICAgICAgZW5kIGlmOwogCiAgICAgICAgICBpZiBzdWJzZXQgKHRsZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgVHJhY2VfQXR0cmlidXRlX1NldCcoVXBkYXRlID0+IFRydWUsIG90aGVycyA9PiBGYWxzZSkpIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgVHJhY2VfQXR0cmlidXRlX1NldCcoVXBkYXRlID0+IFRydWUsIG90aGVycyA9PiBGYWxzZSkpCisgICAgICAgICB0aGVuCiAgICAgICAgICAgICBBcHBlbmQgKGJ1ZiwgIlVwZGF0ZSIpOwogICAgICAgICAgICAgQXBwZW5kIChidWYsICIsICIpOwogICAgICAgICAgZW5kIGlmOwogCiAgICAgICAgICBpZiBzdWJzZXQgKHRsZXZlbCwKICAgICAgICAgICAgICAgICAgICAgVHJhY2VfQXR0cmlidXRlX1NldCcoQ3Vyc29yX01vdmUgPT4gVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJzID0+IEZhbHNlKSkgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlcnMgPT4gRmFsc2UpKQorICAgICAgICAgdGhlbgogICAgICAgICAgICAgQXBwZW5kIChidWYsICJDdXJzb3JfTW92ZSIpOwogICAgICAgICAgICAgQXBwZW5kIChidWYsICIsICIpOwogICAgICAgICAgZW5kIGlmOwogCiAgICAgICAgICBpZiBzdWJzZXQgKHRsZXZlbCwKICAgICAgICAgICAgICAgICAgICAgVHJhY2VfQXR0cmlidXRlX1NldCcoQ2hhcmFjdGVyX091dHB1dCA9PiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlcnMgPT4gRmFsc2UpKSB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVycyA9PiBGYWxzZSkpCisgICAgICAgICB0aGVuCiAgICAgICAgICAgICBBcHBlbmQgKGJ1ZiwgIkNoYXJhY3Rlcl9PdXRwdXQiKTsKICAgICAgICAgICAgIEFwcGVuZCAoYnVmLCAiLCAiKTsKICAgICAgICAgIGVuZCBpZjsKIAogICAgICAgICAgaWYgc3Vic2V0ICh0bGV2ZWwsCi0gICAgICAgICAgICAgICAgICAgIFRyYWNlX09yZGluYXJ5KSB0aGVuCisgICAgICAgICAgICAgICAgICAgIFRyYWNlX09yZGluYXJ5KQorICAgICAgICAgdGhlbgogICAgICAgICAgICAgQXBwZW5kIChidWYsICJPcmRpbmFyeSIpOwogICAgICAgICAgICAgQXBwZW5kIChidWYsICIsICIpOwogICAgICAgICAgZW5kIGlmOwogCiAgICAgICAgICBpZiBzdWJzZXQgKHRsZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgVHJhY2VfQXR0cmlidXRlX1NldCcoQ2FsbHMgPT4gVHJ1ZSwgb3RoZXJzID0+IEZhbHNlKSkgdGhlbgorICAgICAgICAgICAgICAgICAgICBUcmFjZV9BdHRyaWJ1dGVfU2V0JyhDYWxscyA9PiBUcnVlLCBvdGhlcnMgPT4gRmFsc2UpKQorICAgICAgICAgdGhlbgogICAgICAgICAgICAgQXBwZW5kIChidWYsICJDYWxscyIpOwogICAgICAgICAgICAgQXBwZW5kIChidWYsICIsICIpOwogICAgICAgICAgZW5kIGlmOwogCiAgICAgICAgICBpZiBzdWJzZXQgKHRsZXZlbCwKICAgICAgICAgICAgICAgICAgICAgVHJhY2VfQXR0cmlidXRlX1NldCcoVmlydHVhbF9QdXRzID0+IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVycyA9PiBGYWxzZSkpIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJzID0+IEZhbHNlKSkKKyAgICAgICAgIHRoZW4KICAgICAgICAgICAgIEFwcGVuZCAoYnVmLCAiVmlydHVhbF9QdXRzIik7CiAgICAgICAgICAgICBBcHBlbmQgKGJ1ZiwgIiwgIik7CiAgICAgICAgICBlbmQgaWY7CiAKICAgICAgICAgIGlmIHN1YnNldCAodGxldmVsLAogICAgICAgICAgICAgICAgICAgICBUcmFjZV9BdHRyaWJ1dGVfU2V0JyhJbnB1dF9FdmVudHMgPT4gVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJzID0+IEZhbHNlKSkgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlcnMgPT4gRmFsc2UpKQorICAgICAgICAgdGhlbgogICAgICAgICAgICAgQXBwZW5kIChidWYsICJJbnB1dF9FdmVudHMiKTsKICAgICAgICAgICAgIEFwcGVuZCAoYnVmLCAiLCAiKTsKICAgICAgICAgIGVuZCBpZjsKIAogICAgICAgICAgaWYgc3Vic2V0ICh0bGV2ZWwsCiAgICAgICAgICAgICAgICAgICAgIFRyYWNlX0F0dHJpYnV0ZV9TZXQnKFRUWV9TdGF0ZSA9PiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlcnMgPT4gRmFsc2UpKSB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVycyA9PiBGYWxzZSkpCisgICAgICAgICB0aGVuCiAgICAgICAgICAgICBBcHBlbmQgKGJ1ZiwgIlRUWV9TdGF0ZSIpOwogICAgICAgICAgICAgQXBwZW5kIChidWYsICIsICIpOwogICAgICAgICAgZW5kIGlmOwogCiAgICAgICAgICBpZiBzdWJzZXQgKHRsZXZlbCwKICAgICAgICAgICAgICAgICAgICAgVHJhY2VfQXR0cmlidXRlX1NldCcoSW50ZXJuYWxfQ2FsbHMgPT4gVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJzID0+IEZhbHNlKSkgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlcnMgPT4gRmFsc2UpKQorICAgICAgICAgdGhlbgogICAgICAgICAgICAgQXBwZW5kIChidWYsICJJbnRlcm5hbF9DYWxscyIpOwogICAgICAgICAgICAgQXBwZW5kIChidWYsICIsICIpOwogICAgICAgICAgZW5kIGlmOwogCiAgICAgICAgICBpZiBzdWJzZXQgKHRsZXZlbCwKICAgICAgICAgICAgICAgICAgICAgVHJhY2VfQXR0cmlidXRlX1NldCcoQ2hhcmFjdGVyX0NhbGxzID0+IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVycyA9PiBGYWxzZSkpIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJzID0+IEZhbHNlKSkKKyAgICAgICAgIHRoZW4KICAgICAgICAgICAgIEFwcGVuZCAoYnVmLCAiQ2hhcmFjdGVyX0NhbGxzIik7CiAgICAgICAgICAgICBBcHBlbmQgKGJ1ZiwgIiwgIik7CiAgICAgICAgICBlbmQgaWY7CiAKICAgICAgICAgIGlmIHN1YnNldCAodGxldmVsLAogICAgICAgICAgICAgICAgICAgICBUcmFjZV9BdHRyaWJ1dGVfU2V0JyhUZXJtY2FwX1Rlcm1JbmZvID0+IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVycyA9PiBGYWxzZSkpIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJzID0+IEZhbHNlKSkKKyAgICAgICAgIHRoZW4KICAgICAgICAgICAgIEFwcGVuZCAoYnVmLCAiVGVybWNhcF9UZXJtSW5mbyIpOwogICAgICAgICAgICAgQXBwZW5kIChidWYsICIsICIpOwogICAgICAgICAgZW5kIGlmOwogCiAgICAgICAgICBpZiBzdWJzZXQgKHRsZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgVHJhY2VfTWF4aW11bSkgdGhlbgorICAgICAgICAgICAgICAgICAgICBUcmFjZV9NYXhpbXVtKQorICAgICAgICAgdGhlbgogICAgICAgICAgICAgQXBwZW5kIChidWYsICJNYXhpbWl1bSIpOwogICAgICAgICAgICAgQXBwZW5kIChidWYsICIsICIpOwogICAgICAgICAgZW5kIGlmOwpAQCAtNDE2LDkgKzQzMSw5IEBACiAgICBSZWZyZXNoOwogCiAgICBmb3IgbiBpbiB0X3RibCdSYW5nZSBsb29wCi0gICAgICBpdGVtc19hIChuKSA6PSBOZXdfSXRlbSAodF90YmwgKG4pLm5hbWUuYWxsKTsKKyAgICAgIGl0ZW1zX2EuYWxsIChuKSA6PSBOZXdfSXRlbSAodF90YmwgKG4pLm5hbWUuYWxsKTsKICAgIGVuZCBsb29wOwotICAgaXRlbXNfYSAodF90YmwnTGFzdCArIDEpIDo9IE51bGxfSXRlbTsKKyAgIGl0ZW1zX2EuYWxsICh0X3RibCdMYXN0ICsgMSkgOj0gTnVsbF9JdGVtOwogCiAgICBtIDo9IE5ld19NZW51IChpdGVtc19hKTsKIApkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi11dGlsLmFkYiBiL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItdXRpbC5hZGIKaW5kZXggOGFlMzI3Mi4uZTBmM2QzNSAxMDA2NDQKLS0tIGEvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi11dGlsLmFkYgorKysgYi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLXV0aWwuYWRiCkBAIC03LDcgKzcsNyBAQAogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gQ29weXJpZ2h0IChjKSAyMDAwLTIwMDYsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwOCwyMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCiAtLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KQEAgLTM1LDE2ICszNSwxMiBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiBFdWdlbmUgVi4gTWVsYXJhZ25vIDxhbGRvbWVsQGl4Lm5ldGNvbS5jb20+IDIwMDAKIC0tICBWZXJzaW9uIENvbnRyb2wKLS0tICAkUmV2aXNpb246IDEuNyAkCi0tLSAgJERhdGU6IDIwMDgvMDcvMjYgMTg6NTE6MjAgJAorLS0gICRSZXZpc2lvbjogMS45ICQKKy0tICAkRGF0ZTogMjAxNC8wNS8yNCAyMTozMjoxOCAkCiAtLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHdpdGggQWRhLlRleHRfSU87IHVzZSBBZGEuVGV4dF9JTzsKIAotcHJhZ21hIFdhcm5pbmdzIChPZmYpOwotd2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkF1eDsKLXByYWdtYSBXYXJuaW5ncyAoT24pOwotCiB3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVHJhY2U7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRyYWNlOwogCiB3aXRoIEludGVyZmFjZXMuQzsKQEAgLTExNSw3ICsxMTEsNiBAQAogICAgcHJvY2VkdXJlIENhbm5vdCAocyA6IFN0cmluZykgaXMKICAgICAgIHVzZSBJbnRlcmZhY2VzLkM7CiAgICAgICB1c2UgSW50ZXJmYWNlcy5DLlN0cmluZ3M7Ci0gICAgICB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5BdXg7CiAgICAgICBmdW5jdGlvbiBnZXRlbnYgKHggOiBjaGFyX2FycmF5KSAgcmV0dXJuIGNoYXJzX3B0cjsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIGdldGVudiwgImdldGVudiIpOwogICAgICAgdG1wMSA6IGNoYXJfYXJyYXkgKDAgLi4gMTApOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9zYW1wbGUtY3Vyc2VzX2RlbW8uYWRiIGIvQWRhOTUvc2FtcGxlcy9zYW1wbGUtY3Vyc2VzX2RlbW8uYWRiCmluZGV4IDcwMGRhNzYuLjRkZDk2YTcgMTAwNjQ0Ci0tLSBhL0FkYTk1L3NhbXBsZXMvc2FtcGxlLWN1cnNlc19kZW1vLmFkYgorKysgYi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1jdXJzZXNfZGVtby5hZGIKQEAgLTcsNyArNyw3IEBACiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OC0yMDA0LDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KIC0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQpAQCAtMzUsOCArMzUsOCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CiAtLSAgVmVyc2lvbiBDb250cm9sCi0tLSAgJFJldmlzaW9uOiAxLjE1ICQKLS0tICAkRGF0ZTogMjAwNC8wOC8yMSAyMTozNzowMCAkCistLSAgJFJldmlzaW9uOiAxLjE3ICQKKy0tICAkRGF0ZTogMjAxMS8wMy8yMyAwMDoyOTowNCAkCiAtLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHdpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7CkBAIC02MSw3ICs2MSw3IEBACiAgICB0eXBlIFVzZXJfRGF0YV9BY2Nlc3MgaXMgYWNjZXNzIGFsbCBVc2VyX0RhdGE7CiAgICBwYWNrYWdlIFBVRCBpcyBuZXcgUGFuZWxzLlVzZXJfRGF0YSAoVXNlcl9EYXRhLCBVc2VyX0RhdGFfQWNjZXNzKTsKICAgIC0tICBXZSB1c2UgYWJvdmUgaW5zdGFudGlhdGlvbiBvZiB0aGUgZ2VuZXJpYyBVc2VyX0RhdGEgcGFja2FnZSB0bwotICAgLS0gIGRlbW9uc3RyYXRlIGFuZCB0ZXN0IHRoZSB1c2Ugb2YgdGhlIHVzZXIgZGF0YSBtYWVjaGFuaXNtLgorICAgLS0gIGRlbW9uc3RyYXRlIGFuZCB0ZXN0IHRoZSB1c2Ugb2YgdGhlIHVzZXIgZGF0YSBtZWNoYW5pc20uCiAKICAgIHByb2NlZHVyZSBEZW1vCiAgICBpcwpAQCAtMTIyLDkgKzEyMiw5IEBACiAgICAgICAgICBkZWNsYXJlCiAgICAgICAgICAgICBPIDogSXRlbV9PcHRpb25fU2V0OwogICAgICAgICAgYmVnaW4KLSAgICAgICAgICAgIEdldF9PcHRpb25zIChJdG0gKDIpLCBPKTsKKyAgICAgICAgICAgIEdldF9PcHRpb25zIChJdG0uYWxsICgyKSwgTyk7CiAgICAgICAgICAgICBPLlNlbGVjdGFibGUgOj0gRmFsc2U7Ci0gICAgICAgICAgICBTZXRfT3B0aW9ucyAoSXRtICgyKSwgTyk7CisgICAgICAgICAgICBTZXRfT3B0aW9ucyAoSXRtLmFsbCAoMiksIE8pOwogICAgICAgICAgZW5kOwogICAgICAgZW5kIGlmOwogCmRpZmYgLS1naXQgYS9BZGE5NS9zYW1wbGVzL3NhbXBsZS1leHBsYW5hdGlvbi5hZGIgYi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1leHBsYW5hdGlvbi5hZGIKaW5kZXggMTJhOGRlYi4uYTJkMTgyMiAxMDA2NDQKLS0tIGEvQWRhOTUvc2FtcGxlcy9zYW1wbGUtZXhwbGFuYXRpb24uYWRiCisrKyBiL0FkYTk1L3NhbXBsZXMvc2FtcGxlLWV4cGxhbmF0aW9uLmFkYgpAQCAtNyw3ICs3LDcgQEAKIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIENvcHlyaWdodCAoYykgMTk5OC0yMDA0LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMTEsMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQogLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCkBAIC0zNSw4ICszNSw4IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKIC0tICBWZXJzaW9uIENvbnRyb2wKLS0tICAkUmV2aXNpb246IDEuMjAgJAotLS0gICREYXRlOiAyMDA2LzA2LzI1IDE0OjMwOjIyICQKKy0tICAkUmV2aXNpb246IDEuMjcgJAorLS0gICREYXRlOiAyMDE0LzA5LzEzIDE5OjEwOjE4ICQKIC0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLS0gIFBvb3IgbWFucyBoZWxwIHN5c3RlbS4gVGhpcyBzY2FucyBhIHNlcXVlbnRpYWwgZmlsZSBmb3Iga2V5IGxpbmVzIGFuZApAQCAtNTgsNyArNTgsNyBAQAogICAgSGVscF9LZXlzIDogY29uc3RhbnQgU3RyaW5nIDo9ICJIRUxQS0VZUyI7CiAgICBJbl9IZWxwICAgOiBjb25zdGFudCBTdHJpbmcgOj0gIklOSEVMUCI7CiAKLSAgIEZpbGVfTmFtZSA6IGNvbnN0YW50IFN0cmluZyA6PSAiZXhwbGFpbi5tc2ciOworICAgRmlsZV9OYW1lIDogY29uc3RhbnQgU3RyaW5nIDo9ICJleHBsYWluLnR4dCI7CiAgICBGIDogRmlsZV9UeXBlOwogCiAgICB0eXBlIEhlbHBfTGluZTsKQEAgLTczLDggKzczLDggQEAKICAgICAgICAgIExpbmUgOiBTdHJpbmdfQWNjZXNzOwogICAgICAgZW5kIHJlY29yZDsKIAotICAgcHJvY2VkdXJlIEV4cGxhaW4gKEtleSA6IGluIFN0cmluZzsKLSAgICAgICAgICAgICAgICAgICAgICBXaW4gOiBpbiBXaW5kb3cpOworICAgcHJvY2VkdXJlIEV4cGxhaW4gKEtleSA6IFN0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgICBXaW4gOiBXaW5kb3cpOwogCiAgICBwcm9jZWR1cmUgUmVsZWFzZV9TdHJpbmcgaXMKICAgICAgbmV3IEFkYS5VbmNoZWNrZWRfRGVhbGxvY2F0aW9uIChTdHJpbmcsCkBAIC04NiwxNCArODYsMTYgQEAKICAgIGZ1bmN0aW9uIFNlYXJjaCAoS2V5IDogU3RyaW5nKSByZXR1cm4gSGVscF9MaW5lX0FjY2VzczsKICAgIHByb2NlZHVyZSBSZWxlYXNlX0hlbHAgKFJvb3QgOiBpbiBvdXQgSGVscF9MaW5lX0FjY2Vzcyk7CiAKLSAgIHByb2NlZHVyZSBFeHBsYWluIChLZXkgOiBpbiBTdHJpbmcpCisgICBmdW5jdGlvbiBDaGVja19GaWxlIChOYW1lIDogU3RyaW5nKSByZXR1cm4gQm9vbGVhbjsKKworICAgcHJvY2VkdXJlIEV4cGxhaW4gKEtleSA6IFN0cmluZykKICAgIGlzCiAgICBiZWdpbgogICAgICAgRXhwbGFpbiAoS2V5LCBOdWxsX1dpbmRvdyk7CiAgICBlbmQgRXhwbGFpbjsKIAotICAgcHJvY2VkdXJlIEV4cGxhaW4gKEtleSA6IGluIFN0cmluZzsKLSAgICAgICAgICAgICAgICAgICAgICBXaW4gOiBpbiBXaW5kb3cpCisgICBwcm9jZWR1cmUgRXhwbGFpbiAoS2V5IDogU3RyaW5nOworICAgICAgICAgICAgICAgICAgICAgIFdpbiA6IFdpbmRvdykKICAgIGlzCiAgICAgICAtLSAgUmV0cmlldmUgdGhlIHRleHQgYXNzb2NpYXRlZCB3aXRoIHRoaXMga2V5IGFuZCBkaXNwbGF5IGl0IGluIHRoaXMKICAgICAgIC0tICB3aW5kb3cuIElmIG5vIHdpbmRvdyBhcmd1bWVudCBpcyBwYXNzZWQsIHRoZSByb3V0aW5lIHdpbGwgY3JlYXRlCkBAIC0xMjYsNyArMTI4LDcgQEAKICAgICAgICAgIEFkZCAoVywgS2V5KTsKICAgICAgICAgIEFkZCAoVywgIiBub3QgZm91bmQuIik7CiAgICAgICAgICBBZGQgKFcsIENoYXJhY3RlcidWYWwgKDEwKSk7Ci0gICAgICAgICBBZGQgKFcsICJQcmVzcyB0aGUgRnVuY3Rpb24ga2V5IGxhYmVsbGVkICdRdWl0JyBrZXkgdG8gY29udGludWUuIik7CisgICAgICAgICBBZGQgKFcsICJQcmVzcyB0aGUgRnVuY3Rpb24ga2V5IGxhYmVsZWQgJ1F1aXQnIGtleSB0byBjb250aW51ZS4iKTsKICAgICAgIGVuZCBVbmtub3duX0tleTsKIAogICAgICAgcHJvY2VkdXJlIFJlZG8KQEAgLTEzNSw5ICsxMzcsOSBAQAogICAgICAgYmVnaW4KICAgICAgICAgIGlmIFRvcF9MaW5lIC89IG51bGwgdGhlbgogICAgICAgICAgICAgZm9yIEwgaW4gMCAuLiAoSGVpZ2h0IC0gMSkgbG9vcAotICAgICAgICAgICAgICAgQWRkIChXLCBMLCAwLCBILkxpbmUuYWxsKTsKLSAgICAgICAgICAgICAgIGV4aXQgd2hlbiBILk5leHQgPSBudWxsOwotICAgICAgICAgICAgICAgSCA6PSBILk5leHQ7CisgICAgICAgICAgICAgICBBZGQgKFcsIEwsIDAsIEguYWxsLkxpbmUuYWxsKTsKKyAgICAgICAgICAgICAgIGV4aXQgd2hlbiBILmFsbC5OZXh0ID0gbnVsbDsKKyAgICAgICAgICAgICAgIEggOj0gSC5hbGwuTmV4dDsKICAgICAgICAgICAgIGVuZCBsb29wOwogICAgICAgICAgZWxzZQogICAgICAgICAgICAgVW5rbm93bl9LZXk7CkBAIC0xODEsMTIgKzE4MywxMiBAQAogICAgICAgICAgTCA6IExpbmVfUG9zaXRpb24gOj0gMDsKICAgICAgIGJlZ2luCiAgICAgICAgICBsb29wCi0gICAgICAgICAgICBBZGQgKFcsIEwsIDAsIEMuTGluZS5hbGwpOworICAgICAgICAgICAgQWRkIChXLCBMLCAwLCBDLmFsbC5MaW5lLmFsbCk7CiAgICAgICAgICAgICBMIDo9IEwgKyAxOwotICAgICAgICAgICAgZXhpdCB3aGVuIEMuTmV4dCA9IG51bGwgb3IgZWxzZSBMID0gSGVpZ2h0OwotICAgICAgICAgICAgQyA6PSBDLk5leHQ7CisgICAgICAgICAgICBleGl0IHdoZW4gQy5hbGwuTmV4dCA9IG51bGwgb3IgZWxzZSBMID0gSGVpZ2h0OworICAgICAgICAgICAgQyA6PSBDLmFsbC5OZXh0OwogICAgICAgICAgZW5kIGxvb3A7Ci0gICAgICAgICBpZiBDLk5leHQgLz0gbnVsbCB0aGVuCisgICAgICAgICBpZiBDLmFsbC5OZXh0IC89IG51bGwgdGhlbgogICAgICAgICAgICAgcHJhZ21hIEFzc2VydCAoTCA9IEhlaWdodCk7CiAgICAgICAgICAgICBNb3JlIDo9IFRydWU7CiAgICAgICAgICBlbHNlCkBAIC0yNDgsMjAgKzI1MCwyMCBAQAogICAgICAgICAgICAgICAgaWYgSyBpbiBTcGVjaWFsX0tleV9Db2RlJ1JhbmdlIHRoZW4KICAgICAgICAgICAgICAgICAgIGNhc2UgSyBpcwogICAgICAgICAgICAgICAgICAgICAgd2hlbiBLZXlfQ3Vyc29yX0Rvd24gPT4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIEN1cnJlbnQuTmV4dCAvPSBudWxsIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIEN1cnJlbnQuYWxsLk5leHQgLz0gbnVsbCB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb3ZlX0N1cnNvciAoVywgSGVpZ2h0IC0gMSwgMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY3JvbGwgKFcsIDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VycmVudCA6PSBDdXJyZW50Lk5leHQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBUb3BfTGluZSA6PSBUb3BfTGluZS5OZXh0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkIChXLCBDdXJyZW50LkxpbmUuYWxsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cnJlbnQgOj0gQ3VycmVudC5hbGwuTmV4dDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvcF9MaW5lIDo9IFRvcF9MaW5lLmFsbC5OZXh0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkIChXLCBDdXJyZW50LmFsbC5MaW5lLmFsbCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBlbmQgaWY7CiAgICAgICAgICAgICAgICAgICAgICB3aGVuIEtleV9DdXJzb3JfVXAgPT4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIFRvcF9MaW5lLlByZXYgLz0gbnVsbCB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBUb3BfTGluZS5hbGwuUHJldiAvPSBudWxsIHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vdmVfQ3Vyc29yIChXLCAwLCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjcm9sbCAoVywgLTEpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgVG9wX0xpbmUgOj0gVG9wX0xpbmUuUHJldjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cnJlbnQgOj0gQ3VycmVudC5QcmV2OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkIChXLCBUb3BfTGluZS5MaW5lLmFsbCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBUb3BfTGluZSA6PSBUb3BfTGluZS5hbGwuUHJldjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cnJlbnQgOj0gQ3VycmVudC5hbGwuUHJldjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZCAoVywgVG9wX0xpbmUuYWxsLkxpbmUuYWxsKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCBpZjsKICAgICAgICAgICAgICAgICAgICAgIHdoZW4gUVVJVF9DT0RFID0+IGV4aXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIG90aGVycyA9PiBudWxsOwpAQCAtMzE5LDggKzMyMSwxMCBAQAogICAgICAgT3V0ZXIgOgogICAgICAgbG9vcAogICAgICAgICAgZXhpdCBPdXRlciB3aGVuIG5vdCBOZXh0X0xpbmU7Ci0gICAgICAgICBpZiBMYXN0ID0gKDEgKyBLZXknTGVuZ3RoKSBhbmQgdGhlbiBLZXkgPSBCdWZmZXIgKDIgLi4gTGFzdCkKLSAgICAgICAgICAgYW5kIHRoZW4gQnVmZmVyICgxKSA9ICcjJyB0aGVuCisgICAgICAgICBpZiBMYXN0ID0gKDEgKyBLZXknTGVuZ3RoKQorICAgICAgICAgICBhbmQgdGhlbiBLZXkgPSBCdWZmZXIgKDIgLi4gTGFzdCkKKyAgICAgICAgICAgYW5kIHRoZW4gQnVmZmVyICgxKSA9ICcjJworICAgICAgICAgdGhlbgogICAgICAgICAgICAgbG9vcAogICAgICAgICAgICAgICAgZXhpdCB3aGVuIG5vdCBOZXh0X0xpbmU7CiAgICAgICAgICAgICAgICBleGl0IHdoZW4gQnVmZmVyICgxKSA9ICcjJzsKQEAgLTMzMCw4ICszMzQsOCBAQAogICAgICAgICAgICAgICAgICAgUmVsZWFzZV9IZWxwIChSb290KTsKICAgICAgICAgICAgICAgICAgIFJvb3QgOj0gQ3VycmVudDsKICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIFRhaWwuTmV4dCA6PSBDdXJyZW50OwotICAgICAgICAgICAgICAgICAgQ3VycmVudC5QcmV2IDo9IFRhaWw7CisgICAgICAgICAgICAgICAgICBUYWlsLmFsbC5OZXh0IDo9IEN1cnJlbnQ7CisgICAgICAgICAgICAgICAgICBDdXJyZW50LmFsbC5QcmV2IDo9IFRhaWw7CiAgICAgICAgICAgICAgICBlbmQgaWY7CiAgICAgICAgICAgICAgICBUYWlsIDo9IEN1cnJlbnQ7CiAgICAgICAgICAgICBlbmQgbG9vcDsKQEAgLTM0Nyw4ICszNTEsOCBAQAogICAgYmVnaW4KICAgICAgIGxvb3AKICAgICAgICAgIGV4aXQgd2hlbiBSb290ID0gbnVsbDsKLSAgICAgICAgIE5leHQgOj0gUm9vdC5OZXh0OwotICAgICAgICAgUmVsZWFzZV9TdHJpbmcgKFJvb3QuTGluZSk7CisgICAgICAgICBOZXh0IDo9IFJvb3QuYWxsLk5leHQ7CisgICAgICAgICBSZWxlYXNlX1N0cmluZyAoUm9vdC5hbGwuTGluZSk7CiAgICAgICAgICBSZWxlYXNlX0hlbHBfTGluZSAoUm9vdCk7CiAgICAgICAgICBSb290IDo9IE5leHQ7CiAgICAgICBlbmQgbG9vcDsKQEAgLTM2MCw3ICszNjQsNyBAQAogICAgICAgRXhwbGFpbiAoQ29udGV4dCk7CiAgICBlbmQgRXhwbGFpbl9Db250ZXh0OwogCi0gICBwcm9jZWR1cmUgTm90ZXBhZCAoS2V5IDogaW4gU3RyaW5nKQorICAgcHJvY2VkdXJlIE5vdGVwYWQgKEtleSA6IFN0cmluZykKICAgIGlzCiAgICAgICBIIDogY29uc3RhbnQgSGVscF9MaW5lX0FjY2VzcyA6PSBTZWFyY2ggKEtleSk7CiAgICAgICBUIDogSGVscF9MaW5lX0FjY2VzcyA6PSBIOwpAQCAtMzcxLDcgKzM3NSw3IEBACiAgICBiZWdpbgogICAgICAgaWYgSCAvPSBudWxsIHRoZW4KICAgICAgICAgIGxvb3AKLSAgICAgICAgICAgIFQgOj0gVC5OZXh0OworICAgICAgICAgICAgVCA6PSBULmFsbC5OZXh0OwogICAgICAgICAgICAgZXhpdCB3aGVuIFQgPSBudWxsOwogICAgICAgICAgICAgTiA6PSBOICsgMTsKICAgICAgICAgIGVuZCBsb29wOwpAQCAtMzkxLDkgKzM5NSw5IEBACiAgICAgICAgICBQIDo9IE5ld19QYW5lbCAoVyk7CiAgICAgICAgICBUIDo9IEg7CiAgICAgICAgICBsb29wCi0gICAgICAgICAgICBBZGQgKFcsIEwgKyAxLCAxLCBULkxpbmUuYWxsLCBJbnRlZ2VyIChDb2x1bW5zIC0gMikpOworICAgICAgICAgICAgQWRkIChXLCBMICsgMSwgMSwgVC5hbGwuTGluZS5hbGwsIEludGVnZXIgKENvbHVtbnMgLSAyKSk7CiAgICAgICAgICAgICBMIDo9IEwgKyAxOwotICAgICAgICAgICAgVCA6PSBULk5leHQ7CisgICAgICAgICAgICBUIDo9IFQuYWxsLk5leHQ7CiAgICAgICAgICAgICBleGl0IHdoZW4gVCA9IG51bGw7CiAgICAgICAgICBlbmQgbG9vcDsKICAgICAgICAgIFQgOj0gSDsKQEAgLTQwMyw2ICs0MDcsMjYgQEAKICAgICAgIGVuZCBpZjsKICAgIGVuZCBOb3RlcGFkOwogCisgICBmdW5jdGlvbiBDaGVja19GaWxlIChOYW1lIDogU3RyaW5nKSByZXR1cm4gQm9vbGVhbiBpcworICAgICAgVGhlX0ZpbGUgOiBGaWxlX1R5cGU7CisgICBiZWdpbgorICAgICAgT3BlbiAoVGhlX0ZpbGUsIEluX0ZpbGUsIE5hbWUpOworICAgICAgQ2xvc2UgKFRoZV9GaWxlKTsKKyAgICAgIHJldHVybiBUcnVlOworICAgZXhjZXB0aW9uCisgICAgICB3aGVuIE5hbWVfRXJyb3IgPT4KKyAgICAgICAgIHJldHVybiBGYWxzZTsKKyAgIGVuZCBDaGVja19GaWxlOworCiBiZWdpbgotICAgT3BlbiAoRiwgSW5fRmlsZSwgRmlsZV9OYW1lKTsKKyAgIGlmIENoZWNrX0ZpbGUgKCIvdXNyL3NoYXJlL0FkYUN1cnNlcy8iICYgRmlsZV9OYW1lKSB0aGVuCisgICAgICBPcGVuIChGLCBJbl9GaWxlLCAiL3Vzci9zaGFyZS9BZGFDdXJzZXMvIiAmIEZpbGVfTmFtZSk7CisgICBlbHNpZiBDaGVja19GaWxlIChGaWxlX05hbWUpIHRoZW4KKyAgICAgIE9wZW4gKEYsIEluX0ZpbGUsIEZpbGVfTmFtZSk7CisgICBlbHNlCisgICAgICBQdXRfTGluZSAoU3RhbmRhcmRfRXJyb3IsCisgICAgICAgICAgICAgICAgIlRoZSBmaWxlIGV4cGxhaW4udHh0IHdhcyBub3QgZm91bmQgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiIKKyAgICAgICAgICAgICAgICApOworICAgICAgcmFpc2UgTmFtZV9FcnJvcjsKKyAgIGVuZCBpZjsKIGVuZCBTYW1wbGUuRXhwbGFuYXRpb247CmRpZmYgLS1naXQgYS9BZGE5NS9zYW1wbGVzL3NhbXBsZS1leHBsYW5hdGlvbi5hZHMgYi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1leHBsYW5hdGlvbi5hZHMKaW5kZXggMTg2MTdhYy4uNzI4ODI1ZSAxMDA2NDQKLS0tIGEvQWRhOTUvc2FtcGxlcy9zYW1wbGUtZXhwbGFuYXRpb24uYWRzCisrKyBiL0FkYTk1L3NhbXBsZXMvc2FtcGxlLWV4cGxhbmF0aW9uLmFkcwpAQCAtNyw3ICs3LDcgQEAKIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQogLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCkBAIC0zNSw3ICszNSw3IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKIC0tICBWZXJzaW9uIENvbnRyb2wKLS0tICAkUmV2aXNpb246IDEuMTAgJAorLS0gICRSZXZpc2lvbjogMS4xMSAkCiAtLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC0tICBQb29yIG1hbnMgaGVscCBzeXN0ZW0uIFRoaXMgc2NhbnMgYSBzZXF1ZW50aWFsIGZpbGUgZm9yIGtleSBsaW5lcyBhbmQKQEAgLTQ0LDEzICs0NCwxMyBAQAogLS0KIHBhY2thZ2UgU2FtcGxlLkV4cGxhbmF0aW9uIGlzCiAKLSAgIHByb2NlZHVyZSBFeHBsYWluIChLZXkgOiBpbiBTdHJpbmcpOworICAgcHJvY2VkdXJlIEV4cGxhaW4gKEtleSA6IFN0cmluZyk7CiAgICAtLSAgUmV0cmlldmUgdGhlIHRleHQgYXNzb2NpYXRlZCB3aXRoIHRoaXMga2V5IGFuZCBkaXNwbGF5IGl0LgogCiAgICBwcm9jZWR1cmUgRXhwbGFpbl9Db250ZXh0OwogICAgLS0gIEV4cGxhaW4gdGhlIGN1cnJlbnQgY29udGV4dC4KIAotICAgcHJvY2VkdXJlIE5vdGVwYWQgKEtleSA6IGluIFN0cmluZyk7CisgICBwcm9jZWR1cmUgTm90ZXBhZCAoS2V5IDogU3RyaW5nKTsKICAgIC0tICBQdXQgYSBub3RlIG9uIHRoZSBzY3JlZW4gYW5kIG1haW50YWluIGl0IHdpdGggdGhlIGNvbnRleHQKIAogICAgRXhwbGFuYXRpb25fTm90X0ZvdW5kIDogZXhjZXB0aW9uOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9zYW1wbGUtZm9ybV9kZW1vLWF1eC5hZGIgYi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1mb3JtX2RlbW8tYXV4LmFkYgppbmRleCA4MWM5N2FkLi5hM2IwNDRkIDEwMDY0NAotLS0gYS9BZGE5NS9zYW1wbGVzL3NhbXBsZS1mb3JtX2RlbW8tYXV4LmFkYgorKysgYi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1mb3JtX2RlbW8tYXV4LmFkYgpAQCAtNyw3ICs3LDcgQEAKIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIENvcHlyaWdodCAoYykgMTk5OCwyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDQsMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQogLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCkBAIC0zNSw4ICszNSw4IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKIC0tICBWZXJzaW9uIENvbnRyb2wKLS0tICAkUmV2aXNpb246IDEuMTYgJAotLS0gICREYXRlOiAyMDA0LzA4LzIxIDIxOjM3OjAwICQKKy0tICAkUmV2aXNpb246IDEuMTcgJAorLS0gICREYXRlOiAyMDA5LzEyLzI2IDE3OjM4OjU4ICQKIC0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogd2l0aCBBZGEuQ2hhcmFjdGVycy5MYXRpbl8xOyB1c2UgQWRhLkNoYXJhY3RlcnMuTGF0aW5fMTsKQEAgLTQ4LDcgKzQ4LDcgQEAKIAogcGFja2FnZSBib2R5IFNhbXBsZS5Gb3JtX0RlbW8uQXV4IGlzCiAKLSAgIHByb2NlZHVyZSBHZW9tZXRyeSAoRiAgOiBpbiAgRm9ybTsKKyAgIHByb2NlZHVyZSBHZW9tZXRyeSAoRiAgOiBGb3JtOwogICAgICAgICAgICAgICAgICAgICAgICBMICA6IG91dCBMaW5lX0NvdW50OyAgICAgICAgLS0gTGluZXMgdXNlZCBmb3IgbWVudQogICAgICAgICAgICAgICAgICAgICAgICBDICA6IG91dCBDb2x1bW5fQ291bnQ7ICAgICAgLS0gQ29sdW1ucyB1c2VkIGZvciBtZW51CiAgICAgICAgICAgICAgICAgICAgICAgIFkgIDogb3V0IExpbmVfUG9zaXRpb247ICAgICAtLSBQcm9wb3NlZCBMaW5lIGZvciBtZW51CkBAIC0xMDUsNyArMTA1LDcgQEAKICAgICAgIHJldHVybiBQYW47CiAgICBlbmQgQ3JlYXRlOwogCi0gICBwcm9jZWR1cmUgRGVzdHJveSAoRiA6IGluIEZvcm07CisgICBwcm9jZWR1cmUgRGVzdHJveSAoRiA6IEZvcm07CiAgICAgICAgICAgICAgICAgICAgICAgUCA6IGluIG91dCBQYW5lbCkKICAgIGlzCiAgICAgICBXLCBTIDogV2luZG93OwpkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9zYW1wbGUtZm9ybV9kZW1vLWF1eC5hZHMgYi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1mb3JtX2RlbW8tYXV4LmFkcwppbmRleCAyMzE3ZTE0Li43ZTdmN2NkIDEwMDY0NAotLS0gYS9BZGE5NS9zYW1wbGVzL3NhbXBsZS1mb3JtX2RlbW8tYXV4LmFkcworKysgYi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1mb3JtX2RlbW8tYXV4LmFkcwpAQCAtNyw3ICs3LDcgQEAKIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDksMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQogLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCkBAIC0zNSw3ICszNSw3IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKIC0tICBWZXJzaW9uIENvbnRyb2wKLS0tICAkUmV2aXNpb246IDEuOSAkCistLSAgJFJldmlzaW9uOiAxLjExICQKIC0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogd2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOyB1c2UgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7CkBAIC00NCwxMiArNDQsMTIgQEAKIAogcGFja2FnZSBTYW1wbGUuRm9ybV9EZW1vLkF1eCBpcwogCi0gICBwcm9jZWR1cmUgR2VvbWV0cnkgKEYgIDogaW4gIEZvcm07CisgICBwcm9jZWR1cmUgR2VvbWV0cnkgKEYgIDogRm9ybTsKICAgICAgICAgICAgICAgICAgICAgICAgTCAgOiBvdXQgTGluZV9Db3VudDsKICAgICAgICAgICAgICAgICAgICAgICAgQyAgOiBvdXQgQ29sdW1uX0NvdW50OwogICAgICAgICAgICAgICAgICAgICAgICBZICA6IG91dCBMaW5lX1Bvc2l0aW9uOwogICAgICAgICAgICAgICAgICAgICAgICBYICA6IG91dCBDb2x1bW5fUG9zaXRpb24pOwotICAgLS0gIENhbGN1bGF0ZSB0aGUgZ2VvbWV0cnkgZm9yIGEgcGFuZWwgYmVlaW5nIGFibGUgdG8gYmUgdXNlZCB0byBkaXNwbGF5CisgICAtLSAgQ2FsY3VsYXRlIHRoZSBnZW9tZXRyeSBmb3IgYSBwYW5lbCBiZWluZyBhYmxlIHRvIGJlIHVzZWQgdG8gZGlzcGxheQogICAgLS0gIHRoZSBtZW51LgogCiAgICBmdW5jdGlvbiBDcmVhdGUgKEYgICAgIDogRm9ybTsKQEAgLTU5LDcgKzU5LDcgQEAKICAgIC0tICBDcmVhdGUgYSBwYW5lbCBkZWNvcmF0ZWQgd2l0aCBhIGZyYW1lIGFuZCB0aGUgdGl0bGUgYXQgdGhlIHNwZWNpZmllZAogICAgLS0gIHBvc2l0aW9uLiBUaGUgZGltZW5zaW9uIG9mIHRoZSBwYW5lbCBpcyBkZXJpdmVkIGZyb20gdGhlIG1lbnVzIGxheW91dC4KIAotICAgcHJvY2VkdXJlIERlc3Ryb3kgKEYgOiBpbiBGb3JtOworICAgcHJvY2VkdXJlIERlc3Ryb3kgKEYgOiBGb3JtOwogICAgICAgICAgICAgICAgICAgICAgIFAgOiBpbiBvdXQgUGFuZWwpOwogICAgLS0gIERlc3Ryb3kgYWxsIHRoZSB3aW5kb3dpbmcgc3RydWN0dXJlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBtZW51IGFuZAogICAgLS0gIHBhbmVsLgpkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9zYW1wbGUtZm9ybV9kZW1vLWhhbmRsZXIuYWRiIGIvQWRhOTUvc2FtcGxlcy9zYW1wbGUtZm9ybV9kZW1vLWhhbmRsZXIuYWRiCmluZGV4IGFmZTg2ZjcuLmQ4NzFjMWMgMTAwNjQ0Ci0tLSBhL0FkYTk1L3NhbXBsZXMvc2FtcGxlLWZvcm1fZGVtby1oYW5kbGVyLmFkYgorKysgYi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1mb3JtX2RlbW8taGFuZGxlci5hZGIKQEAgLTcsNyArNyw3IEBACiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OC0yMDA0LDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KIC0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQpAQCAtMzUsOCArMzUsOCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CiAtLSAgVmVyc2lvbiBDb250cm9sCi0tLSAgJFJldmlzaW9uOiAxLjEzICQKLS0tICAkRGF0ZTogMjAwNC8wOC8yMSAyMTozNzowMCAkCistLSAgJFJldmlzaW9uOiAxLjE0ICQKKy0tICAkRGF0ZTogMjAwOS8xMi8yNiAxNzozODo1OCAkCiAtLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHdpdGggU2FtcGxlLkZvcm1fRGVtby5BdXg7CkBAIC00NSw4ICs0NSw4IEBACiAKICAgIHBhY2thZ2UgQXV4IHJlbmFtZXMgU2FtcGxlLkZvcm1fRGVtby5BdXg7CiAKLSAgIHByb2NlZHVyZSBEcml2ZV9NZSAoRiAgICAgOiBpbiBGb3JtOwotICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSA6IGluIFN0cmluZyA6PSAiIikKKyAgIHByb2NlZHVyZSBEcml2ZV9NZSAoRiAgICAgOiBGb3JtOworICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSA6IFN0cmluZyA6PSAiIikKICAgIGlzCiAgICAgICBMIDogTGluZV9Db3VudDsKICAgICAgIEMgOiBDb2x1bW5fQ291bnQ7CkBAIC01NywxMCArNTcsMTAgQEAKICAgICAgIERyaXZlX01lIChGLCBZLCBYLCBUaXRsZSk7CiAgICBlbmQgRHJpdmVfTWU7CiAKLSAgIHByb2NlZHVyZSBEcml2ZV9NZSAoRiAgICAgOiBpbiBGb3JtOwotICAgICAgICAgICAgICAgICAgICAgICBMaW4gICA6IGluIExpbmVfUG9zaXRpb247Ci0gICAgICAgICAgICAgICAgICAgICAgIENvbCAgIDogaW4gQ29sdW1uX1Bvc2l0aW9uOwotICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSA6IGluIFN0cmluZyA6PSAiIikKKyAgIHByb2NlZHVyZSBEcml2ZV9NZSAoRiAgICAgOiBGb3JtOworICAgICAgICAgICAgICAgICAgICAgICBMaW4gICA6IExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICAgIENvbCAgIDogQ29sdW1uX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSA6IFN0cmluZyA6PSAiIikKICAgIGlzCiAgICAgICBQYW4gOiBQYW5lbCA6PSBBdXguQ3JlYXRlIChGLCBUaXRsZSwgTGluLCBDb2wpOwogICAgICAgViAgIDogQ3Vyc29yX1Zpc2liaWxpdHkgOj0gTm9ybWFsOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9zYW1wbGUtZm9ybV9kZW1vLWhhbmRsZXIuYWRzIGIvQWRhOTUvc2FtcGxlcy9zYW1wbGUtZm9ybV9kZW1vLWhhbmRsZXIuYWRzCmluZGV4IDRhNTY0MTIuLjdkODc1YTAgMTAwNjQ0Ci0tLSBhL0FkYTk1L3NhbXBsZXMvc2FtcGxlLWZvcm1fZGVtby1oYW5kbGVyLmFkcworKysgYi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1mb3JtX2RlbW8taGFuZGxlci5hZHMKQEAgLTcsNyArNyw3IEBACiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KIC0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQpAQCAtMzUsNyArMzUsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CiAtLSAgVmVyc2lvbiBDb250cm9sCi0tLSAgJFJldmlzaW9uOiAxLjkgJAorLS0gICRSZXZpc2lvbjogMS4xMCAkCiAtLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHdpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsKQEAgLTUxLDE0ICs1MSwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYW4gOiBQYW5lbCkgcmV0dXJuIEJvb2xlYW47CiBwYWNrYWdlIFNhbXBsZS5Gb3JtX0RlbW8uSGFuZGxlciBpcwogCi0gICBwcm9jZWR1cmUgRHJpdmVfTWUgKEYgICAgIDogaW4gRm9ybTsKLSAgICAgICAgICAgICAgICAgICAgICAgTGluICAgOiBpbiBMaW5lX1Bvc2l0aW9uOwotICAgICAgICAgICAgICAgICAgICAgICBDb2wgICA6IGluIENvbHVtbl9Qb3NpdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgICAgVGl0bGUgOiBpbiBTdHJpbmcgOj0gIiIpOworICAgcHJvY2VkdXJlIERyaXZlX01lIChGICAgICA6IEZvcm07CisgICAgICAgICAgICAgICAgICAgICAgIExpbiAgIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgQ29sICAgOiBDb2x1bW5fUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICAgIFRpdGxlIDogU3RyaW5nIDo9ICIiKTsKICAgIC0tICBQb3NpdGlvbiB0aGUgbWVudSBhdCB0aGUgZ2l2ZW4gcG9pbnQgYW5kIGRyaXZlIGl0LgogCi0gICBwcm9jZWR1cmUgRHJpdmVfTWUgKEYgICAgIDogaW4gRm9ybTsKLSAgICAgICAgICAgICAgICAgICAgICAgVGl0bGUgOiBpbiBTdHJpbmcgOj0gIiIpOworICAgcHJvY2VkdXJlIERyaXZlX01lIChGICAgICA6IEZvcm07CisgICAgICAgICAgICAgICAgICAgICAgIFRpdGxlIDogU3RyaW5nIDo9ICIiKTsKICAgIC0tICBDZW50ZXIgbWVudSBhbmQgZHJpdmUgaXQuCiAKIGVuZCBTYW1wbGUuRm9ybV9EZW1vLkhhbmRsZXI7CmRpZmYgLS1naXQgYS9BZGE5NS9zYW1wbGVzL3NhbXBsZS1mb3JtX2RlbW8uYWRiIGIvQWRhOTUvc2FtcGxlcy9zYW1wbGUtZm9ybV9kZW1vLmFkYgppbmRleCBlMjZhNWQ5Li5lZDg0NTI2IDEwMDY0NAotLS0gYS9BZGE5NS9zYW1wbGVzL3NhbXBsZS1mb3JtX2RlbW8uYWRiCisrKyBiL0FkYTk1L3NhbXBsZXMvc2FtcGxlLWZvcm1fZGVtby5hZGIKQEAgLTcsNyArNyw3IEBACiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KIC0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQpAQCAtMzUsOCArMzUsOCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CiAtLSAgVmVyc2lvbiBDb250cm9sCi0tLSAgJFJldmlzaW9uOiAxLjE1ICQKLS0tICAkRGF0ZTogMjAwNi8wNi8yNSAxNDozMDoyMiAkCistLSAgJFJldmlzaW9uOiAxLjE2ICQKKy0tICAkRGF0ZTogMjAxMS8wMy8yMyAwMDo0NDoxMiAkCiAtLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHdpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7CkBAIC0xMDgsMTYgKzEwOCwxNiBAQAogICAgICAgTm90ZXBhZCAoIkZPUk0tUEFEMDAiKTsKICAgICAgIERlZmF1bHRfTGFiZWxzOwogCi0gICAgICBTZXRfRmllbGRfVHlwZSAoRkEgKDYpLCBFbnVtX0ZpZWxkKTsKLSAgICAgIFNldF9GaWVsZF9UeXBlIChGQSAoNyksIElfRik7Ci0gICAgICBTZXRfRmllbGRfVHlwZSAoRkEgKDgpLCBNZnQpOworICAgICAgU2V0X0ZpZWxkX1R5cGUgKEZBLmFsbCAoNiksIEVudW1fRmllbGQpOworICAgICAgU2V0X0ZpZWxkX1R5cGUgKEZBLmFsbCAoNyksIElfRik7CisgICAgICBTZXRfRmllbGRfVHlwZSAoRkEuYWxsICg4KSwgTWZ0KTsKIAogICAgICAgRjEgOj0gbmV3IFVzZXJfRGF0YScoRGF0YSA9PiA0NzExKTsKLSAgICAgIEZsZF9VLlNldF9Vc2VyX0RhdGEgKEZBICgxKSwgRjEpOworICAgICAgRmxkX1UuU2V0X1VzZXJfRGF0YSAoRkEuYWxsICgxKSwgRjEpOwogCiAgICAgICBGaC5Ecml2ZV9NZSAoRnJtKTsKIAotICAgICAgRmxkX1UuR2V0X1VzZXJfRGF0YSAoRkEgKDEpLCBGMik7CisgICAgICBGbGRfVS5HZXRfVXNlcl9EYXRhIChGQS5hbGwgKDEpLCBGMik7CiAgICAgICBwcmFnbWEgQXNzZXJ0IChGMSA9IEYyKTsKICAgICAgIHByYWdtYSBBc3NlcnQgKEYxLkRhdGEgPSBGMi5EYXRhKTsKIApkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9zYW1wbGUtZnVuY3Rpb25fa2V5X3NldHRpbmcuYWRiIGIvQWRhOTUvc2FtcGxlcy9zYW1wbGUtZnVuY3Rpb25fa2V5X3NldHRpbmcuYWRiCmluZGV4IGU0MGU0YTQuLjRmZjcwYmUgMTAwNjQ0Ci0tLSBhL0FkYTk1L3NhbXBsZXMvc2FtcGxlLWZ1bmN0aW9uX2tleV9zZXR0aW5nLmFkYgorKysgYi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1mdW5jdGlvbl9rZXlfc2V0dGluZy5hZGIKQEAgLTcsNyArNyw3IEBACiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OC0yMDA5LDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KIC0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQpAQCAtMzUsOCArMzUsOCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CiAtLSAgVmVyc2lvbiBDb250cm9sCi0tLSAgJFJldmlzaW9uOiAxLjEzICQKLS0tICAkRGF0ZTogMjAwNC8wOC8yMSAyMTozNzowMCAkCistLSAgJFJldmlzaW9uOiAxLjE1ICQKKy0tICAkRGF0ZTogMjAxMS8wMy8yMyAwMDo0NDoxMiAkCiAtLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHdpdGggQWRhLlVuY2hlY2tlZF9EZWFsbG9jYXRpb247CkBAIC04MSwyNSArODEsMjUgQEAKIAogICAgVG9wX09mX1N0YWNrIDogRW52X1B0ciA6PSBudWxsOwogCi0gICBwcm9jZWR1cmUgUHVzaF9FbnZpcm9ubWVudCAoS2V5ICAgOiBpbiBTdHJpbmc7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXQgOiBpbiBCb29sZWFuIDo9IFRydWUpCisgICBwcm9jZWR1cmUgUHVzaF9FbnZpcm9ubWVudCAoS2V5ICAgOiBTdHJpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXQgOiBCb29sZWFuIDo9IFRydWUpCiAgICBpcwogICAgICAgUCA6IGNvbnN0YW50IEVudl9QdHIgOj0gbmV3IEtleV9FbnZpcm9ubWVudCAoTnVtYmVyX09mX0tleXMpOwogICAgYmVnaW4KICAgICAgIC0tICBTdG9yZSB0aGUgY3VycmVudCBsYWJlbHMgaW4gdGhlIGVudmlyb25tZW50CiAgICAgICBmb3IgSSBpbiAxIC4uIE51bWJlcl9PZl9LZXlzIGxvb3AKLSAgICAgICAgIEdldF9Tb2Z0X0xhYmVsX0tleSAoSSwgUC5MYWJlbHMgKEkpKTsKKyAgICAgICAgIEdldF9Tb2Z0X0xhYmVsX0tleSAoSSwgUC5hbGwuTGFiZWxzIChJKSk7CiAgICAgICAgICBpZiBSZXNldCB0aGVuCiAgICAgICAgICAgICBTZXRfU29mdF9MYWJlbF9LZXkgKEksICIgIik7CiAgICAgICAgICBlbmQgaWY7CiAgICAgICBlbmQgbG9vcDsKLSAgICAgIFAuUHJldiA6PSBUb3BfT2ZfU3RhY2s7CisgICAgICBQLmFsbC5QcmV2IDo9IFRvcF9PZl9TdGFjazsKICAgICAgIC0tICBub3cgc3RvcmUgYWN0aXZlIGhlbHAgY29udGV4dCBhbmQgbm90ZXBhZAotICAgICAgUC5IZWxwIDo9IEFjdGl2ZV9Db250ZXh0OwotICAgICAgUC5Ob3RlcGFkIDo9IEFjdGl2ZV9Ob3RlcGFkOworICAgICAgUC5hbGwuSGVscCA6PSBBY3RpdmVfQ29udGV4dDsKKyAgICAgIFAuYWxsLk5vdGVwYWQgOj0gQWN0aXZlX05vdGVwYWQ7CiAgICAgICAtLSAgVGhlIG5vdGVwYWQgbXVzdCBub3cgdmFuaXNoIGFuZCB0aGUgbmV3IG5vdGVwYWQgaXMgZW1wdHkuCi0gICAgICBpZiBQLk5vdGVwYWQgLz0gTnVsbF9QYW5lbCB0aGVuCi0gICAgICAgICBIaWRlIChQLk5vdGVwYWQpOworICAgICAgaWYgUC5hbGwuTm90ZXBhZCAvPSBOdWxsX1BhbmVsIHRoZW4KKyAgICAgICAgIEhpZGUgKFAuYWxsLk5vdGVwYWQpOwogICAgICAgICAgVXBkYXRlX1BhbmVsczsKICAgICAgIGVuZCBpZjsKICAgICAgIEFjdGl2ZV9Ob3RlcGFkIDo9IE51bGxfUGFuZWw7CkBAIC0xMTksMTQgKzExOSwxNCBAQAogICAgICAgICAgcmFpc2UgRnVuY3Rpb25fS2V5X1N0YWNrX0Vycm9yOwogICAgICAgZWxzZQogICAgICAgICAgZm9yIEkgaW4gMSAuLiBOdW1iZXJfT2ZfS2V5cyBsb29wCi0gICAgICAgICAgICBTZXRfU29mdF9MYWJlbF9LZXkgKEksIFAuTGFiZWxzIChJKSwgSnVzdGlmaWNhdGlvbik7CisgICAgICAgICAgICBTZXRfU29mdF9MYWJlbF9LZXkgKEksIFAuYWxsLkxhYmVscyAoSSksIEp1c3RpZmljYXRpb24pOwogICAgICAgICAgZW5kIGxvb3A7CiAgICAgICAgICBwcmFnbWEgQXNzZXJ0IChBY3RpdmVfQ29udGV4dCAvPSBudWxsKTsKICAgICAgICAgIFJlbGVhc2VfU3RyaW5nIChBY3RpdmVfQ29udGV4dCk7Ci0gICAgICAgICBBY3RpdmVfQ29udGV4dCA6PSBQLkhlbHA7CisgICAgICAgICBBY3RpdmVfQ29udGV4dCA6PSBQLmFsbC5IZWxwOwogICAgICAgICAgUmVmcmVzaF9Tb2Z0X0xhYmVsX0tleXNfV2l0aG91dF9VcGRhdGU7Ci0gICAgICAgICBOb3RlcGFkX1RvX0NvbnRleHQgKFAuTm90ZXBhZCk7Ci0gICAgICAgICBUb3BfT2ZfU3RhY2sgOj0gUC5QcmV2OworICAgICAgICAgTm90ZXBhZF9Ub19Db250ZXh0IChQLmFsbC5Ob3RlcGFkKTsKKyAgICAgICAgIFRvcF9PZl9TdGFjayA6PSBQLmFsbC5QcmV2OwogICAgICAgICAgUmVsZWFzZV9FbnZpcm9ubWVudCAoUCk7CiAgICAgICBlbmQgaWY7CiAgICBlbmQgUG9wX0Vudmlyb25tZW50OwpAQCAtMTUwLDE3ICsxNTAsMTcgQEAKICAgICAgIGVsc2UKICAgICAgICAgIGxvb3AKICAgICAgICAgICAgIGV4aXQgd2hlbiBQID0gbnVsbDsKLSAgICAgICAgICAgIGlmIFAuSGVscC5hbGwgPSBLZXkgdGhlbgorICAgICAgICAgICAgaWYgUC5hbGwuSGVscC5hbGwgPSBLZXkgdGhlbgogICAgICAgICAgICAgICAgcmV0dXJuIFRydWU7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICBQIDo9IFAuUHJldjsKKyAgICAgICAgICAgICAgIFAgOj0gUC5hbGwuUHJldjsKICAgICAgICAgICAgIGVuZCBpZjsKICAgICAgICAgIGVuZCBsb29wOwogICAgICAgICAgcmV0dXJuIEZhbHNlOwogICAgICAgZW5kIGlmOwogICAgZW5kIEZpbmRfQ29udGV4dDsKIAotICAgcHJvY2VkdXJlIE5vdGVwYWRfVG9fQ29udGV4dCAoUGFuIDogaW4gUGFuZWwpCisgICBwcm9jZWR1cmUgTm90ZXBhZF9Ub19Db250ZXh0IChQYW4gOiBQYW5lbCkKICAgIGlzCiAgICAgICBXIDogV2luZG93OwogICAgYmVnaW4KZGlmZiAtLWdpdCBhL0FkYTk1L3NhbXBsZXMvc2FtcGxlLWZ1bmN0aW9uX2tleV9zZXR0aW5nLmFkcyBiL0FkYTk1L3NhbXBsZXMvc2FtcGxlLWZ1bmN0aW9uX2tleV9zZXR0aW5nLmFkcwppbmRleCBlMjBmNjE5Li40MTg4MTU4IDEwMDY0NAotLS0gYS9BZGE5NS9zYW1wbGVzL3NhbXBsZS1mdW5jdGlvbl9rZXlfc2V0dGluZy5hZHMKKysrIGIvQWRhOTUvc2FtcGxlcy9zYW1wbGUtZnVuY3Rpb25fa2V5X3NldHRpbmcuYWRzCkBAIC03LDcgKzcsNyBAQAogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwOSwyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCiAtLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KQEAgLTM1LDcgKzM1LDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgogLS0gIFZlcnNpb24gQ29udHJvbAotLS0gICRSZXZpc2lvbjogMS45ICQKKy0tICAkUmV2aXNpb246IDEuMTEgJAogLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOwpAQCAtNDUsOCArNDUsOCBAQAogLS0KIHBhY2thZ2UgU2FtcGxlLkZ1bmN0aW9uX0tleV9TZXR0aW5nIGlzCiAKLSAgIHByb2NlZHVyZSBQdXNoX0Vudmlyb25tZW50IChLZXkgICA6IGluIFN0cmluZzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNldCA6IGluIEJvb2xlYW4gOj0gVHJ1ZSk7CisgICBwcm9jZWR1cmUgUHVzaF9FbnZpcm9ubWVudCAoS2V5ICAgOiBTdHJpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXQgOiBCb29sZWFuIDo9IFRydWUpOwogICAgLS0gIFB1c2ggdGhlIGRlZmluaXRpb24gb2YgdGhlIGN1cnJlbnQgZnVuY3Rpb24ga2V5cyBvbiBhbiBpbnRlcm5hbAogICAgLS0gIHN0YWNrLiBJZiB0aGUgcmVzZXQgZmxhZyBpcyB0cnVlLCBhbGwgbGFiZWxzIGFyZSByZXNldCB3aGlsZQogICAgLS0gIHB1c2hlZCwgc28gdGhlIG5ldyBlbnZpcm9ubWVudCBjYW4gYXNzdW1lIGEgdGFidWxhIHJhc2EuCkBAIC02MiwxMyArNjIsMTMgQEAKICAgIC0tICBJbml0aWFsaXplIHRoZSBlbnZpcm9ubWVudAogCiAgICBmdW5jdGlvbiBDb250ZXh0IHJldHVybiBTdHJpbmc7Ci0gICAtLSAgUmV0dXJuIHRoZSBjdXJyZW50IGNvbnRleHQgaWRlbnRpdGZpZXIKKyAgIC0tICBSZXR1cm4gdGhlIGN1cnJlbnQgY29udGV4dCBpZGVudGlmaWVyCiAKICAgIGZ1bmN0aW9uIEZpbmRfQ29udGV4dCAoS2V5IDogU3RyaW5nKSByZXR1cm4gQm9vbGVhbjsKICAgIC0tICBMb29rIGZvciBhIGNvbnRleHQsIHJldHVybiB0cnVlIGlmIGl0IGlzIGluIHRoZSBzdGFjaywKICAgIC0tICBmYWxzZSBvdGhlcndpc2UuCiAKLSAgIHByb2NlZHVyZSBOb3RlcGFkX1RvX0NvbnRleHQgKFBhbiA6IGluIFBhbmVsKTsKKyAgIHByb2NlZHVyZSBOb3RlcGFkX1RvX0NvbnRleHQgKFBhbiA6IFBhbmVsKTsKICAgIC0tICBBZGQgYSBwYW5lbCByZXByZXNlbnRpbmcgYSBub3RlcGFkIHRvIHRoZSBjdXJyZW50IGNvbnRleHQuCiAKICAgIEZ1bmN0aW9uX0tleV9TdGFja19FcnJvciA6IGV4Y2VwdGlvbjsKZGlmZiAtLWdpdCBhL0FkYTk1L3NhbXBsZXMvc2FtcGxlLWhlYWRlcl9oYW5kbGVyLmFkYiBiL0FkYTk1L3NhbXBsZXMvc2FtcGxlLWhlYWRlcl9oYW5kbGVyLmFkYgppbmRleCBkMTk4ZDY2Li5mNTUyZTIwIDEwMDY0NAotLS0gYS9BZGE5NS9zYW1wbGVzL3NhbXBsZS1oZWFkZXJfaGFuZGxlci5hZGIKKysrIGIvQWRhOTUvc2FtcGxlcy9zYW1wbGUtaGVhZGVyX2hhbmRsZXIuYWRiCkBAIC03LDcgKzcsNyBAQAogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDQsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAxMSwyMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCiAtLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KQEAgLTM1LDE0ICszNSwxNiBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CiAtLSAgVmVyc2lvbiBDb250cm9sCi0tLSAgJFJldmlzaW9uOiAxLjE2ICQKLS0tICAkRGF0ZTogMjAwNi8wNi8yNSAxNDozMDoyMiAkCistLSAgJFJldmlzaW9uOiAxLjIwICQKKy0tICAkRGF0ZTogMjAxNC8wOS8xMyAxOToxMDoxOCAkCiAtLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHdpdGggQWRhLkNhbGVuZGFyOyB1c2UgQWRhLkNhbGVuZGFyOwogd2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uSW50ZWdlcl9JTzsKIHdpdGggU2FtcGxlLk1hbmlmZXN0OyB1c2UgU2FtcGxlLk1hbmlmZXN0OwogCitwcmFnbWEgRWxhYm9yYXRlX0FsbCAoVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lvLkludGVnZXJfSU8pOworCiAtLSAgVGhpcyBwYWNrYWdlIGhhbmRsZXMgdGhlIHBhaW50aW5nIG9mIHRoZSBoZWFkZXIgbGluZSBvZiB0aGUgc2NyZWVuLgogLS0KIHBhY2thZ2UgYm9keSBTYW1wbGUuSGVhZGVyX0hhbmRsZXIgaXMKQEAgLTY1LDcgKzY3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sdW1ucyA6IENvbHVtbl9Db3VudCkgcmV0dXJuIEludGVnZXI7CiAgICBwcmFnbWEgQ29udmVudGlvbiAoQywgSW5pdF9IZWFkZXJfV2luZG93KTsKIAotICAgcHJvY2VkdXJlIEludGVybmFsX1VwZGF0ZV9IZWFkZXJfV2luZG93IChEb19VcGRhdGUgOiBpbiBCb29sZWFuKTsKKyAgIHByb2NlZHVyZSBJbnRlcm5hbF9VcGRhdGVfSGVhZGVyX1dpbmRvdyAoRG9fVXBkYXRlIDogQm9vbGVhbik7CiAKICAgIC0tICBUaGUgaW5pdGlhbGl6YXRpb24gbXVzdCBiZSBjYWxsZWQgYmVmb3JlIEluaXRfU2NyZWVuLiBJdCBzdGVhbHMgdHdvCiAgICAtLSAgbGluZXMgZnJvbSB0aGUgdG9wIG9mIHRoZSBzY3JlZW4uCkBAIC03NSwxMSArNzcsMTEgQEAKICAgICAgIFJpcF9PZmZfTGluZXMgKDIsIEluaXRfSGVhZGVyX1dpbmRvdydBY2Nlc3MpOwogICAgZW5kIEluaXRfSGVhZGVyX0hhbmRsZXI7CiAKLSAgIHByb2NlZHVyZSBOX091dCAoTiA6IGluIEludGVnZXIpOworICAgcHJvY2VkdXJlIE5fT3V0IChOIDogSW50ZWdlcik7CiAKICAgIC0tICBFbWl0IGEgdHdvIGRpZ2l0IG51bWJlciBhbmQgZW5zdXJlIHRoYXQgYSBsZWFkaW5nIHplcm8gaXMgZ2VuZXJhdGVkIGlmCiAgICAtLSAgbmVjZXNzYXJ5LgotICAgcHJvY2VkdXJlIE5fT3V0IChOIDogaW4gSW50ZWdlcikKKyAgIHByb2NlZHVyZSBOX091dCAoTiA6IEludGVnZXIpCiAgICBpcwogICAgYmVnaW4KICAgICAgIGlmIE4gPCAxMCB0aGVuCkBAIC05Miw3ICs5NCw3IEBACiAKICAgIC0tICBQYWludCB0aGUgaGVhZGVyIHdpbmRvdy4gVGhlIGlucHV0IHBhcmFtZXRlciBpcyBhIGZsYWcgaW5kaWNhdGluZwogICAgLS0gIHdoZXRoZXIgb3Igbm90IHRoZSBzY3JlZW4gc2hvdWxkIGJlIHVwZGF0ZWQgcGh5c2ljYWxseSBhZnRlciBwYWludGluZy4KLSAgIHByb2NlZHVyZSBJbnRlcm5hbF9VcGRhdGVfSGVhZGVyX1dpbmRvdyAoRG9fVXBkYXRlIDogaW4gQm9vbGVhbikKKyAgIHByb2NlZHVyZSBJbnRlcm5hbF9VcGRhdGVfSGVhZGVyX1dpbmRvdyAoRG9fVXBkYXRlIDogQm9vbGVhbikKICAgIGlzCiAgICAgICB0eXBlIE1vbnRoX05hbWVfQXJyYXkgaXMKICAgICAgICAgIGFycmF5IChNb250aF9OdW1iZXInRmlyc3QgLi4gTW9udGhfTnVtYmVyJ0xhc3QpIG9mIFN0cmluZyAoMSAuLiA5KTsKQEAgLTExOSw4ICsxMjEsMTEgQEAKICAgICAgIEQgICAgICA6IGNvbnN0YW50IERheV9OdW1iZXIgICA6PSBEYXkgKE5vdyk7CiAgICBiZWdpbgogICAgICAgaWYgSGVhZGVyX1dpbmRvdyAvPSBOdWxsX1dpbmRvdyB0aGVuCi0gICAgICAgICBpZiBNaW51dGUgLz0gRGlzcGxheV9NaW4gb3IgZWxzZSBIb3VyIC89IERpc3BsYXlfSG91cgotICAgICAgICAgICBvciBlbHNlIERpc3BsYXlfRGF5IC89IEQgb3IgZWxzZSBEaXNwbGF5X01vbnRoIC89IE1vbiB0aGVuCisgICAgICAgICBpZiBNaW51dGUgLz0gRGlzcGxheV9NaW4KKyAgICAgICAgICAgb3IgZWxzZSBIb3VyIC89IERpc3BsYXlfSG91cgorICAgICAgICAgICBvciBlbHNlIERpc3BsYXlfRGF5IC89IEQKKyAgICAgICAgICAgb3IgZWxzZSBEaXNwbGF5X01vbnRoIC89IE1vbgorICAgICAgICAgdGhlbgogICAgICAgICAgICAgTW92ZV9DdXJzb3IgKEhlYWRlcl9XaW5kb3csIDAsIDApOwogICAgICAgICAgICAgTl9PdXQgKEQpOyBBZGQgKEhlYWRlcl9XaW5kb3csICcuJyk7CiAgICAgICAgICAgICBBZGQgKEhlYWRlcl9XaW5kb3csIE1vbnRoX05hbWVzIChNb24pKTsKQEAgLTE2OSw3ICsxNzQsNyBAQAogICAgICAgICAgUG9zIDo9IENvbHVtbnMgLSBDb2x1bW5fUG9zaXRpb24gKFRpdGxlJ0xlbmd0aCk7CiAgICAgICAgICBBZGQgKFdpbiwgMCwgUG9zIC8gMiwgVGl0bGUpOwogICAgICAgICAgLS0gIEluIHRoaXMgcGhhc2Ugd2UgbXVzdCBub3QgYWxsb3cgYSBwaHlzaWNhbCB1cGRhdGUsIGJlY2F1c2UKLSAgICAgICAgIC0tICBuY3Vyc2VzIGlzbrR0IHByb3Blcmx5IGluaXRpYWxpemVkIGF0IHRoaXMgcG9pbnQuCisgICAgICAgICAtLSAgbmN1cnNlcyBpcyBub3QgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYXQgdGhpcyBwb2ludC4KICAgICAgICAgIEludGVybmFsX1VwZGF0ZV9IZWFkZXJfV2luZG93IChGYWxzZSk7CiAgICAgICAgICByZXR1cm4gMDsKICAgICAgIGVsc2UKZGlmZiAtLWdpdCBhL0FkYTk1L3NhbXBsZXMvc2FtcGxlLWhlbHBlcnMuYWRiIGIvQWRhOTUvc2FtcGxlcy9zYW1wbGUtaGVscGVycy5hZGIKaW5kZXggZDA0ODUzZS4uY2VlZjI2OCAxMDA2NDQKLS0tIGEvQWRhOTUvc2FtcGxlcy9zYW1wbGUtaGVscGVycy5hZGIKKysrIGIvQWRhOTUvc2FtcGxlcy9zYW1wbGUtaGVscGVycy5hZGIKQEAgLTcsNyArNyw3IEBACiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OC0yMDA5LDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KIC0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQpAQCAtMzUsMTkgKzM1LDE5IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKIC0tICBWZXJzaW9uIENvbnRyb2wKLS0tICAkUmV2aXNpb246IDEuMTIgJAotLS0gICREYXRlOiAyMDA4LzA3LzI2IDE4OjQ4OjA4ICQKKy0tICAkUmV2aXNpb246IDEuMTQgJAorLS0gICREYXRlOiAyMDExLzAzLzE5IDEyOjEzOjIxICQKIC0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogd2l0aCBTYW1wbGUuRXhwbGFuYXRpb247IHVzZSBTYW1wbGUuRXhwbGFuYXRpb247CiAKLS0tICBUaGlzIHBhY2thZ2UgY29udGFpbnMgc29tZSBjb252ZW5pYW50IGhlbHBlciByb3V0aW5lcyB1c2VkIHRocm91Z2hvdXQKKy0tICBUaGlzIHBhY2thZ2UgY29udGFpbnMgc29tZSBjb252ZW5pZW50IGhlbHBlciByb3V0aW5lcyB1c2VkIHRocm91Z2hvdXQKIC0tICB0aGlzIGV4YW1wbGUuCiAtLQogcGFja2FnZSBib2R5IFNhbXBsZS5IZWxwZXJzIGlzCiAKLSAgIHByb2NlZHVyZSBXaW5kb3dfVGl0bGUgKFdpbiAgIDogaW4gV2luZG93OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgVGl0bGUgOiBpbiBTdHJpbmcpCisgICBwcm9jZWR1cmUgV2luZG93X1RpdGxlIChXaW4gICA6IFdpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpdGxlIDogU3RyaW5nKQogICAgaXMKICAgICAgIEhlaWdodCA6IExpbmVfQ291bnQ7CiAgICAgICBXaWR0aCAgOiBDb2x1bW5fQ291bnQ7CmRpZmYgLS1naXQgYS9BZGE5NS9zYW1wbGVzL3NhbXBsZS1oZWxwZXJzLmFkcyBiL0FkYTk1L3NhbXBsZXMvc2FtcGxlLWhlbHBlcnMuYWRzCmluZGV4IGMxYzhlNzkuLjI4ZTg5YmIgMTAwNjQ0Ci0tLSBhL0FkYTk1L3NhbXBsZXMvc2FtcGxlLWhlbHBlcnMuYWRzCisrKyBiL0FkYTk1L3NhbXBsZXMvc2FtcGxlLWhlbHBlcnMuYWRzCkBAIC03LDcgKzcsNyBAQAogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwOSwyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCiAtLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KQEAgLTM1LDE4ICszNSwxOCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CiAtLSAgVmVyc2lvbiBDb250cm9sCi0tLSAgJFJldmlzaW9uOiAxLjkgJAorLS0gICRSZXZpc2lvbjogMS4xMSAkCiAtLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHdpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7CiAKLS0tICBUaGlzIHBhY2thZ2UgY29udGFpbnMgc29tZSBjb252ZW5pYW50IGhlbHBlciByb3V0aW5lcyB1c2VkIHRocm91Z2hvdXQKKy0tICBUaGlzIHBhY2thZ2UgY29udGFpbnMgc29tZSBjb252ZW5pZW50IGhlbHBlciByb3V0aW5lcyB1c2VkIHRocm91Z2hvdXQKIC0tICB0aGlzIGV4YW1wbGUuCiAtLQogcGFja2FnZSBTYW1wbGUuSGVscGVycyBpcwogCi0gICBwcm9jZWR1cmUgV2luZG93X1RpdGxlIChXaW4gICA6IGluIFdpbmRvdzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpdGxlIDogaW4gU3RyaW5nKTsKKyAgIHByb2NlZHVyZSBXaW5kb3dfVGl0bGUgKFdpbiAgIDogV2luZG93OworICAgICAgICAgICAgICAgICAgICAgICAgICAgVGl0bGUgOiBTdHJpbmcpOwogICAgLS0gIFB1dCBhIHRpdGxlIHN0cmluZyBpbnRvIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSB3aW5kb3cKIAogICAgcHJvY2VkdXJlIE5vdF9JbXBsZW1lbnRlZDsKZGlmZiAtLWdpdCBhL0FkYTk1L3NhbXBsZXMvc2FtcGxlLWtleWJvYXJkX2hhbmRsZXIuYWRiIGIvQWRhOTUvc2FtcGxlcy9zYW1wbGUta2V5Ym9hcmRfaGFuZGxlci5hZGIKaW5kZXggZmRhYzA1NC4uMWQzZjIwYyAxMDA2NDQKLS0tIGEvQWRhOTUvc2FtcGxlcy9zYW1wbGUta2V5Ym9hcmRfaGFuZGxlci5hZGIKKysrIGIvQWRhOTUvc2FtcGxlcy9zYW1wbGUta2V5Ym9hcmRfaGFuZGxlci5hZGIKQEAgLTcsNyArNyw3IEBACiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KIC0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQpAQCAtMzUsOCArMzUsOCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CiAtLSAgVmVyc2lvbiBDb250cm9sCi0tLSAgJFJldmlzaW9uOiAxLjE0ICQKLS0tICAkRGF0ZTogMjAwNi8wNi8yNSAxNDozMDoyMiAkCistLSAgJFJldmlzaW9uOiAxLjE2ICQKKy0tICAkRGF0ZTogMjAxMS8wMy8yMyAwMDozNDoyNCAkCiAtLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHdpdGggQWRhLlN0cmluZ3M7IHVzZSBBZGEuU3RyaW5nczsKQEAgLTExMSw3ICsxMTEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgQnVmZmVyIDogU3RyaW5nICgxIC4uIFBvc2l0aXZlIChDb2x1bW5zIC0gMTEpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIENtZGMgOiBTdHJpbmcgKDEgLi4gOCk7CiAgICAgICAgICAgICAgICAgICAgICBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgR2V0X0J1ZmZlciAoRmxkID0+IEZBICgyKSwgU3RyID0+IEJ1ZmZlcik7CisgICAgICAgICAgICAgICAgICAgICAgICBHZXRfQnVmZmVyIChGbGQgPT4gRkEuYWxsICgyKSwgU3RyID0+IEJ1ZmZlcik7CiAgICAgICAgICAgICAgICAgICAgICAgICBUcmltIChCdWZmZXIsIExlZnQpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgQnVmZmVyICgxKSAvPSAnICcgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ21kYyA6PSBUb19VcHBlciAoQnVmZmVyIChDbWRjJ1JhbmdlKSk7CkBAIC0xNTcsOCArMTU3LDggQEAKICAgICAgICAgICAgICAgICAgIGVuZCBpZjsKICAgICAgICAgICAgICAgIGVuZCBsb29wOwogICAgICAgICAgICAgICAgRW51bV9GaWVsZCA6PSBDcmVhdGUgKEVudW1fSW5mbywgVHJ1ZSk7Ci0gICAgICAgICAgICAgICBTZXRfRmllbGRfVHlwZSAoRkEgKDIpLCBFbnVtX0ZpZWxkKTsKLSAgICAgICAgICAgICAgIFNldF9CYWNrZ3JvdW5kIChGQSAoMiksIE5vcm1hbF9WaWRlbyk7CisgICAgICAgICAgICAgICBTZXRfRmllbGRfVHlwZSAoRkEuYWxsICgyKSwgRW51bV9GaWVsZCk7CisgICAgICAgICAgICAgICBTZXRfQmFja2dyb3VuZCAoRkEuYWxsICgyKSwgTm9ybWFsX1ZpZGVvKTsKIAogICAgICAgICAgICAgICAgRmguRHJpdmVfTWUgKEZybSwgTGluZXMgLSAzLCAwKTsKICAgICAgICAgICAgICAgIERlbGV0ZSAoRnJtKTsKQEAgLTE3NCw3ICsxNzQsNyBAQAogICAgICAgU2V0X1RpbWVvdXRfTW9kZSAoV2luLCBEZWxheWVkLCAzMDAwMCk7CiAgICAgICBsb29wCiAgICAgICAgICBLIDo9IEdldF9LZXlzdHJva2UgKFdpbik7Ci0gICAgICAgICBpZiBLID0gS2V5X05vbmUgdGhlbiAgLS0gYSB0aW1lb3V0IG9jY3VyZWQKKyAgICAgICAgIGlmIEsgPSBLZXlfTm9uZSB0aGVuICAtLSBhIHRpbWVvdXQgb2NjdXJyZWQKICAgICAgICAgICAgIFVwZGF0ZV9IZWFkZXJfV2luZG93OwogICAgICAgICAgZWxzaWYgSyA9IDMgYW5kIHRoZW4gbm90IEluX0NvbW1hbmQgIHRoZW4gIC0tIENUUkwtQwogICAgICAgICAgICAgSyA6PSBDb21tYW5kOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9zYW1wbGUtbWVudV9kZW1vLWF1eC5hZGIgYi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1tZW51X2RlbW8tYXV4LmFkYgppbmRleCBiOWIyMzdjLi4wOTFmMDhiIDEwMDY0NAotLS0gYS9BZGE5NS9zYW1wbGVzL3NhbXBsZS1tZW51X2RlbW8tYXV4LmFkYgorKysgYi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1tZW51X2RlbW8tYXV4LmFkYgpAQCAtNyw3ICs3LDcgQEAKIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIENvcHlyaWdodCAoYykgMTk5OCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQogLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCkBAIC0zNSw4ICszNSw4IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKIC0tICBWZXJzaW9uIENvbnRyb2wKLS0tICAkUmV2aXNpb246IDEuMTMgJAotLS0gICREYXRlOiAyMDA2LzA2LzI1IDE0OjMwOjIyICQKKy0tICAkUmV2aXNpb246IDEuMTQgJAorLS0gICREYXRlOiAyMDA5LzEyLzI2IDE3OjM4OjU4ICQKIC0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogd2l0aCBBZGEuQ2hhcmFjdGVycy5MYXRpbl8xOyB1c2UgQWRhLkNoYXJhY3RlcnMuTGF0aW5fMTsKQEAgLTQ4LDcgKzQ4LDcgQEAKIAogcGFja2FnZSBib2R5IFNhbXBsZS5NZW51X0RlbW8uQXV4IGlzCiAKLSAgIHByb2NlZHVyZSBHZW9tZXRyeSAoTSAgOiBpbiAgTWVudTsKKyAgIHByb2NlZHVyZSBHZW9tZXRyeSAoTSAgOiBNZW51OwogICAgICAgICAgICAgICAgICAgICAgICBMICA6IG91dCBMaW5lX0NvdW50OwogICAgICAgICAgICAgICAgICAgICAgICBDICA6IG91dCBDb2x1bW5fQ291bnQ7CiAgICAgICAgICAgICAgICAgICAgICAgIFkgIDogb3V0IExpbmVfUG9zaXRpb247CkBAIC01Niw3ICs1Niw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgIEZ5IDogb3V0IExpbmVfUG9zaXRpb247CiAgICAgICAgICAgICAgICAgICAgICAgIEZ4IDogb3V0IENvbHVtbl9Qb3NpdGlvbik7CiAKLSAgIHByb2NlZHVyZSBHZW9tZXRyeSAoTSAgOiBpbiAgTWVudTsKKyAgIHByb2NlZHVyZSBHZW9tZXRyeSAoTSAgOiBNZW51OwogICAgICAgICAgICAgICAgICAgICAgICBMICA6IG91dCBMaW5lX0NvdW50OyAgICAgICAgLS0gTGluZXMgdXNlZCBmb3IgbWVudQogICAgICAgICAgICAgICAgICAgICAgICBDICA6IG91dCBDb2x1bW5fQ291bnQ7ICAgICAgLS0gQ29sdW1ucyB1c2VkIGZvciBtZW51CiAgICAgICAgICAgICAgICAgICAgICAgIFkgIDogb3V0IExpbmVfUG9zaXRpb247ICAgICAtLSBQcm9wb3NlZCBMaW5lIGZvciBtZW51CkBAIC04MiwxMSArODIsMTEgQEAKIAogICAgZW5kIEdlb21ldHJ5OwogCi0gICBwcm9jZWR1cmUgR2VvbWV0cnkgKE0gOiBpbiAgTWVudTsKKyAgIHByb2NlZHVyZSBHZW9tZXRyeSAoTSA6IE1lbnU7CiAgICAgICAgICAgICAgICAgICAgICAgIEwgOiBvdXQgTGluZV9Db3VudDsgICAgICAgIC0tIExpbmVzIHVzZWQgZm9yIG1lbnUKICAgICAgICAgICAgICAgICAgICAgICAgQyA6IG91dCBDb2x1bW5fQ291bnQ7ICAgICAgLS0gQ29sdW1ucyB1c2VkIGZvciBtZW51CiAgICAgICAgICAgICAgICAgICAgICAgIFkgOiBvdXQgTGluZV9Qb3NpdGlvbjsgICAgIC0tIFByb3Bvc2VkIExpbmUgZm9yIG1lbnUKLSAgICAgICAgICAgICAgICAgICAgICAgWCAgOiBvdXQgQ29sdW1uX1Bvc2l0aW9uKSAgLS0gUHJvcG9zZWQgQ29sdW1uIGZvciBtZW51CisgICAgICAgICAgICAgICAgICAgICAgIFggOiBvdXQgQ29sdW1uX1Bvc2l0aW9uKSAgIC0tIFByb3Bvc2VkIENvbHVtbiBmb3IgbWVudQogICAgaXMKICAgICAgIEZ5IDogTGluZV9Qb3NpdGlvbjsKICAgICAgIEZ4IDogQ29sdW1uX1Bvc2l0aW9uOwpAQCAtMTM0LDcgKzEzNCw3IEBACiAgICAgICByZXR1cm4gUGFuOwogICAgZW5kIENyZWF0ZTsKIAotICAgcHJvY2VkdXJlIERlc3Ryb3kgKE0gOiBpbiBNZW51OworICAgcHJvY2VkdXJlIERlc3Ryb3kgKE0gOiBNZW51OwogICAgICAgICAgICAgICAgICAgICAgIFAgOiBpbiBvdXQgUGFuZWwpCiAgICBpcwogICAgICAgVywgUyA6IFdpbmRvdzsKZGlmZiAtLWdpdCBhL0FkYTk1L3NhbXBsZXMvc2FtcGxlLW1lbnVfZGVtby1hdXguYWRzIGIvQWRhOTUvc2FtcGxlcy9zYW1wbGUtbWVudV9kZW1vLWF1eC5hZHMKaW5kZXggOTY0ZTM4ZS4uZTgyYWVkZiAxMDA2NDQKLS0tIGEvQWRhOTUvc2FtcGxlcy9zYW1wbGUtbWVudV9kZW1vLWF1eC5hZHMKKysrIGIvQWRhOTUvc2FtcGxlcy9zYW1wbGUtbWVudV9kZW1vLWF1eC5hZHMKQEAgLTcsNyArNyw3IEBACiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OC0yMDA5LDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KIC0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQpAQCAtMzUsNyArMzUsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CiAtLSAgVmVyc2lvbiBDb250cm9sCi0tLSAgJFJldmlzaW9uOiAxLjkgJAorLS0gICRSZXZpc2lvbjogMS4xMSAkCiAtLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHdpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsgdXNlICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOwpAQCAtNDQsMTIgKzQ0LDEyIEBACiAKIHBhY2thZ2UgU2FtcGxlLk1lbnVfRGVtby5BdXggaXMKIAotICAgcHJvY2VkdXJlIEdlb21ldHJ5IChNICA6IGluICBNZW51OworICAgcHJvY2VkdXJlIEdlb21ldHJ5IChNICA6IE1lbnU7CiAgICAgICAgICAgICAgICAgICAgICAgIEwgIDogb3V0IExpbmVfQ291bnQ7CiAgICAgICAgICAgICAgICAgICAgICAgIEMgIDogb3V0IENvbHVtbl9Db3VudDsKICAgICAgICAgICAgICAgICAgICAgICAgWSAgOiBvdXQgTGluZV9Qb3NpdGlvbjsKICAgICAgICAgICAgICAgICAgICAgICAgWCAgOiBvdXQgQ29sdW1uX1Bvc2l0aW9uKTsKLSAgIC0tICBDYWxjdWxhdGUgdGhlIGdlb21ldHJ5IGZvciBhIHBhbmVsIGJlZWluZyBhYmxlIHRvIGJlIHVzZWQgdG8gZGlzcGxheQorICAgLS0gIENhbGN1bGF0ZSB0aGUgZ2VvbWV0cnkgZm9yIGEgcGFuZWwgYmVpbmcgYWJsZSB0byBiZSB1c2VkIHRvIGRpc3BsYXkKICAgIC0tICB0aGUgbWVudS4KIAogICAgZnVuY3Rpb24gQ3JlYXRlIChNICAgICA6IE1lbnU7CkBAIC01OSw3ICs1OSw3IEBACiAgICAtLSAgQ3JlYXRlIGEgcGFuZWwgZGVjb3JhdGVkIHdpdGggYSBmcmFtZSBhbmQgdGhlIHRpdGxlIGF0IHRoZSBzcGVjaWZpZWQKICAgIC0tICBwb3NpdGlvbi4gVGhlIGRpbWVuc2lvbiBvZiB0aGUgcGFuZWwgaXMgZGVyaXZlZCBmcm9tIHRoZSBtZW51cyBsYXlvdXQuCiAKLSAgIHByb2NlZHVyZSBEZXN0cm95IChNIDogaW4gTWVudTsKKyAgIHByb2NlZHVyZSBEZXN0cm95IChNIDogTWVudTsKICAgICAgICAgICAgICAgICAgICAgICBQIDogaW4gb3V0IFBhbmVsKTsKICAgIC0tICBEZXN0cm95IGFsbCB0aGUgd2luZG93aW5nIHN0cnVjdHVyZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbWVudSBhbmQKICAgIC0tICBwYW5lbC4KZGlmZiAtLWdpdCBhL0FkYTk1L3NhbXBsZXMvc2FtcGxlLW1lbnVfZGVtby1oYW5kbGVyLmFkYiBiL0FkYTk1L3NhbXBsZXMvc2FtcGxlLW1lbnVfZGVtby1oYW5kbGVyLmFkYgppbmRleCAxODc0N2U5Li44NGQyOWY2IDEwMDY0NAotLS0gYS9BZGE5NS9zYW1wbGVzL3NhbXBsZS1tZW51X2RlbW8taGFuZGxlci5hZGIKKysrIGIvQWRhOTUvc2FtcGxlcy9zYW1wbGUtbWVudV9kZW1vLWhhbmRsZXIuYWRiCkBAIC03LDcgKzcsNyBAQAogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gQ29weXJpZ2h0IChjKSAxOTk4LDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNCwyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCiAtLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KQEAgLTE1LDcgKzE1LDcgQEAKIC0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQogLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCiAtLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KLS0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyA6ICAgICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KIC0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQpAQCAtMzUsOCArMzUsOCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CiAtLSAgVmVyc2lvbiBDb250cm9sCi0tLSAgJFJldmlzaW9uOiAxLjE1ICQKLS0tICAkRGF0ZTogMjAwNC8wOC8yMSAyMTozNzowMCAkCistLSAgJFJldmlzaW9uOiAxLjE2ICQKKy0tICAkRGF0ZTogMjAwOS8xMi8yNiAxNzozODo1OCAkCiAtLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHdpdGggU2FtcGxlLk1lbnVfRGVtby5BdXg7CkBAIC00Nyw4ICs0Nyw4IEBACiAKICAgIHBhY2thZ2UgQXV4IHJlbmFtZXMgU2FtcGxlLk1lbnVfRGVtby5BdXg7CiAKLSAgIHByb2NlZHVyZSBEcml2ZV9NZSAoTSAgICAgOiBpbiBNZW51OwotICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSA6IGluIFN0cmluZyA6PSAiIikKKyAgIHByb2NlZHVyZSBEcml2ZV9NZSAoTSAgICAgOiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSA6IFN0cmluZyA6PSAiIikKICAgIGlzCiAgICAgICBMIDogTGluZV9Db3VudDsKICAgICAgIEMgOiBDb2x1bW5fQ291bnQ7CkBAIC01OSwxMCArNTksMTAgQEAKICAgICAgIERyaXZlX01lIChNLCBZLCBYLCBUaXRsZSk7CiAgICBlbmQgRHJpdmVfTWU7CiAKLSAgIHByb2NlZHVyZSBEcml2ZV9NZSAoTSAgICAgOiBpbiBNZW51OwotICAgICAgICAgICAgICAgICAgICAgICBMaW4gICA6IGluIExpbmVfUG9zaXRpb247Ci0gICAgICAgICAgICAgICAgICAgICAgIENvbCAgIDogaW4gQ29sdW1uX1Bvc2l0aW9uOwotICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSA6IGluIFN0cmluZyA6PSAiIikKKyAgIHByb2NlZHVyZSBEcml2ZV9NZSAoTSAgICAgOiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICBMaW4gICA6IExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICAgIENvbCAgIDogQ29sdW1uX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSA6IFN0cmluZyA6PSAiIikKICAgIGlzCiAgICAgICBNYXNrIDogRXZlbnRfTWFzayA6PSBOb19FdmVudHM7CiAgICAgICBPbGQgIDogRXZlbnRfTWFzazsKZGlmZiAtLWdpdCBhL0FkYTk1L3NhbXBsZXMvc2FtcGxlLW1lbnVfZGVtby1oYW5kbGVyLmFkcyBiL0FkYTk1L3NhbXBsZXMvc2FtcGxlLW1lbnVfZGVtby1oYW5kbGVyLmFkcwppbmRleCAxYTgyZjlmLi5lOWVhYTZiIDEwMDY0NAotLS0gYS9BZGE5NS9zYW1wbGVzL3NhbXBsZS1tZW51X2RlbW8taGFuZGxlci5hZHMKKysrIGIvQWRhOTUvc2FtcGxlcy9zYW1wbGUtbWVudV9kZW1vLWhhbmRsZXIuYWRzCkBAIC03LDcgKzcsNyBAQAogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCiAtLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KQEAgLTM1LDcgKzM1LDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgogLS0gIFZlcnNpb24gQ29udHJvbAotLS0gICRSZXZpc2lvbjogMS45ICQKKy0tICAkUmV2aXNpb246IDEuMTAgJAogLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7CkBAIC01MSwxNCArNTEsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFuIDogUGFuZWwpIHJldHVybiBCb29sZWFuOwogcGFja2FnZSBTYW1wbGUuTWVudV9EZW1vLkhhbmRsZXIgaXMKIAotICAgcHJvY2VkdXJlIERyaXZlX01lIChNICAgICA6IGluIE1lbnU7Ci0gICAgICAgICAgICAgICAgICAgICAgIExpbiAgIDogaW4gTGluZV9Qb3NpdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgICAgQ29sICAgOiBpbiBDb2x1bW5fUG9zaXRpb247Ci0gICAgICAgICAgICAgICAgICAgICAgIFRpdGxlIDogaW4gU3RyaW5nIDo9ICIiKTsKKyAgIHByb2NlZHVyZSBEcml2ZV9NZSAoTSAgICAgOiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICBMaW4gICA6IExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICAgIENvbCAgIDogQ29sdW1uX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSA6IFN0cmluZyA6PSAiIik7CiAgICAtLSAgUG9zaXRpb24gdGhlIG1lbnUgYXQgdGhlIGdpdmVuIHBvaW50IGFuZCBkcml2ZSBpdC4KIAotICAgcHJvY2VkdXJlIERyaXZlX01lIChNICAgICA6IGluIE1lbnU7Ci0gICAgICAgICAgICAgICAgICAgICAgIFRpdGxlIDogaW4gU3RyaW5nIDo9ICIiKTsKKyAgIHByb2NlZHVyZSBEcml2ZV9NZSAoTSAgICAgOiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSA6IFN0cmluZyA6PSAiIik7CiAgICAtLSAgQ2VudGVyIG1lbnUgYW5kIGRyaXZlIGl0LgogCiBlbmQgU2FtcGxlLk1lbnVfRGVtby5IYW5kbGVyOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9zYW1wbGUtbWVudV9kZW1vLmFkYiBiL0FkYTk1L3NhbXBsZXMvc2FtcGxlLW1lbnVfZGVtby5hZGIKaW5kZXggMzg2NDY3NC4uODBjZDk0YiAxMDA2NDQKLS0tIGEvQWRhOTUvc2FtcGxlcy9zYW1wbGUtbWVudV9kZW1vLmFkYgorKysgYi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1tZW51X2RlbW8uYWRiCkBAIC03LDcgKzcsNyBAQAogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDQsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwOCwyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCiAtLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KQEAgLTM1LDggKzM1LDggQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgogLS0gIFZlcnNpb24gQ29udHJvbAotLS0gICRSZXZpc2lvbjogMS4xOCAkCi0tLSAgJERhdGU6IDIwMDgvMDcvMjYgMTg6NDg6MzAgJAorLS0gICRSZXZpc2lvbjogMS4xOSAkCistLSAgJERhdGU6IDIwMTEvMDMvMjMgMDA6NDQ6MTIgJAogLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOwpAQCAtMTU0LDcgKzE1NCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBPIDogSXRlbV9PcHRpb25fU2V0OwogICAgICAgICAgICAgICAgICAgICAgYmVnaW4KICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBKIGluIEknUmFuZ2UgbG9vcAotICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0X09wdGlvbnMgKEkgKEopLCBPKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldF9PcHRpb25zIChJLmFsbCAoSiksIE8pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgTy5TZWxlY3RhYmxlIDo9IFRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBIaWRlX0xvbmcgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKIGlzCkBAIC0xNjMsNyArMTYzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gb3RoZXJzID0+IG51bGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQgY2FzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCBpZjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFNldF9PcHRpb25zIChJIChKKSwgTyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXRfT3B0aW9ucyAoSS5hbGwgKEopLCBPKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCBsb29wOwogICAgICAgICAgICAgICAgICAgICAgZW5kOwogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlOwpAQCAtMzc4LDE0ICszNzgsMTQgQEAKICAgICAgIFNldF9QYWRfQ2hhcmFjdGVyIChNLCAnfCcpOwogCiAgICAgICBNVUQuU2V0X1VzZXJfRGF0YSAoTSwgVTEpOwotICAgICAgSVVELlNldF9Vc2VyX0RhdGEgKEl0bSAoMSksIFUzKTsKKyAgICAgIElVRC5TZXRfVXNlcl9EYXRhIChJdG0uYWxsICgxKSwgVTMpOwogCiAgICAgICBNaC5Ecml2ZV9NZSAoTSk7CiAKICAgICAgIE1VRC5HZXRfVXNlcl9EYXRhIChNLCBVMik7CiAgICAgICBwcmFnbWEgQXNzZXJ0IChVMSA9IFUyIGFuZCBVMS5hbGwgPSA0NzExKTsKIAotICAgICAgSVVELkdldF9Vc2VyX0RhdGEgKEl0bSAoMSksIFU0KTsKKyAgICAgIElVRC5HZXRfVXNlcl9EYXRhIChJdG0uYWxsICgxKSwgVTQpOwogICAgICAgcHJhZ21hIEFzc2VydCAoVTMgPSBVNCBhbmQgVTMuYWxsID0gNDcxMik7CiAKICAgICAgIFBvcF9FbnZpcm9ubWVudDsKZGlmZiAtLWdpdCBhL0FkYTk1L3NhbXBsZXMvc2FtcGxlLXRleHRfaW9fZGVtby5hZGIgYi9BZGE5NS9zYW1wbGVzL3NhbXBsZS10ZXh0X2lvX2RlbW8uYWRiCmluZGV4IDBiMzg1YzQuLmE0NThhMzcgMTAwNjQ0Ci0tLSBhL0FkYTk1L3NhbXBsZXMvc2FtcGxlLXRleHRfaW9fZGVtby5hZGIKKysrIGIvQWRhOTUvc2FtcGxlcy9zYW1wbGUtdGV4dF9pb19kZW1vLmFkYgpAQCAtNyw3ICs3LDcgQEAKIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIENvcHlyaWdodCAoYykgMTk5OC0yMDA0LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQogLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCkBAIC0zNSwxOCArMzUsMjQgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgogLS0gIFZlcnNpb24gQ29udHJvbAotLS0gICRSZXZpc2lvbjogMS4xNiAkCi0tLSAgJERhdGU6IDIwMDYvMDYvMjUgMTQ6MzA6MjIgJAorLS0gICRSZXZpc2lvbjogMS4xNyAkCistLSAgJERhdGU6IDIwMTEvMDMvMjMgMDA6NDQ6MTIgJAogLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB3aXRoIEFkYS5OdW1lcmljcy5HZW5lcmljX0VsZW1lbnRhcnlfRnVuY3Rpb25zOworCiB3aXRoIEFkYS5OdW1lcmljcy5Db21wbGV4X1R5cGVzOwogdXNlICBBZGEuTnVtZXJpY3MuQ29tcGxleF9UeXBlczsKIAotd2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsKLXdpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5QYW5lbHM7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlBhbmVsczsKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsKK3VzZSAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsKKword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlBhbmVsczsKK3VzZSAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5QYW5lbHM7CisKIHdpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPOwogdXNlICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU87CisKIHdpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLkludGVnZXJfSU87CiB3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5GbG9hdF9JTzsKIHdpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLkVudW1lcmF0aW9uX0lPOwpAQCAtNjAsNiArNjYsMTQgQEAKIHdpdGggU2FtcGxlLktleWJvYXJkX0hhbmRsZXI7IHVzZSBTYW1wbGUuS2V5Ym9hcmRfSGFuZGxlcjsKIHdpdGggU2FtcGxlLkV4cGxhbmF0aW9uOyB1c2UgU2FtcGxlLkV4cGxhbmF0aW9uOwogCitwcmFnbWEgRWxhYm9yYXRlX0FsbCAoVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lvLkNvbXBsZXhfSU8pOworcHJhZ21hIEVsYWJvcmF0ZV9BbGwgKFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9Jby5EZWNpbWFsX0lPKTsKK3ByYWdtYSBFbGFib3JhdGVfQWxsIChUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSW8uRW51bWVyYXRpb25fSU8pOworcHJhZ21hIEVsYWJvcmF0ZV9BbGwgKFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9Jby5GaXhlZF9JTyk7CitwcmFnbWEgRWxhYm9yYXRlX0FsbCAoVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lvLkZsb2F0X0lPKTsKK3ByYWdtYSBFbGFib3JhdGVfQWxsIChUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSW8uSW50ZWdlcl9JTyk7CitwcmFnbWEgRWxhYm9yYXRlX0FsbCAoVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lvLk1vZHVsYXJfSU8pOworCiBwYWNrYWdlIGJvZHkgU2FtcGxlLlRleHRfSU9fRGVtbyBpcwogCiAgICB0eXBlIFdlZWtkYXkgaXMgKFN1bmRheSwKZGlmZiAtLWdpdCBhL0FkYTk1L3NhbXBsZXMvc2FtcGxlLmFkYiBiL0FkYTk1L3NhbXBsZXMvc2FtcGxlLmFkYgppbmRleCA2NDgwMzZmLi45YjM3NTlmIDEwMDY0NAotLS0gYS9BZGE5NS9zYW1wbGVzL3NhbXBsZS5hZGIKKysrIGIvQWRhOTUvc2FtcGxlcy9zYW1wbGUuYWRiCkBAIC03LDcgKzcsNyBAQAogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gQ29weXJpZ2h0IChjKSAxOTk4LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwOCwyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCiAtLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KQEAgLTM1LDggKzM1LDggQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgogLS0gIFZlcnNpb24gQ29udHJvbAotLS0gICRSZXZpc2lvbjogMS4xNyAkCi0tLSAgJERhdGU6IDIwMDgvMDkvMjcgMTQ6NDI6NDAgJAorLS0gICRSZXZpc2lvbjogMS4xOCAkCistLSAgJERhdGU6IDIwMTEvMDMvMjMgMDA6NDQ6MTIgJAogLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB3aXRoIFRleHRfSU87CkBAIC0xNDMsNyArMTQzLDcgQEAKICAgICAgICAgIFVkLlNldF9Vc2VyX0RhdGEgKE0sIEQxKTsKIAogICAgICAgICAgSTEgOj0gbmV3IFVzZXJfRGF0YScoRGF0YSA9PiAxMTc0KTsKLSAgICAgICAgIElkLlNldF9Vc2VyX0RhdGEgKEkgKDEpLCBJMSk7CisgICAgICAgICBJZC5TZXRfVXNlcl9EYXRhIChJLmFsbCAoMSksIEkxKTsKIAogICAgICAgICAgU2V0X1NwYWNpbmcgKE1lbiA9PiBNLCBSb3cgPT4gMik7CiAKQEAgLTE1Niw3ICsxNTYsNyBAQAogICAgICAgICAgcHJhZ21hIEFzc2VydCAoRDEgPSBEMik7CiAgICAgICAgICBwcmFnbWEgQXNzZXJ0IChEMS5EYXRhID0gRDIuRGF0YSk7CiAKLSAgICAgICAgIElkLkdldF9Vc2VyX0RhdGEgKEkgKDEpLCBJMik7CisgICAgICAgICBJZC5HZXRfVXNlcl9EYXRhIChJLmFsbCAoMSksIEkyKTsKICAgICAgICAgIHByYWdtYSBBc3NlcnQgKEkxID0gSTIpOwogICAgICAgICAgcHJhZ21hIEFzc2VydCAoSTEuRGF0YSA9IEkyLkRhdGEpOwogCmRpZmYgLS1naXQgYS9BZGE5NS9zcmMvTWFrZWZpbGUuaW4gYi9BZGE5NS9zcmMvTWFrZWZpbGUuaW4KaW5kZXggMWMwNzJiZi4uYjBlODBkZSAxMDA2NDQKLS0tIGEvQWRhOTUvc3JjL01ha2VmaWxlLmluCisrKyBiL0FkYTk1L3NyYy9NYWtlZmlsZS5pbgpAQCAtMSw1ICsxLDUgQEAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAjCisjIENvcHlyaWdodCAoYykgMTk5OC0yMDE0LDIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICMKICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIwogIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCiAjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKQEAgLTI4LDMyICsyOCw0MSBAQAogIwogIyAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CiAjCi0jICAkSWQ6IE1ha2VmaWxlLmluLHYgMS4zMSAyMDA3LzA5LzE1IDE4OjIyOjI0IHRvbSBFeHAgJAorIyAgJElkOiBNYWtlZmlsZS5pbix2IDEuNzEgMjAxNS8wOC8wNSAyMzoxNTo0MSB0b20gRXhwICQKICMKIC5TVUZGSVhFUzoKIAotU0hFTEwJCT0gL2Jpbi9zaAorU0hFTEwJCT0gQFNIRUxMQAorVlBBVEgJCT0gQHNyY2RpckAKIFRISVMJCT0gTWFrZWZpbGUKIAogTU9ERUwJCT0gLi4vLi4vQERGVF9PQkpfU1VCRElSQAorCiBERVNURElSCQk9IEBERVNURElSQAorCit0b3Bfc3JjZGlyCT0gQHRvcF9zcmNkaXJACiBzcmNkaXIJCT0gQHNyY2RpckAKIHByZWZpeAkJPSBAcHJlZml4QAogZXhlY19wcmVmaXgJPSBAZXhlY19wcmVmaXhACi1BREFfSU5DTFVERQk9IEBBREFfSU5DTFVERUAKK2luY2x1ZGVkaXIJPSBAaW5jbHVkZWRpckAKK2xpYmRpcgkJPSBAbGliZGlyQAorCitMSUJESVIJCT0gJChERVNURElSKSQobGliZGlyKQorQURBX0lOQ0xVREUJPSAkKERFU1RESVIpQEFEQV9JTkNMVURFQAorQURBX09CSkVDVFMJPSAkKERFU1RESVIpQEFEQV9PQkpFQ1RTQAogCiBJTlNUQUxMCQk9IEBJTlNUQUxMQAotSU5TVEFMTF9EQVRBCT0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfTElCCT0gQElOU1RBTExAIEBJTlNUQUxMX0xJQkAKIAogQVIJCT0gQEFSQAotQVJfT1BUUwkJPSBAQVJfT1BUU0AKK0FSRkxBR1MJCT0gQEFSRkxBR1NACiBBV0sJCT0gQEFXS0AKIExOX1MJCT0gQExOX1NACiAKIENDCQk9IEBDQ0AKIENGTEFHUwkJPSBAQ0ZMQUdTQAogCi1DUFBGTEFHUwk9IEBBQ1BQRkxBR1NAIFwKK0NQUEZMQUdTCT0gQEFDUFBGTEFHU0AgQENQUEZMQUdTQCBcCiAJCSAgLURIQVZFX0NPTkZJR19IIC1JJChzcmNkaXIpCiAKIENDRkxBR1MJCT0gJChDUFBGTEFHUykgJChDRkxBR1MpCkBAIC02OSw2MCArNzgsNTggQEAKIExERkxBR1MJCT0gQExERkxBR1NAIEBMRF9NT0RFTEAgQExJQlNACiAKIFJBTkxJQgkJPSBAUkFOTElCQAorCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogQURBICAgICAgICAgICAgID0gQGNmX2FkYV9jb21waWxlckAKIEFEQVBSRVAJCT0gZ25hdHByZXAKIEFEQUZMQUdTICAgICAgICA9IEBBREFGTEFHU0AgLUkuIC1JJChzcmNkaXIpCiAKK0xJQl9OQU1FCT0gQWRhQ3Vyc2VzCitTT05BTUUJCT0gQEFEQV9TSEFSRURMSUJACisKK0dOQVRfUFJPSkVDVAk9ICQoc3JjZGlyKS9saWJyYXJ5LmdwcgorCisjIGJ1aWxkL3NvdXJjZSBhcmUgdGhlIEFkYTk1IHRyZWUKK0JVSUxEX0RJUgk9IC4uCitTT1VSQ0VfRElSCT0gLi4KKworQlVJTERfRElSX0xJQgk9ICQoQlVJTERfRElSKS9saWIKK1NPVVJDRV9ESVJfU1JDCT0gJChTT1VSQ0VfRElSKS9zcmMKKwogQURBTUFLRSAgICAgICAgID0gQGNmX2FkYV9tYWtlQAotQURBTUFLRUZMQUdTICAgID0gCitBREFNQUtFRkxBR1MgICAgPSBcCisJLVAkKEdOQVRfUFJPSkVDVCkgXAorCS1YQlVJTERfRElSPWBjZCAkKEJVSUxEX0RJUik7cHdkYCBcCisJLVhTT1VSQ0VfRElSPWBjZCAkKFNPVVJDRV9ESVIpO3B3ZGAgXAorCS1YU09VUkNFX0RJUjI9YGNkICQoc3JjZGlyKTtwd2RgIFwKKwktWExJQl9OQU1FPSQoTElCX05BTUUpIFwKKwktWFNPTkFNRT0kKFNPTkFNRSkKIAogQ0FSR1MgICAgICAgICAgID0gLWNhcmdzICQoQURBRkxBR1MpCiBMQVJHUyAgICAgICAgICAgPQogCitTVEFUSUNfTElCTkFNRQk9IGxpYiQoTElCX05BTUUpLmEKK1NIQVJFRF9MSUJOQU1FCT0gJChTT05BTUUpCitTSEFSRURfU1lNTElOSwk9IGxpYiQoTElCX05BTUUpLnNvCisKIEFMSUIgICAgICAgICAgICA9IEBjZl9hZGFfcGFja2FnZUAKIEFCQVNFICAgICAgICAgICA9ICQoQUxJQiktY3Vyc2VzCi0KLUxJQkFMSVM9JChBTElCKS5hbGkgICAgICAgICAgICAgIAkJCVwKLQkkKEFCQVNFKS1hdXguYWxpICAgICAgICAgCQkJXAotCSQoQUJBU0UpLmFsaSAgICAgICAgICAgICAJCSAgICAgICAgXAotCSQoQUJBU0UpLXRlcm1pbmZvLmFsaQkJCQlcCi0JJChBQkFTRSktdGVybWNhcC5hbGkJCQkJXAotCSQoQUJBU0UpLXB1dHdpbi5hbGkJCQkJXAotCSQoQUJBU0UpLXRyYWNlLmFsaQkJCQlcCi0JJChBQkFTRSktbW91c2UuYWxpICAgICAgIAkJCVwKLQkkKEFCQVNFKS1wYW5lbHMuYWxpICAgICAgCQkJXAotCSQoQUJBU0UpLW1lbnVzLmFsaSAgICAgICAJCQlcCi0JJChBQkFTRSktZm9ybXMuYWxpICAgICAgIAkJCVwKLQkkKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy5hbGkJICAgICAgICAJXAotCSQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhLmFsaSAgICAgIAlcCi0JJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFudW1lcmljLmFsaSAgICAgXAotCSQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLWludGZpZWxkLmFsaSAgICAgIAlcCi0JJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpYy5hbGkgICAgICAJXAotCSQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLXJlZ2V4cC5hbGkgICAgICAJXAotCSQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLmFsaSAgICAgIFwKLQkkKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy1pcHY0X2FkZHJlc3MuYWxpICAgICBcCi0JJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtdXNlci5hbGkJICAgICAgCVwKLQkkKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZS5hbGkgICAgIAlcCi0JJChBQkFTRSktdGV4dF9pby5hbGkgICAgIAkJCVwKLQkkKEFCQVNFKS10ZXh0X2lvLWF1eC5hbGkKLQotIyBBZGEgTGlicmFyeSBmaWxlcyBmb3IgZ2VuZXJpYyBwYWNrYWdlcy4gU2luY2UgZ25hdCAzLjEwIHRoZXkgYXJlCi0jIGFsc28gY29tcGlsZWQKLUdFTkFMSVM9JChBQkFTRSktbWVudXMtbWVudV91c2VyX2RhdGEuYWxpCQlcCi0JJChBQkFTRSktbWVudXMtaXRlbV91c2VyX2RhdGEuYWxpCQlcCi0JJChBQkFTRSktZm9ybXMtZm9ybV91c2VyX2RhdGEuYWxpCQlcCi0JJChBQkFTRSktZm9ybXMtZmllbGRfdXNlcl9kYXRhLmFsaQkJXAotCSQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYS5hbGkJXAotCSQoQUJBU0UpLXBhbmVscy11c2VyX2RhdGEuYWxpCQkJXAotCSQoQUJBU0UpLXRleHRfaW8taW50ZWdlcl9pby5hbGkJCQlcCi0JJChBQkFTRSktdGV4dF9pby1mbG9hdF9pby5hbGkJCQlcCi0JJChBQkFTRSktdGV4dF9pby1maXhlZF9pby5hbGkJCQlcCi0JJChBQkFTRSktdGV4dF9pby1kZWNpbWFsX2lvLmFsaQkJCVwKLQkkKEFCQVNFKS10ZXh0X2lvLWVudW1lcmF0aW9uX2lvLmFsaQkJXAotCSQoQUJBU0UpLXRleHRfaW8tbW9kdWxhcl9pby5hbGkJCQlcCi0JJChBQkFTRSktdGV4dF9pby1jb21wbGV4X2lvLmFsaQotCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworR0VORVJBVEVEX1NPVVJDRVM9JChBQkFTRSkuYWRzICAgICAgICAgCQkJXAorCQkgICQoQUJBU0UpLmFkYiAgICAgICAgIAkJCVwKKwkgICAgICAgICAgJChBQkFTRSktYXV4LmFkcyAgIAkJCVwKKwkgICAgICAgICAgJChBQkFTRSktdHJhY2UuYWRzICAgCQkJXAorCSAgICAgICAgICAkKEFCQVNFKS1tZW51cy5hZHMgICAJCQlcCisJICAgICAgICAgICQoQUJBU0UpLWZvcm1zLmFkcyAgIAkJCVwKKwkgICAgICAgICAgJChBQkFTRSktbW91c2UuYWRzIAkJCVwKKwkgICAgICAgICAgJChBQkFTRSktcGFuZWxzLmFkcwkJCVwKKwkgICAgICAgICAgJChBQkFTRSktbWVudXMtbWVudV91c2VyX2RhdGEuYWRzCVwKKwkgICAgICAgICAgJChBQkFTRSktbWVudXMtaXRlbV91c2VyX2RhdGEuYWRzCVwKKwkgICAgICAgICAgJChBQkFTRSktZm9ybXMtZm9ybV91c2VyX2RhdGEuYWRzCVwKKwkgICAgICAgICAgJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMuYWRzCVwKKwkgICAgICAgICAgJChBQkFTRSktZm9ybXMtZmllbGRfdXNlcl9kYXRhLmFkcwlcCisJICAgICAgICAgICQoQUJBU0UpLXBhbmVscy11c2VyX2RhdGEuYWRzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogTElCT0JKUz0kKEFMSUIpLm8gICAgICAgICAgICAgICAgCQkJXAogCSQoQUJBU0UpLWF1eC5vICAgICAgICAgICAJCQlcCiAJJChBQkFTRSkubyAgICAgICAgICAgICAgIAkJCVwKQEAgLTE2MywzNCArMTcwLDQxIEBACiAJJChBQkFTRSktdGV4dF9pby1tb2R1bGFyX2lvLm8JCQlcCiAJJChBQkFTRSktdGV4dF9pby1jb21wbGV4X2lvLm8KIAotCi1hbGwgOjogIGxpYkFkYUN1cnNlcy5hCithbGwgOjogICQoQlVJTERfRElSX0xJQikvJChTVEFUSUNfTElCTkFNRSkKIAlAZWNobyBkb25lCiAKLWxpYkFkYUN1cnNlcy5hIDo6IGRvdG91Y2ggJChMSUJPQkpTKSBAY2ZfZ2VuZXJpY19vYmplY3RzQAotCSQoQVIpICQoQVJfT1BUUykgJEAgJChMSUJPQkpTKSBAY2ZfZ2VuZXJpY19vYmplY3RzQAotCi1kb3RvdWNoIDoKLQlAc2ggLWMgJ2ZvciBmIGluICQoTElCQUxJUykgJChHRU5BTElTKTsgZG8gdGVzdCAtZiAkJGYgfHwgdG91Y2ggJCRmOyBkb25lJworJChBREFfSU5DTFVERSkgXAorJChBREFfT0JKRUNUUykgXAorJChMSUJESVIpIFwKKyQoQlVJTERfRElSX0xJQikgOgorCW1rZGlyIC1wICRACiAKIHNvdXJjZXMgOgogCUBlY2hvIG1hZGUgJEAKIAogbGlicyBcCiBpbnN0YWxsIFwKLWluc3RhbGwubGlicyBcCitpbnN0YWxsLmxpYnMgOjogXAorCQkkKEJVSUxEX0RJUl9MSUIpLyQoU1RBVElDX0xJQk5BTUUpCisJQGVjaG8gbWFkZSAkKFNUQVRJQ19MSUJOQU1FKQorCitpbnN0YWxsIFwKK2luc3RhbGwubGlicyA6OiBcCisJCSQoQlVJTERfRElSX0xJQikvJChTVEFUSUNfTElCTkFNRSkgXAorCQkkKEFEQV9PQkpFQ1RTKQorCUAkKElOU1RBTExfTElCKSBcCisJCSQoQlVJTERfRElSX0xJQikvJChTVEFUSUNfTElCTkFNRSkgXAorCQkkKEFEQV9PQkpFQ1RTKQorCiB1bmluc3RhbGwgXAogdW5pbnN0YWxsLmxpYnMgOjoKLQlAZWNobyBtYWRlICRACi0KLWdlbmVyaWNzOiAkKEdFTkFMSVMpCi0JQGVjaG8gbWFkZSAkQAorCUBybSAtZiAkKEFEQV9PQkpFQ1RTKS8kKFNUQVRJQ19MSUJOQU1FKQogCiBtb3N0bHljbGVhbiA6OgogCXJtIC1mICoubyAqLmFsaSBiX3QqLiogKi5zICQoUFJPR1MpIGEub3V0IGNvcmUgYl8qX3Rlc3QuYyAqLnhyW2JzXSAqLmEKIAogY2xlYW4gOjogbW9zdGx5Y2xlYW4KLQlybSAtZiAkKExJQkFMSVMpICQoR0VOQUxJUykgJChMSUJPQkpTKSAkKEdFTk9CSlMpICQoQUJBU0UpLXRyYWNlLmFkYgorCXJtIC1mICQoQUJBU0UpLXRyYWNlLmFkYgogCiBkaXN0Y2xlYW4gOjogY2xlYW4KIAlybSAtZiBNYWtlZmlsZQpAQCAtMTk5LDE5MCArMjEzLDEyNyBAQAogCiBCQVNFREVQUz0kKEFCQVNFKS5hZHMgJChBQkFTRSktYXV4LmFkcyAkKEFCQVNFKS5hZGIKIAotJChBTElCKS5vOiAkKHNyY2RpcikvJChBTElCKS5hZHMKLQkkKEFEQSkgJChBREFGTEFHUykgLWMgLW8gJEAgJChzcmNkaXIpLyQoQUxJQikuYWRzCi0KLQotJChBQkFTRSktYXV4Lm86ICQoc3JjZGlyKS8kKEFCQVNFKS1hdXguYWRiICQoQkFTRURFUFMpCi0JJChBREEpICQoQURBRkxBR1MpIC1jIC1vICRAICQoc3JjZGlyKS8kKEFCQVNFKS1hdXguYWRiCi0KLQotJChBQkFTRSkubzogJChBQkFTRSkuYWRiICQoQkFTRURFUFMpCi0JJChBREEpICQoQURBRkxBR1MpIC1jIC1vICRAICQoQUJBU0UpLmFkYgotCi0KLSQoQUJBU0UpLXRlcm1pbmZvLm86IFwKLQkJJChzcmNkaXIpLyQoQUJBU0UpLXRlcm1pbmZvLmFkcyBcCi0JCSQoc3JjZGlyKS8kKEFCQVNFKS10ZXJtaW5mby5hZGIgJChCQVNFREVQUykKLQkkKEFEQSkgJChBREFGTEFHUykgLWMgLW8gJEAgJChzcmNkaXIpLyQoQUJBU0UpLXRlcm1pbmZvLmFkYgotCi0KLSQoQUJBU0UpLXRlcm1jYXAubzogXAotCQkkKHNyY2RpcikvJChBQkFTRSktdGVybWNhcC5hZHMgXAotCQkkKHNyY2RpcikvJChBQkFTRSktdGVybWNhcC5hZGIgJChCQVNFREVQUykKLQkkKEFEQSkgJChBREFGTEFHUykgLWMgLW8gJEAgJChzcmNkaXIpLyQoQUJBU0UpLXRlcm1jYXAuYWRiCi0KLQotJChBQkFTRSktcHV0d2luLm86IFwKLQkJJChzcmNkaXIpLyQoQUJBU0UpLXB1dHdpbi5hZHMgXAotCQkkKHNyY2RpcikvJChBQkFTRSktcHV0d2luLmFkYiAkKEJBU0VERVBTKQotCSQoQURBKSAkKEFEQUZMQUdTKSAtYyAtbyAkQCAkKHNyY2RpcikvJChBQkFTRSktcHV0d2luLmFkYgotCi0KICQoQUJBU0UpLXRyYWNlLmFkYiA6ICQoc3JjZGlyKS8kKEFCQVNFKS10cmFjZS5hZGJfcAogCXJtIC1mICRACi0JJChBREFQUkVQKSAtREFEQV9UUkFDRT1AQURBX1RSQUNFQCAtRFBSQUdNQV9VTlJFRj1AUFJBR01BX1VOUkVGQCAkKHNyY2RpcikvJChBQkFTRSktdHJhY2UuYWRiX3AgJEAKKwkkKEFEQVBSRVApIC1EQURBX1RSQUNFPUBBREFfVFJBQ0VAIEBHTkFUUFJFUF9PUFRTQCAkKHNyY2RpcikvJChBQkFTRSktdHJhY2UuYWRiX3AgJEAKIAotJChBQkFTRSktdHJhY2UubzogXAotCQkkKEFCQVNFKS10cmFjZS5hZHMgXAotCQkkKEFCQVNFKS10cmFjZS5hZGIgJChCQVNFREVQUykKLQkkKEFEQSkgJChBREFGTEFHUykgLWMgLW8gJEAgJChBQkFTRSktdHJhY2UuYWRiCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFVzZSB0aGVzZSBkZWZpbml0aW9ucyB3aGVuIGJ1aWxkaW5nIGEgc2hhcmVkIGxpYnJhcnkuCitTSEFSRURfQ19PQkpTCT0gY192YXJhcmdzX3RvX2FkYS5vIGNfdGhyZWFkZWRfdmFyaWFibGVzLm8gbmN1cnNlc19jb21wYXQubworU0hBUkVEX09CSlMgCT0gJChTSEFSRURfQ19PQkpTKSBAVVNFX09MRF9NQUtFUlVMRVNAJChMSUJPQkpTKSBAY2ZfZ2VuZXJpY19vYmplY3RzQAogCitjX3ZhcmFyZ3NfdG9fYWRhLm8gOgkkKHNyY2RpcikvY192YXJhcmdzX3RvX2FkYS5jCisJJChDQykgJChDRkxBR1NfREVGQVVMVCkgLWMgLW8gJEAgJChzcmNkaXIpL2NfdmFyYXJnc190b19hZGEuYwogCi0kKEFCQVNFKS1tb3VzZS5vOiBcCi0JCSQoQUJBU0UpLW1vdXNlLmFkcyBcCi0JCSQoc3JjZGlyKS8kKEFCQVNFKS1tb3VzZS5hZGIgJChCQVNFREVQUykKLQkkKEFEQSkgJChBREFGTEFHUykgLWMgLW8gJEAgJChzcmNkaXIpLyQoQUJBU0UpLW1vdXNlLmFkYgorY190aHJlYWRlZF92YXJpYWJsZXMubyA6ICQoc3JjZGlyKS9jX3RocmVhZGVkX3ZhcmlhYmxlcy5jCisJJChDQykgJChDRkxBR1NfREVGQVVMVCkgLWMgLW8gJEAgJChzcmNkaXIpL2NfdGhyZWFkZWRfdmFyaWFibGVzLmMKIAorbmN1cnNlc19jb21wYXQubyA6CSQoc3JjZGlyKS9uY3Vyc2VzX2NvbXBhdC5jCisJJChDQykgJChDRkxBR1NfREVGQVVMVCkgLWMgLW8gJEAgJChzcmNkaXIpL25jdXJzZXNfY29tcGF0LmMKIAotJChBQkFTRSktcGFuZWxzLm86IFwKLQkJJChBQkFTRSktcGFuZWxzLmFkcyBcCi0JCSQoc3JjZGlyKS8kKEFCQVNFKS1wYW5lbHMuYWRiICQoQkFTRURFUFMpCi0JJChBREEpICQoQURBRkxBR1MpIC1jIC1vICRAICQoc3JjZGlyKS8kKEFCQVNFKS1wYW5lbHMuYWRiCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFVzZSB0aGVzZSBkZWZpbml0aW9ucyB3aGVuIGJ1aWxkaW5nIGEgc3RhdGljIGxpYnJhcnkuCitTVEFUSUNfQ19PQkpTCT0gc3RhdGljX2NfdmFyYXJnc190b19hZGEubyBzdGF0aWNfY190aHJlYWRlZF92YXJpYWJsZXMubyBzdGF0aWNfbmN1cnNlc19jb21wYXQubworU1RBVElDX09CSlMgCT0gJChTVEFUSUNfQ19PQkpTKSBAVVNFX09MRF9NQUtFUlVMRVNAJChMSUJPQkpTKSBAY2ZfZ2VuZXJpY19vYmplY3RzQAogCitzdGF0aWNfY192YXJhcmdzX3RvX2FkYS5vIDoJJChzcmNkaXIpL2NfdmFyYXJnc190b19hZGEuYworCSQoQ0MpICQoQ0ZMQUdTX05PUk1BTCkgLWMgLW8gJEAgJChzcmNkaXIpL2NfdmFyYXJnc190b19hZGEuYwogCi0kKEFCQVNFKS1tZW51cy5vOiBcCi0JCSQoQUJBU0UpLW1lbnVzLmFkcyBcCi0JCSQoc3JjZGlyKS8kKEFCQVNFKS1tZW51cy5hZGIgJChCQVNFREVQUykKLQkkKEFEQSkgJChBREFGTEFHUykgLWMgLW8gJEAgJChzcmNkaXIpLyQoQUJBU0UpLW1lbnVzLmFkYgorc3RhdGljX2NfdGhyZWFkZWRfdmFyaWFibGVzLm8gOiAkKHNyY2RpcikvY190aHJlYWRlZF92YXJpYWJsZXMuYworCSQoQ0MpICQoQ0ZMQUdTX05PUk1BTCkgLWMgLW8gJEAgJChzcmNkaXIpL2NfdGhyZWFkZWRfdmFyaWFibGVzLmMKIAorc3RhdGljX25jdXJzZXNfY29tcGF0Lm8gOgkkKHNyY2RpcikvbmN1cnNlc19jb21wYXQuYworCSQoQ0MpICQoQ0ZMQUdTX05PUk1BTCkgLWMgLW8gJEAgJChzcmNkaXIpL25jdXJzZXNfY29tcGF0LmMKIAotJChBQkFTRSktZm9ybXMubzogXAotCQkkKEFCQVNFKS1mb3Jtcy5hZHMgXAotCQkkKHNyY2RpcikvJChBQkFTRSktZm9ybXMuYWRiICQoQkFTRURFUFMpCi0JJChBREEpICQoQURBRkxBR1MpIC1jIC1vICRAICQoc3JjZGlyKS8kKEFCQVNFKS1mb3Jtcy5hZGIKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMubzogXAotCQkkKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy5hZHMgXAotCQkkKHNyY2RpcikvJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMuYWRiICQoQkFTRURFUFMpCi0JJChBREEpICQoQURBRkxBR1MpIC1jIC1vICRAICQoc3JjZGlyKS8kKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy5hZGIKK0BVU0VfT0xEX01BS0VSVUxFU0AkKEJVSUxEX0RJUl9MSUIpLyQoU1RBVElDX0xJQk5BTUUpIDo6IFwKK0BVU0VfT0xEX01BS0VSVUxFU0AJCSQoQlVJTERfRElSX0xJQikgXAorQFVTRV9PTERfTUFLRVJVTEVTQAkJJChTVEFUSUNfT0JKUykKK0BVU0VfT0xEX01BS0VSVUxFU0AJJChBUikgJChBUkZMQUdTKSAkQCAkKFNUQVRJQ19PQkpTKQogCi0kKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYS5vOiBcCi0JCSQoc3JjZGlyKS8kKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYS5hZHMgXAotCQkkKHNyY2RpcikvJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtYWxwaGEuYWRiICQoQkFTRURFUFMpCi0JJChBREEpICQoQURBRkxBR1MpIC1jIC1vICRAICQoc3JjZGlyKS8kKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYS5hZGIKKyQoQlVJTERfRElSKS9zdGF0aWMtYWxpIDogOyBta2RpciAtcCAkQAorJChCVUlMRF9ESVIpL3N0YXRpYy1vYmogOiA7IG1rZGlyIC1wICRACiAKLSQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhbnVtZXJpYy5vOiBcCi0JCSQoc3JjZGlyKS8kKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYW51bWVyaWMuYWRzIFwKLQkJJChzcmNkaXIpLyQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhbnVtZXJpYy5hZGIgJChCQVNFREVQUykKLQkkKEFEQSkgJChBREFGTEFHUykgLWMgLW8gJEAgJChzcmNkaXIpLyQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhbnVtZXJpYy5hZGIKK1NUQVRJQ19ESVJTID0gXAorCSQoQlVJTERfRElSX0xJQikgXAorCSQoQlVJTERfRElSKS9zdGF0aWMtYWxpIFwKKwkkKEJVSUxEX0RJUikvc3RhdGljLW9iagogCi0kKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy1pbnRmaWVsZC5vOiBcCi0JCSQoc3JjZGlyKS8kKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy1pbnRmaWVsZC5hZHMgXAotCQkkKHNyY2RpcikvJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtaW50ZmllbGQuYWRiICQoQkFTRURFUFMpCi0JJChBREEpICQoQURBRkxBR1MpIC1jIC1vICRAICQoc3JjZGlyKS8kKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy1pbnRmaWVsZC5hZGIKK0BVU0VfR05BVF9QUk9KRUNUU0AkKEJVSUxEX0RJUl9MSUIpLyQoU1RBVElDX0xJQk5BTUUpIDo6IFwKK0BVU0VfR05BVF9QUk9KRUNUU0AJCSQoQUJBU0UpLXRyYWNlLmFkYiBcCitAVVNFX0dOQVRfUFJPSkVDVFNACQkkKFNUQVRJQ19DX09CSlMpIFwKK0BVU0VfR05BVF9QUk9KRUNUU0AJCSQoU1RBVElDX0RJUlMpCitAVVNFX0dOQVRfUFJPSkVDVFNACSQoQURBTUFLRSkgJChBREFNQUtFRkxBR1MpIC1YTElCX0tJTkQ9c3RhdGljCitAVVNFX0dOQVRfUFJPSkVDVFNACSQoQVIpICQoQVJGTEFHUykgJEAgJChTVEFUSUNfQ19PQkpTKQorQFVTRV9HTkFUX1BST0pFQ1RTQAorQFVTRV9HTkFUX0xJQlJBUklFU0BpbnN0YWxsIFwKK0BVU0VfR05BVF9MSUJSQVJJRVNAaW5zdGFsbC5saWJzIDo6IFwKK0BVU0VfR05BVF9MSUJSQVJJRVNACQkkKEFEQV9PQkpFQ1RTKQorQFVTRV9HTkFUX0xJQlJBUklFU0AJJChJTlNUQUxMX0xJQikgXAorQFVTRV9HTkFUX0xJQlJBUklFU0AJCSQoQlVJTERfRElSKS9zdGF0aWMtYWxpLyouYWxpIFwKK0BVU0VfR05BVF9MSUJSQVJJRVNACQkkKEFEQV9PQkpFQ1RTKQogCi0kKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy1udW1lcmljLm86IFwKLQkJJChzcmNkaXIpLyQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLW51bWVyaWMuYWRzIFwKLQkJJChzcmNkaXIpLyQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLW51bWVyaWMuYWRiICQoQkFTRURFUFMpCi0JJChBREEpICQoQURBRkxBR1MpIC1jIC1vICRAICQoc3JjZGlyKS8kKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy1udW1lcmljLmFkYgordW5pbnN0YWxsIFwKK3VuaW5zdGFsbC5saWJzIDo6CisJQHJtIC1mICQoQURBX09CSkVDVFMpLyQoU1RBVElDX0xJQk5BTUUpCiAKLSQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLXJlZ2V4cC5vOiBcCi0JCSQoc3JjZGlyKS8kKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy1yZWdleHAuYWRzIFwKLQkJJChzcmNkaXIpLyQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLXJlZ2V4cC5hZGIgJChCQVNFREVQUykKLQkkKEFEQSkgJChBREFGTEFHUykgLWMgLW8gJEAgJChzcmNkaXIpLyQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLXJlZ2V4cC5hZGIKK0BVU0VfR05BVF9MSUJSQVJJRVNAdW5pbnN0YWxsIFwKK0BVU0VfR05BVF9MSUJSQVJJRVNAdW5pbnN0YWxsLmxpYnMgOjoKK0BVU0VfR05BVF9MSUJSQVJJRVNACUAkKFNIRUxMKSAtYyAnZm9yIG5hbWUgaW4gJChCVUlMRF9ESVIpL3N0YXRpYy1hbGkvKi5hbGkgOyBkbyBybSAtZiAkKEFEQV9PQkpFQ1RTKS9gYmFzZW5hbWUgJCRuYW1lYDsgZG9uZScKIAotJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24ubzogXAotCQkkKHNyY2RpcikvJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24uYWRzIFwKLQkJJChzcmNkaXIpLyQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLmFkYiAkKEJBU0VERVBTKQotCSQoQURBKSAkKEFEQUZMQUdTKSAtYyAtbyAkQCAkKHNyY2RpcikvJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24uYWRiCiskKEJVSUxEX0RJUikvZHluYW1pYy1hbGkgOiA7IG1rZGlyIC1wICRACiskKEJVSUxEX0RJUikvZHluYW1pYy1vYmogOiA7IG1rZGlyIC1wICRACiAKLSQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLWlwdjRfYWRkcmVzcy5vOiBcCi0JCSQoc3JjZGlyKS8kKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy1pcHY0X2FkZHJlc3MuYWRzIFwKLQkJJChzcmNkaXIpLyQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLWlwdjRfYWRkcmVzcy5hZGIgJChCQVNFREVQUykKLQkkKEFEQSkgJChBREFGTEFHUykgLWMgLW8gJEAgJChzcmNkaXIpLyQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLWlwdjRfYWRkcmVzcy5hZGIKK1NIQVJFRF9ESVJTID0gXAorCSQoQlVJTERfRElSX0xJQikgXAorCSQoQlVJTERfRElSKS9keW5hbWljLWFsaSBcCisJJChCVUlMRF9ESVIpL2R5bmFtaWMtb2JqCiAKLSQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXIubzogXAotCQkkKHNyY2RpcikvJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtdXNlci5hZHMgXAotCQkkKHNyY2RpcikvJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtdXNlci5hZGIgJChCQVNFREVQUykKLQkkKEFEQSkgJChBREFGTEFHUykgLWMgLW8gJEAgJChzcmNkaXIpLyQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXIuYWRiCitATUFLRV9BREFfU0hBUkVETElCQGFsbCA6OiAkKEJVSUxEX0RJUl9MSUIpLyQoU0hBUkVEX0xJQk5BTUUpCitATUFLRV9BREFfU0hBUkVETElCQCQoQlVJTERfRElSX0xJQikvJChTSEFSRURfTElCTkFNRSkgOjogXAorQE1BS0VfQURBX1NIQVJFRExJQkAJCSQoQUJBU0UpLXRyYWNlLmFkYiBcCitATUFLRV9BREFfU0hBUkVETElCQAkJJChTSEFSRURfRElSUykgXAorQE1BS0VfQURBX1NIQVJFRExJQkAJCSQoU0hBUkVEX09CSlMpCitATUFLRV9BREFfU0hBUkVETElCQAljcCAkKFNIQVJFRF9PQkpTKSAkKEJVSUxEX0RJUikvZHluYW1pYy1vYmovCitATUFLRV9BREFfU0hBUkVETElCQAkkKEFEQU1BS0UpICQoQURBTUFLRUZMQUdTKSAtWExJQl9LSU5EPWR5bmFtaWMKIAotJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2UubzogXAotCQkkKHNyY2RpcikvJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2UuYWRzIFwKLQkJJChzcmNkaXIpLyQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlLmFkYiAkKEJBU0VERVBTKQotCSQoQURBKSAkKEFEQUZMQUdTKSAtYyAtbyAkQCAkKHNyY2RpcikvJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2UuYWRiCitpbnN0YWxsIFwKK2luc3RhbGwubGlicyA6OiAkKEFEQV9JTkNMVURFKQorCSQoSU5TVEFMTF9MSUIpIFwKKwkJJChTT1VSQ0VfRElSX1NSQykvKi5hZFtzYl0gXAorCQkkKEFEQV9JTkNMVURFKQogCi0kKEFCQVNFKS10ZXh0X2lvLm86IFwKLQkJJChzcmNkaXIpLyQoQUJBU0UpLXRleHRfaW8uYWRzIFwKLQkJJChzcmNkaXIpLyQoQUJBU0UpLXRleHRfaW8uYWRiICQoQkFTRURFUFMpCi0JJChBREEpICQoQURBRkxBR1MpIC1jIC1vICRAICQoc3JjZGlyKS8kKEFCQVNFKS10ZXh0X2lvLmFkYgoraW5zdGFsbCBcCitpbnN0YWxsLmxpYnMgOjogJChBREFfSU5DTFVERSkKKwkkKElOU1RBTExfTElCKSBcCisJCSQoR0VORVJBVEVEX1NPVVJDRVMpIFwKKwkJJChBREFfSU5DTFVERSkKIAotJChBQkFTRSktdGV4dF9pby1hdXgubzogXAotCQkkKHNyY2RpcikvJChBQkFTRSktdGV4dF9pby1hdXguYWRzIFwKLQkJJChzcmNkaXIpLyQoQUJBU0UpLXRleHRfaW8tYXV4LmFkYiAkKEJBU0VERVBTKQotCSQoQURBKSAkKEFEQUZMQUdTKSAtYyAtbyAkQCAkKHNyY2RpcikvJChBQkFTRSktdGV4dF9pby1hdXguYWRiCit1bmluc3RhbGwgXAordW5pbnN0YWxsLmxpYnMgOjoKKwkkKFNIRUxMKSAtYyAnZm9yIG5hbWUgaW4gJChTT1VSQ0VfRElSX1NSQykvKi5hZFtzYl0gJChHRU5FUkFURURfU09VUkNFUyk7IGRvIHJtIC1mICQoQURBX0lOQ0xVREUpL2BiYXNlbmFtZSAkJG5hbWVgOyBkb25lJwogCi0kKEFCQVNFKS1tZW51cy1tZW51X3VzZXJfZGF0YS5vOiBcCi0JCSQoQUJBU0UpLW1lbnVzLW1lbnVfdXNlcl9kYXRhLmFkcyBcCi0JCSQoc3JjZGlyKS8kKEFCQVNFKS1tZW51cy1tZW51X3VzZXJfZGF0YS5hZGIgJChCQVNFREVQUykKLQkkKEFEQSkgJChBREFGTEFHUykgLWMgLW8gJEAgJChzcmNkaXIpLyQoQUJBU0UpLW1lbnVzLW1lbnVfdXNlcl9kYXRhLmFkYgorQE1BS0VfQURBX1NIQVJFRExJQkBpbnN0YWxsIFwKK0BNQUtFX0FEQV9TSEFSRURMSUJAaW5zdGFsbC5saWJzIDo6ICQoQURBX09CSkVDVFMpICQoTElCRElSKQorQE1BS0VfQURBX1NIQVJFRExJQkAJJChJTlNUQUxMX0xJQikgXAorQE1BS0VfQURBX1NIQVJFRExJQkAJCSQoQlVJTERfRElSKS9keW5hbWljLWFsaS8qIFwKK0BNQUtFX0FEQV9TSEFSRURMSUJACQkkKEFEQV9PQkpFQ1RTKQorQE1BS0VfQURBX1NIQVJFRExJQkAJJChJTlNUQUxMX0xJQikgXAorQE1BS0VfQURBX1NIQVJFRExJQkAJCSQoQlVJTERfRElSX0xJQikvJChTSEFSRURfTElCTkFNRSkgXAorQE1BS0VfQURBX1NIQVJFRExJQkAJCSQoTElCRElSKQorQE1BS0VfQURBX1NIQVJFRExJQkAJY2QgJChMSUJESVIpICYmICQoTE5fUykgJChTSEFSRURfTElCTkFNRSkgJChTSEFSRURfU1lNTElOSykKK0BNQUtFX0FEQV9TSEFSRURMSUJACitATUFLRV9BREFfU0hBUkVETElCQHVuaW5zdGFsbCBcCitATUFLRV9BREFfU0hBUkVETElCQHVuaW5zdGFsbC5saWJzIDo6CitATUFLRV9BREFfU0hBUkVETElCQAkkKFNIRUxMKSAtYyAnZm9yIG5hbWUgaW4gJChCVUlMRF9ESVIpL2R5bmFtaWMtYWxpLyogOyBkbyBybSAtZiAkKEFEQV9PQkpFQ1RTKS9gYmFzZW5hbWUgJCRuYW1lYDsgZG9uZScKK0BNQUtFX0FEQV9TSEFSRURMSUJACitATUFLRV9BREFfU0hBUkVETElCQHVuaW5zdGFsbCBcCitATUFLRV9BREFfU0hBUkVETElCQHVuaW5zdGFsbC5saWJzIDo6CitATUFLRV9BREFfU0hBUkVETElCQAlybSAtZiAkKExJQkRJUikvJChTSEFSRURfU1lNTElOSykKK0BNQUtFX0FEQV9TSEFSRURMSUJACXJtIC1mICQoTElCRElSKS8kKFNIQVJFRF9MSUJOQU1FKQogCi0kKEFCQVNFKS1tZW51cy1pdGVtX3VzZXJfZGF0YS5vOiBcCi0JCSQoQUJBU0UpLW1lbnVzLWl0ZW1fdXNlcl9kYXRhLmFkcyBcCi0JCSQoc3JjZGlyKS8kKEFCQVNFKS1tZW51cy1pdGVtX3VzZXJfZGF0YS5hZGIgJChCQVNFREVQUykKLQkkKEFEQSkgJChBREFGTEFHUykgLWMgLW8gJEAgJChzcmNkaXIpLyQoQUJBU0UpLW1lbnVzLWl0ZW1fdXNlcl9kYXRhLmFkYgotCi0kKEFCQVNFKS1mb3Jtcy1mb3JtX3VzZXJfZGF0YS5vOiBcCi0JCSQoQUJBU0UpLWZvcm1zLWZvcm1fdXNlcl9kYXRhLmFkcyBcCi0JCSQoc3JjZGlyKS8kKEFCQVNFKS1mb3Jtcy1mb3JtX3VzZXJfZGF0YS5hZGIgJChCQVNFREVQUykKLQkkKEFEQSkgJChBREFGTEFHUykgLWMgLW8gJEAgJChzcmNkaXIpLyQoQUJBU0UpLWZvcm1zLWZvcm1fdXNlcl9kYXRhLmFkYgotCi0kKEFCQVNFKS1mb3Jtcy1maWVsZF91c2VyX2RhdGEubzogXAotCQkkKEFCQVNFKS1mb3Jtcy1maWVsZF91c2VyX2RhdGEuYWRzIFwKLQkJJChzcmNkaXIpLyQoQUJBU0UpLWZvcm1zLWZpZWxkX3VzZXJfZGF0YS5hZGIgJChCQVNFREVQUykKLQkkKEFEQSkgJChBREFGTEFHUykgLWMgLW8gJEAgJChzcmNkaXIpLyQoQUJBU0UpLWZvcm1zLWZpZWxkX3VzZXJfZGF0YS5hZGIKLQotJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhLm86IFwKLQkJJChzcmNkaXIpLyQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYS5hZHMgXAotCQkkKHNyY2RpcikvJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhLmFkYiAkKEJBU0VERVBTKQotCSQoQURBKSAkKEFEQUZMQUdTKSAtYyAtbyAkQCAkKHNyY2RpcikvJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhLmFkYgotCi0kKEFCQVNFKS1wYW5lbHMtdXNlcl9kYXRhLm86IFwKLQkJJChBQkFTRSktcGFuZWxzLXVzZXJfZGF0YS5hZHMgXAotCQkkKHNyY2RpcikvJChBQkFTRSktcGFuZWxzLXVzZXJfZGF0YS5hZGIgJChCQVNFREVQUykKLQkkKEFEQSkgJChBREFGTEFHUykgLWMgLW8gJEAgJChzcmNkaXIpLyQoQUJBU0UpLXBhbmVscy11c2VyX2RhdGEuYWRiCi0KLSQoQUJBU0UpLXRleHRfaW8taW50ZWdlcl9pby5vOiBcCi0JCSQoc3JjZGlyKS8kKEFCQVNFKS10ZXh0X2lvLWludGVnZXJfaW8uYWRzIFwKLQkJJChzcmNkaXIpLyQoQUJBU0UpLXRleHRfaW8taW50ZWdlcl9pby5hZGIgJChCQVNFREVQUykKLQkkKEFEQSkgJChBREFGTEFHUykgLWMgLW8gJEAgJChzcmNkaXIpLyQoQUJBU0UpLXRleHRfaW8taW50ZWdlcl9pby5hZGIKLQotJChBQkFTRSktdGV4dF9pby1mbG9hdF9pby5vOiBcCi0JCSQoc3JjZGlyKS8kKEFCQVNFKS10ZXh0X2lvLWZsb2F0X2lvLmFkcyBcCi0JCSQoc3JjZGlyKS8kKEFCQVNFKS10ZXh0X2lvLWZsb2F0X2lvLmFkYiAkKEJBU0VERVBTKQotCSQoQURBKSAkKEFEQUZMQUdTKSAtYyAtbyAkQCAkKHNyY2RpcikvJChBQkFTRSktdGV4dF9pby1mbG9hdF9pby5hZGIKLQotJChBQkFTRSktdGV4dF9pby1maXhlZF9pby5vOiBcCi0JCSQoc3JjZGlyKS8kKEFCQVNFKS10ZXh0X2lvLWZpeGVkX2lvLmFkcyBcCi0JCSQoc3JjZGlyKS8kKEFCQVNFKS10ZXh0X2lvLWZpeGVkX2lvLmFkYiAkKEJBU0VERVBTKQotCSQoQURBKSAkKEFEQUZMQUdTKSAtYyAtbyAkQCAkKHNyY2RpcikvJChBQkFTRSktdGV4dF9pby1maXhlZF9pby5hZGIKLQotJChBQkFTRSktdGV4dF9pby1kZWNpbWFsX2lvLm86IFwKLQkJJChzcmNkaXIpLyQoQUJBU0UpLXRleHRfaW8tZGVjaW1hbF9pby5hZHMgXAotCQkkKHNyY2RpcikvJChBQkFTRSktdGV4dF9pby1kZWNpbWFsX2lvLmFkYiAkKEJBU0VERVBTKQotCSQoQURBKSAkKEFEQUZMQUdTKSAtYyAtbyAkQCAkKHNyY2RpcikvJChBQkFTRSktdGV4dF9pby1kZWNpbWFsX2lvLmFkYgotCi0kKEFCQVNFKS10ZXh0X2lvLWVudW1lcmF0aW9uX2lvLm86IFwKLQkJJChzcmNkaXIpLyQoQUJBU0UpLXRleHRfaW8tZW51bWVyYXRpb25faW8uYWRzIFwKLQkJJChzcmNkaXIpLyQoQUJBU0UpLXRleHRfaW8tZW51bWVyYXRpb25faW8uYWRiICQoQkFTRURFUFMpCi0JJChBREEpICQoQURBRkxBR1MpIC1jIC1vICRAICQoc3JjZGlyKS8kKEFCQVNFKS10ZXh0X2lvLWVudW1lcmF0aW9uX2lvLmFkYgotCi0kKEFCQVNFKS10ZXh0X2lvLW1vZHVsYXJfaW8ubzogXAotCQkkKHNyY2RpcikvJChBQkFTRSktdGV4dF9pby1tb2R1bGFyX2lvLmFkcyBcCi0JCSQoc3JjZGlyKS8kKEFCQVNFKS10ZXh0X2lvLW1vZHVsYXJfaW8uYWRiICQoQkFTRURFUFMpCi0JJChBREEpICQoQURBRkxBR1MpIC1jIC1vICRAICQoc3JjZGlyKS8kKEFCQVNFKS10ZXh0X2lvLW1vZHVsYXJfaW8uYWRiCi0KLSQoQUJBU0UpLXRleHRfaW8tY29tcGxleF9pby5vOiBcCi0JCSQoc3JjZGlyKS8kKEFCQVNFKS10ZXh0X2lvLWNvbXBsZXhfaW8uYWRzIFwKLQkJJChzcmNkaXIpLyQoQUJBU0UpLXRleHRfaW8tY29tcGxleF9pby5hZGIgJChCQVNFREVQUykKLQkkKEFEQSkgJChBREFGTEFHUykgLWMgLW8gJEAgJChzcmNkaXIpLyQoQUJBU0UpLXRleHRfaW8tY29tcGxleF9pby5hZGIKK2NsZWFuIDo6CisJcm0gLXJmICQoQlVJTERfRElSKS8qLWFsaQorCXJtIC1yZiAkKEJVSUxEX0RJUikvKi1vYmoKKwlybSAtcmYgJChCVUlMRF9ESVJfTElCKQpkaWZmIC0tZ2l0IGEvQWRhOTUvc3JjL2NfdGhyZWFkZWRfdmFyaWFibGVzLmMgYi9BZGE5NS9zcmMvY190aHJlYWRlZF92YXJpYWJsZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzU4YzQ2Ci0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvc3JjL2NfdGhyZWFkZWRfdmFyaWFibGVzLmMKQEAgLTAsMCArMSw1NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMSwyMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgQXV0aG9yOiAgTmljb2xhcyBCb3VsZW5ndWV6LCAyMDExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImNfdGhyZWFkZWRfdmFyaWFibGVzLmgiCisKKyNkZWZpbmUgV1JBUCh0eXBlLCBuYW1lKSAgICAgICAgXAorICB0eXBlICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIG5hbWUgIyMgX2FzX2Z1bmN0aW9uICgpICAgICAgIFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJldHVybiBuYW1lOyAgICAgICAgICAgICAgICBcCisgIH0KKy8qICpJTkRFTlQtT0ZGKiAqLworV1JBUChXSU5ET1cgKiwgc3Rkc2NyKQorV1JBUChXSU5ET1cgKiwgY3Vyc2NyKQorCitXUkFQKGludCwgTElORVMpCitXUkFQKGludCwgQ09MUykKK1dSQVAoaW50LCBUQUJTSVpFKQorV1JBUChpbnQsIENPTE9SUykKK1dSQVAoaW50LCBDT0xPUl9QQUlSUykKKworY2h0eXBlCithY3NfbWFwX2FzX2Z1bmN0aW9uKGNoYXIgaW54KQoreworICByZXR1cm4gYWNzX21hcFsodW5zaWduZWQgY2hhcikgaW54XTsKK30KKy8qICpJTkRFTlQtT04qICovCmRpZmYgLS1naXQgYS9BZGE5NS9zcmMvY190aHJlYWRlZF92YXJpYWJsZXMuaCBiL0FkYTk1L3NyYy9jX3RocmVhZGVkX3ZhcmlhYmxlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmMGY2MmYKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9zcmMvY190aHJlYWRlZF92YXJpYWJsZXMuaApAQCAtMCwwICsxLDU4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExLTIwMTQsMjAxNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiAkSWQ6IGNfdGhyZWFkZWRfdmFyaWFibGVzLmgsdiAxLjMgMjAxNS8wOC8wNiAyMzowOTo0NyB0b20gRXhwICQgKi8KKworI2lmbmRlZiBfX0NfVEhSRUFERURfVkFSSUFCTEVTX0gKKyNkZWZpbmUgX19DX1RIUkVBREVEX1ZBUklBQkxFU19ICisKKyNpbmNsdWRlIDxuY3Vyc2VzX2NmZy5oPgorCisjaWYgSEFWRV9JTlRUWVBFU19ICisjIGluY2x1ZGUgPGludHR5cGVzLmg+CisjZWxzZQorIyBpZiBIQVZFX1NURElOVF9ICisjICBpbmNsdWRlIDxzdGRpbnQuaD4KKyMgZW5kaWYKKyNlbmRpZgorCisjaW5jbHVkZSA8Y3Vyc2VzLmg+CisKK2V4dGVybiBXSU5ET1cgKnN0ZHNjcl9hc19mdW5jdGlvbih2b2lkKTsKK2V4dGVybiBXSU5ET1cgKmN1cnNjcl9hc19mdW5jdGlvbih2b2lkKTsKKworZXh0ZXJuIGludCBMSU5FU19hc19mdW5jdGlvbih2b2lkKTsKK2V4dGVybiBpbnQgTElORVNfYXNfZnVuY3Rpb24odm9pZCk7CitleHRlcm4gaW50IENPTFNfYXNfZnVuY3Rpb24odm9pZCk7CitleHRlcm4gaW50IFRBQlNJWkVfYXNfZnVuY3Rpb24odm9pZCk7CitleHRlcm4gaW50IENPTE9SU19hc19mdW5jdGlvbih2b2lkKTsKK2V4dGVybiBpbnQgQ09MT1JfUEFJUlNfYXNfZnVuY3Rpb24odm9pZCk7CisKK2V4dGVybiBjaHR5cGUgYWNzX21hcF9hc19mdW5jdGlvbihjaGFyIC8qIGluZGV4ICovICk7CisKKyNlbmRpZiAvKiBfX0NfVEhSRUFERURfVkFSSUFCTEVTX0ggKi8KZGlmZiAtLWdpdCBhL0FkYTk1L3NyYy9jX3ZhcmFyZ3NfdG9fYWRhLmMgYi9BZGE5NS9zcmMvY192YXJhcmdzX3RvX2FkYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwYjFiYmUKLS0tIC9kZXYvbnVsbAorKysgYi9BZGE5NS9zcmMvY192YXJhcmdzX3RvX2FkYS5jCkBAIC0wLDAgKzEsMTE3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExLDIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBBdXRob3I6ICBOaWNvbGFzIEJvdWxlbmd1ZXosIDIwMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICAgIFZlcnNpb24gQ29udHJvbAorICAgICRJZDogY192YXJhcmdzX3RvX2FkYS5jLHYgMS42IDIwMTQvMDUvMjQgMjE6MzI6MTggdG9tIEV4cCAkCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgICovCisKKyNpbmNsdWRlICJjX3ZhcmFyZ3NfdG9fYWRhLmgiCisKK2ludAorc2V0X2ZpZWxkX3R5cGVfYWxudW0oRklFTEQgKmZpZWxkLAorCQkgICAgIGludCBtaW5pbXVtX3dpZHRoKQoreworICByZXR1cm4gc2V0X2ZpZWxkX3R5cGUoZmllbGQsIFRZUEVfQUxOVU0sIG1pbmltdW1fd2lkdGgpOworfQorCitpbnQKK3NldF9maWVsZF90eXBlX2FscGhhKEZJRUxEICpmaWVsZCwKKwkJICAgICBpbnQgbWluaW11bV93aWR0aCkKK3sKKyAgcmV0dXJuIHNldF9maWVsZF90eXBlKGZpZWxkLCBUWVBFX0FMUEhBLCBtaW5pbXVtX3dpZHRoKTsKK30KKworaW50CitzZXRfZmllbGRfdHlwZV9lbnVtKEZJRUxEICpmaWVsZCwKKwkJICAgIGNoYXIgKip2YWx1ZV9saXN0LAorCQkgICAgaW50IGNhc2Vfc2Vuc2l0aXZlLAorCQkgICAgaW50IHVuaXF1ZV9tYXRjaCkKK3sKKyAgcmV0dXJuIHNldF9maWVsZF90eXBlKGZpZWxkLCBUWVBFX0VOVU0sIHZhbHVlX2xpc3QsIGNhc2Vfc2Vuc2l0aXZlLAorCQkJdW5pcXVlX21hdGNoKTsKK30KKworaW50CitzZXRfZmllbGRfdHlwZV9pbnRlZ2VyKEZJRUxEICpmaWVsZCwKKwkJICAgICAgIGludCBwcmVjaXNpb24sCisJCSAgICAgICBsb25nIG1pbmltdW0sCisJCSAgICAgICBsb25nIG1heGltdW0pCit7CisgIHJldHVybiBzZXRfZmllbGRfdHlwZShmaWVsZCwgVFlQRV9JTlRFR0VSLCBwcmVjaXNpb24sIG1pbmltdW0sIG1heGltdW0pOworfQorCitpbnQKK3NldF9maWVsZF90eXBlX251bWVyaWMoRklFTEQgKmZpZWxkLAorCQkgICAgICAgaW50IHByZWNpc2lvbiwKKwkJICAgICAgIGRvdWJsZSBtaW5pbXVtLAorCQkgICAgICAgZG91YmxlIG1heGltdW0pCit7CisgIHJldHVybiBzZXRfZmllbGRfdHlwZShmaWVsZCwgVFlQRV9OVU1FUklDLCBwcmVjaXNpb24sIG1pbmltdW0sIG1heGltdW0pOworfQorCitpbnQKK3NldF9maWVsZF90eXBlX3JlZ2V4cChGSUVMRCAqZmllbGQsCisJCSAgICAgIGNoYXIgKnJlZ3VsYXJfZXhwcmVzc2lvbikKK3sKKyAgcmV0dXJuIHNldF9maWVsZF90eXBlKGZpZWxkLCBUWVBFX1JFR0VYUCwgcmVndWxhcl9leHByZXNzaW9uKTsKK30KKworaW50CitzZXRfZmllbGRfdHlwZV9pcHY0KEZJRUxEICpmaWVsZCkKK3sKKyAgcmV0dXJuIHNldF9maWVsZF90eXBlKGZpZWxkLCBUWVBFX0lQVjQpOworfQorCitpbnQKK3NldF9maWVsZF90eXBlX3VzZXIoRklFTEQgKmZpZWxkLAorCQkgICAgRklFTERUWVBFICpmaWVsZHR5cGUsCisJCSAgICB2b2lkICphcmcpCit7CisgIHJldHVybiBzZXRfZmllbGRfdHlwZShmaWVsZCwgZmllbGR0eXBlLCBhcmcpOworfQorCit2b2lkICoKK3ZvaWRfc3Rhcl9tYWtlX2FyZyh2YV9saXN0ICpsaXN0KQoreworICByZXR1cm4gdmFfYXJnKCpsaXN0LCB2b2lkICopOworfQorCisjaWZkZWYgVFJBQ0UKK3ZvaWQKK190cmFjZXMoY29uc3QgY2hhciAqZm10LCBjaGFyICphcmcpCit7CisgIF90cmFjZWYoZm10LCBhcmcpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9BZGE5NS9zcmMvY192YXJhcmdzX3RvX2FkYS5oIGIvQWRhOTUvc3JjL2NfdmFyYXJnc190b19hZGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjY5NzA1Ci0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvc3JjL2NfdmFyYXJnc190b19hZGEuaApAQCAtMCwwICsxLDgxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExLDIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiAkSWQ6IGNfdmFyYXJnc190b19hZGEuaCx2IDEuNCAyMDE1LzA4LzA2IDIzOjA4OjQ3IHRvbSBFeHAgJCAqLworCisjaWZuZGVmIF9fQ19WQVJBUkdTX1RPX0FEQV9ICisjZGVmaW5lIF9fQ19WQVJBUkdTX1RPX0FEQV9ICisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8bmN1cnNlc19jZmcuaD4KKyNlbHNlCisjaW5jbHVkZSA8bmN1cnNlcy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2luY2x1ZGUgPGZvcm0uaD4KKworZXh0ZXJuIGludCBzZXRfZmllbGRfdHlwZV9hbG51bShGSUVMRCAqIC8qIGZpZWxkICovICwKKwkJCQlpbnQgLyogbWluaW11bV93aWR0aCAqLyApOworCitleHRlcm4gaW50IHNldF9maWVsZF90eXBlX2FscGhhKEZJRUxEICogLyogZmllbGQgKi8gLAorCQkJCWludCAvKiBtaW5pbXVtX3dpZHRoICovICk7CisKK2V4dGVybiBpbnQgc2V0X2ZpZWxkX3R5cGVfZW51bShGSUVMRCAqIC8qIGZpZWxkICovICwKKwkJCSAgICAgICBjaGFyICoqIC8qIHZhbHVlX2xpc3QgKi8gLAorCQkJICAgICAgIGludCAvKiBjYXNlX3NlbnNpdGl2ZSAqLyAsCisJCQkgICAgICAgaW50IC8qIHVuaXF1ZV9tYXRjaCAqLyApOworCitleHRlcm4gaW50IHNldF9maWVsZF90eXBlX2ludGVnZXIoRklFTEQgKiAvKiBmaWVsZCAqLyAsCisJCQkJICBpbnQgLyogcHJlY2lzaW9uICovICwKKwkJCQkgIGxvbmcgLyogbWluaW11bSAqLyAsCisJCQkJICBsb25nIC8qIG1heGltdW0gKi8gKTsKKworZXh0ZXJuIGludCBzZXRfZmllbGRfdHlwZV9udW1lcmljKEZJRUxEICogLyogZmllbGQgKi8gLAorCQkJCSAgaW50IC8qIHByZWNpc2lvbiAqLyAsCisJCQkJICBkb3VibGUgLyogbWluaW11bSAqLyAsCisJCQkJICBkb3VibGUgLyogbWF4aW11bSAqLyApOworCitleHRlcm4gaW50IHNldF9maWVsZF90eXBlX3JlZ2V4cChGSUVMRCAqIC8qIGZpZWxkICovICwKKwkJCQkgY2hhciAqIC8qIHJlZ3VsYXJfZXhwcmVzc2lvbiAqLyApOworCitleHRlcm4gaW50IHNldF9maWVsZF90eXBlX2lwdjQoRklFTEQgKiAvKiBmaWVsZCAqLyApOworCitleHRlcm4gaW50IHNldF9maWVsZF90eXBlX3VzZXIoRklFTEQgKiAvKiBmaWVsZCAqLyAsCisJCQkgICAgICAgRklFTERUWVBFICogLyogZmllbGR0eXBlICovICwKKwkJCSAgICAgICB2b2lkICogLyogYXJnICovICk7CisKK2V4dGVybiB2b2lkICp2b2lkX3N0YXJfbWFrZV9hcmcodmFfbGlzdCAqIC8qIGxpc3QgKi8gKTsKKworI2lmZGVmIFRSQUNFCitleHRlcm4gdm9pZCBfdHJhY2VzKGNvbnN0IGNoYXIgKgkvKiBmbXQgKi8KKwkJICAgICxjaGFyICogLyogYXJnICovICk7CisjZW5kaWYKKworI2VuZGlmIC8qIF9fQ19WQVJBUkdTX1RPX0FEQV9IICovCmRpZmYgLS1naXQgYS9BZGE5NS9zcmMvbGlicmFyeS5ncHIgYi9BZGE5NS9zcmMvbGlicmFyeS5ncHIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTczODBmMAotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L3NyYy9saWJyYXJ5LmdwcgpAQCAtMCwwICsxLDU2IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMjAxMC0yMDExLDIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAkSWQ6IGxpYnJhcnkuZ3ByLHYgMS45IDIwMTQvMDYvMDEgMDE6MTM6MDkgdG9tIEV4cCAkCistLSBodHRwOi8vZ2NjLmdudS5vcmcvb25saW5lZG9jcy9nbmF0X3Vnbl91bncvTGlicmFyeS1Qcm9qZWN0cy5odG1sCistLSBodHRwOi8vd3d3LmFkYXdvcmxkLmNvbS9kZWJpYW4vZGViaWFuLWFkYS1wb2xpY3kuaHRtbAorcHJvamVjdCBMaWJyYXJ5IGlzCisgIEJ1aWxkX0RpciA6PSBFeHRlcm5hbCAoIkJVSUxEX0RJUiIpOworICBTb3VyY2VfRGlyIDo9IEV4dGVybmFsICgiU09VUkNFX0RJUiIpOworICBTb3VyY2VfRGlyMiA6PSBFeHRlcm5hbCAoIlNPVVJDRV9ESVIyIik7CisgIEtpbmQgOj0gRXh0ZXJuYWwgKCJMSUJfS0lORCIpOworICBmb3IgTGlicmFyeV9OYW1lIHVzZSBFeHRlcm5hbCAoIkxJQl9OQU1FIik7CisgIGZvciBMaWJyYXJ5X1ZlcnNpb24gdXNlIEV4dGVybmFsICgiU09OQU1FIik7CisKKyAgZm9yIExpYnJhcnlfS2luZCB1c2UgS2luZDsKKyAgZm9yIExpYnJhcnlfRGlyIHVzZSBCdWlsZF9EaXIgJiAiL2xpYiI7CisgIGZvciBPYmplY3RfRGlyIHVzZSBCdWlsZF9EaXIgJiAiLyIgJiBLaW5kICYgIi1vYmoiOworICBmb3IgTGlicmFyeV9BTElfRGlyIHVzZSBCdWlsZF9EaXIgJiAiLyIgJiBLaW5kICYgIi1hbGkiOworICBmb3IgU291cmNlX0RpcnMgdXNlIChTb3VyY2VfRGlyICYgIi9zcmMiLAorICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2VfRGlyMiwKKyAgICAgICAgICAgICAgICAgICAgICAgQnVpbGRfRGlyICYgIi9zcmMiKTsKKyAgZm9yIExpYnJhcnlfT3B0aW9ucyB1c2UgKCItbG5jdXJzZXMiLCAiLWxwYW5lbCIsICItbG1lbnUiLCAiLWxmb3JtIik7CisgIHBhY2thZ2UgQ29tcGlsZXIgaXMKKyAgICAgZm9yIERlZmF1bHRfU3dpdGNoZXMgKCJBZGEiKSB1c2UKKyAgICAgICAoIi1nIiwKKyAgICAgICAgIi1PMiIsCisgICAgICAgICItZ25hdGFmbm8iLAorICAgICAgICAiLWduYXRWYSIsICAgLS0gQWxsIHZhbGlkaXR5IGNoZWNrcworICAgICAgICAiLWduYXR3YSIpOyAgLS0gQWN0aXZhdGUgYWxsIG9wdGlvbmFsIGVycm9ycworICBlbmQgQ29tcGlsZXI7CisgIGZvciBMYW5ndWFnZXMgdXNlICgiQyIsICJBZGEiKTsKK2VuZCBMaWJyYXJ5OwpkaWZmIC0tZ2l0IGEvQWRhOTUvc3JjL21vZHVsZXMgYi9BZGE5NS9zcmMvbW9kdWxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjVlMDMwCi0tLSAvZGV2L251bGwKKysrIGIvQWRhOTUvc3JjL21vZHVsZXMKQEAgLTAsMCArMSw3MCBAQAorIyAkSWQ6IG1vZHVsZXMsdiAxLjMgMjAxMC8wNi8yNiAyMzozMzoxNCB0b20gRXhwICQKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAgIworIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCAjCisjIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gICMKKyMgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgICAgIworIyB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byAjCisjIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgICMKKyMgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluICMKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SICMKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksICAgIworIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCAgICAjCisjIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAgICAgICMKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgICAgIworIyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSICAgICAgICAjCisjIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgICAjCisjIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsICMKKyMgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAgICAgICAgIworIyBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5CTIwMTAKKyMKKworIyBMaWJyYXJ5IG9iamVjdHMKKyMgcm9vdG5hbWUJCQkJZGVwZW5kLXNwZWMJZGVwZW5kLWJvZHkJdW5pdAorJChBTElCKQkJCQkJJChzcmNkaXIpCW5vbmUJCXNwZWMKKyQoQUJBU0UpLWF1eAkJCQlub25lCQkkKHNyY2RpcikJYm9keQorJChBQkFTRSkJCQkJbm9uZQkJLgkJYm9keQorJChBQkFTRSktdGVybWluZm8JCQkkKHNyY2RpcikJJChzcmNkaXIpCWJvZHkKKyQoQUJBU0UpLXRlcm1jYXAJCQkkKHNyY2RpcikJJChzcmNkaXIpCWJvZHkKKyQoQUJBU0UpLXB1dHdpbgkJCQkkKHNyY2RpcikJJChzcmNkaXIpCWJvZHkKKyQoQUJBU0UpLXRyYWNlCQkJCS4JCS4JCWJvZHkKKyQoQUJBU0UpLW1vdXNlCQkJCS4JCSQoc3JjZGlyKQlib2R5CiskKEFCQVNFKS1wYW5lbHMJCQkJLgkJJChzcmNkaXIpCWJvZHkKKyQoQUJBU0UpLW1lbnVzCQkJCS4JCSQoc3JjZGlyKQlib2R5CiskKEFCQVNFKS1mb3JtcwkJCQkuCQkkKHNyY2RpcikJYm9keQorJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMJCS4JCSQoc3JjZGlyKQlib2R5CiskKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYQkkKHNyY2RpcikJJChzcmNkaXIpCWJvZHkKKyQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhbnVtZXJpYwkkKHNyY2RpcikJJChzcmNkaXIpCWJvZHkKKyQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLWludGZpZWxkCSQoc3JjZGlyKQkkKHNyY2RpcikJYm9keQorJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpYwkkKHNyY2RpcikJJChzcmNkaXIpCWJvZHkKKyQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLXJlZ2V4cAkkKHNyY2RpcikJJChzcmNkaXIpCWJvZHkKKyQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uCSQoc3JjZGlyKQkkKHNyY2RpcikJYm9keQorJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtaXB2NF9hZGRyZXNzCSQoc3JjZGlyKQkkKHNyY2RpcikJYm9keQorJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtdXNlcgkJJChzcmNkaXIpCSQoc3JjZGlyKQlib2R5CiskKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZQkkKHNyY2RpcikJJChzcmNkaXIpCWJvZHkKKyQoQUJBU0UpLXRleHRfaW8JCQkkKHNyY2RpcikJJChzcmNkaXIpCWJvZHkKKyQoQUJBU0UpLXRleHRfaW8tYXV4CQkJJChzcmNkaXIpCSQoc3JjZGlyKQlib2R5CiskKEFCQVNFKS1tZW51cy1tZW51X3VzZXJfZGF0YQkJLgkJJChzcmNkaXIpCWJvZHkKKyQoQUJBU0UpLW1lbnVzLWl0ZW1fdXNlcl9kYXRhCQkuCQkkKHNyY2RpcikJYm9keQorJChBQkFTRSktZm9ybXMtZm9ybV91c2VyX2RhdGEJCS4JCSQoc3JjZGlyKQlib2R5CiskKEFCQVNFKS1mb3Jtcy1maWVsZF91c2VyX2RhdGEJCS4JCSQoc3JjZGlyKQlib2R5CiskKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGEgJChzcmNkaXIpCSQoc3JjZGlyKQlib2R5CiskKEFCQVNFKS1wYW5lbHMtdXNlcl9kYXRhCQkuCQkkKHNyY2RpcikJYm9keQorJChBQkFTRSktdGV4dF9pby1pbnRlZ2VyX2lvCQkkKHNyY2RpcikJJChzcmNkaXIpCWJvZHkKKyQoQUJBU0UpLXRleHRfaW8tZmxvYXRfaW8JCSQoc3JjZGlyKQkkKHNyY2RpcikJYm9keQorJChBQkFTRSktdGV4dF9pby1maXhlZF9pbwkJJChzcmNkaXIpCSQoc3JjZGlyKQlib2R5CiskKEFCQVNFKS10ZXh0X2lvLWRlY2ltYWxfaW8JCSQoc3JjZGlyKQkkKHNyY2RpcikJYm9keQorJChBQkFTRSktdGV4dF9pby1lbnVtZXJhdGlvbl9pbwkJJChzcmNkaXIpCSQoc3JjZGlyKQlib2R5CiskKEFCQVNFKS10ZXh0X2lvLW1vZHVsYXJfaW8JCSQoc3JjZGlyKQkkKHNyY2RpcikJYm9keQorJChBQkFTRSktdGV4dF9pby1jb21wbGV4X2lvCQkkKHNyY2RpcikJJChzcmNkaXIpCWJvZHkKZGlmZiAtLWdpdCBhL0FkYTk1L3NyYy9uY3Vyc2VzX2NvbXBhdC5jIGIvQWRhOTUvc3JjL25jdXJzZXNfY29tcGF0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ0ZjNkMAotLS0gL2Rldi9udWxsCisrKyBiL0FkYTk1L3NyYy9uY3Vyc2VzX2NvbXBhdC5jCkBAIC0wLDAgKzEsMTQ1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExLDIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBBdXRob3I6ICBUaG9tYXMgRS4gRGlja2V5LCAyMDExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICAgIFZlcnNpb24gQ29udHJvbAorICAgICRJZDogbmN1cnNlc19jb21wYXQuYyx2IDEuMyAyMDE1LzA4LzA2IDIzOjA5OjEwIHRvbSBFeHAgJAorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBQcm92aWRlIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciB2ZXJzaW9ucyBvZiBuY3Vyc2VzLgorICovCisjaW5jbHVkZSA8bmN1cnNlc19jZmcuaD4KKworI2lmIEhBVkVfSU5UVFlQRVNfSAorIyBpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2Vsc2UKKyMgaWYgSEFWRV9TVERJTlRfSAorIyAgaW5jbHVkZSA8c3RkaW50Lmg+CisjIGVuZGlmCisjZW5kaWYKKworI2luY2x1ZGUgPGN1cnNlcy5oPgorCisjaWYgZGVmaW5lZChOQ1VSU0VTX1ZFUlNJT05fUEFUQ0gpCisKKyNpZiBOQ1VSU0VTX1ZFUlNJT05fUEFUQ0ggPCAyMDA4MTEyMgorZXh0ZXJuIGJvb2wgaGFzX21vdXNlKHZvaWQpOworZXh0ZXJuIGludCBfbmNfaGFzX21vdXNlKHZvaWQpOworCitib29sCitoYXNfbW91c2Uodm9pZCkKK3sKKyAgcmV0dXJuIChib29sKV9uY19oYXNfbW91c2UoKTsKK30KKyNlbmRpZgorCisvKgorICogVGhlc2UgYXJlIHByb3ZpZGVkIGJ5IGxpYl9nZW4uYzoKKyAqLworI2lmIE5DVVJTRVNfVkVSU0lPTl9QQVRDSCA8IDIwMDcwMzMxCitleHRlcm4gYm9vbCAoaXNfa2V5cGFkKSAoY29uc3QgV0lORE9XICopOworZXh0ZXJuIGJvb2wgKGlzX3Njcm9sbG9rKSAoY29uc3QgV0lORE9XICopOworCitib29sCitpc19rZXlwYWQoY29uc3QgV0lORE9XICp3aW4pCit7CisgIHJldHVybiAoKHdpbiktPl91c2Vfa2V5cGFkKTsKK30KKworYm9vbAorICAoaXNfc2Nyb2xsb2spIChjb25zdCBXSU5ET1cgKndpbikKK3sKKyAgcmV0dXJuICgod2luKS0+X3Njcm9sbCk7Cit9CisjZW5kaWYKKworI2lmIE5DVVJTRVNfVkVSU0lPTl9QQVRDSCA8IDIwMDYwMTA3CitleHRlcm4gaW50IChnZXRiZWd4KSAoV0lORE9XICopOworZXh0ZXJuIGludCAoZ2V0YmVneSkgKFdJTkRPVyAqKTsKK2V4dGVybiBpbnQgKGdldGN1cngpIChXSU5ET1cgKik7CitleHRlcm4gaW50IChnZXRjdXJ5KSAoV0lORE9XICopOworZXh0ZXJuIGludCAoZ2V0bWF4eCkgKFdJTkRPVyAqKTsKK2V4dGVybiBpbnQgKGdldG1heHkpIChXSU5ET1cgKik7CitleHRlcm4gaW50IChnZXRwYXJ4KSAoV0lORE9XICopOworZXh0ZXJuIGludCAoZ2V0cGFyeSkgKFdJTkRPVyAqKTsKKworaW50CisgIChnZXRiZWd5KSAoV0lORE9XICp3aW4pCit7CisgIHJldHVybiAoKHdpbikgPyAod2luKS0+X2JlZ3kgOiBFUlIpOworfQorCitpbnQKKyAgKGdldGJlZ3gpIChXSU5ET1cgKndpbikKK3sKKyAgcmV0dXJuICgod2luKSA/ICh3aW4pLT5fYmVneCA6IEVSUik7Cit9CisKK2ludAorICAoZ2V0Y3VyeSkgKFdJTkRPVyAqd2luKQoreworICByZXR1cm4gKCh3aW4pID8gKHdpbiktPl9jdXJ5IDogRVJSKTsKK30KKworaW50CisgIChnZXRjdXJ4KSAoV0lORE9XICp3aW4pCit7CisgIHJldHVybiAoKHdpbikgPyAod2luKS0+X2N1cnggOiBFUlIpOworfQorCitpbnQKKyAgKGdldG1heHkpIChXSU5ET1cgKndpbikKK3sKKyAgcmV0dXJuICgod2luKSA/ICgod2luKS0+X21heHkgKyAxKSA6IEVSUik7Cit9CisKK2ludAorICAoZ2V0bWF4eCkgKFdJTkRPVyAqd2luKQoreworICByZXR1cm4gKCh3aW4pID8gKCh3aW4pLT5fbWF4eCArIDEpIDogRVJSKTsKK30KKworaW50CisgIChnZXRwYXJ5KSAoV0lORE9XICp3aW4pCit7CisgIHJldHVybiAoKHdpbikgPyAod2luKS0+X3BhcnkgOiBFUlIpOworfQorCitpbnQKKyAgKGdldHBhcngpIChXSU5ET1cgKndpbikKK3sKKyAgcmV0dXJuICgod2luKSA/ICh3aW4pLT5fcGFyeCA6IEVSUik7Cit9CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXguYWRiIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4LmFkYgppbmRleCA4MTJlOGNjLi45YzJmOGNkIDEwMDY0NAotLS0gYS9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXguYWRiCisrKyBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eC5hZGIKQEAgLTcsNyArNyw3IEBACiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KIC0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQpAQCAtMzUsMTMgKzM1LDEzIEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKIC0tICBWZXJzaW9uIENvbnRyb2w6Ci0tLSAgJFJldmlzaW9uOiAxLjEwICQKKy0tICAkUmV2aXNpb246IDEuMTEgJAogLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBwYWNrYWdlIGJvZHkgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5BdXggaXMKICAgIC0tCiAgICAtLSAgU29tZSBoZWxwZXJzCi0gICBwcm9jZWR1cmUgRmlsbF9TdHJpbmcgKENwICA6IGluICBjaGFyc19wdHI7CisgICBwcm9jZWR1cmUgRmlsbF9TdHJpbmcgKENwICA6IGNoYXJzX3B0cjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyIDogb3V0IFN0cmluZykKICAgIGlzCiAgICAgICAtLSAgRmlsbCB0aGUgc3RyaW5nIHdpdGggdGhlIGNoYXJhY3RlcnMgcmVmZXJlbmNlZCBieSB0aGUKZGlmZiAtLWdpdCBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhLmFkYiBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhLmFkYgppbmRleCBmNDM3Y2U2Li45YzYxNGNhIDEwMDY0NAotLS0gYS9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYS5hZGIKKysrIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGEuYWRiCkBAIC03LDcgKzcsNyBAQAogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gQ29weXJpZ2h0IChjKSAxOTk4LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAxMSwyMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCiAtLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KQEAgLTM1LDMxICszNSwyMyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CiAtLSAgVmVyc2lvbiBDb250cm9sOgotLS0gICRSZXZpc2lvbjogMS45ICQKLS0tICAkRGF0ZTogMjAwOC8wNy8yNiAxODo1MDoyNSAkCistLSAgJFJldmlzaW9uOiAxLjEzICQKKy0tICAkRGF0ZTogMjAxNC8wNS8yNCAyMTozMTowNSAkCiAtLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHdpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5BdXg7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkF1eDsKIAogcGFja2FnZSBib2R5IFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuQWxwaGEgaXMKIAotICAgcHJvY2VkdXJlIFNldF9GaWVsZF9UeXBlIChGbGQgOiBpbiBGaWVsZDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwIDogaW4gQWxwaGFfRmllbGQpCisgICBwcm9jZWR1cmUgU2V0X0ZpZWxkX1R5cGUgKEZsZCA6IEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXAgOiBBbHBoYV9GaWVsZCkKICAgIGlzCi0gICAgICBDX0FscGhhX0ZpZWxkX1R5cGUgOiBDX0ZpZWxkX1R5cGU7Ci0gICAgICBwcmFnbWEgSW1wb3J0IChDLCBDX0FscGhhX0ZpZWxkX1R5cGUsICJUWVBFX0FMUEhBIik7Ci0KICAgICAgIGZ1bmN0aW9uIFNldF9GbGRfVHlwZSAoRiAgICA6IEZpZWxkIDo9IEZsZDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2Z0ICA6IENfRmllbGRfVHlwZSA6PSBDX0FscGhhX0ZpZWxkX1R5cGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzEgOiBDX0ludCkgcmV0dXJuIENfSW50OwotICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X0ZsZF9UeXBlLCAic2V0X2ZpZWxkX3R5cGUiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMSA6IENfSW50KSByZXR1cm4gRXRpX0Vycm9yOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X0ZsZF9UeXBlLCAic2V0X2ZpZWxkX3R5cGVfYWxwaGEiKTsKIAotICAgICAgUmVzIDogRXRpX0Vycm9yOwogICAgYmVnaW4KLSAgICAgIFJlcyA6PSBTZXRfRmxkX1R5cGUgKEFyZzEgPT4gQ19JbnQgKFR5cC5NaW5pbXVtX0ZpZWxkX1dpZHRoKSk7Ci0gICAgICBpZiBSZXMgLz0gRV9PayB0aGVuCi0gICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOwotICAgICAgZW5kIGlmOworICAgICAgRXRpX0V4Y2VwdGlvbiAoU2V0X0ZsZF9UeXBlIChBcmcxID0+IENfSW50IChUeXAuTWluaW11bV9GaWVsZF9XaWR0aCkpKTsKICAgICAgIFdyYXBfQnVpbHRpbiAoRmxkLCBUeXApOwogICAgZW5kIFNldF9GaWVsZF9UeXBlOwogCmRpZmYgLS1naXQgYS9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYS5hZHMgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYS5hZHMKaW5kZXggNmYwYjc5ZC4uNzg3OGY3MyAxMDA2NDQKLS0tIGEvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGEuYWRzCisrKyBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhLmFkcwpAQCAtNyw3ICs3LDcgQEAKIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQogLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCkBAIC0zNSw3ICszNSw3IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKIC0tICBWZXJzaW9uIENvbnRyb2w6Ci0tLSAgJFJldmlzaW9uOiAxLjExICQKKy0tICAkUmV2aXNpb246IDEuMTIgJAogLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBwYWNrYWdlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuQWxwaGEgaXMKQEAgLTQ2LDggKzQ2LDggQEAKICAgICAgICAgTWluaW11bV9GaWVsZF9XaWR0aCA6IE5hdHVyYWwgOj0gMDsKICAgICAgZW5kIHJlY29yZDsKIAotICAgcHJvY2VkdXJlIFNldF9GaWVsZF9UeXBlIChGbGQgOiBpbiBGaWVsZDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwIDogaW4gQWxwaGFfRmllbGQpOworICAgcHJvY2VkdXJlIFNldF9GaWVsZF9UeXBlIChGbGQgOiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwIDogQWxwaGFfRmllbGQpOwogICAgcHJhZ21hIElubGluZSAoU2V0X0ZpZWxkX1R5cGUpOwogCiBlbmQgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5BbHBoYTsKZGlmZiAtLWdpdCBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhbnVtZXJpYy5hZGIgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYW51bWVyaWMuYWRiCmluZGV4IDBjM2NhMjkuLjI3MDkwNmQgMTAwNjQ0Ci0tLSBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhbnVtZXJpYy5hZGIKKysrIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFudW1lcmljLmFkYgpAQCAtNyw3ICs3LDcgQEAKIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIENvcHlyaWdodCAoYykgMTk5OCwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMTEsMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQogLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCkBAIC0zNSwzMSArMzUsMjMgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgogLS0gIFZlcnNpb24gQ29udHJvbDoKLS0tICAkUmV2aXNpb246IDEuOSAkCi0tLSAgJERhdGU6IDIwMDgvMDcvMjYgMTg6NTA6MTUgJAorLS0gICRSZXZpc2lvbjogMS4xMyAkCistLSAgJERhdGU6IDIwMTQvMDUvMjQgMjE6MzE6MDUgJAogLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuQXV4OyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5BdXg7CiAKIHBhY2thZ2UgYm9keSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLkFscGhhTnVtZXJpYyBpcwogCi0gICBwcm9jZWR1cmUgU2V0X0ZpZWxkX1R5cGUgKEZsZCA6IGluIEZpZWxkOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXAgOiBpbiBBbHBoYU51bWVyaWNfRmllbGQpCisgICBwcm9jZWR1cmUgU2V0X0ZpZWxkX1R5cGUgKEZsZCA6IEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXAgOiBBbHBoYU51bWVyaWNfRmllbGQpCiAgICBpcwotICAgICAgQ19BbHBoYU51bWVyaWNfRmllbGRfVHlwZSA6IENfRmllbGRfVHlwZTsKLSAgICAgIHByYWdtYSBJbXBvcnQgKEMsIENfQWxwaGFOdW1lcmljX0ZpZWxkX1R5cGUsICJUWVBFX0FMTlVNIik7Ci0KICAgICAgIGZ1bmN0aW9uIFNldF9GbGRfVHlwZSAoRiAgICA6IEZpZWxkIDo9IEZsZDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2Z0ICA6IENfRmllbGRfVHlwZSA6PSBDX0FscGhhTnVtZXJpY19GaWVsZF9UeXBlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcxIDogQ19JbnQpIHJldHVybiBDX0ludDsKLSAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNldF9GbGRfVHlwZSwgInNldF9maWVsZF90eXBlIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzEgOiBDX0ludCkgcmV0dXJuIEV0aV9FcnJvcjsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNldF9GbGRfVHlwZSwgInNldF9maWVsZF90eXBlX2FsbnVtIik7CiAKLSAgICAgIFJlcyA6IEV0aV9FcnJvcjsKICAgIGJlZ2luCi0gICAgICBSZXMgOj0gU2V0X0ZsZF9UeXBlIChBcmcxID0+IENfSW50IChUeXAuTWluaW11bV9GaWVsZF9XaWR0aCkpOwotICAgICAgaWYgUmVzIC89IEVfT2sgdGhlbgotICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKLSAgICAgIGVuZCBpZjsKKyAgICAgIEV0aV9FeGNlcHRpb24gKFNldF9GbGRfVHlwZSAoQXJnMSA9PiBDX0ludCAoVHlwLk1pbmltdW1fRmllbGRfV2lkdGgpKSk7CiAgICAgICBXcmFwX0J1aWx0aW4gKEZsZCwgVHlwKTsKICAgIGVuZCBTZXRfRmllbGRfVHlwZTsKIApkaWZmIC0tZ2l0IGEvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFudW1lcmljLmFkcyBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhbnVtZXJpYy5hZHMKaW5kZXggMWYyMTk1MC4uYzEwMDlhYyAxMDA2NDQKLS0tIGEvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFudW1lcmljLmFkcworKysgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYW51bWVyaWMuYWRzCkBAIC03LDcgKzcsNyBAQAogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCiAtLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KQEAgLTM1LDcgKzM1LDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgogLS0gIFZlcnNpb24gQ29udHJvbDoKLS0tICAkUmV2aXNpb246IDEuMTEgJAorLS0gICRSZXZpc2lvbjogMS4xMiAkCiAtLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHBhY2thZ2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5BbHBoYU51bWVyaWMgaXMKQEAgLTQ3LDggKzQ3LDggQEAKICAgICAgICAgTWluaW11bV9GaWVsZF9XaWR0aCA6IE5hdHVyYWwgOj0gMDsKICAgICAgZW5kIHJlY29yZDsKIAotICAgcHJvY2VkdXJlIFNldF9GaWVsZF9UeXBlIChGbGQgOiBpbiBGaWVsZDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwIDogaW4gQWxwaGFOdW1lcmljX0ZpZWxkKTsKKyAgIHByb2NlZHVyZSBTZXRfRmllbGRfVHlwZSAoRmxkIDogRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cCA6IEFscGhhTnVtZXJpY19GaWVsZCk7CiAgICBwcmFnbWEgSW5saW5lIChTZXRfRmllbGRfVHlwZSk7CiAKIGVuZCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLkFscGhhTnVtZXJpYzsKZGlmZiAtLWdpdCBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYS5hZGIgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGEuYWRiCmluZGV4IGIzZWFmNDQuLmQzOGUwNjIgMTAwNjQ0Ci0tLSBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYS5hZGIKKysrIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhLmFkYgpAQCAtNyw3ICs3LDcgQEAKIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIENvcHlyaWdodCAoYykgMTk5OCwyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDQsMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQogLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCkBAIC0zNSw4ICszNSw4IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKIC0tICBWZXJzaW9uIENvbnRyb2w6Ci0tLSAgJFJldmlzaW9uOiAxLjEwICQKLS0tICAkRGF0ZTogMjAwNC8wOC8yMSAyMTozNzowMCAkCistLSAgJFJldmlzaW9uOiAxLjExICQKKy0tICAkRGF0ZTogMjAxMS8wMy8yMiAyMzozNjoyMCAkCiAtLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHdpdGggQWRhLkNoYXJhY3RlcnMuSGFuZGxpbmc7IHVzZSBBZGEuQ2hhcmFjdGVycy5IYW5kbGluZzsKQEAgLTYxLDggKzYxLDggQEAKICAgICAgICAgIGlmIFNldCAvPSBVcHBlcl9DYXNlIHRoZW4KICAgICAgICAgICAgIEkuTmFtZXMgKEopLmFsbCA6PSBUb19Mb3dlciAoSS5OYW1lcyAoSikuYWxsKTsKICAgICAgICAgICAgIGlmIFNldCA9IE1peGVkX0Nhc2UgdGhlbgotICAgICAgICAgICAgICAgSS5OYW1lcyAoSikoSS5OYW1lcyAoSikuYWxsJ0ZpcnN0KSA6PQotICAgICAgICAgICAgICAgICBUb19VcHBlciAoSS5OYW1lcyAoSikoSS5OYW1lcyAoSikuYWxsJ0ZpcnN0KSk7CisgICAgICAgICAgICAgICBJLk5hbWVzIChKKS5hbGwgKEkuTmFtZXMgKEopLmFsbCdGaXJzdCkgOj0KKyAgICAgICAgICAgICAgICAgVG9fVXBwZXIgKEkuTmFtZXMgKEopLmFsbCAoSS5OYW1lcyAoSikuYWxsJ0ZpcnN0KSk7CiAgICAgICAgICAgICBlbmQgaWY7CiAgICAgICAgICBlbmQgaWY7CiAgICAgICAgICBKIDo9IEogKyAxOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24uYWRiIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24uYWRiCmluZGV4IDhiZTIwZjIuLjhkNGM5Y2UgMTAwNjQ0Ci0tLSBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLmFkYgorKysgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi5hZGIKQEAgLTcsNyArNyw3IEBACiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OC0yMDExLDIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KIC0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQpAQCAtMzUsNyArMzUsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CiAtLSAgVmVyc2lvbiBDb250cm9sOgotLS0gICRSZXZpc2lvbjogMS43ICQKKy0tICAkUmV2aXNpb246IDEuMTIgJAogLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB3aXRoIEFkYS5VbmNoZWNrZWRfRGVhbGxvY2F0aW9uOwpAQCAtNjMsMTMgKzYzLDEzIEBACiAgICAgICAgICBpZiBJbmZvLk5hbWVzIChJKSA9IG51bGwgdGhlbgogICAgICAgICAgICAgcmFpc2UgRm9ybV9FeGNlcHRpb247CiAgICAgICAgICBlbmQgaWY7Ci0gICAgICAgICBFLkFyciAoc2l6ZV90IChJKSkgOj0gTmV3X1N0cmluZyAoSW5mby5OYW1lcyAoSSkuYWxsKTsKKyAgICAgICAgIEUuQXJyLmFsbCAoc2l6ZV90IChJKSkgOj0gTmV3X1N0cmluZyAoSW5mby5OYW1lcyAoSSkuYWxsKTsKICAgICAgICAgIGlmIEF1dG9fUmVsZWFzZV9OYW1lcyB0aGVuCiAgICAgICAgICAgICBTIDo9IEluZm8uTmFtZXMgKEkpOwogICAgICAgICAgICAgUmVsZWFzZV9TdHJpbmcgKFMpOwogICAgICAgICAgZW5kIGlmOwogICAgICAgZW5kIGxvb3A7Ci0gICAgICBFLkFyciAoTCkgOj0gTnVsbF9QdHI7CisgICAgICBFLkFyci5hbGwgKEwpIDo9IE51bGxfUHRyOwogICAgICAgcmV0dXJuIEU7CiAgICBlbmQgQ3JlYXRlOwogCkBAIC03OSw0MCArNzksMzMgQEAKICAgICAgIFAgOiBjaGFyc19wdHI7CiAgICBiZWdpbgogICAgICAgbG9vcAotICAgICAgICAgUCA6PSBFbnVtLkFyciAoSSk7CisgICAgICAgICBQIDo9IEVudW0uQXJyLmFsbCAoSSk7CiAgICAgICAgICBleGl0IHdoZW4gUCA9IE51bGxfUHRyOwogICAgICAgICAgRnJlZSAoUCk7Ci0gICAgICAgICBFbnVtLkFyciAoSSkgOj0gTnVsbF9QdHI7CisgICAgICAgICBFbnVtLkFyci5hbGwgKEkpIDo9IE51bGxfUHRyOwogICAgICAgICAgSSA6PSBJICsgMTsKICAgICAgIGVuZCBsb29wOwogICAgICAgRW51bS5BcnIgOj0gbnVsbDsKICAgIGVuZCBSZWxlYXNlOwogCi0gICBwcm9jZWR1cmUgU2V0X0ZpZWxkX1R5cGUgKEZsZCA6IGluIEZpZWxkOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXAgOiBpbiBFbnVtZXJhdGlvbl9GaWVsZCkKKyAgIHByb2NlZHVyZSBTZXRfRmllbGRfVHlwZSAoRmxkIDogRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cCA6IEVudW1lcmF0aW9uX0ZpZWxkKQogICAgaXMKLSAgICAgIENfRW51bV9UeXBlIDogQ19GaWVsZF9UeXBlOwotICAgICAgcHJhZ21hIEltcG9ydCAoQywgQ19FbnVtX1R5cGUsICJUWVBFX0VOVU0iKTsKLQogICAgICAgZnVuY3Rpb24gU2V0X0ZsZF9UeXBlIChGICAgIDogRmllbGQgOj0gRmxkOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDZnQgIDogQ19GaWVsZF9UeXBlIDo9IENfRW51bV9UeXBlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcxIDogY2hhcnNfcHRyX2FycmF5OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcyIDogQ19JbnQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzMgOiBDX0ludCkgcmV0dXJuIENfSW50OwotICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X0ZsZF9UeXBlLCAic2V0X2ZpZWxkX3R5cGUiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMyA6IENfSW50KSByZXR1cm4gRXRpX0Vycm9yOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X0ZsZF9UeXBlLCAic2V0X2ZpZWxkX3R5cGVfZW51bSIpOwogCi0gICAgICBSZXMgOiBFdGlfRXJyb3I7CiAgICBiZWdpbgogICAgICAgaWYgVHlwLkFyciA9IG51bGwgdGhlbgogICAgICAgICAgcmFpc2UgRm9ybV9FeGNlcHRpb247CiAgICAgICBlbmQgaWY7Ci0gICAgICBSZXMgOj0gU2V0X0ZsZF9UeXBlIChBcmcxID0+IFR5cC5BcnIuYWxsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMiA9PiBDX0ludCAoQm9vbGVhbidQb3MgKFR5cC5DYXNlX1NlbnNpdGl2ZSkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMyA9PiBDX0ludCAoQm9vbGVhbidQb3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChUeXAuTWF0Y2hfTXVzdF9CZV9VbmlxdWUpKSk7Ci0gICAgICBpZiBSZXMgLz0gRV9PayB0aGVuCi0gICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOwotICAgICAgZW5kIGlmOworICAgICAgRXRpX0V4Y2VwdGlvbgorICAgICAgICAoU2V0X0ZsZF9UeXBlCisgICAgICAgICAgIChBcmcxID0+IFR5cC5BcnIuYWxsLAorICAgICAgICAgICAgQXJnMiA9PiBDX0ludCAoQm9vbGVhbidQb3MgKFR5cC5DYXNlX1NlbnNpdGl2ZSkpLAorICAgICAgICAgICAgQXJnMyA9PiBDX0ludCAoQm9vbGVhbidQb3MgKFR5cC5NYXRjaF9NdXN0X0JlX1VuaXF1ZSkpKSk7CiAgICAgICBXcmFwX0J1aWx0aW4gKEZsZCwgVHlwLCBDX0Nob2ljZV9Sb3V0ZXIpOwogICAgZW5kIFNldF9GaWVsZF9UeXBlOwogCmRpZmYgLS1naXQgYS9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi5hZHMgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi5hZHMKaW5kZXggNWE3ZTQxMS4uZTY5MjRmNiAxMDA2NDQKLS0tIGEvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24uYWRzCisrKyBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLmFkcwpAQCAtNyw3ICs3LDcgQEAKIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQogLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCkBAIC0zNSw3ICszNSw3IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKIC0tICBWZXJzaW9uIENvbnRyb2w6Ci0tLSAgJFJldmlzaW9uOiAxLjExICQKKy0tICAkUmV2aXNpb246IDEuMTIgJAogLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB3aXRoIEludGVyZmFjZXMuQy5TdHJpbmdzOwpAQCAtODEsOCArODEsOCBAQAogICAgLS0gIFRoZSBuZXh0IHR5cGUgZGVmaW50aW9ucyBhcmUgYWxsIG5jdXJzZXMgZXh0ZW5zaW9ucy4gVGhleSBhcmUgdHlwaWNhbGx5CiAgICAtLSAgbm90IGF2YWlsYWJsZSBpbiBvdGhlciBjdXJzZXMgaW1wbGVtZW50YXRpb25zLgogCi0gICBwcm9jZWR1cmUgU2V0X0ZpZWxkX1R5cGUgKEZsZCA6IGluIEZpZWxkOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXAgOiBpbiBFbnVtZXJhdGlvbl9GaWVsZCk7CisgICBwcm9jZWR1cmUgU2V0X0ZpZWxkX1R5cGUgKEZsZCA6IEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXAgOiBFbnVtZXJhdGlvbl9GaWVsZCk7CiAgICBwcmFnbWEgSW5saW5lIChTZXRfRmllbGRfVHlwZSk7CiAKIHByaXZhdGUKZGlmZiAtLWdpdCBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWludGZpZWxkLmFkYiBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWludGZpZWxkLmFkYgppbmRleCA2MWQ2NmM0Li41ZWMzMzA1IDEwMDY0NAotLS0gYS9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pbnRmaWVsZC5hZGIKKysrIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaW50ZmllbGQuYWRiCkBAIC03LDcgKzcsNyBAQAogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gQ29weXJpZ2h0IChjKSAxOTk4LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAxMSwyMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCiAtLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KQEAgLTM1LDM1ICszNSwyNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CiAtLSAgVmVyc2lvbiBDb250cm9sOgotLS0gICRSZXZpc2lvbjogMS45ICQKLS0tICAkRGF0ZTogMjAwOC8wNy8yNiAxODo1MDowNiAkCistLSAgJFJldmlzaW9uOiAxLjEzICQKKy0tICAkRGF0ZTogMjAxNC8wNS8yNCAyMTozMTowNSAkCiAtLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHdpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5BdXg7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkF1eDsKIAogcGFja2FnZSBib2R5IFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuSW50RmllbGQgaXMKIAotICAgcHJvY2VkdXJlIFNldF9GaWVsZF9UeXBlIChGbGQgOiBpbiBGaWVsZDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwIDogaW4gSW50ZWdlcl9GaWVsZCkKKyAgIHByb2NlZHVyZSBTZXRfRmllbGRfVHlwZSAoRmxkIDogRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cCA6IEludGVnZXJfRmllbGQpCiAgICBpcwotICAgICAgQ19JbnRlZ2VyX0ZpZWxkX1R5cGUgOiBDX0ZpZWxkX1R5cGU7Ci0gICAgICBwcmFnbWEgSW1wb3J0IChDLCBDX0ludGVnZXJfRmllbGRfVHlwZSwgIlRZUEVfSU5URUdFUiIpOwotCiAgICAgICBmdW5jdGlvbiBTZXRfRmxkX1R5cGUgKEYgICAgOiBGaWVsZCA6PSBGbGQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIENmdCAgOiBDX0ZpZWxkX1R5cGUgOj0gQ19JbnRlZ2VyX0ZpZWxkX1R5cGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzEgOiBDX0ludDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMiA6IENfTG9uZ19JbnQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzMgOiBDX0xvbmdfSW50KSByZXR1cm4gQ19JbnQ7Ci0gICAgICBwcmFnbWEgSW1wb3J0IChDLCBTZXRfRmxkX1R5cGUsICJzZXRfZmllbGRfdHlwZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmczIDogQ19Mb25nX0ludCkgcmV0dXJuIEV0aV9FcnJvcjsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNldF9GbGRfVHlwZSwgInNldF9maWVsZF90eXBlX2ludGVnZXIiKTsKIAotICAgICAgUmVzIDogRXRpX0Vycm9yOwogICAgYmVnaW4KLSAgICAgIFJlcyA6PSBTZXRfRmxkX1R5cGUgKEFyZzEgPT4gQ19JbnQgKFR5cC5QcmVjaXNpb24pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMiA9PiBDX0xvbmdfSW50IChUeXAuTG93ZXJfTGltaXQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMyA9PiBDX0xvbmdfSW50IChUeXAuVXBwZXJfTGltaXQpKTsKLSAgICAgIGlmIFJlcyAvPSBFX09rIHRoZW4KLSAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7Ci0gICAgICBlbmQgaWY7CisgICAgICBFdGlfRXhjZXB0aW9uIChTZXRfRmxkX1R5cGUgKEFyZzEgPT4gQ19JbnQgKFR5cC5QcmVjaXNpb24pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcyID0+IENfTG9uZ19JbnQgKFR5cC5Mb3dlcl9MaW1pdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzMgPT4gQ19Mb25nX0ludCAoVHlwLlVwcGVyX0xpbWl0KSkpOwogICAgICAgV3JhcF9CdWlsdGluIChGbGQsIFR5cCk7CiAgICBlbmQgU2V0X0ZpZWxkX1R5cGU7CiAKZGlmZiAtLWdpdCBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWludGZpZWxkLmFkcyBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWludGZpZWxkLmFkcwppbmRleCBiMjg1Y2EyLi5lOTBmMGQwIDEwMDY0NAotLS0gYS9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pbnRmaWVsZC5hZHMKKysrIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaW50ZmllbGQuYWRzCkBAIC03LDcgKzcsNyBAQAogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCiAtLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KQEAgLTM1LDcgKzM1LDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgogLS0gIFZlcnNpb24gQ29udHJvbDoKLS0tICAkUmV2aXNpb246IDEuMTEgJAorLS0gICRSZXZpc2lvbjogMS4xMiAkCiAtLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHBhY2thZ2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5JbnRGaWVsZCBpcwpAQCAtNDgsOCArNDgsOCBAQAogICAgICAgICAgVXBwZXJfTGltaXQgOiBJbnRlZ2VyOwogICAgICAgZW5kIHJlY29yZDsKIAotICAgcHJvY2VkdXJlIFNldF9GaWVsZF9UeXBlIChGbGQgOiBpbiBGaWVsZDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwIDogaW4gSW50ZWdlcl9GaWVsZCk7CisgICBwcm9jZWR1cmUgU2V0X0ZpZWxkX1R5cGUgKEZsZCA6IEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXAgOiBJbnRlZ2VyX0ZpZWxkKTsKICAgIHByYWdtYSBJbmxpbmUgKFNldF9GaWVsZF9UeXBlKTsKIAogZW5kIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuSW50RmllbGQ7CmRpZmYgLS1naXQgYS9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pcHY0X2FkZHJlc3MuYWRiIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaXB2NF9hZGRyZXNzLmFkYgppbmRleCAzZDdjNWI1Li45NzhhNDdhIDEwMDY0NAotLS0gYS9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pcHY0X2FkZHJlc3MuYWRiCisrKyBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWlwdjRfYWRkcmVzcy5hZGIKQEAgLTcsNyArNyw3IEBACiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OC0yMDExLDIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KIC0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQpAQCAtMzUsMzEgKzM1LDIzIEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKIC0tICBWZXJzaW9uIENvbnRyb2w6Ci0tLSAgJFJldmlzaW9uOiAxLjkgJAotLS0gICREYXRlOiAyMDA4LzA3LzI2IDE4OjQ5OjQ3ICQKKy0tICAkUmV2aXNpb246IDEuMTMgJAorLS0gICREYXRlOiAyMDE0LzA1LzI0IDIxOjMxOjA1ICQKIC0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogd2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkF1eDsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuQXV4OwogCiBwYWNrYWdlIGJvZHkgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5JUFY0X0FkZHJlc3MgaXMKIAotICAgcHJvY2VkdXJlIFNldF9GaWVsZF9UeXBlIChGbGQgOiBpbiBGaWVsZDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwIDogaW4gSW50ZXJuZXRfVjRfQWRkcmVzc19GaWVsZCkKKyAgIHByb2NlZHVyZSBTZXRfRmllbGRfVHlwZSAoRmxkIDogRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cCA6IEludGVybmV0X1Y0X0FkZHJlc3NfRmllbGQpCiAgICBpcwotICAgICAgQ19JUFY0X0ZpZWxkX1R5cGUgOiBDX0ZpZWxkX1R5cGU7Ci0gICAgICBwcmFnbWEgSW1wb3J0IChDLCBDX0lQVjRfRmllbGRfVHlwZSwgIlRZUEVfSVBWNCIpOworICAgICAgZnVuY3Rpb24gU2V0X0ZsZF9UeXBlIChGIDogRmllbGQgOj0gRmxkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRXRpX0Vycm9yOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X0ZsZF9UeXBlLCAic2V0X2ZpZWxkX3R5cGVfaXB2NCIpOwogCi0gICAgICBmdW5jdGlvbiBTZXRfRmxkX1R5cGUgKEYgICAgOiBGaWVsZCA6PSBGbGQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIENmdCAgOiBDX0ZpZWxkX1R5cGUgOj0gQ19JUFY0X0ZpZWxkX1R5cGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDX0ludDsKLSAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNldF9GbGRfVHlwZSwgInNldF9maWVsZF90eXBlIik7Ci0KLSAgICAgIFJlcyA6IEV0aV9FcnJvcjsKICAgIGJlZ2luCi0gICAgICBSZXMgOj0gU2V0X0ZsZF9UeXBlOwotICAgICAgaWYgUmVzIC89IEVfT2sgdGhlbgotICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKLSAgICAgIGVuZCBpZjsKKyAgICAgIEV0aV9FeGNlcHRpb24gKFNldF9GbGRfVHlwZSk7CiAgICAgICBXcmFwX0J1aWx0aW4gKEZsZCwgVHlwKTsKICAgIGVuZCBTZXRfRmllbGRfVHlwZTsKIApkaWZmIC0tZ2l0IGEvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaXB2NF9hZGRyZXNzLmFkcyBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWlwdjRfYWRkcmVzcy5hZHMKaW5kZXggNmQwYWVmMC4uYWYzNjdlNyAxMDA2NDQKLS0tIGEvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaXB2NF9hZGRyZXNzLmFkcworKysgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pcHY0X2FkZHJlc3MuYWRzCkBAIC03LDcgKzcsNyBAQAogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCiAtLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KQEAgLTM1LDcgKzM1LDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgogLS0gIFZlcnNpb24gQ29udHJvbDoKLS0tICAkUmV2aXNpb246IDEuMTEgJAorLS0gICRSZXZpc2lvbjogMS4xMiAkCiAtLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHBhY2thZ2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5JUFY0X0FkZHJlc3MgaXMKQEAgLTQ0LDggKzQ0LDggQEAKIAogICAgdHlwZSBJbnRlcm5ldF9WNF9BZGRyZXNzX0ZpZWxkIGlzIG5ldyBGaWVsZF9UeXBlIHdpdGggbnVsbCByZWNvcmQ7CiAKLSAgIHByb2NlZHVyZSBTZXRfRmllbGRfVHlwZSAoRmxkIDogaW4gRmllbGQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cCA6IGluIEludGVybmV0X1Y0X0FkZHJlc3NfRmllbGQpOworICAgcHJvY2VkdXJlIFNldF9GaWVsZF9UeXBlIChGbGQgOiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwIDogSW50ZXJuZXRfVjRfQWRkcmVzc19GaWVsZCk7CiAgICBwcmFnbWEgSW5saW5lIChTZXRfRmllbGRfVHlwZSk7CiAKIGVuZCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLklQVjRfQWRkcmVzczsKZGlmZiAtLWdpdCBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLW51bWVyaWMuYWRiIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpYy5hZGIKaW5kZXggNzlmODQ4OS4uOTRlMmFhNyAxMDA2NDQKLS0tIGEvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpYy5hZGIKKysrIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpYy5hZGIKQEAgLTcsNyArNyw3IEBACiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OC0yMDExLDIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KIC0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQpAQCAtMzUsOCArMzUsOCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CiAtLSAgVmVyc2lvbiBDb250cm9sOgotLS0gICRSZXZpc2lvbjogMS4xMCAkCi0tLSAgJERhdGU6IDIwMDgvMDcvMjYgMTg6NDk6NTcgJAorLS0gICRSZXZpc2lvbjogMS4xNCAkCistLSAgJERhdGU6IDIwMTQvMDUvMjQgMjE6MzE6MDUgJAogLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB3aXRoIEludGVyZmFjZXMuQzsKQEAgLTQ0LDI5ICs0NCwyMSBAQAogCiBwYWNrYWdlIGJvZHkgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5OdW1lcmljIGlzCiAKLSAgIHByb2NlZHVyZSBTZXRfRmllbGRfVHlwZSAoRmxkIDogaW4gRmllbGQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cCA6IGluIE51bWVyaWNfRmllbGQpCisgICBwcm9jZWR1cmUgU2V0X0ZpZWxkX1R5cGUgKEZsZCA6IEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXAgOiBOdW1lcmljX0ZpZWxkKQogICAgaXMKICAgICAgIHR5cGUgRG91YmxlIGlzIG5ldyBJbnRlcmZhY2VzLkMuZG91YmxlOwogCi0gICAgICBDX051bWVyaWNfRmllbGRfVHlwZSA6IENfRmllbGRfVHlwZTsKLSAgICAgIHByYWdtYSBJbXBvcnQgKEMsIENfTnVtZXJpY19GaWVsZF9UeXBlLCAiVFlQRV9OVU1FUklDIik7Ci0KICAgICAgIGZ1bmN0aW9uIFNldF9GbGRfVHlwZSAoRiAgICA6IEZpZWxkIDo9IEZsZDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2Z0ICA6IENfRmllbGRfVHlwZSA6PSBDX051bWVyaWNfRmllbGRfVHlwZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMSA6IENfSW50OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcyIDogRG91YmxlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmczIDogRG91YmxlKSByZXR1cm4gQ19JbnQ7Ci0gICAgICBwcmFnbWEgSW1wb3J0IChDLCBTZXRfRmxkX1R5cGUsICJzZXRfZmllbGRfdHlwZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmczIDogRG91YmxlKSByZXR1cm4gRXRpX0Vycm9yOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X0ZsZF9UeXBlLCAic2V0X2ZpZWxkX3R5cGVfbnVtZXJpYyIpOwogCi0gICAgICBSZXMgOiBFdGlfRXJyb3I7CiAgICBiZWdpbgotICAgICAgUmVzIDo9IFNldF9GbGRfVHlwZSAoQXJnMSA9PiBDX0ludCAoVHlwLlByZWNpc2lvbiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcyID0+IERvdWJsZSAoVHlwLkxvd2VyX0xpbWl0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzMgPT4gRG91YmxlIChUeXAuVXBwZXJfTGltaXQpKTsKLSAgICAgIGlmIFJlcyAvPSBFX09rIHRoZW4KLSAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7Ci0gICAgICBlbmQgaWY7CisgICAgICBFdGlfRXhjZXB0aW9uIChTZXRfRmxkX1R5cGUgKEFyZzEgPT4gQ19JbnQgKFR5cC5QcmVjaXNpb24pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcyID0+IERvdWJsZSAoVHlwLkxvd2VyX0xpbWl0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMyA9PiBEb3VibGUgKFR5cC5VcHBlcl9MaW1pdCkpKTsKICAgICAgIFdyYXBfQnVpbHRpbiAoRmxkLCBUeXApOwogICAgZW5kIFNldF9GaWVsZF9UeXBlOwogCmRpZmYgLS1naXQgYS9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1udW1lcmljLmFkcyBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLW51bWVyaWMuYWRzCmluZGV4IGYyMTFiYzguLjdjNmY5ZmEgMTAwNjQ0Ci0tLSBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLW51bWVyaWMuYWRzCisrKyBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLW51bWVyaWMuYWRzCkBAIC03LDcgKzcsNyBAQAogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCiAtLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KQEAgLTM1LDcgKzM1LDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgogLS0gIFZlcnNpb24gQ29udHJvbDoKLS0tICAkUmV2aXNpb246IDEuMTEgJAorLS0gICRSZXZpc2lvbjogMS4xMiAkCiAtLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHBhY2thZ2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5OdW1lcmljIGlzCkBAIC00OCw4ICs0OCw4IEBACiAgICAgICAgICBVcHBlcl9MaW1pdCA6IEZsb2F0OwogICAgICAgZW5kIHJlY29yZDsKIAotICAgcHJvY2VkdXJlIFNldF9GaWVsZF9UeXBlIChGbGQgOiBpbiBGaWVsZDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwIDogaW4gTnVtZXJpY19GaWVsZCk7CisgICBwcm9jZWR1cmUgU2V0X0ZpZWxkX1R5cGUgKEZsZCA6IEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXAgOiBOdW1lcmljX0ZpZWxkKTsKICAgIHByYWdtYSBJbmxpbmUgKFNldF9GaWVsZF9UeXBlKTsKIAogZW5kIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuTnVtZXJpYzsKZGlmZiAtLWdpdCBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXJlZ2V4cC5hZGIgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1yZWdleHAuYWRiCmluZGV4IGNiZDllMmYuLmY1ZWEwZGIgMTAwNjQ0Ci0tLSBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXJlZ2V4cC5hZGIKKysrIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtcmVnZXhwLmFkYgpAQCAtNyw3ICs3LDcgQEAKIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMTEsMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQogLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCkBAIC0zNSw3ICszNSw3IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKIC0tICBWZXJzaW9uIENvbnRyb2w6Ci0tLSAgJFJldmlzaW9uOiAxLjggJAorLS0gICRSZXZpc2lvbjogMS4xMiAkCiAtLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHdpdGggSW50ZXJmYWNlcy5DOyB1c2UgSW50ZXJmYWNlcy5DOwpAQCAtNDMsMjggKzQzLDE1IEBACiAKIHBhY2thZ2UgYm9keSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLlJlZ0V4cCBpcwogCi0gICBwcm9jZWR1cmUgU2V0X0ZpZWxkX1R5cGUgKEZsZCA6IGluIEZpZWxkOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXAgOiBpbiBSZWd1bGFyX0V4cHJlc3Npb25fRmllbGQpCisgICBwcm9jZWR1cmUgU2V0X0ZpZWxkX1R5cGUgKEZsZCA6IEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXAgOiBSZWd1bGFyX0V4cHJlc3Npb25fRmllbGQpCiAgICBpcwotICAgICAgdHlwZSBDaGFyX1B0ciBpcyBhY2Nlc3MgYWxsIEludGVyZmFjZXMuQy5jaGFyOwotCi0gICAgICBDX1JlZ2V4cF9GaWVsZF9UeXBlIDogQ19GaWVsZF9UeXBlOwotICAgICAgcHJhZ21hIEltcG9ydCAoQywgQ19SZWdleHBfRmllbGRfVHlwZSwgIlRZUEVfUkVHRVhQIik7Ci0KICAgICAgIGZ1bmN0aW9uIFNldF9GdHlwIChGICAgIDogRmllbGQgOj0gRmxkOwotICAgICAgICAgICAgICAgICAgICAgICAgIENmdCAgOiBDX0ZpZWxkX1R5cGUgOj0gQ19SZWdleHBfRmllbGRfVHlwZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICBBcmcxIDogQ2hhcl9QdHIpIHJldHVybiBDX0ludDsKLSAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNldF9GdHlwLCAic2V0X2ZpZWxkX3R5cGUiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBBcmcxIDogY2hhcl9hcnJheSkgcmV0dXJuIEV0aV9FcnJvcjsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNldF9GdHlwLCAic2V0X2ZpZWxkX3R5cGVfcmVnZXhwIik7CiAKLSAgICAgIFR4dCA6IGNoYXJfYXJyYXkgKDAgLi4gVHlwLlJlZ3VsYXJfRXhwcmVzc2lvbi5hbGwnTGVuZ3RoKTsKLSAgICAgIExlbiA6IHNpemVfdDsKLSAgICAgIFJlcyA6IEV0aV9FcnJvcjsKICAgIGJlZ2luCi0gICAgICBUb19DIChUeXAuUmVndWxhcl9FeHByZXNzaW9uLmFsbCwgVHh0LCBMZW4pOwotICAgICAgUmVzIDo9IFNldF9GdHlwIChBcmcxID0+IFR4dCAoVHh0J0ZpcnN0KSdBY2Nlc3MpOwotICAgICAgaWYgUmVzIC89IEVfT2sgdGhlbgotICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKLSAgICAgIGVuZCBpZjsKKyAgICAgIEV0aV9FeGNlcHRpb24gKFNldF9GdHlwIChBcmcxID0+IFRvX0MgKFR5cC5SZWd1bGFyX0V4cHJlc3Npb24uYWxsKSkpOwogICAgICAgV3JhcF9CdWlsdGluIChGbGQsIFR5cCk7CiAgICBlbmQgU2V0X0ZpZWxkX1R5cGU7CiAKZGlmZiAtLWdpdCBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXJlZ2V4cC5hZHMgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1yZWdleHAuYWRzCmluZGV4IDFlNDUxYWIuLjI2ODQxMzggMTAwNjQ0Ci0tLSBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXJlZ2V4cC5hZHMKKysrIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtcmVnZXhwLmFkcwpAQCAtNyw3ICs3LDcgQEAKIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQogLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCkBAIC0zNSw3ICszNSw3IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKIC0tICBWZXJzaW9uIENvbnRyb2w6Ci0tLSAgJFJldmlzaW9uOiAxLjExICQKKy0tICAkUmV2aXNpb246IDEuMTIgJAogLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBwYWNrYWdlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuUmVnRXhwIGlzCkBAIC00OCw4ICs0OCw4IEBACiAgICAgICAgICBSZWd1bGFyX0V4cHJlc3Npb24gOiBTdHJpbmdfQWNjZXNzOwogICAgICAgZW5kIHJlY29yZDsKIAotICAgcHJvY2VkdXJlIFNldF9GaWVsZF9UeXBlIChGbGQgOiBpbiBGaWVsZDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwIDogaW4gUmVndWxhcl9FeHByZXNzaW9uX0ZpZWxkKTsKKyAgIHByb2NlZHVyZSBTZXRfRmllbGRfVHlwZSAoRmxkIDogRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cCA6IFJlZ3VsYXJfRXhwcmVzc2lvbl9GaWVsZCk7CiAgICBwcmFnbWEgSW5saW5lIChTZXRfRmllbGRfVHlwZSk7CiAKIGVuZCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLlJlZ0V4cDsKZGlmZiAtLWdpdCBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlLmFkYiBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlLmFkYgppbmRleCBmMjZhNDJjLi44NDE0Y2QwIDEwMDY0NAotLS0gYS9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZS5hZGIKKysrIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2UuYWRiCkBAIC03LDcgKzcsNyBAQAogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAxMSwyMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCiAtLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KQEAgLTM1LDQyICszNSw0MCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CiAtLSAgVmVyc2lvbiBDb250cm9sOgotLS0gICRSZXZpc2lvbjogMS4xNSAkCi0tLSAgJERhdGU6IDIwMDgvMDcvMjYgMTg6NDg6NTggJAorLS0gICRSZXZpc2lvbjogMS4yMCAkCistLSAgJERhdGU6IDIwMTQvMDUvMjQgMjE6MzE6MDUgJAogLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi13aXRoIEFkYS5VbmNoZWNrZWRfQ29udmVyc2lvbjsKK3dpdGggU3lzdGVtLkFkZHJlc3NfVG9fQWNjZXNzX0NvbnZlcnNpb25zOwogd2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkF1eDsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuQXV4OwogCiBwYWNrYWdlIGJvZHkgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5Vc2VyLkNob2ljZSBpcwogCi0gICBwcmFnbWEgV2FybmluZ3MgKE9mZik7Ci0gICBmdW5jdGlvbiBUb19Bcmd1bWVudF9BY2Nlc3MgaXMgbmV3IEFkYS5VbmNoZWNrZWRfQ29udmVyc2lvbgotICAgICAoU3lzdGVtLkFkZHJlc3MsIEFyZ3VtZW50X0FjY2Vzcyk7Ci0gICBwcmFnbWEgV2FybmluZ3MgKE9uKTsKKyAgIHBhY2thZ2UgQXJndW1lbnRfQ29udmVyc2lvbnMgaXMKKyAgICAgIG5ldyBTeXN0ZW0uQWRkcmVzc19Ub19BY2Nlc3NfQ29udmVyc2lvbnMgKEFyZ3VtZW50KTsKIAogICAgZnVuY3Rpb24gR2VuZXJpY19OZXh0IChGbGQgOiBGaWVsZDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgVXNyIDogU3lzdGVtLkFkZHJlc3MpIHJldHVybiBDX0ludAorICAgICAgICAgICAgICAgICAgICAgICAgICBVc3IgOiBTeXN0ZW0uQWRkcmVzcykgcmV0dXJuIEN1cnNlc19Cb29sCiAgICBpcwogICAgICAgUmVzdWx0IDogQm9vbGVhbjsKICAgICAgIFVkZiAgICA6IGNvbnN0YW50IFVzZXJfRGVmaW5lZF9GaWVsZF9UeXBlX1dpdGhfQ2hvaWNlX0FjY2VzcyA6PQogICAgICAgICBVc2VyX0RlZmluZWRfRmllbGRfVHlwZV9XaXRoX0Nob2ljZV9BY2Nlc3MKLSAgICAgICAgKFRvX0FyZ3VtZW50X0FjY2VzcyAoVXNyKS5UeXApOworICAgICAgICAoQXJndW1lbnRfQWNjZXNzIChBcmd1bWVudF9Db252ZXJzaW9ucy5Ub19Qb2ludGVyIChVc3IpKS5hbGwuVHlwKTsKICAgIGJlZ2luCiAgICAgICBSZXN1bHQgOj0gTmV4dCAoRmxkLCBVZGYuYWxsKTsKLSAgICAgIHJldHVybiBDX0ludCAoQm9vbGVhbidQb3MgKFJlc3VsdCkpOworICAgICAgcmV0dXJuIEN1cnNlc19Cb29sIChCb29sZWFuJ1BvcyAoUmVzdWx0KSk7CiAgICBlbmQgR2VuZXJpY19OZXh0OwogCiAgICBmdW5jdGlvbiBHZW5lcmljX1ByZXYgKEZsZCA6IEZpZWxkOwotICAgICAgICAgICAgICAgICAgICAgICAgICBVc3IgOiBTeXN0ZW0uQWRkcmVzcykgcmV0dXJuIENfSW50CisgICAgICAgICAgICAgICAgICAgICAgICAgIFVzciA6IFN5c3RlbS5BZGRyZXNzKSByZXR1cm4gQ3Vyc2VzX0Jvb2wKICAgIGlzCiAgICAgICBSZXN1bHQgOiBCb29sZWFuOwogICAgICAgVWRmICAgIDogY29uc3RhbnQgVXNlcl9EZWZpbmVkX0ZpZWxkX1R5cGVfV2l0aF9DaG9pY2VfQWNjZXNzIDo9CiAgICAgICAgIFVzZXJfRGVmaW5lZF9GaWVsZF9UeXBlX1dpdGhfQ2hvaWNlX0FjY2VzcwotICAgICAgICAoVG9fQXJndW1lbnRfQWNjZXNzIChVc3IpLlR5cCk7CisgICAgICAgIChBcmd1bWVudF9BY2Nlc3MgKEFyZ3VtZW50X0NvbnZlcnNpb25zLlRvX1BvaW50ZXIgKFVzcikpLmFsbC5UeXApOwogICAgYmVnaW4KICAgICAgIFJlc3VsdCA6PSBQcmV2aW91cyAoRmxkLCBVZGYuYWxsKTsKLSAgICAgIHJldHVybiBDX0ludCAoQm9vbGVhbidQb3MgKFJlc3VsdCkpOworICAgICAgcmV0dXJuIEN1cnNlc19Cb29sIChCb29sZWFuJ1BvcyAoUmVzdWx0KSk7CiAgICBlbmQgR2VuZXJpY19QcmV2OwogCiAgICAtLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTkwLDE2ICs4OCwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWtlX0FyZydBY2Nlc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcHlfQXJnJ0FjY2VzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJlZV9BcmcnQWNjZXNzKTsKLSAgICAgICAgICAgIGlmIFJlcyAvPSBFX09rIHRoZW4KLSAgICAgICAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7Ci0gICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOwogCiAgICAgICAgICAgICBSZXMgOj0gU2V0X0ZpZWxkdHlwZV9DaG9pY2UgKFQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyaWNfTmV4dCdBY2Nlc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyaWNfUHJldidBY2Nlc3MpOwotICAgICAgICAgICAgaWYgUmVzIC89IEVfT2sgdGhlbgotICAgICAgICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKLSAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7CiAgICAgICAgICBlbmQgaWY7CiAgICAgICAgICBNX0dlbmVyaWNfQ2hvaWNlIDo9IFQ7CiAgICAgICBlbmQgaWY7CmRpZmYgLS1naXQgYS9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZS5hZHMgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZS5hZHMKaW5kZXggMWU2OWY0My4uNWIxMzJjOSAxMDA2NDQKLS0tIGEvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2UuYWRzCisrKyBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlLmFkcwpAQCAtNyw3ICs3LDcgQEAKIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIENvcHlyaWdodCAoYykgMTk5OCwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDgsMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQogLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCkBAIC0zNSw4ICszNSw4IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKIC0tICBWZXJzaW9uIENvbnRyb2w6Ci0tLSAgJFJldmlzaW9uOiAxLjEyICQKLS0tICAkRGF0ZTogMjAwOC8wNy8yNiAxODo0OToyMCAkCistLSAgJFJldmlzaW9uOiAxLjE0ICQKKy0tICAkRGF0ZTogMjAxMS8wMy8xOSAxMjoyNzo0NyAkCiAtLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHdpdGggSW50ZXJmYWNlcy5DOwpAQCAtNzgsMTcgKzc4LDE3IEBACiAgICBmdW5jdGlvbiBDX0dlbmVyaWNfQ2hvaWNlIHJldHVybiBDX0ZpZWxkX1R5cGU7CiAKICAgIGZ1bmN0aW9uIEdlbmVyaWNfTmV4dCAoRmxkIDogRmllbGQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIFVzciA6IFN5c3RlbS5BZGRyZXNzKSByZXR1cm4gQ19JbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFVzciA6IFN5c3RlbS5BZGRyZXNzKSByZXR1cm4gQ3Vyc2VzX0Jvb2w7CiAgICBwcmFnbWEgQ29udmVudGlvbiAoQywgR2VuZXJpY19OZXh0KTsKICAgIC0tICBUaGlzIGlzIHRoZSBnZW5lcmljIG5leHQgQ2hvaWNlX0Z1bmN0aW9uIGZvciB0aGUgbG93LWxldmVsIGZpZWxkdHlwZQotICAgLS0gIHJlcHJlc2VudGluZyBhbGwgdGhlIFVzZXJfRGVmaW5lZF9GaWVsZF9UeXBlIGRlcml2YXRlcy4gSXQgcm91dGVzCisgICAtLSAgcmVwcmVzZW50aW5nIGFsbCB0aGUgVXNlcl9EZWZpbmVkX0ZpZWxkX1R5cGUgZGVyaXZhdGl2ZXMuIEl0IHJvdXRlcwogICAgLS0gIHRoZSBjYWxsIHRvIHRoZSBOZXh0IGltcGxlbWVudGF0aW9uIGZvciB0aGUgdHlwZS4KIAogICAgZnVuY3Rpb24gR2VuZXJpY19QcmV2IChGbGQgOiBGaWVsZDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgVXNyIDogU3lzdGVtLkFkZHJlc3MpIHJldHVybiBDX0ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVXNyIDogU3lzdGVtLkFkZHJlc3MpIHJldHVybiBDdXJzZXNfQm9vbDsKICAgIHByYWdtYSBDb252ZW50aW9uIChDLCBHZW5lcmljX1ByZXYpOwogICAgLS0gIFRoaXMgaXMgdGhlIGdlbmVyaWMgcHJldiBDaG9pY2VfRnVuY3Rpb24gZm9yIHRoZSBsb3ctbGV2ZWwgZmllbGR0eXBlCi0gICAtLSAgcmVwcmVzZW50aW5nIGFsbCB0aGUgVXNlcl9EZWZpbmVkX0ZpZWxkX1R5cGUgZGVyaXZhdGVzLiBJdCByb3V0ZXMKKyAgIC0tICByZXByZXNlbnRpbmcgYWxsIHRoZSBVc2VyX0RlZmluZWRfRmllbGRfVHlwZSBkZXJpdmF0aXZlcy4gSXQgcm91dGVzCiAgICAtLSAgdGhlIGNhbGwgdG8gdGhlIFByZXZpb3VzIGltcGxlbWVudGF0aW9uIGZvciB0aGUgdHlwZS4KIAogZW5kIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuVXNlci5DaG9pY2U7CmRpZmYgLS1naXQgYS9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLmFkYiBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXIuYWRiCmluZGV4IDBiNGMxMzYuLjk4YmNkMjQgMTAwNjQ0Ci0tLSBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXIuYWRiCisrKyBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXIuYWRiCkBAIC03LDcgKzcsNyBAQAogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAxMSwyMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCiAtLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KQEAgLTM1LDE3ICszNSwxNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CiAtLSAgVmVyc2lvbiBDb250cm9sOgotLS0gICRSZXZpc2lvbjogMS4xNSAkCi0tLSAgJERhdGU6IDIwMDgvMDcvMjYgMTg6NDk6MjggJAorLS0gICRSZXZpc2lvbjogMS4yMyAkCistLSAgJERhdGU6IDIwMTQvMDUvMjQgMjE6MzE6MDUgJAogLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi13aXRoIEFkYS5VbmNoZWNrZWRfQ29udmVyc2lvbjsKK3dpdGggU3lzdGVtLkFkZHJlc3NfVG9fQWNjZXNzX0NvbnZlcnNpb25zOwogd2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkF1eDsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuQXV4OwogCiBwYWNrYWdlIGJvZHkgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5Vc2VyIGlzCiAKLSAgIHByb2NlZHVyZSBTZXRfRmllbGRfVHlwZSAoRmxkIDogaW4gRmllbGQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cCA6IGluIFVzZXJfRGVmaW5lZF9GaWVsZF9UeXBlKQorICAgcHJvY2VkdXJlIFNldF9GaWVsZF9UeXBlIChGbGQgOiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwIDogVXNlcl9EZWZpbmVkX0ZpZWxkX1R5cGUpCiAgICBpcwogICAgICAgZnVuY3Rpb24gQWxsb2NhdGVfQXJnIChUIDogVXNlcl9EZWZpbmVkX0ZpZWxkX1R5cGUnQ2xhc3MpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBcmd1bWVudF9BY2Nlc3M7CkBAIC01MywxMCArNTMsOCBAQAogICAgICAgZnVuY3Rpb24gU2V0X0ZsZF9UeXBlIChGICAgIDogRmllbGQgOj0gRmxkOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDZnQgIDogQ19GaWVsZF9UeXBlIDo9IENfR2VuZXJpY19UeXBlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcxIDogQXJndW1lbnRfQWNjZXNzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ19JbnQ7Ci0gICAgICBwcmFnbWEgSW1wb3J0IChDLCBTZXRfRmxkX1R5cGUsICJzZXRfZmllbGRfdHlwZSIpOwotCi0gICAgICBSZXMgOiBFdGlfRXJyb3I7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFdGlfRXJyb3I7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTZXRfRmxkX1R5cGUsICJzZXRfZmllbGRfdHlwZV91c2VyIik7CiAKICAgICAgIGZ1bmN0aW9uIEFsbG9jYXRlX0FyZyAoVCA6IFVzZXJfRGVmaW5lZF9GaWVsZF9UeXBlJ0NsYXNzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQXJndW1lbnRfQWNjZXNzCkBAIC03MCwzNyArNjgsMzQgQEAKICAgICAgIGVuZCBBbGxvY2F0ZV9Bcmc7CiAKICAgIGJlZ2luCi0gICAgICBSZXMgOj0gU2V0X0ZsZF9UeXBlIChBcmcxID0+IEFsbG9jYXRlX0FyZyAoVHlwKSk7Ci0gICAgICBpZiBSZXMgLz0gRV9PayB0aGVuCi0gICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOwotICAgICAgZW5kIGlmOworICAgICAgRXRpX0V4Y2VwdGlvbiAoU2V0X0ZsZF9UeXBlIChBcmcxID0+IEFsbG9jYXRlX0FyZyAoVHlwKSkpOwogICAgZW5kIFNldF9GaWVsZF9UeXBlOwogCi0gICBwcmFnbWEgV2FybmluZ3MgKE9mZik7Ci0gICBmdW5jdGlvbiBUb19Bcmd1bWVudF9BY2Nlc3MgaXMgbmV3IEFkYS5VbmNoZWNrZWRfQ29udmVyc2lvbgotICAgICAoU3lzdGVtLkFkZHJlc3MsIEFyZ3VtZW50X0FjY2Vzcyk7Ci0gICBwcmFnbWEgV2FybmluZ3MgKE9uKTsKKyAgIHBhY2thZ2UgQXJndW1lbnRfQ29udmVyc2lvbnMgaXMKKyAgICAgIG5ldyBTeXN0ZW0uQWRkcmVzc19Ub19BY2Nlc3NfQ29udmVyc2lvbnMgKEFyZ3VtZW50KTsKIAogICAgZnVuY3Rpb24gR2VuZXJpY19GaWVsZF9DaGVjayAoRmxkIDogRmllbGQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc3IgOiBTeXN0ZW0uQWRkcmVzcykgcmV0dXJuIENfSW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc3IgOiBTeXN0ZW0uQWRkcmVzcykgcmV0dXJuIEN1cnNlc19Cb29sCiAgICBpcwogICAgICAgUmVzdWx0IDogQm9vbGVhbjsKICAgICAgIFVkZiAgICA6IGNvbnN0YW50IFVzZXJfRGVmaW5lZF9GaWVsZF9UeXBlX0FjY2VzcyA6PQotICAgICAgICBVc2VyX0RlZmluZWRfRmllbGRfVHlwZV9BY2Nlc3MgKFRvX0FyZ3VtZW50X0FjY2VzcyAoVXNyKS5UeXApOworICAgICAgICBVc2VyX0RlZmluZWRfRmllbGRfVHlwZV9BY2Nlc3MKKyAgICAgICAgICAoQXJndW1lbnRfQWNjZXNzIChBcmd1bWVudF9Db252ZXJzaW9ucy5Ub19Qb2ludGVyIChVc3IpKS5hbGwuVHlwKTsKICAgIGJlZ2luCiAgICAgICBSZXN1bHQgOj0gRmllbGRfQ2hlY2sgKEZsZCwgVWRmLmFsbCk7Ci0gICAgICByZXR1cm4gQ19JbnQgKEJvb2xlYW4nUG9zIChSZXN1bHQpKTsKKyAgICAgIHJldHVybiBDdXJzZXNfQm9vbCAoQm9vbGVhbidQb3MgKFJlc3VsdCkpOwogICAgZW5kIEdlbmVyaWNfRmllbGRfQ2hlY2s7CiAKICAgIGZ1bmN0aW9uIEdlbmVyaWNfQ2hhcl9DaGVjayAoQ2ggIDogQ19JbnQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzciA6IFN5c3RlbS5BZGRyZXNzKSByZXR1cm4gQ19JbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNyIDogU3lzdGVtLkFkZHJlc3MpIHJldHVybiBDdXJzZXNfQm9vbAogICAgaXMKICAgICAgIFJlc3VsdCA6IEJvb2xlYW47CiAgICAgICBVZGYgICAgOiBjb25zdGFudCBVc2VyX0RlZmluZWRfRmllbGRfVHlwZV9BY2Nlc3MgOj0KLSAgICAgICAgVXNlcl9EZWZpbmVkX0ZpZWxkX1R5cGVfQWNjZXNzIChUb19Bcmd1bWVudF9BY2Nlc3MgKFVzcikuVHlwKTsKKyAgICAgICAgVXNlcl9EZWZpbmVkX0ZpZWxkX1R5cGVfQWNjZXNzCisgICAgICAgICAgKEFyZ3VtZW50X0FjY2VzcyAoQXJndW1lbnRfQ29udmVyc2lvbnMuVG9fUG9pbnRlciAoVXNyKSkuYWxsLlR5cCk7CiAgICBiZWdpbgogICAgICAgUmVzdWx0IDo9IENoYXJhY3Rlcl9DaGVjayAoQ2hhcmFjdGVyJ1ZhbCAoQ2gpLCBVZGYuYWxsKTsKLSAgICAgIHJldHVybiBDX0ludCAoQm9vbGVhbidQb3MgKFJlc3VsdCkpOworICAgICAgcmV0dXJuIEN1cnNlc19Cb29sIChCb29sZWFuJ1BvcyAoUmVzdWx0KSk7CiAgICBlbmQgR2VuZXJpY19DaGFyX0NoZWNrOwogCiAgICAtLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTEyMCw5ICsxMTUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWtlX0FyZydBY2Nlc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcHlfQXJnJ0FjY2VzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJlZV9BcmcnQWNjZXNzKTsKLSAgICAgICAgICAgIGlmIFJlcyAvPSBFX09rIHRoZW4KLSAgICAgICAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7Ci0gICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOwogICAgICAgICAgZW5kIGlmOwogICAgICAgICAgTV9HZW5lcmljX1R5cGUgOj0gVDsKICAgICAgIGVuZCBpZjsKZGlmZiAtLWdpdCBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXIuYWRzIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci5hZHMKaW5kZXggYWNlYzYzNi4uNzAwMGZjZSAxMDA2NDQKLS0tIGEvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci5hZHMKKysrIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci5hZHMKQEAgLTcsNyArNyw3IEBACiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OC0yMDA5LDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KIC0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQpAQCAtMzUsOCArMzUsOCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CiAtLSAgVmVyc2lvbiBDb250cm9sOgotLS0gICRSZXZpc2lvbjogMS4xMiAkCi0tLSAgJERhdGU6IDIwMDgvMDcvMjYgMTg6NDk6MzggJAorLS0gICRSZXZpc2lvbjogMS4xNSAkCistLSAgJERhdGU6IDIwMTEvMDMvMTkgMTI6Mjc6MjEgJAogLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB3aXRoIEludGVyZmFjZXMuQzsKQEAgLTY3LDggKzY3LDggQEAKICAgIC0tICBJZiBUcnVlIGlzIHJldHVybmVkLCB0aGUgY2hhcmFjdGVyIGlzIGNvbnNpZGVyZWQgYXMgdmFsaWQgZm9yIHRoZQogICAgLS0gIGZpZWxkLCBvdGhlcndpc2UgYXMgaW52YWxpZC4KIAotICAgcHJvY2VkdXJlIFNldF9GaWVsZF9UeXBlIChGbGQgOiBpbiBGaWVsZDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwIDogaW4gVXNlcl9EZWZpbmVkX0ZpZWxkX1R5cGUpOworICAgcHJvY2VkdXJlIFNldF9GaWVsZF9UeXBlIChGbGQgOiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwIDogVXNlcl9EZWZpbmVkX0ZpZWxkX1R5cGUpOwogICAgLS0gIFRoaXMgc2hvdWxkIHdvcmsgZm9yIGFsbCB0eXBlcyBkZXJpdmVkIGZyb20gVXNlcl9EZWZpbmVkX0ZpZWxkX1R5cGUuCiAgICAtLSAgTm8gbmVlZCB0byByZWltcGxlbWVudCBpdCBmb3IgeW91ciBkZXJpdmVkIHR5cGUuCiAKQEAgLTc5LDE3ICs3OSwxNyBAQAogICAgZnVuY3Rpb24gQ19HZW5lcmljX1R5cGUgICByZXR1cm4gQ19GaWVsZF9UeXBlOwogCiAgICBmdW5jdGlvbiBHZW5lcmljX0ZpZWxkX0NoZWNrIChGbGQgOiBGaWVsZDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzciA6IFN5c3RlbS5BZGRyZXNzKSByZXR1cm4gQ19JbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc3IgOiBTeXN0ZW0uQWRkcmVzcykgcmV0dXJuIEN1cnNlc19Cb29sOwogICAgcHJhZ21hIENvbnZlbnRpb24gKEMsIEdlbmVyaWNfRmllbGRfQ2hlY2spOwogICAgLS0gIFRoaXMgaXMgdGhlIGdlbmVyaWMgRmllbGRfQ2hlY2tfRnVuY3Rpb24gZm9yIHRoZSBsb3ctbGV2ZWwgZmllbGR0eXBlCi0gICAtLSAgcmVwcmVzZW50aW5nIGFsbCB0aGUgVXNlcl9EZWZpbmVkX0ZpZWxkX1R5cGUgZGVyaXZhdGVzLiBJdCByb3V0ZXMKKyAgIC0tICByZXByZXNlbnRpbmcgYWxsIHRoZSBVc2VyX0RlZmluZWRfRmllbGRfVHlwZSBkZXJpdmF0aXZlcy4gSXQgcm91dGVzCiAgICAtLSAgdGhlIGNhbGwgdG8gdGhlIEZpZWxkX0NoZWNrIGltcGxlbWVudGF0aW9uIGZvciB0aGUgdHlwZS4KIAogICAgZnVuY3Rpb24gR2VuZXJpY19DaGFyX0NoZWNrIChDaCAgOiBDX0ludDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNyIDogU3lzdGVtLkFkZHJlc3MpIHJldHVybiBDX0ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNyIDogU3lzdGVtLkFkZHJlc3MpIHJldHVybiBDdXJzZXNfQm9vbDsKICAgIHByYWdtYSBDb252ZW50aW9uIChDLCBHZW5lcmljX0NoYXJfQ2hlY2spOwogICAgLS0gIFRoaXMgaXMgdGhlIGdlbmVyaWMgQ2hhcl9DaGVja19GdW5jdGlvbiBmb3IgdGhlIGxvdy1sZXZlbCBmaWVsZHR5cGUKLSAgIC0tICByZXByZXNlbnRpbmcgYWxsIHRoZSBVc2VyX0RlZmluZWRfRmllbGRfVHlwZSBkZXJpdmF0ZXMuIEl0IHJvdXRlcworICAgLS0gIHJlcHJlc2VudGluZyBhbGwgdGhlIFVzZXJfRGVmaW5lZF9GaWVsZF9UeXBlIGRlcml2YXRpdmVzLiBJdCByb3V0ZXMKICAgIC0tICB0aGUgY2FsbCB0byB0aGUgQ2hhcmFjdGVyX0NoZWNrIGltcGxlbWVudGF0aW9uIGZvciB0aGUgdHlwZS4KIAogZW5kIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuVXNlcjsKZGlmZiAtLWdpdCBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLmFkYiBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLmFkYgppbmRleCBjNjgxYzgwLi5iZGE2ZTUxIDEwMDY0NAotLS0gYS9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy5hZGIKKysrIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMuYWRiCkBAIC03LDcgKzcsNyBAQAogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAxMSwyMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCiAtLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KQEAgLTM1LDEzICszNSwxNCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CiAtLSAgVmVyc2lvbiBDb250cm9sOgotLS0gICRSZXZpc2lvbjogMS4yMCAkCi0tLSAgJERhdGU6IDIwMDgvMDcvMjYgMTg6NTA6MzMgJAorLS0gICRSZXZpc2lvbjogMS4yOCAkCistLSAgJERhdGU6IDIwMTQvMDkvMTMgMTk6MDA6NDcgJAogLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuQXV4OyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5BdXg7CiB3aXRoIEFkYS5VbmNoZWNrZWRfRGVhbGxvY2F0aW9uOwotd2l0aCBBZGEuVW5jaGVja2VkX0NvbnZlcnNpb247Cit3aXRoIFN5c3RlbS5BZGRyZXNzX1RvX0FjY2Vzc19Db252ZXJzaW9uczsKKwogLS0gIHwKIC0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAtLSAgfCBtYW4gcGFnZSBmb3JtX2ZpZWxkdHlwZS4zeApAQCAtNTEsMTAgKzUyLDggQEAKIAogICAgdXNlIHR5cGUgU3lzdGVtLkFkZHJlc3M7CiAKLSAgIHByYWdtYSBXYXJuaW5ncyAoT2ZmKTsKLSAgIGZ1bmN0aW9uIFRvX0FyZ3VtZW50X0FjY2VzcyBpcyBuZXcgQWRhLlVuY2hlY2tlZF9Db252ZXJzaW9uCi0gICAgIChTeXN0ZW0uQWRkcmVzcywgQXJndW1lbnRfQWNjZXNzKTsKLSAgIHByYWdtYSBXYXJuaW5ncyAoT24pOworICAgcGFja2FnZSBBcmd1bWVudF9Db252ZXJzaW9ucyBpcworICAgICAgbmV3IFN5c3RlbS5BZGRyZXNzX1RvX0FjY2Vzc19Db252ZXJzaW9ucyAoQXJndW1lbnQpOwogCiAgICBmdW5jdGlvbiBHZXRfRmllbGR0eXBlIChGIDogRmllbGQpIHJldHVybiBDX0ZpZWxkX1R5cGU7CiAgICBwcmFnbWEgSW1wb3J0IChDLCBHZXRfRmllbGR0eXBlLCAiZmllbGRfdHlwZSIpOwpAQCAtNjgsNyArNjcsNyBAQAogICAgLS0gIHwKICAgIC0tICB8CiAgICAtLSAgfAotICAgZnVuY3Rpb24gR2V0X1R5cGUgKEZsZCA6IGluIEZpZWxkKSByZXR1cm4gRmllbGRfVHlwZV9BY2Nlc3MKKyAgIGZ1bmN0aW9uIEdldF9UeXBlIChGbGQgOiBGaWVsZCkgcmV0dXJuIEZpZWxkX1R5cGVfQWNjZXNzCiAgICBpcwogICAgICAgTG93X0xldmVsIDogY29uc3RhbnQgQ19GaWVsZF9UeXBlIDo9IEdldF9GaWVsZHR5cGUgKEZsZCk7CiAgICAgICBBcmcgOiBBcmd1bWVudF9BY2Nlc3M7CkBAIC03NywxNCArNzYsMTYgQEAKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgZWxzZQogICAgICAgICAgaWYgTG93X0xldmVsID0gTV9CdWlsdGluX1JvdXRlciBvciBlbHNlCi0gICAgICAgICAgIExvd19MZXZlbCA9IE1fR2VuZXJpY19UeXBlIG9yIGVsc2UKLSAgICAgICAgICAgTG93X0xldmVsID0gTV9DaG9pY2VfUm91dGVyIG9yIGVsc2UKLSAgICAgICAgICAgTG93X0xldmVsID0gTV9HZW5lcmljX0Nob2ljZSB0aGVuCi0gICAgICAgICAgICBBcmcgOj0gVG9fQXJndW1lbnRfQWNjZXNzIChHZXRfQXJnIChGbGQpKTsKKyAgICAgICAgICAgIExvd19MZXZlbCA9IE1fR2VuZXJpY19UeXBlIG9yIGVsc2UKKyAgICAgICAgICAgIExvd19MZXZlbCA9IE1fQ2hvaWNlX1JvdXRlciBvciBlbHNlCisgICAgICAgICAgICBMb3dfTGV2ZWwgPSBNX0dlbmVyaWNfQ2hvaWNlCisgICAgICAgICB0aGVuCisgICAgICAgICAgICBBcmcgOj0gQXJndW1lbnRfQWNjZXNzCisgICAgICAgICAoQXJndW1lbnRfQ29udmVyc2lvbnMuVG9fUG9pbnRlciAoR2V0X0FyZyAoRmxkKSkpOwogICAgICAgICAgICAgaWYgQXJnID0gbnVsbCB0aGVuCiAgICAgICAgICAgICAgICByYWlzZSBGb3JtX0V4Y2VwdGlvbjsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgIHJldHVybiBBcmcuVHlwOworICAgICAgICAgICAgICAgcmV0dXJuIEFyZy5hbGwuVHlwOwogICAgICAgICAgICAgZW5kIGlmOwogICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmFpc2UgRm9ybV9FeGNlcHRpb247CkBAIC05Miw0OSArOTMsMzIgQEAKICAgICAgIGVuZCBpZjsKICAgIGVuZCBHZXRfVHlwZTsKIAotICAgZnVuY3Rpb24gTWFrZV9BcmcgKEFyZ3MgOiBTeXN0ZW0uQWRkcmVzcykgcmV0dXJuIFN5c3RlbS5BZGRyZXNzCi0gICBpcwotICAgICAgLS0gIEFjdHVhbGx5IGFyZ3MgaXMgYSBkb3VibGUgaW5kaXJlY3RlZCBwb2ludGVyIHRvIHRoZSBhcmd1bWVudHMKLSAgICAgIC0tICBvZiBhIEMgdmFyaWFibGUgYXJndW1lbnQgbGlzdC4gSW4gdGhlb3J5IGl0IGlzIG5vdyBxdWl0ZQotICAgICAgLS0gIGNvbXBsaWNhdGVkIHRvIHdyaXRlIHBvcnRhYmxlIHJvdXRpbmUgdGhhdCByZWFkcyB0aGUgYXJndW1lbnRzLAotICAgICAgLS0gIGJlY2F1c2Ugb25lIGhhcyB0byBrbm93IHRoZSBncm93dGggZGlyZWN0aW9uIG9mIHRoZSBzdGFjayBhbmQKLSAgICAgIC0tICB0aGUgc2l6ZXMgb2YgdGhlIGluZGl2aWR1YWwgYXJndW1lbnRzLgotICAgICAgLS0gIEZvcnR1bmF0ZWx5IHdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIGZpcnN0IGFyZ3VtZW50ICgjMCksCi0gICAgICAtLSAgd2Uga25vdyBpdHMgc2l6ZSBhbmQgZm9yIHRoZSBmaXJzdCBhcmcgd2UgZG9uJ3QgY2FyZSBhYm91dAotICAgICAgLS0gIGludG8gd2hpY2ggc3RhY2sgZGlyZWN0aW9uIHdlIGhhdmUgdG8gcHJvY2VlZC4gV2Ugc2ltcGx5Ci0gICAgICAtLSAgcmVzb2x2ZSB0aGUgZG91YmxlIGluZGlyZWN0aW9uIGFuZCB0aGF0cyBpdC4KLSAgICAgIHR5cGUgViBpcyBhY2Nlc3MgYWxsIFN5c3RlbS5BZGRyZXNzOwotICAgICAgZnVuY3Rpb24gVG9fQWNjZXNzIGlzIG5ldyBBZGEuVW5jaGVja2VkX0NvbnZlcnNpb24gKFN5c3RlbS5BZGRyZXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFYpOwotICAgYmVnaW4KLSAgICAgIHJldHVybiBUb19BY2Nlc3MgKFRvX0FjY2VzcyAoQXJncykuYWxsKS5hbGw7Ci0gICBlbmQgTWFrZV9Bcmc7Ci0KICAgIGZ1bmN0aW9uIENvcHlfQXJnIChVc3IgOiBTeXN0ZW0uQWRkcmVzcykgcmV0dXJuIFN5c3RlbS5BZGRyZXNzCiAgICBpcwogICAgYmVnaW4KICAgICAgIHJldHVybiBVc3I7CiAgICBlbmQgQ29weV9Bcmc7CiAKLSAgIHByb2NlZHVyZSBGcmVlX0FyZyAoVXNyIDogaW4gU3lzdGVtLkFkZHJlc3MpCisgICBwcm9jZWR1cmUgRnJlZV9BcmcgKFVzciA6IFN5c3RlbS5BZGRyZXNzKQogICAgaXMKICAgICAgIHByb2NlZHVyZSBGcmVlX1R5cGUgaXMgbmV3IEFkYS5VbmNoZWNrZWRfRGVhbGxvY2F0aW9uCiAgICAgICAgIChGaWVsZF9UeXBlJ0NsYXNzLCBGaWVsZF9UeXBlX0FjY2Vzcyk7CiAgICAgICBwcm9jZWR1cmUgRnJlZWFyZ3MgaXMgbmV3IEFkYS5VbmNoZWNrZWRfRGVhbGxvY2F0aW9uCiAgICAgICAgIChBcmd1bWVudCwgQXJndW1lbnRfQWNjZXNzKTsKIAotICAgICAgVG9fQmVfRnJlZSA6IEFyZ3VtZW50X0FjY2VzcyA6PSBUb19Bcmd1bWVudF9BY2Nlc3MgKFVzcik7CisgICAgICBUb19CZV9GcmVlIDogQXJndW1lbnRfQWNjZXNzCisgICA6PSBBcmd1bWVudF9BY2Nlc3MgKEFyZ3VtZW50X0NvbnZlcnNpb25zLlRvX1BvaW50ZXIgKFVzcikpOwogICAgICAgTG93X0xldmVsICA6IENfRmllbGRfVHlwZTsKICAgIGJlZ2luCiAgICAgICBpZiBUb19CZV9GcmVlIC89IG51bGwgdGhlbgotICAgICAgICAgaWYgVG9fQmVfRnJlZS5Vc3IgLz0gU3lzdGVtLk51bGxfQWRkcmVzcyB0aGVuCi0gICAgICAgICAgICBMb3dfTGV2ZWwgOj0gVG9fQmVfRnJlZS5DZnQ7Ci0gICAgICAgICAgICBpZiBMb3dfTGV2ZWwuRnJlZWFyZyAvPSBudWxsIHRoZW4KLSAgICAgICAgICAgICAgIExvd19MZXZlbC5GcmVlYXJnIChUb19CZV9GcmVlLlVzcik7CisgICAgICAgICBpZiBUb19CZV9GcmVlLmFsbC5Vc3IgLz0gU3lzdGVtLk51bGxfQWRkcmVzcyB0aGVuCisgICAgICAgICAgICBMb3dfTGV2ZWwgOj0gVG9fQmVfRnJlZS5hbGwuQ2Z0OworICAgICAgICAgICAgaWYgTG93X0xldmVsLmFsbC5GcmVlYXJnIC89IG51bGwgdGhlbgorICAgICAgICAgICAgICAgTG93X0xldmVsLmFsbC5GcmVlYXJnIChUb19CZV9GcmVlLmFsbC5Vc3IpOwogICAgICAgICAgICAgZW5kIGlmOwogICAgICAgICAgZW5kIGlmOwotICAgICAgICAgaWYgVG9fQmVfRnJlZS5UeXAgLz0gbnVsbCB0aGVuCi0gICAgICAgICAgICBGcmVlX1R5cGUgKFRvX0JlX0ZyZWUuVHlwKTsKKyAgICAgICAgIGlmIFRvX0JlX0ZyZWUuYWxsLlR5cCAvPSBudWxsIHRoZW4KKyAgICAgICAgICAgIEZyZWVfVHlwZSAoVG9fQmVfRnJlZS5hbGwuVHlwKTsKICAgICAgICAgIGVuZCBpZjsKICAgICAgICAgIEZyZWVhcmdzIChUb19CZV9GcmVlKTsKICAgICAgIGVuZCBpZjsKQEAgLTE0NywxMSArMTMxLDEwIEBACiAgICAgICBVc3JfQXJnICAgOiBjb25zdGFudCBTeXN0ZW0uQWRkcmVzcyA6PSBHZXRfQXJnIChGbGQpOwogICAgICAgTG93X0xldmVsIDogY29uc3RhbnQgQ19GaWVsZF9UeXBlIDo9IEdldF9GaWVsZHR5cGUgKEZsZCk7CiAgICAgICBBcmcgOiBBcmd1bWVudF9BY2Nlc3M7Ci0gICAgICBSZXMgOiBFdGlfRXJyb3I7CiAgICAgICBmdW5jdGlvbiBTZXRfRmxkX1R5cGUgKEYgICAgOiBGaWVsZCA6PSBGbGQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENmICAgOiBDX0ZpZWxkX1R5cGUgOj0gQ2Z0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcxIDogQXJndW1lbnRfQWNjZXNzKSByZXR1cm4gQ19JbnQ7Ci0gICAgICBwcmFnbWEgSW1wb3J0IChDLCBTZXRfRmxkX1R5cGUsICJzZXRfZmllbGRfdHlwZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcxIDogQXJndW1lbnRfQWNjZXNzKSByZXR1cm4gRXRpX0Vycm9yOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X0ZsZF9UeXBlLCAic2V0X2ZpZWxkX3R5cGVfdXNlciIpOwogCiAgICBiZWdpbgogICAgICAgcHJhZ21hIEFzc2VydCAoTG93X0xldmVsIC89IE51bGxfRmllbGRfVHlwZSk7CkBAIC0xNjIsNzEgKzE0NSw3MiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwID0+IG5ldyBGaWVsZF9UeXBlJ0NsYXNzJyhUeXApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2Z0ID0+IEdldF9GaWVsZHR5cGUgKEZsZCkpOwogICAgICAgICAgaWYgVXNyX0FyZyAvPSBTeXN0ZW0uTnVsbF9BZGRyZXNzIHRoZW4KLSAgICAgICAgICAgIGlmIExvd19MZXZlbC5Db3B5YXJnIC89IG51bGwgdGhlbgotICAgICAgICAgICAgICAgQXJnLlVzciA6PSBMb3dfTGV2ZWwuQ29weWFyZyAoVXNyX0FyZyk7CisgICAgICAgICAgICBpZiBMb3dfTGV2ZWwuYWxsLkNvcHlhcmcgLz0gbnVsbCB0aGVuCisgICAgICAgICAgICAgICBBcmcuYWxsLlVzciA6PSBMb3dfTGV2ZWwuYWxsLkNvcHlhcmcgKFVzcl9BcmcpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgQXJnLlVzciA6PSBVc3JfQXJnOworICAgICAgICAgICAgICAgQXJnLmFsbC5Vc3IgOj0gVXNyX0FyZzsKICAgICAgICAgICAgIGVuZCBpZjsKICAgICAgICAgIGVuZCBpZjsKIAotICAgICAgICAgUmVzIDo9IFNldF9GbGRfVHlwZSAoQXJnMSA9PiBBcmcpOwotICAgICAgICAgaWYgUmVzIC89IEVfT2sgdGhlbgotICAgICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKLSAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgIEV0aV9FeGNlcHRpb24gKFNldF9GbGRfVHlwZSAoQXJnMSA9PiBBcmcpKTsKICAgICAgIGVuZCBpZjsKICAgIGVuZCBXcmFwX0J1aWx0aW47CiAKICAgIGZ1bmN0aW9uIEZpZWxkX0NoZWNrX1JvdXRlciAoRmxkIDogRmllbGQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzciA6IFN5c3RlbS5BZGRyZXNzKSByZXR1cm4gQ19JbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNyIDogU3lzdGVtLkFkZHJlc3MpIHJldHVybiBDdXJzZXNfQm9vbAogICAgaXMKLSAgICAgIEFyZyAgOiBjb25zdGFudCBBcmd1bWVudF9BY2Nlc3MgOj0gVG9fQXJndW1lbnRfQWNjZXNzIChVc3IpOworICAgICAgQXJnICA6IGNvbnN0YW50IEFyZ3VtZW50X0FjY2VzcworICAgOj0gQXJndW1lbnRfQWNjZXNzIChBcmd1bWVudF9Db252ZXJzaW9ucy5Ub19Qb2ludGVyIChVc3IpKTsKICAgIGJlZ2luCi0gICAgICBwcmFnbWEgQXNzZXJ0IChBcmcgLz0gbnVsbCBhbmQgdGhlbiBBcmcuQ2Z0IC89IE51bGxfRmllbGRfVHlwZQotICAgICAgICAgICAgICAgICAgICAgYW5kIHRoZW4gQXJnLlR5cCAvPSBudWxsKTsKLSAgICAgIGlmIEFyZy5DZnQuRmNoZWNrIC89IG51bGwgdGhlbgotICAgICAgICAgcmV0dXJuIEFyZy5DZnQuRmNoZWNrIChGbGQsIEFyZy5Vc3IpOworICAgICAgcHJhZ21hIEFzc2VydCAoQXJnIC89IG51bGwgYW5kIHRoZW4gQXJnLmFsbC5DZnQgLz0gTnVsbF9GaWVsZF9UeXBlCisgICAgICAgICAgICAgICAgICAgICBhbmQgdGhlbiBBcmcuYWxsLlR5cCAvPSBudWxsKTsKKyAgICAgIGlmIEFyZy5hbGwuQ2Z0LmFsbC5GY2hlY2sgLz0gbnVsbCB0aGVuCisgICAgICAgICByZXR1cm4gQXJnLmFsbC5DZnQuYWxsLkZjaGVjayAoRmxkLCBBcmcuYWxsLlVzcik7CiAgICAgICBlbHNlCiAgICAgICAgICByZXR1cm4gMTsKICAgICAgIGVuZCBpZjsKICAgIGVuZCBGaWVsZF9DaGVja19Sb3V0ZXI7CiAKICAgIGZ1bmN0aW9uIENoYXJfQ2hlY2tfUm91dGVyIChDaCAgOiBDX0ludDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc3IgOiBTeXN0ZW0uQWRkcmVzcykgcmV0dXJuIENfSW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNyIDogU3lzdGVtLkFkZHJlc3MpIHJldHVybiBDdXJzZXNfQm9vbAogICAgaXMKLSAgICAgIEFyZyAgOiBjb25zdGFudCBBcmd1bWVudF9BY2Nlc3MgOj0gVG9fQXJndW1lbnRfQWNjZXNzIChVc3IpOworICAgICAgQXJnICA6IGNvbnN0YW50IEFyZ3VtZW50X0FjY2VzcworICAgOj0gQXJndW1lbnRfQWNjZXNzIChBcmd1bWVudF9Db252ZXJzaW9ucy5Ub19Qb2ludGVyIChVc3IpKTsKICAgIGJlZ2luCi0gICAgICBwcmFnbWEgQXNzZXJ0IChBcmcgLz0gbnVsbCBhbmQgdGhlbiBBcmcuQ2Z0IC89IE51bGxfRmllbGRfVHlwZQotICAgICAgICAgICAgICAgICAgICAgYW5kIHRoZW4gQXJnLlR5cCAvPSBudWxsKTsKLSAgICAgIGlmIEFyZy5DZnQuQ2NoZWNrIC89IG51bGwgdGhlbgotICAgICAgICAgcmV0dXJuIEFyZy5DZnQuQ2NoZWNrIChDaCwgQXJnLlVzcik7CisgICAgICBwcmFnbWEgQXNzZXJ0IChBcmcgLz0gbnVsbCBhbmQgdGhlbiBBcmcuYWxsLkNmdCAvPSBOdWxsX0ZpZWxkX1R5cGUKKyAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGVuIEFyZy5hbGwuVHlwIC89IG51bGwpOworICAgICAgaWYgQXJnLmFsbC5DZnQuYWxsLkNjaGVjayAvPSBudWxsIHRoZW4KKyAgICAgICAgIHJldHVybiBBcmcuYWxsLkNmdC5hbGwuQ2NoZWNrIChDaCwgQXJnLmFsbC5Vc3IpOwogICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIDE7CiAgICAgICBlbmQgaWY7CiAgICBlbmQgQ2hhcl9DaGVja19Sb3V0ZXI7CiAKICAgIGZ1bmN0aW9uIE5leHRfUm91dGVyIChGbGQgOiBGaWVsZDsKLSAgICAgICAgICAgICAgICAgICAgICAgICBVc3IgOiBTeXN0ZW0uQWRkcmVzcykgcmV0dXJuIENfSW50CisgICAgICAgICAgICAgICAgICAgICAgICAgVXNyIDogU3lzdGVtLkFkZHJlc3MpIHJldHVybiBDdXJzZXNfQm9vbAogICAgaXMKLSAgICAgIEFyZyAgOiBjb25zdGFudCBBcmd1bWVudF9BY2Nlc3MgOj0gVG9fQXJndW1lbnRfQWNjZXNzIChVc3IpOworICAgICAgQXJnICA6IGNvbnN0YW50IEFyZ3VtZW50X0FjY2VzcworICAgOj0gQXJndW1lbnRfQWNjZXNzIChBcmd1bWVudF9Db252ZXJzaW9ucy5Ub19Qb2ludGVyIChVc3IpKTsKICAgIGJlZ2luCi0gICAgICBwcmFnbWEgQXNzZXJ0IChBcmcgLz0gbnVsbCBhbmQgdGhlbiBBcmcuQ2Z0IC89IE51bGxfRmllbGRfVHlwZQotICAgICAgICAgICAgICAgICAgICAgYW5kIHRoZW4gQXJnLlR5cCAvPSBudWxsKTsKLSAgICAgIGlmIEFyZy5DZnQuTmV4dCAvPSBudWxsIHRoZW4KLSAgICAgICAgIHJldHVybiBBcmcuQ2Z0Lk5leHQgKEZsZCwgQXJnLlVzcik7CisgICAgICBwcmFnbWEgQXNzZXJ0IChBcmcgLz0gbnVsbCBhbmQgdGhlbiBBcmcuYWxsLkNmdCAvPSBOdWxsX0ZpZWxkX1R5cGUKKyAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGVuIEFyZy5hbGwuVHlwIC89IG51bGwpOworICAgICAgaWYgQXJnLmFsbC5DZnQuYWxsLk5leHQgLz0gbnVsbCB0aGVuCisgICAgICAgICByZXR1cm4gQXJnLmFsbC5DZnQuYWxsLk5leHQgKEZsZCwgQXJnLmFsbC5Vc3IpOwogICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIDE7CiAgICAgICBlbmQgaWY7CiAgICBlbmQgTmV4dF9Sb3V0ZXI7CiAKICAgIGZ1bmN0aW9uIFByZXZfUm91dGVyIChGbGQgOiBGaWVsZDsKLSAgICAgICAgICAgICAgICAgICAgICAgICBVc3IgOiBTeXN0ZW0uQWRkcmVzcykgcmV0dXJuIENfSW50CisgICAgICAgICAgICAgICAgICAgICAgICAgVXNyIDogU3lzdGVtLkFkZHJlc3MpIHJldHVybiBDdXJzZXNfQm9vbAogICAgaXMKLSAgICAgIEFyZyAgOiBjb25zdGFudCBBcmd1bWVudF9BY2Nlc3MgOj0gVG9fQXJndW1lbnRfQWNjZXNzIChVc3IpOworICAgICAgQXJnICA6IGNvbnN0YW50IEFyZ3VtZW50X0FjY2VzcyA6PQorICAgICAgICAgICAgICAgQXJndW1lbnRfQWNjZXNzIChBcmd1bWVudF9Db252ZXJzaW9ucy5Ub19Qb2ludGVyIChVc3IpKTsKICAgIGJlZ2luCi0gICAgICBwcmFnbWEgQXNzZXJ0IChBcmcgLz0gbnVsbCBhbmQgdGhlbiBBcmcuQ2Z0IC89IE51bGxfRmllbGRfVHlwZQotICAgICAgICAgICAgICAgICAgICAgYW5kIHRoZW4gQXJnLlR5cCAvPSBudWxsKTsKLSAgICAgIGlmIEFyZy5DZnQuUHJldiAvPSBudWxsIHRoZW4KLSAgICAgICAgIHJldHVybiBBcmcuQ2Z0LlByZXYgKEZsZCwgQXJnLlVzcik7CisgICAgICBwcmFnbWEgQXNzZXJ0IChBcmcgLz0gbnVsbCBhbmQgdGhlbiBBcmcuYWxsLkNmdCAvPSBOdWxsX0ZpZWxkX1R5cGUKKyAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGVuIEFyZy5hbGwuVHlwIC89IG51bGwpOworICAgICAgaWYgQXJnLmFsbC5DZnQuYWxsLlByZXYgLz0gbnVsbCB0aGVuCisgICAgICAgICByZXR1cm4gQXJnLmFsbC5DZnQuYWxsLlByZXYgKEZsZCwgQXJnLmFsbC5Vc3IpOwogICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIDE7CiAgICAgICBlbmQgaWY7CkBAIC0yMzYsNyArMjIwLDYgQEAKICAgIC0tCiAgICBmdW5jdGlvbiBDX0J1aWx0aW5fUm91dGVyIHJldHVybiBDX0ZpZWxkX1R5cGUKICAgIGlzCi0gICAgICBSZXMgOiBFdGlfRXJyb3I7CiAgICAgICBUICAgOiBDX0ZpZWxkX1R5cGU7CiAgICBiZWdpbgogICAgICAgaWYgTV9CdWlsdGluX1JvdXRlciA9IE51bGxfRmllbGRfVHlwZSB0aGVuCkBAIC0yNDUsMTMgKzIyOCwxMCBAQAogICAgICAgICAgaWYgVCA9IE51bGxfRmllbGRfVHlwZSB0aGVuCiAgICAgICAgICAgICByYWlzZSBGb3JtX0V4Y2VwdGlvbjsKICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIFJlcyA6PSBTZXRfRmllbGR0eXBlX0FyZyAoVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFrZV9BcmcnQWNjZXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3B5X0FyZydBY2Nlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyZWVfQXJnJ0FjY2Vzcyk7Ci0gICAgICAgICAgICBpZiBSZXMgLz0gRV9PayB0aGVuCi0gICAgICAgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOwotICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoU2V0X0ZpZWxkdHlwZV9BcmcgKFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFrZV9BcmcnQWNjZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcHlfQXJnJ0FjY2VzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcmVlX0FyZydBY2Nlc3MpKTsKICAgICAgICAgIGVuZCBpZjsKICAgICAgICAgIE1fQnVpbHRpbl9Sb3V0ZXIgOj0gVDsKICAgICAgIGVuZCBpZjsKQEAgLTI2Myw3ICsyNDMsNiBAQAogICAgLS0KICAgIGZ1bmN0aW9uIENfQ2hvaWNlX1JvdXRlciByZXR1cm4gQ19GaWVsZF9UeXBlCiAgICBpcwotICAgICAgUmVzIDogRXRpX0Vycm9yOwogICAgICAgVCAgIDogQ19GaWVsZF9UeXBlOwogICAgYmVnaW4KICAgICAgIGlmIE1fQ2hvaWNlX1JvdXRlciA9IE51bGxfRmllbGRfVHlwZSB0aGVuCkBAIC0yNzIsMjAgKzI1MSwxNCBAQAogICAgICAgICAgaWYgVCA9IE51bGxfRmllbGRfVHlwZSB0aGVuCiAgICAgICAgICAgICByYWlzZSBGb3JtX0V4Y2VwdGlvbjsKICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIFJlcyA6PSBTZXRfRmllbGR0eXBlX0FyZyAoVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFrZV9BcmcnQWNjZXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3B5X0FyZydBY2Nlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyZWVfQXJnJ0FjY2Vzcyk7Ci0gICAgICAgICAgICBpZiBSZXMgLz0gRV9PayB0aGVuCi0gICAgICAgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOwotICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoU2V0X0ZpZWxkdHlwZV9BcmcgKFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFrZV9BcmcnQWNjZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcHlfQXJnJ0FjY2VzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcmVlX0FyZydBY2Nlc3MpKTsKIAotICAgICAgICAgICAgUmVzIDo9IFNldF9GaWVsZHR5cGVfQ2hvaWNlIChULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXh0X1JvdXRlcidBY2Nlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByZXZfUm91dGVyJ0FjY2Vzcyk7Ci0gICAgICAgICAgICBpZiBSZXMgLz0gRV9PayB0aGVuCi0gICAgICAgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOwotICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoU2V0X0ZpZWxkdHlwZV9DaG9pY2UgKFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV4dF9Sb3V0ZXInQWNjZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByZXZfUm91dGVyJ0FjY2VzcykpOwogICAgICAgICAgZW5kIGlmOwogICAgICAgICAgTV9DaG9pY2VfUm91dGVyIDo9IFQ7CiAgICAgICBlbmQgaWY7CmRpZmYgLS1naXQgYS9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGEuYWRiIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhLmFkYgppbmRleCA4MTdlYmU1Li4yNDk3NjE0IDEwMDY0NAotLS0gYS9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGEuYWRiCisrKyBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YS5hZGIKQEAgLTcsNyArNyw3IEBACiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OC0yMDA5LDIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KIC0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQpAQCAtMzUsNyArMzUsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CiAtLSAgVmVyc2lvbiBDb250cm9sOgotLS0gICRSZXZpc2lvbjogMS4xMiAkCistLSAgJFJldmlzaW9uOiAxLjE1ICQKIC0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogd2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkF1eDsgdXNlICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkF1eDsKQEAgLTUxLDIzICs1MSwyMCBAQAogICAgLS0gIHwKICAgIHVzZSB0eXBlIEludGVyZmFjZXMuQy5pbnQ7CiAKLSAgIHByb2NlZHVyZSBTZXRfVXNlcl9EYXRhIChGbGQgIDogaW4gRmllbGQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA6IGluIFVzZXJfQWNjZXNzKQorICAgcHJvY2VkdXJlIFNldF9Vc2VyX0RhdGEgKEZsZCAgOiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhIDogVXNlcl9BY2Nlc3MpCiAgICBpcwogICAgICAgZnVuY3Rpb24gU2V0X0ZpZWxkX1VzZXJwdHIgKEZsZCA6IEZpZWxkOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzciA6IFVzZXJfQWNjZXNzKSByZXR1cm4gQ19JbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNyIDogVXNlcl9BY2Nlc3MpIHJldHVybiBFdGlfRXJyb3I7CiAgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTZXRfRmllbGRfVXNlcnB0ciwgInNldF9maWVsZF91c2VycHRyIik7CiAKLSAgICAgIFJlcyA6IGNvbnN0YW50IEV0aV9FcnJvciA6PSBTZXRfRmllbGRfVXNlcnB0ciAoRmxkLCBEYXRhKTsKICAgIGJlZ2luCi0gICAgICBpZiBSZXMgLz0gRV9PayB0aGVuCi0gICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOwotICAgICAgZW5kIGlmOworICAgICAgRXRpX0V4Y2VwdGlvbiAoU2V0X0ZpZWxkX1VzZXJwdHIgKEZsZCwgRGF0YSkpOwogICAgZW5kIFNldF9Vc2VyX0RhdGE7CiAgICAtLSAgfAogICAgLS0gIHwKICAgIC0tICB8Ci0gICBmdW5jdGlvbiBHZXRfVXNlcl9EYXRhIChGbGQgIDogaW4gIEZpZWxkKSByZXR1cm4gVXNlcl9BY2Nlc3MKKyAgIGZ1bmN0aW9uIEdldF9Vc2VyX0RhdGEgKEZsZCAgOiBGaWVsZCkgcmV0dXJuIFVzZXJfQWNjZXNzCiAgICBpcwogICAgICAgZnVuY3Rpb24gRmllbGRfVXNlcnB0ciAoRmxkIDogRmllbGQpIHJldHVybiBVc2VyX0FjY2VzczsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEZpZWxkX1VzZXJwdHIsICJmaWVsZF91c2VycHRyIik7CkBAIC03NSw3ICs3Miw3IEBACiAgICAgICByZXR1cm4gRmllbGRfVXNlcnB0ciAoRmxkKTsKICAgIGVuZCBHZXRfVXNlcl9EYXRhOwogCi0gICBwcm9jZWR1cmUgR2V0X1VzZXJfRGF0YSAoRmxkICA6IGluICBGaWVsZDsKKyAgIHByb2NlZHVyZSBHZXRfVXNlcl9EYXRhIChGbGQgIDogRmllbGQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA6IG91dCBVc2VyX0FjY2VzcykKICAgIGlzCiAgICBiZWdpbgpkaWZmIC0tZ2l0IGEvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGEuYWRiIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGEuYWRiCmluZGV4IDUwYzY3MDguLmE4Yjc0NjQgMTAwNjQ0Ci0tLSBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhLmFkYgorKysgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1mb3JtX3VzZXJfZGF0YS5hZGIKQEAgLTcsNyArNyw3IEBACiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OC0yMDA5LDIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KIC0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQpAQCAtMzUsNyArMzUsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CiAtLSAgVmVyc2lvbiBDb250cm9sOgotLS0gICRSZXZpc2lvbjogMS4xMiAkCistLSAgJFJldmlzaW9uOiAxLjE1ICQKIC0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLS0gIHwKQEAgLTUyLDIzICs1MiwyMCBAQAogICAgLS0gIHwKICAgIC0tICB8CiAgICAtLSAgfAotICAgcHJvY2VkdXJlIFNldF9Vc2VyX0RhdGEgKEZybSAgOiBpbiBGb3JtOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgOiBpbiBVc2VyX0FjY2VzcykKKyAgIHByb2NlZHVyZSBTZXRfVXNlcl9EYXRhIChGcm0gIDogRm9ybTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhIDogVXNlcl9BY2Nlc3MpCiAgICBpcwogICAgICAgZnVuY3Rpb24gU2V0X0Zvcm1fVXNlcnB0ciAoRnJtICA6IEZvcm07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhIDogVXNlcl9BY2Nlc3MpICByZXR1cm4gQ19JbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhIDogVXNlcl9BY2Nlc3MpICByZXR1cm4gRXRpX0Vycm9yOwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X0Zvcm1fVXNlcnB0ciwgInNldF9mb3JtX3VzZXJwdHIiKTsKIAotICAgICAgUmVzIDogY29uc3RhbnQgRXRpX0Vycm9yIDo9IFNldF9Gb3JtX1VzZXJwdHIgKEZybSwgRGF0YSk7CiAgICBiZWdpbgotICAgICAgaWYgIFJlcyAvPSBFX09rIHRoZW4KLSAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7Ci0gICAgICBlbmQgaWY7CisgICAgICBFdGlfRXhjZXB0aW9uIChTZXRfRm9ybV9Vc2VycHRyIChGcm0sIERhdGEpKTsKICAgIGVuZCBTZXRfVXNlcl9EYXRhOwogICAgLS0gIHwKICAgIC0tICB8CiAgICAtLSAgfAotICAgZnVuY3Rpb24gR2V0X1VzZXJfRGF0YSAoRnJtICA6IGluICBGb3JtKSByZXR1cm4gVXNlcl9BY2Nlc3MKKyAgIGZ1bmN0aW9uIEdldF9Vc2VyX0RhdGEgKEZybSAgOiBGb3JtKSByZXR1cm4gVXNlcl9BY2Nlc3MKICAgIGlzCiAgICAgICBmdW5jdGlvbiBGb3JtX1VzZXJwdHIgKEZybSA6IEZvcm0pIHJldHVybiBVc2VyX0FjY2VzczsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEZvcm1fVXNlcnB0ciwgImZvcm1fdXNlcnB0ciIpOwpAQCAtNzYsNyArNzMsNyBAQAogICAgICAgcmV0dXJuIEZvcm1fVXNlcnB0ciAoRnJtKTsKICAgIGVuZCBHZXRfVXNlcl9EYXRhOwogCi0gICBwcm9jZWR1cmUgR2V0X1VzZXJfRGF0YSAoRnJtICA6IGluICBGb3JtOworICAgcHJvY2VkdXJlIEdldF9Vc2VyX0RhdGEgKEZybSAgOiBGb3JtOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgOiBvdXQgVXNlcl9BY2Nlc3MpCiAgICBpcwogICAgYmVnaW4KZGlmZiAtLWdpdCBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLmFkYiBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLmFkYgppbmRleCA4YjAxZTE2Li4zZWQwNTNhIDEwMDY0NAotLS0gYS9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy5hZGIKKysrIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMuYWRiCkBAIC03LDcgKzcsNyBAQAogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDQsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAxMSwyMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCiAtLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KQEAgLTM1LDEyICszNSwxMSBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CiAtLSAgVmVyc2lvbiBDb250cm9sOgotLS0gICRSZXZpc2lvbjogMS4yNiAkCi0tLSAgJERhdGU6IDIwMDgvMDcvMjYgMTg6NTA6NDQgJAorLS0gICRSZXZpc2lvbjogMS4zMiAkCistLSAgJERhdGU6IDIwMTQvMDUvMjQgMjE6MzE6MDUgJAogLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB3aXRoIEFkYS5VbmNoZWNrZWRfRGVhbGxvY2F0aW9uOwotd2l0aCBBZGEuVW5jaGVja2VkX0NvbnZlcnNpb247CiAKIHdpdGggSW50ZXJmYWNlcy5DOyB1c2UgSW50ZXJmYWNlcy5DOwogd2l0aCBJbnRlcmZhY2VzLkMuU3RyaW5nczsgdXNlIEludGVyZmFjZXMuQy5TdHJpbmdzOwpAQCAtNjIsMjMgKzYxLDcgQEAKICAgIC0tICB8CiAgICAtLSAgc3VidHlwZSBjaGFyc19wdHIgaXMgSW50ZXJmYWNlcy5DLlN0cmluZ3MuY2hhcnNfcHRyOwogCi0gICBmdW5jdGlvbiBGT1NfMl9DSW50IGlzIG5ldwotICAgICBBZGEuVW5jaGVja2VkX0NvbnZlcnNpb24gKEZpZWxkX09wdGlvbl9TZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ19JbnQpOwotCi0gICBmdW5jdGlvbiBDSW50XzJfRk9TIGlzIG5ldwotICAgICBBZGEuVW5jaGVja2VkX0NvbnZlcnNpb24gKENfSW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpZWxkX09wdGlvbl9TZXQpOwotCi0gICBmdW5jdGlvbiBGcm1PU18yX0NJbnQgaXMgbmV3Ci0gICAgIEFkYS5VbmNoZWNrZWRfQ29udmVyc2lvbiAoRm9ybV9PcHRpb25fU2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENfSW50KTsKLQotICAgZnVuY3Rpb24gQ0ludF8yX0ZybU9TIGlzIG5ldwotICAgICBBZGEuVW5jaGVja2VkX0NvbnZlcnNpb24gKENfSW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvcm1fT3B0aW9uX1NldCk7Ci0KLSAgIHByb2NlZHVyZSBSZXF1ZXN0X05hbWUgKEtleSAgOiBpbiBGb3JtX1JlcXVlc3RfQ29kZTsKKyAgIHByb2NlZHVyZSBSZXF1ZXN0X05hbWUgKEtleSAgOiBGb3JtX1JlcXVlc3RfQ29kZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA6IG91dCBTdHJpbmcpCiAgICBpcwogICAgICAgZnVuY3Rpb24gRm9ybV9SZXF1ZXN0X05hbWUgKEtleSA6IENfSW50KSByZXR1cm4gY2hhcnNfcHRyOwpAQCAtMTMwLDE1ICsxMTMsMTEgQEAKIC0tICB8CiAgICBwcm9jZWR1cmUgRGVsZXRlIChGbGQgOiBpbiBvdXQgRmllbGQpCiAgICBpcwotICAgICAgZnVuY3Rpb24gRnJlZV9GaWVsZCAoRmxkIDogRmllbGQpIHJldHVybiBDX0ludDsKKyAgICAgIGZ1bmN0aW9uIEZyZWVfRmllbGQgKEZsZCA6IEZpZWxkKSByZXR1cm4gRXRpX0Vycm9yOwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgRnJlZV9GaWVsZCwgImZyZWVfZmllbGQiKTsKIAotICAgICAgUmVzIDogRXRpX0Vycm9yOwogICAgYmVnaW4KLSAgICAgIFJlcyA6PSBGcmVlX0ZpZWxkIChGbGQpOwotICAgICAgaWYgUmVzIC89IEVfT2sgdGhlbgotICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKLSAgICAgIGVuZCBpZjsKKyAgICAgIEV0aV9FeGNlcHRpb24gKEZyZWVfRmllbGQgKEZsZCkpOwogICAgICAgRmxkIDo9IE51bGxfRmllbGQ7CiAgICBlbmQgRGVsZXRlOwogICAgLS0gIHwKQEAgLTE5MCwyMCArMTY5LDE2IEBACiAgICAtLSAgfAogICAgLS0gIHwKICAgIC0tICB8Ci0gICBwcm9jZWR1cmUgU2V0X0p1c3RpZmljYXRpb24gKEZsZCAgOiBpbiBGaWVsZDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSnVzdCA6IGluIEZpZWxkX0p1c3RpZmljYXRpb24gOj0gTm9uZSkKKyAgIHByb2NlZHVyZSBTZXRfSnVzdGlmaWNhdGlvbiAoRmxkICA6IEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKdXN0IDogRmllbGRfSnVzdGlmaWNhdGlvbiA6PSBOb25lKQogICAgaXMKICAgICAgIGZ1bmN0aW9uIFNldF9GaWVsZF9KdXN0IChGbGQgIDogRmllbGQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSnVzdCA6IENfSW50KSByZXR1cm4gQ19JbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSnVzdCA6IENfSW50KSByZXR1cm4gRXRpX0Vycm9yOwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X0ZpZWxkX0p1c3QsICJzZXRfZmllbGRfanVzdCIpOwogCi0gICAgICBSZXMgOiBjb25zdGFudCBFdGlfRXJyb3IgOj0KLSAgICAgICAgU2V0X0ZpZWxkX0p1c3QgKEZsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIENfSW50IChGaWVsZF9KdXN0aWZpY2F0aW9uJ1BvcyAoSnVzdCkpKTsKICAgIGJlZ2luCi0gICAgICBpZiBSZXMgLz0gRV9PayB0aGVuCi0gICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOwotICAgICAgZW5kIGlmOworICAgICAgRXRpX0V4Y2VwdGlvbiAoU2V0X0ZpZWxkX0p1c3QgKEZsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDX0ludCAoRmllbGRfSnVzdGlmaWNhdGlvbidQb3MgKEp1c3QpKSkpOwogICAgZW5kIFNldF9KdXN0aWZpY2F0aW9uOwogICAgLS0gIHwKICAgIC0tICB8CkBAIC0yMjMsMzMgKzE5OCwyNSBAQAogICAgLS0gIHwKICAgIC0tICB8CiAgICBwcm9jZWR1cmUgU2V0X0J1ZmZlcgotICAgICAoRmxkICAgIDogaW4gRmllbGQ7Ci0gICAgICBCdWZmZXIgOiBpbiBCdWZmZXJfTnVtYmVyIDo9IEJ1ZmZlcl9OdW1iZXInRmlyc3Q7Ci0gICAgICBTdHIgICAgOiBpbiBTdHJpbmcpCisgICAgIChGbGQgICAgOiBGaWVsZDsKKyAgICAgIEJ1ZmZlciA6IEJ1ZmZlcl9OdW1iZXIgOj0gQnVmZmVyX051bWJlcidGaXJzdDsKKyAgICAgIFN0ciAgICA6IFN0cmluZykKICAgIGlzCi0gICAgICB0eXBlIENoYXJfUHRyIGlzIGFjY2VzcyBhbGwgSW50ZXJmYWNlcy5DLmNoYXI7CiAgICAgICBmdW5jdGlvbiBTZXRfRmxkX0J1ZmZlciAoRmxkICAgIDogRmllbGQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWZudW0gOiBDX0ludDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgICAgICA6IENoYXJfUHRyKQotICAgICAgICByZXR1cm4gQ19JbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTICAgICAgOiBjaGFyX2FycmF5KQorICAgICAgICByZXR1cm4gRXRpX0Vycm9yOwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X0ZsZF9CdWZmZXIsICJzZXRfZmllbGRfYnVmZmVyIik7CiAKLSAgICAgIFR4dCA6IGNoYXJfYXJyYXkgKDAgLi4gU3RyJ0xlbmd0aCk7Ci0gICAgICBMZW4gOiBzaXplX3Q7Ci0gICAgICBSZXMgOiBFdGlfRXJyb3I7CiAgICBiZWdpbgotICAgICAgVG9fQyAoU3RyLCBUeHQsIExlbik7Ci0gICAgICBSZXMgOj0gU2V0X0ZsZF9CdWZmZXIgKEZsZCwgQ19JbnQgKEJ1ZmZlciksIFR4dCAoVHh0J0ZpcnN0KSdBY2Nlc3MpOwotICAgICAgaWYgUmVzIC89IEVfT2sgdGhlbgotICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKLSAgICAgIGVuZCBpZjsKKyAgICAgIEV0aV9FeGNlcHRpb24gKFNldF9GbGRfQnVmZmVyIChGbGQsIENfSW50IChCdWZmZXIpLCBUb19DIChTdHIpKSk7CiAgICBlbmQgU2V0X0J1ZmZlcjsKICAgIC0tICB8CiAgICAtLSAgfAogICAgLS0gIHwKICAgIHByb2NlZHVyZSBHZXRfQnVmZmVyCi0gICAgIChGbGQgICAgOiBpbiBGaWVsZDsKLSAgICAgIEJ1ZmZlciA6IGluIEJ1ZmZlcl9OdW1iZXIgOj0gQnVmZmVyX051bWJlcidGaXJzdDsKKyAgICAgKEZsZCAgICA6IEZpZWxkOworICAgICAgQnVmZmVyIDogQnVmZmVyX051bWJlciA6PSBCdWZmZXJfTnVtYmVyJ0ZpcnN0OwogICAgICAgU3RyICAgIDogb3V0IFN0cmluZykKICAgIGlzCiAgICAgICBmdW5jdGlvbiBGaWVsZF9CdWZmZXIgKEZsZCA6IEZpZWxkOwpAQCAtMjYwLDggKzIyNyw4IEBACiAgICBlbmQgR2V0X0J1ZmZlcjsKIAogICAgZnVuY3Rpb24gR2V0X0J1ZmZlcgotICAgICAoRmxkICAgIDogaW4gRmllbGQ7Ci0gICAgICBCdWZmZXIgOiBpbiBCdWZmZXJfTnVtYmVyIDo9IEJ1ZmZlcl9OdW1iZXInRmlyc3QpIHJldHVybiBTdHJpbmcKKyAgICAgKEZsZCAgICA6IEZpZWxkOworICAgICAgQnVmZmVyIDogQnVmZmVyX051bWJlciA6PSBCdWZmZXJfTnVtYmVyJ0ZpcnN0KSByZXR1cm4gU3RyaW5nCiAgICBpcwogICAgICAgZnVuY3Rpb24gRmllbGRfQnVmZmVyIChGbGQgOiBGaWVsZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiAgIDogQ19JbnQpIHJldHVybiBjaGFyc19wdHI7CkBAIC0yNzIsMTYgKzIzOSwxNSBAQAogICAgLS0gIHwKICAgIC0tICB8CiAgICAtLSAgfAotICAgcHJvY2VkdXJlIFNldF9TdGF0dXMgKEZsZCAgICA6IGluIEZpZWxkOwotICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1cyA6IGluIEJvb2xlYW4gOj0gVHJ1ZSkKKyAgIHByb2NlZHVyZSBTZXRfU3RhdHVzIChGbGQgICAgOiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXMgOiBCb29sZWFuIDo9IFRydWUpCiAgICBpcwogICAgICAgZnVuY3Rpb24gU2V0X0ZsZF9TdGF0dXMgKEZsZCA6IEZpZWxkOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0ICA6IENfSW50KSByZXR1cm4gQ19JbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3QgIDogQ19JbnQpIHJldHVybiBFdGlfRXJyb3I7CiAgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTZXRfRmxkX1N0YXR1cywgInNldF9maWVsZF9zdGF0dXMiKTsKIAotICAgICAgUmVzIDogY29uc3RhbnQgRXRpX0Vycm9yIDo9IFNldF9GbGRfU3RhdHVzIChGbGQsIEJvb2xlYW4nUG9zIChTdGF0dXMpKTsKICAgIGJlZ2luCi0gICAgICBpZiBSZXMgLz0gRV9PayB0aGVuCisgICAgICBpZiBTZXRfRmxkX1N0YXR1cyAoRmxkLCBCb29sZWFuJ1BvcyAoU3RhdHVzKSkgLz0gRV9PayB0aGVuCiAgICAgICAgICByYWlzZSBGb3JtX0V4Y2VwdGlvbjsKICAgICAgIGVuZCBpZjsKICAgIGVuZCBTZXRfU3RhdHVzOwpAQCAtMzA0LDE4ICsyNzAsMTUgQEAKICAgIC0tICB8CiAgICAtLSAgfAogICAgLS0gIHwKLSAgIHByb2NlZHVyZSBTZXRfTWF4aW11bV9TaXplIChGbGQgOiBpbiBGaWVsZDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXggOiBpbiBOYXR1cmFsIDo9IDApCisgICBwcm9jZWR1cmUgU2V0X01heGltdW1fU2l6ZSAoRmxkIDogRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF4IDogTmF0dXJhbCA6PSAwKQogICAgaXMKICAgICAgIGZ1bmN0aW9uIFNldF9GaWVsZF9NYXggKEZsZCA6IEZpZWxkOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTSAgIDogQ19JbnQpIHJldHVybiBDX0ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE0gICA6IENfSW50KSByZXR1cm4gRXRpX0Vycm9yOwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X0ZpZWxkX01heCwgInNldF9tYXhfZmllbGQiKTsKIAotICAgICAgUmVzIDogY29uc3RhbnQgRXRpX0Vycm9yIDo9IFNldF9GaWVsZF9NYXggKEZsZCwgQ19JbnQgKE1heCkpOwogICAgYmVnaW4KLSAgICAgIGlmIFJlcyAvPSBFX09rIHRoZW4KLSAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7Ci0gICAgICBlbmQgaWY7CisgICAgICBFdGlfRXhjZXB0aW9uIChTZXRfRmllbGRfTWF4IChGbGQsIENfSW50IChNYXgpKSk7CiAgICBlbmQgU2V0X01heGltdW1fU2l6ZTsKICAgIC0tICB8CiAgICAtLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMzI0LDU5ICsyODcsNDggQEAKICAgIC0tICB8CiAgICAtLSAgfAogICAgLS0gIHwKLSAgIHByb2NlZHVyZSBTZXRfT3B0aW9ucyAoRmxkICAgICA6IGluIEZpZWxkOwotICAgICAgICAgICAgICAgICAgICAgICAgICBPcHRpb25zIDogaW4gRmllbGRfT3B0aW9uX1NldCkKKyAgIHByb2NlZHVyZSBTZXRfT3B0aW9ucyAoRmxkICAgICA6IEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgICBPcHRpb25zIDogRmllbGRfT3B0aW9uX1NldCkKICAgIGlzCiAgICAgICBmdW5jdGlvbiBTZXRfRmllbGRfT3B0cyAoRmxkIDogRmllbGQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0IDogQ19JbnQpIHJldHVybiBDX0ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcHQgOiBGaWVsZF9PcHRpb25fU2V0KSByZXR1cm4gRXRpX0Vycm9yOwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X0ZpZWxkX09wdHMsICJzZXRfZmllbGRfb3B0cyIpOwogCi0gICAgICBPcHQgOiBjb25zdGFudCBDX0ludCA6PSBGT1NfMl9DSW50IChPcHRpb25zKTsKLSAgICAgIFJlcyA6IEV0aV9FcnJvcjsKICAgIGJlZ2luCi0gICAgICBSZXMgOj0gU2V0X0ZpZWxkX09wdHMgKEZsZCwgT3B0KTsKLSAgICAgIGlmIFJlcyAvPSBFX09rIHRoZW4KLSAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7Ci0gICAgICBlbmQgaWY7CisgICAgICBFdGlfRXhjZXB0aW9uIChTZXRfRmllbGRfT3B0cyAoRmxkLCBPcHRpb25zKSk7CiAgICBlbmQgU2V0X09wdGlvbnM7CiAgICAtLSAgfAogICAgLS0gIHwKICAgIC0tICB8Ci0gICBwcm9jZWR1cmUgU3dpdGNoX09wdGlvbnMgKEZsZCAgICAgOiBpbiBGaWVsZDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW9ucyA6IGluIEZpZWxkX09wdGlvbl9TZXQ7CisgICBwcm9jZWR1cmUgU3dpdGNoX09wdGlvbnMgKEZsZCAgICAgOiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW9ucyA6IEZpZWxkX09wdGlvbl9TZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9uICAgICAgOiBCb29sZWFuIDo9IFRydWUpCiAgICBpcwogICAgICAgZnVuY3Rpb24gRmllbGRfT3B0c19PbiAoRmxkIDogRmllbGQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcHQgOiBDX0ludCkgcmV0dXJuIENfSW50OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0IDogRmllbGRfT3B0aW9uX1NldCkgcmV0dXJuIEV0aV9FcnJvcjsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEZpZWxkX09wdHNfT24sICJmaWVsZF9vcHRzX29uIik7CiAgICAgICBmdW5jdGlvbiBGaWVsZF9PcHRzX09mZiAoRmxkIDogRmllbGQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0IDogQ19JbnQpIHJldHVybiBDX0ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcHQgOiBGaWVsZF9PcHRpb25fU2V0KSByZXR1cm4gRXRpX0Vycm9yOwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgRmllbGRfT3B0c19PZmYsICJmaWVsZF9vcHRzX29mZiIpOwogCi0gICAgICBFcnIgOiBFdGlfRXJyb3I7Ci0gICAgICBPcHQgOiBjb25zdGFudCBDX0ludCA6PSBGT1NfMl9DSW50IChPcHRpb25zKTsKICAgIGJlZ2luCiAgICAgICBpZiBPbiB0aGVuCi0gICAgICAgICBFcnIgOj0gRmllbGRfT3B0c19PbiAoRmxkLCBPcHQpOworICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoRmllbGRfT3B0c19PbiAoRmxkLCBPcHRpb25zKSk7CiAgICAgICBlbHNlCi0gICAgICAgICBFcnIgOj0gRmllbGRfT3B0c19PZmYgKEZsZCwgT3B0KTsKLSAgICAgIGVuZCBpZjsKLSAgICAgIGlmIEVyciAvPSBFX09rIHRoZW4KLSAgICAgICAgIEV0aV9FeGNlcHRpb24gKEVycik7CisgICAgICAgICBFdGlfRXhjZXB0aW9uIChGaWVsZF9PcHRzX09mZiAoRmxkLCBPcHRpb25zKSk7CiAgICAgICBlbmQgaWY7CiAgICBlbmQgU3dpdGNoX09wdGlvbnM7CiAgICAtLSAgfAogICAgLS0gIHwKICAgIC0tICB8Ci0gICBwcm9jZWR1cmUgR2V0X09wdGlvbnMgKEZsZCAgICAgOiBpbiAgRmllbGQ7CisgICBwcm9jZWR1cmUgR2V0X09wdGlvbnMgKEZsZCAgICAgOiBGaWVsZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW9ucyA6IG91dCBGaWVsZF9PcHRpb25fU2V0KQogICAgaXMKLSAgICAgIGZ1bmN0aW9uIEZpZWxkX09wdHMgKEZsZCA6IEZpZWxkKSByZXR1cm4gQ19JbnQ7CisgICAgICBmdW5jdGlvbiBGaWVsZF9PcHRzIChGbGQgOiBGaWVsZCkgcmV0dXJuIEZpZWxkX09wdGlvbl9TZXQ7CiAgICAgICBwcmFnbWEgSW1wb3J0IChDLCBGaWVsZF9PcHRzLCAiZmllbGRfb3B0cyIpOwogCi0gICAgICBSZXMgOiBjb25zdGFudCBDX0ludCA6PSBGaWVsZF9PcHRzIChGbGQpOwogICAgYmVnaW4KLSAgICAgIE9wdGlvbnMgOj0gQ0ludF8yX0ZPUyAoUmVzKTsKKyAgICAgIE9wdGlvbnMgOj0gRmllbGRfT3B0cyAoRmxkKTsKICAgIGVuZCBHZXRfT3B0aW9uczsKICAgIC0tICB8CiAgICAtLSAgfApAQCAtMzk3LDExMSArMzQ5LDk4IEBACiAgICAtLSAgfAogICAgLS0gIHwKICAgIHByb2NlZHVyZSBTZXRfRm9yZWdyb3VuZAotICAgICAoRmxkICAgOiBpbiBGaWVsZDsKLSAgICAgIEZvcmUgIDogaW4gQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQgOj0gTm9ybWFsX1ZpZGVvOwotICAgICAgQ29sb3IgOiBpbiBDb2xvcl9QYWlyIDo9IENvbG9yX1BhaXInRmlyc3QpCisgICAgIChGbGQgICA6IEZpZWxkOworICAgICAgRm9yZSAgOiBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldCA6PSBOb3JtYWxfVmlkZW87CisgICAgICBDb2xvciA6IENvbG9yX1BhaXIgOj0gQ29sb3JfUGFpcidGaXJzdCkKICAgIGlzCiAgICAgICBmdW5jdGlvbiBTZXRfRmllbGRfRm9yZSAoRmxkICA6IEZpZWxkOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHIgOiBDX0NodHlwZSkgcmV0dXJuIENfSW50OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHIgOiBBdHRyaWJ1dGVkX0NoYXJhY3RlcikgcmV0dXJuIEV0aV9FcnJvcjsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNldF9GaWVsZF9Gb3JlLCAic2V0X2ZpZWxkX2ZvcmUiKTsKIAotICAgICAgQ2ggOiBjb25zdGFudCBBdHRyaWJ1dGVkX0NoYXJhY3RlciA6PSAoQ2ggICAgPT4gQ2hhcmFjdGVyJ0ZpcnN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3IgPT4gQ29sb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRyICA9PiBGb3JlKTsKLSAgICAgIFJlcyA6IGNvbnN0YW50IEV0aV9FcnJvciA6PQotICAgICAgICBTZXRfRmllbGRfRm9yZSAoRmxkLCBBdHRyQ2hhcl9Ub19DaHR5cGUgKENoKSk7CiAgICBiZWdpbgotICAgICAgaWYgIFJlcyAvPSBFX09rIHRoZW4KLSAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7Ci0gICAgICBlbmQgaWY7CisgICAgICBFdGlfRXhjZXB0aW9uIChTZXRfRmllbGRfRm9yZSAoRmxkLCAoQ2ggICAgPT4gQ2hhcmFjdGVyJ0ZpcnN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yID0+IENvbG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHIgID0+IEZvcmUpKSk7CiAgICBlbmQgU2V0X0ZvcmVncm91bmQ7CiAgICAtLSAgfAogICAgLS0gIHwKICAgIC0tICB8Ci0gICBwcm9jZWR1cmUgRm9yZWdyb3VuZCAoRmxkICA6IGluICBGaWVsZDsKKyAgIHByb2NlZHVyZSBGb3JlZ3JvdW5kIChGbGQgIDogRmllbGQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yZSA6IG91dCBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldCkKICAgIGlzCi0gICAgICBmdW5jdGlvbiBGaWVsZF9Gb3JlIChGbGQgOiBGaWVsZCkgcmV0dXJuIENfQ2h0eXBlOworICAgICAgZnVuY3Rpb24gRmllbGRfRm9yZSAoRmxkIDogRmllbGQpIHJldHVybiBBdHRyaWJ1dGVkX0NoYXJhY3RlcjsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEZpZWxkX0ZvcmUsICJmaWVsZF9mb3JlIik7CiAgICBiZWdpbgotICAgICAgRm9yZSA6PSBDaHR5cGVfVG9fQXR0ckNoYXIgKEZpZWxkX0ZvcmUgKEZsZCkpLkF0dHI7CisgICAgICBGb3JlIDo9IEZpZWxkX0ZvcmUgKEZsZCkuQXR0cjsKICAgIGVuZCBGb3JlZ3JvdW5kOwogCi0gICBwcm9jZWR1cmUgRm9yZWdyb3VuZCAoRmxkICAgOiBpbiAgRmllbGQ7CisgICBwcm9jZWR1cmUgRm9yZWdyb3VuZCAoRmxkICAgOiBGaWVsZDsKICAgICAgICAgICAgICAgICAgICAgICAgICBGb3JlICA6IG91dCBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldDsKICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvciA6IG91dCBDb2xvcl9QYWlyKQogICAgaXMKLSAgICAgIGZ1bmN0aW9uIEZpZWxkX0ZvcmUgKEZsZCA6IEZpZWxkKSByZXR1cm4gQ19DaHR5cGU7CisgICAgICBmdW5jdGlvbiBGaWVsZF9Gb3JlIChGbGQgOiBGaWVsZCkgcmV0dXJuIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyOwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgRmllbGRfRm9yZSwgImZpZWxkX2ZvcmUiKTsKICAgIGJlZ2luCi0gICAgICBGb3JlICA6PSBDaHR5cGVfVG9fQXR0ckNoYXIgKEZpZWxkX0ZvcmUgKEZsZCkpLkF0dHI7Ci0gICAgICBDb2xvciA6PSBDaHR5cGVfVG9fQXR0ckNoYXIgKEZpZWxkX0ZvcmUgKEZsZCkpLkNvbG9yOworICAgICAgRm9yZSAgOj0gRmllbGRfRm9yZSAoRmxkKS5BdHRyOworICAgICAgQ29sb3IgOj0gRmllbGRfRm9yZSAoRmxkKS5Db2xvcjsKICAgIGVuZCBGb3JlZ3JvdW5kOwogICAgLS0gIHwKICAgIC0tICB8CiAgICAtLSAgfAogICAgcHJvY2VkdXJlIFNldF9CYWNrZ3JvdW5kCi0gICAgIChGbGQgICA6IGluIEZpZWxkOwotICAgICAgQmFjayAgOiBpbiBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldCA6PSBOb3JtYWxfVmlkZW87Ci0gICAgICBDb2xvciA6IGluIENvbG9yX1BhaXIgOj0gQ29sb3JfUGFpcidGaXJzdCkKKyAgICAgKEZsZCAgIDogRmllbGQ7CisgICAgICBCYWNrICA6IENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0IDo9IE5vcm1hbF9WaWRlbzsKKyAgICAgIENvbG9yIDogQ29sb3JfUGFpciA6PSBDb2xvcl9QYWlyJ0ZpcnN0KQogICAgaXMKICAgICAgIGZ1bmN0aW9uIFNldF9GaWVsZF9CYWNrIChGbGQgIDogRmllbGQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ciA6IENfQ2h0eXBlKSByZXR1cm4gQ19JbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ciA6IEF0dHJpYnV0ZWRfQ2hhcmFjdGVyKSByZXR1cm4gRXRpX0Vycm9yOwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X0ZpZWxkX0JhY2ssICJzZXRfZmllbGRfYmFjayIpOwogCi0gICAgICBDaCA6IGNvbnN0YW50IEF0dHJpYnV0ZWRfQ2hhcmFjdGVyIDo9IChDaCAgICA9PiBDaGFyYWN0ZXInRmlyc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvciA9PiBDb2xvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHIgID0+IEJhY2spOwotICAgICAgUmVzIDogY29uc3RhbnQgRXRpX0Vycm9yIDo9Ci0gICAgICAgIFNldF9GaWVsZF9CYWNrIChGbGQsIEF0dHJDaGFyX1RvX0NodHlwZSAoQ2gpKTsKICAgIGJlZ2luCi0gICAgICBpZiAgUmVzIC89IEVfT2sgdGhlbgotICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKLSAgICAgIGVuZCBpZjsKKyAgICAgIEV0aV9FeGNlcHRpb24gKFNldF9GaWVsZF9CYWNrIChGbGQsIChDaCAgICA9PiBDaGFyYWN0ZXInRmlyc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3IgPT4gQ29sb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ciAgPT4gQmFjaykpKTsKICAgIGVuZCBTZXRfQmFja2dyb3VuZDsKICAgIC0tICB8CiAgICAtLSAgfAogICAgLS0gIHwKLSAgIHByb2NlZHVyZSBCYWNrZ3JvdW5kIChGbGQgIDogaW4gIEZpZWxkOworICAgcHJvY2VkdXJlIEJhY2tncm91bmQgKEZsZCAgOiBGaWVsZDsKICAgICAgICAgICAgICAgICAgICAgICAgICBCYWNrIDogb3V0IENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0KQogICAgaXMKLSAgICAgIGZ1bmN0aW9uIEZpZWxkX0JhY2sgKEZsZCA6IEZpZWxkKSByZXR1cm4gQ19DaHR5cGU7CisgICAgICBmdW5jdGlvbiBGaWVsZF9CYWNrIChGbGQgOiBGaWVsZCkgcmV0dXJuIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyOwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgRmllbGRfQmFjaywgImZpZWxkX2JhY2siKTsKICAgIGJlZ2luCi0gICAgICBCYWNrIDo9IENodHlwZV9Ub19BdHRyQ2hhciAoRmllbGRfQmFjayAoRmxkKSkuQXR0cjsKKyAgICAgIEJhY2sgOj0gRmllbGRfQmFjayAoRmxkKS5BdHRyOwogICAgZW5kIEJhY2tncm91bmQ7CiAKLSAgIHByb2NlZHVyZSBCYWNrZ3JvdW5kIChGbGQgICA6IGluICBGaWVsZDsKKyAgIHByb2NlZHVyZSBCYWNrZ3JvdW5kIChGbGQgICA6IEZpZWxkOwogICAgICAgICAgICAgICAgICAgICAgICAgIEJhY2sgIDogb3V0IENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0OwogICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yIDogb3V0IENvbG9yX1BhaXIpCiAgICBpcwotICAgICAgZnVuY3Rpb24gRmllbGRfQmFjayAoRmxkIDogRmllbGQpIHJldHVybiBDX0NodHlwZTsKKyAgICAgIGZ1bmN0aW9uIEZpZWxkX0JhY2sgKEZsZCA6IEZpZWxkKSByZXR1cm4gQXR0cmlidXRlZF9DaGFyYWN0ZXI7CiAgICAgICBwcmFnbWEgSW1wb3J0IChDLCBGaWVsZF9CYWNrLCAiZmllbGRfYmFjayIpOwogICAgYmVnaW4KLSAgICAgIEJhY2sgIDo9IENodHlwZV9Ub19BdHRyQ2hhciAoRmllbGRfQmFjayAoRmxkKSkuQXR0cjsKLSAgICAgIENvbG9yIDo9IENodHlwZV9Ub19BdHRyQ2hhciAoRmllbGRfQmFjayAoRmxkKSkuQ29sb3I7CisgICAgICBCYWNrICA6PSBGaWVsZF9CYWNrIChGbGQpLkF0dHI7CisgICAgICBDb2xvciA6PSBGaWVsZF9CYWNrIChGbGQpLkNvbG9yOwogICAgZW5kIEJhY2tncm91bmQ7CiAgICAtLSAgfAogICAgLS0gIHwKICAgIC0tICB8Ci0gICBwcm9jZWR1cmUgU2V0X1BhZF9DaGFyYWN0ZXIgKEZsZCA6IGluIEZpZWxkOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWQgOiBpbiBDaGFyYWN0ZXIgOj0gU3BhY2UpCisgICBwcm9jZWR1cmUgU2V0X1BhZF9DaGFyYWN0ZXIgKEZsZCA6IEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWQgOiBDaGFyYWN0ZXIgOj0gU3BhY2UpCiAgICBpcwogICAgICAgZnVuY3Rpb24gU2V0X0ZpZWxkX1BhZCAoRmxkIDogRmllbGQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaCAgOiBDX0ludCkgcmV0dXJuIENfSW50OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2ggIDogQ19JbnQpIHJldHVybiBFdGlfRXJyb3I7CiAgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTZXRfRmllbGRfUGFkLCAic2V0X2ZpZWxkX3BhZCIpOwogCi0gICAgICBSZXMgOiBjb25zdGFudCBFdGlfRXJyb3IgOj0gU2V0X0ZpZWxkX1BhZCAoRmxkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENfSW50IChDaGFyYWN0ZXInUG9zIChQYWQpKSk7CiAgICBiZWdpbgotICAgICAgaWYgUmVzIC89IEVfT2sgdGhlbgotICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKLSAgICAgIGVuZCBpZjsKKyAgICAgIEV0aV9FeGNlcHRpb24gKFNldF9GaWVsZF9QYWQgKEZsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENfSW50IChDaGFyYWN0ZXInUG9zIChQYWQpKSkpOwogICAgZW5kIFNldF9QYWRfQ2hhcmFjdGVyOwogICAgLS0gIHwKICAgIC0tICB8CiAgICAtLSAgfAotICAgcHJvY2VkdXJlIFBhZF9DaGFyYWN0ZXIgKEZsZCA6IGluICBGaWVsZDsKKyAgIHByb2NlZHVyZSBQYWRfQ2hhcmFjdGVyIChGbGQgOiBGaWVsZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWQgOiBvdXQgQ2hhcmFjdGVyKQogICAgaXMKICAgICAgIGZ1bmN0aW9uIEZpZWxkX1BhZCAoRmxkIDogRmllbGQpIHJldHVybiBDX0ludDsKQEAgLTUxNiw3ICs0NTUsNyBAQAogICAgLS0gIHwKICAgIC0tICB8CiAgICAtLSAgfAotICAgcHJvY2VkdXJlIEluZm8gKEZsZCAgICAgICAgICAgICAgICA6IGluICBGaWVsZDsKKyAgIHByb2NlZHVyZSBJbmZvIChGbGQgICAgICAgICAgICAgICAgOiBGaWVsZDsKICAgICAgICAgICAgICAgICAgICBMaW5lcyAgICAgICAgICAgICAgOiBvdXQgTGluZV9Db3VudDsKICAgICAgICAgICAgICAgICAgICBDb2x1bW5zICAgICAgICAgICAgOiBvdXQgQ29sdW1uX0NvdW50OwogICAgICAgICAgICAgICAgICAgIEZpcnN0X1JvdyAgICAgICAgICA6IG91dCBMaW5lX1Bvc2l0aW9uOwpAQCAtNTI3LDUwICs0NjYsNDIgQEAKICAgICAgIHR5cGUgQ19JbnRfQWNjZXNzIGlzIGFjY2VzcyBhbGwgQ19JbnQ7CiAgICAgICBmdW5jdGlvbiBGbGRfSW5mbyAoRmxkIDogRmllbGQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgTCwgQywgRnIsIEZjLCBPcywgQWIgOiBDX0ludF9BY2Nlc3MpCi0gICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENfSW50OworICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFdGlfRXJyb3I7CiAgICAgICBwcmFnbWEgSW1wb3J0IChDLCBGbGRfSW5mbywgImZpZWxkX2luZm8iKTsKIAogICAgICAgTCwgQywgRnIsIEZjLCBPcywgQWIgOiBhbGlhc2VkIENfSW50OwotICAgICAgUmVzIDogY29uc3RhbnQgRXRpX0Vycm9yIDo9IEZsZF9JbmZvIChGbGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEwnQWNjZXNzLCBDJ0FjY2VzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnInQWNjZXNzLCBGYydBY2Nlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9zJ0FjY2VzcywgQWInQWNjZXNzKTsKICAgIGJlZ2luCi0gICAgICBpZiBSZXMgLz0gRV9PayB0aGVuCi0gICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOwotICAgICAgZWxzZQotICAgICAgICAgTGluZXMgICAgICAgICAgICAgIDo9IExpbmVfQ291bnQgKEwpOwotICAgICAgICAgQ29sdW1ucyAgICAgICAgICAgIDo9IENvbHVtbl9Db3VudCAoQyk7Ci0gICAgICAgICBGaXJzdF9Sb3cgICAgICAgICAgOj0gTGluZV9Qb3NpdGlvbiAoRnIpOwotICAgICAgICAgRmlyc3RfQ29sdW1uICAgICAgIDo9IENvbHVtbl9Qb3NpdGlvbiAoRmMpOwotICAgICAgICAgT2ZmX1NjcmVlbiAgICAgICAgIDo9IE5hdHVyYWwgKE9zKTsKLSAgICAgICAgIEFkZGl0aW9uYWxfQnVmZmVycyA6PSBCdWZmZXJfTnVtYmVyIChBYik7Ci0gICAgICBlbmQgaWY7CisgICAgICBFdGlfRXhjZXB0aW9uIChGbGRfSW5mbyAoRmxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEwnQWNjZXNzLCBDJ0FjY2VzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcidBY2Nlc3MsIEZjJ0FjY2VzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcydBY2Nlc3MsIEFiJ0FjY2VzcykpOworICAgICAgTGluZXMgICAgICAgICAgICAgIDo9IExpbmVfQ291bnQgKEwpOworICAgICAgQ29sdW1ucyAgICAgICAgICAgIDo9IENvbHVtbl9Db3VudCAoQyk7CisgICAgICBGaXJzdF9Sb3cgICAgICAgICAgOj0gTGluZV9Qb3NpdGlvbiAoRnIpOworICAgICAgRmlyc3RfQ29sdW1uICAgICAgIDo9IENvbHVtbl9Qb3NpdGlvbiAoRmMpOworICAgICAgT2ZmX1NjcmVlbiAgICAgICAgIDo9IE5hdHVyYWwgKE9zKTsKKyAgICAgIEFkZGl0aW9uYWxfQnVmZmVycyA6PSBCdWZmZXJfTnVtYmVyIChBYik7CiAgICBlbmQgSW5mbzsKIC0tICB8CiAtLSAgfAogLS0gIHwKLSAgIHByb2NlZHVyZSBEeW5hbWljX0luZm8gKEZsZCAgICAgOiBpbiBGaWVsZDsKKyAgIHByb2NlZHVyZSBEeW5hbWljX0luZm8gKEZsZCAgICAgOiBGaWVsZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpbmVzICAgOiBvdXQgTGluZV9Db3VudDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbHVtbnMgOiBvdXQgQ29sdW1uX0NvdW50OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF4ICAgICA6IG91dCBOYXR1cmFsKQogICAgaXMKICAgICAgIHR5cGUgQ19JbnRfQWNjZXNzIGlzIGFjY2VzcyBhbGwgQ19JbnQ7Ci0gICAgICBmdW5jdGlvbiBEeW5fSW5mbyAoRmxkIDogRmllbGQ7IEwsIEMsIE0gOiBDX0ludF9BY2Nlc3MpIHJldHVybiBDX0ludDsKKyAgICAgIGZ1bmN0aW9uIER5bl9JbmZvIChGbGQgOiBGaWVsZDsgTCwgQywgTSA6IENfSW50X0FjY2VzcykgcmV0dXJuIEV0aV9FcnJvcjsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIER5bl9JbmZvLCAiZHluYW1pY19maWVsZF9pbmZvIik7CiAKICAgICAgIEwsIEMsIE0gOiBhbGlhc2VkIENfSW50OwotICAgICAgUmVzIDogY29uc3RhbnQgRXRpX0Vycm9yIDo9IER5bl9JbmZvIChGbGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEwnQWNjZXNzLCBDJ0FjY2VzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTSdBY2Nlc3MpOwogICAgYmVnaW4KLSAgICAgIGlmIFJlcyAvPSBFX09rIHRoZW4KLSAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7Ci0gICAgICBlbHNlCi0gICAgICAgICBMaW5lcyAgIDo9IExpbmVfQ291bnQgKEwpOwotICAgICAgICAgQ29sdW1ucyA6PSBDb2x1bW5fQ291bnQgKEMpOwotICAgICAgICAgTWF4ICAgICA6PSBOYXR1cmFsIChNKTsKLSAgICAgIGVuZCBpZjsKKyAgICAgIEV0aV9FeGNlcHRpb24gKER5bl9JbmZvIChGbGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTCdBY2Nlc3MsIEMnQWNjZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE0nQWNjZXNzKSk7CisgICAgICBMaW5lcyAgIDo9IExpbmVfQ291bnQgKEwpOworICAgICAgQ29sdW1ucyA6PSBDb2x1bW5fQ291bnQgKEMpOworICAgICAgTWF4ICAgICA6PSBOYXR1cmFsIChNKTsKICAgIGVuZCBEeW5hbWljX0luZm87CiAgICAtLSAgfAogICAgLS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTU3OSwxOCArNTEwLDE1IEBACiAgICAtLSAgfAogICAgLS0gIHwKICAgIC0tICB8Ci0gICBwcm9jZWR1cmUgU2V0X1dpbmRvdyAoRnJtIDogaW4gRm9ybTsKLSAgICAgICAgICAgICAgICAgICAgICAgICBXaW4gOiBpbiBXaW5kb3cpCisgICBwcm9jZWR1cmUgU2V0X1dpbmRvdyAoRnJtIDogRm9ybTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBXaW4gOiBXaW5kb3cpCiAgICBpcwogICAgICAgZnVuY3Rpb24gU2V0X0Zvcm1fV2luIChGcm0gOiBGb3JtOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaW4gOiBXaW5kb3cpIHJldHVybiBDX0ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2luIDogV2luZG93KSByZXR1cm4gRXRpX0Vycm9yOwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X0Zvcm1fV2luLCAic2V0X2Zvcm1fd2luIik7CiAKLSAgICAgIFJlcyA6IGNvbnN0YW50IEV0aV9FcnJvciA6PSBTZXRfRm9ybV9XaW4gKEZybSwgV2luKTsKICAgIGJlZ2luCi0gICAgICBpZiAgUmVzIC89IEVfT2sgdGhlbgotICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKLSAgICAgIGVuZCBpZjsKKyAgICAgIEV0aV9FeGNlcHRpb24gKFNldF9Gb3JtX1dpbiAoRnJtLCBXaW4pKTsKICAgIGVuZCBTZXRfV2luZG93OwogICAgLS0gIHwKICAgIC0tICB8CkBAIC02MDcsMTggKzUzNSwxNSBAQAogICAgLS0gIHwKICAgIC0tICB8CiAgICAtLSAgfAotICAgcHJvY2VkdXJlIFNldF9TdWJfV2luZG93IChGcm0gOiBpbiBGb3JtOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaW4gOiBpbiBXaW5kb3cpCisgICBwcm9jZWR1cmUgU2V0X1N1Yl9XaW5kb3cgKEZybSA6IEZvcm07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpbiA6IFdpbmRvdykKICAgIGlzCiAgICAgICBmdW5jdGlvbiBTZXRfRm9ybV9TdWIgKEZybSA6IEZvcm07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpbiA6IFdpbmRvdykgcmV0dXJuIENfSW50OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaW4gOiBXaW5kb3cpIHJldHVybiBFdGlfRXJyb3I7CiAgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTZXRfRm9ybV9TdWIsICJzZXRfZm9ybV9zdWIiKTsKIAotICAgICAgUmVzIDogY29uc3RhbnQgRXRpX0Vycm9yIDo9IFNldF9Gb3JtX1N1YiAoRnJtLCBXaW4pOwogICAgYmVnaW4KLSAgICAgIGlmICBSZXMgLz0gRV9PayB0aGVuCi0gICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOwotICAgICAgZW5kIGlmOworICAgICAgRXRpX0V4Y2VwdGlvbiAoU2V0X0Zvcm1fU3ViIChGcm0sIFdpbikpOwogICAgZW5kIFNldF9TdWJfV2luZG93OwogICAgLS0gIHwKICAgIC0tICB8CkBAIC02MzUsMjEgKzU2MCwxOCBAQAogICAgLS0gIHwKICAgIC0tICB8CiAgICAtLSAgfAotICAgcHJvY2VkdXJlIFNjYWxlIChGcm0gICAgIDogaW4gRm9ybTsKKyAgIHByb2NlZHVyZSBTY2FsZSAoRnJtICAgICA6IEZvcm07CiAgICAgICAgICAgICAgICAgICAgIExpbmVzICAgOiBvdXQgTGluZV9Db3VudDsKICAgICAgICAgICAgICAgICAgICAgQ29sdW1ucyA6IG91dCBDb2x1bW5fQ291bnQpCiAgICBpcwogICAgICAgdHlwZSBDX0ludF9BY2Nlc3MgaXMgYWNjZXNzIGFsbCBDX0ludDsKLSAgICAgIGZ1bmN0aW9uIE1fU2NhbGUgKEZybSA6IEZvcm07IFlwLCBYcCA6IENfSW50X0FjY2VzcykgcmV0dXJuIENfSW50OworICAgICAgZnVuY3Rpb24gTV9TY2FsZSAoRnJtIDogRm9ybTsgWXAsIFhwIDogQ19JbnRfQWNjZXNzKSByZXR1cm4gRXRpX0Vycm9yOwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgTV9TY2FsZSwgInNjYWxlX2Zvcm0iKTsKIAogICAgICAgWCwgWSA6IGFsaWFzZWQgQ19JbnQ7Ci0gICAgICBSZXMgIDogY29uc3RhbnQgRXRpX0Vycm9yIDo9IE1fU2NhbGUgKEZybSwgWSdBY2Nlc3MsIFgnQWNjZXNzKTsKICAgIGJlZ2luCi0gICAgICBpZiBSZXMgLz0gRV9PayB0aGVuCi0gICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOwotICAgICAgZW5kIGlmOwotICAgICAgTGluZXMgOj0gTGluZV9Db3VudCAoWSk7CisgICAgICBFdGlfRXhjZXB0aW9uIChNX1NjYWxlIChGcm0sIFknQWNjZXNzLCBYJ0FjY2VzcykpOworICAgICAgTGluZXMgICA6PSBMaW5lX0NvdW50IChZKTsKICAgICAgIENvbHVtbnMgOj0gQ29sdW1uX0NvdW50IChYKTsKICAgIGVuZCBTY2FsZTsKICAgIC0tICB8CkBAIC02NTksNjYgKzU4MSw1NCBAQAogICAgLS0gIHwKICAgIC0tICB8CiAgICAtLSAgfAotICAgcHJvY2VkdXJlIFNldF9GaWVsZF9Jbml0X0hvb2sgKEZybSAgOiBpbiBGb3JtOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2MgOiBpbiBGb3JtX0hvb2tfRnVuY3Rpb24pCisgICBwcm9jZWR1cmUgU2V0X0ZpZWxkX0luaXRfSG9vayAoRnJtICA6IEZvcm07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYyA6IEZvcm1fSG9va19GdW5jdGlvbikKICAgIGlzCiAgICAgICBmdW5jdGlvbiBTZXRfRmllbGRfSW5pdCAoRnJtICA6IEZvcm07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYyA6IEZvcm1fSG9va19GdW5jdGlvbikgcmV0dXJuIENfSW50OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2MgOiBGb3JtX0hvb2tfRnVuY3Rpb24pIHJldHVybiBFdGlfRXJyb3I7CiAgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTZXRfRmllbGRfSW5pdCwgInNldF9maWVsZF9pbml0Iik7CiAKLSAgICAgIFJlcyA6IGNvbnN0YW50IEV0aV9FcnJvciA6PSBTZXRfRmllbGRfSW5pdCAoRnJtLCBQcm9jKTsKICAgIGJlZ2luCi0gICAgICBpZiAgUmVzIC89IEVfT2sgdGhlbgotICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKLSAgICAgIGVuZCBpZjsKKyAgICAgIEV0aV9FeGNlcHRpb24gKFNldF9GaWVsZF9Jbml0IChGcm0sIFByb2MpKTsKICAgIGVuZCBTZXRfRmllbGRfSW5pdF9Ib29rOwogICAgLS0gIHwKICAgIC0tICB8CiAgICAtLSAgfAotICAgcHJvY2VkdXJlIFNldF9GaWVsZF9UZXJtX0hvb2sgKEZybSAgOiBpbiBGb3JtOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2MgOiBpbiBGb3JtX0hvb2tfRnVuY3Rpb24pCisgICBwcm9jZWR1cmUgU2V0X0ZpZWxkX1Rlcm1fSG9vayAoRnJtICA6IEZvcm07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYyA6IEZvcm1fSG9va19GdW5jdGlvbikKICAgIGlzCiAgICAgICBmdW5jdGlvbiBTZXRfRmllbGRfVGVybSAoRnJtICA6IEZvcm07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYyA6IEZvcm1fSG9va19GdW5jdGlvbikgcmV0dXJuIENfSW50OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2MgOiBGb3JtX0hvb2tfRnVuY3Rpb24pIHJldHVybiBFdGlfRXJyb3I7CiAgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTZXRfRmllbGRfVGVybSwgInNldF9maWVsZF90ZXJtIik7CiAKLSAgICAgIFJlcyA6IGNvbnN0YW50IEV0aV9FcnJvciA6PSBTZXRfRmllbGRfVGVybSAoRnJtLCBQcm9jKTsKICAgIGJlZ2luCi0gICAgICBpZiBSZXMgLz0gRV9PayB0aGVuCi0gICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOwotICAgICAgZW5kIGlmOworICAgICAgRXRpX0V4Y2VwdGlvbiAoU2V0X0ZpZWxkX1Rlcm0gKEZybSwgUHJvYykpOwogICAgZW5kIFNldF9GaWVsZF9UZXJtX0hvb2s7CiAgICAtLSAgfAogICAgLS0gIHwKICAgIC0tICB8Ci0gICBwcm9jZWR1cmUgU2V0X0Zvcm1fSW5pdF9Ib29rIChGcm0gIDogaW4gRm9ybTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2MgOiBpbiBGb3JtX0hvb2tfRnVuY3Rpb24pCisgICBwcm9jZWR1cmUgU2V0X0Zvcm1fSW5pdF9Ib29rIChGcm0gIDogRm9ybTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2MgOiBGb3JtX0hvb2tfRnVuY3Rpb24pCiAgICBpcwogICAgICAgZnVuY3Rpb24gU2V0X0Zvcm1fSW5pdCAoRnJtICA6IEZvcm07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jIDogRm9ybV9Ib29rX0Z1bmN0aW9uKSByZXR1cm4gQ19JbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jIDogRm9ybV9Ib29rX0Z1bmN0aW9uKSByZXR1cm4gRXRpX0Vycm9yOwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X0Zvcm1fSW5pdCwgInNldF9mb3JtX2luaXQiKTsKIAotICAgICAgUmVzIDogY29uc3RhbnQgRXRpX0Vycm9yIDo9IFNldF9Gb3JtX0luaXQgKEZybSwgUHJvYyk7CiAgICBiZWdpbgotICAgICAgaWYgIFJlcyAvPSBFX09rIHRoZW4KLSAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7Ci0gICAgICBlbmQgaWY7CisgICAgICBFdGlfRXhjZXB0aW9uIChTZXRfRm9ybV9Jbml0IChGcm0sIFByb2MpKTsKICAgIGVuZCBTZXRfRm9ybV9Jbml0X0hvb2s7CiAgICAtLSAgfAogICAgLS0gIHwKICAgIC0tICB8Ci0gICBwcm9jZWR1cmUgU2V0X0Zvcm1fVGVybV9Ib29rIChGcm0gIDogaW4gRm9ybTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2MgOiBpbiBGb3JtX0hvb2tfRnVuY3Rpb24pCisgICBwcm9jZWR1cmUgU2V0X0Zvcm1fVGVybV9Ib29rIChGcm0gIDogRm9ybTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2MgOiBGb3JtX0hvb2tfRnVuY3Rpb24pCiAgICBpcwogICAgICAgZnVuY3Rpb24gU2V0X0Zvcm1fVGVybSAoRnJtICA6IEZvcm07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jIDogRm9ybV9Ib29rX0Z1bmN0aW9uKSByZXR1cm4gQ19JbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jIDogRm9ybV9Ib29rX0Z1bmN0aW9uKSByZXR1cm4gRXRpX0Vycm9yOwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X0Zvcm1fVGVybSwgInNldF9mb3JtX3Rlcm0iKTsKIAotICAgICAgUmVzIDogY29uc3RhbnQgRXRpX0Vycm9yIDo9IFNldF9Gb3JtX1Rlcm0gKEZybSwgUHJvYyk7CiAgICBiZWdpbgotICAgICAgaWYgUmVzIC89IEVfT2sgdGhlbgotICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKLSAgICAgIGVuZCBpZjsKKyAgICAgIEV0aV9FeGNlcHRpb24gKFNldF9Gb3JtX1Rlcm0gKEZybSwgUHJvYykpOwogICAgZW5kIFNldF9Gb3JtX1Rlcm1fSG9vazsKICAgIC0tICB8CiAgICAtLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtNzI3LDIzICs2MzcsMTkgQEAKICAgIC0tICB8CiAgICAtLSAgfAogICAgLS0gIHwKLSAgIHByb2NlZHVyZSBSZWRlZmluZSAoRnJtICA6IGluIEZvcm07Ci0gICAgICAgICAgICAgICAgICAgICAgIEZsZHMgOiBpbiBGaWVsZF9BcnJheV9BY2Nlc3MpCisgICBwcm9jZWR1cmUgUmVkZWZpbmUgKEZybSAgOiBGb3JtOworICAgICAgICAgICAgICAgICAgICAgICBGbGRzIDogRmllbGRfQXJyYXlfQWNjZXNzKQogICAgaXMKICAgICAgIGZ1bmN0aW9uIFNldF9Gcm1fRmllbGRzIChGcm0gICA6IEZvcm07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXRlbXMgOiBTeXN0ZW0uQWRkcmVzcykgcmV0dXJuIENfSW50OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEl0ZW1zIDogU3lzdGVtLkFkZHJlc3MpIHJldHVybiBFdGlfRXJyb3I7CiAgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTZXRfRnJtX0ZpZWxkcywgInNldF9mb3JtX2ZpZWxkcyIpOwogCi0gICAgICBSZXMgOiBFdGlfRXJyb3I7CiAgICBiZWdpbgotICAgICAgcHJhZ21hIEFzc2VydCAoRmxkcyAoRmxkcydMYXN0KSA9IE51bGxfRmllbGQpOwotICAgICAgaWYgRmxkcyAoRmxkcydMYXN0KSAvPSBOdWxsX0ZpZWxkIHRoZW4KKyAgICAgIHByYWdtYSBBc3NlcnQgKEZsZHMuYWxsIChGbGRzJ0xhc3QpID0gTnVsbF9GaWVsZCk7CisgICAgICBpZiBGbGRzLmFsbCAoRmxkcydMYXN0KSAvPSBOdWxsX0ZpZWxkIHRoZW4KICAgICAgICAgIHJhaXNlIEZvcm1fRXhjZXB0aW9uOwogICAgICAgZWxzZQotICAgICAgICAgUmVzIDo9IFNldF9Gcm1fRmllbGRzIChGcm0sIEZsZHMgKEZsZHMnRmlyc3QpJ0FkZHJlc3MpOwotICAgICAgICAgaWYgIFJlcyAvPSBFX09rIHRoZW4KLSAgICAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7Ci0gICAgICAgICBlbmQgaWY7CisgICAgICAgICBFdGlfRXhjZXB0aW9uIChTZXRfRnJtX0ZpZWxkcyAoRnJtLCBGbGRzLmFsbCAoRmxkcydGaXJzdCknQWRkcmVzcykpOwogICAgICAgZW5kIGlmOwogICAgZW5kIFJlZGVmaW5lOwogICAgLS0gIHwKQEAgLTc3OSwxOCArNjg1LDE1IEBACiAgICAtLSAgfAogICAgLS0gIHwKICAgIC0tICB8Ci0gICBwcm9jZWR1cmUgTW92ZSAoRmxkICAgIDogaW4gRmllbGQ7Ci0gICAgICAgICAgICAgICAgICAgTGluZSAgIDogaW4gTGluZV9Qb3NpdGlvbjsKLSAgICAgICAgICAgICAgICAgICBDb2x1bW4gOiBpbiBDb2x1bW5fUG9zaXRpb24pCisgICBwcm9jZWR1cmUgTW92ZSAoRmxkICAgIDogRmllbGQ7CisgICAgICAgICAgICAgICAgICAgTGluZSAgIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICBDb2x1bW4gOiBDb2x1bW5fUG9zaXRpb24pCiAgICBpcwotICAgICAgZnVuY3Rpb24gTW92ZSAoRmxkIDogRmllbGQ7IEwsIEMgOiBDX0ludCkgcmV0dXJuIENfSW50OworICAgICAgZnVuY3Rpb24gTW92ZSAoRmxkIDogRmllbGQ7IEwsIEMgOiBDX0ludCkgcmV0dXJuIEV0aV9FcnJvcjsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIE1vdmUsICJtb3ZlX2ZpZWxkIik7CiAKLSAgICAgIFJlcyA6IGNvbnN0YW50IEV0aV9FcnJvciA6PSBNb3ZlIChGbGQsIENfSW50IChMaW5lKSwgQ19JbnQgKENvbHVtbikpOwogICAgYmVnaW4KLSAgICAgIGlmIFJlcyAvPSBFX09rIHRoZW4KLSAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7Ci0gICAgICBlbmQgaWY7CisgICAgICBFdGlfRXhjZXB0aW9uIChNb3ZlIChGbGQsIENfSW50IChMaW5lKSwgQ19JbnQgKENvbHVtbikpKTsKICAgIGVuZCBNb3ZlOwogICAgLS0gIHwKICAgIC0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC04MDYsMTEgKzcwOSwxMSBAQAogCiAgICAgICBNICAgOiBGb3JtOwogICAgYmVnaW4KLSAgICAgIHByYWdtYSBBc3NlcnQgKEZpZWxkcyAoRmllbGRzJ0xhc3QpID0gTnVsbF9GaWVsZCk7Ci0gICAgICBpZiBGaWVsZHMgKEZpZWxkcydMYXN0KSAvPSBOdWxsX0ZpZWxkIHRoZW4KKyAgICAgIHByYWdtYSBBc3NlcnQgKEZpZWxkcy5hbGwgKEZpZWxkcydMYXN0KSA9IE51bGxfRmllbGQpOworICAgICAgaWYgRmllbGRzLmFsbCAoRmllbGRzJ0xhc3QpIC89IE51bGxfRmllbGQgdGhlbgogICAgICAgICAgcmFpc2UgRm9ybV9FeGNlcHRpb247CiAgICAgICBlbHNlCi0gICAgICAgICBNIDo9IE5ld0Zvcm0gKEZpZWxkcyAoRmllbGRzJ0ZpcnN0KSdBZGRyZXNzKTsKKyAgICAgICAgIE0gOj0gTmV3Rm9ybSAoRmllbGRzLmFsbCAoRmllbGRzJ0ZpcnN0KSdBZGRyZXNzKTsKICAgICAgICAgIGlmIE0gPSBOdWxsX0Zvcm0gdGhlbgogICAgICAgICAgICAgcmFpc2UgRm9ybV9FeGNlcHRpb247CiAgICAgICAgICBlbmQgaWY7CkBAIC04MjIsMTQgKzcyNSwxMSBAQAogICAgLS0gIHwKICAgIHByb2NlZHVyZSBEZWxldGUgKEZybSA6IGluIG91dCBGb3JtKQogICAgaXMKLSAgICAgIGZ1bmN0aW9uIEZyZWUgKEZybSA6IEZvcm0pIHJldHVybiBDX0ludDsKKyAgICAgIGZ1bmN0aW9uIEZyZWUgKEZybSA6IEZvcm0pIHJldHVybiBFdGlfRXJyb3I7CiAgICAgICBwcmFnbWEgSW1wb3J0IChDLCBGcmVlLCAiZnJlZV9mb3JtIik7CiAKLSAgICAgIFJlcyA6IGNvbnN0YW50IEV0aV9FcnJvciA6PSBGcmVlIChGcm0pOwogICAgYmVnaW4KLSAgICAgIGlmIFJlcyAvPSBFX09rIHRoZW4KLSAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7Ci0gICAgICBlbmQgaWY7CisgICAgICBFdGlfRXhjZXB0aW9uIChGcmVlIChGcm0pKTsKICAgICAgIEZybSA6PSBOdWxsX0Zvcm07CiAgICBlbmQgRGVsZXRlOwogICAgLS0gIHwKQEAgLTgzOSw1OSArNzM5LDQ4IEBACiAgICAtLSAgfAogICAgLS0gIHwKICAgIC0tICB8Ci0gICBwcm9jZWR1cmUgU2V0X09wdGlvbnMgKEZybSAgICAgOiBpbiBGb3JtOwotICAgICAgICAgICAgICAgICAgICAgICAgICBPcHRpb25zIDogaW4gRm9ybV9PcHRpb25fU2V0KQorICAgcHJvY2VkdXJlIFNldF9PcHRpb25zIChGcm0gICAgIDogRm9ybTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW9ucyA6IEZvcm1fT3B0aW9uX1NldCkKICAgIGlzCiAgICAgICBmdW5jdGlvbiBTZXRfRm9ybV9PcHRzIChGcm0gOiBGb3JtOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0IDogQ19JbnQpIHJldHVybiBDX0ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdCA6IEZvcm1fT3B0aW9uX1NldCkgcmV0dXJuIEV0aV9FcnJvcjsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNldF9Gb3JtX09wdHMsICJzZXRfZm9ybV9vcHRzIik7CiAKLSAgICAgIE9wdCA6IGNvbnN0YW50IENfSW50IDo9IEZybU9TXzJfQ0ludCAoT3B0aW9ucyk7Ci0gICAgICBSZXMgOiBFdGlfRXJyb3I7CiAgICBiZWdpbgotICAgICAgUmVzIDo9IFNldF9Gb3JtX09wdHMgKEZybSwgT3B0KTsKLSAgICAgIGlmICBSZXMgLz0gRV9PayB0aGVuCi0gICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOwotICAgICAgZW5kIGlmOworICAgICAgRXRpX0V4Y2VwdGlvbiAoU2V0X0Zvcm1fT3B0cyAoRnJtLCBPcHRpb25zKSk7CiAgICBlbmQgU2V0X09wdGlvbnM7CiAgICAtLSAgfAogICAgLS0gIHwKICAgIC0tICB8Ci0gICBwcm9jZWR1cmUgU3dpdGNoX09wdGlvbnMgKEZybSAgICAgOiBpbiBGb3JtOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcHRpb25zIDogaW4gRm9ybV9PcHRpb25fU2V0OworICAgcHJvY2VkdXJlIFN3aXRjaF9PcHRpb25zIChGcm0gICAgIDogRm9ybTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW9ucyA6IEZvcm1fT3B0aW9uX1NldDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT24gICAgICA6IEJvb2xlYW4gOj0gVHJ1ZSkKICAgIGlzCiAgICAgICBmdW5jdGlvbiBGb3JtX09wdHNfT24gKEZybSA6IEZvcm07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdCA6IENfSW50KSByZXR1cm4gQ19JbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdCA6IEZvcm1fT3B0aW9uX1NldCkgcmV0dXJuIEV0aV9FcnJvcjsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEZvcm1fT3B0c19PbiwgImZvcm1fb3B0c19vbiIpOwogICAgICAgZnVuY3Rpb24gRm9ybV9PcHRzX09mZiAoRnJtIDogRm9ybTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdCA6IENfSW50KSByZXR1cm4gQ19JbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcHQgOiBGb3JtX09wdGlvbl9TZXQpIHJldHVybiBFdGlfRXJyb3I7CiAgICAgICBwcmFnbWEgSW1wb3J0IChDLCBGb3JtX09wdHNfT2ZmLCAiZm9ybV9vcHRzX29mZiIpOwogCi0gICAgICBFcnIgOiBFdGlfRXJyb3I7Ci0gICAgICBPcHQgOiBjb25zdGFudCBDX0ludCA6PSBGcm1PU18yX0NJbnQgKE9wdGlvbnMpOwogICAgYmVnaW4KICAgICAgIGlmIE9uIHRoZW4KLSAgICAgICAgIEVyciA6PSBGb3JtX09wdHNfT24gKEZybSwgT3B0KTsKKyAgICAgICAgIEV0aV9FeGNlcHRpb24gKEZvcm1fT3B0c19PbiAoRnJtLCBPcHRpb25zKSk7CiAgICAgICBlbHNlCi0gICAgICAgICBFcnIgOj0gRm9ybV9PcHRzX09mZiAoRnJtLCBPcHQpOwotICAgICAgZW5kIGlmOwotICAgICAgaWYgRXJyIC89IEVfT2sgdGhlbgotICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoRXJyKTsKKyAgICAgICAgIEV0aV9FeGNlcHRpb24gKEZvcm1fT3B0c19PZmYgKEZybSwgT3B0aW9ucykpOwogICAgICAgZW5kIGlmOwogICAgZW5kIFN3aXRjaF9PcHRpb25zOwogICAgLS0gIHwKICAgIC0tICB8CiAgICAtLSAgfAotICAgcHJvY2VkdXJlIEdldF9PcHRpb25zIChGcm0gICAgIDogaW4gIEZvcm07CisgICBwcm9jZWR1cmUgR2V0X09wdGlvbnMgKEZybSAgICAgOiBGb3JtOwogICAgICAgICAgICAgICAgICAgICAgICAgICBPcHRpb25zIDogb3V0IEZvcm1fT3B0aW9uX1NldCkKICAgIGlzCi0gICAgICBmdW5jdGlvbiBGb3JtX09wdHMgKEZybSA6IEZvcm0pIHJldHVybiBDX0ludDsKKyAgICAgIGZ1bmN0aW9uIEZvcm1fT3B0cyAoRnJtIDogRm9ybSkgcmV0dXJuIEZvcm1fT3B0aW9uX1NldDsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEZvcm1fT3B0cywgImZvcm1fb3B0cyIpOwogCi0gICAgICBSZXMgOiBjb25zdGFudCBDX0ludCA6PSBGb3JtX09wdHMgKEZybSk7CiAgICBiZWdpbgotICAgICAgT3B0aW9ucyA6PSBDSW50XzJfRnJtT1MgKFJlcyk7CisgICAgICBPcHRpb25zIDo9IEZvcm1fT3B0cyAoRnJtKTsKICAgIGVuZCBHZXRfT3B0aW9uczsKICAgIC0tICB8CiAgICAtLSAgfApAQCAtOTEwLDIzICs3OTksMTkgQEAKICAgIC0tICB8CiAgICAtLSAgfAogICAgLS0gIHwKLSAgIHByb2NlZHVyZSBQb3N0IChGcm0gIDogaW4gRm9ybTsKLSAgICAgICAgICAgICAgICAgICBQb3N0IDogaW4gQm9vbGVhbiA6PSBUcnVlKQorICAgcHJvY2VkdXJlIFBvc3QgKEZybSAgOiBGb3JtOworICAgICAgICAgICAgICAgICAgIFBvc3QgOiBCb29sZWFuIDo9IFRydWUpCiAgICBpcwotICAgICAgZnVuY3Rpb24gTV9Qb3N0IChGcm0gOiBGb3JtKSByZXR1cm4gQ19JbnQ7CisgICAgICBmdW5jdGlvbiBNX1Bvc3QgKEZybSA6IEZvcm0pIHJldHVybiBFdGlfRXJyb3I7CiAgICAgICBwcmFnbWEgSW1wb3J0IChDLCBNX1Bvc3QsICJwb3N0X2Zvcm0iKTsKLSAgICAgIGZ1bmN0aW9uIE1fVW5wb3N0IChGcm0gOiBGb3JtKSByZXR1cm4gQ19JbnQ7CisgICAgICBmdW5jdGlvbiBNX1VucG9zdCAoRnJtIDogRm9ybSkgcmV0dXJuIEV0aV9FcnJvcjsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIE1fVW5wb3N0LCAidW5wb3N0X2Zvcm0iKTsKIAotICAgICAgUmVzIDogRXRpX0Vycm9yOwogICAgYmVnaW4KICAgICAgIGlmIFBvc3QgdGhlbgotICAgICAgICAgUmVzIDo9IE1fUG9zdCAoRnJtKTsKKyAgICAgICAgIEV0aV9FeGNlcHRpb24gKE1fUG9zdCAoRnJtKSk7CiAgICAgICBlbHNlCi0gICAgICAgICBSZXMgOj0gTV9VbnBvc3QgKEZybSk7Ci0gICAgICBlbmQgaWY7Ci0gICAgICBpZiBSZXMgLz0gRV9PayB0aGVuCi0gICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOworICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoTV9VbnBvc3QgKEZybSkpOwogICAgICAgZW5kIGlmOwogICAgZW5kIFBvc3Q7CiAgICAtLSAgfApAQCAtOTM4LDE0ICs4MjMsMTEgQEAKICAgIC0tICB8CiAgICBwcm9jZWR1cmUgUG9zaXRpb25fQ3Vyc29yIChGcm0gOiBGb3JtKQogICAgaXMKLSAgICAgIGZ1bmN0aW9uIFBvc19Gb3JtX0N1cnNvciAoRnJtIDogRm9ybSkgcmV0dXJuIENfSW50OworICAgICAgZnVuY3Rpb24gUG9zX0Zvcm1fQ3Vyc29yIChGcm0gOiBGb3JtKSByZXR1cm4gRXRpX0Vycm9yOwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgUG9zX0Zvcm1fQ3Vyc29yLCAicG9zX2Zvcm1fY3Vyc29yIik7CiAKLSAgICAgIFJlcyA6IGNvbnN0YW50IEV0aV9FcnJvciA6PSBQb3NfRm9ybV9DdXJzb3IgKEZybSk7CiAgICBiZWdpbgotICAgICAgaWYgIFJlcyAvPSBFX09rIHRoZW4KLSAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7Ci0gICAgICBlbmQgaWY7CisgICAgICBFdGlfRXhjZXB0aW9uIChQb3NfRm9ybV9DdXJzb3IgKEZybSkpOwogICAgZW5kIFBvc2l0aW9uX0N1cnNvcjsKICAgIC0tICB8CiAgICAtLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtOTkzLDI1ICs4NzUsMjIgQEAKICAgIGZ1bmN0aW9uIERyaXZlciAoRnJtIDogRm9ybTsKICAgICAgICAgICAgICAgICAgICAgS2V5IDogS2V5X0NvZGUpIHJldHVybiBEcml2ZXJfUmVzdWx0CiAgICBpcwotICAgICAgZnVuY3Rpb24gRnJtX0RyaXZlciAoRnJtIDogRm9ybTsgS2V5IDogQ19JbnQpIHJldHVybiBDX0ludDsKKyAgICAgIGZ1bmN0aW9uIEZybV9Ecml2ZXIgKEZybSA6IEZvcm07IEtleSA6IENfSW50KSByZXR1cm4gRXRpX0Vycm9yOwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgRnJtX0RyaXZlciwgImZvcm1fZHJpdmVyIik7CiAKICAgICAgIFIgOiBjb25zdGFudCBFdGlfRXJyb3IgOj0gRnJtX0RyaXZlciAoRnJtLCBDX0ludCAoS2V5KSk7CiAgICBiZWdpbgotICAgICAgaWYgUiAvPSBFX09rIHRoZW4KLSAgICAgICAgIGlmIFIgPSBFX1Vua25vd25fQ29tbWFuZCB0aGVuCisgICAgICBjYXNlIFIgaXMKKyAgICAgICAgIHdoZW4gRV9Vbmtub3duX0NvbW1hbmQgPT4KICAgICAgICAgICAgIHJldHVybiBVbmtub3duX1JlcXVlc3Q7Ci0gICAgICAgICBlbHNpZiBSID0gRV9JbnZhbGlkX0ZpZWxkIHRoZW4KKyAgICAgICAgIHdoZW4gRV9JbnZhbGlkX0ZpZWxkID0+CiAgICAgICAgICAgICByZXR1cm4gSW52YWxpZF9GaWVsZDsKLSAgICAgICAgIGVsc2lmIFIgPSBFX1JlcXVlc3RfRGVuaWVkIHRoZW4KKyAgICAgICAgIHdoZW4gRV9SZXF1ZXN0X0RlbmllZCA9PgogICAgICAgICAgICAgcmV0dXJuIFJlcXVlc3RfRGVuaWVkOwotICAgICAgICAgZWxzZQorICAgICAgICAgd2hlbiBvdGhlcnMgPT4KICAgICAgICAgICAgIEV0aV9FeGNlcHRpb24gKFIpOwogICAgICAgICAgICAgcmV0dXJuIEZvcm1fT2s7Ci0gICAgICAgICBlbmQgaWY7Ci0gICAgICBlbHNlCi0gICAgICAgICByZXR1cm4gRm9ybV9PazsKLSAgICAgIGVuZCBpZjsKKyAgICAgIGVuZCBjYXNlOwogICAgZW5kIERyaXZlcjsKICAgIC0tICB8CiAgICAtLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMTAyMCwyMiArODk5LDE5IEBACiAgICAtLSAgfAogICAgLS0gIHwKICAgIC0tICB8Ci0gICBwcm9jZWR1cmUgU2V0X0N1cnJlbnQgKEZybSA6IGluIEZvcm07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIEZsZCA6IGluIEZpZWxkKQorICAgcHJvY2VkdXJlIFNldF9DdXJyZW50IChGcm0gOiBGb3JtOworICAgICAgICAgICAgICAgICAgICAgICAgICBGbGQgOiBGaWVsZCkKICAgIGlzCi0gICAgICBmdW5jdGlvbiBTZXRfQ3VycmVudF9GbGQgKEZybSA6IEZvcm07IEZsZCA6IEZpZWxkKSByZXR1cm4gQ19JbnQ7CisgICAgICBmdW5jdGlvbiBTZXRfQ3VycmVudF9GbGQgKEZybSA6IEZvcm07IEZsZCA6IEZpZWxkKSByZXR1cm4gRXRpX0Vycm9yOwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X0N1cnJlbnRfRmxkLCAic2V0X2N1cnJlbnRfZmllbGQiKTsKIAotICAgICAgUmVzIDogY29uc3RhbnQgRXRpX0Vycm9yIDo9IFNldF9DdXJyZW50X0ZsZCAoRnJtLCBGbGQpOwogICAgYmVnaW4KLSAgICAgIGlmIFJlcyAvPSBFX09rIHRoZW4KLSAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7Ci0gICAgICBlbmQgaWY7CisgICAgICBFdGlfRXhjZXB0aW9uIChTZXRfQ3VycmVudF9GbGQgKEZybSwgRmxkKSk7CiAgICBlbmQgU2V0X0N1cnJlbnQ7CiAgICAtLSAgfAogICAgLS0gIHwKICAgIC0tICB8Ci0gICBmdW5jdGlvbiBDdXJyZW50IChGcm0gOiBpbiBGb3JtKSByZXR1cm4gRmllbGQKKyAgIGZ1bmN0aW9uIEN1cnJlbnQgKEZybSA6IEZvcm0pIHJldHVybiBGaWVsZAogICAgaXMKICAgICAgIGZ1bmN0aW9uIEN1cnJlbnRfRmxkIChGcm0gOiBGb3JtKSByZXR1cm4gRmllbGQ7CiAgICAgICBwcmFnbWEgSW1wb3J0IChDLCBDdXJyZW50X0ZsZCwgImN1cnJlbnRfZmllbGQiKTsKQEAgLTEwNTAsMTcgKzkyNiwxNCBAQAogICAgLS0gIHwKICAgIC0tICB8CiAgICAtLSAgfAotICAgcHJvY2VkdXJlIFNldF9QYWdlIChGcm0gIDogaW4gRm9ybTsKLSAgICAgICAgICAgICAgICAgICAgICAgUGFnZSA6IGluIFBhZ2VfTnVtYmVyIDo9IFBhZ2VfTnVtYmVyJ0ZpcnN0KQorICAgcHJvY2VkdXJlIFNldF9QYWdlIChGcm0gIDogRm9ybTsKKyAgICAgICAgICAgICAgICAgICAgICAgUGFnZSA6IFBhZ2VfTnVtYmVyIDo9IFBhZ2VfTnVtYmVyJ0ZpcnN0KQogICAgaXMKLSAgICAgIGZ1bmN0aW9uIFNldF9Gcm1fUGFnZSAoRnJtIDogRm9ybTsgUGcgOiBDX0ludCkgcmV0dXJuIENfSW50OworICAgICAgZnVuY3Rpb24gU2V0X0ZybV9QYWdlIChGcm0gOiBGb3JtOyBQZyA6IENfSW50KSByZXR1cm4gRXRpX0Vycm9yOwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X0ZybV9QYWdlLCAic2V0X2Zvcm1fcGFnZSIpOwogCi0gICAgICBSZXMgOiBjb25zdGFudCBFdGlfRXJyb3IgOj0gU2V0X0ZybV9QYWdlIChGcm0sIENfSW50IChQYWdlKSk7CiAgICBiZWdpbgotICAgICAgaWYgUmVzIC89IEVfT2sgdGhlbgotICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKLSAgICAgIGVuZCBpZjsKKyAgICAgIEV0aV9FeGNlcHRpb24gKFNldF9Gcm1fUGFnZSAoRnJtLCBDX0ludCAoUGFnZSkpKTsKICAgIGVuZCBTZXRfUGFnZTsKICAgIC0tICB8CiAgICAtLSAgfApAQCAtMTA5OSwxNyArOTcyLDE0IEBACiAgICAtLSAgfAogICAgLS0gIHwKICAgIC0tICB8Ci0gICBwcm9jZWR1cmUgU2V0X05ld19QYWdlIChGbGQgICAgICA6IGluIEZpZWxkOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV3X1BhZ2UgOiBpbiBCb29sZWFuIDo9IFRydWUpCisgICBwcm9jZWR1cmUgU2V0X05ld19QYWdlIChGbGQgICAgICA6IEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV3X1BhZ2UgOiBCb29sZWFuIDo9IFRydWUpCiAgICBpcwotICAgICAgZnVuY3Rpb24gU2V0X1BhZ2UgKEZsZCA6IEZpZWxkOyBGbGcgOiBDX0ludCkgcmV0dXJuIENfSW50OworICAgICAgZnVuY3Rpb24gU2V0X1BhZ2UgKEZsZCA6IEZpZWxkOyBGbGcgOiBDX0ludCkgcmV0dXJuIEV0aV9FcnJvcjsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNldF9QYWdlLCAic2V0X25ld19wYWdlIik7CiAKLSAgICAgIFJlcyA6IGNvbnN0YW50IEV0aV9FcnJvciA6PSBTZXRfUGFnZSAoRmxkLCBCb29sZWFuJ1BvcyAoTmV3X1BhZ2UpKTsKICAgIGJlZ2luCi0gICAgICBpZiBSZXMgLz0gRV9PayB0aGVuCi0gICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOwotICAgICAgZW5kIGlmOworICAgICAgRXRpX0V4Y2VwdGlvbiAoU2V0X1BhZ2UgKEZsZCwgQm9vbGVhbidQb3MgKE5ld19QYWdlKSkpOwogICAgZW5kIFNldF9OZXdfUGFnZTsKICAgIC0tICB8CiAgICAtLSAgfApAQCAtMTEyOSwxNSArOTk5LDE1IEBACiAgICBlbmQgSXNfTmV3X1BhZ2U7CiAKICAgIHByb2NlZHVyZSBGcmVlIChGQSAgICAgICAgICA6IGluIG91dCBGaWVsZF9BcnJheV9BY2Nlc3M7Ci0gICAgICAgICAgICAgICAgICAgRnJlZV9GaWVsZHMgOiBpbiBCb29sZWFuIDo9IEZhbHNlKQorICAgICAgICAgICAgICAgICAgIEZyZWVfRmllbGRzIDogQm9vbGVhbiA6PSBGYWxzZSkKICAgIGlzCiAgICAgICBwcm9jZWR1cmUgUmVsZWFzZSBpcyBuZXcgQWRhLlVuY2hlY2tlZF9EZWFsbG9jYXRpb24KICAgICAgICAgKEZpZWxkX0FycmF5LCBGaWVsZF9BcnJheV9BY2Nlc3MpOwogICAgYmVnaW4KICAgICAgIGlmIEZBIC89IG51bGwgYW5kIHRoZW4gRnJlZV9GaWVsZHMgdGhlbgogICAgICAgICAgZm9yIEkgaW4gRkEnRmlyc3QgLi4gKEZBJ0xhc3QgLSAxKSBsb29wCi0gICAgICAgICAgICBpZiBGQSAoSSkgLz0gTnVsbF9GaWVsZCB0aGVuCi0gICAgICAgICAgICAgICBEZWxldGUgKEZBIChJKSk7CisgICAgICAgICAgICBpZiBGQS5hbGwgKEkpIC89IE51bGxfRmllbGQgdGhlbgorICAgICAgICAgICAgICAgRGVsZXRlIChGQS5hbGwgKEkpKTsKICAgICAgICAgICAgIGVuZCBpZjsKICAgICAgICAgIGVuZCBsb29wOwogICAgICAgZW5kIGlmOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGEuYWRiIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGEuYWRiCmluZGV4IDZjMzVkMzMuLmRhMjZmODAgMTAwNjQ0Ci0tLSBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLWl0ZW1fdXNlcl9kYXRhLmFkYgorKysgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YS5hZGIKQEAgLTcsNyArNyw3IEBACiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OC0yMDA5LDIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KIC0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQpAQCAtMzUsNyArMzUsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CiAtLSAgVmVyc2lvbiBDb250cm9sOgotLS0gICRSZXZpc2lvbjogMS4xMSAkCistLSAgJFJldmlzaW9uOiAxLjE0ICQKIC0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogd2l0aCBJbnRlcmZhY2VzLkM7CkBAIC00NSwyMSArNDUsMTggQEAKIAogICAgdXNlIHR5cGUgSW50ZXJmYWNlcy5DLmludDsKIAotICAgcHJvY2VkdXJlIFNldF9Vc2VyX0RhdGEgKEl0bSAgOiBpbiBJdGVtOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgOiBpbiBVc2VyX0FjY2VzcykKKyAgIHByb2NlZHVyZSBTZXRfVXNlcl9EYXRhIChJdG0gIDogSXRlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhIDogVXNlcl9BY2Nlc3MpCiAgICBpcwogICAgICAgZnVuY3Rpb24gU2V0X0l0ZW1fVXNlcnB0ciAoSXRtICA6IEl0ZW07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyIDogVXNlcl9BY2Nlc3MpICByZXR1cm4gQ19JbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyIDogVXNlcl9BY2Nlc3MpICByZXR1cm4gRXRpX0Vycm9yOwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X0l0ZW1fVXNlcnB0ciwgInNldF9pdGVtX3VzZXJwdHIiKTsKIAotICAgICAgUmVzIDogY29uc3RhbnQgRXRpX0Vycm9yIDo9IFNldF9JdGVtX1VzZXJwdHIgKEl0bSwgRGF0YSk7CiAgICBiZWdpbgotICAgICAgaWYgIFJlcyAvPSBFX09rIHRoZW4KLSAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7Ci0gICAgICBlbmQgaWY7CisgICAgICBFdGlfRXhjZXB0aW9uIChTZXRfSXRlbV9Vc2VycHRyIChJdG0sIERhdGEpKTsKICAgIGVuZCBTZXRfVXNlcl9EYXRhOwogCi0gICBmdW5jdGlvbiBHZXRfVXNlcl9EYXRhIChJdG0gIDogaW4gIEl0ZW0pIHJldHVybiBVc2VyX0FjY2VzcworICAgZnVuY3Rpb24gR2V0X1VzZXJfRGF0YSAoSXRtICA6IEl0ZW0pIHJldHVybiBVc2VyX0FjY2VzcwogICAgaXMKICAgICAgIGZ1bmN0aW9uIEl0ZW1fVXNlcnB0ciAoSXRtIDogSXRlbSkgcmV0dXJuIFVzZXJfQWNjZXNzOwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgSXRlbV9Vc2VycHRyLCAiaXRlbV91c2VycHRyIik7CkBAIC02Nyw3ICs2NCw3IEBACiAgICAgICByZXR1cm4gSXRlbV9Vc2VycHRyIChJdG0pOwogICAgZW5kIEdldF9Vc2VyX0RhdGE7CiAKLSAgIHByb2NlZHVyZSBHZXRfVXNlcl9EYXRhIChJdG0gIDogaW4gIEl0ZW07CisgICBwcm9jZWR1cmUgR2V0X1VzZXJfRGF0YSAoSXRtICA6IEl0ZW07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA6IG91dCBVc2VyX0FjY2VzcykKICAgIGlzCiAgICBiZWdpbgpkaWZmIC0tZ2l0IGEvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGEuYWRiIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGEuYWRiCmluZGV4IDIwYjllODYuLjc0NmU3YjQgMTAwNjQ0Ci0tLSBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhLmFkYgorKysgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YS5hZGIKQEAgLTcsNyArNyw3IEBACiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OC0yMDA5LDIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KIC0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQpAQCAtMzUsNyArMzUsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CiAtLSAgVmVyc2lvbiBDb250cm9sOgotLS0gICRSZXZpc2lvbjogMS4xMiAkCistLSAgJFJldmlzaW9uOiAxLjE1ICQKIC0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogd2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkF1eDsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuQXV4OwpAQCAtNDQsMjEgKzQ0LDE5IEBACiAKICAgIHVzZSB0eXBlIEludGVyZmFjZXMuQy5pbnQ7CiAKLSAgIHByb2NlZHVyZSBTZXRfVXNlcl9EYXRhIChNZW4gIDogaW4gTWVudTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhIDogaW4gVXNlcl9BY2Nlc3MpCisgICBwcm9jZWR1cmUgU2V0X1VzZXJfRGF0YSAoTWVuICA6IE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA6IFVzZXJfQWNjZXNzKQogICAgaXMKICAgICAgIGZ1bmN0aW9uIFNldF9NZW51X1VzZXJwdHIgKE1lbiAgOiBNZW51OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA6IFVzZXJfQWNjZXNzKSAgcmV0dXJuIENfSW50OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA6IFVzZXJfQWNjZXNzKSAgcmV0dXJuIEV0aV9FcnJvcjsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNldF9NZW51X1VzZXJwdHIsICJzZXRfbWVudV91c2VycHRyIik7CiAKLSAgICAgIFJlcyA6IGNvbnN0YW50IEV0aV9FcnJvciA6PSBTZXRfTWVudV9Vc2VycHRyIChNZW4sIERhdGEpOwogICAgYmVnaW4KLSAgICAgIGlmICBSZXMgLz0gRV9PayB0aGVuCi0gICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOwotICAgICAgZW5kIGlmOworICAgICAgRXRpX0V4Y2VwdGlvbiAoU2V0X01lbnVfVXNlcnB0ciAoTWVuLCBEYXRhKSk7CisKICAgIGVuZCBTZXRfVXNlcl9EYXRhOwogCi0gICBmdW5jdGlvbiBHZXRfVXNlcl9EYXRhIChNZW4gIDogaW4gIE1lbnUpIHJldHVybiBVc2VyX0FjY2VzcworICAgZnVuY3Rpb24gR2V0X1VzZXJfRGF0YSAoTWVuICA6IE1lbnUpIHJldHVybiBVc2VyX0FjY2VzcwogICAgaXMKICAgICAgIGZ1bmN0aW9uIE1lbnVfVXNlcnB0ciAoTWVuIDogTWVudSkgcmV0dXJuIFVzZXJfQWNjZXNzOwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgTWVudV9Vc2VycHRyLCAibWVudV91c2VycHRyIik7CkBAIC02Niw3ICs2NCw3IEBACiAgICAgICByZXR1cm4gTWVudV9Vc2VycHRyIChNZW4pOwogICAgZW5kIEdldF9Vc2VyX0RhdGE7CiAKLSAgIHByb2NlZHVyZSBHZXRfVXNlcl9EYXRhIChNZW4gIDogaW4gIE1lbnU7CisgICBwcm9jZWR1cmUgR2V0X1VzZXJfRGF0YSAoTWVuICA6IE1lbnU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA6IG91dCBVc2VyX0FjY2VzcykKICAgIGlzCiAgICBiZWdpbgpkaWZmIC0tZ2l0IGEvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRiIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRiCmluZGV4IDBiMjRjNzQuLmVmM2EwZDMgMTAwNjQ0Ci0tLSBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkYgorKysgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy5hZGIKQEAgLTcsNyArNyw3IEBACiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNCwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OC0yMDExLDIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KIC0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQpAQCAtMzUsOCArMzUsOCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CiAtLSAgVmVyc2lvbiBDb250cm9sOgotLS0gICRSZXZpc2lvbjogMS4yNiAkCi0tLSAgJERhdGU6IDIwMDgvMDcvMjYgMTg6NTA6NTggJAorLS0gICRSZXZpc2lvbjogMS4zMiAkCistLSAgJERhdGU6IDIwMTQvMDUvMjQgMjE6MzE6MDUgJAogLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB3aXRoIEFkYS5VbmNoZWNrZWRfRGVhbGxvY2F0aW9uOwpAQCAtNDYsOCArNDYsNiBAQAogd2l0aCBJbnRlcmZhY2VzLkMuU3RyaW5nczsgdXNlIEludGVyZmFjZXMuQy5TdHJpbmdzOwogd2l0aCBJbnRlcmZhY2VzLkMuUG9pbnRlcnM7CiAKLXdpdGggQWRhLlVuY2hlY2tlZF9Db252ZXJzaW9uOwotCiBwYWNrYWdlIGJvZHkgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5NZW51cyBpcwogCiAgICB0eXBlIENfSXRlbV9BcnJheSBpcyBhcnJheSAoTmF0dXJhbCByYW5nZSA8Pikgb2YgYWxpYXNlZCBJdGVtOwpAQCAtNTcsMjQgKzU1LDggQEAKICAgIHVzZSB0eXBlIFN5c3RlbS5CaXRfT3JkZXI7CiAgICBzdWJ0eXBlIGNoYXJzX3B0ciBpcyBJbnRlcmZhY2VzLkMuU3RyaW5ncy5jaGFyc19wdHI7CiAKLSAgIGZ1bmN0aW9uIE1PU18yX0NJbnQgaXMgbmV3Ci0gICAgIEFkYS5VbmNoZWNrZWRfQ29udmVyc2lvbiAoTWVudV9PcHRpb25fU2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENfSW50KTsKLQotICAgZnVuY3Rpb24gQ0ludF8yX01PUyBpcyBuZXcKLSAgICAgQWRhLlVuY2hlY2tlZF9Db252ZXJzaW9uIChDX0ludCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZW51X09wdGlvbl9TZXQpOwotCi0gICBmdW5jdGlvbiBJT1NfMl9DSW50IGlzIG5ldwotICAgICBBZGEuVW5jaGVja2VkX0NvbnZlcnNpb24gKEl0ZW1fT3B0aW9uX1NldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDX0ludCk7Ci0KLSAgIGZ1bmN0aW9uIENJbnRfMl9JT1MgaXMgbmV3Ci0gICAgIEFkYS5VbmNoZWNrZWRfQ29udmVyc2lvbiAoQ19JbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXRlbV9PcHRpb25fU2V0KTsKLQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICBwcm9jZWR1cmUgUmVxdWVzdF9OYW1lIChLZXkgIDogaW4gTWVudV9SZXF1ZXN0X0NvZGU7CisgICBwcm9jZWR1cmUgUmVxdWVzdF9OYW1lIChLZXkgIDogTWVudV9SZXF1ZXN0X0NvZGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lIDogb3V0IFN0cmluZykKICAgIGlzCiAgICAgICBmdW5jdGlvbiBSZXF1ZXN0X05hbWUgKEtleSA6IENfSW50KSByZXR1cm4gY2hhcnNfcHRyOwpAQCAtMTI4LDEwICsxMTAsOSBAQAogICAgICAgZnVuY3Rpb24gSXRlbW5hbWUgKEl0bSAgOiBJdGVtKSByZXR1cm4gY2hhcnNfcHRyOwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgSXRlbW5hbWUsICJpdGVtX25hbWUiKTsKIAotICAgICAgZnVuY3Rpb24gRnJlZWl0ZW0gKEl0bSA6IEl0ZW0pIHJldHVybiBDX0ludDsKKyAgICAgIGZ1bmN0aW9uIEZyZWVpdGVtIChJdG0gOiBJdGVtKSByZXR1cm4gRXRpX0Vycm9yOwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgRnJlZWl0ZW0sICJmcmVlX2l0ZW0iKTsKIAotICAgICAgUmVzIDogRXRpX0Vycm9yOwogICAgICAgUHRyIDogY2hhcnNfcHRyOwogICAgYmVnaW4KICAgICAgIFB0ciA6PSBEZXNjbmFtZSAoSXRtKTsKQEAgLTE0MiwyNSArMTIzLDE5IEBACiAgICAgICBpZiBQdHIgLz0gTnVsbF9QdHIgdGhlbgogICAgICAgICAgSW50ZXJmYWNlcy5DLlN0cmluZ3MuRnJlZSAoUHRyKTsKICAgICAgIGVuZCBpZjsKLSAgICAgIFJlcyA6PSBGcmVlaXRlbSAoSXRtKTsKLSAgICAgIGlmIFJlcyAvPSBFX09rIHRoZW4KLSAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7Ci0gICAgICBlbmQgaWY7CisgICAgICBFdGlfRXhjZXB0aW9uIChGcmVlaXRlbSAoSXRtKSk7CiAgICAgICBJdG0gOj0gTnVsbF9JdGVtOwogICAgZW5kIERlbGV0ZTsKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgIHByb2NlZHVyZSBTZXRfVmFsdWUgKEl0bSAgIDogaW4gSXRlbTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlIDogaW4gQm9vbGVhbiA6PSBUcnVlKQorICAgcHJvY2VkdXJlIFNldF9WYWx1ZSAoSXRtICAgOiBJdGVtOworICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgOiBCb29sZWFuIDo9IFRydWUpCiAgICBpcwogICAgICAgZnVuY3Rpb24gU2V0X0l0ZW1fVmFsIChJdG0gOiBJdGVtOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWwgOiBDX0ludCkgcmV0dXJuIENfSW50OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWwgOiBDX0ludCkgcmV0dXJuIEV0aV9FcnJvcjsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNldF9JdGVtX1ZhbCwgInNldF9pdGVtX3ZhbHVlIik7CiAKLSAgICAgIFJlcyA6IGNvbnN0YW50IEV0aV9FcnJvciA6PSBTZXRfSXRlbV9WYWwgKEl0bSwgQm9vbGVhbidQb3MgKFZhbHVlKSk7CiAgICBiZWdpbgotICAgICAgaWYgIFJlcyAvPSBFX09rIHRoZW4KLSAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7Ci0gICAgICBlbmQgaWY7CisgICAgICBFdGlfRXhjZXB0aW9uIChTZXRfSXRlbV9WYWwgKEl0bSwgQm9vbGVhbidQb3MgKFZhbHVlKSkpOwogICAgZW5kIFNldF9WYWx1ZTsKIAogICAgZnVuY3Rpb24gVmFsdWUgKEl0bSA6IEl0ZW0pIHJldHVybiBCb29sZWFuCkBAIC0xODgsNTUgKzE2Myw0NCBAQAogICAgICAgZW5kIGlmOwogICAgZW5kIFZpc2libGU7CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICBwcm9jZWR1cmUgU2V0X09wdGlvbnMgKEl0bSAgICAgOiBpbiBJdGVtOwotICAgICAgICAgICAgICAgICAgICAgICAgICBPcHRpb25zIDogaW4gSXRlbV9PcHRpb25fU2V0KQorICAgcHJvY2VkdXJlIFNldF9PcHRpb25zIChJdG0gICAgIDogSXRlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW9ucyA6IEl0ZW1fT3B0aW9uX1NldCkKICAgIGlzCiAgICAgICBmdW5jdGlvbiBTZXRfSXRlbV9PcHRzIChJdG0gOiBJdGVtOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0IDogQ19JbnQpIHJldHVybiBDX0ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdCA6IEl0ZW1fT3B0aW9uX1NldCkgcmV0dXJuIEV0aV9FcnJvcjsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNldF9JdGVtX09wdHMsICJzZXRfaXRlbV9vcHRzIik7CiAKLSAgICAgIE9wdCA6IGNvbnN0YW50IENfSW50IDo9IElPU18yX0NJbnQgKE9wdGlvbnMpOwotICAgICAgUmVzIDogRXRpX0Vycm9yOwogICAgYmVnaW4KLSAgICAgIFJlcyA6PSBTZXRfSXRlbV9PcHRzIChJdG0sIE9wdCk7Ci0gICAgICBpZiBSZXMgLz0gRV9PayB0aGVuCi0gICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOwotICAgICAgZW5kIGlmOworICAgICAgRXRpX0V4Y2VwdGlvbiAoU2V0X0l0ZW1fT3B0cyAoSXRtLCBPcHRpb25zKSk7CiAgICBlbmQgU2V0X09wdGlvbnM7CiAKLSAgIHByb2NlZHVyZSBTd2l0Y2hfT3B0aW9ucyAoSXRtICAgICA6IGluIEl0ZW07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbnMgOiBpbiBJdGVtX09wdGlvbl9TZXQ7CisgICBwcm9jZWR1cmUgU3dpdGNoX09wdGlvbnMgKEl0bSAgICAgOiBJdGVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcHRpb25zIDogSXRlbV9PcHRpb25fU2V0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbiAgICAgIDogQm9vbGVhbiA6PSBUcnVlKQogICAgaXMKICAgICAgIGZ1bmN0aW9uIEl0ZW1fT3B0c19PbiAoSXRtIDogSXRlbTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0IDogQ19JbnQpIHJldHVybiBDX0ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0IDogSXRlbV9PcHRpb25fU2V0KSByZXR1cm4gRXRpX0Vycm9yOwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgSXRlbV9PcHRzX09uLCAiaXRlbV9vcHRzX29uIik7CiAgICAgICBmdW5jdGlvbiBJdGVtX09wdHNfT2ZmIChJdG0gOiBJdGVtOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0IDogQ19JbnQpIHJldHVybiBDX0ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdCA6IEl0ZW1fT3B0aW9uX1NldCkgcmV0dXJuIEV0aV9FcnJvcjsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEl0ZW1fT3B0c19PZmYsICJpdGVtX29wdHNfb2ZmIik7CiAKLSAgICAgIE9wdCA6IGNvbnN0YW50IENfSW50IDo9IElPU18yX0NJbnQgKE9wdGlvbnMpOwotICAgICAgRXJyIDogRXRpX0Vycm9yOwogICAgYmVnaW4KICAgICAgIGlmIE9uIHRoZW4KLSAgICAgICAgIEVyciA6PSBJdGVtX09wdHNfT24gKEl0bSwgT3B0KTsKKyAgICAgICAgIEV0aV9FeGNlcHRpb24gKEl0ZW1fT3B0c19PbiAoSXRtLCBPcHRpb25zKSk7CiAgICAgICBlbHNlCi0gICAgICAgICBFcnIgOj0gSXRlbV9PcHRzX09mZiAoSXRtLCBPcHQpOwotICAgICAgZW5kIGlmOwotICAgICAgaWYgRXJyIC89IEVfT2sgdGhlbgotICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoRXJyKTsKKyAgICAgICAgIEV0aV9FeGNlcHRpb24gKEl0ZW1fT3B0c19PZmYgKEl0bSwgT3B0aW9ucykpOwogICAgICAgZW5kIGlmOwogICAgZW5kIFN3aXRjaF9PcHRpb25zOwogCi0gICBwcm9jZWR1cmUgR2V0X09wdGlvbnMgKEl0bSAgICAgOiBpbiAgSXRlbTsKKyAgIHByb2NlZHVyZSBHZXRfT3B0aW9ucyAoSXRtICAgICA6IEl0ZW07CiAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbnMgOiBvdXQgSXRlbV9PcHRpb25fU2V0KQogICAgaXMKLSAgICAgIGZ1bmN0aW9uIEl0ZW1fT3B0cyAoSXRtIDogSXRlbSkgcmV0dXJuIENfSW50OworICAgICAgZnVuY3Rpb24gSXRlbV9PcHRzIChJdG0gOiBJdGVtKSByZXR1cm4gSXRlbV9PcHRpb25fU2V0OwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgSXRlbV9PcHRzLCAiaXRlbV9vcHRzIik7CiAKLSAgICAgIFJlcyA6IGNvbnN0YW50IENfSW50IDo9IEl0ZW1fT3B0cyAoSXRtKTsKICAgIGJlZ2luCi0gICAgICBPcHRpb25zIDo9IENJbnRfMl9JT1MgKFJlcyk7CisgICAgICBPcHRpb25zIDo9IEl0ZW1fT3B0cyAoSXRtKTsKICAgIGVuZCBHZXRfT3B0aW9uczsKIAogICAgZnVuY3Rpb24gR2V0X09wdGlvbnMgKEl0bSA6IEl0ZW0gOj0gTnVsbF9JdGVtKSByZXR1cm4gSXRlbV9PcHRpb25fU2V0CkBAIC0yNDcsNyArMjExLDcgQEAKICAgICAgIHJldHVybiBJb3M7CiAgICBlbmQgR2V0X09wdGlvbnM7CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICBwcm9jZWR1cmUgTmFtZSAoSXRtICA6IGluIEl0ZW07CisgICBwcm9jZWR1cmUgTmFtZSAoSXRtICA6IEl0ZW07CiAgICAgICAgICAgICAgICAgICAgTmFtZSA6IG91dCBTdHJpbmcpCiAgICBpcwogICAgICAgZnVuY3Rpb24gSXRlbW5hbWUgKEl0bSA6IEl0ZW0pIHJldHVybiBjaGFyc19wdHI7CkBAIC0yNTYsNyArMjIwLDcgQEAKICAgICAgIEZpbGxfU3RyaW5nIChJdGVtbmFtZSAoSXRtKSwgTmFtZSk7CiAgICBlbmQgTmFtZTsKIAotICAgZnVuY3Rpb24gTmFtZSAoSXRtIDogaW4gSXRlbSkgcmV0dXJuIFN0cmluZworICAgZnVuY3Rpb24gTmFtZSAoSXRtIDogSXRlbSkgcmV0dXJuIFN0cmluZwogICAgaXMKICAgICAgIGZ1bmN0aW9uIEl0ZW1uYW1lIChJdG0gOiBJdGVtKSByZXR1cm4gY2hhcnNfcHRyOwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgSXRlbW5hbWUsICJpdGVtX25hbWUiKTsKQEAgLTI2NCw3ICsyMjgsNyBAQAogICAgICAgcmV0dXJuIEZpbGxfU3RyaW5nIChJdGVtbmFtZSAoSXRtKSk7CiAgICBlbmQgTmFtZTsKIAotICAgcHJvY2VkdXJlIERlc2NyaXB0aW9uIChJdG0gICAgICAgICA6IGluIEl0ZW07CisgICBwcm9jZWR1cmUgRGVzY3JpcHRpb24gKEl0bSAgICAgICAgIDogSXRlbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRpb24gOiBvdXQgU3RyaW5nKQogICAgaXMKICAgICAgIGZ1bmN0aW9uIERlc2NuYW1lIChJdG0gIDogSXRlbSkgcmV0dXJuIGNoYXJzX3B0cjsKQEAgLTI3Myw3ICsyMzcsNyBAQAogICAgICAgRmlsbF9TdHJpbmcgKERlc2NuYW1lIChJdG0pLCBEZXNjcmlwdGlvbik7CiAgICBlbmQgRGVzY3JpcHRpb247CiAKLSAgIGZ1bmN0aW9uIERlc2NyaXB0aW9uIChJdG0gOiBpbiBJdGVtKSByZXR1cm4gU3RyaW5nCisgICBmdW5jdGlvbiBEZXNjcmlwdGlvbiAoSXRtIDogSXRlbSkgcmV0dXJuIFN0cmluZwogICAgaXMKICAgICAgIGZ1bmN0aW9uIERlc2NuYW1lIChJdG0gIDogSXRlbSkgcmV0dXJuIGNoYXJzX3B0cjsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIERlc2NuYW1lLCAiaXRlbV9kZXNjcmlwdGlvbiIpOwpAQCAtMjgxLDE4ICsyNDUsMTUgQEAKICAgICAgIHJldHVybiBGaWxsX1N0cmluZyAoRGVzY25hbWUgKEl0bSkpOwogICAgZW5kIERlc2NyaXB0aW9uOwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgcHJvY2VkdXJlIFNldF9DdXJyZW50IChNZW4gOiBpbiBNZW51OwotICAgICAgICAgICAgICAgICAgICAgICAgICBJdG0gOiBpbiBJdGVtKQorICAgcHJvY2VkdXJlIFNldF9DdXJyZW50IChNZW4gOiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgICBJdG0gOiBJdGVtKQogICAgaXMKICAgICAgIGZ1bmN0aW9uIFNldF9DdXJyX0l0ZW0gKE1lbiA6IE1lbnU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJdG0gOiBJdGVtKSByZXR1cm4gQ19JbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJdG0gOiBJdGVtKSByZXR1cm4gRXRpX0Vycm9yOwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X0N1cnJfSXRlbSwgInNldF9jdXJyZW50X2l0ZW0iKTsKIAotICAgICAgUmVzIDogY29uc3RhbnQgRXRpX0Vycm9yIDo9IFNldF9DdXJyX0l0ZW0gKE1lbiwgSXRtKTsKICAgIGJlZ2luCi0gICAgICBpZiBSZXMgLz0gRV9PayB0aGVuCi0gICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOwotICAgICAgZW5kIGlmOworICAgICAgRXRpX0V4Y2VwdGlvbiAoU2V0X0N1cnJfSXRlbSAoTWVuLCBJdG0pKTsKICAgIGVuZCBTZXRfQ3VycmVudDsKIAogICAgZnVuY3Rpb24gQ3VycmVudCAoTWVuIDogTWVudSkgcmV0dXJuIEl0ZW0KQEAgLTMwOCwxOCArMjY5LDE1IEBACiAgICAgICByZXR1cm4gUmVzOwogICAgZW5kIEN1cnJlbnQ7CiAKLSAgIHByb2NlZHVyZSBTZXRfVG9wX1JvdyAoTWVuICA6IGluIE1lbnU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIExpbmUgOiBpbiBMaW5lX1Bvc2l0aW9uKQorICAgcHJvY2VkdXJlIFNldF9Ub3BfUm93IChNZW4gIDogTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTGluZSA6IExpbmVfUG9zaXRpb24pCiAgICBpcwogICAgICAgZnVuY3Rpb24gU2V0X1RvcHJvdyAoTWVuICA6IE1lbnU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5lIDogQ19JbnQpIHJldHVybiBDX0ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIExpbmUgOiBDX0ludCkgcmV0dXJuIEV0aV9FcnJvcjsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNldF9Ub3Byb3csICJzZXRfdG9wX3JvdyIpOwogCi0gICAgICBSZXMgOiBjb25zdGFudCBFdGlfRXJyb3IgOj0gU2V0X1RvcHJvdyAoTWVuLCBDX0ludCAoTGluZSkpOwogICAgYmVnaW4KLSAgICAgIGlmICBSZXMgLz0gRV9PayB0aGVuCi0gICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOwotICAgICAgZW5kIGlmOworICAgICAgRXRpX0V4Y2VwdGlvbiAoU2V0X1RvcHJvdyAoTWVuLCBDX0ludCAoTGluZSkpKTsKICAgIGVuZCBTZXRfVG9wX1JvdzsKIAogICAgZnVuY3Rpb24gVG9wX1JvdyAoTWVuIDogTWVudSkgcmV0dXJuIExpbmVfUG9zaXRpb24KQEAgLTM0OCw3NSArMzA2LDYwIEBACiAgICAgICByZXR1cm4gUG9zaXRpdmUgKE5hdHVyYWwgKFJlcykgKyBQb3NpdGl2ZSdGaXJzdCk7CiAgICBlbmQgR2V0X0luZGV4OwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgcHJvY2VkdXJlIFBvc3QgKE1lbiAgOiBpbiBNZW51OwotICAgICAgICAgICAgICAgICAgIFBvc3QgOiBpbiBCb29sZWFuIDo9IFRydWUpCisgICBwcm9jZWR1cmUgUG9zdCAoTWVuICA6IE1lbnU7CisgICAgICAgICAgICAgICAgICAgUG9zdCA6IEJvb2xlYW4gOj0gVHJ1ZSkKICAgIGlzCi0gICAgICBmdW5jdGlvbiBNX1Bvc3QgKE1lbiA6IE1lbnUpIHJldHVybiBDX0ludDsKKyAgICAgIGZ1bmN0aW9uIE1fUG9zdCAoTWVuIDogTWVudSkgcmV0dXJuIEV0aV9FcnJvcjsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIE1fUG9zdCwgInBvc3RfbWVudSIpOwotICAgICAgZnVuY3Rpb24gTV9VbnBvc3QgKE1lbiA6IE1lbnUpIHJldHVybiBDX0ludDsKKyAgICAgIGZ1bmN0aW9uIE1fVW5wb3N0IChNZW4gOiBNZW51KSByZXR1cm4gRXRpX0Vycm9yOwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgTV9VbnBvc3QsICJ1bnBvc3RfbWVudSIpOwogCi0gICAgICBSZXMgOiBFdGlfRXJyb3I7CiAgICBiZWdpbgogICAgICAgaWYgUG9zdCB0aGVuCi0gICAgICAgICBSZXMgOj0gTV9Qb3N0IChNZW4pOworICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoTV9Qb3N0IChNZW4pKTsKICAgICAgIGVsc2UKLSAgICAgICAgIFJlcyA6PSBNX1VucG9zdCAoTWVuKTsKLSAgICAgIGVuZCBpZjsKLSAgICAgIGlmIFJlcyAvPSBFX09rIHRoZW4KLSAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7CisgICAgICAgICBFdGlfRXhjZXB0aW9uIChNX1VucG9zdCAoTWVuKSk7CiAgICAgICBlbmQgaWY7CiAgICBlbmQgUG9zdDsKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgIHByb2NlZHVyZSBTZXRfT3B0aW9ucyAoTWVuICAgICA6IGluIE1lbnU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbnMgOiBpbiBNZW51X09wdGlvbl9TZXQpCisgICBwcm9jZWR1cmUgU2V0X09wdGlvbnMgKE1lbiAgICAgOiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgICBPcHRpb25zIDogTWVudV9PcHRpb25fU2V0KQogICAgaXMKICAgICAgIGZ1bmN0aW9uIFNldF9NZW51X09wdHMgKE1lbiA6IE1lbnU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcHQgOiBDX0ludCkgcmV0dXJuIENfSW50OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0IDogTWVudV9PcHRpb25fU2V0KSByZXR1cm4gRXRpX0Vycm9yOwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X01lbnVfT3B0cywgInNldF9tZW51X29wdHMiKTsKIAotICAgICAgT3B0IDogY29uc3RhbnQgQ19JbnQgOj0gTU9TXzJfQ0ludCAoT3B0aW9ucyk7Ci0gICAgICBSZXMgOiBFdGlfRXJyb3I7CiAgICBiZWdpbgotICAgICAgUmVzIDo9IFNldF9NZW51X09wdHMgKE1lbiwgT3B0KTsKLSAgICAgIGlmICBSZXMgLz0gRV9PayB0aGVuCi0gICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOwotICAgICAgZW5kIGlmOworICAgICAgRXRpX0V4Y2VwdGlvbiAoU2V0X01lbnVfT3B0cyAoTWVuLCBPcHRpb25zKSk7CiAgICBlbmQgU2V0X09wdGlvbnM7CiAKLSAgIHByb2NlZHVyZSBTd2l0Y2hfT3B0aW9ucyAoTWVuICAgICA6IGluIE1lbnU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbnMgOiBpbiBNZW51X09wdGlvbl9TZXQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9uICAgICAgOiBpbiBCb29sZWFuIDo9IFRydWUpCisgICBwcm9jZWR1cmUgU3dpdGNoX09wdGlvbnMgKE1lbiAgICAgOiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcHRpb25zIDogTWVudV9PcHRpb25fU2V0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbiAgICAgIDogQm9vbGVhbiA6PSBUcnVlKQogICAgaXMKICAgICAgIGZ1bmN0aW9uIE1lbnVfT3B0c19PbiAoTWVuIDogTWVudTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0IDogQ19JbnQpIHJldHVybiBDX0ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0IDogTWVudV9PcHRpb25fU2V0KSByZXR1cm4gRXRpX0Vycm9yOwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgTWVudV9PcHRzX09uLCAibWVudV9vcHRzX29uIik7CiAgICAgICBmdW5jdGlvbiBNZW51X09wdHNfT2ZmIChNZW4gOiBNZW51OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0IDogQ19JbnQpIHJldHVybiBDX0ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdCA6IE1lbnVfT3B0aW9uX1NldCkgcmV0dXJuIEV0aV9FcnJvcjsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIE1lbnVfT3B0c19PZmYsICJtZW51X29wdHNfb2ZmIik7CiAKLSAgICAgIE9wdCA6IGNvbnN0YW50IENfSW50IDo9IE1PU18yX0NJbnQgKE9wdGlvbnMpOwotICAgICAgRXJyIDogRXRpX0Vycm9yOwogICAgYmVnaW4KICAgICAgIGlmIE9uIHRoZW4KLSAgICAgICAgIEVyciA6PSBNZW51X09wdHNfT24gIChNZW4sIE9wdCk7CisgICAgICAgICBFdGlfRXhjZXB0aW9uIChNZW51X09wdHNfT24gIChNZW4sIE9wdGlvbnMpKTsKICAgICAgIGVsc2UKLSAgICAgICAgIEVyciA6PSBNZW51X09wdHNfT2ZmIChNZW4sIE9wdCk7Ci0gICAgICBlbmQgaWY7Ci0gICAgICBpZiBFcnIgLz0gRV9PayB0aGVuCi0gICAgICAgICBFdGlfRXhjZXB0aW9uIChFcnIpOworICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoTWVudV9PcHRzX09mZiAoTWVuLCBPcHRpb25zKSk7CiAgICAgICBlbmQgaWY7CiAgICBlbmQgU3dpdGNoX09wdGlvbnM7CiAKLSAgIHByb2NlZHVyZSBHZXRfT3B0aW9ucyAoTWVuICAgICA6IGluICBNZW51OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbnMgOiBvdXQgTWVudV9PcHRpb25fU2V0KQorICAgcHJvY2VkdXJlIEdldF9PcHRpb25zIChNZW4gICAgIDogTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW9ucyA6IG91dCBNZW51X09wdGlvbl9TZXQpCiAgICBpcwotICAgICAgZnVuY3Rpb24gTWVudV9PcHRzIChNZW4gOiBNZW51KSByZXR1cm4gQ19JbnQ7CisgICAgICBmdW5jdGlvbiBNZW51X09wdHMgKE1lbiA6IE1lbnUpIHJldHVybiBNZW51X09wdGlvbl9TZXQ7CiAgICAgICBwcmFnbWEgSW1wb3J0IChDLCBNZW51X09wdHMsICJtZW51X29wdHMiKTsKIAotICAgICAgUmVzIDogY29uc3RhbnQgQ19JbnQgOj0gTWVudV9PcHRzIChNZW4pOwogICAgYmVnaW4KLSAgICAgIE9wdGlvbnMgOj0gQ0ludF8yX01PUyAoUmVzKTsKKyAgICAgIE9wdGlvbnMgOj0gTWVudV9PcHRzIChNZW4pOwogICAgZW5kIEdldF9PcHRpb25zOwogCiAgICBmdW5jdGlvbiBHZXRfT3B0aW9ucyAoTWVuIDogTWVudSA6PSBOdWxsX01lbnUpIHJldHVybiBNZW51X09wdGlvbl9TZXQKQEAgLTQyNywxOCArMzcwLDE1IEBACiAgICAgICByZXR1cm4gTW9zOwogICAgZW5kIEdldF9PcHRpb25zOwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgcHJvY2VkdXJlIFNldF9XaW5kb3cgKE1lbiA6IGluIE1lbnU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgV2luIDogaW4gV2luZG93KQorICAgcHJvY2VkdXJlIFNldF9XaW5kb3cgKE1lbiA6IE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgV2luIDogV2luZG93KQogICAgaXMKICAgICAgIGZ1bmN0aW9uIFNldF9NZW51X1dpbiAoTWVuIDogTWVudTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2luIDogV2luZG93KSByZXR1cm4gQ19JbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpbiA6IFdpbmRvdykgcmV0dXJuIEV0aV9FcnJvcjsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNldF9NZW51X1dpbiwgInNldF9tZW51X3dpbiIpOwogCi0gICAgICBSZXMgOiBjb25zdGFudCBFdGlfRXJyb3IgOj0gU2V0X01lbnVfV2luIChNZW4sIFdpbik7CiAgICBiZWdpbgotICAgICAgaWYgIFJlcyAvPSBFX09rIHRoZW4KLSAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7Ci0gICAgICBlbmQgaWY7CisgICAgICBFdGlfRXhjZXB0aW9uIChTZXRfTWVudV9XaW4gKE1lbiwgV2luKSk7CiAgICBlbmQgU2V0X1dpbmRvdzsKIAogICAgZnVuY3Rpb24gR2V0X1dpbmRvdyAoTWVuIDogTWVudSkgcmV0dXJuIFdpbmRvdwpAQCAtNDUxLDE4ICszOTEsMTUgQEAKICAgICAgIHJldHVybiBXOwogICAgZW5kIEdldF9XaW5kb3c7CiAKLSAgIHByb2NlZHVyZSBTZXRfU3ViX1dpbmRvdyAoTWVuIDogaW4gTWVudTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2luIDogaW4gV2luZG93KQorICAgcHJvY2VkdXJlIFNldF9TdWJfV2luZG93IChNZW4gOiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaW4gOiBXaW5kb3cpCiAgICBpcwogICAgICAgZnVuY3Rpb24gU2V0X01lbnVfU3ViIChNZW4gOiBNZW51OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaW4gOiBXaW5kb3cpIHJldHVybiBDX0ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2luIDogV2luZG93KSByZXR1cm4gRXRpX0Vycm9yOwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X01lbnVfU3ViLCAic2V0X21lbnVfc3ViIik7CiAKLSAgICAgIFJlcyA6IGNvbnN0YW50IEV0aV9FcnJvciA6PSBTZXRfTWVudV9TdWIgKE1lbiwgV2luKTsKICAgIGJlZ2luCi0gICAgICBpZiAgUmVzIC89IEVfT2sgdGhlbgotICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKLSAgICAgIGVuZCBpZjsKKyAgICAgIEV0aV9FeGNlcHRpb24gKFNldF9NZW51X1N1YiAoTWVuLCBXaW4pKTsKICAgIGVuZCBTZXRfU3ViX1dpbmRvdzsKIAogICAgZnVuY3Rpb24gR2V0X1N1Yl9XaW5kb3cgKE1lbiA6IE1lbnUpIHJldHVybiBXaW5kb3cKQEAgLTQ3NSw1OCArNDEyLDQ4IEBACiAgICAgICByZXR1cm4gVzsKICAgIGVuZCBHZXRfU3ViX1dpbmRvdzsKIAotICAgcHJvY2VkdXJlIFNjYWxlIChNZW4gICAgIDogaW4gTWVudTsKKyAgIHByb2NlZHVyZSBTY2FsZSAoTWVuICAgICA6IE1lbnU7CiAgICAgICAgICAgICAgICAgICAgIExpbmVzICAgOiBvdXQgTGluZV9Db3VudDsKICAgICAgICAgICAgICAgICAgICAgQ29sdW1ucyA6IG91dCBDb2x1bW5fQ291bnQpCiAgICBpcwogICAgICAgdHlwZSBDX0ludF9BY2Nlc3MgaXMgYWNjZXNzIGFsbCBDX0ludDsKICAgICAgIGZ1bmN0aW9uIE1fU2NhbGUgKE1lbiAgICA6IE1lbnU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBZcCwgWHAgOiBDX0ludF9BY2Nlc3MpIHJldHVybiBDX0ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgIFlwLCBYcCA6IENfSW50X0FjY2VzcykgcmV0dXJuIEV0aV9FcnJvcjsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIE1fU2NhbGUsICJzY2FsZV9tZW51Iik7CiAKICAgICAgIFgsIFkgOiBhbGlhc2VkIENfSW50OwotICAgICAgUmVzICA6IGNvbnN0YW50IEV0aV9FcnJvciA6PSBNX1NjYWxlIChNZW4sIFknQWNjZXNzLCBYJ0FjY2Vzcyk7CiAgICBiZWdpbgotICAgICAgaWYgUmVzIC89IEVfT2sgdGhlbgotICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKLSAgICAgIGVuZCBpZjsKKyAgICAgIEV0aV9FeGNlcHRpb24gKE1fU2NhbGUgKE1lbiwgWSdBY2Nlc3MsIFgnQWNjZXNzKSk7CiAgICAgICBMaW5lcyA6PSBMaW5lX0NvdW50IChZKTsKICAgICAgIENvbHVtbnMgOj0gQ29sdW1uX0NvdW50IChYKTsKICAgIGVuZCBTY2FsZTsKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIHByb2NlZHVyZSBQb3NpdGlvbl9DdXJzb3IgKE1lbiA6IE1lbnUpCiAgICBpcwotICAgICAgZnVuY3Rpb24gUG9zX01lbnVfQ3Vyc29yIChNZW4gOiBNZW51KSByZXR1cm4gQ19JbnQ7CisgICAgICBmdW5jdGlvbiBQb3NfTWVudV9DdXJzb3IgKE1lbiA6IE1lbnUpIHJldHVybiBFdGlfRXJyb3I7CiAgICAgICBwcmFnbWEgSW1wb3J0IChDLCBQb3NfTWVudV9DdXJzb3IsICJwb3NfbWVudV9jdXJzb3IiKTsKIAotICAgICAgUmVzIDogY29uc3RhbnQgRXRpX0Vycm9yIDo9IFBvc19NZW51X0N1cnNvciAoTWVuKTsKICAgIGJlZ2luCi0gICAgICBpZiAgUmVzIC89IEVfT2sgdGhlbgotICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKLSAgICAgIGVuZCBpZjsKKyAgICAgIEV0aV9FeGNlcHRpb24gKFBvc19NZW51X0N1cnNvciAoTWVuKSk7CiAgICBlbmQgUG9zaXRpb25fQ3Vyc29yOwogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICBwcm9jZWR1cmUgU2V0X01hcmsgKE1lbiAgOiBpbiBNZW51OwotICAgICAgICAgICAgICAgICAgICAgICBNYXJrIDogaW4gU3RyaW5nKQorICAgcHJvY2VkdXJlIFNldF9NYXJrIChNZW4gIDogTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgTWFyayA6IFN0cmluZykKICAgIGlzCiAgICAgICB0eXBlIENoYXJfUHRyIGlzIGFjY2VzcyBhbGwgSW50ZXJmYWNlcy5DLmNoYXI7CiAgICAgICBmdW5jdGlvbiBTZXRfTWFyayAoTWVuICA6IE1lbnU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgTWFyayA6IENoYXJfUHRyKSByZXR1cm4gQ19JbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgTWFyayA6IENoYXJfUHRyKSByZXR1cm4gRXRpX0Vycm9yOwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X01hcmssICJzZXRfbWVudV9tYXJrIik7CiAKICAgICAgIFR4dCA6IGNoYXJfYXJyYXkgKDAgLi4gTWFyaydMZW5ndGgpOwogICAgICAgTGVuIDogc2l6ZV90OwotICAgICAgUmVzIDogRXRpX0Vycm9yOwogICAgYmVnaW4KICAgICAgIFRvX0MgKE1hcmssIFR4dCwgTGVuKTsKLSAgICAgIFJlcyA6PSBTZXRfTWFyayAoTWVuLCBUeHQgKFR4dCdGaXJzdCknQWNjZXNzKTsKLSAgICAgIGlmIFJlcyAvPSBFX09rIHRoZW4KLSAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7Ci0gICAgICBlbmQgaWY7CisgICAgICBFdGlfRXhjZXB0aW9uIChTZXRfTWFyayAoTWVuLCBUeHQgKFR4dCdGaXJzdCknQWNjZXNzKSk7CiAgICBlbmQgU2V0X01hcms7CiAKLSAgIHByb2NlZHVyZSBNYXJrIChNZW4gIDogaW4gIE1lbnU7CisgICBwcm9jZWR1cmUgTWFyayAoTWVuICA6IE1lbnU7CiAgICAgICAgICAgICAgICAgICAgTWFyayA6IG91dCBTdHJpbmcpCiAgICBpcwogICAgICAgZnVuY3Rpb24gR2V0X01lbnVfTWFyayAoTWVuIDogTWVudSkgcmV0dXJuIGNoYXJzX3B0cjsKQEAgLTU0NSwxMzggKzQ3MiwxMjUgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgcHJvY2VkdXJlIFNldF9Gb3JlZ3JvdW5kCi0gICAgIChNZW4gICA6IGluIE1lbnU7Ci0gICAgICBGb3JlICA6IGluIENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0IDo9IE5vcm1hbF9WaWRlbzsKLSAgICAgIENvbG9yIDogaW4gQ29sb3JfUGFpciA6PSBDb2xvcl9QYWlyJ0ZpcnN0KQorICAgICAoTWVuICAgOiBNZW51OworICAgICAgRm9yZSAgOiBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldCA6PSBOb3JtYWxfVmlkZW87CisgICAgICBDb2xvciA6IENvbG9yX1BhaXIgOj0gQ29sb3JfUGFpcidGaXJzdCkKICAgIGlzCiAgICAgICBmdW5jdGlvbiBTZXRfTWVudV9Gb3JlIChNZW4gIDogTWVudTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHIgOiBDX0NodHlwZSkgcmV0dXJuIENfSW50OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ciA6IEF0dHJpYnV0ZWRfQ2hhcmFjdGVyKSByZXR1cm4gRXRpX0Vycm9yOwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X01lbnVfRm9yZSwgInNldF9tZW51X2ZvcmUiKTsKIAogICAgICAgQ2ggOiBjb25zdGFudCBBdHRyaWJ1dGVkX0NoYXJhY3RlciA6PSAoQ2ggICAgPT4gQ2hhcmFjdGVyJ0ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3IgPT4gQ29sb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRyICA9PiBGb3JlKTsKLSAgICAgIFJlcyA6IGNvbnN0YW50IEV0aV9FcnJvciA6PSBTZXRfTWVudV9Gb3JlIChNZW4sIEF0dHJDaGFyX1RvX0NodHlwZSAoQ2gpKTsKICAgIGJlZ2luCi0gICAgICBpZiAgUmVzIC89IEVfT2sgdGhlbgotICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKLSAgICAgIGVuZCBpZjsKKyAgICAgIEV0aV9FeGNlcHRpb24gKFNldF9NZW51X0ZvcmUgKE1lbiwgQ2gpKTsKICAgIGVuZCBTZXRfRm9yZWdyb3VuZDsKIAotICAgcHJvY2VkdXJlIEZvcmVncm91bmQgKE1lbiAgOiBpbiAgTWVudTsKKyAgIHByb2NlZHVyZSBGb3JlZ3JvdW5kIChNZW4gIDogTWVudTsKICAgICAgICAgICAgICAgICAgICAgICAgICBGb3JlIDogb3V0IENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0KQogICAgaXMKLSAgICAgIGZ1bmN0aW9uIE1lbnVfRm9yZSAoTWVuIDogTWVudSkgcmV0dXJuIENfQ2h0eXBlOworICAgICAgZnVuY3Rpb24gTWVudV9Gb3JlIChNZW4gOiBNZW51KSByZXR1cm4gQXR0cmlidXRlZF9DaGFyYWN0ZXI7CiAgICAgICBwcmFnbWEgSW1wb3J0IChDLCBNZW51X0ZvcmUsICJtZW51X2ZvcmUiKTsKICAgIGJlZ2luCi0gICAgICBGb3JlIDo9IENodHlwZV9Ub19BdHRyQ2hhciAoTWVudV9Gb3JlIChNZW4pKS5BdHRyOworICAgICAgRm9yZSA6PSBNZW51X0ZvcmUgKE1lbikuQXR0cjsKICAgIGVuZCBGb3JlZ3JvdW5kOwogCi0gICBwcm9jZWR1cmUgRm9yZWdyb3VuZCAoTWVuICAgOiBpbiAgTWVudTsKKyAgIHByb2NlZHVyZSBGb3JlZ3JvdW5kIChNZW4gICA6IE1lbnU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yZSAgOiBvdXQgQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3IgOiBvdXQgQ29sb3JfUGFpcikKICAgIGlzCi0gICAgICBmdW5jdGlvbiBNZW51X0ZvcmUgKE1lbiA6IE1lbnUpIHJldHVybiBDX0NodHlwZTsKKyAgICAgIGZ1bmN0aW9uIE1lbnVfRm9yZSAoTWVuIDogTWVudSkgcmV0dXJuIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyOwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgTWVudV9Gb3JlLCAibWVudV9mb3JlIik7CiAgICBiZWdpbgotICAgICAgRm9yZSAgOj0gQ2h0eXBlX1RvX0F0dHJDaGFyIChNZW51X0ZvcmUgKE1lbikpLkF0dHI7Ci0gICAgICBDb2xvciA6PSBDaHR5cGVfVG9fQXR0ckNoYXIgKE1lbnVfRm9yZSAoTWVuKSkuQ29sb3I7CisgICAgICBGb3JlICA6PSBNZW51X0ZvcmUgKE1lbikuQXR0cjsKKyAgICAgIENvbG9yIDo9IE1lbnVfRm9yZSAoTWVuKS5Db2xvcjsKICAgIGVuZCBGb3JlZ3JvdW5kOwogCiAgICBwcm9jZWR1cmUgU2V0X0JhY2tncm91bmQKLSAgICAgKE1lbiAgIDogaW4gTWVudTsKLSAgICAgIEJhY2sgIDogaW4gQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQgOj0gTm9ybWFsX1ZpZGVvOwotICAgICAgQ29sb3IgOiBpbiBDb2xvcl9QYWlyIDo9IENvbG9yX1BhaXInRmlyc3QpCisgICAgIChNZW4gICA6IE1lbnU7CisgICAgICBCYWNrICA6IENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0IDo9IE5vcm1hbF9WaWRlbzsKKyAgICAgIENvbG9yIDogQ29sb3JfUGFpciA6PSBDb2xvcl9QYWlyJ0ZpcnN0KQogICAgaXMKICAgICAgIGZ1bmN0aW9uIFNldF9NZW51X0JhY2sgKE1lbiAgOiBNZW51OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ciA6IENfQ2h0eXBlKSByZXR1cm4gQ19JbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRyIDogQXR0cmlidXRlZF9DaGFyYWN0ZXIpIHJldHVybiBFdGlfRXJyb3I7CiAgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTZXRfTWVudV9CYWNrLCAic2V0X21lbnVfYmFjayIpOwogCiAgICAgICBDaCA6IGNvbnN0YW50IEF0dHJpYnV0ZWRfQ2hhcmFjdGVyIDo9IChDaCAgICA9PiBDaGFyYWN0ZXInRmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvciA9PiBDb2xvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHIgID0+IEJhY2spOwotICAgICAgUmVzIDogY29uc3RhbnQgRXRpX0Vycm9yIDo9IFNldF9NZW51X0JhY2sgKE1lbiwgQXR0ckNoYXJfVG9fQ2h0eXBlIChDaCkpOwogICAgYmVnaW4KLSAgICAgIGlmICBSZXMgLz0gRV9PayB0aGVuCi0gICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOwotICAgICAgZW5kIGlmOworICAgICAgRXRpX0V4Y2VwdGlvbiAoU2V0X01lbnVfQmFjayAoTWVuLCBDaCkpOwogICAgZW5kIFNldF9CYWNrZ3JvdW5kOwogCi0gICBwcm9jZWR1cmUgQmFja2dyb3VuZCAoTWVuICA6IGluICBNZW51OworICAgcHJvY2VkdXJlIEJhY2tncm91bmQgKE1lbiAgOiBNZW51OwogICAgICAgICAgICAgICAgICAgICAgICAgIEJhY2sgOiBvdXQgQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQpCiAgICBpcwotICAgICAgZnVuY3Rpb24gTWVudV9CYWNrIChNZW4gOiBNZW51KSByZXR1cm4gQ19DaHR5cGU7CisgICAgICBmdW5jdGlvbiBNZW51X0JhY2sgKE1lbiA6IE1lbnUpIHJldHVybiBBdHRyaWJ1dGVkX0NoYXJhY3RlcjsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIE1lbnVfQmFjaywgIm1lbnVfYmFjayIpOwogICAgYmVnaW4KLSAgICAgIEJhY2sgOj0gQ2h0eXBlX1RvX0F0dHJDaGFyIChNZW51X0JhY2sgKE1lbikpLkF0dHI7CisgICAgICBCYWNrIDo9IE1lbnVfQmFjayAoTWVuKS5BdHRyOwogICAgZW5kIEJhY2tncm91bmQ7CiAKLSAgIHByb2NlZHVyZSBCYWNrZ3JvdW5kIChNZW4gICA6IGluICBNZW51OworICAgcHJvY2VkdXJlIEJhY2tncm91bmQgKE1lbiAgIDogTWVudTsKICAgICAgICAgICAgICAgICAgICAgICAgICBCYWNrICA6IG91dCBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldDsKICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvciA6IG91dCBDb2xvcl9QYWlyKQogICAgaXMKLSAgICAgIGZ1bmN0aW9uIE1lbnVfQmFjayAoTWVuIDogTWVudSkgcmV0dXJuIENfQ2h0eXBlOworICAgICAgZnVuY3Rpb24gTWVudV9CYWNrIChNZW4gOiBNZW51KSByZXR1cm4gQXR0cmlidXRlZF9DaGFyYWN0ZXI7CiAgICAgICBwcmFnbWEgSW1wb3J0IChDLCBNZW51X0JhY2ssICJtZW51X2JhY2siKTsKICAgIGJlZ2luCi0gICAgICBCYWNrICA6PSBDaHR5cGVfVG9fQXR0ckNoYXIgKE1lbnVfQmFjayAoTWVuKSkuQXR0cjsKLSAgICAgIENvbG9yIDo9IENodHlwZV9Ub19BdHRyQ2hhciAoTWVudV9CYWNrIChNZW4pKS5Db2xvcjsKKyAgICAgIEJhY2sgIDo9IE1lbnVfQmFjayAoTWVuKS5BdHRyOworICAgICAgQ29sb3IgOj0gTWVudV9CYWNrIChNZW4pLkNvbG9yOwogICAgZW5kIEJhY2tncm91bmQ7CiAKLSAgIHByb2NlZHVyZSBTZXRfR3JleSAoTWVuICAgOiBpbiBNZW51OwotICAgICAgICAgICAgICAgICAgICAgICBHcmV5ICA6IGluIENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0IDo9IE5vcm1hbF9WaWRlbzsKLSAgICAgICAgICAgICAgICAgICAgICAgQ29sb3IgOiBpbiBDb2xvcl9QYWlyIDo9IENvbG9yX1BhaXInRmlyc3QpCisgICBwcm9jZWR1cmUgU2V0X0dyZXkgKE1lbiAgIDogTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgR3JleSAgOiBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldCA6PSBOb3JtYWxfVmlkZW87CisgICAgICAgICAgICAgICAgICAgICAgIENvbG9yIDogQ29sb3JfUGFpciA6PSBDb2xvcl9QYWlyJ0ZpcnN0KQogICAgaXMKICAgICAgIGZ1bmN0aW9uIFNldF9NZW51X0dyZXkgKE1lbiAgOiBNZW51OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ciA6IENfQ2h0eXBlKSByZXR1cm4gQ19JbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRyIDogQXR0cmlidXRlZF9DaGFyYWN0ZXIpIHJldHVybiBFdGlfRXJyb3I7CiAgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTZXRfTWVudV9HcmV5LCAic2V0X21lbnVfZ3JleSIpOwogCiAgICAgICBDaCA6IGNvbnN0YW50IEF0dHJpYnV0ZWRfQ2hhcmFjdGVyIDo9IChDaCAgICA9PiBDaGFyYWN0ZXInRmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvciA9PiBDb2xvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHIgID0+IEdyZXkpOwogCi0gICAgICBSZXMgOiBjb25zdGFudCBFdGlfRXJyb3IgOj0gU2V0X01lbnVfR3JleSAoTWVuLCBBdHRyQ2hhcl9Ub19DaHR5cGUgKENoKSk7CiAgICBiZWdpbgotICAgICAgaWYgIFJlcyAvPSBFX09rIHRoZW4KLSAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7Ci0gICAgICBlbmQgaWY7CisgICAgICBFdGlfRXhjZXB0aW9uIChTZXRfTWVudV9HcmV5IChNZW4sIENoKSk7CiAgICBlbmQgU2V0X0dyZXk7CiAKLSAgIHByb2NlZHVyZSBHcmV5IChNZW4gIDogaW4gIE1lbnU7CisgICBwcm9jZWR1cmUgR3JleSAoTWVuICA6IE1lbnU7CiAgICAgICAgICAgICAgICAgICAgR3JleSA6IG91dCBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldCkKICAgIGlzCi0gICAgICBmdW5jdGlvbiBNZW51X0dyZXkgKE1lbiA6IE1lbnUpIHJldHVybiBDX0NodHlwZTsKKyAgICAgIGZ1bmN0aW9uIE1lbnVfR3JleSAoTWVuIDogTWVudSkgcmV0dXJuIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyOwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgTWVudV9HcmV5LCAibWVudV9ncmV5Iik7CiAgICBiZWdpbgotICAgICAgR3JleSA6PSBDaHR5cGVfVG9fQXR0ckNoYXIgKE1lbnVfR3JleSAoTWVuKSkuQXR0cjsKKyAgICAgIEdyZXkgOj0gTWVudV9HcmV5IChNZW4pLkF0dHI7CiAgICBlbmQgR3JleTsKIAotICAgcHJvY2VkdXJlIEdyZXkgKE1lbiAgOiBpbiAgTWVudTsKKyAgIHByb2NlZHVyZSBHcmV5IChNZW4gIDogTWVudTsKICAgICAgICAgICAgICAgICAgICBHcmV5IDogb3V0IENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0OwogICAgICAgICAgICAgICAgICAgIENvbG9yIDogb3V0IENvbG9yX1BhaXIpCiAgICBpcwotICAgICAgZnVuY3Rpb24gTWVudV9HcmV5IChNZW4gOiBNZW51KSByZXR1cm4gQ19DaHR5cGU7CisgICAgICBmdW5jdGlvbiBNZW51X0dyZXkgKE1lbiA6IE1lbnUpIHJldHVybiBBdHRyaWJ1dGVkX0NoYXJhY3RlcjsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIE1lbnVfR3JleSwgIm1lbnVfZ3JleSIpOwogICAgYmVnaW4KLSAgICAgIEdyZXkgIDo9IENodHlwZV9Ub19BdHRyQ2hhciAoTWVudV9HcmV5IChNZW4pKS5BdHRyOwotICAgICAgQ29sb3IgOj0gQ2h0eXBlX1RvX0F0dHJDaGFyIChNZW51X0dyZXkgKE1lbikpLkNvbG9yOworICAgICAgR3JleSAgOj0gTWVudV9HcmV5IChNZW4pLkF0dHI7CisgICAgICBDb2xvciA6PSBNZW51X0dyZXkgKE1lbikuQ29sb3I7CiAgICBlbmQgR3JleTsKIAotICAgcHJvY2VkdXJlIFNldF9QYWRfQ2hhcmFjdGVyIChNZW4gOiBpbiBNZW51OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWQgOiBpbiBDaGFyYWN0ZXIgOj0gU3BhY2UpCisgICBwcm9jZWR1cmUgU2V0X1BhZF9DaGFyYWN0ZXIgKE1lbiA6IE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhZCA6IENoYXJhY3RlciA6PSBTcGFjZSkKICAgIGlzCiAgICAgICBmdW5jdGlvbiBTZXRfTWVudV9QYWQgKE1lbiA6IE1lbnU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoICA6IENfSW50KSByZXR1cm4gQ19JbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoICA6IENfSW50KSByZXR1cm4gRXRpX0Vycm9yOwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X01lbnVfUGFkLCAic2V0X21lbnVfcGFkIik7CiAKLSAgICAgIFJlcyA6IGNvbnN0YW50IEV0aV9FcnJvciA6PSBTZXRfTWVudV9QYWQgKE1lbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENfSW50IChDaGFyYWN0ZXInUG9zIChQYWQpKSk7CiAgICBiZWdpbgotICAgICAgaWYgUmVzIC89IEVfT2sgdGhlbgotICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKLSAgICAgIGVuZCBpZjsKKyAgICAgIEV0aV9FeGNlcHRpb24gKFNldF9NZW51X1BhZCAoTWVuLCBDX0ludCAoQ2hhcmFjdGVyJ1BvcyAoUGFkKSkpKTsKICAgIGVuZCBTZXRfUGFkX0NoYXJhY3RlcjsKIAotICAgcHJvY2VkdXJlIFBhZF9DaGFyYWN0ZXIgKE1lbiA6IGluICBNZW51OworICAgcHJvY2VkdXJlIFBhZF9DaGFyYWN0ZXIgKE1lbiA6IE1lbnU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFkIDogb3V0IENoYXJhY3RlcikKICAgIGlzCiAgICAgICBmdW5jdGlvbiBNZW51X1BhZCAoTWVuIDogTWVudSkgcmV0dXJuIENfSW50OwpAQCAtNjg1LDQ4ICs1OTksNDEgQEAKICAgICAgIFBhZCA6PSBDaGFyYWN0ZXInVmFsIChNZW51X1BhZCAoTWVuKSk7CiAgICBlbmQgUGFkX0NoYXJhY3RlcjsKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgIHByb2NlZHVyZSBTZXRfU3BhY2luZyAoTWVuICAgOiBpbiBNZW51OwotICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjciA6IGluIENvbHVtbl9Qb3NpdGlvbiA6PSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgICBSb3cgICA6IGluIExpbmVfUG9zaXRpb24gICA6PSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgICBDb2wgICA6IGluIENvbHVtbl9Qb3NpdGlvbiA6PSAwKQorICAgcHJvY2VkdXJlIFNldF9TcGFjaW5nIChNZW4gICA6IE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyIDogQ29sdW1uX1Bvc2l0aW9uIDo9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFJvdyAgIDogTGluZV9Qb3NpdGlvbiAgIDo9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgIENvbCAgIDogQ29sdW1uX1Bvc2l0aW9uIDo9IDApCiAgICBpcwogICAgICAgZnVuY3Rpb24gU2V0X1NwYWNpbmcgKE1lbiAgICAgOiBNZW51OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQsIFIsIEMgOiBDX0ludCkgcmV0dXJuIENfSW50OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQsIFIsIEMgOiBDX0ludCkgcmV0dXJuIEV0aV9FcnJvcjsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNldF9TcGFjaW5nLCAic2V0X21lbnVfc3BhY2luZyIpOwogCi0gICAgICBSZXMgOiBjb25zdGFudCBFdGlfRXJyb3IgOj0gU2V0X1NwYWNpbmcgKE1lbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ19JbnQgKERlc2NyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ19JbnQgKFJvdyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENfSW50IChDb2wpKTsKICAgIGJlZ2luCi0gICAgICBpZiBSZXMgLz0gRV9PayB0aGVuCi0gICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOwotICAgICAgZW5kIGlmOworICAgICAgRXRpX0V4Y2VwdGlvbiAoU2V0X1NwYWNpbmcgKE1lbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDX0ludCAoRGVzY3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENfSW50IChSb3cpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENfSW50IChDb2wpKSk7CiAgICBlbmQgU2V0X1NwYWNpbmc7CiAKLSAgIHByb2NlZHVyZSBTcGFjaW5nIChNZW4gICA6IGluIE1lbnU7CisgICBwcm9jZWR1cmUgU3BhY2luZyAoTWVuICAgOiBNZW51OwogICAgICAgICAgICAgICAgICAgICAgIERlc2NyIDogb3V0IENvbHVtbl9Qb3NpdGlvbjsKICAgICAgICAgICAgICAgICAgICAgICBSb3cgICA6IG91dCBMaW5lX1Bvc2l0aW9uOwogICAgICAgICAgICAgICAgICAgICAgIENvbCAgIDogb3V0IENvbHVtbl9Qb3NpdGlvbikKICAgIGlzCiAgICAgICB0eXBlIENfSW50X0FjY2VzcyBpcyBhY2Nlc3MgYWxsIENfSW50OwogICAgICAgZnVuY3Rpb24gR2V0X1NwYWNpbmcgKE1lbiAgICAgOiBNZW51OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQsIFIsIEMgOiBDX0ludF9BY2Nlc3MpIHJldHVybiBDX0ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBELCBSLCBDIDogQ19JbnRfQWNjZXNzKSByZXR1cm4gRXRpX0Vycm9yOwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgR2V0X1NwYWNpbmcsICJtZW51X3NwYWNpbmciKTsKIAogICAgICAgRCwgUiwgQyA6IGFsaWFzZWQgQ19JbnQ7Ci0gICAgICBSZXMgOiBjb25zdGFudCBFdGlfRXJyb3IgOj0gR2V0X1NwYWNpbmcgKE1lbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRCdBY2Nlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFInQWNjZXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDJ0FjY2Vzcyk7CiAgICBiZWdpbgotICAgICAgaWYgUmVzIC89IEVfT2sgdGhlbgotICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKLSAgICAgIGVsc2UKLSAgICAgICAgIERlc2NyIDo9IENvbHVtbl9Qb3NpdGlvbiAoRCk7Ci0gICAgICAgICBSb3cgICA6PSBMaW5lX1Bvc2l0aW9uIChSKTsKLSAgICAgICAgIENvbCAgIDo9IENvbHVtbl9Qb3NpdGlvbiAoQyk7Ci0gICAgICBlbmQgaWY7CisgICAgICBFdGlfRXhjZXB0aW9uIChHZXRfU3BhY2luZyAoTWVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQnQWNjZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFInQWNjZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMnQWNjZXNzKSk7CisgICAgICBEZXNjciA6PSBDb2x1bW5fUG9zaXRpb24gKEQpOworICAgICAgUm93ICAgOj0gTGluZV9Qb3NpdGlvbiAoUik7CisgICAgICBDb2wgICA6PSBDb2x1bW5fUG9zaXRpb24gKEMpOwogICAgZW5kIFNwYWNpbmc7CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBmdW5jdGlvbiBTZXRfUGF0dGVybiAoTWVuICA6IE1lbnU7CkBAIC03MzQsNyArNjQxLDcgQEAKICAgIGlzCiAgICAgICB0eXBlIENoYXJfUHRyIGlzIGFjY2VzcyBhbGwgSW50ZXJmYWNlcy5DLmNoYXI7CiAgICAgICBmdW5jdGlvbiBTZXRfUGF0dGVybiAoTWVuICAgICA6IE1lbnU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUGF0dGVybiA6IENoYXJfUHRyKSByZXR1cm4gQ19JbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGF0dGVybiA6IENoYXJfUHRyKSByZXR1cm4gRXRpX0Vycm9yOwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X1BhdHRlcm4sICJzZXRfbWVudV9wYXR0ZXJuIik7CiAKICAgICAgIFMgICA6IGNoYXJfYXJyYXkgKDAgLi4gVGV4dCdMZW5ndGgpOwpAQCAtNzQ0LDE1ICs2NTEsMTUgQEAKICAgICAgIFRvX0MgKFRleHQsIFMsIEwpOwogICAgICAgUmVzIDo9IFNldF9QYXR0ZXJuIChNZW4sIFMgKFMnRmlyc3QpJ0FjY2Vzcyk7CiAgICAgICBjYXNlIFJlcyBpcwotICAgICAgICAgd2hlbiBFX05vX01hdGNoID0+IHJldHVybiBGYWxzZTsKLSAgICAgICAgIHdoZW4gRV9PayAgICAgICA9PiByZXR1cm4gVHJ1ZTsKKyAgICAgICAgIHdoZW4gRV9Ob19NYXRjaCA9PgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlOwogICAgICAgICAgd2hlbiBvdGhlcnMgPT4KICAgICAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2U7CisgICAgICAgICAgICByZXR1cm4gVHJ1ZTsKICAgICAgIGVuZCBjYXNlOwogICAgZW5kIFNldF9QYXR0ZXJuOwogCi0gICBwcm9jZWR1cmUgUGF0dGVybiAoTWVuICA6IGluICBNZW51OworICAgcHJvY2VkdXJlIFBhdHRlcm4gKE1lbiAgOiBNZW51OwogICAgICAgICAgICAgICAgICAgICAgIFRleHQgOiBvdXQgU3RyaW5nKQogICAgaXMKICAgICAgIGZ1bmN0aW9uIEdldF9QYXR0ZXJuIChNZW4gOiBNZW51KSByZXR1cm4gY2hhcnNfcHRyOwpAQCAtNzYxLDk4ICs2NjgsODAgQEAKICAgICAgIEZpbGxfU3RyaW5nIChHZXRfUGF0dGVybiAoTWVuKSwgVGV4dCk7CiAgICBlbmQgUGF0dGVybjsKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgIHByb2NlZHVyZSBTZXRfRm9ybWF0IChNZW4gICAgIDogaW4gTWVudTsKLSAgICAgICAgICAgICAgICAgICAgICAgICBMaW5lcyAgIDogaW4gTGluZV9Db3VudDsKLSAgICAgICAgICAgICAgICAgICAgICAgICBDb2x1bW5zIDogaW4gQ29sdW1uX0NvdW50KQorICAgcHJvY2VkdXJlIFNldF9Gb3JtYXQgKE1lbiAgICAgOiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgIExpbmVzICAgOiBMaW5lX0NvdW50OworICAgICAgICAgICAgICAgICAgICAgICAgIENvbHVtbnMgOiBDb2x1bW5fQ291bnQpCiAgICBpcwogICAgICAgZnVuY3Rpb24gU2V0X01lbnVfRm10IChNZW4gOiBNZW51OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaW4gOiBDX0ludDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sIDogQ19JbnQpIHJldHVybiBDX0ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sIDogQ19JbnQpIHJldHVybiBFdGlfRXJyb3I7CiAgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTZXRfTWVudV9GbXQsICJzZXRfbWVudV9mb3JtYXQiKTsKIAotICAgICAgUmVzIDogY29uc3RhbnQgRXRpX0Vycm9yIDo9IFNldF9NZW51X0ZtdCAoTWVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ19JbnQgKExpbmVzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENfSW50IChDb2x1bW5zKSk7CiAgICBiZWdpbgotICAgICAgaWYgIFJlcyAvPSBFX09rIHRoZW4KLSAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7Ci0gICAgICBlbmQgaWY7CisgICAgICBFdGlfRXhjZXB0aW9uIChTZXRfTWVudV9GbXQgKE1lbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ19JbnQgKExpbmVzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ19JbnQgKENvbHVtbnMpKSk7CisKICAgIGVuZCBTZXRfRm9ybWF0OwogCi0gICBwcm9jZWR1cmUgRm9ybWF0IChNZW4gICAgIDogaW4gIE1lbnU7CisgICBwcm9jZWR1cmUgRm9ybWF0IChNZW4gICAgIDogTWVudTsKICAgICAgICAgICAgICAgICAgICAgIExpbmVzICAgOiBvdXQgTGluZV9Db3VudDsKICAgICAgICAgICAgICAgICAgICAgIENvbHVtbnMgOiBvdXQgQ29sdW1uX0NvdW50KQogICAgaXMKICAgICAgIHR5cGUgQ19JbnRfQWNjZXNzIGlzIGFjY2VzcyBhbGwgQ19JbnQ7CiAgICAgICBmdW5jdGlvbiBNZW51X0ZtdCAoTWVuICA6IE1lbnU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgWSwgWCA6IENfSW50X0FjY2VzcykgcmV0dXJuIENfSW50OworICAgICAgICAgICAgICAgICAgICAgICAgIFksIFggOiBDX0ludF9BY2Nlc3MpIHJldHVybiBFdGlfRXJyb3I7CiAgICAgICBwcmFnbWEgSW1wb3J0IChDLCBNZW51X0ZtdCwgIm1lbnVfZm9ybWF0Iik7CiAKICAgICAgIEwsIEMgOiBhbGlhc2VkIENfSW50OwotICAgICAgUmVzICA6IGNvbnN0YW50IEV0aV9FcnJvciA6PSBNZW51X0ZtdCAoTWVuLCBMJ0FjY2VzcywgQydBY2Nlc3MpOwogICAgYmVnaW4KLSAgICAgIGlmIFJlcyAvPSBFX09rIHRoZW4KLSAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7Ci0gICAgICBlbHNlCi0gICAgICAgICBMaW5lcyAgIDo9IExpbmVfQ291bnQgKEwpOwotICAgICAgICAgQ29sdW1ucyA6PSBDb2x1bW5fQ291bnQgKEMpOwotICAgICAgZW5kIGlmOworICAgICAgRXRpX0V4Y2VwdGlvbiAoTWVudV9GbXQgKE1lbiwgTCdBY2Nlc3MsIEMnQWNjZXNzKSk7CisgICAgICBMaW5lcyAgIDo9IExpbmVfQ291bnQgKEwpOworICAgICAgQ29sdW1ucyA6PSBDb2x1bW5fQ291bnQgKEMpOwogICAgZW5kIEZvcm1hdDsKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgIHByb2NlZHVyZSBTZXRfSXRlbV9Jbml0X0hvb2sgKE1lbiAgOiBpbiBNZW51OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYyA6IGluIE1lbnVfSG9va19GdW5jdGlvbikKKyAgIHByb2NlZHVyZSBTZXRfSXRlbV9Jbml0X0hvb2sgKE1lbiAgOiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYyA6IE1lbnVfSG9va19GdW5jdGlvbikKICAgIGlzCiAgICAgICBmdW5jdGlvbiBTZXRfSXRlbV9Jbml0IChNZW4gIDogTWVudTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2MgOiBNZW51X0hvb2tfRnVuY3Rpb24pIHJldHVybiBDX0ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2MgOiBNZW51X0hvb2tfRnVuY3Rpb24pIHJldHVybiBFdGlfRXJyb3I7CiAgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTZXRfSXRlbV9Jbml0LCAic2V0X2l0ZW1faW5pdCIpOwogCi0gICAgICBSZXMgOiBjb25zdGFudCBFdGlfRXJyb3IgOj0gU2V0X0l0ZW1fSW5pdCAoTWVuLCBQcm9jKTsKICAgIGJlZ2luCi0gICAgICBpZiAgUmVzIC89IEVfT2sgdGhlbgotICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKLSAgICAgIGVuZCBpZjsKKyAgICAgIEV0aV9FeGNlcHRpb24gKFNldF9JdGVtX0luaXQgKE1lbiwgUHJvYykpOwogICAgZW5kIFNldF9JdGVtX0luaXRfSG9vazsKIAotICAgcHJvY2VkdXJlIFNldF9JdGVtX1Rlcm1fSG9vayAoTWVuICA6IGluIE1lbnU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jIDogaW4gTWVudV9Ib29rX0Z1bmN0aW9uKQorICAgcHJvY2VkdXJlIFNldF9JdGVtX1Rlcm1fSG9vayAoTWVuICA6IE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jIDogTWVudV9Ib29rX0Z1bmN0aW9uKQogICAgaXMKICAgICAgIGZ1bmN0aW9uIFNldF9JdGVtX1Rlcm0gKE1lbiAgOiBNZW51OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYyA6IE1lbnVfSG9va19GdW5jdGlvbikgcmV0dXJuIENfSW50OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYyA6IE1lbnVfSG9va19GdW5jdGlvbikgcmV0dXJuIEV0aV9FcnJvcjsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNldF9JdGVtX1Rlcm0sICJzZXRfaXRlbV90ZXJtIik7CiAKLSAgICAgIFJlcyA6IGNvbnN0YW50IEV0aV9FcnJvciA6PSBTZXRfSXRlbV9UZXJtIChNZW4sIFByb2MpOwogICAgYmVnaW4KLSAgICAgIGlmIFJlcyAvPSBFX09rIHRoZW4KLSAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7Ci0gICAgICBlbmQgaWY7CisgICAgICBFdGlfRXhjZXB0aW9uIChTZXRfSXRlbV9UZXJtIChNZW4sIFByb2MpKTsKICAgIGVuZCBTZXRfSXRlbV9UZXJtX0hvb2s7CiAKLSAgIHByb2NlZHVyZSBTZXRfTWVudV9Jbml0X0hvb2sgKE1lbiAgOiBpbiBNZW51OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYyA6IGluIE1lbnVfSG9va19GdW5jdGlvbikKKyAgIHByb2NlZHVyZSBTZXRfTWVudV9Jbml0X0hvb2sgKE1lbiAgOiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYyA6IE1lbnVfSG9va19GdW5jdGlvbikKICAgIGlzCiAgICAgICBmdW5jdGlvbiBTZXRfTWVudV9Jbml0IChNZW4gIDogTWVudTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2MgOiBNZW51X0hvb2tfRnVuY3Rpb24pIHJldHVybiBDX0ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2MgOiBNZW51X0hvb2tfRnVuY3Rpb24pIHJldHVybiBFdGlfRXJyb3I7CiAgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTZXRfTWVudV9Jbml0LCAic2V0X21lbnVfaW5pdCIpOwogCi0gICAgICBSZXMgOiBjb25zdGFudCBFdGlfRXJyb3IgOj0gU2V0X01lbnVfSW5pdCAoTWVuLCBQcm9jKTsKICAgIGJlZ2luCi0gICAgICBpZiAgUmVzIC89IEVfT2sgdGhlbgotICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKLSAgICAgIGVuZCBpZjsKKyAgICAgIEV0aV9FeGNlcHRpb24gKFNldF9NZW51X0luaXQgKE1lbiwgUHJvYykpOwogICAgZW5kIFNldF9NZW51X0luaXRfSG9vazsKIAotICAgcHJvY2VkdXJlIFNldF9NZW51X1Rlcm1fSG9vayAoTWVuICA6IGluIE1lbnU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jIDogaW4gTWVudV9Ib29rX0Z1bmN0aW9uKQorICAgcHJvY2VkdXJlIFNldF9NZW51X1Rlcm1fSG9vayAoTWVuICA6IE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jIDogTWVudV9Ib29rX0Z1bmN0aW9uKQogICAgaXMKICAgICAgIGZ1bmN0aW9uIFNldF9NZW51X1Rlcm0gKE1lbiAgOiBNZW51OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYyA6IE1lbnVfSG9va19GdW5jdGlvbikgcmV0dXJuIENfSW50OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYyA6IE1lbnVfSG9va19GdW5jdGlvbikgcmV0dXJuIEV0aV9FcnJvcjsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNldF9NZW51X1Rlcm0sICJzZXRfbWVudV90ZXJtIik7CiAKLSAgICAgIFJlcyA6IGNvbnN0YW50IEV0aV9FcnJvciA6PSBTZXRfTWVudV9UZXJtIChNZW4sIFByb2MpOwogICAgYmVnaW4KLSAgICAgIGlmIFJlcyAvPSBFX09rIHRoZW4KLSAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7Ci0gICAgICBlbmQgaWY7CisgICAgICBFdGlfRXhjZXB0aW9uIChTZXRfTWVudV9UZXJtIChNZW4sIFByb2MpKTsKICAgIGVuZCBTZXRfTWVudV9UZXJtX0hvb2s7CiAKICAgIGZ1bmN0aW9uIEdldF9JdGVtX0luaXRfSG9vayAoTWVuIDogTWVudSkgcmV0dXJuIE1lbnVfSG9va19GdW5jdGlvbgpAQCAtODg3LDIzICs3NzYsMTkgQEAKICAgICAgIHJldHVybiBNZW51X1Rlcm0gKE1lbik7CiAgICBlbmQgR2V0X01lbnVfVGVybV9Ib29rOwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgcHJvY2VkdXJlIFJlZGVmaW5lIChNZW4gICA6IGluIE1lbnU7Ci0gICAgICAgICAgICAgICAgICAgICAgIEl0ZW1zIDogaW4gSXRlbV9BcnJheV9BY2Nlc3MpCisgICBwcm9jZWR1cmUgUmVkZWZpbmUgKE1lbiAgIDogTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgSXRlbXMgOiBJdGVtX0FycmF5X0FjY2VzcykKICAgIGlzCiAgICAgICBmdW5jdGlvbiBTZXRfSXRlbXMgKE1lbiAgIDogTWVudTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgSXRlbXMgOiBTeXN0ZW0uQWRkcmVzcykgcmV0dXJuIENfSW50OworICAgICAgICAgICAgICAgICAgICAgICAgICBJdGVtcyA6IFN5c3RlbS5BZGRyZXNzKSByZXR1cm4gRXRpX0Vycm9yOwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X0l0ZW1zLCAic2V0X21lbnVfaXRlbXMiKTsKIAotICAgICAgUmVzIDogRXRpX0Vycm9yOwogICAgYmVnaW4KLSAgICAgIHByYWdtYSBBc3NlcnQgKEl0ZW1zIChJdGVtcydMYXN0KSA9IE51bGxfSXRlbSk7Ci0gICAgICBpZiBJdGVtcyAoSXRlbXMnTGFzdCkgLz0gTnVsbF9JdGVtIHRoZW4KKyAgICAgIHByYWdtYSBBc3NlcnQgKEl0ZW1zLmFsbCAoSXRlbXMnTGFzdCkgPSBOdWxsX0l0ZW0pOworICAgICAgaWYgSXRlbXMuYWxsIChJdGVtcydMYXN0KSAvPSBOdWxsX0l0ZW0gdGhlbgogICAgICAgICAgcmFpc2UgTWVudV9FeGNlcHRpb247CiAgICAgICBlbHNlCi0gICAgICAgICBSZXMgOj0gU2V0X0l0ZW1zIChNZW4sIEl0ZW1zLmFsbCdBZGRyZXNzKTsKLSAgICAgICAgIGlmICBSZXMgLz0gRV9PayB0aGVuCi0gICAgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOwotICAgICAgICAgZW5kIGlmOworICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoU2V0X0l0ZW1zIChNZW4sIEl0ZW1zLmFsbCdBZGRyZXNzKSk7CiAgICAgICBlbmQgaWY7CiAgICBlbmQgUmVkZWZpbmU7CiAKQEAgLTk0MSw4ICs4MjYsOCBAQAogCiAgICAgICBNICAgOiBNZW51OwogICAgYmVnaW4KLSAgICAgIHByYWdtYSBBc3NlcnQgKEl0ZW1zIChJdGVtcydMYXN0KSA9IE51bGxfSXRlbSk7Ci0gICAgICBpZiBJdGVtcyAoSXRlbXMnTGFzdCkgLz0gTnVsbF9JdGVtIHRoZW4KKyAgICAgIHByYWdtYSBBc3NlcnQgKEl0ZW1zLmFsbCAoSXRlbXMnTGFzdCkgPSBOdWxsX0l0ZW0pOworICAgICAgaWYgSXRlbXMuYWxsIChJdGVtcydMYXN0KSAvPSBOdWxsX0l0ZW0gdGhlbgogICAgICAgICAgcmFpc2UgTWVudV9FeGNlcHRpb247CiAgICAgICBlbHNlCiAgICAgICAgICBNIDo9IE5ld21lbnUgKEl0ZW1zLmFsbCdBZGRyZXNzKTsKQEAgLTk1NSwxNCArODQwLDExIEBACiAKICAgIHByb2NlZHVyZSBEZWxldGUgKE1lbiA6IGluIG91dCBNZW51KQogICAgaXMKLSAgICAgIGZ1bmN0aW9uIEZyZWUgKE1lbiA6IE1lbnUpIHJldHVybiBDX0ludDsKKyAgICAgIGZ1bmN0aW9uIEZyZWUgKE1lbiA6IE1lbnUpIHJldHVybiBFdGlfRXJyb3I7CiAgICAgICBwcmFnbWEgSW1wb3J0IChDLCBGcmVlLCAiZnJlZV9tZW51Iik7CiAKLSAgICAgIFJlcyA6IGNvbnN0YW50IEV0aV9FcnJvciA6PSBGcmVlIChNZW4pOwogICAgYmVnaW4KLSAgICAgIGlmIFJlcyAvPSBFX09rIHRoZW4KLSAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7Ci0gICAgICBlbmQgaWY7CisgICAgICBFdGlfRXhjZXB0aW9uIChGcmVlIChNZW4pKTsKICAgICAgIE1lbiA6PSBOdWxsX01lbnU7CiAgICBlbmQgRGVsZXRlOwogCkBAIC05NzEsMzQgKzg1MywzNCBAQAogICAgICAgICAgICAgICAgICAgICBLZXkgOiBLZXlfQ29kZSkgcmV0dXJuIERyaXZlcl9SZXN1bHQKICAgIGlzCiAgICAgICBmdW5jdGlvbiBEcml2ZXIgKE1lbiA6IE1lbnU7Ci0gICAgICAgICAgICAgICAgICAgICAgIEtleSA6IENfSW50KSByZXR1cm4gQ19JbnQ7CisgICAgICAgICAgICAgICAgICAgICAgIEtleSA6IENfSW50KSByZXR1cm4gRXRpX0Vycm9yOwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgRHJpdmVyLCAibWVudV9kcml2ZXIiKTsKIAogICAgICAgUiA6IGNvbnN0YW50IEV0aV9FcnJvciA6PSBEcml2ZXIgKE1lbiwgQ19JbnQgKEtleSkpOwogICAgYmVnaW4KLSAgICAgIGlmIFIgLz0gRV9PayB0aGVuCi0gICAgICAgICBjYXNlIFIgaXMKLSAgICAgICAgICAgIHdoZW4gRV9Vbmtub3duX0NvbW1hbmQgID0+IHJldHVybiBVbmtub3duX1JlcXVlc3Q7Ci0gICAgICAgICAgICB3aGVuIEVfTm9fTWF0Y2ggICAgICAgICA9PiByZXR1cm4gTm9fTWF0Y2g7Ci0gICAgICAgICAgICB3aGVuIEVfUmVxdWVzdF9EZW5pZWQgfAotICAgICAgICAgICAgICAgICBFX05vdF9TZWxlY3RhYmxlICAgPT4gcmV0dXJuIFJlcXVlc3RfRGVuaWVkOwotICAgICAgICAgICAgd2hlbiBvdGhlcnMgPT4KLSAgICAgICAgICAgICAgIEV0aV9FeGNlcHRpb24gKFIpOwotICAgICAgICAgZW5kIGNhc2U7Ci0gICAgICBlbmQgaWY7Ci0gICAgICByZXR1cm4gTWVudV9PazsKKyAgICAgIGNhc2UgUiBpcworICAgICAgICAgd2hlbiBFX1Vua25vd25fQ29tbWFuZCA9PgorICAgICAgICAgICAgcmV0dXJuIFVua25vd25fUmVxdWVzdDsKKyAgICAgICAgIHdoZW4gRV9Ob19NYXRjaCA9PgorICAgICAgICAgICAgcmV0dXJuIE5vX01hdGNoOworICAgICAgICAgd2hlbiBFX1JlcXVlc3RfRGVuaWVkIHwgRV9Ob3RfU2VsZWN0YWJsZSA9PgorICAgICAgICAgICAgcmV0dXJuIFJlcXVlc3RfRGVuaWVkOworICAgICAgICAgd2hlbiBvdGhlcnMgPT4KKyAgICAgICAgICAgIEV0aV9FeGNlcHRpb24gKFIpOworICAgICAgICAgICAgcmV0dXJuIE1lbnVfT2s7CisgICAgICBlbmQgY2FzZTsKICAgIGVuZCBEcml2ZXI7CiAKICAgIHByb2NlZHVyZSBGcmVlIChJQSAgICAgICAgIDogaW4gb3V0IEl0ZW1fQXJyYXlfQWNjZXNzOwotICAgICAgICAgICAgICAgICAgIEZyZWVfSXRlbXMgOiBpbiBCb29sZWFuIDo9IEZhbHNlKQorICAgICAgICAgICAgICAgICAgIEZyZWVfSXRlbXMgOiBCb29sZWFuIDo9IEZhbHNlKQogICAgaXMKICAgICAgIHByb2NlZHVyZSBSZWxlYXNlIGlzIG5ldyBBZGEuVW5jaGVja2VkX0RlYWxsb2NhdGlvbgogICAgICAgICAoSXRlbV9BcnJheSwgSXRlbV9BcnJheV9BY2Nlc3MpOwogICAgYmVnaW4KICAgICAgIGlmIElBIC89IG51bGwgYW5kIHRoZW4gRnJlZV9JdGVtcyB0aGVuCiAgICAgICAgICBmb3IgSSBpbiBJQSdGaXJzdCAuLiAoSUEnTGFzdCAtIDEpIGxvb3AKLSAgICAgICAgICAgIGlmIElBIChJKSAvPSBOdWxsX0l0ZW0gdGhlbgotICAgICAgICAgICAgICAgRGVsZXRlIChJQSAoSSkpOworICAgICAgICAgICAgaWYgSUEuYWxsIChJKSAvPSBOdWxsX0l0ZW0gdGhlbgorICAgICAgICAgICAgICAgRGVsZXRlIChJQS5hbGwgKEkpKTsKICAgICAgICAgICAgIGVuZCBpZjsKICAgICAgICAgIGVuZCBsb29wOwogICAgICAgZW5kIGlmOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2UuYWRiIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2UuYWRiCmluZGV4IGZhNGM2OWQuLjdhNjA3NWMgMTAwNjQ0Ci0tLSBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlLmFkYgorKysgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZS5hZGIKQEAgLTcsNyArNyw3IEBACiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNCwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OC0yMDA5LDIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KIC0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQpAQCAtMzUsOCArMzUsOCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CiAtLSAgVmVyc2lvbiBDb250cm9sOgotLS0gICRSZXZpc2lvbjogMS4yMiAkCi0tLSAgJERhdGU6IDIwMDgvMDcvMjYgMTg6NTE6MTEgJAorLS0gICRSZXZpc2lvbjogMS4yNSAkCistLSAgJERhdGU6IDIwMTQvMDkvMTMgMTk6MTA6MTggJAogLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuQXV4OyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5BdXg7CkBAIC01MCw3ICs1MCw3IEBACiAgICBmdW5jdGlvbiBIYXNfTW91c2UgcmV0dXJuIEJvb2xlYW4KICAgIGlzCiAgICAgICBmdW5jdGlvbiBNb3VzZV9BdmFpbCByZXR1cm4gQ19JbnQ7Ci0gICAgICBwcmFnbWEgSW1wb3J0IChDLCBNb3VzZV9BdmFpbCwgIl9uY19oYXNfbW91c2UiKTsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIE1vdXNlX0F2YWlsLCAiaGFzX21vdXNlIik7CiAgICBiZWdpbgogICAgICAgaWYgSGFzX0tleSAoS2V5X01vdXNlKSBvciBlbHNlIE1vdXNlX0F2YWlsIC89IDAgdGhlbgogICAgICAgICAgcmV0dXJuIFRydWU7CkBAIC03NCw4ICs3NCw4IEBACiAgICAgICByZXR1cm4gRXZlbnQ7CiAgICBlbmQgR2V0X01vdXNlOwogCi0gICBwcm9jZWR1cmUgUmVnaXN0ZXJfUmVwb3J0YWJsZV9FdmVudCAoQnV0dG9uIDogaW4gTW91c2VfQnV0dG9uOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlICA6IGluIEJ1dHRvbl9TdGF0ZTsKKyAgIHByb2NlZHVyZSBSZWdpc3Rlcl9SZXBvcnRhYmxlX0V2ZW50IChCdXR0b24gOiBNb3VzZV9CdXR0b247CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgIDogQnV0dG9uX1N0YXRlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hc2sgICA6IGluIG91dCBFdmVudF9NYXNrKQogICAgaXMKICAgICAgIEJ1dHRvbl9OciA6IGNvbnN0YW50IE5hdHVyYWwgOj0gTW91c2VfQnV0dG9uJ1BvcyAoQnV0dG9uKTsKQEAgLTkyLDggKzkyLDggQEAKICAgICAgIGVuZCBpZjsKICAgIGVuZCBSZWdpc3Rlcl9SZXBvcnRhYmxlX0V2ZW50OwogCi0gICBwcm9jZWR1cmUgUmVnaXN0ZXJfUmVwb3J0YWJsZV9FdmVudHMgKEJ1dHRvbiA6IGluIE1vdXNlX0J1dHRvbjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgIDogaW4gQnV0dG9uX1N0YXRlczsKKyAgIHByb2NlZHVyZSBSZWdpc3Rlcl9SZXBvcnRhYmxlX0V2ZW50cyAoQnV0dG9uIDogTW91c2VfQnV0dG9uOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSAgOiBCdXR0b25fU3RhdGVzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXNrICAgOiBpbiBvdXQgRXZlbnRfTWFzaykKICAgIGlzCiAgICBiZWdpbgpAQCAtMTIwLDcgKzEyMCw3IEBACiAgICAgICByZXR1cm4gT2xkOwogICAgZW5kIFN0YXJ0X01vdXNlOwogCi0gICBwcm9jZWR1cmUgRW5kX01vdXNlIChNYXNrIDogaW4gRXZlbnRfTWFzayA6PSBOb19FdmVudHMpCisgICBwcm9jZWR1cmUgRW5kX01vdXNlIChNYXNrIDogRXZlbnRfTWFzayA6PSBOb19FdmVudHMpCiAgICBpcwogICAgYmVnaW4KICAgICAgIGlmIE1hc2sgLz0gTm9fRXZlbnRzIHRoZW4KQEAgLTEyOCwxMSArMTI4LDExIEBACiAgICAgICBlbmQgaWY7CiAgICBlbmQgRW5kX01vdXNlOwogCi0gICBwcm9jZWR1cmUgRGlzcGF0Y2hfRXZlbnQgKE1hc2sgICA6IGluICBFdmVudF9NYXNrOworICAgcHJvY2VkdXJlIERpc3BhdGNoX0V2ZW50IChNYXNrICAgOiBFdmVudF9NYXNrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdXR0b24gOiBvdXQgTW91c2VfQnV0dG9uOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSAgOiBvdXQgQnV0dG9uX1N0YXRlKTsKIAotICAgcHJvY2VkdXJlIERpc3BhdGNoX0V2ZW50IChNYXNrICAgOiBpbiAgRXZlbnRfTWFzazsKKyAgIHByb2NlZHVyZSBEaXNwYXRjaF9FdmVudCAoTWFzayAgIDogRXZlbnRfTWFzazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnV0dG9uIDogb3V0IE1vdXNlX0J1dHRvbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgIDogb3V0IEJ1dHRvbl9TdGF0ZSkgaXMKICAgICAgIEwgOiBFdmVudF9NYXNrOwpAQCAtMTY4LDcgKzE2OCw3IEBACiAgICAgICBlbmQgaWY7CiAgICBlbmQgRGlzcGF0Y2hfRXZlbnQ7CiAKLSAgIHByb2NlZHVyZSBHZXRfRXZlbnQgKEV2ZW50ICA6IGluICBNb3VzZV9FdmVudDsKKyAgIHByb2NlZHVyZSBHZXRfRXZlbnQgKEV2ZW50ICA6IE1vdXNlX0V2ZW50OwogICAgICAgICAgICAgICAgICAgICAgICAgWSAgICAgIDogb3V0IExpbmVfUG9zaXRpb247CiAgICAgICAgICAgICAgICAgICAgICAgICBYICAgICAgOiBvdXQgQ29sdW1uX1Bvc2l0aW9uOwogICAgICAgICAgICAgICAgICAgICAgICAgQnV0dG9uIDogb3V0IE1vdXNlX0J1dHRvbjsKQEAgLTE4MSw3ICsxODEsNyBAQAogICAgICAgRGlzcGF0Y2hfRXZlbnQgKE1hc2ssIEJ1dHRvbiwgU3RhdGUpOwogICAgZW5kIEdldF9FdmVudDsKIAotICAgcHJvY2VkdXJlIFVuZ2V0X01vdXNlIChFdmVudCA6IGluIE1vdXNlX0V2ZW50KQorICAgcHJvY2VkdXJlIFVuZ2V0X01vdXNlIChFdmVudCA6IE1vdXNlX0V2ZW50KQogICAgaXMKICAgICAgIGZ1bmN0aW9uIFVuZ2V0bW91c2UgKEV2IDogTW91c2VfRXZlbnQpIHJldHVybiBDX0ludDsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFVuZ2V0bW91c2UsICJ1bmdldG1vdXNlIik7CkBAIC0xOTksNyArMTk5LDggQEAKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFdlbmNsb3NlLCAid2VuY2xvc2UiKTsKICAgIGJlZ2luCiAgICAgICBpZiBXZW5jbG9zZSAoV2luLCBDX0ludCAoRXZlbnQuWSksIENfSW50IChFdmVudC5YKSkKLSAgICAgICAgPSBDdXJzZXNfQm9vbF9GYWxzZSB0aGVuCisgICAgICAgID0gQ3Vyc2VzX0Jvb2xfRmFsc2UKKyAgICAgIHRoZW4KICAgICAgICAgIHJldHVybiBGYWxzZTsKICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiBUcnVlOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YS5hZGIgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMtdXNlcl9kYXRhLmFkYgppbmRleCAyMzFlZmFlLi5kODU1ZjU0IDEwMDY0NAotLS0gYS9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMtdXNlcl9kYXRhLmFkYgorKysgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMtdXNlcl9kYXRhLmFkYgpAQCAtNyw3ICs3LDcgQEAKIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQogLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCkBAIC0zNSw3ICszNSw3IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKIC0tICBWZXJzaW9uIENvbnRyb2w6Ci0tLSAgJFJldmlzaW9uOiAxLjExICQKKy0tICAkUmV2aXNpb246IDEuMTIgJAogLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB3aXRoIEludGVyZmFjZXMuQzsKQEAgLTQ4LDggKzQ4LDggQEAKIAogICAgdXNlIHR5cGUgSW50ZXJmYWNlcy5DLmludDsKIAotICAgcHJvY2VkdXJlIFNldF9Vc2VyX0RhdGEgKFBhbiAgOiBpbiBQYW5lbDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhIDogaW4gVXNlcl9BY2Nlc3MpCisgICBwcm9jZWR1cmUgU2V0X1VzZXJfRGF0YSAoUGFuICA6IFBhbmVsOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgOiBVc2VyX0FjY2VzcykKICAgIGlzCiAgICAgICBmdW5jdGlvbiBTZXRfUGFuZWxfVXNlcnB0ciAoUGFuICA6IFBhbmVsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHIgOiBVc2VyX0FjY2VzcykgcmV0dXJuIENfSW50OwpAQCAtNjAsNyArNjAsNyBAQAogICAgICAgZW5kIGlmOwogICAgZW5kIFNldF9Vc2VyX0RhdGE7CiAKLSAgIGZ1bmN0aW9uIEdldF9Vc2VyX0RhdGEgKFBhbiAgOiBpbiAgUGFuZWwpIHJldHVybiBVc2VyX0FjY2VzcworICAgZnVuY3Rpb24gR2V0X1VzZXJfRGF0YSAoUGFuICA6IFBhbmVsKSByZXR1cm4gVXNlcl9BY2Nlc3MKICAgIGlzCiAgICAgICBmdW5jdGlvbiBQYW5lbF9Vc2VycHRyIChQYW4gOiBQYW5lbCkgcmV0dXJuIFVzZXJfQWNjZXNzOwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgUGFuZWxfVXNlcnB0ciwgInBhbmVsX3VzZXJwdHIiKTsKQEAgLTY4LDcgKzY4LDcgQEAKICAgICAgIHJldHVybiBQYW5lbF9Vc2VycHRyIChQYW4pOwogICAgZW5kIEdldF9Vc2VyX0RhdGE7CiAKLSAgIHByb2NlZHVyZSBHZXRfVXNlcl9EYXRhIChQYW4gIDogaW4gIFBhbmVsOworICAgcHJvY2VkdXJlIEdldF9Vc2VyX0RhdGEgKFBhbiAgOiBQYW5lbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhIDogb3V0IFVzZXJfQWNjZXNzKQogICAgaXMKICAgIGJlZ2luCmRpZmYgLS1naXQgYS9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMuYWRiIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLmFkYgppbmRleCBkN2UxOGZhLi44NGUyOWU1IDEwMDY0NAotLS0gYS9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMuYWRiCisrKyBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy5hZGIKQEAgLTcsNyArNyw3IEBACiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OC0yMDA0LDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KIC0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQpAQCAtMzUsOCArMzUsOCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CiAtLSAgVmVyc2lvbiBDb250cm9sOgotLS0gICRSZXZpc2lvbjogMS4xMyAkCi0tLSAgJERhdGU6IDIwMDQvMDgvMjEgMjE6Mzc6MDAgJAorLS0gICRSZXZpc2lvbjogMS4xNCAkCistLSAgJERhdGU6IDIwMDkvMTIvMjYgMTc6Mzg6NTggJAogLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuQXV4OyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5BdXg7CkBAIC02MCw3ICs2MCw3IEBACiAgICAgICByZXR1cm4gUGFuOwogICAgZW5kIENyZWF0ZTsKIAotICAgcHJvY2VkdXJlIEJvdHRvbSAoUGFuIDogaW4gUGFuZWwpCisgICBwcm9jZWR1cmUgQm90dG9tIChQYW4gOiBQYW5lbCkKICAgIGlzCiAgICAgICBmdW5jdGlvbiBCb3R0b21wYW5lbCAoUGFuIDogUGFuZWwpIHJldHVybiBDX0ludDsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEJvdHRvbXBhbmVsLCAiYm90dG9tX3BhbmVsIik7CkBAIC03MCw3ICs3MCw3IEBACiAgICAgICBlbmQgaWY7CiAgICBlbmQgQm90dG9tOwogCi0gICBwcm9jZWR1cmUgVG9wIChQYW4gOiBpbiBQYW5lbCkKKyAgIHByb2NlZHVyZSBUb3AgKFBhbiA6IFBhbmVsKQogICAgaXMKICAgICAgIGZ1bmN0aW9uIFRvcHBhbmVsIChQYW4gOiBQYW5lbCkgcmV0dXJuIENfSW50OwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgVG9wcGFuZWwsICJ0b3BfcGFuZWwiKTsKQEAgLTgwLDcgKzgwLDcgQEAKICAgICAgIGVuZCBpZjsKICAgIGVuZCBUb3A7CiAKLSAgIHByb2NlZHVyZSBTaG93IChQYW4gOiBpbiBQYW5lbCkKKyAgIHByb2NlZHVyZSBTaG93IChQYW4gOiBQYW5lbCkKICAgIGlzCiAgICAgICBmdW5jdGlvbiBTaG93cGFuZWwgKFBhbiA6IFBhbmVsKSByZXR1cm4gQ19JbnQ7CiAgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTaG93cGFuZWwsICJzaG93X3BhbmVsIik7CkBAIC05MCw3ICs5MCw3IEBACiAgICAgICBlbmQgaWY7CiAgICBlbmQgU2hvdzsKIAotICAgcHJvY2VkdXJlIEhpZGUgKFBhbiA6IGluIFBhbmVsKQorICAgcHJvY2VkdXJlIEhpZGUgKFBhbiA6IFBhbmVsKQogICAgaXMKICAgICAgIGZ1bmN0aW9uIEhpZGVwYW5lbCAoUGFuIDogUGFuZWwpIHJldHVybiBDX0ludDsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEhpZGVwYW5lbCwgImhpZGVfcGFuZWwiKTsKQEAgLTExMyw4ICsxMTMsOCBAQAogICAgICAgcmV0dXJuIFdpbjsKICAgIGVuZCBHZXRfV2luZG93OwogCi0gICBwcm9jZWR1cmUgUmVwbGFjZSAoUGFuIDogaW4gUGFuZWw7Ci0gICAgICAgICAgICAgICAgICAgICAgV2luIDogaW4gV2luZG93KQorICAgcHJvY2VkdXJlIFJlcGxhY2UgKFBhbiA6IFBhbmVsOworICAgICAgICAgICAgICAgICAgICAgIFdpbiA6IFdpbmRvdykKICAgIGlzCiAgICAgICBmdW5jdGlvbiBSZXBsYWNlX1BhbiAoUGFuIDogUGFuZWw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2luIDogV2luZG93KSByZXR1cm4gQ19JbnQ7CkBAIC0xMjUsOSArMTI1LDkgQEAKICAgICAgIGVuZCBpZjsKICAgIGVuZCBSZXBsYWNlOwogCi0gICBwcm9jZWR1cmUgTW92ZSAoUGFuICAgIDogaW4gUGFuZWw7Ci0gICAgICAgICAgICAgICAgICAgTGluZSAgIDogaW4gTGluZV9Qb3NpdGlvbjsKLSAgICAgICAgICAgICAgICAgICBDb2x1bW4gOiBpbiBDb2x1bW5fUG9zaXRpb24pCisgICBwcm9jZWR1cmUgTW92ZSAoUGFuICAgIDogUGFuZWw7CisgICAgICAgICAgICAgICAgICAgTGluZSAgIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICBDb2x1bW4gOiBDb2x1bW5fUG9zaXRpb24pCiAgICBpcwogICAgICAgZnVuY3Rpb24gTW92ZSAoUGFuICAgIDogUGFuZWw7CiAgICAgICAgICAgICAgICAgICAgICBMaW5lICAgOiBDX0ludDsKZGlmZiAtLWdpdCBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXAuYWRiIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcC5hZGIKaW5kZXggZmQzYzY0Ni4uNjQzODY1NyAxMDA2NDQKLS0tIGEvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcC5hZGIKKysrIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcC5hZGIKQEAgLTcsNyArNyw3IEBACiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgMjAwMC0yMDA2LDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KIC0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQpAQCAtMzUsOCArMzUsOCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CiAtLSAgVmVyc2lvbiBDb250cm9sOgotLS0gICRSZXZpc2lvbjogMS4xMSAkCi0tLSAgJERhdGU6IDIwMDYvMDYvMjUgMTQ6MzA6MjIgJAorLS0gICRSZXZpc2lvbjogMS4xMiAkCistLSAgJERhdGU6IDIwMDkvMTIvMjYgMTc6Mzg6NTggJAogLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTgyLDcgKzgyLDcgQEAKICAgIGVuZCBHZXRfRmxhZzsKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICBwcm9jZWR1cmUgR2V0X051bWJlciAoTmFtZSAgIDogaW4gIFN0cmluZzsKKyAgIHByb2NlZHVyZSBHZXRfTnVtYmVyIChOYW1lICAgOiBTdHJpbmc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgIDogb3V0IEludGVnZXI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzdWx0IDogb3V0IEJvb2xlYW4pCiAgICBpcwpkaWZmIC0tZ2l0IGEvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm8uYWRiIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm8uYWRiCmluZGV4IGEzZmJlMjUuLjliM2M5ZDUgMTAwNjQ0Ci0tLSBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvLmFkYgorKysgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mby5hZGIKQEAgLTcsNyArNyw3IEBACiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KIC0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQpAQCAtMzUsOCArMzUsOCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CiAtLSAgVmVyc2lvbiBDb250cm9sOgotLS0gICRSZXZpc2lvbjogMS41ICQKLS0tICAkRGF0ZTogMjAwNi8wNi8yNSAxNDozMDoyMiAkCistLSAgJFJldmlzaW9uOiAxLjYgJAorLS0gICREYXRlOiAyMDA5LzEyLzI2IDE3OjM4OjU4ICQKIC0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC00Nyw5ICs0Nyw5IEBACiAKIHBhY2thZ2UgYm9keSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRlcm1pbmZvIGlzCiAKLSAgIGZ1bmN0aW9uIElzX01pbnVzT25lX1BvaW50ZXIgKFAgOiBpbiBjaGFyc19wdHIpIHJldHVybiBCb29sZWFuOworICAgZnVuY3Rpb24gSXNfTWludXNPbmVfUG9pbnRlciAoUCA6IGNoYXJzX3B0cikgcmV0dXJuIEJvb2xlYW47CiAKLSAgIGZ1bmN0aW9uIElzX01pbnVzT25lX1BvaW50ZXIgKFAgOiBpbiBjaGFyc19wdHIpIHJldHVybiBCb29sZWFuIGlzCisgICBmdW5jdGlvbiBJc19NaW51c09uZV9Qb2ludGVyIChQIDogY2hhcnNfcHRyKSByZXR1cm4gQm9vbGVhbiBpcwogICAgICAgdHlwZSBXZWlyZF9BZGRyZXNzIGlzIG5ldyBTeXN0ZW0uU3RvcmFnZV9FbGVtZW50cy5JbnRlZ2VyX0FkZHJlc3M7CiAgICAgICBJbnZhbGlkX1BvaW50ZXIgOiBjb25zdGFudCBXZWlyZF9BZGRyZXNzIDo9IC0xOwogICAgICAgZnVuY3Rpb24gVG9fV2VpcmQgaXMgbmV3IEFkYS5VbmNoZWNrZWRfQ29udmVyc2lvbgpkaWZmIC0tZ2l0IGEvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXguYWRiIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXguYWRiCmluZGV4IDA2YjQ4NzYuLjUwYTRlNDQgMTAwNjQ0Ci0tLSBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4LmFkYgorKysgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eC5hZGIKQEAgLTcsNyArNyw3IEBACiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KIC0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQpAQCAtMzUsMTggKzM1LDE4IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKIC0tICBWZXJzaW9uIENvbnRyb2w6Ci0tLSAgJFJldmlzaW9uOiAxLjEyICQKLS0tICAkRGF0ZTogMjAwNi8wNi8yNSAxNDoyNDo0MCAkCistLSAgJFJldmlzaW9uOiAxLjEzICQKKy0tICAkRGF0ZTogMjAwOS8xMi8yNiAxNzozODo1OCAkCiAtLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHBhY2thZ2UgYm9keSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uQXV4IGlzCiAKICAgIHByb2NlZHVyZSBQdXRfQnVmCi0gICAgIChXaW4gICAgOiBpbiBXaW5kb3c7Ci0gICAgICBCdWYgICAgOiBpbiBTdHJpbmc7Ci0gICAgICBXaWR0aCAgOiBpbiBGaWVsZDsKLSAgICAgIFNpZ25hbCA6IGluIEJvb2xlYW4gOj0gVHJ1ZTsKLSAgICAgIExqdXN0ICA6IGluIEJvb2xlYW4gOj0gRmFsc2UpCisgICAgIChXaW4gICAgOiBXaW5kb3c7CisgICAgICBCdWYgICAgOiBTdHJpbmc7CisgICAgICBXaWR0aCAgOiBGaWVsZDsKKyAgICAgIFNpZ25hbCA6IEJvb2xlYW4gOj0gVHJ1ZTsKKyAgICAgIExqdXN0ICA6IEJvb2xlYW4gOj0gRmFsc2UpCiAgICBpcwogICAgICAgTCAgIDogRmllbGQ7CiAgICAgICBMZW4gOiBGaWVsZDsKZGlmZiAtLWdpdCBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4LmFkcyBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4LmFkcwppbmRleCBkZjhhOWJkLi42YjUwYjMzIDEwMDY0NAotLS0gYS9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eC5hZHMKKysrIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXguYWRzCkBAIC03LDcgKzcsNyBAQAogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gQ29weXJpZ2h0IChjKSAxOTk4LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCiAtLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KQEAgLTM1LDggKzM1LDggQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgogLS0gIFZlcnNpb24gQ29udHJvbDoKLS0tICAkUmV2aXNpb246IDEuMTMgJAotLS0gICREYXRlOiAyMDA2LzA2LzI1IDE0OjI0OjQwICQKKy0tICAkUmV2aXNpb246IDEuMTQgJAorLS0gICREYXRlOiAyMDA5LzEyLzI2IDE3OjM4OjU4ICQKIC0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogcHJpdmF0ZSBwYWNrYWdlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5BdXggaXMKQEAgLTQ2LDEwICs0NiwxMCBAQAogICAgLS0gIGFuZCBlbnVtZXJhdGlvbiB0eXBlcy4KICAgIC0tCiAgICBwcm9jZWR1cmUgUHV0X0J1ZgotICAgICAoV2luICAgIDogaW4gV2luZG93OyAgICAgICAgICAgICAgIC0tIFRoZSBvdXRwdXQgd2luZG93Ci0gICAgICBCdWYgICAgOiBpbiBTdHJpbmc7ICAgICAgICAgICAgICAgLS0gVGhlIGJ1ZmZlciBjb250YWluaW5nIHRoZSB0ZXh0Ci0gICAgICBXaWR0aCAgOiBpbiBGaWVsZDsgICAgICAgICAgICAgICAgLS0gVGhlIHdpZHRoIG9mIHRoZSBvdXRwdXQgZmllbGQKLSAgICAgIFNpZ25hbCA6IGluIEJvb2xlYW4gOj0gVHJ1ZTsgICAgICAtLSBJZiB0cnVlLCB3ZSByYWlzZSBMYXlvdXRfRXJyb3IKLSAgICAgIExqdXN0ICA6IGluIEJvb2xlYW4gOj0gRmFsc2UpOyAgICAtLSBUaGUgQnVmIGlzIGxlZnQganVzdGlmaWVkCisgICAgIChXaW4gICAgOiBXaW5kb3c7ICAgICAgICAgICAgICAgLS0gVGhlIG91dHB1dCB3aW5kb3cKKyAgICAgIEJ1ZiAgICA6IFN0cmluZzsgICAgICAgICAgICAgICAtLSBUaGUgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIHRleHQKKyAgICAgIFdpZHRoICA6IEZpZWxkOyAgICAgICAgICAgICAgICAtLSBUaGUgd2lkdGggb2YgdGhlIG91dHB1dCBmaWVsZAorICAgICAgU2lnbmFsIDogQm9vbGVhbiA6PSBUcnVlOyAgICAgIC0tIElmIHRydWUsIHdlIHJhaXNlIExheW91dF9FcnJvcgorICAgICAgTGp1c3QgIDogQm9vbGVhbiA6PSBGYWxzZSk7ICAgIC0tIFRoZSBCdWYgaXMgbGVmdCBqdXN0aWZpZWQKIAogZW5kIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5BdXg7CmRpZmYgLS1naXQgYS9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWNvbXBsZXhfaW8uYWRiIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvLmFkYgppbmRleCAzYjU4NzFlLi42YzJlMTQ0IDEwMDY0NAotLS0gYS9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWNvbXBsZXhfaW8uYWRiCisrKyBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pby5hZGIKQEAgLTcsNyArNyw3IEBACiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KIC0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQpAQCAtMzUsNyArMzUsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CiAtLSAgVmVyc2lvbiBDb250cm9sOgotLS0gICRSZXZpc2lvbjogMS4xMCAkCistLSAgJFJldmlzaW9uOiAxLjExICQKIC0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogd2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uRmxvYXRfSU87CkBAIC00NiwxMSArNDYsMTEgQEAKICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLkZsb2F0X0lPIChDb21wbGV4X1R5cGVzLlJlYWwnQmFzZSk7CiAKICAgIHByb2NlZHVyZSBQdXQKLSAgICAgKFdpbiAgOiBpbiBXaW5kb3c7Ci0gICAgICBJdGVtIDogaW4gQ29tcGxleDsKLSAgICAgIEZvcmUgOiBpbiBGaWVsZCA6PSBEZWZhdWx0X0ZvcmU7Ci0gICAgICBBZnQgIDogaW4gRmllbGQgOj0gRGVmYXVsdF9BZnQ7Ci0gICAgICBFeHAgIDogaW4gRmllbGQgOj0gRGVmYXVsdF9FeHApCisgICAgIChXaW4gIDogV2luZG93OworICAgICAgSXRlbSA6IENvbXBsZXg7CisgICAgICBGb3JlIDogRmllbGQgOj0gRGVmYXVsdF9Gb3JlOworICAgICAgQWZ0ICA6IEZpZWxkIDo9IERlZmF1bHRfQWZ0OworICAgICAgRXhwICA6IEZpZWxkIDo9IERlZmF1bHRfRXhwKQogICAgaXMKICAgIGJlZ2luCiAgICAgICBQdXQgKFdpbiwgJygnKTsKQEAgLTYxLDEwICs2MSwxMCBAQAogICAgZW5kIFB1dDsKIAogICAgcHJvY2VkdXJlIFB1dAotICAgICAoSXRlbSA6IGluIENvbXBsZXg7Ci0gICAgICBGb3JlIDogaW4gRmllbGQgOj0gRGVmYXVsdF9Gb3JlOwotICAgICAgQWZ0ICA6IGluIEZpZWxkIDo9IERlZmF1bHRfQWZ0OwotICAgICAgRXhwICA6IGluIEZpZWxkIDo9IERlZmF1bHRfRXhwKQorICAgICAoSXRlbSA6IENvbXBsZXg7CisgICAgICBGb3JlIDogRmllbGQgOj0gRGVmYXVsdF9Gb3JlOworICAgICAgQWZ0ICA6IEZpZWxkIDo9IERlZmF1bHRfQWZ0OworICAgICAgRXhwICA6IEZpZWxkIDo9IERlZmF1bHRfRXhwKQogICAgaXMKICAgIGJlZ2luCiAgICAgICBQdXQgKEdldF9XaW5kb3csIEl0ZW0sIEZvcmUsIEFmdCwgRXhwKTsKZGlmZiAtLWdpdCBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pby5hZHMgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWNvbXBsZXhfaW8uYWRzCmluZGV4IDIzM2ViM2MuLmU2MTM0NTggMTAwNjQ0Ci0tLSBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pby5hZHMKKysrIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvLmFkcwpAQCAtNyw3ICs3LDcgQEAKIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQogLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCkBAIC0zNSw3ICszNSw3IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKIC0tICBWZXJzaW9uIENvbnRyb2w6Ci0tLSAgJFJldmlzaW9uOiAxLjEwICQKKy0tICAkUmV2aXNpb246IDEuMTEgJAogLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB3aXRoIEFkYS5OdW1lcmljcy5HZW5lcmljX0NvbXBsZXhfVHlwZXM7CkBAIC01MiwxNyArNTIsMTcgQEAKICAgIERlZmF1bHRfRXhwICA6IEZpZWxkIDo9IDM7CiAKICAgIHByb2NlZHVyZSBQdXQKLSAgICAgKFdpbiAgOiBpbiBXaW5kb3c7Ci0gICAgICBJdGVtIDogaW4gQ29tcGxleDsKLSAgICAgIEZvcmUgOiBpbiBGaWVsZCA6PSBEZWZhdWx0X0ZvcmU7Ci0gICAgICBBZnQgIDogaW4gRmllbGQgOj0gRGVmYXVsdF9BZnQ7Ci0gICAgICBFeHAgIDogaW4gRmllbGQgOj0gRGVmYXVsdF9FeHApOworICAgICAoV2luICA6IFdpbmRvdzsKKyAgICAgIEl0ZW0gOiBDb21wbGV4OworICAgICAgRm9yZSA6IEZpZWxkIDo9IERlZmF1bHRfRm9yZTsKKyAgICAgIEFmdCAgOiBGaWVsZCA6PSBEZWZhdWx0X0FmdDsKKyAgICAgIEV4cCAgOiBGaWVsZCA6PSBEZWZhdWx0X0V4cCk7CiAKICAgIHByb2NlZHVyZSBQdXQKLSAgICAgKEl0ZW0gOiBpbiBDb21wbGV4OwotICAgICAgRm9yZSA6IGluIEZpZWxkIDo9IERlZmF1bHRfRm9yZTsKLSAgICAgIEFmdCAgOiBpbiBGaWVsZCA6PSBEZWZhdWx0X0FmdDsKLSAgICAgIEV4cCAgOiBpbiBGaWVsZCA6PSBEZWZhdWx0X0V4cCk7CisgICAgIChJdGVtIDogQ29tcGxleDsKKyAgICAgIEZvcmUgOiBGaWVsZCA6PSBEZWZhdWx0X0ZvcmU7CisgICAgICBBZnQgIDogRmllbGQgOj0gRGVmYXVsdF9BZnQ7CisgICAgICBFeHAgIDogRmllbGQgOj0gRGVmYXVsdF9FeHApOwogCiBwcml2YXRlCiAgICBwcmFnbWEgSW5saW5lIChQdXQpOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvLmFkYiBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pby5hZGIKaW5kZXggMDIwNjhhMC4uMWIxYWQ4YyAxMDA2NDQKLS0tIGEvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvLmFkYgorKysgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW8uYWRiCkBAIC03LDcgKzcsNyBAQAogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCiAtLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KQEAgLTM1LDcgKzM1LDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgogLS0gIFZlcnNpb24gQ29udHJvbDoKLS0tICAkUmV2aXNpb246IDEuMTAgJAorLS0gICRSZXZpc2lvbjogMS4xMSAkCiAtLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHdpdGggQWRhLlRleHRfSU87CkBAIC00NywxMSArNDcsMTEgQEAKICAgIHBhY2thZ2UgRElPIGlzIG5ldyBBZGEuVGV4dF9JTy5EZWNpbWFsX0lPIChOdW0pOwogCiAgICBwcm9jZWR1cmUgUHV0Ci0gICAgIChXaW4gIDogaW4gV2luZG93OwotICAgICAgSXRlbSA6IGluIE51bTsKLSAgICAgIEZvcmUgOiBpbiBGaWVsZCA6PSBEZWZhdWx0X0ZvcmU7Ci0gICAgICBBZnQgIDogaW4gRmllbGQgOj0gRGVmYXVsdF9BZnQ7Ci0gICAgICBFeHAgIDogaW4gRmllbGQgOj0gRGVmYXVsdF9FeHApCisgICAgIChXaW4gIDogV2luZG93OworICAgICAgSXRlbSA6IE51bTsKKyAgICAgIEZvcmUgOiBGaWVsZCA6PSBEZWZhdWx0X0ZvcmU7CisgICAgICBBZnQgIDogRmllbGQgOj0gRGVmYXVsdF9BZnQ7CisgICAgICBFeHAgIDogRmllbGQgOj0gRGVmYXVsdF9FeHApCiAgICBpcwogICAgICAgQnVmIDogU3RyaW5nICgxIC4uIEZpZWxkJ0xhc3QpOwogICAgICAgTGVuIDogRmllbGQgOj0gRm9yZSArIDEgKyBBZnQ7CkBAIC02NCwxMCArNjQsMTAgQEAKICAgIGVuZCBQdXQ7CiAKICAgIHByb2NlZHVyZSBQdXQKLSAgICAgKEl0ZW0gIDogaW4gTnVtOwotICAgICAgRm9yZSA6IGluIEZpZWxkIDo9IERlZmF1bHRfRm9yZTsKLSAgICAgIEFmdCAgOiBpbiBGaWVsZCA6PSBEZWZhdWx0X0FmdDsKLSAgICAgIEV4cCAgOiBpbiBGaWVsZCA6PSBEZWZhdWx0X0V4cCkgaXMKKyAgICAgKEl0ZW0gOiBOdW07CisgICAgICBGb3JlIDogRmllbGQgOj0gRGVmYXVsdF9Gb3JlOworICAgICAgQWZ0ICA6IEZpZWxkIDo9IERlZmF1bHRfQWZ0OworICAgICAgRXhwICA6IEZpZWxkIDo9IERlZmF1bHRfRXhwKSBpcwogICAgYmVnaW4KICAgICAgIFB1dCAoR2V0X1dpbmRvdywgSXRlbSwgRm9yZSwgQWZ0LCBFeHApOwogICAgZW5kIFB1dDsKZGlmZiAtLWdpdCBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pby5hZHMgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW8uYWRzCmluZGV4IDZmNmZlNzUuLjE1OTAxMjcgMTAwNjQ0Ci0tLSBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pby5hZHMKKysrIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvLmFkcwpAQCAtNyw3ICs3LDcgQEAKIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQogLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCkBAIC0zNSw3ICszNSw3IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKIC0tICBWZXJzaW9uIENvbnRyb2w6Ci0tLSAgJFJldmlzaW9uOiAxLjExICQKKy0tICAkUmV2aXNpb246IDEuMTIgJAogLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBnZW5lcmljCkBAIC00OCwxNyArNDgsMTcgQEAKICAgIERlZmF1bHRfRXhwICA6IEZpZWxkIDo9IDA7CiAKICAgIHByb2NlZHVyZSBQdXQKLSAgICAgKFdpbiAgOiBpbiBXaW5kb3c7Ci0gICAgICBJdGVtIDogaW4gTnVtOwotICAgICAgRm9yZSA6IGluIEZpZWxkIDo9IERlZmF1bHRfRm9yZTsKLSAgICAgIEFmdCAgOiBpbiBGaWVsZCA6PSBEZWZhdWx0X0FmdDsKLSAgICAgIEV4cCAgOiBpbiBGaWVsZCA6PSBEZWZhdWx0X0V4cCk7CisgICAgIChXaW4gIDogV2luZG93OworICAgICAgSXRlbSA6IE51bTsKKyAgICAgIEZvcmUgOiBGaWVsZCA6PSBEZWZhdWx0X0ZvcmU7CisgICAgICBBZnQgIDogRmllbGQgOj0gRGVmYXVsdF9BZnQ7CisgICAgICBFeHAgIDogRmllbGQgOj0gRGVmYXVsdF9FeHApOwogCiAgICBwcm9jZWR1cmUgUHV0Ci0gICAgIChJdGVtICA6IGluIE51bTsKLSAgICAgIEZvcmUgOiBpbiBGaWVsZCA6PSBEZWZhdWx0X0ZvcmU7Ci0gICAgICBBZnQgIDogaW4gRmllbGQgOj0gRGVmYXVsdF9BZnQ7Ci0gICAgICBFeHAgIDogaW4gRmllbGQgOj0gRGVmYXVsdF9FeHApOworICAgICAoSXRlbSA6IE51bTsKKyAgICAgIEZvcmUgOiBGaWVsZCA6PSBEZWZhdWx0X0ZvcmU7CisgICAgICBBZnQgIDogRmllbGQgOj0gRGVmYXVsdF9BZnQ7CisgICAgICBFeHAgIDogRmllbGQgOj0gRGVmYXVsdF9FeHApOwogCiBwcml2YXRlCiAgICBwcmFnbWEgSW5saW5lIChQdXQpOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pby5hZGIgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWVudW1lcmF0aW9uX2lvLmFkYgppbmRleCA1Mjg4NzNhLi41M2YzZTU1IDEwMDY0NAotLS0gYS9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWVudW1lcmF0aW9uX2lvLmFkYgorKysgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWVudW1lcmF0aW9uX2lvLmFkYgpAQCAtNyw3ICs3LDcgQEAKIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQogLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCkBAIC0zNSw3ICszNSw3IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKIC0tICBWZXJzaW9uIENvbnRyb2w6Ci0tLSAgJFJldmlzaW9uOiAxLjEwICQKKy0tICAkUmV2aXNpb246IDEuMTEgJAogLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB3aXRoIEFkYS5UZXh0X0lPOwpAQCAtNDgsMTAgKzQ4LDEwIEBACiAgICBwYWNrYWdlIEVJTyBpcyBuZXcgQWRhLlRleHRfSU8uRW51bWVyYXRpb25fSU8gKEVudW0pOwogCiAgICBwcm9jZWR1cmUgUHV0Ci0gICAgIChXaW4gICA6IGluIFdpbmRvdzsKLSAgICAgIEl0ZW0gIDogaW4gRW51bTsKLSAgICAgIFdpZHRoIDogaW4gRmllbGQgOj0gRGVmYXVsdF9XaWR0aDsKLSAgICAgIFNldCAgIDogaW4gVHlwZV9TZXQgOj0gRGVmYXVsdF9TZXR0aW5nKQorICAgICAoV2luICAgOiBXaW5kb3c7CisgICAgICBJdGVtICA6IEVudW07CisgICAgICBXaWR0aCA6IEZpZWxkIDo9IERlZmF1bHRfV2lkdGg7CisgICAgICBTZXQgICA6IFR5cGVfU2V0IDo9IERlZmF1bHRfU2V0dGluZykKICAgIGlzCiAgICAgICBCdWYgIDogU3RyaW5nICgxIC4uIEZpZWxkJ0xhc3QpOwogICAgICAgVHNldCA6IEFkYS5UZXh0X0lPLlR5cGVfU2V0OwpAQCAtNjksOSArNjksOSBAQAogICAgZW5kIFB1dDsKIAogICAgcHJvY2VkdXJlIFB1dAotICAgICAoSXRlbSAgOiBpbiBFbnVtOwotICAgICAgV2lkdGggOiBpbiBGaWVsZCA6PSBEZWZhdWx0X1dpZHRoOwotICAgICAgU2V0ICAgOiBpbiBUeXBlX1NldCA6PSBEZWZhdWx0X1NldHRpbmcpCisgICAgIChJdGVtICA6IEVudW07CisgICAgICBXaWR0aCA6IEZpZWxkIDo9IERlZmF1bHRfV2lkdGg7CisgICAgICBTZXQgICA6IFR5cGVfU2V0IDo9IERlZmF1bHRfU2V0dGluZykKICAgIGlzCiAgICBiZWdpbgogICAgICAgUHV0IChHZXRfV2luZG93LCBJdGVtLCBXaWR0aCwgU2V0KTsKZGlmZiAtLWdpdCBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW8uYWRzIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pby5hZHMKaW5kZXggYjIyMWQ3Zi4uYTk4MWYwZSAxMDA2NDQKLS0tIGEvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pby5hZHMKKysrIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pby5hZHMKQEAgLTcsNyArNyw3IEBACiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KIC0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQpAQCAtMzUsNyArMzUsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CiAtLSAgVmVyc2lvbiBDb250cm9sOgotLS0gICRSZXZpc2lvbjogMS4xMSAkCistLSAgJFJldmlzaW9uOiAxLjEyICQKIC0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogZ2VuZXJpYwpAQCAtNDcsMTUgKzQ3LDE1IEBACiAgICBEZWZhdWx0X1NldHRpbmcgOiBUeXBlX1NldCA6PSBNaXhlZF9DYXNlOwogCiAgICBwcm9jZWR1cmUgUHV0Ci0gICAgIChXaW4gICA6IGluIFdpbmRvdzsKLSAgICAgIEl0ZW0gIDogaW4gRW51bTsKLSAgICAgIFdpZHRoIDogaW4gRmllbGQgOj0gRGVmYXVsdF9XaWR0aDsKLSAgICAgIFNldCAgIDogaW4gVHlwZV9TZXQgOj0gRGVmYXVsdF9TZXR0aW5nKTsKKyAgICAgKFdpbiAgIDogV2luZG93OworICAgICAgSXRlbSAgOiBFbnVtOworICAgICAgV2lkdGggOiBGaWVsZCA6PSBEZWZhdWx0X1dpZHRoOworICAgICAgU2V0ICAgOiBUeXBlX1NldCA6PSBEZWZhdWx0X1NldHRpbmcpOwogCiAgICBwcm9jZWR1cmUgUHV0Ci0gICAgIChJdGVtICA6IGluIEVudW07Ci0gICAgICBXaWR0aCA6IGluIEZpZWxkIDo9IERlZmF1bHRfV2lkdGg7Ci0gICAgICBTZXQgICA6IGluIFR5cGVfU2V0IDo9IERlZmF1bHRfU2V0dGluZyk7CisgICAgIChJdGVtICA6IEVudW07CisgICAgICBXaWR0aCA6IEZpZWxkIDo9IERlZmF1bHRfV2lkdGg7CisgICAgICBTZXQgICA6IFR5cGVfU2V0IDo9IERlZmF1bHRfU2V0dGluZyk7CiAKIHByaXZhdGUKICAgIHByYWdtYSBJbmxpbmUgKFB1dCk7CmRpZmYgLS1naXQgYS9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvLmFkYiBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW8uYWRiCmluZGV4IGU3NGYxNDguLjEzYTM0MjAgMTAwNjQ0Ci0tLSBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW8uYWRiCisrKyBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW8uYWRiCkBAIC03LDcgKzcsNyBAQAogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCiAtLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KQEAgLTM1LDcgKzM1LDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgogLS0gIFZlcnNpb24gQ29udHJvbDoKLS0tICAkUmV2aXNpb246IDEuMTAgJAorLS0gICRSZXZpc2lvbjogMS4xMSAkCiAtLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHdpdGggQWRhLlRleHRfSU87CkBAIC00NywxMSArNDcsMTEgQEAKICAgIHBhY2thZ2UgRklYSU8gaXMgbmV3IEFkYS5UZXh0X0lPLkZpeGVkX0lPIChOdW0pOwogCiAgICBwcm9jZWR1cmUgUHV0Ci0gICAgIChXaW4gIDogaW4gV2luZG93OwotICAgICAgSXRlbSA6IGluIE51bTsKLSAgICAgIEZvcmUgOiBpbiBGaWVsZCA6PSBEZWZhdWx0X0ZvcmU7Ci0gICAgICBBZnQgIDogaW4gRmllbGQgOj0gRGVmYXVsdF9BZnQ7Ci0gICAgICBFeHAgIDogaW4gRmllbGQgOj0gRGVmYXVsdF9FeHApCisgICAgIChXaW4gIDogV2luZG93OworICAgICAgSXRlbSA6IE51bTsKKyAgICAgIEZvcmUgOiBGaWVsZCA6PSBEZWZhdWx0X0ZvcmU7CisgICAgICBBZnQgIDogRmllbGQgOj0gRGVmYXVsdF9BZnQ7CisgICAgICBFeHAgIDogRmllbGQgOj0gRGVmYXVsdF9FeHApCiAgICBpcwogICAgICAgQnVmIDogU3RyaW5nICgxIC4uIEZpZWxkJ0xhc3QpOwogICAgICAgTGVuIDogRmllbGQgOj0gRm9yZSArIDEgKyBBZnQ7CkBAIC02NCwxMCArNjQsMTAgQEAKICAgIGVuZCBQdXQ7CiAKICAgIHByb2NlZHVyZSBQdXQKLSAgICAgKEl0ZW0gIDogaW4gTnVtOwotICAgICAgRm9yZSA6IGluIEZpZWxkIDo9IERlZmF1bHRfRm9yZTsKLSAgICAgIEFmdCAgOiBpbiBGaWVsZCA6PSBEZWZhdWx0X0FmdDsKLSAgICAgIEV4cCAgOiBpbiBGaWVsZCA6PSBEZWZhdWx0X0V4cCkgaXMKKyAgICAgKEl0ZW0gOiBOdW07CisgICAgICBGb3JlIDogRmllbGQgOj0gRGVmYXVsdF9Gb3JlOworICAgICAgQWZ0ICA6IEZpZWxkIDo9IERlZmF1bHRfQWZ0OworICAgICAgRXhwICA6IEZpZWxkIDo9IERlZmF1bHRfRXhwKSBpcwogICAgYmVnaW4KICAgICAgIFB1dCAoR2V0X1dpbmRvdywgSXRlbSwgRm9yZSwgQWZ0LCBFeHApOwogICAgZW5kIFB1dDsKZGlmZiAtLWdpdCBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW8uYWRzIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pby5hZHMKaW5kZXggNGI4YjEzNi4uM2MyMmEwMSAxMDA2NDQKLS0tIGEvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pby5hZHMKKysrIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pby5hZHMKQEAgLTcsNyArNyw3IEBACiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KIC0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQpAQCAtMzUsNyArMzUsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CiAtLSAgVmVyc2lvbiBDb250cm9sOgotLS0gICRSZXZpc2lvbjogMS4xMSAkCistLSAgJFJldmlzaW9uOiAxLjEyICQKIC0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogZ2VuZXJpYwpAQCAtNDgsMTcgKzQ4LDE3IEBACiAgICBEZWZhdWx0X0V4cCAgOiBGaWVsZCA6PSAwOwogCiAgICBwcm9jZWR1cmUgUHV0Ci0gICAgIChXaW4gIDogaW4gV2luZG93OwotICAgICAgSXRlbSA6IGluIE51bTsKLSAgICAgIEZvcmUgOiBpbiBGaWVsZCA6PSBEZWZhdWx0X0ZvcmU7Ci0gICAgICBBZnQgIDogaW4gRmllbGQgOj0gRGVmYXVsdF9BZnQ7Ci0gICAgICBFeHAgIDogaW4gRmllbGQgOj0gRGVmYXVsdF9FeHApOworICAgICAoV2luICA6IFdpbmRvdzsKKyAgICAgIEl0ZW0gOiBOdW07CisgICAgICBGb3JlIDogRmllbGQgOj0gRGVmYXVsdF9Gb3JlOworICAgICAgQWZ0ICA6IEZpZWxkIDo9IERlZmF1bHRfQWZ0OworICAgICAgRXhwICA6IEZpZWxkIDo9IERlZmF1bHRfRXhwKTsKIAogICAgcHJvY2VkdXJlIFB1dAotICAgICAoSXRlbSAgOiBpbiBOdW07Ci0gICAgICBGb3JlIDogaW4gRmllbGQgOj0gRGVmYXVsdF9Gb3JlOwotICAgICAgQWZ0ICA6IGluIEZpZWxkIDo9IERlZmF1bHRfQWZ0OwotICAgICAgRXhwICA6IGluIEZpZWxkIDo9IERlZmF1bHRfRXhwKTsKKyAgICAgKEl0ZW0gOiBOdW07CisgICAgICBGb3JlIDogRmllbGQgOj0gRGVmYXVsdF9Gb3JlOworICAgICAgQWZ0ICA6IEZpZWxkIDo9IERlZmF1bHRfQWZ0OworICAgICAgRXhwICA6IEZpZWxkIDo9IERlZmF1bHRfRXhwKTsKIAogcHJpdmF0ZQogICAgcHJhZ21hIElubGluZSAoUHV0KTsKZGlmZiAtLWdpdCBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW8uYWRiIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pby5hZGIKaW5kZXggMTlkMjYxYi4uYWY2NjdiNCAxMDA2NDQKLS0tIGEvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pby5hZGIKKysrIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pby5hZGIKQEAgLTcsNyArNyw3IEBACiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KIC0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQpAQCAtMzUsNyArMzUsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CiAtLSAgVmVyc2lvbiBDb250cm9sOgotLS0gICRSZXZpc2lvbjogMS4xMCAkCistLSAgJFJldmlzaW9uOiAxLjExICQKIC0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogd2l0aCBBZGEuVGV4dF9JTzsKQEAgLTQ3LDExICs0NywxMSBAQAogICAgcGFja2FnZSBGSU8gaXMgbmV3IEFkYS5UZXh0X0lPLkZsb2F0X0lPIChOdW0pOwogCiAgICBwcm9jZWR1cmUgUHV0Ci0gICAgIChXaW4gIDogaW4gV2luZG93OwotICAgICAgSXRlbSA6IGluIE51bTsKLSAgICAgIEZvcmUgOiBpbiBGaWVsZCA6PSBEZWZhdWx0X0ZvcmU7Ci0gICAgICBBZnQgIDogaW4gRmllbGQgOj0gRGVmYXVsdF9BZnQ7Ci0gICAgICBFeHAgIDogaW4gRmllbGQgOj0gRGVmYXVsdF9FeHApCisgICAgIChXaW4gIDogV2luZG93OworICAgICAgSXRlbSA6IE51bTsKKyAgICAgIEZvcmUgOiBGaWVsZCA6PSBEZWZhdWx0X0ZvcmU7CisgICAgICBBZnQgIDogRmllbGQgOj0gRGVmYXVsdF9BZnQ7CisgICAgICBFeHAgIDogRmllbGQgOj0gRGVmYXVsdF9FeHApCiAgICBpcwogICAgICAgQnVmIDogU3RyaW5nICgxIC4uIEZpZWxkJ0xhc3QpOwogICAgICAgTGVuIDogRmllbGQgOj0gRm9yZSArIDEgKyBBZnQ7CkBAIC02NCwxMCArNjQsMTAgQEAKICAgIGVuZCBQdXQ7CiAKICAgIHByb2NlZHVyZSBQdXQKLSAgICAgKEl0ZW0gOiBpbiBOdW07Ci0gICAgICBGb3JlIDogaW4gRmllbGQgOj0gRGVmYXVsdF9Gb3JlOwotICAgICAgQWZ0ICA6IGluIEZpZWxkIDo9IERlZmF1bHRfQWZ0OwotICAgICAgRXhwICA6IGluIEZpZWxkIDo9IERlZmF1bHRfRXhwKQorICAgICAoSXRlbSA6IE51bTsKKyAgICAgIEZvcmUgOiBGaWVsZCA6PSBEZWZhdWx0X0ZvcmU7CisgICAgICBBZnQgIDogRmllbGQgOj0gRGVmYXVsdF9BZnQ7CisgICAgICBFeHAgIDogRmllbGQgOj0gRGVmYXVsdF9FeHApCiAgICBpcwogICAgYmVnaW4KICAgICAgIFB1dCAoR2V0X1dpbmRvdywgSXRlbSwgRm9yZSwgQWZ0LCBFeHApOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pby5hZHMgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvLmFkcwppbmRleCAwODU2NTIzLi5iMGE2OGQwIDEwMDY0NAotLS0gYS9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvLmFkcworKysgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvLmFkcwpAQCAtNyw3ICs3LDcgQEAKIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQogLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCkBAIC0zNSw3ICszNSw3IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKIC0tICBWZXJzaW9uIENvbnRyb2w6Ci0tLSAgJFJldmlzaW9uOiAxLjExICQKKy0tICAkUmV2aXNpb246IDEuMTIgJAogLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBnZW5lcmljCkBAIC00OCwxNyArNDgsMTcgQEAKICAgIERlZmF1bHRfRXhwICA6IEZpZWxkIDo9IDM7CiAKICAgIHByb2NlZHVyZSBQdXQKLSAgICAgKFdpbiAgOiBpbiBXaW5kb3c7Ci0gICAgICBJdGVtIDogaW4gTnVtOwotICAgICAgRm9yZSA6IGluIEZpZWxkIDo9IERlZmF1bHRfRm9yZTsKLSAgICAgIEFmdCAgOiBpbiBGaWVsZCA6PSBEZWZhdWx0X0FmdDsKLSAgICAgIEV4cCAgOiBpbiBGaWVsZCA6PSBEZWZhdWx0X0V4cCk7CisgICAgIChXaW4gIDogV2luZG93OworICAgICAgSXRlbSA6IE51bTsKKyAgICAgIEZvcmUgOiBGaWVsZCA6PSBEZWZhdWx0X0ZvcmU7CisgICAgICBBZnQgIDogRmllbGQgOj0gRGVmYXVsdF9BZnQ7CisgICAgICBFeHAgIDogRmllbGQgOj0gRGVmYXVsdF9FeHApOwogCiAgICBwcm9jZWR1cmUgUHV0Ci0gICAgIChJdGVtICA6IGluIE51bTsKLSAgICAgIEZvcmUgOiBpbiBGaWVsZCA6PSBEZWZhdWx0X0ZvcmU7Ci0gICAgICBBZnQgIDogaW4gRmllbGQgOj0gRGVmYXVsdF9BZnQ7Ci0gICAgICBFeHAgIDogaW4gRmllbGQgOj0gRGVmYXVsdF9FeHApOworICAgICAoSXRlbSA6IE51bTsKKyAgICAgIEZvcmUgOiBGaWVsZCA6PSBEZWZhdWx0X0ZvcmU7CisgICAgICBBZnQgIDogRmllbGQgOj0gRGVmYXVsdF9BZnQ7CisgICAgICBFeHAgIDogRmllbGQgOj0gRGVmYXVsdF9FeHApOwogCiBwcml2YXRlCiAgICBwcmFnbWEgSW5saW5lIChQdXQpOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvLmFkYiBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8taW50ZWdlcl9pby5hZGIKaW5kZXggZTY5NGUwOC4uNGQxOWM0MiAxMDA2NDQKLS0tIGEvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvLmFkYgorKysgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWludGVnZXJfaW8uYWRiCkBAIC03LDcgKzcsNyBAQAogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCiAtLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KQEAgLTM1LDcgKzM1LDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgogLS0gIFZlcnNpb24gQ29udHJvbDoKLS0tICAkUmV2aXNpb246IDEuMTAgJAorLS0gICRSZXZpc2lvbjogMS4xMSAkCiAtLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHdpdGggQWRhLlRleHRfSU87CkBAIC00NywxMCArNDcsMTAgQEAKICAgIHBhY2thZ2UgSUlPIGlzIG5ldyBBZGEuVGV4dF9JTy5JbnRlZ2VyX0lPIChOdW0pOwogCiAgICBwcm9jZWR1cmUgUHV0Ci0gICAgIChXaW4gICA6IGluIFdpbmRvdzsKLSAgICAgIEl0ZW0gIDogaW4gTnVtOwotICAgICAgV2lkdGggOiBpbiBGaWVsZCA6PSBEZWZhdWx0X1dpZHRoOwotICAgICAgQmFzZSAgOiBpbiBOdW1iZXJfQmFzZSA6PSBEZWZhdWx0X0Jhc2UpCisgICAgIChXaW4gICA6IFdpbmRvdzsKKyAgICAgIEl0ZW0gIDogTnVtOworICAgICAgV2lkdGggOiBGaWVsZCA6PSBEZWZhdWx0X1dpZHRoOworICAgICAgQmFzZSAgOiBOdW1iZXJfQmFzZSA6PSBEZWZhdWx0X0Jhc2UpCiAgICBpcwogICAgICAgQnVmIDogU3RyaW5nICgxIC4uIEZpZWxkJ0xhc3QpOwogICAgYmVnaW4KQEAgLTU5LDkgKzU5LDkgQEAKICAgIGVuZCBQdXQ7CiAKICAgIHByb2NlZHVyZSBQdXQKLSAgICAgKEl0ZW0gIDogaW4gTnVtOwotICAgICAgV2lkdGggOiBpbiBGaWVsZCA6PSBEZWZhdWx0X1dpZHRoOwotICAgICAgQmFzZSAgOiBpbiBOdW1iZXJfQmFzZSA6PSBEZWZhdWx0X0Jhc2UpCisgICAgIChJdGVtICA6IE51bTsKKyAgICAgIFdpZHRoIDogRmllbGQgOj0gRGVmYXVsdF9XaWR0aDsKKyAgICAgIEJhc2UgIDogTnVtYmVyX0Jhc2UgOj0gRGVmYXVsdF9CYXNlKQogICAgaXMKICAgIGJlZ2luCiAgICAgICBQdXQgKEdldF9XaW5kb3csIEl0ZW0sIFdpZHRoLCBCYXNlKTsKZGlmZiAtLWdpdCBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8taW50ZWdlcl9pby5hZHMgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWludGVnZXJfaW8uYWRzCmluZGV4IGQ4YjE2OWEuLjlmZmUxZTAgMTAwNjQ0Ci0tLSBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8taW50ZWdlcl9pby5hZHMKKysrIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvLmFkcwpAQCAtNyw3ICs3LDcgQEAKIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQogLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCkBAIC0zNSw3ICszNSw3IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKIC0tICBWZXJzaW9uIENvbnRyb2w6Ci0tLSAgJFJldmlzaW9uOiAxLjExICQKKy0tICAkUmV2aXNpb246IDEuMTIgJAogLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBnZW5lcmljCkBAIC00NywxNSArNDcsMTUgQEAKICAgIERlZmF1bHRfQmFzZSAgOiBOdW1iZXJfQmFzZSA6PSAxMDsKIAogICAgcHJvY2VkdXJlIFB1dAotICAgICAoV2luICAgOiBpbiBXaW5kb3c7Ci0gICAgICBJdGVtICA6IGluIE51bTsKLSAgICAgIFdpZHRoIDogaW4gRmllbGQgOj0gRGVmYXVsdF9XaWR0aDsKLSAgICAgIEJhc2UgIDogaW4gTnVtYmVyX0Jhc2UgOj0gRGVmYXVsdF9CYXNlKTsKKyAgICAgKFdpbiAgIDogV2luZG93OworICAgICAgSXRlbSAgOiBOdW07CisgICAgICBXaWR0aCA6IEZpZWxkIDo9IERlZmF1bHRfV2lkdGg7CisgICAgICBCYXNlICA6IE51bWJlcl9CYXNlIDo9IERlZmF1bHRfQmFzZSk7CiAKICAgIHByb2NlZHVyZSBQdXQKLSAgICAgKEl0ZW0gIDogaW4gTnVtOwotICAgICAgV2lkdGggOiBpbiBGaWVsZCA6PSBEZWZhdWx0X1dpZHRoOwotICAgICAgQmFzZSAgOiBpbiBOdW1iZXJfQmFzZSA6PSBEZWZhdWx0X0Jhc2UpOworICAgICAoSXRlbSAgOiBOdW07CisgICAgICBXaWR0aCA6IEZpZWxkIDo9IERlZmF1bHRfV2lkdGg7CisgICAgICBCYXNlICA6IE51bWJlcl9CYXNlIDo9IERlZmF1bHRfQmFzZSk7CiAKIHByaXZhdGUKICAgIHByYWdtYSBJbmxpbmUgKFB1dCk7CmRpZmYgLS1naXQgYS9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLW1vZHVsYXJfaW8uYWRiIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1tb2R1bGFyX2lvLmFkYgppbmRleCA4Y2MxZDRhLi5mZThhNmQwIDEwMDY0NAotLS0gYS9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLW1vZHVsYXJfaW8uYWRiCisrKyBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tbW9kdWxhcl9pby5hZGIKQEAgLTcsNyArNyw3IEBACiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KIC0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQpAQCAtMzUsNyArMzUsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CiAtLSAgVmVyc2lvbiBDb250cm9sOgotLS0gICRSZXZpc2lvbjogMS4xMCAkCistLSAgJFJldmlzaW9uOiAxLjExICQKIC0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogd2l0aCBBZGEuVGV4dF9JTzsKQEAgLTQ3LDEwICs0NywxMCBAQAogICAgcGFja2FnZSBNSU8gaXMgbmV3IEFkYS5UZXh0X0lPLk1vZHVsYXJfSU8gKE51bSk7CiAKICAgIHByb2NlZHVyZSBQdXQKLSAgICAgKFdpbiAgIDogaW4gV2luZG93OwotICAgICAgSXRlbSAgOiBpbiBOdW07Ci0gICAgICBXaWR0aCA6IGluIEZpZWxkIDo9IERlZmF1bHRfV2lkdGg7Ci0gICAgICBCYXNlICA6IGluIE51bWJlcl9CYXNlIDo9IERlZmF1bHRfQmFzZSkKKyAgICAgKFdpbiAgIDogV2luZG93OworICAgICAgSXRlbSAgOiBOdW07CisgICAgICBXaWR0aCA6IEZpZWxkIDo9IERlZmF1bHRfV2lkdGg7CisgICAgICBCYXNlICA6IE51bWJlcl9CYXNlIDo9IERlZmF1bHRfQmFzZSkKICAgIGlzCiAgICAgICBCdWYgOiBTdHJpbmcgKDEgLi4gRmllbGQnTGFzdCk7CiAgICBiZWdpbgpAQCAtNTksOSArNTksOSBAQAogICAgZW5kIFB1dDsKIAogICAgcHJvY2VkdXJlIFB1dAotICAgICAoSXRlbSAgOiBpbiBOdW07Ci0gICAgICBXaWR0aCA6IGluIEZpZWxkIDo9IERlZmF1bHRfV2lkdGg7Ci0gICAgICBCYXNlICA6IGluIE51bWJlcl9CYXNlIDo9IERlZmF1bHRfQmFzZSkKKyAgICAgKEl0ZW0gIDogTnVtOworICAgICAgV2lkdGggOiBGaWVsZCA6PSBEZWZhdWx0X1dpZHRoOworICAgICAgQmFzZSAgOiBOdW1iZXJfQmFzZSA6PSBEZWZhdWx0X0Jhc2UpCiAgICBpcwogICAgYmVnaW4KICAgICAgIFB1dCAoR2V0X1dpbmRvdywgSXRlbSwgV2lkdGgsIEJhc2UpOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1tb2R1bGFyX2lvLmFkcyBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tbW9kdWxhcl9pby5hZHMKaW5kZXggNjE4NzA2Zi4uNjhlNzBlNSAxMDA2NDQKLS0tIGEvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1tb2R1bGFyX2lvLmFkcworKysgYi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLW1vZHVsYXJfaW8uYWRzCkBAIC03LDcgKzcsNyBAQAogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCiAtLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KQEAgLTM1LDcgKzM1LDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgogLS0gIFZlcnNpb24gQ29udHJvbDoKLS0tICAkUmV2aXNpb246IDEuMTEgJAorLS0gICRSZXZpc2lvbjogMS4xMiAkCiAtLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGdlbmVyaWMKQEAgLTQ3LDE1ICs0NywxNSBAQAogICAgRGVmYXVsdF9CYXNlICA6IE51bWJlcl9CYXNlIDo9IDEwOwogCiAgICBwcm9jZWR1cmUgUHV0Ci0gICAgIChXaW4gICA6IGluIFdpbmRvdzsKLSAgICAgIEl0ZW0gIDogaW4gTnVtOwotICAgICAgV2lkdGggOiBpbiBGaWVsZCA6PSBEZWZhdWx0X1dpZHRoOwotICAgICAgQmFzZSAgOiBpbiBOdW1iZXJfQmFzZSA6PSBEZWZhdWx0X0Jhc2UpOworICAgICAoV2luICAgOiBXaW5kb3c7CisgICAgICBJdGVtICA6IE51bTsKKyAgICAgIFdpZHRoIDogRmllbGQgOj0gRGVmYXVsdF9XaWR0aDsKKyAgICAgIEJhc2UgIDogTnVtYmVyX0Jhc2UgOj0gRGVmYXVsdF9CYXNlKTsKIAogICAgcHJvY2VkdXJlIFB1dAotICAgICAoSXRlbSAgOiBpbiBOdW07Ci0gICAgICBXaWR0aCA6IGluIEZpZWxkIDo9IERlZmF1bHRfV2lkdGg7Ci0gICAgICBCYXNlICA6IGluIE51bWJlcl9CYXNlIDo9IERlZmF1bHRfQmFzZSk7CisgICAgIChJdGVtICA6IE51bTsKKyAgICAgIFdpZHRoIDogRmllbGQgOj0gRGVmYXVsdF9XaWR0aDsKKyAgICAgIEJhc2UgIDogTnVtYmVyX0Jhc2UgOj0gRGVmYXVsdF9CYXNlKTsKIAogcHJpdmF0ZQogICAgcHJhZ21hIElubGluZSAoUHV0KTsKZGlmZiAtLWdpdCBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8uYWRiIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby5hZGIKaW5kZXggMjU1YjEyMy4uODVhNGY0NCAxMDA2NDQKLS0tIGEvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby5hZGIKKysrIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby5hZGIKQEAgLTcsNyArNyw3IEBACiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OC0yMDExLDIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KIC0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQpAQCAtMzUsMTUgKzM1LDE1IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKIC0tICBWZXJzaW9uIENvbnRyb2w6Ci0tLSAgJFJldmlzaW9uOiAxLjE4ICQKLS0tICAkRGF0ZTogMjAwNi8wNi8yNSAxNDoyNDo0MCAkCistLSAgJFJldmlzaW9uOiAxLjIyICQKKy0tICAkRGF0ZTogMjAxNC8wNS8yNCAyMTozMjoxOCAkCiAtLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHBhY2thZ2UgYm9keSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8gaXMKIAogICAgRGVmYXVsdF9XaW5kb3cgOiBXaW5kb3cgOj0gTnVsbF9XaW5kb3c7CiAKLSAgIHByb2NlZHVyZSBTZXRfV2luZG93IChXaW4gOiBpbiBXaW5kb3cpCisgICBwcm9jZWR1cmUgU2V0X1dpbmRvdyAoV2luIDogV2luZG93KQogICAgaXMKICAgIGJlZ2luCiAgICAgICBEZWZhdWx0X1dpbmRvdyA6PSBXaW47CkBAIC02MCw3ICs2MCw3IEBACiAgICBlbmQgR2V0X1dpbmRvdzsKICAgIHByYWdtYSBJbmxpbmUgKEdldF9XaW5kb3cpOwogCi0gICBwcm9jZWR1cmUgRmx1c2ggKFdpbiA6IGluIFdpbmRvdykKKyAgIHByb2NlZHVyZSBGbHVzaCAoV2luIDogV2luZG93KQogICAgaXMKICAgIGJlZ2luCiAgICAgICBSZWZyZXNoIChXaW4pOwpAQCAtODEsNyArODEsNyBAQAogICAgLS0gIEEgc2Nyb2xsLXdpbmRvdyBpcyBpbnRlcnByZXRlZCBhcyBhbiBwYWdlIHdpdGggdW5ib3VuZGVkIHBhZ2UgbGVuZ3RoLAogICAgLS0gIGkuZS4gaXQgcmV0dXJucyB0aGUgY29udmVudGlvbmFsIDAgYXMgcGFnZSBsZW5ndGguCiAKLSAgIGZ1bmN0aW9uIExpbmVfTGVuZ3RoIChXaW4gOiBpbiBXaW5kb3cpIHJldHVybiBDb3VudAorICAgZnVuY3Rpb24gTGluZV9MZW5ndGggKFdpbiA6IFdpbmRvdykgcmV0dXJuIENvdW50CiAgICBpcwogICAgICAgTl9MaW5lcyA6IExpbmVfQ291bnQ7CiAgICAgICBOX0NvbHMgIDogQ29sdW1uX0NvdW50OwpAQCAtOTksNyArOTksNyBAQAogICAgICAgcmV0dXJuIExpbmVfTGVuZ3RoIChHZXRfV2luZG93KTsKICAgIGVuZCBMaW5lX0xlbmd0aDsKIAotICAgZnVuY3Rpb24gUGFnZV9MZW5ndGggKFdpbiA6IGluIFdpbmRvdykgcmV0dXJuIENvdW50CisgICBmdW5jdGlvbiBQYWdlX0xlbmd0aCAoV2luIDogV2luZG93KSByZXR1cm4gQ291bnQKICAgIGlzCiAgICAgICBOX0xpbmVzIDogTGluZV9Db3VudDsKICAgICAgIE5fQ29scyAgOiBDb2x1bW5fQ291bnQ7CkBAIC0xMjQsNyArMTI0LDcgQEAKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgLS0gQ29sdW1uLCBMaW5lLCBhbmQgUGFnZSBDb250cm9sIC0tCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgIHByb2NlZHVyZSBOZXdfTGluZSAoV2luIDogaW4gV2luZG93OyBTcGFjaW5nIDogaW4gUG9zaXRpdmVfQ291bnQgOj0gMSkKKyAgIHByb2NlZHVyZSBOZXdfTGluZSAoV2luIDogV2luZG93OyBTcGFjaW5nIDogUG9zaXRpdmVfQ291bnQgOj0gMSkKICAgIGlzCiAgICAgICBQX1NpemUgOiBjb25zdGFudCBDb3VudCA6PSBQYWdlX0xlbmd0aCAoV2luKTsKICAgIGJlZ2luCkBAIC0xNDEsMTMgKzE0MSwxMyBAQAogICAgICAgZW5kIGxvb3A7CiAgICBlbmQgTmV3X0xpbmU7CiAKLSAgIHByb2NlZHVyZSBOZXdfTGluZSAoU3BhY2luZyA6IGluIFBvc2l0aXZlX0NvdW50IDo9IDEpCisgICBwcm9jZWR1cmUgTmV3X0xpbmUgKFNwYWNpbmcgOiBQb3NpdGl2ZV9Db3VudCA6PSAxKQogICAgaXMKICAgIGJlZ2luCiAgICAgICBOZXdfTGluZSAoR2V0X1dpbmRvdywgU3BhY2luZyk7CiAgICBlbmQgTmV3X0xpbmU7CiAKLSAgIHByb2NlZHVyZSBOZXdfUGFnZSAoV2luIDogaW4gV2luZG93KQorICAgcHJvY2VkdXJlIE5ld19QYWdlIChXaW4gOiBXaW5kb3cpCiAgICBpcwogICAgYmVnaW4KICAgICAgIENsZWFyIChXaW4pOwpAQCAtMTU5LDcgKzE1OSw3IEBACiAgICAgICBOZXdfUGFnZSAoR2V0X1dpbmRvdyk7CiAgICBlbmQgTmV3X1BhZ2U7CiAKLSAgIHByb2NlZHVyZSBTZXRfQ29sIChXaW4gOiBpbiBXaW5kb3c7ICBUbyA6IGluIFBvc2l0aXZlX0NvdW50KQorICAgcHJvY2VkdXJlIFNldF9Db2wgKFdpbiA6IFdpbmRvdzsgIFRvIDogUG9zaXRpdmVfQ291bnQpCiAgICBpcwogICAgICAgWSAgOiBMaW5lX1Bvc2l0aW9uOwogICAgICAgWDEgOiBDb2x1bW5fUG9zaXRpb247CkBAIC0xODcsMTMgKzE4NywxMyBAQAogICAgICAgZW5kIGlmOwogICAgZW5kIFNldF9Db2w7CiAKLSAgIHByb2NlZHVyZSBTZXRfQ29sIChUbyA6IGluIFBvc2l0aXZlX0NvdW50KQorICAgcHJvY2VkdXJlIFNldF9Db2wgKFRvIDogUG9zaXRpdmVfQ291bnQpCiAgICBpcwogICAgYmVnaW4KICAgICAgIFNldF9Db2wgKEdldF9XaW5kb3csIFRvKTsKICAgIGVuZCBTZXRfQ29sOwogCi0gICBwcm9jZWR1cmUgU2V0X0xpbmUgKFdpbiA6IGluIFdpbmRvdzsgVG8gOiBpbiBQb3NpdGl2ZV9Db3VudCkKKyAgIHByb2NlZHVyZSBTZXRfTGluZSAoV2luIDogV2luZG93OyBUbyA6IFBvc2l0aXZlX0NvdW50KQogICAgaXMKICAgICAgIFkxIDogTGluZV9Qb3NpdGlvbjsKICAgICAgIFkyIDogTGluZV9Qb3NpdGlvbjsKQEAgLTIwNSw2ICsyMDUsNyBAQAogICAgICAgZW5kIGlmOwogCiAgICAgICBHZXRfQ3Vyc29yX1Bvc2l0aW9uIChXaW4sIFkxLCBYKTsKKyAgICAgIHByYWdtYSBXYXJuaW5ncyAoT2ZmLCBYKTsgICAgICAgICAtLSAgdW5yZWZlcmVuY2VkCiAgICAgICBOICA6PSBOYXR1cmFsIChUbyk7IE4gOj0gTiAtIDE7CiAgICAgICBZMiA6PSBMaW5lX1Bvc2l0aW9uIChOKTsKICAgICAgIGlmIFkyIDwgWTEgdGhlbgpAQCAtMjE2LDEzICsyMTcsMTMgQEAKICAgICAgIGVuZCBpZjsKICAgIGVuZCBTZXRfTGluZTsKIAotICAgcHJvY2VkdXJlIFNldF9MaW5lIChUbyA6IGluIFBvc2l0aXZlX0NvdW50KQorICAgcHJvY2VkdXJlIFNldF9MaW5lIChUbyA6IFBvc2l0aXZlX0NvdW50KQogICAgaXMKICAgIGJlZ2luCiAgICAgICBTZXRfTGluZSAoR2V0X1dpbmRvdywgVG8pOwogICAgZW5kIFNldF9MaW5lOwogCi0gICBmdW5jdGlvbiBDb2wgKFdpbiA6IGluIFdpbmRvdykgcmV0dXJuIFBvc2l0aXZlX0NvdW50CisgICBmdW5jdGlvbiBDb2wgKFdpbiA6IFdpbmRvdykgcmV0dXJuIFBvc2l0aXZlX0NvdW50CiAgICBpcwogICAgICAgWSA6IExpbmVfUG9zaXRpb247CiAgICAgICBYIDogQ29sdW1uX1Bvc2l0aW9uOwpAQCAtMjQyLDcgKzI0Myw3IEBACiAgICAgICByZXR1cm4gQ29sIChHZXRfV2luZG93KTsKICAgIGVuZCBDb2w7CiAKLSAgIGZ1bmN0aW9uIExpbmUgKFdpbiA6IGluIFdpbmRvdykgcmV0dXJuIFBvc2l0aXZlX0NvdW50CisgICBmdW5jdGlvbiBMaW5lIChXaW4gOiBXaW5kb3cpIHJldHVybiBQb3NpdGl2ZV9Db3VudAogICAgaXMKICAgICAgIFkgOiBMaW5lX1Bvc2l0aW9uOwogICAgICAgWCA6IENvbHVtbl9Qb3NpdGlvbjsKQEAgLTI2Niw3ICsyNjcsNyBAQAogICAgLS0gQ2hhcmFjdGVycyBPdXRwdXQgLS0KICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSAgIHByb2NlZHVyZSBQdXQgKFdpbiAgOiBpbiBXaW5kb3c7IEl0ZW0gOiBpbiBDaGFyYWN0ZXIpCisgICBwcm9jZWR1cmUgUHV0IChXaW4gIDogV2luZG93OyBJdGVtIDogQ2hhcmFjdGVyKQogICAgaXMKICAgICAgIFBfU2l6ZSA6IGNvbnN0YW50IENvdW50IDo9IFBhZ2VfTGVuZ3RoIChXaW4pOwogICAgICAgWSA6IExpbmVfUG9zaXRpb247CkBAIC0yODQsNyArMjg1LDcgQEAKICAgICAgIEFkZCAoV2luLCBJdGVtKTsKICAgIGVuZCBQdXQ7CiAKLSAgIHByb2NlZHVyZSBQdXQgKEl0ZW0gOiBpbiBDaGFyYWN0ZXIpCisgICBwcm9jZWR1cmUgUHV0IChJdGVtIDogQ2hhcmFjdGVyKQogICAgaXMKICAgIGJlZ2luCiAgICAgICBQdXQgKEdldF9XaW5kb3csIEl0ZW0pOwpAQCAtMjk0LDcgKzI5NSw3IEBACiAgICAtLSBTdHJpbmdzLU91dHB1dCAtLQogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotICAgcHJvY2VkdXJlIFB1dCAoV2luICA6IGluIFdpbmRvdzsgSXRlbSA6IGluIFN0cmluZykKKyAgIHByb2NlZHVyZSBQdXQgKFdpbiAgOiBXaW5kb3c7IEl0ZW0gOiBTdHJpbmcpCiAgICBpcwogICAgICAgUF9TaXplIDogY29uc3RhbnQgQ291bnQgOj0gUGFnZV9MZW5ndGggKFdpbik7CiAgICAgICBZIDogTGluZV9Qb3NpdGlvbjsKQEAgLTMxMiwxNSArMzEzLDE1IEBACiAgICAgICBBZGQgKFdpbiwgSXRlbSk7CiAgICBlbmQgUHV0OwogCi0gICBwcm9jZWR1cmUgUHV0IChJdGVtIDogaW4gU3RyaW5nKQorICAgcHJvY2VkdXJlIFB1dCAoSXRlbSA6IFN0cmluZykKICAgIGlzCiAgICBiZWdpbgogICAgICAgUHV0IChHZXRfV2luZG93LCBJdGVtKTsKICAgIGVuZCBQdXQ7CiAKICAgIHByb2NlZHVyZSBQdXRfTGluZQotICAgICAoV2luICA6IGluIFdpbmRvdzsKLSAgICAgIEl0ZW0gOiBpbiBTdHJpbmcpCisgICAgIChXaW4gIDogV2luZG93OworICAgICAgSXRlbSA6IFN0cmluZykKICAgIGlzCiAgICBiZWdpbgogICAgICAgUHV0IChXaW4sIEl0ZW0pOwpAQCAtMzI4LDcgKzMyOSw3IEBACiAgICBlbmQgUHV0X0xpbmU7CiAKICAgIHByb2NlZHVyZSBQdXRfTGluZQotICAgICAoSXRlbSA6IGluIFN0cmluZykKKyAgICAgKEl0ZW0gOiBTdHJpbmcpCiAgICBpcwogICAgYmVnaW4KICAgICAgIFB1dF9MaW5lIChHZXRfV2luZG93LCBJdGVtKTsKZGlmZiAtLWdpdCBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8uYWRzIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby5hZHMKaW5kZXggMmY2YzQ4YS4uOWM0MDMyOSAxMDA2NDQKLS0tIGEvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby5hZHMKKysrIGIvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby5hZHMKQEAgLTcsNyArNyw3IEBACiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KIC0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQpAQCAtMzUsNyArMzUsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CiAtLSAgVmVyc2lvbiBDb250cm9sOgotLS0gICRSZXZpc2lvbjogMS4xMyAkCistLSAgJFJldmlzaW9uOiAxLjE0ICQKIC0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogd2l0aCBBZGEuVGV4dF9JTzsKQEAgLTU2LDEzICs1NiwxMyBAQAogICAgLS0gIHR5cGUgcGFyYW1ldGVyLiBUaGV5IHdpbGwgb3BlcmF0ZSBvbiBhIGRlZmF1bHQgd2luZG93LCB3aGljaCBjYW4KICAgIC0tICBiZSBzZXQgYnkgdGhlIHVzZXIuIEl0IGlzIGluaXRpYWxseSBlcXVhbCB0byBTdGFuZGFyZF9XaW5kb3cuCiAKLSAgIHByb2NlZHVyZSBTZXRfV2luZG93IChXaW4gOiBpbiBXaW5kb3cpOworICAgcHJvY2VkdXJlIFNldF9XaW5kb3cgKFdpbiA6IFdpbmRvdyk7CiAgICAtLSAgU2V0IFdpbiBhcyB0aGUgZGVmYXVsdCB3aW5kb3cKIAogICAgZnVuY3Rpb24gR2V0X1dpbmRvdyByZXR1cm4gV2luZG93OwogICAgLS0gIEdldCB0aGUgY3VycmVudCBkZWZhdWx0IHdpbmRvdwogCi0gICBwcm9jZWR1cmUgRmx1c2ggKFdpbiA6IGluIFdpbmRvdyk7CisgICBwcm9jZWR1cmUgRmx1c2ggKFdpbiA6IFdpbmRvdyk7CiAgICBwcm9jZWR1cmUgRmx1c2g7CiAKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC03NCw1MyArNzQsNTMgQEAKICAgIC0tICBBIHNjcm9sbC13aW5kb3cgaXMgaW50ZXJwcmV0ZWQgYXMgYW4gcGFnZSB3aXRoIHVuYm91bmRlZCBwYWdlIGxlbmd0aCwKICAgIC0tICBpLmUuIGl0IHJldHVybnMgdGhlIGNvbnZlbnRpb25hbCAwIGFzIHBhZ2UgbGVuZ3RoLgogCi0gICBmdW5jdGlvbiBMaW5lX0xlbmd0aCAoV2luIDogaW4gV2luZG93KSByZXR1cm4gQ291bnQ7CisgICBmdW5jdGlvbiBMaW5lX0xlbmd0aCAoV2luIDogV2luZG93KSByZXR1cm4gQ291bnQ7CiAgICBmdW5jdGlvbiBMaW5lX0xlbmd0aCByZXR1cm4gQ291bnQ7CiAKLSAgIGZ1bmN0aW9uIFBhZ2VfTGVuZ3RoIChXaW4gOiBpbiBXaW5kb3cpIHJldHVybiBDb3VudDsKKyAgIGZ1bmN0aW9uIFBhZ2VfTGVuZ3RoIChXaW4gOiBXaW5kb3cpIHJldHVybiBDb3VudDsKICAgIGZ1bmN0aW9uIFBhZ2VfTGVuZ3RoIHJldHVybiBDb3VudDsKIAogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAtLSBDb2x1bW4sIExpbmUsIGFuZCBQYWdlIENvbnRyb2wgLS0KICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgcHJvY2VkdXJlIE5ld19MaW5lIChXaW4gOiBpbiBXaW5kb3c7IFNwYWNpbmcgOiBpbiBQb3NpdGl2ZV9Db3VudCA6PSAxKTsKLSAgIHByb2NlZHVyZSBOZXdfTGluZSAoU3BhY2luZyA6IGluIFBvc2l0aXZlX0NvdW50IDo9IDEpOworICAgcHJvY2VkdXJlIE5ld19MaW5lIChXaW4gOiBXaW5kb3c7IFNwYWNpbmcgOiBQb3NpdGl2ZV9Db3VudCA6PSAxKTsKKyAgIHByb2NlZHVyZSBOZXdfTGluZSAoU3BhY2luZyA6IFBvc2l0aXZlX0NvdW50IDo9IDEpOwogCi0gICBwcm9jZWR1cmUgTmV3X1BhZ2UgKFdpbiA6IGluIFdpbmRvdyk7CisgICBwcm9jZWR1cmUgTmV3X1BhZ2UgKFdpbiA6IFdpbmRvdyk7CiAgICBwcm9jZWR1cmUgTmV3X1BhZ2U7CiAKLSAgIHByb2NlZHVyZSBTZXRfQ29sIChXaW4gOiBpbiBXaW5kb3c7ICBUbyA6IGluIFBvc2l0aXZlX0NvdW50KTsKLSAgIHByb2NlZHVyZSBTZXRfQ29sIChUbyA6IGluIFBvc2l0aXZlX0NvdW50KTsKKyAgIHByb2NlZHVyZSBTZXRfQ29sIChXaW4gOiBXaW5kb3c7ICBUbyA6IFBvc2l0aXZlX0NvdW50KTsKKyAgIHByb2NlZHVyZSBTZXRfQ29sIChUbyA6IFBvc2l0aXZlX0NvdW50KTsKIAotICAgcHJvY2VkdXJlIFNldF9MaW5lIChXaW4gOiBpbiBXaW5kb3c7IFRvIDogaW4gUG9zaXRpdmVfQ291bnQpOwotICAgcHJvY2VkdXJlIFNldF9MaW5lIChUbyA6IGluIFBvc2l0aXZlX0NvdW50KTsKKyAgIHByb2NlZHVyZSBTZXRfTGluZSAoV2luIDogV2luZG93OyBUbyA6IFBvc2l0aXZlX0NvdW50KTsKKyAgIHByb2NlZHVyZSBTZXRfTGluZSAoVG8gOiBQb3NpdGl2ZV9Db3VudCk7CiAKLSAgIGZ1bmN0aW9uIENvbCAoV2luIDogaW4gV2luZG93KSByZXR1cm4gUG9zaXRpdmVfQ291bnQ7CisgICBmdW5jdGlvbiBDb2wgKFdpbiA6IFdpbmRvdykgcmV0dXJuIFBvc2l0aXZlX0NvdW50OwogICAgZnVuY3Rpb24gQ29sIHJldHVybiBQb3NpdGl2ZV9Db3VudDsKIAotICAgZnVuY3Rpb24gTGluZSAoV2luIDogaW4gV2luZG93KSByZXR1cm4gUG9zaXRpdmVfQ291bnQ7CisgICBmdW5jdGlvbiBMaW5lIChXaW4gOiBXaW5kb3cpIHJldHVybiBQb3NpdGl2ZV9Db3VudDsKICAgIGZ1bmN0aW9uIExpbmUgcmV0dXJuIFBvc2l0aXZlX0NvdW50OwogCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgLS0gQ2hhcmFjdGVycy1PdXRwdXQgLS0KICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSAgIHByb2NlZHVyZSBQdXQgKFdpbiAgOiBpbiBXaW5kb3c7IEl0ZW0gOiBpbiBDaGFyYWN0ZXIpOwotICAgcHJvY2VkdXJlIFB1dCAoSXRlbSA6IGluIENoYXJhY3Rlcik7CisgICBwcm9jZWR1cmUgUHV0IChXaW4gIDogV2luZG93OyBJdGVtIDogQ2hhcmFjdGVyKTsKKyAgIHByb2NlZHVyZSBQdXQgKEl0ZW0gOiBDaGFyYWN0ZXIpOwogCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgLS0gU3RyaW5ncy1PdXRwdXQgLS0KICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSAgIHByb2NlZHVyZSBQdXQgKFdpbiAgOiBpbiBXaW5kb3c7IEl0ZW0gOiBpbiBTdHJpbmcpOwotICAgcHJvY2VkdXJlIFB1dCAoSXRlbSA6IGluIFN0cmluZyk7CisgICBwcm9jZWR1cmUgUHV0IChXaW4gIDogV2luZG93OyBJdGVtIDogU3RyaW5nKTsKKyAgIHByb2NlZHVyZSBQdXQgKEl0ZW0gOiBTdHJpbmcpOwogCiAgICBwcm9jZWR1cmUgUHV0X0xpbmUKLSAgICAgKFdpbiAgOiBpbiBXaW5kb3c7Ci0gICAgICBJdGVtIDogaW4gU3RyaW5nKTsKKyAgICAgKFdpbiAgOiBXaW5kb3c7CisgICAgICBJdGVtIDogU3RyaW5nKTsKIAogICAgcHJvY2VkdXJlIFB1dF9MaW5lCi0gICAgIChJdGVtIDogaW4gU3RyaW5nKTsKKyAgICAgKEl0ZW0gOiBTdHJpbmcpOwogCiAgICAtLSAgRXhjZXB0aW9ucwogCmRpZmYgLS1naXQgYS9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10cmFjZS5hZGJfcCBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRyYWNlLmFkYl9wCmluZGV4IDc0NzQ1NGEuLjBkZWFkMzcgMTAwNjQ0Ci0tLSBhL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRyYWNlLmFkYl9wCisrKyBiL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRyYWNlLmFkYl9wCkBAIC03LDcgKzcsNyBAQAogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gQ29weXJpZ2h0IChjKSAyMDAwLDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwOSwyMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCiAtLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KQEAgLTM1LDYwICszNSwzOSBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CiAtLSAgVmVyc2lvbiBDb250cm9sOgotLS0gICRSZXZpc2lvbjogMS41ICQKKy0tICAkUmV2aXNpb246IDEuMTEgJAogLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjaWYgQURBX1RSQUNFIHRoZW4KIHdpdGggSW50ZXJmYWNlcy5DOyB1c2UgSW50ZXJmYWNlcy5DOwotd2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkF1eDsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuQXV4Owotd2l0aCBBZGEuVW5jaGVja2VkX0NvbnZlcnNpb247CiAjZW5kIGlmOwogCiBwYWNrYWdlIGJvZHkgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UcmFjZSBpcwogCiAjaWYgQURBX1RSQUNFIHRoZW4KLSAgIHR5cGUgQ19UcmFjZVR5cGUgaXMgbmV3IENfVUludDsKLQotICAgZnVuY3Rpb24gVHJhY2VBZGFfVG9fVHJhY2VDIGlzIG5ldwotICAgICBBZGEuVW5jaGVja2VkX0NvbnZlcnNpb24gKFNvdXJjZSA9PiBUcmFjZV9BdHRyaWJ1dGVfU2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhcmdldCA9PiBDX1RyYWNlVHlwZSk7Ci0KICAgIHByb2NlZHVyZSBUcmFjZV9PbiAoeCA6IFRyYWNlX0F0dHJpYnV0ZV9TZXQpIGlzCi0gICAgICBwcm9jZWR1cmUgdHJhY2VDICh5IDogQ19UcmFjZVR5cGUpOworICAgICAgcHJvY2VkdXJlIHRyYWNlQyAoeSA6IFRyYWNlX0F0dHJpYnV0ZV9TZXQpOwogICAgICAgcHJhZ21hIEltcG9ydCAoQywgdHJhY2VDLCAidHJhY2UiKTsKICAgIGJlZ2luCi0gICAgICB0cmFjZUMgKFRyYWNlQWRhX1RvX1RyYWNlQyAoeCkpOworICAgICAgdHJhY2VDICh4KTsKICAgIGVuZCBUcmFjZV9PbjsKIAotICAgLS0gIDc1LiAoMTIpIEEgQyBmdW5jdGlvbiB0aGF0IHRha2VzIGEgdmFyaWFibGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBjYW4KLSAgIC0tICAgICAgY29ycmVzcG9uZCB0byBzZXZlcmFsIEFkYSBzdWJwcm9ncmFtcywgdGFraW5nIHZhcmlvdXMgc3BlY2lmaWMKLSAgIC0tICAgICAgbnVtYmVycyBhbmQgdHlwZXMgb2YgcGFyYW1ldGVycy4KLQogICAgcHJvY2VkdXJlIFRyYWNlX1B1dCAoc3RyIDogU3RyaW5nKSBpcwogICAgICAgcHJvY2VkdXJlIHRyYWNlZiAoZm9ybWF0IDogY2hhcl9hcnJheTsgcyA6IGNoYXJfYXJyYXkpOwotICAgICAgcHJhZ21hIEltcG9ydCAoQywgdHJhY2VmLCAiX3RyYWNlZiIpOwotICAgICAgVHh0ICAgIDogY2hhcl9hcnJheSAoMCAuLiBzdHInTGVuZ3RoKTsKLSAgICAgIExlbmd0aCA6IHNpemVfdDsKLSAgICAgIGZvcm1hdHN0ciA6IGNvbnN0YW50IFN0cmluZyA6PSAiJXMiICYgIEFTQ0lJLk51bDsKLSAgICAgIGZvcm1hdHR4dCA6IGNoYXJfYXJyYXkgKDAgLi4gZm9ybWF0c3RyJ0xlbmd0aCk7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCB0cmFjZWYsICJfdHJhY2VzIik7CisgICAgICAtLSAgX3RyYWNlcygpIGlzIGRlZmluZWQgaW4gY192YXJhcmdzX3RvX2FkYS5oCiAgICBiZWdpbgotICAgICAgVG9fQyAoZm9ybWF0c3RyLCBmb3JtYXR0eHQsIExlbmd0aCk7Ci0gICAgICBUb19DIChzdHIsIFR4dCwgTGVuZ3RoKTsKLSAgICAgIHRyYWNlZiAoZm9ybWF0dHh0LCBUeHQpOworICAgICAgdHJhY2VmIChUb19DICgiJXMiKSwgVG9fQyAoc3RyKSk7CiAgICBlbmQgVHJhY2VfUHV0OwogI2Vsc2UKICAgIHByb2NlZHVyZSBUcmFjZV9PbiAoeCA6IFRyYWNlX0F0dHJpYnV0ZV9TZXQpIGlzCi0jaWYgUFJBR01BX1VOUkVGCi0gICBwcmFnbWEgVW5yZWZlcmVuY2VkICh4KTsKLSNlbmQgaWY7CisgICAgICBwcmFnbWEgV2FybmluZ3MgKE9mZiwgeCk7ICAgICAgICAgLS0gIHVucmVmZXJlbmNlZAogICAgYmVnaW4KICAgICAgIG51bGw7CiAgICBlbmQgVHJhY2VfT247CiAKICAgIHByb2NlZHVyZSBUcmFjZV9QdXQgKHN0ciA6IFN0cmluZykgaXMKLSNpZiBQUkFHTUFfVU5SRUYKLSAgIHByYWdtYSBVbnJlZmVyZW5jZWQgKHN0cik7Ci0jZW5kIGlmOworICAgICAgcHJhZ21hIFdhcm5pbmdzIChPZmYsIHN0cik7ICAgICAgIC0tICB1bnJlZmVyZW5jZWQKICAgIGJlZ2luCiAgICAgICBudWxsOwogICAgZW5kIFRyYWNlX1B1dDsK