LyoKICogSGVscCBWaWV3ZXIKICoKICogQ29weXJpZ2h0IDE5OTYgVWxyaWNoIFNjaG1pZAogKiBGaW5uaXNoIGxhbmd1YWdlIGJ5IEp1c3NpIFRpcmtrb25lbiA8anRAbW9kZWVtaS5jcy50dXQuZmk+CiAqIENvcHlyaWdodCAyMDAyIFN5bHZhaW4gUGV0cmVvbGxlIDxzcGV0cmVvbGxlQHlhaG9vLmZyPgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICovCgovKiBNZW51ICovCgpNQUlOX01FTlUgTUVOVSBMQU5HVUFHRSBMQU5HX0ZJTk5JU0gsIFNVQkxBTkdfTkVVVFJBTAp7CiBQT1BVUCAiJlRpZWRvc3RvIiB7CiAgTUVOVUlURU0gIiZBdmFhLi4uIiwgMHgxMDEKICBNRU5VSVRFTSBTRVBBUkFUT1IgICAKICBNRU5VSVRFTSAiJlR1bG9zdGEiLCAweDEwNAogIE1FTlVJVEVNICImS2lyam9pdHRpbWVuIGFzZXR1a3NldC4uLiIsIDB4MTA2CiAgIE1FTlVJVEVNIFNFUEFSQVRPUiAgIAogIE1FTlVJVEVNICImTG9wZXRhIiwgMHgxMDgKIH0KIFBPUFVQICImTXVva2thYSIgewogICBNRU5VSVRFTSAiJktvcGlvaS4uLiIsIDB4MTBBCiAgIE1FTlVJVEVNIFNFUEFSQVRPUiAgIAogICBNRU5VSVRFTSAiJkh1b21hdXR1cy4uLiIsIDB4MTBDCiB9CiBQT1BVUCAiJktpcmphbm1lcmtraSIgewogICBNRU5VSVRFTSAiJkFzZXRhLi4uIiwgMHgxMEUKIH0KIFBPUFVQICImT2hqZSIgewogICBNRU5VSVRFTSAiJk9oamVlbiBr5Hl0dPYiLCAweDExMAogICBNRU5VSVRFTSAiJkFpbmEgcOTkbGxpbW3kaXNlbuQiLCAweDExMQogICBNRU5VSVRFTSBTRVBBUkFUT1IgICAKICAgTUVOVUlURU0gIlQmaWV0b2phLi4uIiwgMHgxMTMKI2lmZGVmIFdJTkVMSUIKICAgTUVOVUlURU0gIiZUaWV0b2phIFdJTkVzdOQiLCAweDExNAojZW5kaWYKIH0KfQoKLyogU3RyaW5ncyAqLwoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUgTEFOR1VBR0UgTEFOR19GSU5OSVNILCBTVUJMQU5HX05FVVRSQUwKewpXSU5FX0hFTFAsIAkJIldJTkUgT2hqZSIKV0hFUlJPUiwgCQkiVklSSEUiCldBUk5JTkcsICAJCSJWQVJPSVRVUyIKSU5GTywgIAkJCSJUaWV0b2phIgpOT1RfSU1QTEVNRU5URUQsIAkiRWkga+R5dGV0dOR2aXNz5CIKSExQRklMRV9FUlJPUl9zLCAJIlZpcmhlIGx1ZXR0YWVzc2Egb2hqZXRpZWRvc3RvYSBgJXMnIgpDT05URU5UUywgCQkiJlNpc+RsbHlzIgpTRUFSQ0gsIAkJIiZFdHNpIgpCQUNLLCAJCQkiJlRha2Fpc2luIgpISVNUT1JZLCAJCSImTHVldHV0IgpBTExfRklMRVMsIAkJIkthaWtraSB0aWVkb3N0b3QgKCouKikiCkhFTFBfRklMRVNfSExQLCAJIk9oamV0aWVkb3N0b3QgKCouaGxwKSIKfQo=