IyEvYmluL3NoCiMKIyBTY3JpcHQgdG8gY3JlYXRlIHRoZSBpbml0aWFsIFdJTkVQUkVGSVggZGlyZWN0b3J5CiMKIyBDb3B5cmlnaHQgMTk5OSBPdmUgS+V2ZW4KIyBDb3B5cmlnaHQgMjAwNCBDaHJpcyBNb3JnYW4KIyBDb3B5cmlnaHQgMjAwNCBBbGV4YW5kcmUgSnVsbGlhcmQKIwojIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiMgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiMgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIwojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKIyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQojCgp1c2FnZSgpCnsKICAgIGVjaG8gIlVzYWdlOiAkMCBbb3B0aW9uc10iCiAgICBlY2hvICIiCiAgICBlY2hvICJPcHRpb25zOiIKICAgIGVjaG8gIiAgLWgsIC0taGVscCAgICAgICAgICAgICAgICAgRGlzcGxheSB0aGlzIG1lc3NhZ2UiCiAgICBlY2hvICIgICAgICAtLXByZWZpeCA8ZGlyPiAgICAgICAgIERpcmVjdG9yeSB0byBjcmVhdGUgKGRlZmF1bHQ6IFwkV0lORVBSRUZJWCBvciB+Ly53aW5lKSIKICAgIGVjaG8gIiAgLXEsIC0tcXVpZXQgICAgICAgICAgICAgICAgRG9uJ3QgcHJpbnQgc3RhdHVzIG1lc3NhZ2VzIgogICAgZWNobyAiICAtdSwgLS11cGRhdGUgICAgICAgICAgICAgICBVcGRhdGUgdGhlIHByZWZpeCBkaXJlY3RvcnkgaWYgaXQgYWxyZWFkeSBleGlzdHMiCiAgICBlY2hvICIgICAgICAtLXVzZS13aW5lLXRyZWUgPGRpcj4gIFJ1biBmcm9tIHRoZSBXaW5lIHNvdXJjZSB0cmVlIDxkaXI+IgogICAgZWNobyAiIgp9CgpzZXQgLWUKCmRsbGRpcj0iQGRsbGRpckAiCmRhdGFkaXI9IkBkYXRhZGlyQC93aW5lIgoKZG9fdXBkYXRlPTAKcXVpZXQ9MAoKd2hpbGUgWyAkIyAtZ3QgMCBdCmRvCiAgICBjYXNlICIkMSIgaW4KICAgICAgICAtaHwtLWhlbHApCiAgICAgICAgICAgIHVzYWdlCiAgICAgICAgICAgIGV4aXQgMAogICAgICAgICAgICA7OwogICAgICAgIC0tcHJlZml4KQogICAgICAgICAgICBXSU5FUFJFRklYPSIkMiIKICAgICAgICAgICAgc2hpZnQgMgogICAgICAgICAgICA7OwogICAgICAgIC11fC0tdXBkYXRlKQogICAgICAgICAgICBkb191cGRhdGU9MQogICAgICAgICAgICBzaGlmdAogICAgICAgICAgICA7OwogICAgICAgIC1xfC0tcXVpZXQpCiAgICAgICAgICAgIHF1aWV0PTEKICAgICAgICAgICAgc2hpZnQKICAgICAgICAgICAgOzsKICAgICAgICAtLXVzZS13aW5lLXRyZWUpCiAgICAgICAgICAgIHRvcGRpcj1gY2QgIiQyIiAmJiBwd2RgCiAgICAgICAgICAgIGlmIFsgLXggIiR0b3BkaXIvc2VydmVyL3dpbmVzZXJ2ZXIiIF0KICAgICAgICAgICAgdGhlbgogICAgICAgICAgICAgICAgV0lORUxPQURFUj0iJHRvcGRpci93aW5lIgogICAgICAgICAgICAgICAgZGxsZGlyPSIkdG9wZGlyL3Byb2dyYW1zIgogICAgICAgICAgICAgICAgZGF0YWRpcj0iJHRvcGRpci90b29scyIKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgZWNobyAiJDIgaXMgbm90IGEgdmFsaWQgV2luZSBzb3VyY2UgdHJlZSIKICAgICAgICAgICAgICAgIGV4aXQgMQogICAgICAgICAgICBmaQogICAgICAgICAgICBzaGlmdCAyCiAgICAgICAgICAgIDs7CiAgICAgICAgKikKICAgICAgICAgICAgZWNobyAiVW5rbm93biBvcHRpb24gJDEiCiAgICAgICAgICAgIHVzYWdlCiAgICAgICAgICAgIGV4aXQgMQogICAgICAgICAgICA7OwogIGVzYWMKZG9uZQoKV0lORVBSRUZJWD0iJHtXSU5FUFJFRklYOi0kSE9NRS8ud2luZX0iCgppZiBbIC1kICIkV0lORVBSRUZJWCIgXSB8fCBta2RpciAiJFdJTkVQUkVGSVgiOyB0aGVuIDoKZWxzZQogICAgZWNobyAiQ291bGQgbm90IGNyZWF0ZSAkV0lORVBSRUZJWCwgYWJvcnRpbmciCiAgICBleGl0IDEKZmkKCldJTkVQUkVGSVg9YGNkICIkV0lORVBSRUZJWCIgJiYgcHdkYAoKIyBDcmVhdGUgdGhlIGRyaXZlIHN5bWxpbmtzCgppZiBbICEgLWQgIiRXSU5FUFJFRklYL2Rvc2RldmljZXMiIF0KdGhlbgogICAgbWtkaXIgIiRXSU5FUFJFRklYL2Rvc2RldmljZXMiCiAgICBbIC1kICIkV0lORVBSRUZJWC9kcml2ZV9jIiBdIHx8IG1rZGlyICIkV0lORVBSRUZJWC9kcml2ZV9jIgogICAgbG4gLXMgIi4uL2RyaXZlX2MiICIkV0lORVBSRUZJWC9kb3NkZXZpY2VzL2M6IgogICAgbG4gLXMgIi8iICIkV0lORVBSRUZJWC9kb3NkZXZpY2VzL3o6IgpmaQoKQ1JPT1Q9IiRXSU5FUFJFRklYL2Rvc2RldmljZXMvYzoiCgojIENyZWF0ZSB0aGUgZGlyZWN0b3J5IHRyZWUKCmZvciBpIGluIFwKICAgICIkQ1JPT1QvTXkgRG9jdW1lbnRzIiBcCiAgICAiJENST09UL015IERvY3VtZW50cy9NeSBNdXNpYyIgXAogICAgIiRDUk9PVC9NeSBEb2N1bWVudHMvTXkgUGljdHVyZXMiIFwKICAgICIkQ1JPT1QvTXkgRG9jdW1lbnRzL015IFZpZGVvIiBcCiAgICAiJENST09UL1Byb2dyYW0gRmlsZXMiIFwKICAgICIkQ1JPT1QvUHJvZ3JhbSBGaWxlcy9Db21tb24gRmlsZXMiIFwKICAgICIkQ1JPT1Qvd2luZG93cyIgXAogICAgIiRDUk9PVC93aW5kb3dzL2NvbW1hbmQiIFwKICAgICIkQ1JPT1Qvd2luZG93cy9mb250cyIgXAogICAgIiRDUk9PVC93aW5kb3dzL2luZiIgXAogICAgIiRDUk9PVC93aW5kb3dzL3Byb2ZpbGVzIiBcCiAgICAiJENST09UL3dpbmRvd3MvcHJvZmlsZXMvQWRtaW5pc3RyYXRvciIgXAogICAgIiRDUk9PVC93aW5kb3dzL1N0YXJ0IE1lbnUiIFwKICAgICIkQ1JPT1Qvd2luZG93cy9BcHBsaWNhdGlvbiBEYXRhIiBcCiAgICAiJENST09UL3dpbmRvd3MvU3RhcnQgTWVudS9Qcm9ncmFtcyIgXAogICAgIiRDUk9PVC93aW5kb3dzL1N0YXJ0IE1lbnUvUHJvZ3JhbXMvU3RhcnR1cCIgXAogICAgIiRDUk9PVC93aW5kb3dzL3N5c3RlbSIgXAogICAgIiRDUk9PVC93aW5kb3dzL3RlbXAiCmRvCiAgICBbIC1kICIkaSIgXSB8fCBta2RpciAiJGkiCmRvbmUKCiMgQ3JlYXRlIHRoZSBhcHBsaWNhdGlvbiBzeW1saW5rcwoKbGlua19hcHAoKQp7CiAgIHJtIC1mICIkMiIgJiYgbG4gLXMgIiRkbGxkaXIvJDEuZXhlLnNvIiAiJDIiIHx8IGVjaG8gIldhcm5pbmc6IGZhaWxlZCB0byBjcmVhdGUgJDIiCn0KCmxpbmtfYXBwIHN0YXJ0ICAgICAgICAiJENST09UL3dpbmRvd3MvY29tbWFuZC9zdGFydC5leGUiCmxpbmtfYXBwIG5vdGVwYWQgICAgICAiJENST09UL3dpbmRvd3Mvbm90ZXBhZC5leGUiCmxpbmtfYXBwIHJlZ2VkaXQgICAgICAiJENST09UL3dpbmRvd3MvcmVnZWRpdC5leGUiCmxpbmtfYXBwIHJ1bmRsbDMyICAgICAiJENST09UL3dpbmRvd3MvcnVuZGxsMzIuZXhlIgpsaW5rX2FwcCB3Y21kICAgICAgICAgIiRDUk9PVC93aW5kb3dzL3N5c3RlbS93Y21kLmV4ZSIKbGlua19hcHAgY29udHJvbCAgICAgICIkQ1JPT1Qvd2luZG93cy9zeXN0ZW0vY29udHJvbC5leGUiCmxpbmtfYXBwIHdpbmhlbHAgICAgICAiJENST09UL3dpbmRvd3Mvc3lzdGVtL2hlbHAuZXhlIgpsaW5rX2FwcCBub3RlcGFkICAgICAgIiRDUk9PVC93aW5kb3dzL3N5c3RlbS9ub3RlcGFkLmV4ZSIKbGlua19hcHAgcHJvZ21hbiAgICAgICIkQ1JPT1Qvd2luZG93cy9zeXN0ZW0vcHJvZ21hbi5leGUiCmxpbmtfYXBwIHJlZ3N2cjMyICAgICAiJENST09UL3dpbmRvd3Mvc3lzdGVtL3JlZ3N2cjMyLmV4ZSIKbGlua19hcHAgd2luZW1pbmUgICAgICIkQ1JPT1Qvd2luZG93cy9zeXN0ZW0vd2lubWluZS5leGUiCmxpbmtfYXBwIHdpbnZlciAgICAgICAiJENST09UL3dpbmRvd3Mvc3lzdGVtL3dpbnZlci5leGUiCmxpbmtfYXBwIHVuaW5zdGFsbGVyICAiJENST09UL3dpbmRvd3MvdW5pbnN0YWxsLmV4ZSIKbGlua19hcHAgd2luaGVscCAgICAgICIkQ1JPT1Qvd2luZG93cy93aW5oZWxwLmV4ZSIKbGlua19hcHAgd2luaGVscCAgICAgICIkQ1JPT1Qvd2luZG93cy93aW5obHAzMi5leGUiCmxpbmtfYXBwIHdpbmVicm93c2VyICAiJENST09UL3dpbmRvd3Mvd2luZWJyb3dzZXIuZXhlIgoKIyBDb3B5IHRoZSAuaW5mIHNjcmlwdCBhbmQgcnVuIGl0CgpjcCAiJGRhdGFkaXIvd2luZS5pbmYiICIkQ1JPT1Qvd2luZG93cy9pbmYvd2luZS5pbmYiCmV4cG9ydCBXSU5FUFJFRklYCiR7V0lORUxPQURFUjotd2luZX0gcnVuZGxsMzIuZXhlIHNldHVwYXBpLmRsbCxJbnN0YWxsSGluZlNlY3Rpb24gRGVmYXVsdEluc3RhbGwgMTI4IHdpbmUuaW5mCgojIFdhaXQgZm9yIHRoZSB3aW5lc2VydmVyIHRvIGZpbmlzaAoKaWYgWyAkZG9fdXBkYXRlID0gMCBdCnRoZW4KICAgICR7V0lORVNFUlZFUjotd2luZXNlcnZlcn0gLXcKICAgIGlmIFsgJHF1aWV0ID0gMCBdCiAgICB0aGVuCiAgICAgICAgZWNobyAiJFdJTkVQUkVGSVggY3JlYXRlZCBzdWNjZXNzZnVsbHkuIgogICAgZmkKZWxzZQogICAgaWYgWyAkcXVpZXQgPSAwIF0KICAgIHRoZW4KICAgICAgICBlY2hvICIkV0lORVBSRUZJWCB1cGRhdGVkIHN1Y2Nlc3NmdWxseS4iCiAgICBmaQpmaQo=