LyogSGV5LCBFbWFjcywgb3BlbiB0aGlzIGZpbGUgd2l0aCAtKi0gY29kaW5nOiBjcDEyNTAgLSotCiAqCiAqIEhlbHAgVmlld2VyIEN6ZWNoIHJlc291cmNlcwogKgogKiBDb3B5cmlnaHQgMTk5NiBVbHJpY2ggU2NobWlkCiAqIENvcHlyaWdodCAyMDAyIFN5bHZhaW4gUGV0cmVvbGxlCiAqIENvcHlyaWdodCAyMDA0IERhdmlkIEtyZWRiYQogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgovKiBDemVjaCBzdHJpbmdzIGluIENQMTI1MCAqLwoKLyogTWVudSAqLwoKTUFJTl9NRU5VIE1FTlUgTEFOR1VBR0UgTEFOR19DWkVDSCwgU1VCTEFOR19ERUZBVUxUCnsKIFBPUFVQICImU291Ym9yIiB7CiAgTUVOVUlURU0gIiZPdGV2+O10IiwgTU5JRF9GSUxFX09QRU4KICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJlRpc2siLCBNTklEX0ZJTEVfUFJJTlQKICBNRU5VSVRFTSAiTmEmc3RhdmVu7SB0aXNrdS4uLiIsIE1OSURfRklMRV9TRVRVUAogICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJktvbmVjIiwgTU5JRF9GSUxFX0VYSVQKIH0KIFBPUFVQICLacHJhdiZ5IiB7CiAgIE1FTlVJVEVNICImS29w7XJvdmF0Li4uIiwgTU5JRF9FRElUX0NPUFlETEcKICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgIE1FTlVJVEVNICJQJm96bmFtZW5hdCBzaS4uLiIsIE1OSURfRURJVF9BTk5PVEFURQogfQogUE9QVVAgIiZa4WxvnmthIiB7CiAgIE1FTlVJVEVNICJQ+GkmZGF0Li4uIiwgTU5JRF9CS01LX0RFRklORQogfQogUE9QVVAgIiZO4XBvduxkYSIgewogICBNRU5VSVRFTSAiTuFwJm927GRhIGsgbuFwb3bsZOwiLCBNTklEX0hFTFBfSEVMUE9OCiAgIE1FTlVJVEVNICJWnmR5IG5hICZ2cmNodSIsIE1OSURfSEVMUF9IRUxQVE9QCiAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICBNRU5VSVRFTSAiJkluZm9ybWFjZS4uLiIsIE1OSURfSEVMUF9BQk9VVAojaWZkZWYgV0lORUxJQgogICBNRU5VSVRFTSAiTyAmV0lORSIsIE1OSURfSEVMUF9XSU5FCiNlbmRpZgogfQp9CgovKiBTdHJpbmdzICovClNUUklOR1RBQkxFIERJU0NBUkRBQkxFIExBTkdVQUdFIExBTkdfQ1pFQ0gsIFNVQkxBTkdfREVGQVVMVAp7ClNUSURfV0lORV9IRUxQLCAJIk7hcG927GRhIFdJTkUiClNUSURfV0hFUlJPUiwgCQkiQ0hZQkEiClNUSURfV0FSTklORywgIAkJIlZBUk9WwU7NIgpTVElEX0lORk8sICAJCSJJbmZvcm1hY2UiClNUSURfTk9UX0lNUExFTUVOVEVELCAJIk5lbu0gaW1wbGVtZW50b3bhbm8iClNUSURfSExQRklMRV9FUlJPUl9zLCAJIk5lbHplIHD4Zejtc3Qgc291Ym9yIG7hcG927GR5IGAlcyciClNUSURfQ09OVEVOVFMsIAkJIiZPYnNhaCIKU1RJRF9TRUFSQ0gsIAkJIiZIbGVkYXQiClNUSURfQkFDSywgCQkiJlpw7HQiClNUSURfSElTVE9SWSwgCQkiJkhpc3RvcmllIgpTVElEX1RPUElDUywJCSImVOltYXRhIgpTVElEX0FMTF9GSUxFUywgCSJWmmVjaG55IHNvdWJvcnkgKCouKikiClNUSURfSEVMUF9GSUxFU19ITFAsIAkiU291Ym9yeSBu4XBvduxkeSAoKi5obHApIgpTVElEX0ZJTEVfTk9UX0ZPVU5EX3MJIkNhbm5vdCBmaW5kICclcycuIERvIHlvdSB3YW50IHRvIGZpbmQgdGhpcyBmaWxlIHlvdXJzZWxmPyIKfQo=