LyoKICogIFRhc2sgTWFuYWdlcgogKgogKiAgQ29weXJpZ2h0IDE5OTktMjAwMSBCcmlhbiBQYWxtZXIKICoKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKI2luY2x1ZGUgPHdpbmRlZi5oPgojaW5jbHVkZSA8d2ludXNlci5oPgojaW5jbHVkZSA8Y29tbWN0cmwuaD4KCiNpbmNsdWRlICJyZXNvdXJjZS5oIgoKLyogTGFuZ3VhZ2UgcmVzb3VyY2VzICovCgojaW5jbHVkZSAiRGEucmMiCiNpbmNsdWRlICJEZS5yYyIKI2luY2x1ZGUgIkVuLnJjIgojaW5jbHVkZSAiRnIucmMiCiNpbmNsdWRlICJKYS5yYyIKI2luY2x1ZGUgIktvLnJjIgojaW5jbHVkZSAiTmwucmMiCiNpbmNsdWRlICJOby5yYyIKI2luY2x1ZGUgIlBsLnJjIgojaW5jbHVkZSAiU2kucmMiCiNpbmNsdWRlICJUci5yYyIKCkxBTkdVQUdFIExBTkdfTkVVVFJBTCwgU1VCTEFOR19ORVVUUkFMCgovKgogSWNvbgoqLwoKLyogSWNvbiB3aXRoIGxvd2VzdCBJRCB2YWx1ZSBwbGFjZWQgZmlyc3QgdG8gZW5zdXJlIGFwcGxpY2F0aW9uIGljb24KICAgcmVtYWlucyBjb25zaXN0ZW50IG9uIGFsbCBzeXN0ZW1zLiAqLwovKiBAbWFrZWRlcDogdGFza21nci5pY28gKi8KSURJX1RBU0tNQU5BR0VSICAgICAgICAgSUNPTiAgICBESVNDQVJEQUJMRSB0YXNrbWdyLmljbwoKLyogQG1ha2VkZXA6IHdpbmRvdy5pY28gKi8KSURJX1dJTkRPVyAgICAgICAgICAgICAgSUNPTiAgICBESVNDQVJEQUJMRSB3aW5kb3cuaWNvCgovKiBAbWFrZWRlcDogd2luZG93c20uaWNvICovCklESV9XSU5ET1dTTSAgICAgICAgICAgIElDT04gICAgRElTQ0FSREFCTEUgd2luZG93c20uaWNvCgovKgogVmVyc2lvbgoqLwoKVlNfVkVSU0lPTl9JTkZPIFZFUlNJT05JTkZPCiBGSUxFVkVSU0lPTiAxLDAsMCwxCiBQUk9EVUNUVkVSU0lPTiAxLDAsMCwxCiBGSUxFRkxBR1NNQVNLIDB4M2ZMCiNpZmRlZiBfREVCVUcKIEZJTEVGTEFHUyAweDFMCiNlbHNlCiBGSUxFRkxBR1MgMHgwTAojZW5kaWYKIEZJTEVPUyAweDQwMDA0TAogRklMRVRZUEUgMHgxTAogRklMRVNVQlRZUEUgMHgwTApCRUdJTgogICAgQkxPQ0sgIlN0cmluZ0ZpbGVJbmZvIgogICAgQkVHSU4KICAgICAgICBCTE9DSyAiMDQwOTA0YjAiCiAgICAgICAgQkVHSU4KICAgICAgICAgICAgVkFMVUUgIkNvbXBhbnlOYW1lIiwgIkJyaWFuIFBhbG1lclwwIgogICAgICAgICAgICBWQUxVRSAiRmlsZURlc2NyaXB0aW9uIiwgIlRhc2sgTWFuYWdlciBieSBCcmlhbiBQYWxtZXJcMCIKICAgICAgICAgICAgVkFMVUUgIkZpbGVWZXJzaW9uIiwgIjEuMC4wLjFcMCIKICAgICAgICAgICAgVkFMVUUgIkludGVybmFsTmFtZSIsICJ0YXNrbWdyXDAiCiAgICAgICAgICAgIFZBTFVFICJMZWdhbENvcHlyaWdodCIsICJDb3B5cmlnaHQgqSBCcmlhbiBQYWxtZXIgMjAwMFwwIgogICAgICAgICAgICBWQUxVRSAiT3JpZ2luYWxGaWxlbmFtZSIsICJ0YXNrbWdyLmV4ZVwwIgogICAgICAgICAgICBWQUxVRSAiUHJvZHVjdE5hbWUiLCAiVGFzayBNYW5hZ2VyIGJ5IEJyaWFuIFBhbG1lclwwIgogICAgICAgICAgICBWQUxVRSAiUHJvZHVjdFZlcnNpb24iLCAiMS4wLjAuMVwwIgogICAgICAgIEVORAogICAgRU5ECiAgICBCTE9DSyAiVmFyRmlsZUluZm8iCiAgICBCRUdJTgogICAgICAgIFZBTFVFICJUcmFuc2xhdGlvbiIsIDB4NDA5LCAxMjAwCiAgICBFTkQKRU5ECgovKgogQml0bWFwCiovCgovKiBAbWFrZWRlcDogdHJheW1hc2suYm1wICovCklEQl9UUkFZTUFTSyAgICAgICAgICAgIEJJVE1BUCAgRElTQ0FSREFCTEUgdHJheW1hc2suYm1wCiAgICAgICAgCi8qIEBtYWtlZGVwOiB0cmF5aWNvbi5ibXAgKi8KSURCX1RSQVlJQ09OICAgICAgICAgICAgQklUTUFQICBESVNDQVJEQUJMRSB0cmF5aWNvbi5ibXAKCi8qIEBtYWtlZGVwOiBmb250LmJtcCAqLwpJREJfRk9OVCAgICAgICAgICAgICAgICBCSVRNQVAgIERJU0NBUkRBQkxFIGZvbnQuYm1wCg==