LyoKICogQ29weXJpZ2h0IDIwMDggUmljYXJkbyBGaWxpcGUKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKI2luY2x1ZGUgIm1zdmlkZW9fcHJpdmF0ZS5oIgoKTEFOR1VBR0UgTEFOR19QT1JUVUdVRVNFLCBTVUJMQU5HX05FVVRSQUwKCklDTV9DSE9PU0VfQ09NUFJFU1NPUiBESUFMT0cgIDM2LCAyNCwgMTg3LCA5NQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiQ29tcHJlc3PjbyBkZSB27WRlbyIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CiAgICBERUZQVVNIQlVUVE9OICJPSyIsSURPSywxMjksMiw0OSwxNAogICAgUFVTSEJVVFRPTiAiQ2FuY2VsYXIiLElEQ0FOQ0VMLDEyOSwxOCw0OSwxNAoKICAgIExURVhUICImQ29tcHJlc3NvcjoiLC0xLDksNiwxMDUsOAogICAgQ09NQk9CT1ggSURDX0NPTVBfTElTVCw5LDE2LDExMSw2NyxDQlNfRFJPUERPV05MSVNUfFdTX1ZTQ1JPTEx8V1NfVEFCU1RPUAoKICAgIFBVU0hCVVRUT04gIkNvbiZmaWd1cmFyLi4uIixJRENfQ09ORklHVVJFLDEyOSwzNiw0OSwxNAogICAgUFVTSEJVVFRPTiAiJlNvYnJlLi4uIixJRENfQUJPVVQsMTI5LDUyLDQ5LDE0CgogICAgU0NST0xMQkFSIElEQ19RVUFMSVRZX1NDUk9MTCw5LDQ0LDExMSw5LFdTX1RBQlNUT1AKCiAgICBMVEVYVCAiJlF1YWxpZGFkZSBkZSBjb21wcmVzc+NvOiIsSURDX1FVQUxJVFlfVFhULDksMzQsODAsOAoKICAgIENPTlRST0wgIiZJbWFnZW0gY2hhdmUgdG9kb3Mgb3MiLElEQ19LRVlGUkFNRV9DSEVDS0JPWCwiQnV0dG9uIixCU19BVVRPQ0hFQ0tCT1h8V1NfVEFCU1RPUCw5LDYwLDY2LDEyCiAgICBFRElUVEVYVCBJRENfS0VZRlJBTUUsNzgsNjAsMjIsMTIKICAgIExURVhUICJmcmFtZXMiLElEQ19LRVlGUkFNRV9GUkFNRVMsMTAzLDYyLDI2LDEwCgogICAgQ09OVFJPTCAiJkNhZOpuY2lhIGRlIGRhZG9zIixJRENfREFUQVJBVEVfQ0hFQ0tCT1gsIkJ1dHRvbiIsQlNfQVVUT0NIRUNLQk9YfFdTX1RBQlNUT1AsOSw3Niw2NiwxMgogICAgRURJVFRFWFQgSURDX0RBVEFSQVRFLDc4LDc2LDIyLDEyCiAgICBMVEVYVCAiS0Ivc2VjIixJRENfREFUQVJBVEVfS0IsMTAyLDc4LDI2LDEwCn0K