LyoKICogQ29weXJpZ2h0IDIwMDYgYnkgSGVubmluZyBHZXJoYXJkdAogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgpMQU5HVUFHRSBMQU5HX0dFUk1BTiwgU1VCTEFOR19ORVVUUkFMCgpNQUlOTUVOVSBNRU5VIERJU0NBUkRBQkxFIApCRUdJTgogICAgUE9QVVAgIiZEYXRlaSIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIiZOZXVcdEN0cmwrTiIsICAgICAgICAgIElEX0ZJTEVfTkVXCiAgICAgICAgTUVOVUlURU0gIibWZmZuZW5cdEN0cmwrTyIsICAgICAgIElEX0ZJTEVfT1BFTgogICAgICAgIE1FTlVJVEVNICImU3BlaWNoZXJuXHRDdHJsK1MiLCAgICBJRF9GSUxFX1NBVkUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJkJlZW5kZW4iLCAgICAgIElEX0ZJTEVfRVhJVAogICAgRU5ECiAgICBQT1BVUCAiJkJlYXJiZWl0ZW4iCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICImUvxja2fkbmdpZ1x0Q3RybCtaIiwgICAgICAgICBJRF9FRElUX1VORE8KICAgICAgICBNRU5VSVRFTSAiJldpZWRlcmhvbGVuXHRDdHJsK1kiLCAgICAgICAgSURfRURJVF9SRURPCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIkF1cyZzY2huZWlkZW5cdEN0cmwrWCIsICAgICAgIElEX0VESVRfQ1VUCiAgICAgICAgTUVOVUlURU0gIiZLb3BpZXJlblx0Q3RybCtDIiwgICAgICAgICAgIElEX0VESVRfQ09QWQogICAgICAgIE1FTlVJVEVNICImRWluZvxnZW5cdEN0cmwrViIsICAgICAgICAgICBJRF9FRElUX1BBU1RFCiAgICAgICAgTUVOVUlURU0gIiZM9nNjaGVuXHRERUwiLCAgICAgICAgICAgICAgIElEX0VESVRfQ0xFQVIKICAgICAgICBNRU5VSVRFTSAiJkFsbGVzIG1hcmtpZXJlblx0Q3RybCtBIiwgICAgSURfRURJVF9TRUxFQ1RBTEwKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiU2NocmVpYmdlc2No/CZ0enQiLCAgICAgICAgICAgSURfRURJVF9SRUFET05MWQogICAgICAgIE1FTlVJVEVNICImR2XkbmRlcnQiLCAgICAgICAgICAgICAgICAgICBJRF9FRElUX01PRElGSUVECiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgUE9QVVAgIiZFeHRyYXMiCiAgICAgICAgQkVHSU4KICAgICAgICAgICAgTUVOVUlURU0gIk1hcmtpZXJ1bmdzJmluZm9ybWF0aW9uIiwgICAgIElEX0VESVRfU0VMRUNUSU9OSU5GTwogICAgICAgICAgICBNRU5VSVRFTSAiWmVpY2hlbiZmb3JtYXQiLCAgICAgICAgICAgICAgSURfRURJVF9DSEFSRk9STUFUCiAgICAgICAgICAgIE1FTlVJVEVNICImU3RhbmRhcmR6ZWljaGVuZm9ybWF0IiwgICAgICBJRF9FRElUX0RFRkNIQVJGT1JNQVQKICAgICAgICAgICAgTUVOVUlURU0gIiZBYnNhdHpmb3JtYXQiLCAgICAgICAgICAgICAgIElEX0VESVRfUEFSQUZPUk1BVAogICAgICAgICAgICBNRU5VSVRFTSAiJkdldCB0ZXh0IiwgICAgICAgICAgICAgICAgICAgSURfRURJVF9HRVRURVhUCiAgICAgICAgRU5ECiAgICBFTkQKICAgIFBPUFVQICJGJm9ybWF0IgogICAgQkVHSU4KICAgICAgICBQT1BVUCAiJkhpbnRlcmdydW5kIgogICAgICAgIEJFR0lOCiAgICAgICAgICAgIE1FTlVJVEVNICImU3lzdGVtXHRDdHJsKzEiLCAgICAgICAgIElEX0JBQ0tfMQogICAgICAgICAgICBNRU5VSVRFTSAiJlBvc3RJdC1Ob3Rpelx0Q3RybCsyIiwgICAgICAgICAgIElEX0JBQ0tfMgogICAgICAgIEVORAogICAgICAgIFBPUFVQICImQXVzcmljaHR1bmciCiAgICAgICAgQkVHSU4KICAgICAgICAgICAgTUVOVUlURU0gIiZMaW5rc1x0Q3RybCtMIiwgICAgICAgIElEX0FMSUdOX0xFRlQKICAgICAgICAgICAgTUVOVUlURU0gIiZaZW50cmllcnRcdEN0cmwrRSIsICAgIElEX0FMSUdOX0NFTlRFUgogICAgICAgICAgICBNRU5VSVRFTSAiJlJlY2h0c1x0Q3RybCtSIiwgICAgICAgSURfQUxJR05fUklHSFQKICAgICAgICBFTkQKICAgIEVORApFTkQK