ZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvb3Blbm1heC9PTVhfQXVkaW8uaCBiL2luY2x1ZGUvbWVkaWEvb3Blbm1heC9PTVhfQXVkaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDgyODQxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9tZWRpYS9vcGVubWF4L09NWF9BdWRpby5oCkBAIC0wLDAgKzEsMTMyOCBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwOSBQYWNrZXRWaWRlbworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlcgorICogZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zCisgKiBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggVGhlIEtocm9ub3MgR3JvdXAgSW5jLiAKKyAqIAorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0CisgKiB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6IAorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAKKyAqIAorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAorICogVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKKyAqIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAKKyAqCisgKi8KKworLyoqIEBmaWxlIE9NWF9BdWRpby5oIC0gT3Blbk1heCBJTCB2ZXJzaW9uIDEuMS4yCisgKiAgVGhlIHN0cnVjdHVyZXMgbmVlZGVkIGJ5IEF1ZGlvIGNvbXBvbmVudHMgdG8gZXhjaGFuZ2UKKyAqICBwYXJhbWV0ZXJzIGFuZCBjb25maWd1cmF0aW9uIGRhdGEgd2l0aCB0aGUgY29tcG9uZW5taWx0cy4KKyAqLworCisjaWZuZGVmIE9NWF9BdWRpb19oCisjZGVmaW5lIE9NWF9BdWRpb19oCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworCisvKiBFYWNoIE9NWCBoZWFkZXIgbXVzdCBpbmNsdWRlIGFsbCByZXF1aXJlZCBoZWFkZXIgZmlsZXMgdG8gYWxsb3cgdGhlCisgKiAgaGVhZGVyIHRvIGNvbXBpbGUgd2l0aG91dCBlcnJvcnMuICBUaGUgaW5jbHVkZXMgYmVsb3cgYXJlIHJlcXVpcmVkCisgKiAgZm9yIHRoaXMgaGVhZGVyIGZpbGUgdG8gY29tcGlsZSBzdWNjZXNzZnVsbHkgCisgKi8KKworI2luY2x1ZGUgPE9NWF9Db3JlLmg+CisKKy8qKiBAZGVmZ3JvdXAgbWlkaSBNSURJCisgKiBAaW5ncm91cCBhdWRpbworICovCisgCisvKiogQGRlZmdyb3VwIGVmZmVjdHMgQXVkaW8gZWZmZWN0cworICogQGluZ3JvdXAgYXVkaW8KKyAqLworCisvKiogQGRlZmdyb3VwIGF1ZGlvIE9wZW5NQVggSUwgQXVkaW8gRG9tYWluCisgKiBTdHJ1Y3R1cmVzIGZvciBPcGVuTUFYIElMIEF1ZGlvIGRvbWFpbgorICogQHsKKyAqLworCisvKiogRW51bWVyYXRpb24gdXNlZCB0byBkZWZpbmUgdGhlIHBvc3NpYmxlIGF1ZGlvIGNvZGluZ3MuICAKKyAqICBJZiAiT01YX0FVRElPX0NvZGluZ1VudXNlZCIgaXMgc2VsZWN0ZWQsIHRoZSBjb2Rpbmcgc2VsZWN0aW9uIG11c3QgCisgKiAgYmUgZG9uZSBpbiBhIHZlbmRvciBzcGVjaWZpYyB3YXkuICBTaW5jZSB0aGlzIGlzIGZvciBhbiBhdWRpbyAKKyAqICBwcm9jZXNzaW5nIGVsZW1lbnQgdGhpcyBlbnVtIGlzIHJlbGV2YW50LiAgSG93ZXZlciwgZm9yIGFub3RoZXIgCisgKiAgdHlwZSBvZiBjb21wb25lbnQgb3RoZXIgZW51bXMgd291bGQgYmUgaW4gdGhpcyBhcmVhLgorICovCit0eXBlZGVmIGVudW0gT01YX0FVRElPX0NPRElOR1RZUEUgeworICAgIE9NWF9BVURJT19Db2RpbmdVbnVzZWQgPSAwLCAgLyoqPCBQbGFjZWhvbGRlciB2YWx1ZSB3aGVuIGNvZGluZyBpcyBOL0EgICovCisgICAgT01YX0FVRElPX0NvZGluZ0F1dG9EZXRlY3QsICAvKio8IGF1dG8gZGV0ZWN0aW9uIG9mIGF1ZGlvIGZvcm1hdCAqLworICAgIE9NWF9BVURJT19Db2RpbmdQQ00sICAgICAgICAgLyoqPCBBbnkgdmFyaWFudCBvZiBQQ00gY29kaW5nICovCisgICAgT01YX0FVRElPX0NvZGluZ0FEUENNLCAgICAgICAvKio8IEFueSB2YXJpYW50IG9mIEFEUENNIGVuY29kZWQgZGF0YSAqLworICAgIE9NWF9BVURJT19Db2RpbmdBTVIsICAgICAgICAgLyoqPCBBbnkgdmFyaWFudCBvZiBBTVIgZW5jb2RlZCBkYXRhICovCisgICAgT01YX0FVRElPX0NvZGluZ0dTTUZSLCAgICAgICAvKio8IEFueSB2YXJpYW50IG9mIEdTTSBmdWxscmF0ZSAoaS5lLiBHU002MTApICovCisgICAgT01YX0FVRElPX0NvZGluZ0dTTUVGUiwgICAgICAvKio8IEFueSB2YXJpYW50IG9mIEdTTSBFbmhhbmNlZCBGdWxscmF0ZSBlbmNvZGVkIGRhdGEqLworICAgIE9NWF9BVURJT19Db2RpbmdHU01IUiwgICAgICAgLyoqPCBBbnkgdmFyaWFudCBvZiBHU00gSGFsZnJhdGUgZW5jb2RlZCBkYXRhICovCisgICAgT01YX0FVRElPX0NvZGluZ1BEQ0ZSLCAgICAgICAvKio8IEFueSB2YXJpYW50IG9mIFBEQyBGdWxscmF0ZSBlbmNvZGVkIGRhdGEgKi8KKyAgICBPTVhfQVVESU9fQ29kaW5nUERDRUZSLCAgICAgIC8qKjwgQW55IHZhcmlhbnQgb2YgUERDIEVuaGFuY2VkIEZ1bGxyYXRlIGVuY29kZWQgZGF0YSAqLworICAgIE9NWF9BVURJT19Db2RpbmdQRENIUiwgICAgICAgLyoqPCBBbnkgdmFyaWFudCBvZiBQREMgSGFsZnJhdGUgZW5jb2RlZCBkYXRhICovCisgICAgT01YX0FVRElPX0NvZGluZ1RETUFGUiwgICAgICAvKio8IEFueSB2YXJpYW50IG9mIFRETUEgRnVsbHJhdGUgZW5jb2RlZCBkYXRhIChUSUEvRUlBLTEzNi00MjApICovCisgICAgT01YX0FVRElPX0NvZGluZ1RETUFFRlIsICAgICAvKio8IEFueSB2YXJpYW50IG9mIFRETUEgRW5oYW5jZWQgRnVsbHJhdGUgZW5jb2RlZCBkYXRhIChUSUEvRUlBLTEzNi00MTApICovCisgICAgT01YX0FVRElPX0NvZGluZ1FDRUxQOCwgICAgICAvKio8IEFueSB2YXJpYW50IG9mIFFDRUxQIDhrYnBzIGVuY29kZWQgZGF0YSAqLworICAgIE9NWF9BVURJT19Db2RpbmdRQ0VMUDEzLCAgICAgLyoqPCBBbnkgdmFyaWFudCBvZiBRQ0VMUCAxM2ticHMgZW5jb2RlZCBkYXRhICovCisgICAgT01YX0FVRElPX0NvZGluZ0VWUkMsICAgICAgICAvKio8IEFueSB2YXJpYW50IG9mIEVWUkMgZW5jb2RlZCBkYXRhICovCisgICAgT01YX0FVRElPX0NvZGluZ1NNViwgICAgICAgICAvKio8IEFueSB2YXJpYW50IG9mIFNNViBlbmNvZGVkIGRhdGEgKi8KKyAgICBPTVhfQVVESU9fQ29kaW5nRzcxMSwgICAgICAgIC8qKjwgQW55IHZhcmlhbnQgb2YgRy43MTEgZW5jb2RlZCBkYXRhICovCisgICAgT01YX0FVRElPX0NvZGluZ0c3MjMsICAgICAgICAvKio8IEFueSB2YXJpYW50IG9mIEcuNzIzIGRvdCAxIGVuY29kZWQgZGF0YSAqLworICAgIE9NWF9BVURJT19Db2RpbmdHNzI2LCAgICAgICAgLyoqPCBBbnkgdmFyaWFudCBvZiBHLjcyNiBlbmNvZGVkIGRhdGEgKi8KKyAgICBPTVhfQVVESU9fQ29kaW5nRzcyOSwgICAgICAgIC8qKjwgQW55IHZhcmlhbnQgb2YgRy43MjkgZW5jb2RlZCBkYXRhICovCisgICAgT01YX0FVRElPX0NvZGluZ0FBQywgICAgICAgICAvKio8IEFueSB2YXJpYW50IG9mIEFBQyBlbmNvZGVkIGRhdGEgKi8KKyAgICBPTVhfQVVESU9fQ29kaW5nTVAzLCAgICAgICAgIC8qKjwgQW55IHZhcmlhbnQgb2YgTVAzIGVuY29kZWQgZGF0YSAqLworICAgIE9NWF9BVURJT19Db2RpbmdTQkMsICAgICAgICAgLyoqPCBBbnkgdmFyaWFudCBvZiBTQkMgZW5jb2RlZCBkYXRhICovCisgICAgT01YX0FVRElPX0NvZGluZ1ZPUkJJUywgICAgICAvKio8IEFueSB2YXJpYW50IG9mIFZPUkJJUyBlbmNvZGVkIGRhdGEgKi8KKyAgICBPTVhfQVVESU9fQ29kaW5nV01BLCAgICAgICAgIC8qKjwgQW55IHZhcmlhbnQgb2YgV01BIGVuY29kZWQgZGF0YSAqLworICAgIE9NWF9BVURJT19Db2RpbmdSQSwgICAgICAgICAgLyoqPCBBbnkgdmFyaWFudCBvZiBSQSBlbmNvZGVkIGRhdGEgKi8KKyAgICBPTVhfQVVESU9fQ29kaW5nTUlESSwgICAgICAgIC8qKjwgQW55IHZhcmlhbnQgb2YgTUlESSBlbmNvZGVkIGRhdGEgKi8KKyAgICBPTVhfQVVESU9fQ29kaW5nS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIE9NWF9BVURJT19Db2RpbmdWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLworICAgIE9NWF9BVURJT19Db2RpbmdNYXggPSAweDdGRkZGRkZGCit9IE9NWF9BVURJT19DT0RJTkdUWVBFOworCisKKy8qKiBUaGUgUG9ydERlZmluaXRpb24gc3RydWN0dXJlIGlzIHVzZWQgdG8gZGVmaW5lIGFsbCBvZiB0aGUgcGFyYW1ldGVycyAKKyAqICBuZWNlc3NhcnkgZm9yIHRoZSBjb21wbGlhbnQgY29tcG9uZW50IHRvIHNldHVwIGFuIGlucHV0IG9yIGFuIG91dHB1dCBhdWRpbyAKKyAqICBwYXRoLiAgSWYgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpcyBuZWVkZWQgdG8gZGVmaW5lIHRoZSBwYXJhbWV0ZXJzIG9mIHRoZQorICogIHBvcnQgKHN1Y2ggYXMgZnJlcXVlbmN5KSwgYWRkaXRpb25hbCBzdHJ1Y3R1cmVzIG11c3QgYmUgc2VudCBzdWNoIGFzIHRoZQorICogIE9NWF9BVURJT19QQVJBTV9QQ01NT0RFVFlQRSBzdHJ1Y3R1cmUgdG8gc3VwcGx5IHRoZSBleHRyYSBwYXJhbWV0ZXJzIGZvciB0aGUgcG9ydC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgT01YX0FVRElPX1BPUlRERUZJTklUSU9OVFlQRSB7CisgICAgT01YX1NUUklORyBjTUlNRVR5cGU7ICAgICAgICAgICAgLyoqPCBNSU1FIHR5cGUgb2YgZGF0YSBmb3IgdGhlIHBvcnQgKi8KKyAgICBPTVhfTkFUSVZFX0RFVklDRVRZUEUgcE5hdGl2ZVJlbmRlcjsgLyoqIDwgcGxhdGZvcm0gc3BlY2lmaWMgcmVmZXJlbmNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhbiBvdXRwdXQgZGV2aWNlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJ3aXNlIHRoaXMgZmllbGQgaXMgMCAqLworICAgIE9NWF9CT09MIGJGbGFnRXJyb3JDb25jZWFsbWVudDsgIC8qKjwgVHVybnMgb24gZXJyb3IgY29uY2VhbG1lbnQgaWYgaXQgaXMgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0ZWQgYnkgdGhlIE9NWCBjb21wb25lbnQgKi8KKyAgICBPTVhfQVVESU9fQ09ESU5HVFlQRSBlRW5jb2Rpbmc7ICAvKio8IFR5cGUgb2YgZGF0YSBleHBlY3RlZCBmb3IgdGhpcyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQgKGUuZy4gUENNLCBBTVIsIE1QMywgZXRjKSAqLworfSBPTVhfQVVESU9fUE9SVERFRklOSVRJT05UWVBFOworCisKKy8qKiAgUG9ydCBmb3JtYXQgcGFyYW1ldGVyLiAgVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBlbnVtZXJhdGUKKyAgKiAgdGhlIHZhcmlvdXMgZGF0YSBpbnB1dC9vdXRwdXQgZm9ybWF0IHN1cHBvcnRlZCBieSB0aGUgcG9ydC4KKyAgKi8KK3R5cGVkZWYgc3RydWN0IE9NWF9BVURJT19QQVJBTV9QT1JURk9STUFUVFlQRSB7CisgICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAgICAgICAvKio8IHNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcyAqLworICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgICAgICAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCisgICAgT01YX1UzMiBuUG9ydEluZGV4OyAgICAgICAgICAgICAvKio8IEluZGljYXRlcyB3aGljaCBwb3J0IHRvIHNldCAqLworICAgIE9NWF9VMzIgbkluZGV4OyAgICAgICAgICAgICAgICAgLyoqPCBJbmRpY2F0ZXMgdGhlIGVudW1lcmF0aW9uIGluZGV4IGZvciB0aGUgZm9ybWF0IGZyb20gMHgwIHRvIE4tMSAqLworICAgIE9NWF9BVURJT19DT0RJTkdUWVBFIGVFbmNvZGluZzsgLyoqPCBUeXBlIG9mIGRhdGEgZXhwZWN0ZWQgZm9yIHRoaXMgcG9ydCAoZS5nLiBQQ00sIEFNUiwgTVAzLCBldGMpICovCit9IE9NWF9BVURJT19QQVJBTV9QT1JURk9STUFUVFlQRTsKKworCisvKiogUENNIG1vZGUgdHlwZSAgKi8gCit0eXBlZGVmIGVudW0gT01YX0FVRElPX1BDTU1PREVUWVBFIHsgCisgICAgT01YX0FVRElPX1BDTU1vZGVMaW5lYXIgPSAwLCAgLyoqPCBMaW5lYXIgUENNIGVuY29kZWQgZGF0YSAqLyAKKyAgICBPTVhfQVVESU9fUENNTW9kZUFMYXcsICAgICAgICAvKio8IEEgbGF3IFBDTSBlbmNvZGVkIGRhdGEgKEcuNzExKSAqLyAKKyAgICBPTVhfQVVESU9fUENNTW9kZU1VTGF3LCAgICAgICAvKio8IE11IGxhdyBQQ00gZW5jb2RlZCBkYXRhIChHLjcxMSkgICovIAorICAgIE9NWF9BVURJT19QQ01Nb2RlS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIE9NWF9BVURJT19QQ01Nb2RlVmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KKyAgICBPTVhfQVVESU9fUENNTW9kZU1heCA9IDB4N0ZGRkZGRkYgCit9IE9NWF9BVURJT19QQ01NT0RFVFlQRTsgCisKKwordHlwZWRlZiBlbnVtIE9NWF9BVURJT19DSEFOTkVMVFlQRSB7CisgICAgT01YX0FVRElPX0NoYW5uZWxOb25lID0gMHgwLCAgICAvKio8IFVudXNlZCBvciBlbXB0eSAqLworICAgIE9NWF9BVURJT19DaGFubmVsTEYgICA9IDB4MSwgICAgLyoqPCBMZWZ0IGZyb250ICovCisgICAgT01YX0FVRElPX0NoYW5uZWxSRiAgID0gMHgyLCAgICAvKio8IFJpZ2h0IGZyb250ICovCisgICAgT01YX0FVRElPX0NoYW5uZWxDRiAgID0gMHgzLCAgICAvKio8IENlbnRlciBmcm9udCAqLworICAgIE9NWF9BVURJT19DaGFubmVsTFMgICA9IDB4NCwgICAgLyoqPCBMZWZ0IHN1cnJvdW5kICovCisgICAgT01YX0FVRElPX0NoYW5uZWxSUyAgID0gMHg1LCAgICAvKio8IFJpZ2h0IHN1cnJvdW5kICovCisgICAgT01YX0FVRElPX0NoYW5uZWxMRkUgID0gMHg2LCAgICAvKio8IExvdyBmcmVxdWVuY3kgZWZmZWN0cyAqLworICAgIE9NWF9BVURJT19DaGFubmVsQ1MgICA9IDB4NywgICAgLyoqPCBCYWNrIHN1cnJvdW5kICovCisgICAgT01YX0FVRElPX0NoYW5uZWxMUiAgID0gMHg4LCAgICAvKio8IExlZnQgcmVhci4gKi8KKyAgICBPTVhfQVVESU9fQ2hhbm5lbFJSICAgPSAweDksICAgIC8qKjwgUmlnaHQgcmVhci4gKi8KKyAgICBPTVhfQVVESU9fQ2hhbm5lbEtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKKyAgICBPTVhfQVVESU9fQ2hhbm5lbFZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCisgICAgT01YX0FVRElPX0NoYW5uZWxNYXggID0gMHg3RkZGRkZGRiAKK30gT01YX0FVRElPX0NIQU5ORUxUWVBFOworCisjZGVmaW5lIE9NWF9BVURJT19NQVhDSEFOTkVMUyAxNiAgLyoqPCBtYXhpbXVtIG51bWJlciBkaXN0aW5jdCBhdWRpbyBjaGFubmVscyB0aGF0IGEgYnVmZmVyIG1heSBjb250YWluICovCisjZGVmaW5lIE9NWF9NSU5fUENNUEFZTE9BRF9NU0VDIDUgLyoqPCBNaW5pbXVtIGF1ZGlvIGJ1ZmZlciBwYXlsb2FkIHNpemUgZm9yIHVuY29tcHJlc3NlZCAoUENNKSBhdWRpbyAqLworCisvKiogUENNIGZvcm1hdCBkZXNjcmlwdGlvbiAqLyAKK3R5cGVkZWYgc3RydWN0IE9NWF9BVURJT19QQVJBTV9QQ01NT0RFVFlQRSB7IAorICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgICAgICAgICAvKio8IFNpemUgb2YgdGhpcyBzdHJ1Y3R1cmUsIGluIEJ5dGVzICovIAorICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgICAgICAgICAvKio8IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24gKi8gCisgICAgT01YX1UzMiBuUG9ydEluZGV4OyAgICAgICAgICAgICAgIC8qKjwgcG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8gKi8gCisgICAgT01YX1UzMiBuQ2hhbm5lbHM7ICAgICAgICAgICAgICAgIC8qKjwgTnVtYmVyIG9mIGNoYW5uZWxzIChlLmcuIDIgZm9yIHN0ZXJlbykgKi8gCisgICAgT01YX05VTUVSSUNBTERBVEFUWVBFIGVOdW1EYXRhOyAgIC8qKjwgaW5kaWNhdGVzIFBDTSBkYXRhIGFzIHNpZ25lZCBvciB1bnNpZ25lZCAqLyAKKyAgICBPTVhfRU5ESUFOVFlQRSBlRW5kaWFuOyAgICAgICAgICAgLyoqPCBpbmRpY2F0ZXMgUENNIGRhdGEgYXMgbGl0dGxlIG9yIGJpZyBlbmRpYW4gKi8gCisgICAgT01YX0JPT0wgYkludGVybGVhdmVkOyAgICAgICAgICAgIC8qKjwgVHJ1ZSBmb3Igbm9ybWFsIGludGVybGVhdmVkIGRhdGE7IGZhbHNlIGZvciAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub24taW50ZXJsZWF2ZWQgZGF0YSAoZS5nLiBibG9jayBkYXRhKSAqLyAKKyAgICBPTVhfVTMyIG5CaXRQZXJTYW1wbGU7ICAgICAgICAgICAgLyoqPCBCaXQgcGVyIHNhbXBsZSAqLyAKKyAgICBPTVhfVTMyIG5TYW1wbGluZ1JhdGU7ICAgICAgICAgICAgLyoqPCBTYW1wbGluZyByYXRlIG9mIHRoZSBzb3VyY2UgZGF0YS4gIFVzZSAwIGZvciAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBvciB1bmtub3duIHNhbXBsaW5nIHJhdGUuICovIAorICAgIE9NWF9BVURJT19QQ01NT0RFVFlQRSBlUENNTW9kZTsgICAvKio8IFBDTSBtb2RlIGVudW1lcmF0aW9uICovIAorICAgIE9NWF9BVURJT19DSEFOTkVMVFlQRSBlQ2hhbm5lbE1hcHBpbmdbT01YX0FVRElPX01BWENIQU5ORUxTXTsgLyoqPCBTbG90IGkgY29udGFpbnMgY2hhbm5lbCBkZWZpbmVkIGJ5IGVDaGFubmVsTWFwW2ldICovCisKK30gT01YX0FVRElPX1BBUkFNX1BDTU1PREVUWVBFOyAKKworCisvKiogQXVkaW8gY2hhbm5lbCBtb2RlLiAgVGhpcyBpcyB1c2VkIGJ5IGJvdGggQUFDIGFuZCBNUDMsIGFsdGhvdWdoIHRoZSBuYW1lcyBhcmUgbW9yZSBhcHByb3ByaWF0ZQorICogZm9yIHRoZSBNUDMuICBGb3IgZXhhbXBsZSwgSm9pbnRTdGVyZW8gZm9yIE1QMyBpcyBDb3VwbGluZ0NoYW5uZWxzIGZvciBBQUMuIAorICovCit0eXBlZGVmIGVudW0gT01YX0FVRElPX0NIQU5ORUxNT0RFVFlQRSB7CisgICAgT01YX0FVRElPX0NoYW5uZWxNb2RlU3RlcmVvID0gMCwgIC8qKjwgMiBjaGFubmVscywgdGhlIGJpdHJhdGUgYWxsb2NhdGlvbiBiZXR3ZWVuIHRob3NlIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHdvIGNoYW5uZWxzIGNoYW5nZXMgYWNjb3JkaW5nbHkgdG8gZWFjaCBjaGFubmVsIGluZm9ybWF0aW9uICovCisgICAgT01YX0FVRElPX0NoYW5uZWxNb2RlSm9pbnRTdGVyZW8sIC8qKjwgbW9kZSB0aGF0IHRha2VzIGFkdmFudGFnZSBvZiB3aGF0IGlzIGNvbW1vbiBiZXR3ZWVuIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgY2hhbm5lbHMgZm9yIGhpZ2hlciBjb21wcmVzc2lvbiBnYWluICovCisgICAgT01YX0FVRElPX0NoYW5uZWxNb2RlRHVhbCwgICAgICAgIC8qKjwgMiBtb25vLWNoYW5uZWxzLCBlYWNoIGNoYW5uZWwgaXMgZW5jb2RlZCB3aXRoIGhhbGYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGJpdHJhdGUgb2YgdGhlIG92ZXJhbGwgYml0cmF0ZSAqLworICAgIE9NWF9BVURJT19DaGFubmVsTW9kZU1vbm8sICAgICAgICAvKio8IE1vbm8gY2hhbm5lbCBtb2RlICovCisgICAgT01YX0FVRElPX0NoYW5uZWxNb2RlS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIE9NWF9BVURJT19DaGFubmVsTW9kZVZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCisgICAgT01YX0FVRElPX0NoYW5uZWxNb2RlTWF4ID0gMHg3RkZGRkZGRgorfSBPTVhfQVVESU9fQ0hBTk5FTE1PREVUWVBFOworCisKK3R5cGVkZWYgZW51bSBPTVhfQVVESU9fTVAzU1RSRUFNRk9STUFUVFlQRSB7CisgICAgT01YX0FVRElPX01QM1N0cmVhbUZvcm1hdE1QMUxheWVyMyA9IDAsIC8qKjwgTVAzIEF1ZGlvIE1QRUcgMSBMYXllciAzIFN0cmVhbSBmb3JtYXQgKi8KKyAgICBPTVhfQVVESU9fTVAzU3RyZWFtRm9ybWF0TVAyTGF5ZXIzLCAgICAgLyoqPCBNUDMgQXVkaW8gTVBFRyAyIExheWVyIDMgU3RyZWFtIGZvcm1hdCAqLworICAgIE9NWF9BVURJT19NUDNTdHJlYW1Gb3JtYXRNUDJfNUxheWVyMywgICAvKio8IE1QMyBBdWRpbyBNUEVHMi41IExheWVyIDMgU3RyZWFtIGZvcm1hdCAqLworICAgIE9NWF9BVURJT19NUDNTdHJlYW1Gb3JtYXRLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICAgT01YX0FVRElPX01QM1N0cmVhbUZvcm1hdFZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCisgICAgT01YX0FVRElPX01QM1N0cmVhbUZvcm1hdE1heCA9IDB4N0ZGRkZGRkYKK30gT01YX0FVRElPX01QM1NUUkVBTUZPUk1BVFRZUEU7CisKKy8qKiBNUDMgcGFyYW1zICovCit0eXBlZGVmIHN0cnVjdCBPTVhfQVVESU9fUEFSQU1fTVAzVFlQRSB7CisgICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAgICAgIC8qKjwgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovCisgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAgICAgIC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLworICAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAgICAgICAvKio8IHBvcnQgdGhhdCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzIHRvICovCisgICAgT01YX1UzMiBuQ2hhbm5lbHM7ICAgICAgICAgICAgIC8qKjwgTnVtYmVyIG9mIGNoYW5uZWxzICovCisgICAgT01YX1UzMiBuQml0UmF0ZTsgICAgICAgICAgICAgIC8qKjwgQml0IHJhdGUgb2YgdGhlIGlucHV0IGRhdGEuICBVc2UgMCBmb3IgdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXRlIG9yIHVua25vd24gYml0IHJhdGVzICovCisgICAgT01YX1UzMiBuU2FtcGxlUmF0ZTsgICAgICAgICAgIC8qKjwgU2FtcGxpbmcgcmF0ZSBvZiB0aGUgc291cmNlIGRhdGEuICBVc2UgMCBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBvciB1bmtub3duIHNhbXBsaW5nIHJhdGUuICovCisgICAgT01YX1UzMiBuQXVkaW9CYW5kV2lkdGg7ICAgICAgIC8qKjwgQXVkaW8gYmFuZCB3aWR0aCAoaW4gSHopIHRvIHdoaWNoIGFuIGVuY29kZXIgc2hvdWxkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGltaXQgdGhlIGF1ZGlvIHNpZ25hbC4gVXNlIDAgdG8gbGV0IGVuY29kZXIgZGVjaWRlICovCisgICAgT01YX0FVRElPX0NIQU5ORUxNT0RFVFlQRSBlQ2hhbm5lbE1vZGU7ICAgLyoqPCBDaGFubmVsIG1vZGUgZW51bWVyYXRpb24gKi8KKyAgICBPTVhfQVVESU9fTVAzU1RSRUFNRk9STUFUVFlQRSBlRm9ybWF0OyAgLyoqPCBNUDMgc3RyZWFtIGZvcm1hdCAqLworfSBPTVhfQVVESU9fUEFSQU1fTVAzVFlQRTsKKworCit0eXBlZGVmIGVudW0gT01YX0FVRElPX0FBQ1NUUkVBTUZPUk1BVFRZUEUgeworICAgIE9NWF9BVURJT19BQUNTdHJlYW1Gb3JtYXRNUDJBRFRTID0gMCwgLyoqPCBBQUMgQXVkaW8gRGF0YSBUcmFuc3BvcnQgU3RyZWFtIDIgZm9ybWF0ICovCisgICAgT01YX0FVRElPX0FBQ1N0cmVhbUZvcm1hdE1QNEFEVFMsICAgICAvKio8IEFBQyBBdWRpbyBEYXRhIFRyYW5zcG9ydCBTdHJlYW0gNCBmb3JtYXQgKi8KKyAgICBPTVhfQVVESU9fQUFDU3RyZWFtRm9ybWF0TVA0TE9BUywgICAgIC8qKjwgQUFDIExvdyBPdmVyaGVhZCBBdWRpbyBTdHJlYW0gZm9ybWF0ICovCisgICAgT01YX0FVRElPX0FBQ1N0cmVhbUZvcm1hdE1QNExBVE0sICAgICAvKio8IEFBQyBMb3cgb3ZlcmhlYWQgQXVkaW8gVHJhbnNwb3J0IE11bHRpcGxleCAqLworICAgIE9NWF9BVURJT19BQUNTdHJlYW1Gb3JtYXRBRElGLCAgICAgICAgLyoqPCBBQUMgQXVkaW8gRGF0YSBJbnRlcmNoYW5nZSBGb3JtYXQgKi8KKyAgICBPTVhfQVVESU9fQUFDU3RyZWFtRm9ybWF0TVA0RkYsICAgICAgIC8qKjwgQUFDIGluc2lkZSBNUEVHLTQvSVNPIEZpbGUgRm9ybWF0ICovCisgICAgT01YX0FVRElPX0FBQ1N0cmVhbUZvcm1hdFJBVywgICAgICAgICAvKio8IEFBQyBSYXcgRm9ybWF0ICovCisgICAgT01YX0FVRElPX0FBQ1N0cmVhbUZvcm1hdEtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKKyAgICBPTVhfQVVESU9fQUFDU3RyZWFtRm9ybWF0VmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KKyAgICBPTVhfQVVESU9fQUFDU3RyZWFtRm9ybWF0TWF4ID0gMHg3RkZGRkZGRgorfSBPTVhfQVVESU9fQUFDU1RSRUFNRk9STUFUVFlQRTsKKworCisvKiogQUFDIG1vZGUgdHlwZS4gIE5vdGUgdGhhdCB0aGUgdGVybSBwcm9maWxlIGlzIHVzZWQgd2l0aCB0aGUgTVBFRy0yCisgKiBzdGFuZGFyZCBhbmQgdGhlIHRlcm0gb2JqZWN0IHR5cGUgYW5kIHByb2ZpbGUgaXMgdXNlZCB3aXRoIE1QRUctNCAqLwordHlwZWRlZiBlbnVtIE9NWF9BVURJT19BQUNQUk9GSUxFVFlQRXsKKyAgT01YX0FVRElPX0FBQ09iamVjdE51bGwgPSAwLCAgICAgIC8qKjwgTnVsbCwgbm90IHVzZWQgKi8KKyAgT01YX0FVRElPX0FBQ09iamVjdE1haW4gPSAxLCAgICAgIC8qKjwgQUFDIE1haW4gb2JqZWN0ICovCisgIE9NWF9BVURJT19BQUNPYmplY3RMQywgICAgICAgICAgICAvKio8IEFBQyBMb3cgQ29tcGxleGl0eSBvYmplY3QgKEFBQyBwcm9maWxlKSAqLworICBPTVhfQVVESU9fQUFDT2JqZWN0U1NSLCAgICAgICAgICAgLyoqPCBBQUMgU2NhbGFibGUgU2FtcGxlIFJhdGUgb2JqZWN0ICovCisgIE9NWF9BVURJT19BQUNPYmplY3RMVFAsICAgICAgICAgICAvKio8IEFBQyBMb25nIFRlcm0gUHJlZGljdGlvbiBvYmplY3QgKi8KKyAgT01YX0FVRElPX0FBQ09iamVjdEhFLCAgICAgICAgICAgIC8qKjwgQUFDIEhpZ2ggRWZmaWNpZW5jeSAob2JqZWN0IHR5cGUgU0JSLCBIRS1BQUMgcHJvZmlsZSkgKi8KKyAgT01YX0FVRElPX0FBQ09iamVjdFNjYWxhYmxlLCAgICAgIC8qKjwgQUFDIFNjYWxhYmxlIG9iamVjdCAqLworICBPTVhfQVVESU9fQUFDT2JqZWN0RVJMQyA9IDE3LCAgICAgLyoqPCBFUiBBQUMgTG93IENvbXBsZXhpdHkgb2JqZWN0IChFcnJvciBSZXNpbGllbnQgQUFDLUxDKSAqLworICBPTVhfQVVESU9fQUFDT2JqZWN0TEQgPSAyMywgICAgICAgLyoqPCBBQUMgTG93IERlbGF5IG9iamVjdCAoRXJyb3IgUmVzaWxpZW50KSAqLworICBPTVhfQVVESU9fQUFDT2JqZWN0SEVfUFMgPSAyOSwgICAgLyoqPCBBQUMgSGlnaCBFZmZpY2llbmN5IHdpdGggUGFyYW1ldHJpYyBTdGVyZW8gY29kaW5nIChIRS1BQUMgdjIsIG9iamVjdCB0eXBlIFBTKSAqLworICBPTVhfQVVESU9fQUFDT2JqZWN0S2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICBPTVhfQVVESU9fQUFDT2JqZWN0VmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KKyAgT01YX0FVRElPX0FBQ09iamVjdE1heCA9IDB4N0ZGRkZGRkYKK30gT01YX0FVRElPX0FBQ1BST0ZJTEVUWVBFOworCisKKy8qKiBBQUMgdG9vbCB1c2FnZSAoZm9yIG5BQUN0b29scyBpbiBPTVhfQVVESU9fUEFSQU1fQUFDUFJPRklMRVRZUEUpLgorICogUmVxdWlyZWQgZm9yIGVuY29kZXIgY29uZmlndXJhdGlvbiBhbmQgb3B0aW9uYWwgYXMgZGVjb2RlciBpbmZvIG91dHB1dC4KKyAqIEZvciBNUDMsIE9NWF9BVURJT19DSEFOTkVMTU9ERVRZUEUgaXMgc3VmZmljaWVudC4gKi8KKyNkZWZpbmUgT01YX0FVRElPX0FBQ1Rvb2xOb25lIDB4MDAwMDAwMDAgLyoqPCBubyBBQUMgdG9vbHMgYWxsb3dlZCAoZW5jb2RlciBjb25maWcpIG9yIGFjdGl2ZSAoZGVjb2RlciBpbmZvIG91dHB1dCkgKi8KKyNkZWZpbmUgT01YX0FVRElPX0FBQ1Rvb2xNUyAgIDB4MDAwMDAwMDEgLyoqPCBNUzogTWlkL3NpZGUgam9pbnQgY29kaW5nIHRvb2wgYWxsb3dlZCBvciBhY3RpdmUgKi8KKyNkZWZpbmUgT01YX0FVRElPX0FBQ1Rvb2xJUyAgIDB4MDAwMDAwMDIgLyoqPCBJUzogSW50ZW5zaXR5IHN0ZXJlbyB0b29sIGFsbG93ZWQgb3IgYWN0aXZlICovCisjZGVmaW5lIE9NWF9BVURJT19BQUNUb29sVE5TICAweDAwMDAwMDA0IC8qKjwgVE5TOiBUZW1wb3JhbCBOb2lzZSBTaGFwaW5nIHRvb2wgYWxsb3dlZCBvciBhY3RpdmUgKi8KKyNkZWZpbmUgT01YX0FVRElPX0FBQ1Rvb2xQTlMgIDB4MDAwMDAwMDggLyoqPCBQTlM6IE1QRUctNCBQZXJjZXB0dWFsIE5vaXNlIHN1YnN0aXR1dGlvbiB0b29sIGFsbG93ZWQgb3IgYWN0aXZlICovCisjZGVmaW5lIE9NWF9BVURJT19BQUNUb29sTFRQICAweDAwMDAwMDEwIC8qKjwgTFRQOiBNUEVHLTQgTG9uZyBUZXJtIFByZWRpY3Rpb24gdG9vbCBhbGxvd2VkIG9yIGFjdGl2ZSAqLworI2RlZmluZSBPTVhfQVVESU9fQUFDVG9vbEFsbCAgMHg3RkZGRkZGRiAvKio8IGFsbCBBQUMgdG9vbHMgYWxsb3dlZCBvciBhY3RpdmUgKCovCisKKy8qKiBNUEVHLTQgQUFDIGVycm9yIHJlc2lsaWVuY2UgKEVSKSB0b29sIHVzYWdlIChmb3IgbkFBQ0VSdG9vbHMgaW4gT01YX0FVRElPX1BBUkFNX0FBQ1BST0ZJTEVUWVBFKS4KKyAqIFJlcXVpcmVkIGZvciBFUiBlbmNvZGVyIGNvbmZpZ3VyYXRpb24gYW5kIG9wdGlvbmFsIGFzIGRlY29kZXIgaW5mbyBvdXRwdXQgKi8KKyNkZWZpbmUgT01YX0FVRElPX0FBQ0VSTm9uZSAgMHgwMDAwMDAwMCAgLyoqPCBubyBBQUMgRVIgdG9vbHMgYWxsb3dlZC91c2VkICovCisjZGVmaW5lIE9NWF9BVURJT19BQUNFUlZDQjExIDB4MDAwMDAwMDEgIC8qKjwgVkNCMTE6IFZpcnR1YWwgQ29kZSBCb29rcyBmb3IgQUFDIHNlY3Rpb24gZGF0YSAqLworI2RlZmluZSBPTVhfQVVESU9fQUFDRVJSVkxDICAweDAwMDAwMDAyICAvKio8IFJWTEM6IFJldmVyc2libGUgVmFyaWFibGUgTGVuZ3RoIENvZGluZyAqLworI2RlZmluZSBPTVhfQVVESU9fQUFDRVJIQ1IgICAweDAwMDAwMDA0ICAvKio8IEhDUjogSHVmZm1hbiBDb2Rld29yZCBSZW9yZGVyaW5nICovCisjZGVmaW5lIE9NWF9BVURJT19BQUNFUkFsbCAgIDB4N0ZGRkZGRkYgIC8qKjwgYWxsIEFBQyBFUiB0b29scyBhbGxvd2VkL3VzZWQgKi8KKworCisvKiogQUFDIHBhcmFtcyAqLwordHlwZWRlZiBzdHJ1Y3QgT01YX0FVRElPX1BBUkFNX0FBQ1BST0ZJTEVUWVBFIHsKKyAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAgICAgLyoqPCBTaXplIG9mIHRoaXMgc3RydWN0dXJlLCBpbiBCeXRlcyAqLworICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgICAgICAvKio8IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24gKi8KKyAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7ICAgICAgICAgICAgLyoqPCBQb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0byAqLworICAgIE9NWF9VMzIgbkNoYW5uZWxzOyAgICAgICAgICAgICAvKio8IE51bWJlciBvZiBjaGFubmVscyAqLworICAgIE9NWF9VMzIgblNhbXBsZVJhdGU7ICAgICAgICAgICAvKio8IFNhbXBsaW5nIHJhdGUgb2YgdGhlIHNvdXJjZSBkYXRhLiAgVXNlIDAgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgb3IgdW5rbm93biBzYW1wbGluZyByYXRlLiAqLworICAgIE9NWF9VMzIgbkJpdFJhdGU7ICAgICAgICAgICAgICAvKio8IEJpdCByYXRlIG9mIHRoZSBpbnB1dCBkYXRhLiAgVXNlIDAgZm9yIHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF0ZSBvciB1bmtub3duIGJpdCByYXRlcyAqLworICAgIE9NWF9VMzIgbkF1ZGlvQmFuZFdpZHRoOyAgICAgICAvKio8IEF1ZGlvIGJhbmQgd2lkdGggKGluIEh6KSB0byB3aGljaCBhbiBlbmNvZGVyIHNob3VsZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbWl0IHRoZSBhdWRpbyBzaWduYWwuIFVzZSAwIHRvIGxldCBlbmNvZGVyIGRlY2lkZSAqLworICAgIE9NWF9VMzIgbkZyYW1lTGVuZ3RoOyAgICAgICAgICAvKio8IEZyYW1lIGxlbmd0aCAoaW4gYXVkaW8gc2FtcGxlcyBwZXIgY2hhbm5lbCkgb2YgdGhlIGNvZGVjLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSAxMDI0IG9yIDk2MCAoQUFDLUxDKSwgMjA0OCAoSEUtQUFDKSwgNDgwIG9yIDUxMiAoQUFDLUxEKS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2UgMCB0byBsZXQgZW5jb2RlciBkZWNpZGUgKi8KKyAgICBPTVhfVTMyIG5BQUN0b29sczsgICAgICAgICAgICAgLyoqPCBBQUMgdG9vbCB1c2FnZSAqLworICAgIE9NWF9VMzIgbkFBQ0VSdG9vbHM7ICAgICAgICAgICAvKio8IE1QRUctNCBBQUMgZXJyb3IgcmVzaWxpZW5jZSB0b29sIHVzYWdlICovCisgICAgT01YX0FVRElPX0FBQ1BST0ZJTEVUWVBFIGVBQUNQcm9maWxlOyAgIC8qKjwgQUFDIHByb2ZpbGUgZW51bWVyYXRpb24gKi8KKyAgICBPTVhfQVVESU9fQUFDU1RSRUFNRk9STUFUVFlQRSBlQUFDU3RyZWFtRm9ybWF0OyAvKio8IEFBQyBzdHJlYW0gZm9ybWF0IGVudW1lcmF0aW9uICovCisgICAgT01YX0FVRElPX0NIQU5ORUxNT0RFVFlQRSBlQ2hhbm5lbE1vZGU7ICAgLyoqPCBDaGFubmVsIG1vZGUgZW51bWVyYXRpb24gKi8KK30gT01YX0FVRElPX1BBUkFNX0FBQ1BST0ZJTEVUWVBFOworCisKKy8qKiBWT1JCSVMgcGFyYW1zICovCit0eXBlZGVmIHN0cnVjdCBPTVhfQVVESU9fUEFSQU1fVk9SQklTVFlQRSB7CisgICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAvKio8IHNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcyAqLworICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCisgICAgT01YX1UzMiBuUG9ydEluZGV4OyAgICAgICAvKio8IHBvcnQgdGhhdCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzIHRvICovCisgICAgT01YX1UzMiBuQ2hhbm5lbHM7ICAgICAgICAvKio8IE51bWJlciBvZiBjaGFubmVscyAqLworICAgIE9NWF9VMzIgbkJpdFJhdGU7ICAgICAgICAgLyoqPCBCaXQgcmF0ZSBvZiB0aGUgZW5jb2RlZCBkYXRhIGRhdGEuICBVc2UgMCBmb3IgdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF0ZSBvciB1bmtub3duIGJpdCByYXRlcy4gRW5jb2RpbmcgaXMgc2V0IHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRyYXRlIGNsb3Nlc3QgdG8gc3BlY2lmaWVkICB2YWx1ZSAoaW4gYnBzKSAqLworICAgIE9NWF9VMzIgbk1pbkJpdFJhdGU7ICAgICAgLyoqPCBTZXRzIG1pbmltdW0gYml0cmF0ZSAoaW4gYnBzKS4gKi8KKyAgICBPTVhfVTMyIG5NYXhCaXRSYXRlOyAgICAgIC8qKjwgU2V0cyBtYXhpbXVtIGJpdHJhdGUgKGluIGJwcykuICovCisKKyAgICBPTVhfVTMyIG5TYW1wbGVSYXRlOyAgICAgIC8qKjwgU2FtcGxpbmcgcmF0ZSBvZiB0aGUgc291cmNlIGRhdGEuICBVc2UgMCBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgb3IgdW5rbm93biBzYW1wbGluZyByYXRlLiAqLworICAgIE9NWF9VMzIgbkF1ZGlvQmFuZFdpZHRoOyAgLyoqPCBBdWRpbyBiYW5kIHdpZHRoIChpbiBIeikgdG8gd2hpY2ggYW4gZW5jb2RlciBzaG91bGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGltaXQgdGhlIGF1ZGlvIHNpZ25hbC4gVXNlIDAgdG8gbGV0IGVuY29kZXIgZGVjaWRlICovCisgICAgT01YX1MzMiBuUXVhbGl0eTsJCSAgLyoqPCBTZXRzIGVuY29kaW5nIHF1YWxpdHkgdG8gbiwgYmV0d2VlbiAtMSAobG93KSBhbmQgMTAgKGhpZ2gpLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbiB0aGUgZGVmYXVsdCBtb2RlIG9mIG9wZXJhdGlvbiwgdGVoIHF1YWxpdHkgbGV2ZWwgaXMgMy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9ybWFsIHF1YWxpdHkgcmFuZ2UgaXMgMCAtIDEwLiAqLworICAgIE9NWF9CT09MIGJNYW5hZ2VkOwkJICAvKio8IFNldCAgYml0cmF0ZSAgbWFuYWdlbWVudCAgbW9kZS4gVGhpcyB0dXJucyBvZmYgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbCBWQlIgZW5jb2RpbmcsIGJ1dCBhbGxvd3MgaGFyZCBvciBzb2Z0IGJpdHJhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RyYWludHMgdG8gYmUgZW5mb3JjZWQgYnkgdGhlIGVuY29kZXIuIFRoaXMgbW9kZSBjYW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgc2xvd2VyLCBhbmQgbWF5IGFsc28gYmUgbG93ZXIgcXVhbGl0eS4gSXQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbWFyaWx5IHVzZWZ1bCBmb3Igc3RyZWFtaW5nLiAqLworICAgIE9NWF9CT09MIGJEb3dubWl4OwkJICAvKio8IERvd25taXggaW5wdXQgZnJvbSBzdGVyZW8gdG8gbW9ubyAoaGFzIG5vIGVmZmVjdCBvbiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9uLXN0ZXJlbyBzdHJlYW1zKS4gVXNlZnVsIGZvciBsb3dlci1iaXRyYXRlIGVuY29kaW5nLiAqLyAgICAgCit9IE9NWF9BVURJT19QQVJBTV9WT1JCSVNUWVBFOworCisKKy8qKiBXTUEgVmVyc2lvbiAqLwordHlwZWRlZiBlbnVtIE9NWF9BVURJT19XTUFGT1JNQVRUWVBFIHsKKyAgT01YX0FVRElPX1dNQUZvcm1hdFVudXNlZCA9IDAsIC8qKjwgZm9ybWF0IHVudXNlZCBvciB1bmtub3duICovCisgIE9NWF9BVURJT19XTUFGb3JtYXQ3LCAgICAgICAgICAvKio8IFdpbmRvd3MgTWVkaWEgQXVkaW8gZm9ybWF0IDcgKi8KKyAgT01YX0FVRElPX1dNQUZvcm1hdDgsICAgICAgICAgIC8qKjwgV2luZG93cyBNZWRpYSBBdWRpbyBmb3JtYXQgOCAqLworICBPTVhfQVVESU9fV01BRm9ybWF0OSwgICAgICAgICAgLyoqPCBXaW5kb3dzIE1lZGlhIEF1ZGlvIGZvcm1hdCA5ICovCisgIE9NWF9BVURJT19XTUFGb3JtYXRLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgIE9NWF9BVURJT19XTUFGb3JtYXRWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLworICBPTVhfQVVESU9fV01BRm9ybWF0TWF4ID0gMHg3RkZGRkZGRgorfSBPTVhfQVVESU9fV01BRk9STUFUVFlQRTsKKworCisvKiogV01BIFByb2ZpbGUgKi8KK3R5cGVkZWYgZW51bSBPTVhfQVVESU9fV01BUFJPRklMRVRZUEUgeworICBPTVhfQVVESU9fV01BUHJvZmlsZVVudXNlZCA9IDAsICAvKio8IHByb2ZpbGUgdW51c2VkIG9yIHVua25vd24gKi8KKyAgT01YX0FVRElPX1dNQVByb2ZpbGVMMSwgICAgICAgICAgLyoqPCBXaW5kb3dzIE1lZGlhIGF1ZGlvIHZlcnNpb24gOSBwcm9maWxlIEwxICovCisgIE9NWF9BVURJT19XTUFQcm9maWxlTDIsICAgICAgICAgIC8qKjwgV2luZG93cyBNZWRpYSBhdWRpbyB2ZXJzaW9uIDkgcHJvZmlsZSBMMiAqLworICBPTVhfQVVESU9fV01BUHJvZmlsZUwzLCAgICAgICAgICAvKio8IFdpbmRvd3MgTWVkaWEgYXVkaW8gdmVyc2lvbiA5IHByb2ZpbGUgTDMgKi8KKyAgT01YX0FVRElPX1dNQVByb2ZpbGVLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgIE9NWF9BVURJT19XTUFQcm9maWxlVmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KKyAgT01YX0FVRElPX1dNQVByb2ZpbGVNYXggPSAweDdGRkZGRkZGCit9IE9NWF9BVURJT19XTUFQUk9GSUxFVFlQRTsKKworCisvKiogV01BIHBhcmFtcyAqLwordHlwZWRlZiBzdHJ1Y3QgT01YX0FVRElPX1BBUkFNX1dNQVRZUEUgeworICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247IC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLworICAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAgLyoqPCBwb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0byAqLworICAgIE9NWF9VMTYgbkNoYW5uZWxzOyAgICAgICAgLyoqPCBOdW1iZXIgb2YgY2hhbm5lbHMgKi8KKyAgICBPTVhfVTMyIG5CaXRSYXRlOyAgICAgICAgIC8qKjwgQml0IHJhdGUgb2YgdGhlIGlucHV0IGRhdGEuICBVc2UgMCBmb3IgdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF0ZSBvciB1bmtub3duIGJpdCByYXRlcyAqLworICAgIE9NWF9BVURJT19XTUFGT1JNQVRUWVBFIGVGb3JtYXQ7IC8qKjwgVmVyc2lvbiBvZiBXTUEgc3RyZWFtIC8gZGF0YSAqLworCU9NWF9BVURJT19XTUFQUk9GSUxFVFlQRSBlUHJvZmlsZTsgIC8qKjwgUHJvZmlsZSBvZiBXTUEgc3RyZWFtIC8gZGF0YSAqLworICAgIE9NWF9VMzIgblNhbXBsaW5nUmF0ZTsgICAgLyoqPCBTYW1wbGluZyByYXRlIG9mIHRoZSBzb3VyY2UgZGF0YSAqLworICAgIE9NWF9VMTYgbkJsb2NrQWxpZ247ICAgICAgLyoqPCBpcyB0aGUgYmxvY2sgYWxpZ25tZW50LCBvciBibG9jayBzaXplLCBpbiBieXRlcyBvZiB0aGUgYXVkaW8gY29kZWMgKi8KKyAgICBPTVhfVTE2IG5FbmNvZGVPcHRpb25zOyAgIC8qKjwgV01BIFR5cGUtc3BlY2lmaWMgZGF0YSAqLworICAgIE9NWF9VMzIgblN1cGVyQmxvY2tBbGlnbjsgLyoqPCBXTUEgVHlwZS1zcGVjaWZpYyBkYXRhICovCit9IE9NWF9BVURJT19QQVJBTV9XTUFUWVBFOworCisvKiogCisgKiBSZWFsQXVkaW8gZm9ybWF0CisgKi8KK3R5cGVkZWYgZW51bSBPTVhfQVVESU9fUkFGT1JNQVRUWVBFIHsKKyAgICBPTVhfQVVESU9fUkFGb3JtYXRVbnVzZWQgPSAwLCAvKio8IEZvcm1hdCB1bnVzZWQgb3IgdW5rbm93biAqLworICAgIE9NWF9BVURJT19SQTgsICAgICAgICAgICAgICAgIC8qKjwgUmVhbEF1ZGlvIDggY29kZWMgKi8KKyAgICBPTVhfQVVESU9fUkE5LCAgICAgICAgICAgICAgICAvKio8IFJlYWxBdWRpbyA5IGNvZGVjICovCisgICAgT01YX0FVRElPX1JBMTBfQUFDLCAgICAgICAgICAgLyoqPCBNUEVHLTQgQUFDIGNvZGVjIGZvciBiaXRyYXRlcyBvZiBtb3JlIHRoYW4gMTI4a2JwcyAqLworICAgIE9NWF9BVURJT19SQTEwX0NPREVDLCAgICAgICAgIC8qKjwgUmVhbEF1ZGlvIGNvZGVjIGZvciBiaXRyYXRlcyBsZXNzIHRoYW4gMTI4IGticHMgKi8KKyAgICBPTVhfQVVESU9fUkExMF9MT1NTTEVTUywgICAgICAvKio8IFJlYWxBdWRpbyBMb3NzbGVzcyAqLworICAgIE9NWF9BVURJT19SQTEwX01VTFRJQ0hBTk5FTCwgIC8qKjwgUmVhbEF1ZGlvIE11bHRpY2hhbm5lbCAqLworICAgIE9NWF9BVURJT19SQTEwX1ZPSUNFLCAgICAgICAgIC8qKjwgUmVhbEF1ZGlvIFZvaWNlIGZvciBiaXRyYXRlcyBiZWxvdyAxNSBrYnBzICovCisgICAgT01YX0FVRElPX1JBRm9ybWF0S2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIE9NWF9BVURJT19SQUZvcm1hdFZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCisgICAgT01YX1ZJREVPX1JBRm9ybWF0TWF4ID0gMHg3RkZGRkZGRgorfSBPTVhfQVVESU9fUkFGT1JNQVRUWVBFOworCisvKiogUkEgKFJlYWwgQXVkaW8pIHBhcmFtcyAqLyAKK3R5cGVkZWYgc3RydWN0IE9NWF9BVURJT19QQVJBTV9SQVRZUEUgeyAKKyAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAgLyoqPCBTaXplIG9mIHRoaXMgc3RydWN0dXJlLCBpbiBCeXRlcyAqLyAKKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovIAorICAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAgICAvKio8IFBvcnQgdGhhdCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzIHRvICovIAorICAgIE9NWF9VMzIgbkNoYW5uZWxzOyAgICAgICAgICAvKio8IE51bWJlciBvZiBjaGFubmVscyAqLyAKKyAgICBPTVhfVTMyIG5TYW1wbGluZ1JhdGU7ICAgICAgLyoqPCBpcyB0aGUgc2FtcGxpbmcgcmF0ZSBvZiB0aGUgc291cmNlIGRhdGEgKi8gCisgICAgT01YX1UzMiBuQml0c1BlckZyYW1lOyAgICAgIC8qKjwgaXMgdGhlIHZhbHVlIGZvciBiaXRzIHBlciBmcmFtZSAgKi8gCisgICAgT01YX1UzMiBuU2FtcGxlUGVyRnJhbWU7ICAgIC8qKjwgaXMgdGhlIHZhbHVlIGZvciBzYW1wbGVzIHBlciBmcmFtZSAqLyAKKyAgICBPTVhfVTMyIG5Db3VwbGluZ1F1YW50Qml0czsgLyoqPCBpcyB0aGUgbnVtYmVyIG9mIGNvdXBsaW5nIHF1YW50aXphdGlvbiBiaXRzIGluIHRoZSBzdHJlYW0gKi8gCisgICAgT01YX1UzMiBuQ291cGxpbmdTdGFydFJlZ2lvbjsgICAvKio8IGlzIHRoZSBjb3VwbGluZyBzdGFydCByZWdpb24gaW4gdGhlIHN0cmVhbSAgKi8gCisgICAgT01YX1UzMiBuTnVtUmVnaW9uczsgICAgICAgIC8qKjwgaXMgdGhlIG51bWJlciBvZiByZWdpb25zIHZhbHVlICovIAorICAgIE9NWF9BVURJT19SQUZPUk1BVFRZUEUgZUZvcm1hdDsgLyoqPCBpcyB0aGUgUmVhbEF1ZGlvIGF1ZGlvIGZvcm1hdCAqLworfSBPTVhfQVVESU9fUEFSQU1fUkFUWVBFOyAKKworCisvKiogU0JDIEFsbG9jYXRpb24gTWV0aG9kIFR5cGUgKi8KK3R5cGVkZWYgZW51bSBPTVhfQVVESU9fU0JDQUxMT0NNRVRIT0RUWVBFIHsKKyAgT01YX0FVRElPX1NCQ0FsbG9jTWV0aG9kTG91ZG5lc3MsIC8qKjwgTG91ZG5lc3MgYWxsb2NhdGlvbiBtZXRob2QgKi8KKyAgT01YX0FVRElPX1NCQ0FsbG9jTWV0aG9kU05SLCAgICAgIC8qKjwgU05SIGFsbG9jYXRpb24gbWV0aG9kICovCisgIE9NWF9BVURJT19TQkNBbGxvY01ldGhvZEtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKKyAgT01YX0FVRElPX1NCQ0FsbG9jTWV0aG9kVmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KKyAgT01YX0FVRElPX1NCQ0FsbG9jTWV0aG9kTWF4ID0gMHg3RkZGRkZGRgorfSBPTVhfQVVESU9fU0JDQUxMT0NNRVRIT0RUWVBFOworCisKKy8qKiBTQkMgcGFyYW1zICovCit0eXBlZGVmIHN0cnVjdCBPTVhfQVVESU9fUEFSQU1fU0JDVFlQRSB7CisgICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAvKio8IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24gKi8KKyAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7ICAgICAgICAvKio8IHBvcnQgdGhhdCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzIHRvICovCisgICAgT01YX1UzMiBuQ2hhbm5lbHM7ICAgICAgICAgLyoqPCBOdW1iZXIgb2YgY2hhbm5lbHMgKi8KKyAgICBPTVhfVTMyIG5CaXRSYXRlOyAgICAgICAgICAvKio8IEJpdCByYXRlIG9mIHRoZSBpbnB1dCBkYXRhLiAgVXNlIDAgZm9yIHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXRlIG9yIHVua25vd24gYml0IHJhdGVzICovCisgICAgT01YX1UzMiBuU2FtcGxlUmF0ZTsgICAgICAgLyoqPCBTYW1wbGluZyByYXRlIG9mIHRoZSBzb3VyY2UgZGF0YS4gIFVzZSAwIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgb3IgdW5rbm93biBzYW1wbGluZyByYXRlLiAqLworICAgIE9NWF9VMzIgbkJsb2NrczsgICAgICAgICAgIC8qKjwgTnVtYmVyIG9mIGJsb2NrcyAqLworICAgIE9NWF9VMzIgblN1YmJhbmRzOyAgICAgICAgIC8qKjwgTnVtYmVyIG9mIHN1YmJhbmRzICovCisgICAgT01YX1UzMiBuQml0UG9vbDsgICAgICAgICAgLyoqPCBCaXRwb29sIHZhbHVlICovCisgICAgT01YX0JPT0wgYkVuYWJsZUJpdHJhdGU7ICAgLyoqPCBVc2UgYml0cmF0ZSB2YWx1ZSBpbnN0ZWFkIG9mIGJpdHBvb2wgKi8KKyAgICBPTVhfQVVESU9fQ0hBTk5FTE1PREVUWVBFIGVDaGFubmVsTW9kZTsgLyoqPCBDaGFubmVsIG1vZGUgZW51bWVyYXRpb24gKi8KKyAgICBPTVhfQVVESU9fU0JDQUxMT0NNRVRIT0RUWVBFIGVTQkNBbGxvY1R5cGU7ICAgLyoqPCBTQkMgQWxsb2NhdGlvbiBtZXRob2QgdHlwZSAqLworfSBPTVhfQVVESU9fUEFSQU1fU0JDVFlQRTsKKworCisvKiogQURQQ00gc3RyZWFtIGZvcm1hdCBwYXJhbWV0ZXJzICovIAordHlwZWRlZiBzdHJ1Y3QgT01YX0FVRElPX1BBUkFNX0FEUENNVFlQRSB7IAorICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgICAvKio8IHNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcyAqLyAKKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovIAorICAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAgICAvKio8IHBvcnQgdGhhdCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzIHRvICovIAorICAgIE9NWF9VMzIgbkNoYW5uZWxzOyAgICAgICAgICAvKio8IE51bWJlciBvZiBjaGFubmVscyBpbiB0aGUgZGF0YSBzdHJlYW0gKG5vdCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWNlc3NhcmlseSB0aGUgc2FtZSBhcyB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGJlIHJlbmRlcmVkLiAqLyAKKyAgICBPTVhfVTMyIG5CaXRzUGVyU2FtcGxlOyAgICAgLyoqPCBOdW1iZXIgb2YgYml0cyBpbiBlYWNoIHNhbXBsZSAqLyAKKyAgICBPTVhfVTMyIG5TYW1wbGVSYXRlOyAgICAgICAgLyoqPCBTYW1wbGluZyByYXRlIG9mIHRoZSBzb3VyY2UgZGF0YS4gIFVzZSAwIGZvciAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIG9yIHVua25vd24gc2FtcGxpbmcgcmF0ZS4gKi8gCit9IE9NWF9BVURJT19QQVJBTV9BRFBDTVRZUEU7IAorCisKKy8qKiBHNzIzIHJhdGUgKi8KK3R5cGVkZWYgZW51bSBPTVhfQVVESU9fRzcyM1JBVEUgeworICAgIE9NWF9BVURJT19HNzIzTW9kZVVudXNlZCA9IDAsICAvKio8IEFNUk5CIE1vZGUgdW51c2VkIC8gdW5rbm93biAqLworICAgIE9NWF9BVURJT19HNzIzTW9kZUxvdywgICAgICAgICAvKio8IDUzMDAgYnBzICovCisgICAgT01YX0FVRElPX0c3MjNNb2RlSGlnaCwgICAgICAgIC8qKjwgNjMwMCBicHMgKi8KKyAgICBPTVhfQVVESU9fRzcyM01vZGVLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICAgT01YX0FVRElPX0c3MjNNb2RlVmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KKyAgICBPTVhfQVVESU9fRzcyM01vZGVNYXggPSAweDdGRkZGRkZGCit9IE9NWF9BVURJT19HNzIzUkFURTsKKworCisvKiogRzcyMyAtIFNhbXBsZSByYXRlIG11c3QgYmUgOCBLSHogKi8KK3R5cGVkZWYgc3RydWN0IE9NWF9BVURJT19QQVJBTV9HNzIzVFlQRSB7IAorICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgICAgIC8qKjwgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovIAorICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgICAgIC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLyAKKyAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7ICAgICAgICAgICAvKio8IHBvcnQgdGhhdCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzIHRvICovIAorICAgIE9NWF9VMzIgbkNoYW5uZWxzOyAgICAgICAgICAgIC8qKjwgTnVtYmVyIG9mIGNoYW5uZWxzIGluIHRoZSBkYXRhIHN0cmVhbSAobm90IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVjZXNzYXJpbHkgdGhlIHNhbWUgYXMgdGhlIG51bWJlciBvZiBjaGFubmVscyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGJlIHJlbmRlcmVkLiAqLyAKKyAgICBPTVhfQk9PTCBiRFRYOyAgICAgICAgICAgICAgICAvKio8IEVuYWJsZSBEaXNjb250aW51b3VzIFRyYW5zbWlzc3Npb24gKi8gCisgICAgT01YX0FVRElPX0c3MjNSQVRFIGVCaXRSYXRlOyAgLyoqPCB0b2RvOiBTaG91bGQgdGhpcyBiZSBtb3ZlZCB0byBhIGNvbmZpZz8gKi8KKyAgICBPTVhfQk9PTCBiSGlQYXNzRmlsdGVyOyAgICAgICAvKio8IEVuYWJsZSBIaWdoIFBhc3MgRmlsdGVyICovIAorICAgIE9NWF9CT09MIGJQb3N0RmlsdGVyOyAgICAgICAgIC8qKjwgRW5hYmxlIFBvc3QgRmlsdGVyICovIAorfSBPTVhfQVVESU9fUEFSQU1fRzcyM1RZUEU7IAorCisKKy8qKiBJVFUgRzcyNiAoQURQQ00pIHJhdGUgKi8KK3R5cGVkZWYgZW51bSBPTVhfQVVESU9fRzcyNk1PREUgeworICAgIE9NWF9BVURJT19HNzI2TW9kZVVudXNlZCA9IDAsICAvKio8IEc3MjYgTW9kZSB1bnVzZWQgLyB1bmtub3duICovCisgICAgT01YX0FVRElPX0c3MjZNb2RlMTYsICAgICAgICAgIC8qKjwgMTYga2JwcyAqLworICAgIE9NWF9BVURJT19HNzI2TW9kZTI0LCAgICAgICAgICAvKio8IDI0IGticHMgKi8KKyAgICBPTVhfQVVESU9fRzcyNk1vZGUzMiwgICAgICAgICAgLyoqPCAzMiBrYnBzLCBtb3N0IGNvbW1vbiByYXRlLCBhbHNvIEc3MjEgKi8KKyAgICBPTVhfQVVESU9fRzcyNk1vZGU0MCwgICAgICAgICAgLyoqPCA0MCBrYnBzICovCisgICAgT01YX0FVRElPX0c3MjZNb2RlS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIE9NWF9BVURJT19HNzI2TW9kZVZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCisgICAgT01YX0FVRElPX0c3MjZNb2RlTWF4ID0gMHg3RkZGRkZGRgorfSBPTVhfQVVESU9fRzcyNk1PREU7CisKKworLyoqIEcuNzI2IHN0cmVhbSBmb3JtYXQgcGFyYW1ldGVycyAtIG11c3QgYmUgYXQgOEtIeiAqLyAKK3R5cGVkZWYgc3RydWN0IE9NWF9BVURJT19QQVJBTV9HNzI2VFlQRSB7IAorICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgICAvKio8IHNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcyAqLyAKKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovIAorICAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAgICAvKio8IHBvcnQgdGhhdCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzIHRvICovIAorICAgIE9NWF9VMzIgbkNoYW5uZWxzOyAgICAgICAgICAvKio8IE51bWJlciBvZiBjaGFubmVscyBpbiB0aGUgZGF0YSBzdHJlYW0gKG5vdCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWNlc3NhcmlseSB0aGUgc2FtZSBhcyB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGJlIHJlbmRlcmVkLiAqLyAKKyAgICAgT01YX0FVRElPX0c3MjZNT0RFIGVHNzI2TW9kZTsKK30gT01YX0FVRElPX1BBUkFNX0c3MjZUWVBFOyAKKworCisvKiogRzcyOSBjb2RlciB0eXBlICovCit0eXBlZGVmIGVudW0gT01YX0FVRElPX0c3MjlUWVBFIHsKKyAgICBPTVhfQVVESU9fRzcyOSA9IDAsICAgICAgICAgICAvKio8IElUVSBHLjcyOSAgZW5jb2RlZCBkYXRhICovCisgICAgT01YX0FVRElPX0c3MjlBLCAgICAgICAgICAgICAgLyoqPCBJVFUgRy43MjkgYW5uZXggQSAgZW5jb2RlZCBkYXRhICovCisgICAgT01YX0FVRElPX0c3MjlCLCAgICAgICAgICAgICAgLyoqPCBJVFUgRy43Mjkgd2l0aCBhbm5leCBCIGVuY29kZWQgZGF0YSAqLworICAgIE9NWF9BVURJT19HNzI5QUIsICAgICAgICAgICAgIC8qKjwgSVRVIEcuNzI5IGFubmV4ZXMgQSBhbmQgQiBlbmNvZGVkIGRhdGEgKi8KKyAgICBPTVhfQVVESU9fRzcyOUtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKKyAgICBPTVhfQVVESU9fRzcyOVZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCisgICAgT01YX0FVRElPX0c3MjlNYXggPSAweDdGRkZGRkZGCit9IE9NWF9BVURJT19HNzI5VFlQRTsKKworCisvKiogRzcyOSBzdHJlYW0gZm9ybWF0IHBhcmFtZXRlcnMgLSBmaXhlZCA2S0h6IHNhbXBsZSByYXRlICovCit0eXBlZGVmIHN0cnVjdCBPTVhfQVVESU9fUEFSQU1fRzcyOVRZUEUgeworICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247IC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLworICAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAgLyoqPCBwb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0byAqLworICAgIE9NWF9VMzIgbkNoYW5uZWxzOyAgICAgICAgLyoqPCBOdW1iZXIgb2YgY2hhbm5lbHMgaW4gdGhlIGRhdGEgc3RyZWFtIChub3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVjZXNzYXJpbHkgdGhlIHNhbWUgYXMgdGhlIG51bWJlciBvZiBjaGFubmVscworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBiZSByZW5kZXJlZC4gKi8KKyAgICBPTVhfQk9PTCBiRFRYOyAgICAgICAgICAgIC8qKjwgRW5hYmxlIERpc2NvbnRpbnVvdXMgVHJhbnNtaXNzc2lvbiAqLworICAgIE9NWF9BVURJT19HNzI5VFlQRSBlQml0VHlwZTsKK30gT01YX0FVRElPX1BBUkFNX0c3MjlUWVBFOworCisKKy8qKiBBTVIgRnJhbWUgZm9ybWF0ICovIAordHlwZWRlZiBlbnVtIE9NWF9BVURJT19BTVJGUkFNRUZPUk1BVFRZUEUgeyAKKyAgICBPTVhfQVVESU9fQU1SRnJhbWVGb3JtYXRDb25mb3JtYW5jZSA9IDAsICAvKio8IEZyYW1lIEZvcm1hdCBpcyBBTVIgQ29uZm9ybWFuY2UgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU3RhbmRhcmQpIEZvcm1hdCAqLyAKKyAgICBPTVhfQVVESU9fQU1SRnJhbWVGb3JtYXRJRjEsICAgICAgICAgICAgICAvKio8IEZyYW1lIEZvcm1hdCBpcyBBTVIgSW50ZXJmYWNlIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9ybWF0IDEgKi8gCisgICAgT01YX0FVRElPX0FNUkZyYW1lRm9ybWF0SUYyLCAgICAgICAgICAgICAgLyoqPCBGcmFtZSBGb3JtYXQgaXMgQU1SIEludGVyZmFjZSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvcm1hdCAyKi8gCisgICAgT01YX0FVRElPX0FNUkZyYW1lRm9ybWF0RlNGLCAgICAgICAgICAgICAgLyoqPCBGcmFtZSBGb3JtYXQgaXMgQU1SIEZpbGUgU3RvcmFnZSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvcm1hdCAqLyAKKyAgICBPTVhfQVVESU9fQU1SRnJhbWVGb3JtYXRSVFBQYXlsb2FkLCAgICAgICAvKio8IEZyYW1lIEZvcm1hdCBpcyBBTVIgUmVhbC1UaW1lIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNwb3J0IFByb3RvY29sIFBheWxvYWQgRm9ybWF0ICovIAorICAgIE9NWF9BVURJT19BTVJGcmFtZUZvcm1hdElUVSwgICAgICAgICAgICAgIC8qKjwgRnJhbWUgRm9ybWF0IGlzIElUVSBGb3JtYXQgKGFkZGVkIGF0IE1vdG9yb2xhIHJlcXVlc3QpICovIAorICAgIE9NWF9BVURJT19BTVJGcmFtZUZvcm1hdEtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKKyAgICBPTVhfQVVESU9fQU1SRnJhbWVGb3JtYXRWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLworICAgIE9NWF9BVURJT19BTVJGcmFtZUZvcm1hdE1heCA9IDB4N0ZGRkZGRkYgCit9IE9NWF9BVURJT19BTVJGUkFNRUZPUk1BVFRZUEU7IAorCisKKy8qKiBBTVIgYmFuZCBtb2RlICovCit0eXBlZGVmIGVudW0gT01YX0FVRElPX0FNUkJBTkRNT0RFVFlQRSB7CisgICAgT01YX0FVRElPX0FNUkJhbmRNb2RlVW51c2VkID0gMCwgICAgICAgICAgLyoqPCBBTVJOQiBNb2RlIHVudXNlZCAvIHVua25vd24gKi8KKyAgICBPTVhfQVVESU9fQU1SQmFuZE1vZGVOQjAsICAgICAgICAgICAgICAgICAvKio8IEFNUk5CIE1vZGUgMCA9ICA0NzUwIGJwcyAqLworICAgIE9NWF9BVURJT19BTVJCYW5kTW9kZU5CMSwgICAgICAgICAgICAgICAgIC8qKjwgQU1STkIgTW9kZSAxID0gIDUxNTAgYnBzICovCisgICAgT01YX0FVRElPX0FNUkJhbmRNb2RlTkIyLCAgICAgICAgICAgICAgICAgLyoqPCBBTVJOQiBNb2RlIDIgPSAgNTkwMCBicHMgKi8gCisgICAgT01YX0FVRElPX0FNUkJhbmRNb2RlTkIzLCAgICAgICAgICAgICAgICAgLyoqPCBBTVJOQiBNb2RlIDMgPSAgNjcwMCBicHMgKi8KKyAgICBPTVhfQVVESU9fQU1SQmFuZE1vZGVOQjQsICAgICAgICAgICAgICAgICAvKio8IEFNUk5CIE1vZGUgNCA9ICA3NDAwIGJwcyAqLworICAgIE9NWF9BVURJT19BTVJCYW5kTW9kZU5CNSwgICAgICAgICAgICAgICAgIC8qKjwgQU1STkIgTW9kZSA1ID0gIDc5NTAgYnBzICovCisgICAgT01YX0FVRElPX0FNUkJhbmRNb2RlTkI2LCAgICAgICAgICAgICAgICAgLyoqPCBBTVJOQiBNb2RlIDYgPSAxMDIwMCBicHMgKi8KKyAgICBPTVhfQVVESU9fQU1SQmFuZE1vZGVOQjcsICAgICAgICAgICAgICAgICAvKio8IEFNUk5CIE1vZGUgNyA9IDEyMjAwIGJwcyAqLworICAgIE9NWF9BVURJT19BTVJCYW5kTW9kZVdCMCwgICAgICAgICAgICAgICAgIC8qKjwgQU1SV0IgTW9kZSAwID0gIDY2MDAgYnBzICovCisgICAgT01YX0FVRElPX0FNUkJhbmRNb2RlV0IxLCAgICAgICAgICAgICAgICAgLyoqPCBBTVJXQiBNb2RlIDEgPSAgODg1MCBicHMgKi8KKyAgICBPTVhfQVVESU9fQU1SQmFuZE1vZGVXQjIsICAgICAgICAgICAgICAgICAvKio8IEFNUldCIE1vZGUgMiA9IDEyNjUwIGJwcyAqLyAKKyAgICBPTVhfQVVESU9fQU1SQmFuZE1vZGVXQjMsICAgICAgICAgICAgICAgICAvKio8IEFNUldCIE1vZGUgMyA9IDE0MjUwIGJwcyAqLyAKKyAgICBPTVhfQVVESU9fQU1SQmFuZE1vZGVXQjQsICAgICAgICAgICAgICAgICAvKio8IEFNUldCIE1vZGUgNCA9IDE1ODUwIGJwcyAqLworICAgIE9NWF9BVURJT19BTVJCYW5kTW9kZVdCNSwgICAgICAgICAgICAgICAgIC8qKjwgQU1SV0IgTW9kZSA1ID0gMTgyNTAgYnBzICovCisgICAgT01YX0FVRElPX0FNUkJhbmRNb2RlV0I2LCAgICAgICAgICAgICAgICAgLyoqPCBBTVJXQiBNb2RlIDYgPSAxOTg1MCBicHMgKi8KKyAgICBPTVhfQVVESU9fQU1SQmFuZE1vZGVXQjcsICAgICAgICAgICAgICAgICAvKio8IEFNUldCIE1vZGUgNyA9IDIzMDUwIGJwcyAqLworICAgIE9NWF9BVURJT19BTVJCYW5kTW9kZVdCOCwgICAgICAgICAgICAgICAgIC8qKjwgQU1SV0IgTW9kZSA4ID0gMjM4NTAgYnBzICovICAgICAgCisgICAgT01YX0FVRElPX0FNUkJhbmRNb2RlS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIE9NWF9BVURJT19BTVJCYW5kTW9kZVZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCisgICAgT01YX0FVRElPX0FNUkJhbmRNb2RlTWF4ID0gMHg3RkZGRkZGRgorfSBPTVhfQVVESU9fQU1SQkFORE1PREVUWVBFOworICAgICAKKworLyoqIEFNUiBEaXNjb250aW51b3VzIFRyYW5zbWlzc2lvbiBtb2RlICovIAordHlwZWRlZiBlbnVtIE9NWF9BVURJT19BTVJEVFhNT0RFVFlQRSB7IAorICAgIE9NWF9BVURJT19BTVJEVFhNb2RlT2ZmID0gMCwgICAgICAgIC8qKjwgQU1SIERpc2NvbnRpbnVvdXMgVHJhbnNtaXNzaW9uIE1vZGUgaXMgZGlzYWJsZWQgKi8gCisgICAgT01YX0FVRElPX0FNUkRUWE1vZGVPblZBRDEsICAgICAgICAgLyoqPCBBTVIgRGlzY29udGludW91cyBUcmFuc21pc3Npb24gTW9kZSB1c2luZyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZvaWNlIEFjdGl2aXR5IERldGVjdG9yIDEgKFZBRDEpIGlzIGVuYWJsZWQgKi8gCisgICAgT01YX0FVRElPX0FNUkRUWE1vZGVPblZBRDIsICAgICAgICAgLyoqPCBBTVIgRGlzY29udGludW91cyBUcmFuc21pc3Npb24gTW9kZSB1c2luZyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZvaWNlIEFjdGl2aXR5IERldGVjdG9yIDIgKFZBRDIpIGlzIGVuYWJsZWQgKi8gICAgICAgCisgICAgT01YX0FVRElPX0FNUkRUWE1vZGVPbkF1dG8sICAgICAgICAgLyoqPCBUaGUgY29kZWMgd2lsbCBhdXRvbWF0aWNhbGx5IHNlbGVjdCBiZXR3ZWVuIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2ZmLCBWQUQxIG9yIFZBRDIgbW9kZXMgKi8gCisKKyAgICBPTVhfQVVESU9fQU1SRFRYYXNFRlIsICAgICAgICAgICAgIC8qKjwgRFRYIGFzIEVGUiBpbnN0ZWFkIG9mIEFNUiBzdGFuZGFyZCAoM0dQUCAyNi4xMDEsIGZyYW1lIHR5cGUgPTgsOSwxMCkgKi8KKworICAgIE9NWF9BVURJT19BTVJEVFhNb2RlS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIE9NWF9BVURJT19BTVJEVFhNb2RlVmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KKyAgICBPTVhfQVVESU9fQU1SRFRYTW9kZU1heCA9IDB4N0ZGRkZGRkYgCit9IE9NWF9BVURJT19BTVJEVFhNT0RFVFlQRTsgCisgCisKKy8qKiBBTVIgcGFyYW1zICovCit0eXBlZGVmIHN0cnVjdCBPTVhfQVVESU9fUEFSQU1fQU1SVFlQRSB7CisgICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovCisgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAgICAgICAgICAgICAgIC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLworICAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAgICAgICAgICAgICAgICAvKio8IHBvcnQgdGhhdCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzIHRvICovCisgICAgT01YX1UzMiBuQ2hhbm5lbHM7ICAgICAgICAgICAgICAgICAgICAgIC8qKjwgTnVtYmVyIG9mIGNoYW5uZWxzICovCisgICAgT01YX1UzMiBuQml0UmF0ZTsgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQml0IHJhdGUgcmVhZCBvbmx5IGZpZWxkICovCisgICAgT01YX0FVRElPX0FNUkJBTkRNT0RFVFlQRSBlQU1SQmFuZE1vZGU7IC8qKjwgQU1SIEJhbmQgTW9kZSBlbnVtZXJhdGlvbiAqLyAKKyAgICBPTVhfQVVESU9fQU1SRFRYTU9ERVRZUEUgIGVBTVJEVFhNb2RlOyAgLyoqPCBBTVIgRFRYIE1vZGUgZW51bWVyYXRpb24gKi8KKyAgICBPTVhfQVVESU9fQU1SRlJBTUVGT1JNQVRUWVBFIGVBTVJGcmFtZUZvcm1hdDsgLyoqPCBBTVIgZnJhbWUgZm9ybWF0IGVudW1lcmF0aW9uICovCit9IE9NWF9BVURJT19QQVJBTV9BTVJUWVBFOworCisKKy8qKiBHU01fRlIgKEVUU0kgMDYuMTAsIDNHUFAgNDYuMDEwKSBzdHJlYW0gZm9ybWF0IHBhcmFtZXRlcnMgKi8KK3R5cGVkZWYgc3RydWN0IE9NWF9BVURJT19QQVJBTV9HU01GUlRZUEUgeworICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247IC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLworICAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAgLyoqPCBwb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0byAqLworICAgIE9NWF9CT09MIGJEVFg7ICAgICAgICAgICAgLyoqPCBFbmFibGUgRGlzY29udGludW91cyBUcmFuc21pc3NzaW9uICovCisgICAgT01YX0JPT0wgYkhpUGFzc0ZpbHRlcjsgICAvKio8IEVuYWJsZSBIaWdoIFBhc3MgRmlsdGVyICovCit9IE9NWF9BVURJT19QQVJBTV9HU01GUlRZUEU7CisKKworLyoqIEdTTS1IUiAoRVRTSSAwNi4yMCwgM0dQUCA0Ni4wMjApIHN0cmVhbSBmb3JtYXQgcGFyYW1ldGVycyAqLwordHlwZWRlZiBzdHJ1Y3QgT01YX0FVRElPX1BBUkFNX0dTTUhSVFlQRSB7CisgICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAvKio8IHNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcyAqLworICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCisgICAgT01YX1UzMiBuUG9ydEluZGV4OyAgICAgICAvKio8IHBvcnQgdGhhdCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzIHRvICovCisgICAgT01YX0JPT0wgYkRUWDsgICAgICAgICAgICAvKio8IEVuYWJsZSBEaXNjb250aW51b3VzIFRyYW5zbWlzc3Npb24gKi8KKyAgICBPTVhfQk9PTCBiSGlQYXNzRmlsdGVyOyAgIC8qKjwgRW5hYmxlIEhpZ2ggUGFzcyBGaWx0ZXIgKi8KK30gT01YX0FVRElPX1BBUkFNX0dTTUhSVFlQRTsKKworCisvKiogR1NNLUVGUiAoRVRTSSAwNi42MCwgM0dQUCA0Ni4wNjApIHN0cmVhbSBmb3JtYXQgcGFyYW1ldGVycyAqLwordHlwZWRlZiBzdHJ1Y3QgT01YX0FVRElPX1BBUkFNX0dTTUVGUlRZUEUgeworICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247IC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLworICAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAgLyoqPCBwb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0byAqLworICAgIE9NWF9CT09MIGJEVFg7ICAgICAgICAgICAgLyoqPCBFbmFibGUgRGlzY29udGludW91cyBUcmFuc21pc3NzaW9uICovCisgICAgT01YX0JPT0wgYkhpUGFzc0ZpbHRlcjsgICAvKio8IEVuYWJsZSBIaWdoIFBhc3MgRmlsdGVyICovCit9IE9NWF9BVURJT19QQVJBTV9HU01FRlJUWVBFOworCisKKy8qKiBURE1BIEZSIChUSUEvRUlBLTEzNi00MjAsIFZTRUxQIDcuOTVrYnBzIGNvZGVyKSBzdHJlYW0gZm9ybWF0IHBhcmFtZXRlcnMgKi8KK3R5cGVkZWYgc3RydWN0IE9NWF9BVURJT19QQVJBTV9URE1BRlJUWVBFIHsKKyAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAgICAvKio8IHNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcyAqLworICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgICAgIC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLworICAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAgICAgIC8qKjwgcG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8gKi8KKyAgICBPTVhfVTMyIG5DaGFubmVsczsgICAgICAgICAgICAvKio8IE51bWJlciBvZiBjaGFubmVscyBpbiB0aGUgZGF0YSBzdHJlYW0gKG5vdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVjZXNzYXJpbHkgdGhlIHNhbWUgYXMgdGhlIG51bWJlciBvZiBjaGFubmVscworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYmUgcmVuZGVyZWQuICovCisgICAgT01YX0JPT0wgYkRUWDsgICAgICAgICAgICAgICAgLyoqPCBFbmFibGUgRGlzY29udGludW91cyBUcmFuc21pc3NzaW9uICovCisgICAgT01YX0JPT0wgYkhpUGFzc0ZpbHRlcjsgICAgICAgLyoqPCBFbmFibGUgSGlnaCBQYXNzIEZpbHRlciAqLworfSBPTVhfQVVESU9fUEFSQU1fVERNQUZSVFlQRTsKKworCisvKiogVERNQSBFRlIgKFRJQS9FSUEtMTM2LTQxMCwgQUNFTFAgNy40a2JwcyBjb2Rlcikgc3RyZWFtIGZvcm1hdCBwYXJhbWV0ZXJzICovCit0eXBlZGVmIHN0cnVjdCBPTVhfQVVESU9fUEFSQU1fVERNQUVGUlRZUEUgeworICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgICAgIC8qKjwgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovCisgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAgICAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCisgICAgT01YX1UzMiBuUG9ydEluZGV4OyAgICAgICAgICAgLyoqPCBwb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0byAqLworICAgIE9NWF9VMzIgbkNoYW5uZWxzOyAgICAgICAgICAgIC8qKjwgTnVtYmVyIG9mIGNoYW5uZWxzIGluIHRoZSBkYXRhIHN0cmVhbSAobm90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWNlc3NhcmlseSB0aGUgc2FtZSBhcyB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBiZSByZW5kZXJlZC4gKi8KKyAgICBPTVhfQk9PTCBiRFRYOyAgICAgICAgICAgICAgICAvKio8IEVuYWJsZSBEaXNjb250aW51b3VzIFRyYW5zbWlzc3Npb24gKi8KKyAgICBPTVhfQk9PTCBiSGlQYXNzRmlsdGVyOyAgICAgICAvKio8IEVuYWJsZSBIaWdoIFBhc3MgRmlsdGVyICovCit9IE9NWF9BVURJT19QQVJBTV9URE1BRUZSVFlQRTsKKworCisvKiogUERDIEZSICggUkNSLTI3LCBWU0VMUCA2LjdrYnBzIGNvZGVyKSBzdHJlYW0gZm9ybWF0IHBhcmFtZXRlcnMgKi8KK3R5cGVkZWYgc3RydWN0IE9NWF9BVURJT19QQVJBTV9QRENGUlRZUEUgeworICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgICAgIC8qKjwgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovCisgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAgICAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCisgICAgT01YX1UzMiBuUG9ydEluZGV4OyAgICAgICAgICAgLyoqPCBwb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0byAqLworICAgIE9NWF9VMzIgbkNoYW5uZWxzOyAgICAgICAgICAgIC8qKjwgTnVtYmVyIG9mIGNoYW5uZWxzIGluIHRoZSBkYXRhIHN0cmVhbSAobm90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWNlc3NhcmlseSB0aGUgc2FtZSBhcyB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBiZSByZW5kZXJlZC4gKi8KKyAgICBPTVhfQk9PTCBiRFRYOyAgICAgICAgICAgICAgICAvKio8IEVuYWJsZSBEaXNjb250aW51b3VzIFRyYW5zbWlzc3Npb24gKi8KKyAgICBPTVhfQk9PTCBiSGlQYXNzRmlsdGVyOyAgICAgICAvKio8IEVuYWJsZSBIaWdoIFBhc3MgRmlsdGVyICovCit9IE9NWF9BVURJT19QQVJBTV9QRENGUlRZUEU7CisKKworLyoqIFBEQyBFRlIgKCBSQ1ItMjcsIEFDRUxQIDYuN2ticHMgY29kZXIpIHN0cmVhbSBmb3JtYXQgcGFyYW1ldGVycyAqLwordHlwZWRlZiBzdHJ1Y3QgT01YX0FVRElPX1BBUkFNX1BEQ0VGUlRZUEUgeworICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgICAgIC8qKjwgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovCisgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAgICAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCisgICAgT01YX1UzMiBuUG9ydEluZGV4OyAgICAgICAgICAgLyoqPCBwb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0byAqLworICAgIE9NWF9VMzIgbkNoYW5uZWxzOyAgICAgICAgICAgIC8qKjwgTnVtYmVyIG9mIGNoYW5uZWxzIGluIHRoZSBkYXRhIHN0cmVhbSAobm90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWNlc3NhcmlseSB0aGUgc2FtZSBhcyB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBiZSByZW5kZXJlZC4gKi8KKyAgICBPTVhfQk9PTCBiRFRYOyAgICAgICAgICAgICAgICAvKio8IEVuYWJsZSBEaXNjb250aW51b3VzIFRyYW5zbWlzc3Npb24gKi8KKyAgICBPTVhfQk9PTCBiSGlQYXNzRmlsdGVyOyAgICAgICAvKio8IEVuYWJsZSBIaWdoIFBhc3MgRmlsdGVyICovCit9IE9NWF9BVURJT19QQVJBTV9QRENFRlJUWVBFOworCisvKiogUERDIEhSICggUkNSLTI3LCBQU0ktQ0VMUCAzLjQ1a2JwcyBjb2Rlcikgc3RyZWFtIGZvcm1hdCBwYXJhbWV0ZXJzICovCit0eXBlZGVmIHN0cnVjdCBPTVhfQVVESU9fUEFSQU1fUERDSFJUWVBFIHsKKyAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAgICAvKio8IHNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcyAqLworICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgICAgIC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLworICAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAgICAgIC8qKjwgcG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8gKi8KKyAgICBPTVhfVTMyIG5DaGFubmVsczsgICAgICAgICAgICAvKio8IE51bWJlciBvZiBjaGFubmVscyBpbiB0aGUgZGF0YSBzdHJlYW0gKG5vdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVjZXNzYXJpbHkgdGhlIHNhbWUgYXMgdGhlIG51bWJlciBvZiBjaGFubmVscworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYmUgcmVuZGVyZWQuICovCisgICAgT01YX0JPT0wgYkRUWDsgICAgICAgICAgICAgICAgLyoqPCBFbmFibGUgRGlzY29udGludW91cyBUcmFuc21pc3NzaW9uICovCisgICAgT01YX0JPT0wgYkhpUGFzc0ZpbHRlcjsgICAgICAgLyoqPCBFbmFibGUgSGlnaCBQYXNzIEZpbHRlciAqLworfSBPTVhfQVVESU9fUEFSQU1fUERDSFJUWVBFOworCisKKy8qKiBDRE1BIFJhdGUgdHlwZXMgKi8KK3R5cGVkZWYgZW51bSBPTVhfQVVESU9fQ0RNQVJBVEVUWVBFIHsKKyAgICBPTVhfQVVESU9fQ0RNQVJhdGVCbGFuayA9IDAsICAgICAgICAgIC8qKjwgQ0RNQSBlbmNvZGVkIGZyYW1lIGlzIGJsYW5rICovCisgICAgT01YX0FVRElPX0NETUFSYXRlRnVsbCwgICAgICAgICAgICAgICAvKio8IENETUEgZW5jb2RlZCBmcmFtZSBpbiBmdWxsIHJhdGUgKi8KKyAgICBPTVhfQVVESU9fQ0RNQVJhdGVIYWxmLCAgICAgICAgICAgICAgIC8qKjwgQ0RNQSBlbmNvZGVkIGZyYW1lIGluIGhhbGYgcmF0ZSAqLworICAgIE9NWF9BVURJT19DRE1BUmF0ZVF1YXJ0ZXIsICAgICAgICAgICAgLyoqPCBDRE1BIGVuY29kZWQgZnJhbWUgaW4gcXVhcnRlciByYXRlICovCisgICAgT01YX0FVRElPX0NETUFSYXRlRWlnaHRoLCAgICAgICAgICAgICAvKio8IENETUEgZW5jb2RlZCBmcmFtZSBpbiBlaWdodGggcmF0ZSAoRFRYKSovCisgICAgT01YX0FVRElPX0NETUFSYXRlRXJhc3VyZSwgICAgICAgICAgICAvKio8IENETUEgZXJhc3VyZSBmcmFtZSAqLworICAgIE9NWF9BVURJT19DRE1BUmF0ZUtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKKyAgICBPTVhfQVVESU9fQ0RNQVJhdGVWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLworICAgIE9NWF9BVURJT19DRE1BUmF0ZU1heCA9IDB4N0ZGRkZGRkYKK30gT01YX0FVRElPX0NETUFSQVRFVFlQRTsKKworCisvKiogUUNFTFA4IChUSUEvRUlBLTk2LCB1cCB0byA4a2JwcyBjb2Rlcikgc3RyZWFtIGZvcm1hdCBwYXJhbWV0ZXJzICovCit0eXBlZGVmIHN0cnVjdCBPTVhfQVVESU9fUEFSQU1fUUNFTFA4VFlQRSB7CisgICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAgICAvKio8IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24gKi8KKyAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7ICAgICAgICAgICAvKio8IHBvcnQgdGhhdCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzIHRvICovCisgICAgT01YX1UzMiBuQ2hhbm5lbHM7ICAgICAgICAgICAgLyoqPCBOdW1iZXIgb2YgY2hhbm5lbHMgaW4gdGhlIGRhdGEgc3RyZWFtIChub3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lY2Vzc2FyaWx5IHRoZSBzYW1lIGFzIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGJlIHJlbmRlcmVkLiAqLworICAgIE9NWF9VMzIgbkJpdFJhdGU7ICAgICAgICAgICAgIC8qKjwgQml0IHJhdGUgb2YgdGhlIGlucHV0IGRhdGEuICBVc2UgMCBmb3IgdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhdGUgb3IgdW5rbm93biBiaXQgcmF0ZXMgKi8KKyAgICBPTVhfQVVESU9fQ0RNQVJBVEVUWVBFIGVDRE1BUmF0ZTsgLyoqPCBGcmFtZSByYXRlICovCisgICAgT01YX1UzMiBuTWluQml0UmF0ZTsgICAgICAgICAgLyoqPCBtaW5tYWwgcmF0ZSBmb3IgdGhlIGVuY29kZXIgPSAxLDIsMyw0LCBkZWZhdWx0ID0gMSAqLworICAgIE9NWF9VMzIgbk1heEJpdFJhdGU7ICAgICAgICAgIC8qKjwgbWF4aW1hbCByYXRlIGZvciB0aGUgZW5jb2RlciA9IDEsMiwzLDQsIGRlZmF1bHQgPSA0ICovCit9IE9NWF9BVURJT19QQVJBTV9RQ0VMUDhUWVBFOworCisKKy8qKiBRQ0VMUDEzICggQ0RNQSwgRUlBL1RJQS03MzMsIDEzLjNrYnBzIGNvZGVyKSBzdHJlYW0gZm9ybWF0IHBhcmFtZXRlcnMgKi8KK3R5cGVkZWYgc3RydWN0IE9NWF9BVURJT19QQVJBTV9RQ0VMUDEzVFlQRSB7CisgICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAgICAvKio8IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24gKi8KKyAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7ICAgICAgICAgICAvKio8IHBvcnQgdGhhdCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzIHRvICovCisgICAgT01YX1UzMiBuQ2hhbm5lbHM7ICAgICAgICAgICAgLyoqPCBOdW1iZXIgb2YgY2hhbm5lbHMgaW4gdGhlIGRhdGEgc3RyZWFtIChub3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lY2Vzc2FyaWx5IHRoZSBzYW1lIGFzIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGJlIHJlbmRlcmVkLiAqLworICAgIE9NWF9BVURJT19DRE1BUkFURVRZUEUgZUNETUFSYXRlOyAvKio8IEZyYW1lIHJhdGUgKi8KKyAgICBPTVhfVTMyIG5NaW5CaXRSYXRlOyAgICAgICAgICAvKio8IG1pbm1hbCByYXRlIGZvciB0aGUgZW5jb2RlciA9IDEsMiwzLDQsIGRlZmF1bHQgPSAxICovCisgICAgT01YX1UzMiBuTWF4Qml0UmF0ZTsgICAgICAgICAgLyoqPCBtYXhpbWFsIHJhdGUgZm9yIHRoZSBlbmNvZGVyID0gMSwyLDMsNCwgZGVmYXVsdCA9IDQgKi8KK30gT01YX0FVRElPX1BBUkFNX1FDRUxQMTNUWVBFOworCisKKy8qKiBFVlJDICggQ0RNQSwgRUlBL1RJQS0xMjcsIFJDRUxQIHVwIHRvIDguNTVrYnBzIGNvZGVyKSBzdHJlYW0gZm9ybWF0IHBhcmFtZXRlcnMgKi8KK3R5cGVkZWYgc3RydWN0IE9NWF9BVURJT19QQVJBTV9FVlJDVFlQRSB7CisgICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAgICAvKio8IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24gKi8KKyAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7ICAgICAgICAgICAvKio8IHBvcnQgdGhhdCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzIHRvICovCisgICAgT01YX1UzMiBuQ2hhbm5lbHM7ICAgICAgICAgICAgLyoqPCBOdW1iZXIgb2YgY2hhbm5lbHMgaW4gdGhlIGRhdGEgc3RyZWFtIChub3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lY2Vzc2FyaWx5IHRoZSBzYW1lIGFzIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGJlIHJlbmRlcmVkLiAqLworICAgIE9NWF9BVURJT19DRE1BUkFURVRZUEUgZUNETUFSYXRlOyAvKio8IGFjdHVhbCBGcmFtZSByYXRlICovCisgICAgT01YX0JPT0wgYlJBVEVfUkVEVUNvbjsgICAgICAgLyoqPCBSQVRFX1JFRFVDdGlvbiBpcyByZXF1ZXN0ZWQgZm9yIHRoaXMgZnJhbWUgKi8KKyAgICBPTVhfVTMyIG5NaW5CaXRSYXRlOyAgICAgICAgICAvKio8IG1pbm1hbCByYXRlIGZvciB0aGUgZW5jb2RlciA9IDEsMiwzLDQsIGRlZmF1bHQgPSAxICovCisgICAgT01YX1UzMiBuTWF4Qml0UmF0ZTsgICAgICAgICAgLyoqPCBtYXhpbWFsIHJhdGUgZm9yIHRoZSBlbmNvZGVyID0gMSwyLDMsNCwgZGVmYXVsdCA9IDQgKi8KKyAgICBPTVhfQk9PTCBiSGlQYXNzRmlsdGVyOyAgICAgICAvKio8IEVuYWJsZSBlbmNvZGVyJ3MgSGlnaCBQYXNzIEZpbHRlciAqLworICAgIE9NWF9CT09MIGJOb2lzZVN1cHByZXNzb3I7ICAgIC8qKjwgRW5hYmxlIGVuY29kZXIncyBub2lzZSBzdXBwcmVzc29yIHByZS1wcm9jZXNzaW5nICovCisgICAgT01YX0JPT0wgYlBvc3RGaWx0ZXI7ICAgICAgICAgLyoqPCBFbmFibGUgZGVjb2RlcidzIHBvc3QgRmlsdGVyICovCit9IE9NWF9BVURJT19QQVJBTV9FVlJDVFlQRTsKKworCisvKiogU01WICggdXAgdG8gOC41NWticHMgY29kZXIpIHN0cmVhbSBmb3JtYXQgcGFyYW1ldGVycyAqLwordHlwZWRlZiBzdHJ1Y3QgT01YX0FVRElPX1BBUkFNX1NNVlRZUEUgeworICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgICAgIC8qKjwgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovCisgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAgICAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCisgICAgT01YX1UzMiBuUG9ydEluZGV4OyAgICAgICAgICAgLyoqPCBwb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0byAqLworICAgIE9NWF9VMzIgbkNoYW5uZWxzOyAgICAgICAgICAgIC8qKjwgTnVtYmVyIG9mIGNoYW5uZWxzIGluIHRoZSBkYXRhIHN0cmVhbSAobm90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWNlc3NhcmlseSB0aGUgc2FtZSBhcyB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBiZSByZW5kZXJlZC4gKi8KKyAgICBPTVhfQVVESU9fQ0RNQVJBVEVUWVBFIGVDRE1BUmF0ZTsgLyoqPCBGcmFtZSByYXRlICovCisgICAgT01YX0JPT0wgYlJBVEVfUkVEVUNvbjsgICAgICAgICAgIC8qKjwgUkFURV9SRURVQ3Rpb24gaXMgcmVxdWVzdGVkIGZvciB0aGlzIGZyYW1lICovCisgICAgT01YX1UzMiBuTWluQml0UmF0ZTsgICAgICAgICAgLyoqPCBtaW5tYWwgcmF0ZSBmb3IgdGhlIGVuY29kZXIgPSAxLDIsMyw0LCBkZWZhdWx0ID0gMSA/PyovCisgICAgT01YX1UzMiBuTWF4Qml0UmF0ZTsgICAgICAgICAgLyoqPCBtYXhpbWFsIHJhdGUgZm9yIHRoZSBlbmNvZGVyID0gMSwyLDMsNCwgZGVmYXVsdCA9IDQgPz8qLworICAgIE9NWF9CT09MIGJIaVBhc3NGaWx0ZXI7ICAgICAgIC8qKjwgRW5hYmxlIGVuY29kZXIncyBIaWdoIFBhc3MgRmlsdGVyID8/Ki8KKyAgICBPTVhfQk9PTCBiTm9pc2VTdXBwcmVzc29yOyAgICAvKio8IEVuYWJsZSBlbmNvZGVyJ3Mgbm9pc2Ugc3VwcHJlc3NvciBwcmUtcHJvY2Vzc2luZyAqLworICAgIE9NWF9CT09MIGJQb3N0RmlsdGVyOyAgICAgICAgIC8qKjwgRW5hYmxlIGRlY29kZXIncyBwb3N0IEZpbHRlciA/PyovCit9IE9NWF9BVURJT19QQVJBTV9TTVZUWVBFOworCisKKy8qKiBNSURJIEZvcm1hdCAKKyAqIEBpbmdyb3VwIG1pZGkKKyAqLwordHlwZWRlZiBlbnVtIE9NWF9BVURJT19NSURJRk9STUFUVFlQRQoreworICAgIE9NWF9BVURJT19NSURJRm9ybWF0VW5rbm93biA9IDAsIC8qKjwgTUlESSBGb3JtYXQgdW5rbm93biBvciBkb24ndCBjYXJlICovCisgICAgT01YX0FVRElPX01JRElGb3JtYXRTTUYwLCAgICAgICAgLyoqPCBTdGFuZGFyZCBNSURJIEZpbGUgVHlwZSAwICovCisgICAgT01YX0FVRElPX01JRElGb3JtYXRTTUYxLCAgICAgICAgLyoqPCBTdGFuZGFyZCBNSURJIEZpbGUgVHlwZSAxICovCisgICAgT01YX0FVRElPX01JRElGb3JtYXRTTUYyLCAgICAgICAgLyoqPCBTdGFuZGFyZCBNSURJIEZpbGUgVHlwZSAyICovCisgICAgT01YX0FVRElPX01JRElGb3JtYXRTUE1JREksICAgICAgLyoqPCBTUC1NSURJICovCisgICAgT01YX0FVRElPX01JRElGb3JtYXRYTUYwLCAgICAgICAgLyoqPCBlWHRlbnNpYmxlIE11c2ljIEZvcm1hdCB0eXBlIDAgKi8KKyAgICBPTVhfQVVESU9fTUlESUZvcm1hdFhNRjEsICAgICAgICAvKio8IGVYdGVuc2libGUgTXVzaWMgRm9ybWF0IHR5cGUgMSAqLworICAgIE9NWF9BVURJT19NSURJRm9ybWF0TW9iaWxlWE1GLCAgIC8qKjwgTW9iaWxlIFhNRiAoZVh0ZW5zaWJsZSBNdXNpYyBGb3JtYXQgdHlwZSAyKSAqLworICAgIE9NWF9BVURJT19NSURJRm9ybWF0S2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIE9NWF9BVURJT19NSURJRm9ybWF0VmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KKyAgICBPTVhfQVVESU9fTUlESUZvcm1hdE1heCA9IDB4N0ZGRkZGRkYKK30gT01YX0FVRElPX01JRElGT1JNQVRUWVBFOworCisKKy8qKiBNSURJIHBhcmFtcyAKKyAqIEBpbmdyb3VwIG1pZGkKKyAqLwordHlwZWRlZiBzdHJ1Y3QgT01YX0FVRElPX1BBUkFNX01JRElUWVBFIHsKKyAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAgICAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCisgICAgT01YX1UzMiBuUG9ydEluZGV4OyAgICAgICAgICAgIC8qKjwgcG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8gKi8KKyAgICBPTVhfVTMyIG5GaWxlU2l6ZTsgICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBNSURJIGZpbGUgaW4gYnl0ZXMsIHdoZXJlIHRoZSBlbnRpcmUgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUlESSBmaWxlIHBhc3NlZCBpbiwgb3RoZXJ3aXNlIGlmIDB4MCwgdGhlIE1JREkgZGF0YSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBtZXJnZWQgYW5kIHN0cmVhbWVkIChpbnN0ZWFkIG9mIHBhc3NlZCBhcyBhbiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRpcmUgTUlESSBmaWxlKSAqLworICAgIE9NWF9CVTMyIHNNYXhQb2x5cGhvbnk7ICAgICAgICAvKio8IFNwZWNpZmllcyB0aGUgbWF4aW11bSBzaW11bHRhbmVvdXMgcG9seXBob25pYyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2ljZXMuIEEgdmFsdWUgb2YgemVybyBpbmRpY2F0ZXMgdGhhdCB0aGUgZGVmYXVsdCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2x5cGhvbnkgb2YgdGhlIGRldmljZSBpcyB1c2VkICAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIE9NWF9CT09MIGJMb2FkRGVmYXVsdFNvdW5kOyAgICAvKio8IFdoZXRoZXIgdG8gbG9hZCBkZWZhdWx0IHNvdW5kIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhbmsgYXQgaW5pdGlhbGl6YXRpb24gKi8KKyAgICBPTVhfQVVESU9fTUlESUZPUk1BVFRZUEUgZU1pZGlGb3JtYXQ7IC8qKjwgVmVyc2lvbiBvZiB0aGUgTUlESSBmaWxlICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCit9IE9NWF9BVURJT19QQVJBTV9NSURJVFlQRTsKKworCisvKiogVHlwZSBvZiB0aGUgTUlESSBzb3VuZCBiYW5rIAorICogQGluZ3JvdXAgbWlkaQorICovCit0eXBlZGVmIGVudW0gT01YX0FVRElPX01JRElTT1VOREJBTktUWVBFIHsKKyAgICBPTVhfQVVESU9fTUlESVNvdW5kQmFua1VudXNlZCA9IDAsICAgICAgICAgICAvKio8IHVudXNlZC91bmtub3duIHNvdW5kYmFuayB0eXBlICovCisgICAgT01YX0FVRElPX01JRElTb3VuZEJhbmtETFMxLCAgICAgICAgICAgICAgICAgLyoqPCBETFMgdmVyc2lvbiAxICovCisgICAgT01YX0FVRElPX01JRElTb3VuZEJhbmtETFMyLCAgICAgICAgICAgICAgICAgLyoqPCBETFMgdmVyc2lvbiAyICovCisgICAgT01YX0FVRElPX01JRElTb3VuZEJhbmtNb2JpbGVETFNCYXNlLCAgICAgICAgLyoqPCBNb2JpbGUgRExTLCB1c2luZyB0aGUgYmFzZSBmdW5jdGlvbmFsaXR5ICovCisgICAgT01YX0FVRElPX01JRElTb3VuZEJhbmtNb2JpbGVETFNQbHVzT3B0aW9ucywgLyoqPCBNb2JpbGUgRExTLCB1c2luZyB0aGUgc3BlY2lmaWNhdGlvbi1kZWZpbmVkIG9wdGlvbmFsIGZlYXR1cmUgc2V0ICovCisgICAgT01YX0FVRElPX01JRElTb3VuZEJhbmtLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICAgT01YX0FVRElPX01JRElTb3VuZEJhbmtWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLworICAgIE9NWF9BVURJT19NSURJU291bmRCYW5rTWF4ID0gMHg3RkZGRkZGRgorfSBPTVhfQVVESU9fTUlESVNPVU5EQkFOS1RZUEU7CisKKworLyoqIEJhbmsgTGF5b3V0IGRlc2NyaWJlcyBob3cgYmFuayBNU0IgJiBMU0IgYXJlIHVzZWQgaW4gdGhlIERMUyBpbnN0cnVtZW50IGRlZmluaXRpb25zIHNvdW5kIGJhbmsgCisgKiBAaW5ncm91cCBtaWRpCisgKi8KK3R5cGVkZWYgZW51bSBPTVhfQVVESU9fTUlESVNPVU5EQkFOS0xBWU9VVFRZUEUgeworICAgT01YX0FVRElPX01JRElTb3VuZEJhbmtMYXlvdXRVbnVzZWQgPSAwLCAgIC8qKjwgdW51c2VkL3Vua25vd24gc291bmRiYW5rIHR5cGUgKi8KKyAgIE9NWF9BVURJT19NSURJU291bmRCYW5rTGF5b3V0R00sICAgICAgICAgICAvKio8IEdTIGxheW91dCAoYmFzZWQgb24gYmFuayBNU0IgMHgwMCkgKi8KKyAgIE9NWF9BVURJT19NSURJU291bmRCYW5rTGF5b3V0R00yLCAgICAgICAgICAvKio8IEdlbmVyYWwgTUlESSAyIGxheW91dCAodXNpbmcgTVNCIDB4NzgvMHg3OSwgTFNCIDB4MDApICovCisgICBPTVhfQVVESU9fTUlESVNvdW5kQmFua0xheW91dFVzZXIsICAgICAgICAgLyoqPCBEb2VzIG5vdCBjb25mb3JtIHRvIGFueSBiYW5rIG51bWJlcmluZyBzdGFuZGFyZHMgKi8KKyAgIE9NWF9BVURJT19NSURJU291bmRCYW5rTGF5b3V0S2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgT01YX0FVRElPX01JRElTb3VuZEJhbmtMYXlvdXRWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLworICAgT01YX0FVRElPX01JRElTb3VuZEJhbmtMYXlvdXRNYXggPSAweDdGRkZGRkZGCit9IE9NWF9BVURJT19NSURJU09VTkRCQU5LTEFZT1VUVFlQRTsKKworCisvKiogTUlESSBwYXJhbXMgdG8gbG9hZC91bmxvYWQgdXNlciBzb3VuZGJhbmsgCisgKiBAaW5ncm91cCBtaWRpCisgKi8KK3R5cGVkZWYgc3RydWN0IE9NWF9BVURJT19QQVJBTV9NSURJTE9BRFVTRVJTT1VORFRZUEUgeworICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247IC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLworICAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAgLyoqPCBwb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0byAqLworICAgIE9NWF9VMzIgbkRMU0luZGV4OyAgICAgICAgLyoqPCBETFMgZmlsZSBpbmRleCB0byBiZSBsb2FkZWQgKi8KKyAgICBPTVhfVTMyIG5ETFNTaXplOyAgICAgICAgIC8qKjwgU2l6ZSBpbiBieXRlcyAqLworICAgIE9NWF9QVFIgcERMU0RhdGE7ICAgICAgICAgLyoqPCBQb2ludGVyIHRvIERMUyBmaWxlIGRhdGEgKi8KKyAgICBPTVhfQVVESU9fTUlESVNPVU5EQkFOS1RZUEUgZU1pZGlTb3VuZEJhbms7ICAgLyoqPCBNaWRpIHNvdW5kIGJhbmsgdHlwZSBlbnVtZXJhdGlvbiAqLworICAgIE9NWF9BVURJT19NSURJU09VTkRCQU5LTEFZT1VUVFlQRSBlTWlkaVNvdW5kQmFua0xheW91dDsgLyoqPCBNaWRpIHNvdW5kIGJhbmsgbGF5b3V0IGVudW1lcmF0aW9uICovCit9IE9NWF9BVURJT19QQVJBTV9NSURJTE9BRFVTRVJTT1VORFRZUEU7CisKKworLyoqIFN0cnVjdHVyZSBmb3IgTGl2ZSBNSURJIGV2ZW50cyBhbmQgTUlQIG1lc3NhZ2VzLiAKKyAqIChNSVAgPSBNYXhpbXVtIEluc3RhbnRhbmVvdXMgUG9seXBob255OyBwYXJ0IG9mIHRoZSBTUC1NSURJIHN0YW5kYXJkLikgCisgKiBAaW5ncm91cCBtaWRpCisgKi8KK3R5cGVkZWYgc3RydWN0IE9NWF9BVURJT19DT05GSUdfTUlESUlNTUVESUFURUVWRU5UVFlQRSB7CisgICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAvKio8IHNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcyAqLworICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCisgICAgT01YX1UzMiBuUG9ydEluZGV4OyAgICAgICAvKio8IFBvcnQgdGhhdCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzIHRvICovCisgICAgT01YX1UzMiBuTWlkaUV2ZW50U2l6ZTsgICAvKio8IFNpemUgb2YgaW1tZWRpYXRlIE1JREkgZXZlbnRzIG9yIE1JUCBtZXNzYWdlIGluIGJ5dGVzICAqLworICAgIE9NWF9VOCBuTWlkaUV2ZW50c1sxXTsgICAgLyoqPCBNSURJIGV2ZW50IGFycmF5IHRvIGJlIHJlbmRlcmVkIGltbWVkaWF0ZWx5LCBvciBhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSBmb3IgdGhlIE1JUCBtZXNzYWdlIGJ1ZmZlciwgd2hlcmUgdGhlIHNpemUgaXMgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGljYXRlZCBieSBuTWlkaUV2ZW50U2l6ZSAqLworfSBPTVhfQVVESU9fQ09ORklHX01JRElJTU1FRElBVEVFVkVOVFRZUEU7CisKKworLyoqIE1JREkgc291bmQgYmFuay8gcHJvZ3JhbSBwYWlyIGluIGEgZ2l2ZW4gY2hhbm5lbCAKKyAqIEBpbmdyb3VwIG1pZGkKKyAqLwordHlwZWRlZiBzdHJ1Y3QgT01YX0FVRElPX0NPTkZJR19NSURJU09VTkRCQU5LUFJPR1JBTVRZUEUgeworICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgICAvKio8IHNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcyAqLworICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgICAvKio8IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24gKi8KKyAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7ICAgICAgICAgLyoqPCBQb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0byAqLworICAgIE9NWF9VMzIgbkNoYW5uZWw7ICAgICAgICAgICAvKio8IFZhbGlkIGNoYW5uZWwgdmFsdWVzIHJhbmdlIGZyb20gMSB0byAxNiAqLworICAgIE9NWF9VMTYgbklEUHJvZ3JhbTsgICAgICAgICAvKio8IFZhbGlkIHByb2dyYW0gSUQgcmFuZ2UgaXMgMSB0byAxMjggKi8KKyAgICBPTVhfVTE2IG5JRFNvdW5kQmFuazsgICAgICAgLyoqPCBTb3VuZCBiYW5rIElEICovCisgICAgT01YX1UzMiBuVXNlclNvdW5kQmFua0luZGV4Oy8qKjwgVXNlciBzb3VuZGJhbmsgaW5kZXgsIGVhc2llciB0byBhY2Nlc3Mgc291bmRiYW5rcyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieSBpbmRleCBpZiBtdWx0aXBsZSBiYW5rcyBhcmUgcHJlc2VudCAqLworfSBPTVhfQVVESU9fQ09ORklHX01JRElTT1VOREJBTktQUk9HUkFNVFlQRTsKKworCisvKiogTUlESSBjb250cm9sIAorICogQGluZ3JvdXAgbWlkaQorICovCit0eXBlZGVmIHN0cnVjdCBPTVhfQVVESU9fQ09ORklHX01JRElDT05UUk9MVFlQRSB7CisgICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAgICAvKio8IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24gKi8KKyAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7ICAgICAgICAgICAvKio8IHBvcnQgdGhhdCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzIHRvICovCisgICAgT01YX0JTMzIgc1BpdGNoVHJhbnNwb3NpdGlvbjsgLyoqPCBQaXRjaCB0cmFuc3Bvc2l0aW9uIGluIHNlbWl0b25lcywgc3RvcmVkIGFzIFEyMi4xMCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCBiYXNlZCBvbiBKQVZBIE1NQVBJIChKU1ItMTM1KSByZXF1aXJlbWVudCAqLworICAgIE9NWF9CVTMyIHNQbGF5QmFja1JhdGU7ICAgICAgIC8qKjwgUmVsYXRpdmUgcGxheWJhY2sgcmF0ZSwgc3RvcmVkIGFzIFExNC4xNyBmaXhlZC1wb2ludAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIGJhc2VkIG9uIEpTUi0xMzUgcmVxdWlyZW1lbnQgKi8KKyAgICBPTVhfQlUzMiBzVGVtcG8gOyAgICAgICAgICAgICAvKio8IFRlbXBvIGluIGJlYXRzIHBlciBtaW51dGUgKEJQTSksIHN0b3JlZCBhcyBRMjIuMTAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXhlZC1wb2ludCBudW1iZXIgYmFzZWQgb24gSlNSLTEzNSByZXF1aXJlbWVudCAqLworICAgIE9NWF9VMzIgbk1heFBvbHlwaG9ueTsgICAgICAgIC8qKjwgU3BlY2lmaWVzIHRoZSBtYXhpbXVtIHNpbXVsdGFuZW91cyBwb2x5cGhvbmljIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pY2VzLiBBIHZhbHVlIG9mIHplcm8gaW5kaWNhdGVzIHRoYXQgdGhlIGRlZmF1bHQgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2x5cGhvbnkgb2YgdGhlIGRldmljZSBpcyB1c2VkICAqLworICAgIE9NWF9VMzIgbk51bVJlcGVhdDsgICAgICAgICAgIC8qKjwgTnVtYmVyIG9mIHRpbWVzIHRvIHJlcGVhdCBwbGF5YmFjayAqLworICAgIE9NWF9VMzIgblN0b3BUaW1lOyAgICAgICAgICAgIC8qKjwgVGltZSBpbiBtaWxsaXNlY29uZHMgdG8gaW5kaWNhdGUgd2hlbiBwbGF5YmFjayAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgc3RvcCBhdXRvbWF0aWNhbGx5LiAgU2V0IHRvIHplcm8gaWYgbm90IHVzZWQgKi8KKyAgICBPTVhfVTE2IG5DaGFubmVsTXV0ZU1hc2s7ICAgICAvKio8IDE2IGJpdCBtYXNrIGZvciBjaGFubmVsIG11dGUgc3RhdHVzICovCisgICAgT01YX1UxNiBuQ2hhbm5lbFNvbG9NYXNrOyAgICAgLyoqPCAxNiBiaXQgbWFzayBmb3IgY2hhbm5lbCBzb2xvIHN0YXR1cyAqLworICAgIE9NWF9VMzIgblRyYWNrMDAzMU11dGVNYXNrOyAgIC8qKjwgMzIgYml0IG1hc2sgZm9yIHRyYWNrIG11dGUgc3RhdHVzLiBOb3RlOiBUaGlzIGlzIGZvciB0cmFja3MgMC0zMSAqLworICAgIE9NWF9VMzIgblRyYWNrMzI2M011dGVNYXNrOyAgIC8qKjwgMzIgYml0IG1hc2sgZm9yIHRyYWNrIG11dGUgc3RhdHVzLiBOb3RlOiBUaGlzIGlzIGZvciB0cmFja3MgMzItNjMgKi8KKyAgICBPTVhfVTMyIG5UcmFjazAwMzFTb2xvTWFzazsgICAvKio8IDMyIGJpdCBtYXNrIGZvciB0cmFjayBzb2xvIHN0YXR1cy4gTm90ZTogVGhpcyBpcyBmb3IgdHJhY2tzIDAtMzEgKi8KKyAgICBPTVhfVTMyIG5UcmFjazMyNjNTb2xvTWFzazsgICAvKio8IDMyIGJpdCBtYXNrIGZvciB0cmFjayBzb2xvIHN0YXR1cy4gTm90ZTogVGhpcyBpcyBmb3IgdHJhY2tzIDMyLTYzICovCisKK30gT01YX0FVRElPX0NPTkZJR19NSURJQ09OVFJPTFRZUEU7CisKKworLyoqIE1JREkgUGxheWJhY2sgU3RhdGVzIAorICogQGluZ3JvdXAgbWlkaQorICovCit0eXBlZGVmIGVudW0gT01YX0FVRElPX01JRElQTEFZQkFDS1NUQVRFVFlQRSB7CisgIE9NWF9BVURJT19NSURJUGxheUJhY2tTdGF0ZVVua25vd24gPSAwLCAgICAgIC8qKjwgVW5rbm93biBzdGF0ZSBvciBzdGF0ZSBkb2VzIG5vdCBtYXAgdG8gCisgIAkJCQkJCQkJCQkJCQlvdGhlciBkZWZpbmVkIHN0YXRlcyAqLworICBPTVhfQVVESU9fTUlESVBsYXlCYWNrU3RhdGVDbG9zZWRFbmdhZ2VkLCAgICAvKio8IE5vIE1JREkgcmVzb3VyY2UgaXMgY3VycmVudGx5IG9wZW4uIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBNSURJIGVuZ2luZSBpcyBjdXJyZW50bHkgcHJvY2Vzc2luZyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNSURJIGV2ZW50cy4gKi8KKyAgT01YX0FVRElPX01JRElQbGF5QmFja1N0YXRlUGFyc2luZywgICAgICAgICAgLyoqPCBBIE1JREkgcmVzb3VyY2UgaXMgb3BlbiBhbmQgaXMgYmVpbmcgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbWVkLiBUaGUgTUlESSBlbmdpbmUgaXMgY3VycmVudGx5IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NpbmcgTUlESSBldmVudHMuICovCisgIE9NWF9BVURJT19NSURJUGxheUJhY2tTdGF0ZU9wZW5FbmdhZ2VkLCAgICAgIC8qKjwgQSBNSURJIHJlc291cmNlIGlzIG9wZW4gYW5kIHByaW1lZCBidXQgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IHBsYXlpbmcuIFRoZSBNSURJIGVuZ2luZSBpcyBjdXJyZW50bHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzaW5nIE1JREkgZXZlbnRzLiBUaGUgdHJhbnNpdGlvbiB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgc3RhdGUgaXMgb25seSBwb3NzaWJsZSBmcm9tIHRoZSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPTVhfQVVESU9fTUlESVBsYXlCYWNrU3RhdGVQbGF5aW5nIHN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gdGhlICdwbGF5YmFjayBoZWFkJyByZWFjaGVzIHRoZSBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBtZWRpYSBkYXRhIG9yIHRoZSBwbGF5YmFjayBzdG9wcyBkdWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBzdG9wIHRpbWUgc2V0LiovCisgIE9NWF9BVURJT19NSURJUGxheUJhY2tTdGF0ZVBsYXlpbmcsICAgICAgICAgIC8qKjwgQSBNSURJIHJlc291cmNlIGlzIG9wZW4gYW5kIGN1cnJlbnRseQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXlpbmcuIFRoZSBNSURJIGVuZ2luZSBpcyBjdXJyZW50bHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzaW5nIE1JREkgZXZlbnRzLiovCisgIE9NWF9BVURJT19NSURJUGxheUJhY2tTdGF0ZVBsYXlpbmdQYXJ0aWFsbHksIC8qKjwgQmVzdC1lZmZvcnQgcGxheWJhY2sgZHVlIHRvIFNQLU1JREkvRExTCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UgY29uc3RyYWludHMgKi8KKyAgT01YX0FVRElPX01JRElQbGF5QmFja1N0YXRlUGxheWluZ1NpbGVudGx5LCAgLyoqPCBEdWUgdG8gc3lzdGVtIHJlc291cmNlIGNvbnN0cmFpbnRzIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQLU1JREkgY29udGVudCBjb25zdHJhaW50cywgdGhlcmUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBubyBhdWRpYmxlIE1JREkgY29udGVudCBkdXJpbmcgcGxheWJhY2sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50bHkuIFRoZSBzaXR1YXRpb24gbWF5IGNoYW5nZSBpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlcyBhcmUgZnJlZWQgbGF0ZXIuKi8KKyAgT01YX0FVRElPX01JRElQbGF5QmFja1N0YXRlS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICBPTVhfQVVESU9fTUlESVBsYXlCYWNrU3RhdGVWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLworICBPTVhfQVVESU9fTUlESVBsYXlCYWNrU3RhdGVNYXggPSAweDdGRkZGRkZGCit9IE9NWF9BVURJT19NSURJUExBWUJBQ0tTVEFURVRZUEU7CisKKworLyoqIE1JREkgc3RhdHVzIAorICogQGluZ3JvdXAgbWlkaQorICovCit0eXBlZGVmIHN0cnVjdCBPTVhfQVVESU9fQ09ORklHX01JRElTVEFUVVNUWVBFIHsKKyAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCisgICAgT01YX1UzMiBuUG9ydEluZGV4OyAgICAgICAgIC8qKjwgcG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8gKi8KKyAgICBPTVhfVTE2IG5OdW1UcmFja3M7ICAgICAgICAgLyoqPCBOdW1iZXIgb2YgTUlESSB0cmFja3MgaW4gdGhlIGZpbGUsIHJlYWQgb25seSBmaWVsZC4gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTk9URTogTWF5IG5vdCByZXR1cm4gYSBtZWFuaW5nZnVsIHZhbHVlIHVudGlsIHRoZSBlbnRpcmUgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSBpcyBwYXJzZWQgYW5kIGJ1ZmZlcmVkLiAgKi8KKyAgICBPTVhfVTMyIG5EdXJhdGlvbjsgICAgICAgICAgLyoqPCBUaGUgbGVuZ3RoIG9mIHRoZSBjdXJyZW50bHkgb3BlbiBNSURJIHJlc291cmNlIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIG1pbGxpc2Vjb25kcy4gTk9URTogTWF5IG5vdCByZXR1cm4gYSBtZWFuaW5nZnVsIHZhbHVlIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVudGlsIHRoZSBlbnRpcmUgZmlsZSBpcyBwYXJzZWQgYW5kIGJ1ZmZlcmVkLiAgKi8gIAorICAgIE9NWF9VMzIgblBvc2l0aW9uOyAgICAgICAgICAvKio8IEN1cnJlbnQgUG9zaXRpb24gb2YgdGhlIE1JREkgcmVzb3VyY2UgYmVpbmcgcGxheWVkIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIG1pbGxpc2Vjb25kcyAqLworICAgIE9NWF9CT09MIGJWaWJyYTsgICAgICAgICAgICAvKio8IERvZXMgVmlicmEgdHJhY2sgZXhpc3Q/IE5PVEU6IE1heSBub3QgcmV0dXJuIGEgbWVhbmluZ2Z1bCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSB1bnRpbCB0aGUgZW50aXJlIGZpbGUgaXMgcGFyc2VkIGFuZCBidWZmZXJlZC4gKi8KKyAgICBPTVhfVTMyIG5OdW1NZXRhRXZlbnRzOyAgICAgLyoqPCBUb3RhbCBudW1iZXIgb2YgTUlESSBNZXRhIEV2ZW50cyBpbiB0aGUgY3VycmVudGx5IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZW4gTUlESSByZXNvdXJjZS4gTk9URTogTWF5IG5vdCByZXR1cm4gYSBtZWFuaW5nZnVsIHZhbHVlIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVudGlsIHRoZSBlbnRpcmUgZmlsZSBpcyBwYXJzZWQgYW5kIGJ1ZmZlcmVkLiAgKi8KKyAgICBPTVhfVTMyIG5OdW1BY3RpdmVWb2ljZXM7ICAgLyoqPCBOdW1iZXIgb2YgYWN0aXZlIHZvaWNlcyBpbiB0aGUgY3VycmVudGx5IHBsYXlpbmcgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUlESSByZXNvdXJjZS4gTk9URTogTWF5IG5vdCByZXR1cm4gYSBtZWFuaW5nZnVsIHZhbHVlIHVudGlsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBlbnRpcmUgZmlsZSBpcyBwYXJzZWQgYW5kIGJ1ZmZlcmVkLiAqLworICAgIE9NWF9BVURJT19NSURJUExBWUJBQ0tTVEFURVRZUEUgZU1JRElQbGF5QmFja1N0YXRlOyAgLyoqPCBNSURJIHBsYXliYWNrIHN0YXRlIGVudW1lcmF0aW9uLCByZWFkIG9ubHkgZmllbGQgKi8KK30gT01YX0FVRElPX0NPTkZJR19NSURJU1RBVFVTVFlQRTsKKworCisvKiogTUlESSBNZXRhIEV2ZW50IHN0cnVjdHVyZSBvbmUgcGVyIE1ldGEgRXZlbnQuCisgKiAgTUlESSBNZXRhIEV2ZW50cyBhcmUgbGlrZSBhdWRpbyBtZXRhZGF0YSwgZXhjZXB0IHRoYXQgdGhleSBhcmUgaW50ZXJzcGVyc2VkIAorICogIHdpdGggdGhlIE1JREkgY29udGVudCB0aHJvdWdob3V0IHRoZSBmaWxlIGFuZCBhcmUgbm90IGxvY2FsaXplZCBpbiB0aGUgaGVhZGVyLiAKKyAqICBBcyBzdWNoLCBpdCBpcyBuZWNlc3NhcnkgdG8gcmV0cmlldmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlc2UgTWV0YSBFdmVudHMgZnJvbSAKKyAqICB0aGUgZW5naW5lLCBhcyBpdCBlbmNvdW50ZXJzIHRoZXNlIE1ldGEgRXZlbnRzIHdpdGhpbiB0aGUgTUlESSBjb250ZW50LiAKKyAqICBGb3IgZXhhbXBsZSwgU01GIGZpbGVzIGNhbiBoYXZlIHVwIHRvIDE0IHR5cGVzIG9mIE1JREkgTWV0YSBFdmVudHMgKGNvcHlyaWdodCwgCisgKiAgYXV0aG9yLCBkZWZhdWx0IHRlbXBvLCBldGMuKSBzY2F0dGVyZWQgdGhyb3VnaG91dCB0aGUgZmlsZS4gCisgKiAgQGluZ3JvdXAgbWlkaQorICovCit0eXBlZGVmIHN0cnVjdCBPTVhfQVVESU9fQ09ORklHX01JRElNRVRBRVZFTlRUWVBFeyAKKyAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgIC8qKjwgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovIAorICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovIAorICAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAgLyoqPCBwb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0byAqLyAKKyAgICBPTVhfVTMyIG5JbmRleDsgICAgICAgICAgIC8qKjwgSW5kZXggb2YgTWV0YSBFdmVudCAqLyAKKyAgICBPTVhfVTggbk1ldGFFdmVudFR5cGU7ICAgIC8qKjwgTWV0YSBFdmVudCBUeXBlLCA3Yml0cyAoaS5lLiAwIC0gMTI3KSAqLyAKKyAgICBPTVhfVTMyIG5NZXRhRXZlbnRTaXplOyAgIC8qKjwgc2l6ZSBvZiB0aGUgTWV0YSBFdmVudCBpbiBieXRlcyAqLyAKKyAgICBPTVhfVTMyIG5UcmFjazsgICAgICAgICAgIC8qKjwgdHJhY2sgbnVtYmVyIGZvciB0aGUgbWV0YSBldmVudCAqLworICAgIE9NWF9VMzIgblBvc2l0aW9uOyAgICAgICAgLyoqPCBQb3NpdGlvbiBvZiB0aGUgbWV0YS1ldmVudCBpbiBtaWxsaXNlY29uZHMgKi8KK30gT01YX0FVRElPX0NPTkZJR19NSURJTUVUQUVWRU5UVFlQRTsgCisKKworLyoqIE1JREkgTWV0YSBFdmVudCBEYXRhIHN0cnVjdHVyZSAtIG9uZSBwZXIgTWV0YSBFdmVudC4gCisgKiBAaW5ncm91cCBtaWRpCisgKi8gCit0eXBlZGVmIHN0cnVjdCBPTVhfQVVESU9fQ09ORklHX01JRElNRVRBRVZFTlREQVRBVFlQRXsgCisgICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAvKio8IHNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcyAqLyAKKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247IC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLyAKKyAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7ICAgICAgIC8qKjwgcG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8gKi8gCisgICAgT01YX1UzMiBuSW5kZXg7ICAgICAgICAgICAvKio8IEluZGV4IG9mIE1ldGEgRXZlbnQgKi8gCisgICAgT01YX1UzMiBuTWV0YUV2ZW50U2l6ZTsgICAvKio8IHNpemUgb2YgdGhlIE1ldGEgRXZlbnQgaW4gYnl0ZXMgKi8gCisgICAgT01YX1U4IG5EYXRhWzFdOyAgICAgICAgICAvKio8IGFycmF5IG9mIG9uZSBvciBtb3JlIGJ5dGVzIG9mIG1ldGEgZGF0YSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgaW5kaWNhdGVkIGJ5IHRoZSBuTWV0YUV2ZW50U2l6ZSBmaWVsZCAqLyAKK30gT01YX0FVRElPX0NPTkZJR19fTUlESU1FVEFFVkVOVERBVEFUWVBFOyAKKworCisvKiogQXVkaW8gVm9sdW1lIGFkanVzdG1lbnQgZm9yIGEgcG9ydCAqLwordHlwZWRlZiBzdHJ1Y3QgT01YX0FVRElPX0NPTkZJR19WT0xVTUVUWVBFIHsKKyAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCisgICAgT01YX1UzMiBuUG9ydEluZGV4OyAgICAgICAgIC8qKjwgUG9ydCBpbmRleCBpbmRpY2F0aW5nIHdoaWNoIHBvcnQgdG8gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0LiAgU2VsZWN0IHRoZSBpbnB1dCBwb3J0IHRvIHNldCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdXN0IHRoYXQgcG9ydCdzIHZvbHVtZS4gIFNlbGVjdCB0aGUgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IHBvcnQgdG8gYWRqdXN0IHRoZSBtYXN0ZXIgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9sdW1lLiAqLworICAgIE9NWF9CT09MIGJMaW5lYXI7ICAgICAgICAgICAvKio8IElzIHRoZSB2b2x1bWUgdG8gYmUgc2V0IGluIGxpbmVhciAoMC4xMDApIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGxvZ2FyaXRobWljIHNjYWxlIChtQikgKi8KKyAgICBPTVhfQlMzMiBzVm9sdW1lOyAgICAgICAgICAgLyoqPCBWb2x1bWUgbGluZWFyIHNldHRpbmcgaW4gdGhlIDAuLjEwMCByYW5nZSwgT1IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWb2x1bWUgbG9nYXJpdGhtaWMgc2V0dGluZyBmb3IgdGhpcyBwb3J0LiAgVGhlIHZhbHVlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB2b2x1bWUgYXJlIGluIG1CIChtaWxsaWJlbHMgPSAxLzEwMCBkQikgcmVsYXRpdmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBhIGdhaW4gb2YgMSAoZS5nLiB0aGUgb3V0cHV0IGlzIHRoZSBzYW1lIGFzIHRoZSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCBsZXZlbCkuICBWYWx1ZXMgYXJlIGluIG1CIGZyb20gbk1heCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWF4aW11bSB2b2x1bWUpIHRvIG5NaW4gbUIgKHR5cGljYWxseSBuZWdhdGl2ZSkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2luY2UgdGhlIHZvbHVtZSBpcyAidm9sdGFnZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbm90IGEgInBvd2VyIiwgaXQgdGFrZXMgYSBzZXR0aW5nIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTYwMCBtQiB0byBkZWNyZWFzZSB0aGUgdm9sdW1lIGJ5IDEvMi4gIElmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBjb21wb25lbnQgY2Fubm90IGFjY3VyYXRlbHkgc2V0IHRoZSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2x1bWUgdG8gdGhlIHJlcXVlc3RlZCB2YWx1ZSwgaXQgbXVzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldCB0aGUgdm9sdW1lIHRvIHRoZSBjbG9zZXN0IHZhbHVlIEJFTE9XCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHJlcXVlc3RlZCB2YWx1ZS4gIFdoZW4gZ2V0dGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2x1bWUgc2V0dGluZywgdGhlIGN1cnJlbnQgYWN0dWFsIHZvbHVtZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11c3QgYmUgcmV0dXJuZWQuICovCit9IE9NWF9BVURJT19DT05GSUdfVk9MVU1FVFlQRTsKKworCisvKiogQXVkaW8gVm9sdW1lIGFkanVzdG1lbnQgZm9yIGEgY2hhbm5lbCAqLwordHlwZWRlZiBzdHJ1Y3QgT01YX0FVRElPX0NPTkZJR19DSEFOTkVMVk9MVU1FVFlQRSB7CisgICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAgIC8qKjwgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovCisgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAgIC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLworICAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAgICAvKio8IFBvcnQgaW5kZXggaW5kaWNhdGluZyB3aGljaCBwb3J0IHRvIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldC4gIFNlbGVjdCB0aGUgaW5wdXQgcG9ydCB0byBzZXQgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganVzdCB0aGF0IHBvcnQncyB2b2x1bWUuICBTZWxlY3QgdGhlIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCBwb3J0IHRvIGFkanVzdCB0aGUgbWFzdGVyIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvbHVtZS4gKi8KKyAgICBPTVhfVTMyIG5DaGFubmVsOyAgICAgICAgICAgLyoqPCBjaGFubmVsIHRvIHNlbGVjdCBmcm9tIDAgdG8gTi0xLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2luZyBPTVhfQUxMIHRvIGFwcGx5IHZvbHVtZSBzZXR0aW5ncworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGFsbCBjaGFubmVscyAqLworICAgIE9NWF9CT09MIGJMaW5lYXI7ICAgICAgICAgICAvKio8IElzIHRoZSB2b2x1bWUgdG8gYmUgc2V0IGluIGxpbmVhciAoMC4xMDApIG9yIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2FyaXRobWljIHNjYWxlIChtQikgKi8KKyAgICBPTVhfQlMzMiBzVm9sdW1lOyAgICAgICAgICAgLyoqPCBWb2x1bWUgbGluZWFyIHNldHRpbmcgaW4gdGhlIDAuLjEwMCByYW5nZSwgT1IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWb2x1bWUgbG9nYXJpdGhtaWMgc2V0dGluZyBmb3IgdGhpcyBwb3J0LiAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHZhbHVlcyBmb3Igdm9sdW1lIGFyZSBpbiBtQiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWlsbGliZWxzID0gMS8xMDAgZEIpIHJlbGF0aXZlIHRvIGEgZ2FpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIDEgKGUuZy4gdGhlIG91dHB1dCBpcyB0aGUgc2FtZSBhcyB0aGUgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQgbGV2ZWwpLiAgVmFsdWVzIGFyZSBpbiBtQiBmcm9tIG5NYXggCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1heGltdW0gdm9sdW1lKSB0byBuTWluIG1CICh0eXBpY2FsbHkgbmVnYXRpdmUpLiAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2luY2UgdGhlIHZvbHVtZSBpcyAidm9sdGFnZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbm90IGEgInBvd2VyIiwgaXQgdGFrZXMgYSBzZXR0aW5nIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTYwMCBtQiB0byBkZWNyZWFzZSB0aGUgdm9sdW1lIGJ5IDEvMi4gIElmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBjb21wb25lbnQgY2Fubm90IGFjY3VyYXRlbHkgc2V0IHRoZSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2x1bWUgdG8gdGhlIHJlcXVlc3RlZCB2YWx1ZSwgaXQgbXVzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldCB0aGUgdm9sdW1lIHRvIHRoZSBjbG9zZXN0IHZhbHVlIEJFTE9XCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHJlcXVlc3RlZCB2YWx1ZS4gIFdoZW4gZ2V0dGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2x1bWUgc2V0dGluZywgdGhlIGN1cnJlbnQgYWN0dWFsIHZvbHVtZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11c3QgYmUgcmV0dXJuZWQuICovCisgICAgT01YX0JPT0wgYklzTUlESTsgICAgICAgICAgIC8qKjwgVFJVRSBpZiBuQ2hhbm5lbCByZWZlcnMgdG8gYSBNSURJIGNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0Ugb3RoZXJ3aXNlICovCit9IE9NWF9BVURJT19DT05GSUdfQ0hBTk5FTFZPTFVNRVRZUEU7CisKKworLyoqIEF1ZGlvIGJhbGFuY2Ugc2V0dGluZyAqLwordHlwZWRlZiBzdHJ1Y3QgT01YX0FVRElPX0NPTkZJR19CQUxBTkNFVFlQRSB7CisgICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAgIC8qKjwgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovCisgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAgIC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLworICAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAgICAvKio8IFBvcnQgaW5kZXggaW5kaWNhdGluZyB3aGljaCBwb3J0IHRvIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldC4gIFNlbGVjdCB0aGUgaW5wdXQgcG9ydCB0byBzZXQgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganVzdCB0aGF0IHBvcnQncyBiYWxhbmNlLiAgU2VsZWN0IHRoZSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgcG9ydCB0byBhZGp1c3QgdGhlIG1hc3RlciAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWxhbmNlLiAqLworICAgIE9NWF9TMzIgbkJhbGFuY2U7ICAgICAgICAgICAvKio8IGJhbGFuY2Ugc2V0dGluZyBmb3IgdGhpcyBwb3J0IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtMTAwIHRvIDEwMCwgd2hlcmUgLTEwMCBpbmRpY2F0ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGwgbGVmdCwgYW5kIG5vIHJpZ2h0ICovCit9IE9NWF9BVURJT19DT05GSUdfQkFMQU5DRVRZUEU7CisKKworLyoqIEF1ZGlvIFBvcnQgbXV0ZSAqLwordHlwZWRlZiBzdHJ1Y3QgT01YX0FVRElPX0NPTkZJR19NVVRFVFlQRSB7CisgICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAgIC8qKjwgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovCisgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAgIC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLworICAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAgICAvKio8IFBvcnQgaW5kZXggaW5kaWNhdGluZyB3aGljaCBwb3J0IHRvIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldC4gIFNlbGVjdCB0aGUgaW5wdXQgcG9ydCB0byBzZXQgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganVzdCB0aGF0IHBvcnQncyBtdXRlLiAgU2VsZWN0IHRoZSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgcG9ydCB0byBhZGp1c3QgdGhlIG1hc3RlciAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXRlLiAqLworICAgIE9NWF9CT09MIGJNdXRlOyAgICAgICAgICAgICAvKio8IE11dGUgc2V0dGluZyBmb3IgdGhpcyBwb3J0ICovCit9IE9NWF9BVURJT19DT05GSUdfTVVURVRZUEU7CisKKworLyoqIEF1ZGlvIENoYW5uZWwgbXV0ZSAqLwordHlwZWRlZiBzdHJ1Y3QgT01YX0FVRElPX0NPTkZJR19DSEFOTkVMTVVURVRZUEUgeworICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgICAvKio8IHNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcyAqLworICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgICAvKio8IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24gKi8KKyAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7ICAgICAgICAgLyoqPCBwb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0byAqLworICAgIE9NWF9VMzIgbkNoYW5uZWw7ICAgICAgICAgICAvKio8IGNoYW5uZWwgdG8gc2VsZWN0IGZyb20gMCB0byBOLTEsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIE9NWF9BTEwgdG8gYXBwbHkgbXV0ZSBzZXR0aW5ncworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGFsbCBjaGFubmVscyAqLworICAgIE9NWF9CT09MIGJNdXRlOyAgICAgICAgICAgICAvKio8IE11dGUgc2V0dGluZyBmb3IgdGhpcyBjaGFubmVsICovCisgICAgT01YX0JPT0wgYklzTUlESTsgICAgICAgICAgIC8qKjwgVFJVRSBpZiBuQ2hhbm5lbCByZWZlcnMgdG8gYSBNSURJIGNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0Ugb3RoZXJ3aXNlICovIAorfSBPTVhfQVVESU9fQ09ORklHX0NIQU5ORUxNVVRFVFlQRTsKKworCisKKy8qKiBFbmFibGUgLyBEaXNhYmxlIGZvciBsb3VkbmVzcyBjb250cm9sLCB3aGljaCBib29zdHMgYmFzcyBhbmQgdG8gYSAKKyAqICBzbWFsbGVyIGV4dGVudCBoaWdoIGVuZCBmcmVxdWVuY2llcyB0byBjb21wZW5zYXRlIGZvciBoZWFyaW5nCisgKiAgYWJpbGl0eSBhdCB0aGUgZXh0cmVtZSBlbmRzIG9mIHRoZSBhdWRpbyBzcGVjdHJ1bQorICovIAordHlwZWRlZiBzdHJ1Y3QgT01YX0FVRElPX0NPTkZJR19MT1VETkVTU1RZUEUgeworICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgIC8qKjwgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovCisgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCisgICAgT01YX1UzMiBuUG9ydEluZGV4OyAgICAgICAgLyoqPCBwb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0byAqLworICAgIE9NWF9CT09MIGJMb3VkbmVzczsgICAgICAgIC8qKjwgRW5hYmxlL2Rpc2FibGUgZm9yIGxvdWRuZXNzICovCit9IE9NWF9BVURJT19DT05GSUdfTE9VRE5FU1NUWVBFOworCisKKy8qKiBFbmFibGUgLyBEaXNhYmxlIGZvciBiYXNzLCB3aGljaCBjb250cm9scyBsb3cgZnJlcXVlbmNpZXMKKyAqLyAKK3R5cGVkZWYgc3RydWN0IE9NWF9BVURJT19DT05GSUdfQkFTU1RZUEUgeworICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgIC8qKjwgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovCisgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCisgICAgT01YX1UzMiBuUG9ydEluZGV4OyAgICAgICAgLyoqPCBwb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0byAqLworICAgIE9NWF9CT09MIGJFbmFibGU7ICAgICAgICAgIC8qKjwgRW5hYmxlL2Rpc2FibGUgZm9yIGJhc3MgY29udHJvbCAqLworICAgIE9NWF9TMzIgbkJhc3M7ICAgICAgICAgICAgIC8qKjwgYmFzcyBzZXR0aW5nIGZvciB0aGUgcG9ydCwgYXMgYSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVvdXMgdmFsdWUgZnJvbSAtMTAwIHRvIDEwMCAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCBtZWFucyBubyBjaGFuZ2UgaW4gYmFzcyBsZXZlbCkqLworfSBPTVhfQVVESU9fQ09ORklHX0JBU1NUWVBFOworCisKKy8qKiBFbmFibGUgLyBEaXNhYmxlIGZvciB0cmVibGUsIHdoaWNoIGNvbnRyb2xzIGhpZ2ggZnJlcXVlbmNpZXMgdG9uZXMKKyAqLyAKK3R5cGVkZWYgc3RydWN0IE9NWF9BVURJT19DT05GSUdfVFJFQkxFVFlQRSB7CisgICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAvKio8IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24gKi8KKyAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7ICAgICAgICAvKio8IHBvcnQgdGhhdCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzIHRvICovCisgICAgT01YX0JPT0wgYkVuYWJsZTsgICAgICAgICAgLyoqPCBFbmFibGUvZGlzYWJsZSBmb3IgdHJlYmxlIGNvbnRyb2wgKi8KKyAgICBPTVhfUzMyICBuVHJlYmxlOyAgICAgICAgICAvKio8IHRyZWJsZSBzZXR0aW5nIGZvciB0aGUgcG9ydCwgYXMgYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludW91cyB2YWx1ZSBmcm9tIC0xMDAgdG8gMTAwICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwIG1lYW5zIG5vIGNoYW5nZSBpbiB0cmVibGUgbGV2ZWwpICovCit9IE9NWF9BVURJT19DT05GSUdfVFJFQkxFVFlQRTsKKworCisvKiogQW4gZXF1YWxpemVyIGlzIHR5cGljYWxseSB1c2VkIGZvciB0d28gcmVhc29uczogdG8gY29tcGVuc2F0ZSBmb3IgYW4gCisgKiAgc3ViLW9wdGltYWwgZnJlcXVlbmN5IHJlc3BvbnNlIG9mIGEgc3lzdGVtIHRvIG1ha2UgaXQgc291bmQgbW9yZSBuYXR1cmFsIAorICogIG9yIHRvIGNyZWF0ZSBpbnRlbnRpb25hbGx5IHNvbWUgdW5uYXR1cmFsIGNvbG9yaW5nIHRvIHRoZSBzb3VuZCB0byBjcmVhdGUKKyAqICBhbiBlZmZlY3QuCisgKiAgQGluZ3JvdXAgZWZmZWN0cworICovCit0eXBlZGVmIHN0cnVjdCBPTVhfQVVESU9fQ09ORklHX0VRVUFMSVpFUlRZUEUgeworICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgIC8qKjwgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovCisgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCisgICAgT01YX1UzMiBuUG9ydEluZGV4OyAgICAgICAgLyoqPCBwb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0byAqLworICAgIE9NWF9CT09MIGJFbmFibGU7ICAgICAgICAgIC8qKjwgRW5hYmxlL2Rpc2FibGUgZm9yIGVxdWFsaXplciAqLworICAgIE9NWF9CVTMyIHNCYW5kSW5kZXg7ICAgICAgIC8qKjwgQmFuZCBudW1iZXIgdG8gYmUgc2V0LiAgVXBwZXIgTGltaXQgaXMgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOLTEsIHdoZXJlIE4gaXMgdGhlIG51bWJlciBvZiBiYW5kcywgbG93ZXIgbGltaXQgaXMgMCAqLworICAgIE9NWF9CVTMyIHNDZW50ZXJGcmVxOyAgICAgIC8qKjwgQ2VudGVyIGZyZXF1ZWNpZXMgaW4gSHouICBUaGlzIGlzIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWQgb25seSBlbGVtZW50IGFuZCBpcyB1c2VkIHRvIGRldGVybWluZSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBsb3dlciwgY2VudGVyIGFuZCB1cHBlciBmcmVxdWVuY3kgb2YgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGJhbmQuICAqLworICAgIE9NWF9CUzMyIHNCYW5kTGV2ZWw7ICAgICAgIC8qKjwgYmFuZCBsZXZlbCBpbiBtaWxsaWJlbHMgKi8KK30gT01YX0FVRElPX0NPTkZJR19FUVVBTElaRVJUWVBFOworCisKKy8qKiBTdGVyZW8gd2lkZW5pbmcgbW9kZSB0eXBlIAorICogQGluZ3JvdXAgZWZmZWN0cworICovIAordHlwZWRlZiBlbnVtIE9NWF9BVURJT19TVEVSRU9XSURFTklOR1RZUEUgeworICAgIE9NWF9BVURJT19TdGVyZW9XaWRlbmluZ0hlYWRwaG9uZXMsICAgIC8qKjwgU3RlcmVvIHdpZGVuaW5nIGZvciBsb3Vkc3BlYWtlcnMgKi8KKyAgICBPTVhfQVVESU9fU3RlcmVvV2lkZW5pbmdMb3Vkc3BlYWtlcnMsICAvKio8IFN0ZXJlbyB3aWRlbmluZyBmb3IgY2xvc2VseSBzcGFjZWQgbG91ZHNwZWFrZXJzICovCisgICAgT01YX0FVRElPX1N0ZXJlb1dpZGVuaW5nS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIE9NWF9BVURJT19TdGVyZW9XaWRlbmluZ1ZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCisgICAgT01YX0FVRElPX1N0ZXJlb1dpZGVuaW5nTWF4ID0gMHg3RkZGRkZGRgorfSBPTVhfQVVESU9fU1RFUkVPV0lERU5JTkdUWVBFOworCisKKy8qKiBDb250cm9sIGZvciBzdGVyZW8gd2lkZW5pbmcsIHdoaWNoIGlzIGEgc3BlY2lhbCAyLWNoYW5uZWwKKyAqICBjYXNlIG9mIHRoZSBhdWRpbyB2aXJ0dWFsaXplciBlZmZlY3QuIEZvciBleGFtcGxlLCBmb3IgNS4xLWNoYW5uZWwgCisgKiAgb3V0cHV0LCBpdCB0cmFuc2xhdGVzIHRvIHZpcnR1YWwgc3Vycm91bmQgc291bmQuIAorICogQGluZ3JvdXAgZWZmZWN0cworICovIAordHlwZWRlZiBzdHJ1Y3QgT01YX0FVRElPX0NPTkZJR19TVEVSRU9XSURFTklOR1RZUEUgeworICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgIC8qKjwgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovCisgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCisgICAgT01YX1UzMiBuUG9ydEluZGV4OyAgICAgICAgLyoqPCBwb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0byAqLworICAgIE9NWF9CT09MIGJFbmFibGU7ICAgICAgICAgIC8qKjwgRW5hYmxlL2Rpc2FibGUgZm9yIHN0ZXJlbyB3aWRlbmluZyBjb250cm9sICovCisgICAgT01YX0FVRElPX1NURVJFT1dJREVOSU5HVFlQRSBlV2lkZW5pbmdUeXBlOyAvKio8IFN0ZXJlbyB3aWRlbmluZyBhbGdvcml0aG0gdHlwZSAqLworICAgIE9NWF9VMzIgIG5TdGVyZW9XaWRlbmluZzsgIC8qKjwgc3RlcmVvIHdpZGVuaW5nIHNldHRpbmcgZm9yIHRoZSBwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgYSBjb250aW51b3VzIHZhbHVlIGZyb20gMCB0byAxMDAgICovCit9IE9NWF9BVURJT19DT05GSUdfU1RFUkVPV0lERU5JTkdUWVBFOworCisKKy8qKiBUaGUgY2hvcnVzIGVmZmVjdCAob3IgYGBjaG9yYWxpemVyJycpIGlzIGFueSBzaWduYWwgcHJvY2Vzc29yIHdoaWNoIG1ha2VzCisgKiAgb25lIHNvdW5kIHNvdXJjZSAoc3VjaCBhcyBhIHZvaWNlKSBzb3VuZCBsaWtlIG1hbnkgc3VjaCBzb3VyY2VzIHNpbmdpbmcgCisgKiAgKG9yIHBsYXlpbmcpIGluIHVuaXNvbi4gU2luY2UgcGVyZm9ybWFuY2UgaW4gdW5pc29uIGlzIG5ldmVyIGV4YWN0LCBjaG9ydXMgCisgKiAgZWZmZWN0cyBzaW11bGF0ZSB0aGlzIGJ5IG1ha2luZyBpbmRlcGVuZGVudGx5IG1vZGlmaWVkIGNvcGllcyBvZiB0aGUgaW5wdXQgCisgKiAgc2lnbmFsLiBNb2RpZmljYXRpb25zIG1heSBpbmNsdWRlICgxKSBkZWxheSwgKDIpIGZyZXF1ZW5jeSBzaGlmdCwgYW5kIAorICogICgzKSBhbXBsaXR1ZGUgbW9kdWxhdGlvbi4KKyAqIEBpbmdyb3VwIGVmZmVjdHMKKyAqLwordHlwZWRlZiBzdHJ1Y3QgT01YX0FVRElPX0NPTkZJR19DSE9SVVNUWVBFIHsKKyAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAvKio8IHNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcyAqLworICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgIC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLworICAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAgIC8qKjwgcG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8gKi8KKyAgICBPTVhfQk9PTCBiRW5hYmxlOyAgICAgICAgICAvKio8IEVuYWJsZS9kaXNhYmxlIGZvciBjaG9ydXMgKi8KKyAgICBPTVhfQlUzMiBzRGVsYXk7ICAgICAgICAgICAvKio8IGF2ZXJhZ2UgZGVsYXkgaW4gbWlsbGlzZWNvbmRzICovCisgICAgT01YX0JVMzIgc01vZHVsYXRpb25SYXRlOyAgLyoqPCByYXRlIG9mIG1vZHVsYXRpb24gaW4gbWlsbGloZXJ0eiAqLworICAgIE9NWF9VMzIgbk1vZHVsYXRpb25EZXB0aDsgIC8qKjwgZGVwdGggb2YgbW9kdWxhdGlvbiBhcyBhIHBlcmNlbnRhZ2Ugb2YgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxheSAoaS5lLiAwIHRvIDEwMCkgKi8KKyAgICBPTVhfQlUzMiBuRmVlZGJhY2s7ICAgICAgICAvKio8IEZlZWRiYWNrIGZyb20gY2hvcnVzIG91dHB1dCB0byBpbnB1dCBpbiBwZXJjZW50YWdlICovCit9IE9NWF9BVURJT19DT05GSUdfQ0hPUlVTVFlQRTsKKworCisvKiogUmV2ZXJiZXJhdGlvbiBpcyBwYXJ0IG9mIHRoZSByZWZsZWN0ZWQgc291bmQgdGhhdCBmb2xsb3dzIHRoZSBlYXJseSAKKyAqICByZWZsZWN0aW9ucy4gSW4gYSB0eXBpY2FsIHJvb20sIHRoaXMgY29uc2lzdHMgb2YgYSBkZW5zZSBzdWNjZXNzaW9uIG9mIAorICogIGVjaG9lcyB3aG9zZSBlbmVyZ3kgZGVjYXlzIGV4cG9uZW50aWFsbHkuIFRoZSByZXZlcmJlcmF0aW9uIGVmZmVjdCBzdHJ1Y3R1cmUgCisgKiAgYXMgZGVmaW5lZCBoZXJlIGluY2x1ZGVzIGJvdGggKGVhcmx5KSByZWZsZWN0aW9ucyBhcyB3ZWxsIGFzIChsYXRlKSByZXZlcmJlcmF0aW9ucy4gCisgKiBAaW5ncm91cCBlZmZlY3RzCisgKi8KK3R5cGVkZWYgc3RydWN0IE9NWF9BVURJT19DT05GSUdfUkVWRVJCRVJBVElPTlRZUEUgeworICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgICAgIC8qKjwgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovCisgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAgICAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCisgICAgT01YX1UzMiBuUG9ydEluZGV4OyAgICAgICAgICAgLyoqPCBwb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0byAqLworICAgIE9NWF9CT09MIGJFbmFibGU7ICAgICAgICAgICAgIC8qKjwgRW5hYmxlL2Rpc2FibGUgZm9yIHJldmVyYmVyYXRpb24gY29udHJvbCAqLworICAgIE9NWF9CUzMyIHNSb29tTGV2ZWw7ICAgICAgICAgIC8qKjwgSW50ZW5zaXR5IGxldmVsIGZvciB0aGUgd2hvbGUgcm9vbSBlZmZlY3QgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaS5lLiBib3RoIGVhcmx5IHJlZmxlY3Rpb25zIGFuZCBsYXRlIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV2ZXJiZXJhdGlvbikgaW4gbWlsbGliZWxzICovCisgICAgT01YX0JTMzIgc1Jvb21IaWdoRnJlcUxldmVsOyAgLyoqPCBBdHRlbnVhdGlvbiBhdCBoaWdoIGZyZXF1ZW5jaWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZSB0byB0aGUgaW50ZW5zaXR5IGF0IGxvdworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlcXVlbmNpZXMgaW4gbWlsbGliZWxzICovCisgICAgT01YX0JTMzIgc1JlZmxlY3Rpb25zTGV2ZWw7ICAgLyoqPCBJbnRlbnNpdHkgbGV2ZWwgb2YgZWFybHkgcmVmbGVjdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZWxhdGl2ZSB0byByb29tIHZhbHVlKSwgaW4gbWlsbGliZWxzICovCisgICAgT01YX0JVMzIgc1JlZmxlY3Rpb25zRGVsYXk7ICAgLyoqPCBEZWxheSB0aW1lIG9mIHRoZSBmaXJzdCByZWZsZWN0aW9uIHJlbGF0aXZlIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIGRpcmVjdCBwYXRoLCBpbiBtaWxsaXNlY29uZHMgKi8KKyAgICBPTVhfQlMzMiBzUmV2ZXJiTGV2ZWw7ICAgICAgICAvKio8IEludGVuc2l0eSBsZXZlbCBvZiBsYXRlIHJldmVyYmVyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlIHRvIHJvb20gbGV2ZWwsIGluIG1pbGxpYmVscyAqLworICAgIE9NWF9CVTMyIHNSZXZlcmJEZWxheTsgICAgICAgIC8qKjwgVGltZSBkZWxheSBmcm9tIHRoZSBmaXJzdCBlYXJseSByZWZsZWN0aW9uIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGF0ZSByZXZlcmJlcmF0aW9uIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiwgaW4gbWlsbGlzZWNvbmRzICovCisgICAgT01YX0JVMzIgc0RlY2F5VGltZTsgICAgICAgICAgLyoqPCBMYXRlIHJldmVyYmVyYXRpb24gZGVjYXkgdGltZSBhdCBsb3cKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZXF1ZW5jaWVzLCBpbiBtaWxsaXNlY29uZHMgKi8KKyAgICBPTVhfQlUzMiBuRGVjYXlIaWdoRnJlcVJhdGlvOyAvKio8IFJhdGlvIG9mIGhpZ2ggZnJlcXVlbmN5IGRlY2F5IHRpbWUgcmVsYXRpdmUgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBsb3cgZnJlcXVlbmN5IGRlY2F5IHRpbWUgaW4gcGVyY2VudCAgKi8KKyAgICBPTVhfVTMyIG5EZW5zaXR5OyAgICAgICAgICAgICAvKio8IE1vZGFsIGRlbnNpdHkgaW4gdGhlIGxhdGUgcmV2ZXJiZXJhdGlvbiBkZWNheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHBlcmNlbnQgKGkuZS4gMCAtIDEwMCkgKi8KKyAgICBPTVhfVTMyIG5EaWZmdXNpb247ICAgICAgICAgICAvKio8IEVjaG8gZGVuc2l0eSBpbiB0aGUgbGF0ZSByZXZlcmJlcmF0aW9uIGRlY2F5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gcGVyY2VudCAoaS5lLiAwIC0gMTAwKSAqLworICAgIE9NWF9CVTMyIHNSZWZlcmVuY2VIaWdoRnJlcTsgIC8qKjwgUmVmZXJlbmNlIGhpZ2ggZnJlcXVlbmN5IGluIEhlcnR6LiBUaGlzIGlzIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZyZXF1ZW5jeSB1c2VkIGFzIHRoZSByZWZlcmVuY2UgZm9yIGFsbCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBoaWdoLWZyZXF1ZW5jeSBzZXR0aW5ncyBhYm92ZSAqLworCit9IE9NWF9BVURJT19DT05GSUdfUkVWRVJCRVJBVElPTlRZUEU7CisKKworLyoqIFBvc3NpYmxlIHNldHRpbmdzIGZvciB0aGUgRWNobyBDYW5jZWxhdGlvbiBzdHJ1Y3R1cmUgdG8gdXNlIAorICogQGluZ3JvdXAgZWZmZWN0cworICovCit0eXBlZGVmIGVudW0gT01YX0FVRElPX0VDSE9DQU5UWVBFIHsKKyAgIE9NWF9BVURJT19FY2hvQ2FuT2ZmID0gMCwgICAgLyoqPCBFY2hvIENhbmNlbGxhdGlvbiBpcyBkaXNhYmxlZCAqLworICAgT01YX0FVRElPX0VjaG9DYW5Ob3JtYWwsICAgICAvKio8IEVjaG8gQ2FuY2VsbGF0aW9uIG5vcm1hbCBvcGVyYXRpb24gLSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvIGZyb20gcGxhc3RpY3MgYW5kIGZhY2UgKi8KKyAgIE9NWF9BVURJT19FY2hvQ2FuSEZyZWUsICAgICAgLyoqPCBFY2hvIENhbmNlbGxhdGlvbiBvcHRpbWl6ZWQgZm9yIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhhbmRzIEZyZWUgb3BlcmF0aW9uICovCisgICBPTVhfQVVESU9fRWNob0NhbkNhcktpdCwgICAgLyoqPCBFY2hvIENhbmNlbGxhdGlvbiBvcHRpbWl6ZWQgZm9yIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhciBLaXQgKGxvbmdlciBlY2hvKSAqLworICAgT01YX0FVRElPX0VjaG9DYW5LaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICBPTVhfQVVESU9fRWNob0NhblZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCisgICBPTVhfQVVESU9fRWNob0Nhbk1heCA9IDB4N0ZGRkZGRkYKK30gT01YX0FVRElPX0VDSE9DQU5UWVBFOworCisKKy8qKiBFbmFibGUgLyBEaXNhYmxlIGZvciBlY2hvIGNhbmNlbGF0aW9uLCB3aGljaCByZW1vdmVzIHVuZGVzaXJlZCBlY2hvJ3MKKyAqICBmcm9tIHRoZSBhdWRpbworICogQGluZ3JvdXAgZWZmZWN0cworICovIAordHlwZWRlZiBzdHJ1Y3QgT01YX0FVRElPX0NPTkZJR19FQ0hPQ0FOQ0VMQVRJT05UWVBFIHsKKyAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAvKio8IHNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcyAqLworICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgIC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLworICAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAgIC8qKjwgcG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8gKi8KKyAgICBPTVhfQVVESU9fRUNIT0NBTlRZUEUgZUVjaG9DYW5jZWxhdGlvbjsgLyoqPCBFY2hvIGNhbmNlbGF0aW9uIHNldHRpbmdzICovCit9IE9NWF9BVURJT19DT05GSUdfRUNIT0NBTkNFTEFUSU9OVFlQRTsKKworCisvKiogRW5hYmxlIC8gRGlzYWJsZSBmb3Igbm9pc2UgcmVkdWN0aW9uLCB3aGljaCB1bmRlc2lyZWQgbm9pc2UgZnJvbQorICogdGhlIGF1ZGlvCisgKiBAaW5ncm91cCBlZmZlY3RzCisgKi8gCit0eXBlZGVmIHN0cnVjdCBPTVhfQVVESU9fQ09ORklHX05PSVNFUkVEVUNUSU9OVFlQRSB7CisgICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAvKio8IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24gKi8KKyAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7ICAgICAgICAvKio8IHBvcnQgdGhhdCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzIHRvICovCisgICAgT01YX0JPT0wgYk5vaXNlUmVkdWN0aW9uOyAgLyoqPCBFbmFibGUvZGlzYWJsZSBmb3Igbm9pc2UgcmVkdWN0aW9uICovCit9IE9NWF9BVURJT19DT05GSUdfTk9JU0VSRURVQ1RJT05UWVBFOworCisvKiogQH0gKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmCisvKiBGaWxlIEVPRiAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL29wZW5tYXgvT01YX0NvbXBvbmVudC5oIGIvaW5jbHVkZS9tZWRpYS9vcGVubWF4L09NWF9Db21wb25lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWI3ODRlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9tZWRpYS9vcGVubWF4L09NWF9Db21wb25lbnQuaApAQCAtMCwwICsxLDU5NiBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwOSBQYWNrZXRWaWRlbworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlcgorICogZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zCisgKiBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggVGhlIEtocm9ub3MgR3JvdXAgSW5jLiAKKyAqIAorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0CisgKiB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6IAorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAKKyAqIAorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAorICogVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKKyAqIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAKKyAqCisgKi8KKworLyoqIE9NWF9Db21wb25lbnQuaCAtIE9wZW5NYXggSUwgdmVyc2lvbiAxLjEuMgorICogIFRoZSBPTVhfQ29tcG9uZW50IGhlYWRlciBmaWxlIGNvbnRhaW5zIHRoZSBkZWZpbml0aW9ucyB1c2VkIHRvIGRlZmluZQorICogIHRoZSBwdWJsaWMgaW50ZXJmYWNlIG9mIGEgY29tcG9uZW50LiAgVGhpcyBoZWFkZXIgZmlsZSBpcyBpbnRlbmRlZCB0bworICogIGJlIHVzZWQgYnkgYm90aCB0aGUgYXBwbGljYXRpb24gYW5kIHRoZSBjb21wb25lbnQuCisgKi8KKworI2lmbmRlZiBPTVhfQ29tcG9uZW50X2gKKyNkZWZpbmUgT01YX0NvbXBvbmVudF9oCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworCisKKy8qIEVhY2ggT01YIGhlYWRlciBtdXN0IGluY2x1ZGUgYWxsIHJlcXVpcmVkIGhlYWRlciBmaWxlcyB0byBhbGxvdyB0aGUKKyAqICBoZWFkZXIgdG8gY29tcGlsZSB3aXRob3V0IGVycm9ycy4gIFRoZSBpbmNsdWRlcyBiZWxvdyBhcmUgcmVxdWlyZWQKKyAqICBmb3IgdGhpcyBoZWFkZXIgZmlsZSB0byBjb21waWxlIHN1Y2Nlc3NmdWxseSAKKyAqLworCisjaW5jbHVkZSA8T01YX0F1ZGlvLmg+CisjaW5jbHVkZSA8T01YX1ZpZGVvLmg+CisjaW5jbHVkZSA8T01YX0ltYWdlLmg+CisjaW5jbHVkZSA8T01YX090aGVyLmg+CisKKy8qKiBAaW5ncm91cCBjb21wICovCit0eXBlZGVmIGVudW0gT01YX1BPUlRET01BSU5UWVBFIHsgCisgICAgT01YX1BvcnREb21haW5BdWRpbywgCisgICAgT01YX1BvcnREb21haW5WaWRlbywgCisgICAgT01YX1BvcnREb21haW5JbWFnZSwgCisgICAgT01YX1BvcnREb21haW5PdGhlciwKKyAgICBPTVhfUG9ydERvbWFpbktocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKKyAgICBPTVhfUG9ydERvbWFpblZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCisgICAgT01YX1BvcnREb21haW5NYXggPSAweDdmZmZmZmYKK30gT01YX1BPUlRET01BSU5UWVBFOworCisvKiogQGluZ3JvdXAgY29tcCAqLwordHlwZWRlZiBzdHJ1Y3QgT01YX1BBUkFNX1BPUlRERUZJTklUSU9OVFlQRSB7CisgICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAgICAgIC8qKjwgU2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovCisgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAgICAgIC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLworICAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAgICAgICAvKio8IFBvcnQgbnVtYmVyIHRoZSBzdHJ1Y3R1cmUgYXBwbGllcyB0byAqLworICAgIE9NWF9ESVJUWVBFIGVEaXI7ICAgICAgICAgICAgICAvKio8IERpcmVjdGlvbiAoaW5wdXQgb3Igb3V0cHV0KSBvZiB0aGlzIHBvcnQgKi8KKyAgICBPTVhfVTMyIG5CdWZmZXJDb3VudEFjdHVhbDsgICAgLyoqPCBUaGUgYWN0dWFsIG51bWJlciBvZiBidWZmZXJzIGFsbG9jYXRlZCBvbiB0aGlzIHBvcnQgKi8KKyAgICBPTVhfVTMyIG5CdWZmZXJDb3VudE1pbjsgICAgICAgLyoqPCBUaGUgbWluaW11bSBudW1iZXIgb2YgYnVmZmVycyB0aGlzIHBvcnQgcmVxdWlyZXMgKi8KKyAgICBPTVhfVTMyIG5CdWZmZXJTaXplOyAgICAgICAgICAgLyoqPCBTaXplLCBpbiBieXRlcywgZm9yIGJ1ZmZlcnMgdG8gYmUgdXNlZCBmb3IgdGhpcyBjaGFubmVsICovCisgICAgT01YX0JPT0wgYkVuYWJsZWQ7ICAgICAgICAgICAgIC8qKjwgUG9ydHMgZGVmYXVsdCB0byBlbmFibGVkIGFuZCBhcmUgZW5hYmxlZC9kaXNhYmxlZCBieQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9NWF9Db21tYW5kUG9ydEVuYWJsZS9PTVhfQ29tbWFuZFBvcnREaXNhYmxlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4gZGlzYWJsZWQgYSBwb3J0IGlzIHVucG9wdWxhdGVkLiBBIGRpc2FibGVkIHBvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBub3QgcG9wdWxhdGVkIHdpdGggYnVmZmVycyBvbiBhIHRyYW5zaXRpb24gdG8gSURMRS4gKi8KKyAgICBPTVhfQk9PTCBiUG9wdWxhdGVkOyAgICAgICAgICAgLyoqPCBQb3J0IGlzIHBvcHVsYXRlZCB3aXRoIGFsbCBvZiBpdHMgYnVmZmVycyBhcyBpbmRpY2F0ZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuQnVmZmVyQ291bnRBY3R1YWwuIEEgZGlzYWJsZWQgcG9ydCBpcyBhbHdheXMgdW5wb3B1bGF0ZWQuIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFuIGVuYWJsZWQgcG9ydCBpcyBwb3B1bGF0ZWQgb24gYSB0cmFuc2l0aW9uIHRvIE9NWF9TdGF0ZUlkbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgdW5wb3B1bGF0ZWQgb24gYSB0cmFuc2l0aW9uIHRvIGxvYWRlZC4gKi8KKyAgICBPTVhfUE9SVERPTUFJTlRZUEUgZURvbWFpbjsgICAgLyoqPCBEb21haW4gb2YgdGhlIHBvcnQuIERldGVybWluZXMgdGhlIGNvbnRlbnRzIG9mIG1ldGFkYXRhIGJlbG93LiAqLworICAgIHVuaW9uIHsKKyAgICAgICAgT01YX0FVRElPX1BPUlRERUZJTklUSU9OVFlQRSBhdWRpbzsKKyAgICAgICAgT01YX1ZJREVPX1BPUlRERUZJTklUSU9OVFlQRSB2aWRlbzsKKyAgICAgICAgT01YX0lNQUdFX1BPUlRERUZJTklUSU9OVFlQRSBpbWFnZTsKKyAgICAgICAgT01YX09USEVSX1BPUlRERUZJTklUSU9OVFlQRSBvdGhlcjsKKyAgICB9IGZvcm1hdDsKKyAgICBPTVhfQk9PTCBiQnVmZmVyc0NvbnRpZ3VvdXM7CisgICAgT01YX1UzMiBuQnVmZmVyQWxpZ25tZW50OworfSBPTVhfUEFSQU1fUE9SVERFRklOSVRJT05UWVBFOworCisvKiogQGluZ3JvdXAgY29tcCAqLwordHlwZWRlZiBzdHJ1Y3QgT01YX1BBUkFNX1UzMlRZUEUgeyAKKyAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAgICAgICAgLyoqPCBTaXplIG9mIHRoaXMgc3RydWN0dXJlLCBpbiBCeXRlcyAqLyAKKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAgICAgICAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovIAorICAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAgICAgICAgICAvKio8IHBvcnQgdGhhdCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzIHRvICovIAorICAgIE9NWF9VMzIgblUzMjsgICAgICAgICAgICAgICAgICAgICAvKio8IFUzMiB2YWx1ZSAqLworfSBPTVhfUEFSQU1fVTMyVFlQRTsKKworLyoqIEBpbmdyb3VwIHJwbSAqLwordHlwZWRlZiBlbnVtIE9NWF9TVVNQRU5TSU9OUE9MSUNZVFlQRSB7CisgICAgT01YX1N1c3BlbnNpb25EaXNhYmxlZCwgLyoqPCBObyBzdXNwZW5zaW9uOyB2MS4wIGJlaGF2aW9yICovCisgICAgT01YX1N1c3BlbnNpb25FbmFibGVkLCAgLyoqPCBTdXNwZW5zaW9uIGFsbG93ZWQgKi8gICAKKyAgICBPTVhfU3VzcGVuc2lvblBvbGljeUtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKKyAgICBPTVhfU3VzcGVuc2lvblBvbGljeVN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCisgICAgT01YX1N1c3BlbnNpb25Qb2xpY3lNYXggPSAweDdmZmZmZmZmCit9IE9NWF9TVVNQRU5TSU9OUE9MSUNZVFlQRTsKKworLyoqIEBpbmdyb3VwIHJwbSAqLwordHlwZWRlZiBzdHJ1Y3QgT01YX1BBUkFNX1NVU1BFTlNJT05QT0xJQ1lUWVBFIHsKKyAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAgICAgIAorICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgICAgICAgIAorICAgIE9NWF9TVVNQRU5TSU9OUE9MSUNZVFlQRSBlUG9saWN5OworfSBPTVhfUEFSQU1fU1VTUEVOU0lPTlBPTElDWVRZUEU7CisKKy8qKiBAaW5ncm91cCBycG0gKi8KK3R5cGVkZWYgZW51bSBPTVhfU1VTUEVOU0lPTlRZUEUgeworICAgIE9NWF9Ob3RTdXNwZW5kZWQsIC8qKjwgY29tcG9uZW50IGlzIG5vdCBzdXNwZW5kZWQgKi8KKyAgICBPTVhfU3VzcGVuZGVkLCAgICAvKio8IGNvbXBvbmVudCBpcyBzdXNwZW5kZWQgKi8KKyAgICBPTVhfU3VzcGVuc2lvbktocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKKyAgICBPTVhfU3VzcGVuc2lvblZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCisgICAgT01YX1N1c3BlbmRNYXggPSAweDdGRkZGRkZGCit9IE9NWF9TVVNQRU5TSU9OVFlQRTsKKworLyoqIEBpbmdyb3VwIHJwbSAqLwordHlwZWRlZiBzdHJ1Y3QgT01YX1BBUkFNX1NVU1BFTlNJT05UWVBFIHsKKyAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAgICAgIAorICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgICAgICAgCisgICAgT01YX1NVU1BFTlNJT05UWVBFIGVUeXBlOyAgICAgICAgICAgICAKK30gT01YX1BBUkFNX1NVU1BFTlNJT05UWVBFIDsKKwordHlwZWRlZiBzdHJ1Y3QgT01YX0NPTkZJR19CT09MRUFOVFlQRSB7CisgICAgT01YX1UzMiBuU2l6ZTsKKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247CisgICAgT01YX0JPT0wgYkVuYWJsZWQ7ICAgIAorfSBPTVhfQ09ORklHX0JPT0xFQU5UWVBFOworCisvKiBQYXJhbWV0ZXIgc3BlY2lmeWluZyB0aGUgY29udGVudCB1cmkgdG8gdXNlLiAqLworLyoqIEBpbmdyb3VwIGNwICovCit0eXBlZGVmIHN0cnVjdCBPTVhfUEFSQU1fQ09OVEVOVFVSSVRZUEUKK3sKKyAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAgICAgICAgICAvKio8IHNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcywgaW5jbHVkaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWwgVVJJIG5hbWUgKi8KKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAgICAgICAgICAvKio8IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24gKi8KKyAgICBPTVhfVTggY29udGVudFVSSVsxXTsgICAgICAgICAgICAgICAvKio8IFRoZSBVUkkgbmFtZSAqLworfSBPTVhfUEFSQU1fQ09OVEVOVFVSSVRZUEU7CisKKy8qIFBhcmFtZXRlciBzcGVjaWZ5aW5nIHRoZSBwaXBlIHRvIHVzZS4gKi8KKy8qKiBAaW5ncm91cCBjcCAqLwordHlwZWRlZiBzdHJ1Y3QgT01YX1BBUkFNX0NPTlRFTlRQSVBFVFlQRQoreworICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgICAvKio8IHNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcyAqLworICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgICAvKio8IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24gKi8KKyAgICBPTVhfSEFORExFVFlQRSBoUGlwZTsgICAgICAgLyoqPCBUaGUgcGlwZSBoYW5kbGUqLworfSBPTVhfUEFSQU1fQ09OVEVOVFBJUEVUWVBFOworCisvKiogQGluZ3JvdXAgcnBtICovCit0eXBlZGVmIHN0cnVjdCBPTVhfUkVTT1VSQ0VDT05DRUFMTUVOVFRZUEUgeworICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgIC8qKjwgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovCisgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCisgICAgT01YX0JPT0wgYlJlc291cmNlQ29uY2VhbG1lbnRGb3JiaWRkZW47IC8qKjwgZGlzYWxsb3cgdGhlIHVzZSBvZiByZXNvdXJjZSBjb25jZWFsbWVudCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kcyAobGlrZSBkZWdyYWRpbmcgYWxnb3JpdGhtIHF1YWxpdHkgdG8gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvd2VyIHJlc291cmNlIGNvbnN1bXB0aW9uIG9yIGZ1bmN0aW9uYWwgYnlwYXNzKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gYSBjb21wb25lbnQgYXMgYSByZXNvbHV0aW9uIHRvIHJlc291cmNlIGNvbmZsaWN0cy4gKi8KK30gT01YX1JFU09VUkNFQ09OQ0VBTE1FTlRUWVBFOworCisKKy8qKiBAaW5ncm91cCBtZXRhZGF0YSAqLwordHlwZWRlZiBlbnVtIE9NWF9NRVRBREFUQUNIQVJTRVRUWVBFIHsKKyAgICBPTVhfTWV0YWRhdGFDaGFyc2V0VW5rbm93biA9IDAsCisgICAgT01YX01ldGFkYXRhQ2hhcnNldEFTQ0lJLAorICAgIE9NWF9NZXRhZGF0YUNoYXJzZXRCaW5hcnksCisgICAgT01YX01ldGFkYXRhQ2hhcnNldENvZGVQYWdlMTI1MiwKKyAgICBPTVhfTWV0YWRhdGFDaGFyc2V0VVRGOCwKKyAgICBPTVhfTWV0YWRhdGFDaGFyc2V0SmF2YUNvbmZvcm1hbnRVVEY4LAorICAgIE9NWF9NZXRhZGF0YUNoYXJzZXRVVEY3LAorICAgIE9NWF9NZXRhZGF0YUNoYXJzZXRJbWFwVVRGNywKKyAgICBPTVhfTWV0YWRhdGFDaGFyc2V0VVRGMTZMRSwgCisgICAgT01YX01ldGFkYXRhQ2hhcnNldFVURjE2QkUsCisgICAgT01YX01ldGFkYXRhQ2hhcnNldEdCMTIzNDUsCisgICAgT01YX01ldGFkYXRhQ2hhcnNldEhaR0IyMzEyLAorICAgIE9NWF9NZXRhZGF0YUNoYXJzZXRHQjIzMTIsCisgICAgT01YX01ldGFkYXRhQ2hhcnNldEdCMTgwMzAsCisgICAgT01YX01ldGFkYXRhQ2hhcnNldEdCSywKKyAgICBPTVhfTWV0YWRhdGFDaGFyc2V0QmlnNSwKKyAgICBPTVhfTWV0YWRhdGFDaGFyc2V0SVNPODg1OTEsCisgICAgT01YX01ldGFkYXRhQ2hhcnNldElTTzg4NTkyLAorICAgIE9NWF9NZXRhZGF0YUNoYXJzZXRJU084ODU5MywKKyAgICBPTVhfTWV0YWRhdGFDaGFyc2V0SVNPODg1OTQsCisgICAgT01YX01ldGFkYXRhQ2hhcnNldElTTzg4NTk1LAorICAgIE9NWF9NZXRhZGF0YUNoYXJzZXRJU084ODU5NiwKKyAgICBPTVhfTWV0YWRhdGFDaGFyc2V0SVNPODg1OTcsCisgICAgT01YX01ldGFkYXRhQ2hhcnNldElTTzg4NTk4LAorICAgIE9NWF9NZXRhZGF0YUNoYXJzZXRJU084ODU5OSwKKyAgICBPTVhfTWV0YWRhdGFDaGFyc2V0SVNPODg1OTEwLAorICAgIE9NWF9NZXRhZGF0YUNoYXJzZXRJU084ODU5MTMsCisgICAgT01YX01ldGFkYXRhQ2hhcnNldElTTzg4NTkxNCwKKyAgICBPTVhfTWV0YWRhdGFDaGFyc2V0SVNPODg1OTE1LAorICAgIE9NWF9NZXRhZGF0YUNoYXJzZXRTaGlmdEpJUywKKyAgICBPTVhfTWV0YWRhdGFDaGFyc2V0SVNPMjAyMkpQLAorICAgIE9NWF9NZXRhZGF0YUNoYXJzZXRJU08yMDIySlAxLAorICAgIE9NWF9NZXRhZGF0YUNoYXJzZXRJU09FVUNKUCwKKyAgICBPTVhfTWV0YWRhdGFDaGFyc2V0U01TN0JpdCwKKyAgICBPTVhfTWV0YWRhdGFDaGFyc2V0S2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIE9NWF9NZXRhZGF0YUNoYXJzZXRWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLworICAgIE9NWF9NZXRhZGF0YUNoYXJzZXRUeXBlTWF4PSAweDdGRkZGRkZGCit9IE9NWF9NRVRBREFUQUNIQVJTRVRUWVBFOworCisvKiogQGluZ3JvdXAgbWV0YWRhdGEgKi8KK3R5cGVkZWYgZW51bSBPTVhfTUVUQURBVEFTQ09QRVRZUEUKK3sKKyAgICBPTVhfTWV0YWRhdGFTY29wZUFsbExldmVscywKKyAgICBPTVhfTWV0YWRhdGFTY29wZVRvcExldmVsLAorICAgIE9NWF9NZXRhZGF0YVNjb3BlUG9ydExldmVsLAorICAgIE9NWF9NZXRhZGF0YVNjb3BlTm9kZUxldmVsLAorICAgIE9NWF9NZXRhZGF0YVNjb3BlS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIE9NWF9NZXRhZGF0YVNjb3BlVmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KKyAgICBPTVhfTWV0YWRhdGFTY29wZVR5cGVNYXggPSAweDdmZmZmZmZmCit9IE9NWF9NRVRBREFUQVNDT1BFVFlQRTsKKworLyoqIEBpbmdyb3VwIG1ldGFkYXRhICovCit0eXBlZGVmIGVudW0gT01YX01FVEFEQVRBU0VBUkNITU9ERVRZUEUKK3sKKyAgICBPTVhfTWV0YWRhdGFTZWFyY2hWYWx1ZVNpemVCeUluZGV4LAorICAgIE9NWF9NZXRhZGF0YVNlYXJjaEl0ZW1CeUluZGV4LAorICAgIE9NWF9NZXRhZGF0YVNlYXJjaE5leHRJdGVtQnlLZXksCisgICAgT01YX01ldGFkYXRhU2VhcmNoS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIE9NWF9NZXRhZGF0YVNlYXJjaFZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCisgICAgT01YX01ldGFkYXRhU2VhcmNoVHlwZU1heCA9IDB4N2ZmZmZmZmYKK30gT01YX01FVEFEQVRBU0VBUkNITU9ERVRZUEU7CisvKiogQGluZ3JvdXAgbWV0YWRhdGEgKi8KK3R5cGVkZWYgc3RydWN0IE9NWF9DT05GSUdfTUVUQURBVEFJVEVNQ09VTlRUWVBFCit7CisgICAgT01YX1UzMiBuU2l6ZTsKKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247CisgICAgT01YX01FVEFEQVRBU0NPUEVUWVBFIGVTY29wZU1vZGU7CisgICAgT01YX1UzMiBuU2NvcGVTcGVjaWZpZXI7CisgICAgT01YX1UzMiBuTWV0YWRhdGFJdGVtQ291bnQ7Cit9IE9NWF9DT05GSUdfTUVUQURBVEFJVEVNQ09VTlRUWVBFOworCisvKiogQGluZ3JvdXAgbWV0YWRhdGEgKi8KK3R5cGVkZWYgc3RydWN0IE9NWF9DT05GSUdfTUVUQURBVEFJVEVNVFlQRQoreworICAgIE9NWF9VMzIgblNpemU7CisgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOworICAgIE9NWF9NRVRBREFUQVNDT1BFVFlQRSBlU2NvcGVNb2RlOworICAgIE9NWF9VMzIgblNjb3BlU3BlY2lmaWVyOworICAgIE9NWF9VMzIgbk1ldGFkYXRhSXRlbUluZGV4OyAgCisgICAgT01YX01FVEFEQVRBU0VBUkNITU9ERVRZUEUgZVNlYXJjaE1vZGU7CisgICAgT01YX01FVEFEQVRBQ0hBUlNFVFRZUEUgZUtleUNoYXJzZXQ7CisgICAgT01YX1U4IG5LZXlTaXplVXNlZDsKKyAgICBPTVhfVTggbktleVsxMjhdOworICAgIE9NWF9NRVRBREFUQUNIQVJTRVRUWVBFIGVWYWx1ZUNoYXJzZXQ7CisgICAgT01YX1NUUklORyBzTGFuZ3VhZ2VDb3VudHJ5OworICAgIE9NWF9VMzIgblZhbHVlTWF4U2l6ZTsKKyAgICBPTVhfVTMyIG5WYWx1ZVNpemVVc2VkOworICAgIE9NWF9VOCBuVmFsdWVbMV07Cit9IE9NWF9DT05GSUdfTUVUQURBVEFJVEVNVFlQRTsKKworLyogQGluZ3JvdXAgbWV0YWRhdGEgKi8KK3R5cGVkZWYgc3RydWN0IE9NWF9DT05GSUdfQ09OVEFJTkVSTk9ERUNPVU5UVFlQRQoreworICAgIE9NWF9VMzIgblNpemU7CisgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOworICAgIE9NWF9CT09MIGJBbGxLZXlzOworICAgIE9NWF9VMzIgblBhcmVudE5vZGVJRDsKKyAgICBPTVhfVTMyIG5OdW1Ob2RlczsKK30gT01YX0NPTkZJR19DT05UQUlORVJOT0RFQ09VTlRUWVBFOworCisvKiogQGluZ3JvdXAgbWV0YWRhdGEgKi8KK3R5cGVkZWYgc3RydWN0IE9NWF9DT05GSUdfQ09OVEFJTkVSTk9ERUlEVFlQRQoreworICAgIE9NWF9VMzIgblNpemU7CisgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOworICAgIE9NWF9CT09MIGJBbGxLZXlzOworICAgIE9NWF9VMzIgblBhcmVudE5vZGVJRDsKKyAgICBPTVhfVTMyIG5Ob2RlSW5kZXg7IAorICAgIE9NWF9VMzIgbk5vZGVJRDsgCisgICAgT01YX1NUUklORyBjTm9kZU5hbWU7CisgICAgT01YX0JPT0wgYklzTGVhZlR5cGU7Cit9IE9NWF9DT05GSUdfQ09OVEFJTkVSTk9ERUlEVFlQRTsKKworLyoqIEBpbmdyb3VwIG1ldGFkYXRhICovCit0eXBlZGVmIHN0cnVjdCBPTVhfUEFSQU1fTUVUQURBVEFGSUxURVJUWVBFIAoreyAKKyAgICBPTVhfVTMyIG5TaXplOyAKKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247IAorICAgIE9NWF9CT09MIGJBbGxLZXlzOwkvKiBpZiB0cnVlIHRoZW4gdGhpcyBzdHJ1Y3R1cmUgcmVmZXJzIHRvIGFsbCBrZXlzIGFuZCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAqIHRoZSB0aHJlZSBrZXkgZmllbGRzIGJlbG93IGFyZSBpZ25vcmVkICovCisgICAgT01YX01FVEFEQVRBQ0hBUlNFVFRZUEUgZUtleUNoYXJzZXQ7CisgICAgT01YX1UzMiBuS2V5U2l6ZVVzZWQ7IAorICAgIE9NWF9VOCAgIG5LZXkgWzEyOF07IAorICAgIE9NWF9VMzIgbkxhbmd1YWdlQ291bnRyeVNpemVVc2VkOworICAgIE9NWF9VOCBuTGFuZ3VhZ2VDb3VudHJ5WzEyOF07CisgICAgT01YX0JPT0wgYkVuYWJsZWQ7CS8qIGlmIHRydWUgdGhlbiBrZXkgaXMgcGFydCBvZiBmaWx0ZXIgKGUuZy4gCisgICAgICAgICAgICAgICAgICAgICAgICAgKiByZXRhaW5lZCBmb3IgcXVlcnkgbGF0ZXIpLiBJZiBmYWxzZSB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgKiBrZXkgaXMgbm90IHBhcnQgb2YgZmlsdGVyICovCit9IE9NWF9QQVJBTV9NRVRBREFUQUZJTFRFUlRZUEU7IAorCisvKiogVGhlIE9NWF9IQU5ETEVUWVBFIHN0cnVjdHVyZSBkZWZpbmVzIHRoZSBjb21wb25lbnQgaGFuZGxlLiAgVGhlIGNvbXBvbmVudCAKKyAqICBoYW5kbGUgaXMgdXNlZCB0byBhY2Nlc3MgYWxsIG9mIHRoZSBjb21wb25lbnQncyBwdWJsaWMgbWV0aG9kcyBhbmQgYWxzbworICogIGNvbnRhaW5zIHBvaW50ZXJzIHRvIHRoZSBjb21wb25lbnQncyBwcml2YXRlIGRhdGEgYXJlYS4gIFRoZSBjb21wb25lbnQKKyAqICBoYW5kbGUgaXMgaW5pdGlhbGl6ZWQgYnkgdGhlIE9NWCBjb3JlICh3aXRoIGhlbHAgZnJvbSB0aGUgY29tcG9uZW50KQorICogIGR1cmluZyB0aGUgcHJvY2VzcyBvZiBsb2FkaW5nIHRoZSBjb21wb25lbnQuICBBZnRlciB0aGUgY29tcG9uZW50IGlzCisgKiAgc3VjY2Vzc2Z1bGx5IGxvYWRlZCwgdGhlIGFwcGxpY2F0aW9uIGNhbiBzYWZlbHkgYWNjZXNzIGFueSBvZiB0aGUKKyAqICBjb21wb25lbnQncyBwdWJsaWMgZnVuY3Rpb25zIChhbHRob3VnaCBzb21lIG1heSByZXR1cm4gYW4gZXJyb3IgYmVjYXVzZQorICogIHRoZSBzdGF0ZSBpcyBpbmFwcHJvcHJpYXRlIGZvciB0aGUgYWNjZXNzKS4KKyAqIAorICogIEBpbmdyb3VwIGNvbXAKKyAqLwordHlwZWRlZiBzdHJ1Y3QgT01YX0NPTVBPTkVOVFRZUEUKK3sKKyAgICAvKiogVGhlIHNpemUgb2YgdGhpcyBzdHJ1Y3R1cmUsIGluIGJ5dGVzLiAgSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5CisgICAgICAgIG9mIHRoZSBhbGxvY2F0b3Igb2YgdGhpcyBzdHJ1Y3R1cmUgdG8gZmlsbCBpbiB0aGlzIHZhbHVlLiAgU2luY2UKKyAgICAgICAgdGhpcyBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIGJ5IHRoZSBHZXRIYW5kbGUgZnVuY3Rpb24sIHRoaXMKKyAgICAgICAgZnVuY3Rpb24gd2lsbCBmaWxsIGluIHRoaXMgdmFsdWUuICovCisgICAgT01YX1UzMiBuU2l6ZTsKKworICAgIC8qKiBuVmVyc2lvbiBpcyB0aGUgdmVyc2lvbiBvZiB0aGUgT01YIHNwZWNpZmljYXRpb24gdGhhdCB0aGUgc3RydWN0dXJlIAorICAgICAgICBpcyBidWlsdCBhZ2FpbnN0LiAgSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBjcmVhdG9yIG9mIHRoaXMgCisgICAgICAgIHN0cnVjdHVyZSB0byBpbml0aWFsaXplIHRoaXMgdmFsdWUgYW5kIGV2ZXJ5IHVzZXIgb2YgdGhpcyBzdHJ1Y3R1cmUgCisgICAgICAgIHNob3VsZCB2ZXJpZnkgdGhhdCBpdCBrbm93cyBob3cgdG8gdXNlIHRoZSBleGFjdCB2ZXJzaW9uIG9mIAorICAgICAgICB0aGlzIHN0cnVjdHVyZSBmb3VuZCBoZXJlaW4uICovCisgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOworCisgICAgLyoqIHBDb21wb25lbnRQcml2YXRlIGlzIGEgcG9pbnRlciB0byB0aGUgY29tcG9uZW50IHByaXZhdGUgZGF0YSBhcmVhLiAgCisgICAgICAgIFRoaXMgbWVtYmVyIGlzIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQgYnkgdGhlIGNvbXBvbmVudCB3aGVuIHRoZSAKKyAgICAgICAgY29tcG9uZW50IGlzIGZpcnN0IGxvYWRlZC4gIFRoZSBhcHBsaWNhdGlvbiBzaG91bGQgbm90IGFjY2VzcyB0aGlzIAorICAgICAgICBkYXRhIGFyZWEuICovCisgICAgT01YX1BUUiBwQ29tcG9uZW50UHJpdmF0ZTsKKworICAgIC8qKiBwQXBwbGljYXRpb25Qcml2YXRlIGlzIGEgcG9pbnRlciB0aGF0IGlzIGEgcGFyYW1ldGVyIHRvIHRoZSAKKyAgICAgICAgT01YX0dldEhhbmRsZSBtZXRob2QsIGFuZCBjb250YWlucyBhbiBhcHBsaWNhdGlvbiBwcml2YXRlIHZhbHVlIAorICAgICAgICBwcm92aWRlZCBieSB0aGUgSUwgY2xpZW50LiAgVGhpcyBhcHBsaWNhdGlvbiBwcml2YXRlIGRhdGEgaXMgCisgICAgICAgIHJldHVybmVkIHRvIHRoZSBJTCBDbGllbnQgYnkgT01YIGluIGFsbCBjYWxsYmFja3MgKi8KKyAgICBPTVhfUFRSIHBBcHBsaWNhdGlvblByaXZhdGU7CisKKyAgICAvKiogcmVmZXIgdG8gT01YX0dldENvbXBvbmVudFZlcnNpb24gaW4gT01YX2NvcmUuaCBvciB0aGUgT01YIElMIAorICAgICAgICBzcGVjaWZpY2F0aW9uIGZvciBkZXRhaWxzIG9uIHRoZSBHZXRDb21wb25lbnRWZXJzaW9uIG1ldGhvZC4KKyAgICAgKi8KKyAgICBPTVhfRVJST1JUWVBFICgqR2V0Q29tcG9uZW50VmVyc2lvbikoCisgICAgICAgICAgICBPTVhfSU4gIE9NWF9IQU5ETEVUWVBFIGhDb21wb25lbnQsCisgICAgICAgICAgICBPTVhfT1VUIE9NWF9TVFJJTkcgcENvbXBvbmVudE5hbWUsCisgICAgICAgICAgICBPTVhfT1VUIE9NWF9WRVJTSU9OVFlQRSogcENvbXBvbmVudFZlcnNpb24sCisgICAgICAgICAgICBPTVhfT1VUIE9NWF9WRVJTSU9OVFlQRSogcFNwZWNWZXJzaW9uLAorICAgICAgICAgICAgT01YX09VVCBPTVhfVVVJRFRZUEUqIHBDb21wb25lbnRVVUlEKTsKKworICAgIC8qKiByZWZlciB0byBPTVhfU2VuZENvbW1hbmQgaW4gT01YX2NvcmUuaCBvciB0aGUgT01YIElMIAorICAgICAgICBzcGVjaWZpY2F0aW9uIGZvciBkZXRhaWxzIG9uIHRoZSBTZW5kQ29tbWFuZCBtZXRob2QuCisgICAgICovCisgICAgT01YX0VSUk9SVFlQRSAoKlNlbmRDb21tYW5kKSgKKyAgICAgICAgICAgIE9NWF9JTiAgT01YX0hBTkRMRVRZUEUgaENvbXBvbmVudCwKKyAgICAgICAgICAgIE9NWF9JTiAgT01YX0NPTU1BTkRUWVBFIENtZCwKKyAgICAgICAgICAgIE9NWF9JTiAgT01YX1UzMiBuUGFyYW0xLAorICAgICAgICAgICAgT01YX0lOICBPTVhfUFRSIHBDbWREYXRhKTsKKworICAgIC8qKiByZWZlciB0byBPTVhfR2V0UGFyYW1ldGVyIGluIE9NWF9jb3JlLmggb3IgdGhlIE9NWCBJTCAKKyAgICAgICAgc3BlY2lmaWNhdGlvbiBmb3IgZGV0YWlscyBvbiB0aGUgR2V0UGFyYW1ldGVyIG1ldGhvZC4KKyAgICAgKi8KKyAgICBPTVhfRVJST1JUWVBFICgqR2V0UGFyYW1ldGVyKSgKKyAgICAgICAgICAgIE9NWF9JTiAgT01YX0hBTkRMRVRZUEUgaENvbXBvbmVudCwgCisgICAgICAgICAgICBPTVhfSU4gIE9NWF9JTkRFWFRZUEUgblBhcmFtSW5kZXgsICAKKyAgICAgICAgICAgIE9NWF9JTk9VVCBPTVhfUFRSIHBDb21wb25lbnRQYXJhbWV0ZXJTdHJ1Y3R1cmUpOworCisKKyAgICAvKiogcmVmZXIgdG8gT01YX1NldFBhcmFtZXRlciBpbiBPTVhfY29yZS5oIG9yIHRoZSBPTVggSUwgCisgICAgICAgIHNwZWNpZmljYXRpb24gZm9yIGRldGFpbHMgb24gdGhlIFNldFBhcmFtZXRlciBtZXRob2QuCisgICAgICovCisgICAgT01YX0VSUk9SVFlQRSAoKlNldFBhcmFtZXRlcikoCisgICAgICAgICAgICBPTVhfSU4gIE9NWF9IQU5ETEVUWVBFIGhDb21wb25lbnQsIAorICAgICAgICAgICAgT01YX0lOICBPTVhfSU5ERVhUWVBFIG5JbmRleCwKKyAgICAgICAgICAgIE9NWF9JTiAgT01YX1BUUiBwQ29tcG9uZW50UGFyYW1ldGVyU3RydWN0dXJlKTsKKworCisgICAgLyoqIHJlZmVyIHRvIE9NWF9HZXRDb25maWcgaW4gT01YX2NvcmUuaCBvciB0aGUgT01YIElMIAorICAgICAgICBzcGVjaWZpY2F0aW9uIGZvciBkZXRhaWxzIG9uIHRoZSBHZXRDb25maWcgbWV0aG9kLgorICAgICAqLworICAgIE9NWF9FUlJPUlRZUEUgKCpHZXRDb25maWcpKAorICAgICAgICAgICAgT01YX0lOICBPTVhfSEFORExFVFlQRSBoQ29tcG9uZW50LAorICAgICAgICAgICAgT01YX0lOICBPTVhfSU5ERVhUWVBFIG5JbmRleCwgCisgICAgICAgICAgICBPTVhfSU5PVVQgT01YX1BUUiBwQ29tcG9uZW50Q29uZmlnU3RydWN0dXJlKTsKKworCisgICAgLyoqIHJlZmVyIHRvIE9NWF9TZXRDb25maWcgaW4gT01YX2NvcmUuaCBvciB0aGUgT01YIElMIAorICAgICAgICBzcGVjaWZpY2F0aW9uIGZvciBkZXRhaWxzIG9uIHRoZSBTZXRDb25maWcgbWV0aG9kLgorICAgICAqLworICAgIE9NWF9FUlJPUlRZUEUgKCpTZXRDb25maWcpKAorICAgICAgICAgICAgT01YX0lOICBPTVhfSEFORExFVFlQRSBoQ29tcG9uZW50LAorICAgICAgICAgICAgT01YX0lOICBPTVhfSU5ERVhUWVBFIG5JbmRleCwgCisgICAgICAgICAgICBPTVhfSU4gIE9NWF9QVFIgcENvbXBvbmVudENvbmZpZ1N0cnVjdHVyZSk7CisKKworICAgIC8qKiByZWZlciB0byBPTVhfR2V0RXh0ZW5zaW9uSW5kZXggaW4gT01YX2NvcmUuaCBvciB0aGUgT01YIElMIAorICAgICAgICBzcGVjaWZpY2F0aW9uIGZvciBkZXRhaWxzIG9uIHRoZSBHZXRFeHRlbnNpb25JbmRleCBtZXRob2QuCisgICAgICovCisgICAgT01YX0VSUk9SVFlQRSAoKkdldEV4dGVuc2lvbkluZGV4KSgKKyAgICAgICAgICAgIE9NWF9JTiAgT01YX0hBTkRMRVRZUEUgaENvbXBvbmVudCwKKyAgICAgICAgICAgIE9NWF9JTiAgT01YX1NUUklORyBjUGFyYW1ldGVyTmFtZSwKKyAgICAgICAgICAgIE9NWF9PVVQgT01YX0lOREVYVFlQRSogcEluZGV4VHlwZSk7CisKKworICAgIC8qKiByZWZlciB0byBPTVhfR2V0U3RhdGUgaW4gT01YX2NvcmUuaCBvciB0aGUgT01YIElMIAorICAgICAgICBzcGVjaWZpY2F0aW9uIGZvciBkZXRhaWxzIG9uIHRoZSBHZXRTdGF0ZSBtZXRob2QuCisgICAgICovCisgICAgT01YX0VSUk9SVFlQRSAoKkdldFN0YXRlKSgKKyAgICAgICAgICAgIE9NWF9JTiAgT01YX0hBTkRMRVRZUEUgaENvbXBvbmVudCwKKyAgICAgICAgICAgIE9NWF9PVVQgT01YX1NUQVRFVFlQRSogcFN0YXRlKTsKKworICAgIAorICAgIC8qKiBUaGUgQ29tcG9uZW50VHVubmVsUmVxdWVzdCBtZXRob2Qgd2lsbCBpbnRlcmFjdCB3aXRoIGFub3RoZXIgT01YCisgICAgICAgIGNvbXBvbmVudCB0byBkZXRlcm1pbmUgaWYgdHVubmVsaW5nIGlzIHBvc3NpYmxlIGFuZCB0byBzZXR1cCB0aGUKKyAgICAgICAgdHVubmVsaW5nLiAgVGhlIHJldHVybiBjb2RlcyBmb3IgdGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgdG8gCisgICAgICAgIGRldGVybWluZSBpZiB0dW5uZWxpbmcgaXMgbm90IHBvc3NpYmxlLCBvciBpZiB0dW5uZWxpbmcgaXMgbm90CisgICAgICAgIHN1cHBvcnRlZC4gIAorICAgICAgICAKKyAgICAgICAgQmFzZSBwcm9maWxlIGNvbXBvbmVudHMgKGkuZS4gbm9uLWludGVyb3ApIGRvIG5vdCBzdXBwb3J0IHRoaXMKKyAgICAgICAgbWV0aG9kIGFuZCBzaG91bGQgcmV0dXJuIE9NWF9FcnJvck5vdEltcGxlbWVudGVkIAorCisgICAgICAgIFRoZSBpbnRlcm9wIHByb2ZpbGUgY29tcG9uZW50IE1VU1Qgc3VwcG9ydCB0dW5uZWxpbmcgdG8gYW5vdGhlciAKKyAgICAgICAgaW50ZXJvcCBwcm9maWxlIGNvbXBvbmVudCB3aXRoIGEgY29tcGF0aWJsZSBwb3J0IHBhcmFtZXRlcnMuICAKKyAgICAgICAgQSBjb21wb25lbnQgbWF5IGFsc28gc3VwcG9ydCBwcm9wcmlldGFyeSBjb21tdW5pY2F0aW9uLgorICAgICAgICAKKyAgICAgICAgSWYgcHJvcHJpZXRhcnkgY29tbXVuaWNhdGlvbiBpcyBzdXBwb3J0ZWQgdGhlIG5lZ290aWF0aW9uIG9mIAorICAgICAgICBwcm9wcmlldGFyeSBjb21tdW5pY2F0aW9uIGlzIGRvbmUgb3V0c2lkZSBvZiBPTVggaW4gYSB2ZW5kb3IgCisgICAgICAgIHNwZWNpZmljIHdheS4gSXQgaXMgb25seSByZXF1aXJlZCB0aGF0IHRoZSBwcm9wZXIgcmVzdWx0IGJlIAorICAgICAgICByZXR1cm5lZCBhbmQgdGhlIGRldGFpbHMgb2YgaG93IHRoZSBzZXR1cCBpcyBkb25lIGlzIGxlZnQgCisgICAgICAgIHRvIHRoZSBjb21wb25lbnQgaW1wbGVtZW50YXRpb24uICAKKyAgICAKKyAgICAgICAgV2hlbiB0aGlzIG1ldGhvZCBpcyBpbnZva2VkIHdoZW4gblBvcnQgaW4gYW4gb3V0cHV0IHBvcnQsIHRoZQorICAgICAgICBjb21wb25lbnQgd2lsbDoKKyAgICAgICAgMS4gIFBvcHVsYXRlIHRoZSBwVHVubmVsU2V0dXAgc3RydWN0dXJlIHdpdGggdGhlIG91dHB1dCBwb3J0J3MgCisgICAgICAgICAgICByZXF1aXJlbWVudHMgYW5kIGNvbnN0cmFpbnRzIGZvciB0aGUgdHVubmVsLgorCisgICAgICAgIFdoZW4gdGhpcyBtZXRob2QgaXMgaW52b2tlZCB3aGVuIG5Qb3J0IGluIGFuIGlucHV0IHBvcnQsIHRoZQorICAgICAgICBjb21wb25lbnQgd2lsbDoKKyAgICAgICAgMS4gIFF1ZXJ5IHRoZSBuZWNlc3NhcnkgcGFyYW1ldGVycyBmcm9tIHRoZSBvdXRwdXQgcG9ydCB0byAKKyAgICAgICAgICAgIGRldGVybWluZSBpZiB0aGUgcG9ydHMgYXJlIGNvbXBhdGlibGUgZm9yIHR1bm5lbGluZworICAgICAgICAyLiAgSWYgdGhlIHBvcnRzIGFyZSBjb21wYXRpYmxlLCB0aGUgY29tcG9uZW50IHNob3VsZCBzdG9yZQorICAgICAgICAgICAgdGhlIHR1bm5lbCBzdGVwIHByb3ZpZGVkIGJ5IHRoZSBvdXRwdXQgcG9ydAorICAgICAgICAzLiAgRGV0ZXJtaW5lIHdoaWNoIHBvcnQgKGVpdGhlciBpbnB1dCBvciBvdXRwdXQpIGlzIHRoZSBidWZmZXIKKyAgICAgICAgICAgIHN1cHBsaWVyLCBhbmQgY2FsbCBPTVhfU2V0UGFyYW1ldGVyIG9uIHRoZSBvdXRwdXQgcG9ydCB0bworICAgICAgICAgICAgaW5kaWNhdGUgdGhpcyBzZWxlY3Rpb24uCisgICAgICAgIAorICAgICAgICBUaGUgY29tcG9uZW50IHdpbGwgcmV0dXJuIGZyb20gdGhpcyBjYWxsIHdpdGhpbiA1IG1zZWMuCisgICAgCisgICAgICAgIEBwYXJhbSBbaW5dIGhDb21wCisgICAgICAgICAgICBIYW5kbGUgb2YgdGhlIGNvbXBvbmVudCB0byBiZSBhY2Nlc3NlZC4gIFRoaXMgaXMgdGhlIGNvbXBvbmVudAorICAgICAgICAgICAgaGFuZGxlIHJldHVybmVkIGJ5IHRoZSBjYWxsIHRvIHRoZSBPTVhfR2V0SGFuZGxlIG1ldGhvZC4KKyAgICAgICAgQHBhcmFtIFtpbl0gblBvcnQKKyAgICAgICAgICAgIG5Qb3J0IGlzIHVzZWQgdG8gc2VsZWN0IHRoZSBwb3J0IG9uIHRoZSBjb21wb25lbnQgdG8gYmUgdXNlZAorICAgICAgICAgICAgZm9yIHR1bm5lbGluZy4KKyAgICAgICAgQHBhcmFtIFtpbl0gaFR1bm5lbGVkQ29tcAorICAgICAgICAgICAgSGFuZGxlIG9mIHRoZSBjb21wb25lbnQgdG8gdHVubmVsIHdpdGguICBUaGlzIGlzIHRoZSBjb21wb25lbnQgCisgICAgICAgICAgICBoYW5kbGUgcmV0dXJuZWQgYnkgdGhlIGNhbGwgdG8gdGhlIE9NWF9HZXRIYW5kbGUgbWV0aG9kLiAgV2hlbgorICAgICAgICAgICAgdGhpcyBwYXJhbWV0ZXIgaXMgMHgwIHRoZSBjb21wb25lbnQgc2hvdWxkIHNldHVwIHRoZSBwb3J0IGZvcgorICAgICAgICAgICAgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBhcHBsaWNhdGlvbiAvIElMIENsaWVudC4KKyAgICAgICAgQHBhcmFtIFtpbl0gblBvcnRPdXRwdXQKKyAgICAgICAgICAgIG5Qb3J0T3V0cHV0IGlzIHVzZWQgaW5kaWNhdGUgdGhlIHBvcnQgdGhlIGNvbXBvbmVudCBzaG91bGQKKyAgICAgICAgICAgIHR1bm5lbCB3aXRoLgorICAgICAgICBAcGFyYW0gW2luXSBwVHVubmVsU2V0dXAKKyAgICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIHR1bm5lbCBzZXR1cCBzdHJ1Y3R1cmUuICBXaGVuIG5Qb3J0IGlzIGFuIG91dHB1dCBwb3J0CisgICAgICAgICAgICB0aGUgY29tcG9uZW50IHNob3VsZCBwb3B1bGF0ZSB0aGUgZmllbGRzIG9mIHRoaXMgc3RydWN0dXJlLiAgV2hlbgorICAgICAgICAgICAgV2hlbiBuUG9ydCBpcyBhbiBpbnB1dCBwb3J0IHRoZSBjb21wb25lbnQgc2hvdWxkIHJldmlldyB0aGUgc2V0dXAKKyAgICAgICAgICAgIHByb3ZpZGVkIGJ5IHRoZSBjb21wb25lbnQgd2l0aCB0aGUgb3V0cHV0IHBvcnQuCisgICAgICAgIEByZXR1cm4gT01YX0VSUk9SVFlQRQorICAgICAgICAgICAgSWYgdGhlIGNvbW1hbmQgc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVzLCB0aGUgcmV0dXJuIGNvZGUgd2lsbCBiZQorICAgICAgICAgICAgT01YX0Vycm9yTm9uZS4gIE90aGVyd2lzZSB0aGUgYXBwcm9wcmlhdGUgT01YIGVycm9yIHdpbGwgYmUgcmV0dXJuZWQuCisgICAgICAgIEBpbmdyb3VwIHR1bgorICAgICovCisKKyAgICBPTVhfRVJST1JUWVBFICgqQ29tcG9uZW50VHVubmVsUmVxdWVzdCkoCisgICAgICAgIE9NWF9JTiAgT01YX0hBTkRMRVRZUEUgaENvbXAsCisgICAgICAgIE9NWF9JTiAgT01YX1UzMiBuUG9ydCwKKyAgICAgICAgT01YX0lOICBPTVhfSEFORExFVFlQRSBoVHVubmVsZWRDb21wLAorICAgICAgICBPTVhfSU4gIE9NWF9VMzIgblR1bm5lbGVkUG9ydCwKKyAgICAgICAgT01YX0lOT1VUICBPTVhfVFVOTkVMU0VUVVBUWVBFKiBwVHVubmVsU2V0dXApOyAKKworICAgIC8qKiByZWZlciB0byBPTVhfVXNlQnVmZmVyIGluIE9NWF9jb3JlLmggb3IgdGhlIE9NWCBJTCAKKyAgICAgICAgc3BlY2lmaWNhdGlvbiBmb3IgZGV0YWlscyBvbiB0aGUgVXNlQnVmZmVyIG1ldGhvZC4KKyAgICAgICAgQGluZ3JvdXAgYnVmCisgICAgICovCisgICAgT01YX0VSUk9SVFlQRSAoKlVzZUJ1ZmZlcikoCisgICAgICAgICAgICBPTVhfSU4gT01YX0hBTkRMRVRZUEUgaENvbXBvbmVudCwKKyAgICAgICAgICAgIE9NWF9JTk9VVCBPTVhfQlVGRkVSSEVBREVSVFlQRSoqIHBwQnVmZmVySGRyLAorICAgICAgICAgICAgT01YX0lOIE9NWF9VMzIgblBvcnRJbmRleCwKKyAgICAgICAgICAgIE9NWF9JTiBPTVhfUFRSIHBBcHBQcml2YXRlLAorICAgICAgICAgICAgT01YX0lOIE9NWF9VMzIgblNpemVCeXRlcywKKyAgICAgICAgICAgIE9NWF9JTiBPTVhfVTgqIHBCdWZmZXIpOworCisgICAgLyoqIHJlZmVyIHRvIE9NWF9BbGxvY2F0ZUJ1ZmZlciBpbiBPTVhfY29yZS5oIG9yIHRoZSBPTVggSUwgCisgICAgICAgIHNwZWNpZmljYXRpb24gZm9yIGRldGFpbHMgb24gdGhlIEFsbG9jYXRlQnVmZmVyIG1ldGhvZC4KKyAgICAgICAgQGluZ3JvdXAgYnVmCisgICAgICovCisgICAgT01YX0VSUk9SVFlQRSAoKkFsbG9jYXRlQnVmZmVyKSgKKyAgICAgICAgICAgIE9NWF9JTiBPTVhfSEFORExFVFlQRSBoQ29tcG9uZW50LAorICAgICAgICAgICAgT01YX0lOT1VUIE9NWF9CVUZGRVJIRUFERVJUWVBFKiogcHBCdWZmZXIsCisgICAgICAgICAgICBPTVhfSU4gT01YX1UzMiBuUG9ydEluZGV4LAorICAgICAgICAgICAgT01YX0lOIE9NWF9QVFIgcEFwcFByaXZhdGUsCisgICAgICAgICAgICBPTVhfSU4gT01YX1UzMiBuU2l6ZUJ5dGVzKTsKKworICAgIC8qKiByZWZlciB0byBPTVhfRnJlZUJ1ZmZlciBpbiBPTVhfY29yZS5oIG9yIHRoZSBPTVggSUwgCisgICAgICAgIHNwZWNpZmljYXRpb24gZm9yIGRldGFpbHMgb24gdGhlIEZyZWVCdWZmZXIgbWV0aG9kLgorICAgICAgICBAaW5ncm91cCBidWYKKyAgICAgKi8KKyAgICBPTVhfRVJST1JUWVBFICgqRnJlZUJ1ZmZlcikoCisgICAgICAgICAgICBPTVhfSU4gIE9NWF9IQU5ETEVUWVBFIGhDb21wb25lbnQsCisgICAgICAgICAgICBPTVhfSU4gIE9NWF9VMzIgblBvcnRJbmRleCwKKyAgICAgICAgICAgIE9NWF9JTiAgT01YX0JVRkZFUkhFQURFUlRZUEUqIHBCdWZmZXIpOworCisgICAgLyoqIHJlZmVyIHRvIE9NWF9FbXB0eVRoaXNCdWZmZXIgaW4gT01YX2NvcmUuaCBvciB0aGUgT01YIElMIAorICAgICAgICBzcGVjaWZpY2F0aW9uIGZvciBkZXRhaWxzIG9uIHRoZSBFbXB0eVRoaXNCdWZmZXIgbWV0aG9kLgorICAgICAgICBAaW5ncm91cCBidWYKKyAgICAgKi8KKyAgICBPTVhfRVJST1JUWVBFICgqRW1wdHlUaGlzQnVmZmVyKSgKKyAgICAgICAgICAgIE9NWF9JTiAgT01YX0hBTkRMRVRZUEUgaENvbXBvbmVudCwKKyAgICAgICAgICAgIE9NWF9JTiAgT01YX0JVRkZFUkhFQURFUlRZUEUqIHBCdWZmZXIpOworCisgICAgLyoqIHJlZmVyIHRvIE9NWF9GaWxsVGhpc0J1ZmZlciBpbiBPTVhfY29yZS5oIG9yIHRoZSBPTVggSUwgCisgICAgICAgIHNwZWNpZmljYXRpb24gZm9yIGRldGFpbHMgb24gdGhlIEZpbGxUaGlzQnVmZmVyIG1ldGhvZC4KKyAgICAgICAgQGluZ3JvdXAgYnVmCisgICAgICovCisgICAgT01YX0VSUk9SVFlQRSAoKkZpbGxUaGlzQnVmZmVyKSgKKyAgICAgICAgICAgIE9NWF9JTiAgT01YX0hBTkRMRVRZUEUgaENvbXBvbmVudCwKKyAgICAgICAgICAgIE9NWF9JTiAgT01YX0JVRkZFUkhFQURFUlRZUEUqIHBCdWZmZXIpOworCisgICAgLyoqIFRoZSBTZXRDYWxsYmFja3MgbWV0aG9kIGlzIHVzZWQgYnkgdGhlIGNvcmUgdG8gc3BlY2lmeSB0aGUgY2FsbGJhY2sKKyAgICAgICAgc3RydWN0dXJlIGZyb20gdGhlIGFwcGxpY2F0aW9uIHRvIHRoZSBjb21wb25lbnQuICBUaGlzIGlzIGEgYmxvY2tpbmcKKyAgICAgICAgY2FsbC4gIFRoZSBjb21wb25lbnQgd2lsbCByZXR1cm4gZnJvbSB0aGlzIGNhbGwgd2l0aGluIDUgbXNlYy4KKyAgICAgICAgQHBhcmFtIFtpbl0gaENvbXBvbmVudAorICAgICAgICAgICAgSGFuZGxlIG9mIHRoZSBjb21wb25lbnQgdG8gYmUgYWNjZXNzZWQuICBUaGlzIGlzIHRoZSBjb21wb25lbnQKKyAgICAgICAgICAgIGhhbmRsZSByZXR1cm5lZCBieSB0aGUgY2FsbCB0byB0aGUgR2V0SGFuZGxlIGZ1bmN0aW9uLgorICAgICAgICBAcGFyYW0gW2luXSBwQ2FsbGJhY2tzCisgICAgICAgICAgICBwb2ludGVyIHRvIGFuIE9NWF9DQUxMQkFDS1RZUEUgc3RydWN0dXJlIHVzZWQgdG8gcHJvdmlkZSB0aGUgCisgICAgICAgICAgICBjYWxsYmFjayBpbmZvcm1hdGlvbiB0byB0aGUgY29tcG9uZW50CisgICAgICAgIEBwYXJhbSBbaW5dIHBBcHBEYXRhCisgICAgICAgICAgICBwb2ludGVyIHRvIGFuIGFwcGxpY2F0aW9uIGRlZmluZWQgdmFsdWUuICBJdCBpcyBhbnRpY2lwYXRlZCB0aGF0IAorICAgICAgICAgICAgdGhlIGFwcGxpY2F0aW9uIHdpbGwgcGFzcyBhIHBvaW50ZXIgdG8gYSBkYXRhIHN0cnVjdHVyZSBvciBhICJ0aGlzCisgICAgICAgICAgICBwb2ludGVyIiBpbiB0aGlzIGFyZWEgdG8gYWxsb3cgdGhlIGNhbGxiYWNrIChpbiB0aGUgYXBwbGljYXRpb24pCisgICAgICAgICAgICB0byBkZXRlcm1pbmUgdGhlIGNvbnRleHQgb2YgdGhlIGNhbGwKKyAgICAgICAgQHJldHVybiBPTVhfRVJST1JUWVBFCisgICAgICAgICAgICBJZiB0aGUgY29tbWFuZCBzdWNjZXNzZnVsbHkgZXhlY3V0ZXMsIHRoZSByZXR1cm4gY29kZSB3aWxsIGJlCisgICAgICAgICAgICBPTVhfRXJyb3JOb25lLiAgT3RoZXJ3aXNlIHRoZSBhcHByb3ByaWF0ZSBPTVggZXJyb3Igd2lsbCBiZSByZXR1cm5lZC4KKyAgICAgKi8KKyAgICBPTVhfRVJST1JUWVBFICgqU2V0Q2FsbGJhY2tzKSgKKyAgICAgICAgICAgIE9NWF9JTiAgT01YX0hBTkRMRVRZUEUgaENvbXBvbmVudCwKKyAgICAgICAgICAgIE9NWF9JTiAgT01YX0NBTExCQUNLVFlQRSogcENhbGxiYWNrcywgCisgICAgICAgICAgICBPTVhfSU4gIE9NWF9QVFIgcEFwcERhdGEpOworCisgICAgLyoqIENvbXBvbmVudERlSW5pdCBtZXRob2QgaXMgdXNlZCB0byBkZWluaXRpYWxpemUgdGhlIGNvbXBvbmVudAorICAgICAgICBwcm92aWRpbmcgYSBtZWFucyB0byBmcmVlIGFueSByZXNvdXJjZXMgYWxsb2NhdGVkIGF0IGNvbXBvbmVudAorICAgICAgICBpbml0aWFsaXphdGlvbi4gIE5PVEU6ICBBZnRlciB0aGlzIGNhbGwgdGhlIGNvbXBvbmVudCBoYW5kbGUgaXMKKyAgICAgICAgbm90IHZhbGlkIGZvciBmdXJ0aGVyIHVzZS4KKyAgICAgICAgQHBhcmFtIFtpbl0gaENvbXBvbmVudAorICAgICAgICAgICAgSGFuZGxlIG9mIHRoZSBjb21wb25lbnQgdG8gYmUgYWNjZXNzZWQuICBUaGlzIGlzIHRoZSBjb21wb25lbnQKKyAgICAgICAgICAgIGhhbmRsZSByZXR1cm5lZCBieSB0aGUgY2FsbCB0byB0aGUgR2V0SGFuZGxlIGZ1bmN0aW9uLgorICAgICAgICBAcmV0dXJuIE9NWF9FUlJPUlRZUEUKKyAgICAgICAgICAgIElmIHRoZSBjb21tYW5kIHN1Y2Nlc3NmdWxseSBleGVjdXRlcywgdGhlIHJldHVybiBjb2RlIHdpbGwgYmUKKyAgICAgICAgICAgIE9NWF9FcnJvck5vbmUuICBPdGhlcndpc2UgdGhlIGFwcHJvcHJpYXRlIE9NWCBlcnJvciB3aWxsIGJlIHJldHVybmVkLgorICAgICAqLworICAgIE9NWF9FUlJPUlRZUEUgKCpDb21wb25lbnREZUluaXQpKAorICAgICAgICAgICAgT01YX0lOICBPTVhfSEFORExFVFlQRSBoQ29tcG9uZW50KTsKKworICAgIC8qKiBAaW5ncm91cCBidWYgKi8KKyAgICBPTVhfRVJST1JUWVBFICgqVXNlRUdMSW1hZ2UpKAorICAgICAgICAgICAgT01YX0lOIE9NWF9IQU5ETEVUWVBFIGhDb21wb25lbnQsCisgICAgICAgICAgICBPTVhfSU5PVVQgT01YX0JVRkZFUkhFQURFUlRZUEUqKiBwcEJ1ZmZlckhkciwKKyAgICAgICAgICAgIE9NWF9JTiBPTVhfVTMyIG5Qb3J0SW5kZXgsCisgICAgICAgICAgICBPTVhfSU4gT01YX1BUUiBwQXBwUHJpdmF0ZSwKKyAgICAgICAgICAgIE9NWF9JTiB2b2lkKiBlZ2xJbWFnZSk7CisKKyAgICBPTVhfRVJST1JUWVBFICgqQ29tcG9uZW50Um9sZUVudW0pKAorICAgICAgICBPTVhfSU4gT01YX0hBTkRMRVRZUEUgaENvbXBvbmVudCwKKwkJT01YX09VVCBPTVhfVTggKmNSb2xlLAorCQlPTVhfSU4gT01YX1UzMiBuSW5kZXgpOworCit9IE9NWF9DT01QT05FTlRUWVBFOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYKKy8qIEZpbGUgRU9GICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL29wZW5tYXgvT01YX0NvbnRlbnRQaXBlLmggYi9pbmNsdWRlL21lZGlhL29wZW5tYXgvT01YX0NvbnRlbnRQaXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU5ZTRkYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbWVkaWEvb3Blbm1heC9PTVhfQ29udGVudFBpcGUuaApAQCAtMCwwICsxLDIxMiBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwOSBQYWNrZXRWaWRlbworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlcgorICogZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zCisgKiBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggVGhlIEtocm9ub3MgR3JvdXAgSW5jLiAKKyAqIAorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0CisgKiB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6IAorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAKKyAqIAorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAorICogVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKKyAqIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAKKyAqCisgKi8KKworLyoqIE9NWF9Db250ZW50UGlwZS5oIC0gT3Blbk1heCBJTCB2ZXJzaW9uIDEuMS4yCisgKiAgVGhlIE9NWF9Db250ZW50UGlwZSBoZWFkZXIgZmlsZSBjb250YWlucyB0aGUgZGVmaW5pdGlvbnMgdXNlZCB0byBkZWZpbmUKKyAqICB0aGUgcHVibGljIGludGVyZmFjZSBmb3IgY29udGVudCBwaXBsZXMuICBUaGlzIGhlYWRlciBmaWxlIGlzIGludGVuZGVkIHRvCisgKiAgYmUgdXNlZCBieSB0aGUgY29tcG9uZW50LgorICovCisKKyNpZm5kZWYgT01YX0NPTlRFTlRQSVBFX0gKKyNkZWZpbmUgT01YX0NPTlRFTlRQSVBFX0gKKworI2lmbmRlZiBLRF9FQUNDRVMKKy8qIE9wZW5LT0RFIGVycm9yIGNvZGVzLiBDUFJlc3VsdCB2YWx1ZXMgbWF5IGJlIHplcm8gKGluZGljYXRpbmcgc3VjY2VzcworICAgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzKSAqLworI2RlZmluZSBLRF9FQUNDRVMgKDEpCisjZGVmaW5lIEtEX0VBRERSSU5VU0UgKDIpCisjZGVmaW5lIEtEX0VBR0FJTiAoNSkKKyNkZWZpbmUgS0RfRUJBREYgKDcpCisjZGVmaW5lIEtEX0VCVVNZICg4KQorI2RlZmluZSBLRF9FQ09OTlJFRlVTRUQgKDkpCisjZGVmaW5lIEtEX0VDT05OUkVTRVQgKDEwKQorI2RlZmluZSBLRF9FREVBRExLICgxMSkKKyNkZWZpbmUgS0RfRURFU1RBRERSUkVRICgxMikKKyNkZWZpbmUgS0RfRVJBTkdFICgzNSkKKyNkZWZpbmUgS0RfRUVYSVNUICgxMykKKyNkZWZpbmUgS0RfRUZCSUcgKDE0KQorI2RlZmluZSBLRF9FSE9TVFVOUkVBQ0ggKDE1KQorI2RlZmluZSBLRF9FSU5WQUwgKDE3KQorI2RlZmluZSBLRF9FSU8gKDE4KQorI2RlZmluZSBLRF9FSVNDT05OICgyMCkKKyNkZWZpbmUgS0RfRUlTRElSICgyMSkKKyNkZWZpbmUgS0RfRU1GSUxFICgyMikKKyNkZWZpbmUgS0RfRU5BTUVUT09MT05HICgyMykKKyNkZWZpbmUgS0RfRU5PRU5UICgyNCkKKyNkZWZpbmUgS0RfRU5PTUVNICgyNSkKKyNkZWZpbmUgS0RfRU5PU1BDICgyNikKKyNkZWZpbmUgS0RfRU5PU1lTICgyNykKKyNkZWZpbmUgS0RfRU5PVENPTk4gKDI4KQorI2RlZmluZSBLRF9FUEVSTSAoMzMpCisjZGVmaW5lIEtEX0VUSU1FRE9VVCAoMzYpCisjZGVmaW5lIEtEX0VJTFNFUSAoMTkpCisjZW5kaWYKKworLyoqIE1hcCB0eXBlcyBmcm9tIE9NWCBzdGFuZGFyZCB0eXBlcyBvbmx5IGhlcmUgc28gaW50ZXJmYWNlIGlzIGFzIGdlbmVyaWMgYXMgcG9zc2libGUuICovCit0eXBlZGVmIE9NWF9VMzIgICAgQ1ByZXN1bHQ7Cit0eXBlZGVmIGNoYXIgKiAgICAgQ1BzdHJpbmc7ICAKK3R5cGVkZWYgdm9pZCAqICAgICBDUGhhbmRsZTsKK3R5cGVkZWYgT01YX1UzMiAgICBDUHVpbnQ7Cit0eXBlZGVmIE9NWF9TMzIgICAgQ1BpbnQ7ICAKK3R5cGVkZWYgY2hhciAgICAgICBDUGJ5dGU7ICAKK3R5cGVkZWYgT01YX0JPT0wgICBDUGJvb2w7CisKKy8qKiBlbnVtZXJhdGlvbiBvZiBvcmlnaW4gdHlwZXMgdXNlZCBpbiB0aGUgQ1BfUElQRVRZUEUncyBTZWVrIGZ1bmN0aW9uIAorICogQGluZ3JvdXAgY3AKKyAqLwordHlwZWRlZiBlbnVtIENQX09SSUdJTlRZUEUgeworICAgIENQX09yaWdpbkJlZ2luLCAgICAgIAorICAgIENQX09yaWdpbkN1ciwgICAgICAKKyAgICBDUF9PcmlnaW5FbmQsICAgICAgCisgICAgQ1BfT3JpZ2luS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIENQX09yaWdpblZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCisgICAgQ1BfT3JpZ2luTWF4ID0gMFg3RkZGRkZGRgorfSBDUF9PUklHSU5UWVBFOworCisvKiogZW51bWVyYXRpb24gb2YgY29udGFjdCBhY2Nlc3MgdHlwZXMgdXNlZCBpbiB0aGUgQ1BfUElQRVRZUEUncyBPcGVuIGZ1bmN0aW9uIAorICogQGluZ3JvdXAgY3AKKyAqLwordHlwZWRlZiBlbnVtIENQX0FDQ0VTU1RZUEUgeworICAgIENQX0FjY2Vzc1JlYWQsICAgICAgCisgICAgQ1BfQWNjZXNzV3JpdGUsICAKKyAgICBDUF9BY2Nlc3NSZWFkV3JpdGUgLCAgCisgICAgQ1BfQWNjZXNzS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIENQX0FjY2Vzc1ZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCisgICAgQ1BfQWNjZXNzTWF4ID0gMFg3RkZGRkZGRgorfSBDUF9BQ0NFU1NUWVBFOworCisvKiogZW51bWVyYXRpb24gb2YgcmVzdWx0cyByZXR1cm5lZCBieSB0aGUgQ1BfUElQRVRZUEUncyBDaGVja0F2YWlsYWJsZUJ5dGVzIGZ1bmN0aW9uIAorICogQGluZ3JvdXAgY3AKKyAqLwordHlwZWRlZiBlbnVtIENQX0NIRUNLQllURVNSRVNVTFRUWVBFCit7CisgICAgQ1BfQ2hlY2tCeXRlc09rLCAgICAgICAgICAgICAgICAgICAgLyoqPCBUaGVyZSBhcmUgYXQgbGVhc3QgdGhlIHJlcXVlc3QgbnVtYmVyIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIGJ5dGVzIGF2YWlsYWJsZSAqLworICAgIENQX0NoZWNrQnl0ZXNOb3RSZWFkeSwgICAgICAgICAgICAgIC8qKjwgVGhlIHBpcGUgaXMgc3RpbGwgcmV0cmlldmluZyBieXRlcyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgcHJlc2VudGx5IGxhY2tzIHN1ZmZpY2llbnQgYnl0ZXMuIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsaWVudCB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZXkgYXJlIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1ZmZpY2llbnQgYnl0ZXMgYXJlIGF2YWlsYWJsZS4gKi8KKyAgICBDUF9DaGVja0J5dGVzSW5zdWZmaWNpZW50Qnl0ZXMgICwgICAgIC8qKjwgVGhlIHBpcGUgaGFzIHJldHJpZXZlZCBhbGwgYnl0ZXMgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0IHRob3NlIGF2YWlsYWJsZSBhcmUgbGVzcyB0aGFuIHRob3NlIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZCAqLworICAgIENQX0NoZWNrQnl0ZXNBdEVuZE9mU3RyZWFtLCAgICAgICAgIC8qKjwgVGhlIHBpcGUgaGFzIHJlYWNoZWQgdGhlIGVuZCBvZiBzdHJlYW0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbm8gbW9yZSBieXRlcyBhcmUgYXZhaWxhYmxlLiAqLworICAgIENQX0NoZWNrQnl0ZXNPdXRPZkJ1ZmZlcnMsICAgICAgICAgIC8qKjwgQWxsIHJlYWQvd3JpdGUgYnVmZmVycyBhcmUgY3VycmVudGx5IGluIHVzZS4gKi8KKyAgICBDUF9DaGVja0J5dGVzS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIENQX0NoZWNrQnl0ZXNWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLworICAgIENQX0NoZWNrQnl0ZXNNYXggPSAwWDdGRkZGRkZGCit9IENQX0NIRUNLQllURVNSRVNVTFRUWVBFOworCisvKiogZW51bWVyYXRpb24gb2YgY29udGVudCBwaXBlIGV2ZW50cyBzZW50IHRvIHRoZSBjbGllbnQgY2FsbGJhY2suIAorICogQGluZ3JvdXAgY3AKKyAqLwordHlwZWRlZiBlbnVtIENQX0VWRU5UVFlQRXsKKyAgICBDUF9CeXRlc0F2YWlsYWJsZSwgICAgICAJICAgIC8qKiBieXRlcyByZXF1ZXN0ZWQgaW4gYSBDaGVja0F2YWlsYWJsZUJ5dGVzIGNhbGwgYXJlIG5vdyBhdmFpbGFibGUqLworICAgIENQX092ZXJmbG93LCAgCQkgICAgICAgICAgIC8qKiBlbnVtZXJhdGlvbiBvZiBjb250ZW50IHBpcGUgZXZlbnRzIHNlbnQgdG8gdGhlIGNsaWVudCBjYWxsYmFjayovCisgICAgQ1BfUGlwZURpc2Nvbm5lY3RlZCAgLCAgCQkgICAgLyoqIGVudW1lcmF0aW9uIG9mIGNvbnRlbnQgcGlwZSBldmVudHMgc2VudCB0byB0aGUgY2xpZW50IGNhbGxiYWNrKi8KKyAgICBDUF9FdmVudEtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKKyAgICBDUF9FdmVudFZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCisgICAgQ1BfRXZlbnRNYXggPSAwWDdGRkZGRkZGCit9IENQX0VWRU5UVFlQRTsKKworLyoqIGNvbnRlbnQgcGlwZSBkZWZpbml0aW9uIAorICogQGluZ3JvdXAgY3AKKyAqLwordHlwZWRlZiBzdHJ1Y3QgQ1BfUElQRVRZUEUKK3sKKyAgICAvKiogT3BlbiBhIGNvbnRlbnQgc3RyZWFtIGZvciByZWFkaW5nIG9yIHdyaXRpbmcuICovIAorICAgIENQcmVzdWx0ICgqT3BlbikoIENQaGFuZGxlKiBoQ29udGVudCwgQ1BzdHJpbmcgc3pVUkksIENQX0FDQ0VTU1RZUEUgZUFjY2VzcyApOworCisgICAgLyoqIENsb3NlIGEgY29udGVudCBzdHJlYW0uICovIAorICAgIENQcmVzdWx0ICgqQ2xvc2UpKCBDUGhhbmRsZSBoQ29udGVudCApOworCisgICAgLyoqIENyZWF0ZSBhIGNvbnRlbnQgc291cmNlIGFuZCBvcGVuIGl0IGZvciB3cml0aW5nLiAqLyAKKyAgICBDUHJlc3VsdCAoKkNyZWF0ZSkoIENQaGFuZGxlICpoQ29udGVudCwgQ1BzdHJpbmcgc3pVUkkgKTsKKworICAgIC8qKiBDaGVjayB0aGUgdGhhdCBzcGVjaWZpZWQgbnVtYmVyIG9mIGJ5dGVzIGFyZSBhdmFpbGFibGUgZm9yIHJlYWRpbmcgb3Igd3JpdGluZyAoZGVwZW5kaW5nIG9uIGFjY2VzcyB0eXBlKS4qLworICAgIENQcmVzdWx0ICgqQ2hlY2tBdmFpbGFibGVCeXRlcykoIENQaGFuZGxlIGhDb250ZW50LCBDUHVpbnQgbkJ5dGVzUmVxdWVzdGVkLCBDUF9DSEVDS0JZVEVTUkVTVUxUVFlQRSAqZVJlc3VsdCApOworCisgICAgLyoqIFNlZWsgdG8gY2VydGFpbiBwb3NpdGlvbiBpbiB0aGUgY29udGVudCByZWxhdGl2ZSB0byB0aGUgc3BlY2lmaWVkIG9yaWdpbi4gKi8KKyAgICBDUHJlc3VsdCAoKlNldFBvc2l0aW9uKSggQ1BoYW5kbGUgIGhDb250ZW50LCBDUGludCBuT2Zmc2V0LCBDUF9PUklHSU5UWVBFIGVPcmlnaW4pOworCisgICAgLyoqIFJldHJpZXZlIHRoZSBjdXJyZW50IHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUgY29udGVudC4gKi8KKyAgICBDUHJlc3VsdCAoKkdldFBvc2l0aW9uKSggQ1BoYW5kbGUgaENvbnRlbnQsIENQdWludCAqcFBvc2l0aW9uKTsKKworICAgIC8qKiBSZXRyaWV2ZSBkYXRhIG9mIHRoZSBzcGVjaWZpZWQgc2l6ZSBmcm9tIHRoZSBjb250ZW50IHN0cmVhbSAoYWR2YW5jZSBjb250ZW50IHBvaW50ZXIgYnkgc2l6ZSBvZiBkYXRhKS4KKyAgICAgICBOb3RlOiBwaXBlIGNsaWVudCBwcm92aWRlcyBwb2ludGVyLiBUaGlzIGZ1bmN0aW9uIGlzIGFwcHJvcHJpYXRlIGZvciBzbWFsbCBoaWdoIGZyZXF1ZW5jeSByZWFkcy4gKi8KKyAgICBDUHJlc3VsdCAoKlJlYWQpKCBDUGhhbmRsZSBoQ29udGVudCwgQ1BieXRlICpwRGF0YSwgQ1B1aW50IG5TaXplKTsgCisKKyAgICAvKiogUmV0cmlldmUgYSBidWZmZXIgYWxsb2NhdGVkIGJ5IHRoZSBwaXBlIHRoYXQgY29udGFpbnMgdGhlIHJlcXVlc3RlZCBudW1iZXIgb2YgYnl0ZXMuIAorICAgICAgIEJ1ZmZlciBjb250YWlucyB0aGUgbmV4dCBibG9jayBvZiBieXRlcywgYXMgc3BlY2lmaWVkIGJ5IG5TaXplLCBvZiB0aGUgY29udGVudC4gblNpemUgYWxzbworICAgICAgIHJldHVybnMgdGhlIHNpemUgb2YgdGhlIGJsb2NrIGFjdHVhbGx5IHJlYWQuIENvbnRlbnQgcG9pbnRlciBhZHZhbmNlcyB0aGUgYnkgdGhlIHJldHVybmVkIHNpemUuIAorICAgICAgIE5vdGU6IHBpcGUgcHJvdmlkZXMgcG9pbnRlci4gVGhpcyBmdW5jdGlvbiBpcyBhcHByb3ByaWF0ZSBmb3IgbGFyZ2UgcmVhZHMuIFRoZSBjbGllbnQgbXVzdCBjYWxsIAorICAgICAgIFJlbGVhc2VSZWFkQnVmZmVyIHdoZW4gZG9uZSB3aXRoIGJ1ZmZlci4gCisKKyAgICAgICBJbiBzb21lIGNhc2VzIHRoZSByZXF1ZXN0ZWQgYmxvY2sgbWF5IG5vdCByZXNpZGUgaW4gY29udGlndW91cyBtZW1vcnkgd2l0aGluIHRoZQorICAgICAgIHBpcGUgaW1wbGVtZW50YXRpb24uIEZvciBpbnN0YW5jZSBpZiB0aGUgcGlwZSBsZXZlcmFnZXMgYSBjaXJjdWxhciBidWZmZXIgdGhlbiB0aGUgcmVxdWVzdGVkIAorICAgICAgIGJsb2NrIG1heSBzdHJhZGRsZSB0aGUgYm91bmRhcnkgb2YgdGhlIGNpcmN1bGFyIGJ1ZmZlci4gQnkgZGVmYXVsdCBhIHBpcGUgaW1wbGVtZW50YXRpb24gCisgICAgICAgcGVyZm9ybXMgYSBjb3B5IGluIHRoaXMgY2FzZSB0byBwcm92aWRlIHRoZSBibG9jayB0byB0aGUgcGlwZSBjbGllbnQgaW4gb25lIGNvbnRpZ3VvdXMgYnVmZmVyLgorICAgICAgIElmLCBob3dldmVyLCB0aGUgY2xpZW50IHNldHMgYkZvcmJpZENvcHksIHRoZW4gdGhlIHBpcGUgcmV0dXJucyBvbmx5IHRob3NlIGJ5dGVzIHByZWNlZGluZyB0aGUgbWVtb3J5IAorICAgICAgIGJvdW5kYXJ5LiBIZXJlIHRoZSBjbGllbnQgbWF5IHJldHJpZXZlIHRoZSBkYXRhIGluIHNlZ21lbnRzIG92ZXIgc3VjY2Vzc2l2ZSBjYWxscy4gKi8KKyAgICBDUHJlc3VsdCAoKlJlYWRCdWZmZXIpKCBDUGhhbmRsZSBoQ29udGVudCwgQ1BieXRlICoqcHBCdWZmZXIsIENQdWludCAqblNpemUsIENQYm9vbCBiRm9yYmlkQ29weSk7CisKKyAgICAvKiogUmVsZWFzZSBhIGJ1ZmZlciBvYnRhaW5lZCBieSBSZWFkQnVmZmVyIGJhY2sgdG8gdGhlIHBpcGUuICovCisgICAgQ1ByZXN1bHQgKCpSZWxlYXNlUmVhZEJ1ZmZlcikoQ1BoYW5kbGUgaENvbnRlbnQsIENQYnl0ZSAqcEJ1ZmZlcik7CisKKyAgICAvKiogV3JpdGUgZGF0YSBvZiB0aGUgc3BlY2lmaWVkIHNpemUgdG8gdGhlIGNvbnRlbnQgKGFkdmFuY2UgY29udGVudCBwb2ludGVyIGJ5IHNpemUgb2YgZGF0YSkuCisgICAgICAgTm90ZTogcGlwZSBjbGllbnQgcHJvdmlkZXMgcG9pbnRlci4gVGhpcyBmdW5jdGlvbiBpcyBhcHByb3ByaWF0ZSBmb3Igc21hbGwgaGlnaCBmcmVxdWVuY3kgd3JpdGVzLiAqLworICAgIENQcmVzdWx0ICgqV3JpdGUpKCBDUGhhbmRsZSBoQ29udGVudCwgQ1BieXRlICpkYXRhLCBDUHVpbnQgblNpemUpOyAKKworICAgIC8qKiBSZXRyaWV2ZSBhIGJ1ZmZlciBhbGxvY2F0ZWQgYnkgdGhlIHBpcGUgdXNlZCB0byB3cml0ZSBkYXRhIHRvIHRoZSBjb250ZW50LiAKKyAgICAgICBDbGllbnQgd2lsbCBmaWxsIGJ1ZmZlciB3aXRoIG91dHB1dCBkYXRhLiBOb3RlOiBwaXBlIHByb3ZpZGVzIHBvaW50ZXIuIFRoaXMgZnVuY3Rpb24gaXMgYXBwcm9wcmlhdGUKKyAgICAgICBmb3IgbGFyZ2Ugd3JpdGVzLiBUaGUgY2xpZW50IG11c3QgY2FsbCBXcml0ZUJ1ZmZlciB3aGVuIGRvbmUgaXQgaGFzIGZpbGxlZCB0aGUgYnVmZmVyIHdpdGggZGF0YS4qLworICAgIENQcmVzdWx0ICgqR2V0V3JpdGVCdWZmZXIpKCBDUGhhbmRsZSBoQ29udGVudCwgQ1BieXRlICoqcHBCdWZmZXIsIENQdWludCBuU2l6ZSk7CisKKyAgICAvKiogRGVsaXZlciBhIGJ1ZmZlciBvYnRhaW5lZCB2aWEgR2V0V3JpdGVCdWZmZXIgdG8gdGhlIHBpcGUuIFBpcGUgd2lsbCB3cml0ZSB0aGUgCisgICAgICAgdGhlIGNvbnRlbnRzIG9mIHRoZSBidWZmZXIgdG8gY29udGVudCBhbmQgYWR2YW5jZSBjb250ZW50IHBvaW50ZXIgYnkgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciAqLworICAgIENQcmVzdWx0ICgqV3JpdGVCdWZmZXIpKCBDUGhhbmRsZSBoQ29udGVudCwgQ1BieXRlICpwQnVmZmVyLCBDUHVpbnQgbkZpbGxlZFNpemUpOworCisgICAgLyoqIFJlZ2lzdGVyIGEgcGVyLWhhbmRsZSBjbGllbnQgY2FsbGJhY2sgd2l0aCB0aGUgY29udGVudCBwaXBlLiAqLworICAgIENQcmVzdWx0ICgqUmVnaXN0ZXJDYWxsYmFjaykoIENQaGFuZGxlIGhDb250ZW50LCBDUHJlc3VsdCAoKkNsaWVudENhbGxiYWNrKShDUF9FVkVOVFRZUEUgZUV2ZW50LCBDUHVpbnQgaVBhcmFtKSk7CisKK30gQ1BfUElQRVRZUEU7CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL29wZW5tYXgvT01YX0NvcmUuaCBiL2luY2x1ZGUvbWVkaWEvb3Blbm1heC9PTVhfQ29yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmYjBmNmYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL21lZGlhL29wZW5tYXgvT01YX0NvcmUuaApAQCAtMCwwICsxLDE0NDggQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogQ29weXJpZ2h0IChDKSAxOTk4LTIwMDkgUGFja2V0VmlkZW8KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIKKyAqIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucworICogYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisvKgorICogQ29weXJpZ2h0IChjKSAyMDA4IFRoZSBLaHJvbm9zIEdyb3VwIEluYy4gCisgKiAKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdAorICogdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQorICogQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKKyAqIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCisgKiBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gCisgKgorICovCisKKy8qKiBPTVhfQ29yZS5oIC0gT3Blbk1heCBJTCB2ZXJzaW9uIDEuMS4yCisgKiAgVGhlIE9NWF9Db3JlIGhlYWRlciBmaWxlIGNvbnRhaW5zIHRoZSBkZWZpbml0aW9ucyB1c2VkIGJ5IGJvdGggdGhlCisgKiAgYXBwbGljYXRpb24gYW5kIHRoZSBjb21wb25lbnQgdG8gYWNjZXNzIGNvbW1vbiBpdGVtcy4KKyAqLworCisjaWZuZGVmIE9NWF9Db3JlX2gKKyNkZWZpbmUgT01YX0NvcmVfaAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKworLyogRWFjaCBPTVggaGVhZGVyIHNoYWxsIGluY2x1ZGUgYWxsIHJlcXVpcmVkIGhlYWRlciBmaWxlcyB0byBhbGxvdyB0aGUKKyAqICBoZWFkZXIgdG8gY29tcGlsZSB3aXRob3V0IGVycm9ycy4gIFRoZSBpbmNsdWRlcyBiZWxvdyBhcmUgcmVxdWlyZWQKKyAqICBmb3IgdGhpcyBoZWFkZXIgZmlsZSB0byBjb21waWxlIHN1Y2Nlc3NmdWxseSAKKyAqLworCisjaW5jbHVkZSA8T01YX0luZGV4Lmg+CisKKworLyoqIFRoZSBPTVhfQ09NTUFORFRZUEUgZW51bWVyYXRpb24gaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSBhY3Rpb24gaW4gdGhlCisgKiAgT01YX1NlbmRDb21tYW5kIG1hY3JvLiAgCisgKiAgQGluZ3JvdXAgY29yZQorICovCit0eXBlZGVmIGVudW0gT01YX0NPTU1BTkRUWVBFCit7CisgICAgT01YX0NvbW1hbmRTdGF0ZVNldCwgICAgLyoqPCBDaGFuZ2UgdGhlIGNvbXBvbmVudCBzdGF0ZSAqLworICAgIE9NWF9Db21tYW5kRmx1c2gsICAgICAgIC8qKjwgRmx1c2ggdGhlIGRhdGEgcXVldWUocykgb2YgYSBjb21wb25lbnQgKi8KKyAgICBPTVhfQ29tbWFuZFBvcnREaXNhYmxlLCAvKio8IERpc2FibGUgYSBwb3J0IG9uIGEgY29tcG9uZW50LiAqLworICAgIE9NWF9Db21tYW5kUG9ydEVuYWJsZSwgIC8qKjwgRW5hYmxlIGEgcG9ydCBvbiBhIGNvbXBvbmVudC4gKi8KKyAgICBPTVhfQ29tbWFuZE1hcmtCdWZmZXIsICAvKio8IE1hcmsgYSBjb21wb25lbnQvYnVmZmVyIGZvciBvYnNlcnZhdGlvbiAqLworICAgIE9NWF9Db21tYW5kS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIE9NWF9Db21tYW5kVmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KKyAgICBPTVhfQ29tbWFuZE1heCA9IDBYN0ZGRkZGRkYKK30gT01YX0NPTU1BTkRUWVBFOworCisKKworLyoqIFRoZSBPTVhfU1RBVEVUWVBFIGVudW1lcmF0aW9uIGlzIHVzZWQgdG8gaW5kaWNhdGUgb3IgY2hhbmdlIHRoZSBjb21wb25lbnQKKyAqICBzdGF0ZS4gIFRoaXMgZW51bWVyYXRpb24gcmVmbGVjdHMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGNvbXBvbmVudCB3aGVuCisgKiAgdXNlZCB3aXRoIHRoZSBPTVhfR2V0U3RhdGUgbWFjcm8gb3IgYmVjb21lcyB0aGUgcGFyYW1ldGVyIGluIGEgc3RhdGUgY2hhbmdlCisgKiAgY29tbWFuZCB3aGVuIHVzZWQgd2l0aCB0aGUgT01YX1NlbmRDb21tYW5kIG1hY3JvLgorICoKKyAqICBUaGUgY29tcG9uZW50IHdpbGwgYmUgaW4gdGhlIExvYWRlZCBzdGF0ZSBhZnRlciB0aGUgY29tcG9uZW50IGlzIGluaXRpYWxseQorICogIGxvYWRlZCBpbnRvIG1lbW9yeS4gIEluIHRoZSBMb2FkZWQgc3RhdGUsIHRoZSBjb21wb25lbnQgaXMgbm90IGFsbG93ZWQgdG8KKyAqICBhbGxvY2F0ZSBvciBob2xkIHJlc291cmNlcyBvdGhlciB0aGFuIHRvIGJ1aWxkIGl0J3MgaW50ZXJuYWwgcGFyYW1ldGVyCisgKiAgYW5kIGNvbmZpZ3VyYXRpb24gdGFibGVzLiAgVGhlIGFwcGxpY2F0aW9uIHdpbGwgc2VuZCBvbmUgb3IgbW9yZQorICogIFNldFBhcmFtZXRlcnMvR2V0UGFyYW1ldGVycyBhbmQgU2V0Q29uZmlnL0dldENvbmZpZyBjb21tYW5kcyB0byB0aGUKKyAqICBjb21wb25lbnQgYW5kIHRoZSBjb21wb25lbnQgd2lsbCByZWNvcmQgZWFjaCBvZiB0aGVzZSBwYXJhbWV0ZXIgYW5kCisgKiAgY29uZmlndXJhdGlvbiBjaGFuZ2VzIGZvciB1c2UgbGF0ZXIuICBXaGVuIHRoZSBhcHBsaWNhdGlvbiBzZW5kcyB0aGUKKyAqICBJZGxlIGNvbW1hbmQsIHRoZSBjb21wb25lbnQgd2lsbCBhY3F1aXJlIHRoZSByZXNvdXJjZXMgbmVlZGVkIGZvciB0aGUKKyAqICBzcGVjaWZpZWQgY29uZmlndXJhdGlvbiBhbmQgd2lsbCB0cmFuc2l0aW9uIHRvIHRoZSBpZGxlIHN0YXRlIGlmIHRoZQorICogIGFsbG9jYXRpb24gaXMgc3VjY2Vzc2Z1bC4gIElmIHRoZSBjb21wb25lbnQgY2Fubm90IHN1Y2Nlc3NmdWxseQorICogIHRyYW5zaXRpb24gdG8gdGhlIGlkbGUgc3RhdGUgZm9yIGFueSByZWFzb24sIHRoZSBzdGF0ZSBvZiB0aGUgY29tcG9uZW50CisgKiAgc2hhbGwgYmUgZnVsbHkgcm9sbGVkIGJhY2sgdG8gdGhlIExvYWRlZCBzdGF0ZSAoZS5nLiBhbGwgYWxsb2NhdGVkIAorICogIHJlc291cmNlcyBzaGFsbCBiZSByZWxlYXNlZCkuICBXaGVuIHRoZSBjb21wb25lbnQgcmVjZWl2ZXMgdGhlIGNvbW1hbmQKKyAqICB0byBnbyB0byB0aGUgRXhlY3V0aW5nIHN0YXRlLCBpdCBzaGFsbCBiZWdpbiBwcm9jZXNzaW5nIGJ1ZmZlcnMgYnkKKyAqICBzZW5kaW5nIGFsbCBpbnB1dCBidWZmZXJzIGl0IGhvbGRzIHRvIHRoZSBhcHBsaWNhdGlvbi4gIFdoaWxlCisgKiAgdGhlIGNvbXBvbmVudCBpcyBpbiB0aGUgSWRsZSBzdGF0ZSwgdGhlIGFwcGxpY2F0aW9uIG1heSBhbHNvIHNlbmQgdGhlCisgKiAgUGF1c2UgY29tbWFuZC4gIElmIHRoZSBjb21wb25lbnQgcmVjZWl2ZXMgdGhlIHBhdXNlIGNvbW1hbmQgd2hpbGUgaW4gdGhlCisgKiAgSWRsZSBzdGF0ZSwgdGhlIGNvbXBvbmVudCBzaGFsbCBzZW5kIGFsbCBpbnB1dCBidWZmZXJzIGl0IGhvbGRzIHRvIHRoZSAKKyAqICBhcHBsaWNhdGlvbiwgYnV0IHNoYWxsIG5vdCBiZWdpbiBwcm9jZXNzaW5nIGJ1ZmZlcnMuICBUaGlzIHdpbGwgYWxsb3cgdGhlCisgKiAgYXBwbGljYXRpb24gdG8gcHJlZmlsbCBidWZmZXJzLgorICogCisgKiAgQGluZ3JvdXAgY29tcAorICovCisKK3R5cGVkZWYgZW51bSBPTVhfU1RBVEVUWVBFCit7CisgICAgT01YX1N0YXRlSW52YWxpZCwgICAgICAvKio8IGNvbXBvbmVudCBoYXMgZGV0ZWN0ZWQgdGhhdCBpdCdzIGludGVybmFsIGRhdGEgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZXMgYXJlIGNvcnJ1cHRlZCB0byB0aGUgcG9pbnQgdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdCBjYW5ub3QgZGV0ZXJtaW5lIGl0J3Mgc3RhdGUgcHJvcGVybHkgKi8KKyAgICBPTVhfU3RhdGVMb2FkZWQsICAgICAgLyoqPCBjb21wb25lbnQgaGFzIGJlZW4gbG9hZGVkIGJ1dCBoYXMgbm90IGNvbXBsZXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXphdGlvbi4gIFRoZSBPTVhfU2V0UGFyYW1ldGVyIG1hY3JvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgT01YX0dldFBhcmFtZXRlciBtYWNybyBhcmUgdGhlIG9ubHkgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkIG1hY3JvcyBhbGxvd2VkIHRvIGJlIHNlbnQgdG8gdGhlIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQgaW4gdGhpcyBzdGF0ZS4gKi8KKyAgICBPTVhfU3RhdGVJZGxlLCAgICAgICAgLyoqPCBjb21wb25lbnQgaW5pdGlhbGl6YXRpb24gaGFzIGJlZW4gY29tcGxldGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3NmdWxseSBhbmQgdGhlIGNvbXBvbmVudCBpcyByZWFkeSB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBzdGFydC4gKi8KKyAgICBPTVhfU3RhdGVFeGVjdXRpbmcsICAgLyoqPCBjb21wb25lbnQgaGFzIGFjY2VwdGVkIHRoZSBzdGFydCBjb21tYW5kIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBwcm9jZXNzaW5nIGRhdGEgKGlmIGRhdGEgaXMgYXZhaWxhYmxlKSAqLworICAgIE9NWF9TdGF0ZVBhdXNlLCAgICAgICAvKio8IGNvbXBvbmVudCBoYXMgcmVjZWl2ZWQgcGF1c2UgY29tbWFuZCAqLworICAgIE9NWF9TdGF0ZVdhaXRGb3JSZXNvdXJjZXMsIC8qKjwgY29tcG9uZW50IGlzIHdhaXRpbmcgZm9yIHJlc291cmNlcywgZWl0aGVyIGFmdGVyIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVlbXB0aW9uIG9yIGJlZm9yZSBpdCBnZXRzIHRoZSByZXNvdXJjZXMgcmVxdWVzdGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgc3BlY2lmaWNhdGlvbiBmb3IgY29tcGxldGUgZGV0YWlscy4gKi8KKyAgICBPTVhfU3RhdGVLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICAgT01YX1N0YXRlVmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KKyAgICBPTVhfU3RhdGVNYXggPSAwWDdGRkZGRkZGCit9IE9NWF9TVEFURVRZUEU7CisKKy8qKiBUaGUgT01YX0VSUk9SVFlQRSBlbnVtZXJhdGlvbiBkZWZpbmVzIHRoZSBzdGFuZGFyZCBPTVggRXJyb3JzLiAgVGhlc2UgCisgKiAgZXJyb3JzIHNob3VsZCBjb3ZlciBtb3N0IG9mIHRoZSBjb21tb24gZmFpbHVyZSBjYXNlcy4gIEhvd2V2ZXIsIAorICogIHZlbmRvcnMgYXJlIGZyZWUgdG8gYWRkIGFkZGl0aW9uYWwgZXJyb3IgbWVzc2FnZXMgb2YgdGhlaXIgb3duIGFzIAorICogIGxvbmcgYXMgdGhleSBmb2xsb3cgdGhlc2UgcnVsZXM6CisgKiAgMS4gIFZlbmRvciBlcnJvciBtZXNzYWdlcyBzaGFsbCBiZSBpbiB0aGUgcmFuZ2Ugb2YgMHg5MDAwMDAwMCB0bworICogICAgICAweDkwMDBGRkZGLgorICogIDIuICBWZW5kb3IgZXJyb3IgbWVzc2FnZXMgc2hhbGwgYmUgZGVmaW5lZCBpbiBhIGhlYWRlciBmaWxlIHByb3ZpZGVkCisgKiAgICAgIHdpdGggdGhlIGNvbXBvbmVudC4gIE5vIGVycm9yIG1lc3NhZ2VzIGFyZSBhbGxvd2VkIHRoYXQgYXJlCisgKiAgICAgIG5vdCBkZWZpbmVkLgorICovCit0eXBlZGVmIGVudW0gT01YX0VSUk9SVFlQRQoreworICBPTVhfRXJyb3JOb25lID0gMCwKKworICAvKiogVGhlcmUgd2VyZSBpbnN1ZmZpY2llbnQgcmVzb3VyY2VzIHRvIHBlcmZvcm0gdGhlIHJlcXVlc3RlZCBvcGVyYXRpb24gKi8KKyAgT01YX0Vycm9ySW5zdWZmaWNpZW50UmVzb3VyY2VzID0gKE9NWF9TMzIpIDB4ODAwMDEwMDAsCisKKyAgLyoqIFRoZXJlIHdhcyBhbiBlcnJvciwgYnV0IHRoZSBjYXVzZSBvZiB0aGUgZXJyb3IgY291bGQgbm90IGJlIGRldGVybWluZWQgKi8KKyAgT01YX0Vycm9yVW5kZWZpbmVkID0gKE9NWF9TMzIpIDB4ODAwMDEwMDEsCisKKyAgLyoqIFRoZSBjb21wb25lbnQgbmFtZSBzdHJpbmcgd2FzIG5vdCB2YWxpZCAqLworICBPTVhfRXJyb3JJbnZhbGlkQ29tcG9uZW50TmFtZSA9IChPTVhfUzMyKSAweDgwMDAxMDAyLAorCisgIC8qKiBObyBjb21wb25lbnQgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUgc3RyaW5nIHdhcyBmb3VuZCAqLworICBPTVhfRXJyb3JDb21wb25lbnROb3RGb3VuZCA9IChPTVhfUzMyKSAweDgwMDAxMDAzLAorCisgIC8qKiBUaGUgY29tcG9uZW50IHNwZWNpZmllZCBkaWQgbm90IGhhdmUgYSAiT01YX0NvbXBvbmVudEluaXQiIG9yCisgICAgICAiT01YX0NvbXBvbmVudERlSW5pdCBlbnRyeSBwb2ludCAqLworICBPTVhfRXJyb3JJbnZhbGlkQ29tcG9uZW50ID0gKE9NWF9TMzIpIDB4ODAwMDEwMDQsCisKKyAgLyoqIE9uZSBvciBtb3JlIHBhcmFtZXRlcnMgd2VyZSBub3QgdmFsaWQgKi8KKyAgT01YX0Vycm9yQmFkUGFyYW1ldGVyID0gKE9NWF9TMzIpIDB4ODAwMDEwMDUsCisKKyAgLyoqIFRoZSByZXF1ZXN0ZWQgZnVuY3Rpb24gaXMgbm90IGltcGxlbWVudGVkICovCisgIE9NWF9FcnJvck5vdEltcGxlbWVudGVkID0gKE9NWF9TMzIpIDB4ODAwMDEwMDYsCisKKyAgLyoqIFRoZSBidWZmZXIgd2FzIGVtcHRpZWQgYmVmb3JlIHRoZSBuZXh0IGJ1ZmZlciB3YXMgcmVhZHkgKi8KKyAgT01YX0Vycm9yVW5kZXJmbG93ID0gKE9NWF9TMzIpIDB4ODAwMDEwMDcsCisKKyAgLyoqIFRoZSBidWZmZXIgd2FzIG5vdCBhdmFpbGFibGUgd2hlbiBpdCB3YXMgbmVlZGVkICovCisgIE9NWF9FcnJvck92ZXJmbG93ID0gKE9NWF9TMzIpIDB4ODAwMDEwMDgsCisKKyAgLyoqIFRoZSBoYXJkd2FyZSBmYWlsZWQgdG8gcmVzcG9uZCBhcyBleHBlY3RlZCAqLworICBPTVhfRXJyb3JIYXJkd2FyZSA9IChPTVhfUzMyKSAweDgwMDAxMDA5LAorCisgIC8qKiBUaGUgY29tcG9uZW50IGlzIGluIHRoZSBzdGF0ZSBPTVhfU3RhdGVJbnZhbGlkICovCisgIE9NWF9FcnJvckludmFsaWRTdGF0ZSA9IChPTVhfUzMyKSAweDgwMDAxMDBBLAorCisgIC8qKiBTdHJlYW0gaXMgZm91bmQgdG8gYmUgY29ycnVwdCAqLworICBPTVhfRXJyb3JTdHJlYW1Db3JydXB0ID0gKE9NWF9TMzIpIDB4ODAwMDEwMEIsCisKKyAgLyoqIFBvcnRzIGJlaW5nIGNvbm5lY3RlZCBhcmUgbm90IGNvbXBhdGlibGUgKi8KKyAgT01YX0Vycm9yUG9ydHNOb3RDb21wYXRpYmxlID0gKE9NWF9TMzIpIDB4ODAwMDEwMEMsCisKKyAgLyoqIFJlc291cmNlcyBhbGxvY2F0ZWQgdG8gYW4gaWRsZSBjb21wb25lbnQgaGF2ZSBiZWVuCisgICAgICBsb3N0IHJlc3VsdGluZyBpbiB0aGUgY29tcG9uZW50IHJldHVybmluZyB0byB0aGUgbG9hZGVkIHN0YXRlICovCisgIE9NWF9FcnJvclJlc291cmNlc0xvc3QgPSAoT01YX1MzMikgMHg4MDAwMTAwRCwKKworICAvKiogTm8gbW9yZSBpbmRpY2llcyBjYW4gYmUgZW51bWVyYXRlZCAqLworICBPTVhfRXJyb3JOb01vcmUgPSAoT01YX1MzMikgMHg4MDAwMTAwRSwKKworICAvKiogVGhlIGNvbXBvbmVudCBkZXRlY3RlZCBhIHZlcnNpb24gbWlzbWF0Y2ggKi8KKyAgT01YX0Vycm9yVmVyc2lvbk1pc21hdGNoID0gKE9NWF9TMzIpIDB4ODAwMDEwMEYsCisKKyAgLyoqIFRoZSBjb21wb25lbnQgaXMgbm90IHJlYWR5IHRvIHJldHVybiBkYXRhIGF0IHRoaXMgdGltZSAqLworICBPTVhfRXJyb3JOb3RSZWFkeSA9IChPTVhfUzMyKSAweDgwMDAxMDEwLAorCisgIC8qKiBUaGVyZSB3YXMgYSB0aW1lb3V0IHRoYXQgb2NjdXJyZWQgKi8KKyAgT01YX0Vycm9yVGltZW91dCA9IChPTVhfUzMyKSAweDgwMDAxMDExLAorCisgIC8qKiBUaGlzIGVycm9yIG9jY3VycyB3aGVuIHRyeWluZyB0byB0cmFuc2l0aW9uIGludG8gdGhlIHN0YXRlIHlvdSBhcmUgYWxyZWFkeSBpbiAqLworICBPTVhfRXJyb3JTYW1lU3RhdGUgPSAoT01YX1MzMikgMHg4MDAwMTAxMiwKKworICAvKiogUmVzb3VyY2VzIGFsbG9jYXRlZCB0byBhbiBleGVjdXRpbmcgb3IgcGF1c2VkIGNvbXBvbmVudCBoYXZlIGJlZW4gCisgICAgICBwcmVlbXB0ZWQsIGNhdXNpbmcgdGhlIGNvbXBvbmVudCB0byByZXR1cm4gdG8gdGhlIGlkbGUgc3RhdGUgKi8KKyAgT01YX0Vycm9yUmVzb3VyY2VzUHJlZW1wdGVkID0gKE9NWF9TMzIpIDB4ODAwMDEwMTMsIAorCisgIC8qKiBBIG5vbi1zdXBwbGllciBwb3J0IHNlbmRzIHRoaXMgZXJyb3IgdG8gdGhlIElMIGNsaWVudCAodmlhIHRoZSBFdmVudEhhbmRsZXIgY2FsbGJhY2spIAorICAgICAgZHVyaW5nIHRoZSBhbGxvY2F0aW9uIG9mIGJ1ZmZlcnMgKG9uIGEgdHJhbnNpdGlvbiBmcm9tIHRoZSBMT0FERUQgdG8gdGhlIElETEUgc3RhdGUgb3IKKyAgICAgIG9uIGEgcG9ydCByZXN0YXJ0KSB3aGVuIGl0IGRlZW1zIHRoYXQgaXQgaGFzIHdhaXRlZCBhbiB1bnVzdWFsbHkgbG9uZyB0aW1lIGZvciB0aGUgc3VwcGxpZXIgCisgICAgICB0byBzZW5kIGl0IGFuIGFsbG9jYXRlZCBidWZmZXIgdmlhIGEgVXNlQnVmZmVyIGNhbGwuICovCisgIE9NWF9FcnJvclBvcnRVbnJlc3BvbnNpdmVEdXJpbmdBbGxvY2F0aW9uID0gKE9NWF9TMzIpIDB4ODAwMDEwMTQsCisKKyAgLyoqIEEgbm9uLXN1cHBsaWVyIHBvcnQgc2VuZHMgdGhpcyBlcnJvciB0byB0aGUgSUwgY2xpZW50ICh2aWEgdGhlIEV2ZW50SGFuZGxlciBjYWxsYmFjaykgCisgICAgICBkdXJpbmcgdGhlIGRlYWxsb2NhdGlvbiBvZiBidWZmZXJzIChvbiBhIHRyYW5zaXRpb24gZnJvbSB0aGUgSURMRSB0byBMT0FERUQgc3RhdGUgb3IgCisgICAgICBvbiBhIHBvcnQgc3RvcCkgd2hlbiBpdCBkZWVtcyB0aGF0IGl0IGhhcyB3YWl0ZWQgYW4gdW51c3VhbGx5IGxvbmcgdGltZSBmb3IgdGhlIHN1cHBsaWVyIAorICAgICAgdG8gcmVxdWVzdCB0aGUgZGVhbGxvY2F0aW9uIG9mIGEgYnVmZmVyIGhlYWRlciB2aWEgYSBGcmVlQnVmZmVyIGNhbGwuICovCisgIE9NWF9FcnJvclBvcnRVbnJlc3BvbnNpdmVEdXJpbmdEZWFsbG9jYXRpb24gPSAoT01YX1MzMikgMHg4MDAwMTAxNSwKKworICAvKiogQSBzdXBwbGllciBwb3J0IHNlbmRzIHRoaXMgZXJyb3IgdG8gdGhlIElMIGNsaWVudCAodmlhIHRoZSBFdmVudEhhbmRsZXIgY2FsbGJhY2spIAorICAgICAgZHVyaW5nIHRoZSBzdG9wcGluZyBvZiBhIHBvcnQgKGVpdGhlciBvbiBhIHRyYW5zaXRpb24gZnJvbSB0aGUgSURMRSB0byBMT0FERUQgCisgICAgICBzdGF0ZSBvciBhIHBvcnQgc3RvcCkgd2hlbiBpdCBkZWVtcyB0aGF0IGl0IGhhcyB3YWl0ZWQgYW4gdW51c3VhbGx5IGxvbmcgdGltZSBmb3IgCisgICAgICB0aGUgbm9uLXN1cHBsaWVyIHRvIHJldHVybiBhIGJ1ZmZlciB2aWEgYW4gRW1wdHlUaGlzQnVmZmVyIG9yIEZpbGxUaGlzQnVmZmVyIGNhbGwuICovCisgIE9NWF9FcnJvclBvcnRVbnJlc3BvbnNpdmVEdXJpbmdTdG9wID0gKE9NWF9TMzIpIDB4ODAwMDEwMTYsCisKKyAgLyoqIEF0dGVtcHRpbmcgYSBzdGF0ZSB0cmFuc3Rpb24gdGhhdCBpcyBub3QgYWxsb3dlZCAqLworICBPTVhfRXJyb3JJbmNvcnJlY3RTdGF0ZVRyYW5zaXRpb24gPSAoT01YX1MzMikgMHg4MDAwMTAxNywKKworICAvKiBBdHRlbXB0aW5nIGEgY29tbWFuZCB0aGF0IGlzIG5vdCBhbGxvd2VkIGR1cmluZyB0aGUgcHJlc2VudCBzdGF0ZS4gKi8KKyAgT01YX0Vycm9ySW5jb3JyZWN0U3RhdGVPcGVyYXRpb24gPSAoT01YX1MzMikgMHg4MDAwMTAxOCwgCisKKyAgLyoqIFRoZSB2YWx1ZXMgZW5jYXBzdWxhdGVkIGluIHRoZSBwYXJhbWV0ZXIgb3IgY29uZmlnIHN0cnVjdHVyZSBhcmUgbm90IHN1cHBvcnRlZC4gKi8KKyAgT01YX0Vycm9yVW5zdXBwb3J0ZWRTZXR0aW5nID0gKE9NWF9TMzIpIDB4ODAwMDEwMTksCisKKyAgLyoqIFRoZSBwYXJhbWV0ZXIgb3IgY29uZmlnIGluZGljYXRlZCBieSB0aGUgZ2l2ZW4gaW5kZXggaXMgbm90IHN1cHBvcnRlZC4gKi8KKyAgT01YX0Vycm9yVW5zdXBwb3J0ZWRJbmRleCA9IChPTVhfUzMyKSAweDgwMDAxMDFBLAorCisgIC8qKiBUaGUgcG9ydCBpbmRleCBzdXBwbGllZCBpcyBpbmNvcnJlY3QuICovCisgIE9NWF9FcnJvckJhZFBvcnRJbmRleCA9IChPTVhfUzMyKSAweDgwMDAxMDFCLAorCisgIC8qKiBUaGUgcG9ydCBoYXMgbG9zdCBvbmUgb3IgbW9yZSBvZiBpdHMgYnVmZmVycyBhbmQgaXQgdGh1cyB1bnBvcHVsYXRlZC4gKi8KKyAgT01YX0Vycm9yUG9ydFVucG9wdWxhdGVkID0gKE9NWF9TMzIpIDB4ODAwMDEwMUMsCisKKyAgLyoqIENvbXBvbmVudCBzdXNwZW5kZWQgZHVlIHRvIHRlbXBvcmFyeSBsb3NzIG9mIHJlc291cmNlcyAqLworICBPTVhfRXJyb3JDb21wb25lbnRTdXNwZW5kZWQgPSAoT01YX1MzMikgMHg4MDAwMTAxRCwKKworICAvKiogQ29tcG9uZW50IHN1c3BlbmRlZCBkdWUgdG8gYW4gaW5hYmlsaXR5IHRvIGFjcXVpcmUgZHluYW1pYyByZXNvdXJjZXMgKi8KKyAgT01YX0Vycm9yRHluYW1pY1Jlc291cmNlc1VuYXZhaWxhYmxlID0gKE9NWF9TMzIpIDB4ODAwMDEwMUUsCisKKyAgLyoqIFdoZW4gdGhlIG1hY3JvYmxvY2sgZXJyb3IgcmVwb3J0aW5nIGlzIGVuYWJsZWQgdGhlIGNvbXBvbmVudCByZXR1cm5zIG5ldyBlcnJvciAKKyAgZm9yIGV2ZXJ5IGZyYW1lIHRoYXQgaGFzIGVycm9ycyAqLworICBPTVhfRXJyb3JNYkVycm9yc0luRnJhbWUgPSAoT01YX1MzMikgMHg4MDAwMTAxRiwKKworICAvKiogQSBjb21wb25lbnQgcmVwb3J0cyB0aGlzIGVycm9yIHdoZW4gaXQgY2Fubm90IHBhcnNlIG9yIGRldGVybWluZSB0aGUgZm9ybWF0IG9mIGFuIGlucHV0IHN0cmVhbS4gKi8KKyAgT01YX0Vycm9yRm9ybWF0Tm90RGV0ZWN0ZWQgPSAoT01YX1MzMikgMHg4MDAwMTAyMCwgCisKKyAgLyoqIFRoZSBjb250ZW50IG9wZW4gb3BlcmF0aW9uIGZhaWxlZC4gKi8KKyAgT01YX0Vycm9yQ29udGVudFBpcGVPcGVuRmFpbGVkID0gKE9NWF9TMzIpIDB4ODAwMDEwMjEsCisKKyAgLyoqIFRoZSBjb250ZW50IGNyZWF0aW9uIG9wZXJhdGlvbiBmYWlsZWQuICovCisgIE9NWF9FcnJvckNvbnRlbnRQaXBlQ3JlYXRpb25GYWlsZWQgPSAoT01YX1MzMikgMHg4MDAwMTAyMiwKKworICAvKiogU2VwYXJhdGUgdGFibGUgaW5mb3JtYXRpb24gaXMgYmVpbmcgdXNlZCAqLworICBPTVhfRXJyb3JTZXBlcmF0ZVRhYmxlc1VzZWQgPSAoT01YX1MzMikgMHg4MDAwMTAyMywKKworICAvKiogVHVubmVsaW5nIGlzIHVuc3VwcG9ydGVkIGJ5IHRoZSBjb21wb25lbnQqLworICBPTVhfRXJyb3JUdW5uZWxpbmdVbnN1cHBvcnRlZCA9IChPTVhfUzMyKSAweDgwMDAxMDI0LAorCisgIE9NWF9FcnJvcktocm9ub3NFeHRlbnNpb25zID0gKE9NWF9TMzIpMHg4RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKKyAgT01YX0Vycm9yVmVuZG9yU3RhcnRVbnVzZWQgPSAoT01YX1MzMikweDkwMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KKyAgT01YX0Vycm9yTWF4ID0gMHg3RkZGRkZGRgorfSBPTVhfRVJST1JUWVBFOworCisvKiogQGluZ3JvdXAgY29yZSAqLwordHlwZWRlZiBPTVhfRVJST1JUWVBFICgqIE9NWF9DT01QT05FTlRJTklUVFlQRSkoT01YX0lOICBPTVhfSEFORExFVFlQRSBoQ29tcG9uZW50KTsKKworLyoqIEBpbmdyb3VwIGNvcmUgKi8KK3R5cGVkZWYgc3RydWN0IE9NWF9DT01QT05FTlRSRUdJU1RFUlRZUEUKK3sKKyAgY29uc3QgY2hhciAgICAgICAgICAqIHBOYW1lOyAgICAgICAvKiBDb21wb25lbnQgbmFtZSwgMTI4IGJ5dGUgbGltaXQgKGluY2x1ZGluZyAnXDAnKSBhcHBsaWVzICovCisgIE9NWF9DT01QT05FTlRJTklUVFlQRSBwSW5pdGlhbGl6ZTsgLyogQ29tcG9uZW50IGluc3RhbmNlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uICovCit9IE9NWF9DT01QT05FTlRSRUdJU1RFUlRZUEU7CisKKy8qKiBAaW5ncm91cCBjb3JlICovCitleHRlcm4gT01YX0NPTVBPTkVOVFJFR0lTVEVSVFlQRSBPTVhfQ29tcG9uZW50UmVnaXN0ZXJlZFtdOworCisvKiogQGluZ3JvdXAgcnBtICovCit0eXBlZGVmIHN0cnVjdCBPTVhfUFJJT1JJVFlNR01UVFlQRSB7CisgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KKyBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAvKio8IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24gKi8KKyBPTVhfVTMyIG5Hcm91cFByaW9yaXR5OyAgICAgICAgICAgIC8qKjwgUHJpb3JpdHkgb2YgdGhlIGNvbXBvbmVudCBncm91cCAqLworIE9NWF9VMzIgbkdyb3VwSUQ7ICAgICAgICAgICAgICAgICAgLyoqPCBJRCBvZiB0aGUgY29tcG9uZW50IGdyb3VwICovCit9IE9NWF9QUklPUklUWU1HTVRUWVBFOworCisvKiBDb21wb25lbnQgbmFtZSBhbmQgUm9sZSBuYW1lcyBhcmUgbGltaXRlZCB0byAxMjggY2hhcmFjdGVycyBpbmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nICdcMCcuICovCisjZGVmaW5lIE9NWF9NQVhfU1RSSU5HTkFNRV9TSVpFIDEyOAorCisvKiogQGluZ3JvdXAgY29tcCAqLwordHlwZWRlZiBzdHJ1Y3QgT01YX1BBUkFNX0NPTVBPTkVOVFJPTEVUWVBFIHsKKyAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCisgICAgT01YX1U4IGNSb2xlW09NWF9NQVhfU1RSSU5HTkFNRV9TSVpFXTsgIC8qKjwgbmFtZSBvZiBzdGFuZGFyZCBjb21wb25lbnQgd2hpY2ggZGVmaW5lcyBjb21wb25lbnQgcm9sZSAqLworfSBPTVhfUEFSQU1fQ09NUE9ORU5UUk9MRVRZUEU7CisKKy8qKiBFbmQgb2YgU3RyZWFtIEJ1ZmZlciBGbGFnOiAKKyAgKgorICAqIEEgY29tcG9uZW50IHNldHMgRU9TIHdoZW4gaXQgaGFzIG5vIG1vcmUgZGF0YSB0byBlbWl0IG9uIGEgcGFydGljdWxhciAKKyAgKiBvdXRwdXQgcG9ydC4gVGh1cyBhbiBvdXRwdXQgcG9ydCBzaGFsbCBzZXQgRU9TIG9uIHRoZSBsYXN0IGJ1ZmZlciBpdCAKKyAgKiBlbWl0cy4gQSBjb21wb25lbnQncyBkZXRlcm1pbmF0aW9uIG9mIHdoZW4gYW4gb3V0cHV0IHBvcnQgc2hvdWxkIAorICAqIGNlYXNlIHNlbmRpbmcgZGF0YSBpcyBpbXBsZW1lbmF0aW9uIHNwZWNpZmljLgorICAqIEBpbmdyb3VwIGJ1ZgorICAqLworCisjZGVmaW5lIE9NWF9CVUZGRVJGTEFHX0VPUyAweDAwMDAwMDAxIAorCisvKiogU3RhcnQgVGltZSBCdWZmZXIgRmxhZzogCisgKgorICogVGhlIHNvdXJjZSBvZiBhIHN0cmVhbSAoZS5nLiBhIGRlbXV4IGNvbXBvbmVudCkgc2V0cyB0aGUgU1RBUlRUSU1FCisgKiBmbGFnIG9uIHRoZSBidWZmZXIgdGhhdCBjb250YWlucyB0aGUgc3RhcnRpbmcgdGltZXN0YW1wIGZvciB0aGUKKyAqIHN0cmVhbS4gVGhlIHN0YXJ0aW5nIHRpbWVzdGFtcCBjb3JyZXNwb25kcyB0byB0aGUgZmlyc3QgZGF0YSB0aGF0CisgKiBzaG91bGQgYmUgZGlzcGxheWVkIGF0IHN0YXJ0dXAgb3IgYWZ0ZXIgYSBzZWVrLgorICogVGhlIGZpcnN0IHRpbWVzdGFtcCBvZiB0aGUgc3RyZWFtIGlzIG5vdCBuZWNlc3NhcmlseSB0aGUgc3RhcnQgdGltZS4KKyAqIEZvciBpbnN0YW5jZSwgaW4gdGhlIGNhc2Ugb2YgYSBzZWVrIHRvIGEgcGFydGljdWxhciB2aWRlbyBmcmFtZSwgCisgKiB0aGUgdGFyZ2V0IGZyYW1lIG1heSBiZSBhbiBpbnRlcmZyYW1lLiBUaHVzIHRoZSBmaXJzdCBidWZmZXIgb2YgCisgKiB0aGUgc3RyZWFtIHdpbGwgYmUgdGhlIGludHJhLWZyYW1lIHByZWNlZGluZyB0aGUgdGFyZ2V0IGZyYW1lIGFuZAorICogdGhlIHN0YXJ0dGltZSB3aWxsIG9jY3VyIHdpdGggdGhlIHRhcmdldCBmcmFtZSAod2l0aCBhbnkgb3RoZXIKKyAqIHJlcXVpcmVkIGZyYW1lcyByZXF1aXJlZCB0byByZWNvbnN0cnVjdCB0aGUgdGFyZ2V0IGludGVydmVuaW5nKS4KKyAqCisgKiBUaGUgU1RBUlRUSU1FIGZsYWcgaXMgZGlyZWN0bHkgYXNzb2NpYXRlZCB3aXRoIHRoZSBidWZmZXIncyAKKyAqIHRpbWVzdGFtcCAnIHRodXMgaXRzIGFzc29jaWF0aW9uIHRvIGJ1ZmZlciBkYXRhIGFuZCBpdHMgCisgKiBwcm9wYWdhdGlvbiBpcyBpZGVudGljYWwgdG8gdGhlIHRpbWVzdGFtcCdzLgorICoKKyAqIFdoZW4gYSBTeW5jIENvbXBvbmVudCBjbGllbnQgcmVjZWl2ZXMgYSBidWZmZXIgd2l0aCB0aGUgCisgKiBTVEFSVFRJTUUgZmxhZyBpdCBzaGFsbCBwZXJmb3JtIGEgU2V0Q29uZmlnIG9uIGl0cyBzeW5jIHBvcnQgCisgKiB1c2luZyBPTVhfQ29uZmlnVGltZUNsaWVudFN0YXJ0VGltZSBhbmQgcGFzc2luZyB0aGUgYnVmZmVyJ3MKKyAqIHRpbWVzdGFtcC4KKyAqIAorICogQGluZ3JvdXAgYnVmCisgKi8KKworI2RlZmluZSBPTVhfQlVGRkVSRkxBR19TVEFSVFRJTUUgMHgwMDAwMDAwMgorCisgCisKKy8qKiBEZWNvZGUgT25seSBCdWZmZXIgRmxhZzogCisgKgorICogVGhlIHNvdXJjZSBvZiBhIHN0cmVhbSAoZS5nLiBhIGRlbXV4IGNvbXBvbmVudCkgc2V0cyB0aGUgREVDT0RFT05MWQorICogZmxhZyBvbiBhbnkgYnVmZmVyIHRoYXQgc2hvdWxkIHNoYWxsIGJlIGRlY29kZWQgYnV0IHNob3VsZCBub3QgYmUKKyAqIGRpc3BsYXllZC4gVGhpcyBmbGFnIGlzIHVzZWQsIGZvciBpbnN0YW5jZSwgd2hlbiBhIHNvdXJjZSBzZWVrcyB0byAKKyAqIGEgdGFyZ2V0IGludGVyZnJhbWUgdGhhdCByZXF1aXJlcyB0aGUgZGVjb2RlIG9mIGZyYW1lcyBwcmVjZWRpbmcgdGhlIAorICogdGFyZ2V0IHRvIGZhY2lsaXRhdGUgdGhlIHRhcmdldCdzIHJlY29uc3RydWN0aW9uLiBJbiB0aGlzIGNhc2UgdGhlIAorICogc291cmNlIHdvdWxkIGVtaXQgdGhlIGZyYW1lcyBwcmVjZWRpbmcgdGhlIHRhcmdldCBkb3duc3RyZWFtIAorICogYnV0IG1hcmsgdGhlbSBhcyBkZWNvZGUgb25seS4KKyAqCisgKiBUaGUgREVDT0RFT05MWSBpcyBhc3NvY2lhdGVkIHdpdGggYnVmZmVyIGRhdGEgYW5kIHByb3BhZ2F0ZWQgaW4gYSAKKyAqIG1hbm5lciBpZGVudGljYWwgdG8gdGhlIGJ1ZmZlciB0aW1lc3RhbXAuCisgKgorICogQSBjb21wb25lbnQgdGhhdCByZW5kZXJzIGRhdGEgc2hvdWxkIGlnbm9yZSBhbGwgYnVmZmVycyB3aXRoIAorICogdGhlIERFQ09ERU9OTFkgZmxhZyBzZXQuCisgKiAKKyAqIEBpbmdyb3VwIGJ1ZgorICovCisKKyNkZWZpbmUgT01YX0JVRkZFUkZMQUdfREVDT0RFT05MWSAweDAwMDAwMDA0CisKKworLyogRGF0YSBDb3JydXB0IEZsYWc6IFRoaXMgZmxhZyBpcyBzZXQgd2hlbiB0aGUgSUwgY2xpZW50IGJlbGlldmVzIHRoZSBkYXRhIGluIHRoZSBhc3NvY2lhdGVkIGJ1ZmZlciBpcyBjb3JydXB0IAorICogQGluZ3JvdXAgYnVmCisgKi8KKworI2RlZmluZSBPTVhfQlVGRkVSRkxBR19EQVRBQ09SUlVQVCAweDAwMDAwMDA4CisKKy8qIEVuZCBvZiBGcmFtZTogVGhlIGJ1ZmZlciBjb250YWlucyBleGFjdGx5IG9uZSBlbmQgb2YgZnJhbWUgYW5kIG5vIGRhdGEKKyAqICBvY2N1cnMgYWZ0ZXIgdGhlIGVuZCBvZiBmcmFtZS4gVGhpcyBmbGFnIGlzIGFuIG9wdGlvbmFsIGhpbnQuIFRoZSBhYnNlbmNlCisgKiAgb2YgdGhpcyBmbGFnIGRvZXMgbm90IGltcGx5IHRoZSBhYnNlbmNlIG9mIGFuIGVuZCBvZiBmcmFtZSB3aXRoaW4gdGhlIGJ1ZmZlci4gCisgKiBAaW5ncm91cCBidWYKKyovCisjZGVmaW5lIE9NWF9CVUZGRVJGTEFHX0VORE9GRlJBTUUgMHgwMDAwMDAxMAorCisvKiBTeW5jIEZyYW1lIEZsYWc6IFRoaXMgZmxhZyBpcyBzZXQgd2hlbiB0aGUgYnVmZmVyIGNvbnRlbnQgY29udGFpbnMgYSBjb2RlZCBzeW5jIGZyYW1lICcgCisgKiAgYSBmcmFtZSB0aGF0IGhhcyBubyBkZXBlbmRlbmN5IG9uIGFueSBvdGhlciBmcmFtZSBpbmZvcm1hdGlvbiAKKyAqICBAaW5ncm91cCBidWYKKyAqLworI2RlZmluZSBPTVhfQlVGRkVSRkxBR19TWU5DRlJBTUUgMHgwMDAwMDAyMAorCisvKiBFeHRyYSBkYXRhIHByZXNlbnQgZmxhZzogdGhlcmUgaXMgZXh0cmEgZGF0YSBhcHBlbmRlZCB0byB0aGUgZGF0YSBzdHJlYW0KKyAqIHJlc2lkaW5nIGluIHRoZSBidWZmZXIgCisgKiBAaW5ncm91cCBidWYgIAorICovCisjZGVmaW5lIE9NWF9CVUZGRVJGTEFHX0VYVFJBREFUQSAweDAwMDAwMDQwCisKKy8qKiBDb2RlYyBDb25maWcgQnVmZmVyIEZsYWc6IAorKiBPTVhfQlVGRkVSRkxBR19DT0RFQ0NPTkZJRyBpcyBhbiBvcHRpb25hbCBmbGFnIHRoYXQgaXMgc2V0IGJ5IGFuCisqIG91dHB1dCBwb3J0IHdoZW4gYWxsIGJ5dGVzIGluIHRoZSBidWZmZXIgZm9ybSBwYXJ0IG9yIGFsbCBvZiBhIHNldCBvZgorKiBjb2RlYyBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGRhdGEuICBFeGFtcGxlcyBpbmNsdWRlIFNQUy9QUFMgbmFsIHVuaXRzCisqIGZvciBPTVhfVklERU9fQ29kaW5nQVZDIG9yIEF1ZGlvU3BlY2lmaWNDb25maWcgZGF0YSBmb3IKKyogT01YX0FVRElPX0NvZGluZ0FBQy4gIEFueSBjb21wb25lbnQgdGhhdCBmb3IgYSBnaXZlbiBzdHJlYW0gc2V0cyAKKyogT01YX0JVRkZFUkZMQUdfQ09ERUNDT05GSUcgc2hhbGwgbm90IG1peCBjb2RlYyBjb25maWd1cmF0aW9uIGJ5dGVzCisqIHdpdGggZnJhbWUgZGF0YSBpbiB0aGUgc2FtZSBidWZmZXIsIGFuZCBzaGFsbCBzZW5kIGFsbCBidWZmZXJzCisqIGNvbnRhaW5pbmcgY29kZWMgY29uZmlndXJhdGlvbiBieXRlcyBiZWZvcmUgYW55IGJ1ZmZlcnMgY29udGFpbmluZworKiBmcmFtZSBkYXRhIHRoYXQgdGhvc2UgY29uZmlndXJhdGlvbnMgYnl0ZXMgZGVzY3JpYmUuCisqIElmIHRoZSBzdHJlYW0gZm9ybWF0IGZvciBhIHBhcnRpY3VsYXIgY29kZWMgaGFzIGEgZnJhbWUgc3BlY2lmaWMKKyogaGVhZGVyIGF0IHRoZSBzdGFydCBvZiBlYWNoIGZyYW1lLCBmb3IgZXhhbXBsZSBPTVhfQVVESU9fQ29kaW5nTVAzIG9yCisqIE9NWF9BVURJT19Db2RpbmdBQUMgaW4gQURUUyBtb2RlLCB0aGVuIHRoZXNlIHNoYWxsIGJlIHByZXNlbnRlZCBhcworKiBub3JtYWwgd2l0aG91dCBzZXR0aW5nIE9NWF9CVUZGRVJGTEFHX0NPREVDQ09ORklHLgorICogQGluZ3JvdXAgYnVmCisgKi8KKyNkZWZpbmUgT01YX0JVRkZFUkZMQUdfQ09ERUNDT05GSUcgMHgwMDAwMDA4MAorCisKKworLyoqIEBpbmdyb3VwIGJ1ZiAqLwordHlwZWRlZiBzdHJ1Y3QgT01YX0JVRkZFUkhFQURFUlRZUEUKK3sKKyAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCisgICAgT01YX1U4KiBwQnVmZmVyOyAgICAgICAgICAgIC8qKjwgUG9pbnRlciB0byBhY3R1YWwgYmxvY2sgb2YgbWVtb3J5IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgaXMgYWN0aW5nIGFzIHRoZSBidWZmZXIgKi8KKyAgICBPTVhfVTMyIG5BbGxvY0xlbjsgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBidWZmZXIgYWxsb2NhdGVkLCBpbiBieXRlcyAqLworICAgIE9NWF9VMzIgbkZpbGxlZExlbjsgICAgICAgICAvKio8IG51bWJlciBvZiBieXRlcyBjdXJyZW50bHkgaW4gdGhlIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciAqLworICAgIE9NWF9VMzIgbk9mZnNldDsgICAgICAgICAgICAvKio8IHN0YXJ0IG9mZnNldCBvZiB2YWxpZCBkYXRhIGluIGJ5dGVzIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc3RhcnQgb2YgdGhlIGJ1ZmZlciAqLworICAgIE9NWF9QVFIgcEFwcFByaXZhdGU7ICAgICAgICAvKio8IHBvaW50ZXIgdG8gYW55IGRhdGEgdGhlIGFwcGxpY2F0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FudHMgdG8gYXNzb2NpYXRlIHdpdGggdGhpcyBidWZmZXIgKi8KKyAgICBPTVhfUFRSIHBQbGF0Zm9ybVByaXZhdGU7ICAgLyoqPCBwb2ludGVyIHRvIGFueSBkYXRhIHRoZSBwbGF0Zm9ybQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbnRzIHRvIGFzc29jaWF0ZSB3aXRoIHRoaXMgYnVmZmVyICovIAorICAgIE9NWF9QVFIgcElucHV0UG9ydFByaXZhdGU7ICAvKio8IHBvaW50ZXIgdG8gYW55IGRhdGEgdGhlIGlucHV0IHBvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YW50cyB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIGJ1ZmZlciAqLworICAgIE9NWF9QVFIgcE91dHB1dFBvcnRQcml2YXRlOyAvKio8IHBvaW50ZXIgdG8gYW55IGRhdGEgdGhlIG91dHB1dCBwb3J0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FudHMgdG8gYXNzb2NpYXRlIHdpdGggdGhpcyBidWZmZXIgKi8KKyAgICBPTVhfSEFORExFVFlQRSBoTWFya1RhcmdldENvbXBvbmVudDsgLyoqPCBUaGUgY29tcG9uZW50IHRoYXQgd2lsbCBnZW5lcmF0ZSBhIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmsgZXZlbnQgdXBvbiBwcm9jZXNzaW5nIHRoaXMgYnVmZmVyLiAqLworICAgIE9NWF9QVFIgcE1hcmtEYXRhOyAgICAgICAgICAvKio8IEFwcGxpY2F0aW9uIHNwZWNpZmljIGRhdGEgYXNzb2NpYXRlZCB3aXRoIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBtYXJrIHNlbnQgb24gYSBtYXJrIGV2ZW50IHRvIGRpc2FtYmlndWF0ZSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIG1hcmsgZnJvbSBvdGhlcnMuICovCisgICAgT01YX1UzMiBuVGlja0NvdW50OyAgICAgICAgIC8qKjwgT3B0aW9uYWwgZW50cnkgdGhhdCB0aGUgY29tcG9uZW50IGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uIGNhbiB1cGRhdGUgd2l0aCBhIHRpY2sgY291bnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIHRoZXkgYWNjZXNzIHRoZSBjb21wb25lbnQuICBUaGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgc2hvdWxkIGJlIGluIG1pY3Jvc2Vjb25kcy4gIFNpbmNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBpcyBhIHZhbHVlIHJlbGF0aXZlIHRvIGFuIGFyYml0cmFyeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0aW5nIHBvaW50LCB0aGlzIHZhbHVlIGNhbm5vdCBiZSB1c2VkIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGRldGVybWluZSBhYnNvbHV0ZSB0aW1lLiAgVGhpcyBpcyBhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsIGVudHJ5IGFuZCBub3QgYWxsIGNvbXBvbmVudHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIHVwZGF0ZSBpdC4qLworIE9NWF9USUNLUyBuVGltZVN0YW1wOyAgICAgICAgICAvKio8IFRpbWVzdGFtcCBjb3JyZXNwb25kaW5nIHRvIHRoZSBzYW1wbGUgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRpbmcgYXQgdGhlIGZpcnN0IGxvZ2ljYWwgc2FtcGxlIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kYXJ5IGluIHRoZSBidWZmZXIuIFRpbWVzdGFtcHMgb2YgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc2l2ZSBzYW1wbGVzIHdpdGhpbiB0aGUgYnVmZmVyIG1heQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlIGluZmVycmVkIGJ5IGFkZGluZyB0aGUgZHVyYXRpb24gb2YgdGhlIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBwcmVjZWRpbmcgYnVmZmVyIHRvIHRoZSB0aW1lc3RhbXAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgcHJlY2VkaW5nIGJ1ZmZlci4qLworICBPTVhfVTMyICAgICBuRmxhZ3M7ICAgICAgICAgICAvKio8IGJ1ZmZlciBzcGVjaWZpYyBmbGFncyAqLworICBPTVhfVTMyIG5PdXRwdXRQb3J0SW5kZXg7ICAgICAvKio8IFRoZSBpbmRleCBvZiB0aGUgb3V0cHV0IHBvcnQgKGlmIGFueSkgdXNpbmcgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBidWZmZXIgKi8KKyAgT01YX1UzMiBuSW5wdXRQb3J0SW5kZXg7ICAgICAgLyoqPCBUaGUgaW5kZXggb2YgdGhlIGlucHV0IHBvcnQgKGlmIGFueSkgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGJ1ZmZlciAqLworfSBPTVhfQlVGRkVSSEVBREVSVFlQRTsKKworLyoqIFRoZSBPTVhfRVhUUkFEQVRBVFlQRSBlbnVtZXJhdGlvbiBpcyB1c2VkIHRvIGRlZmluZSB0aGUgCisgKiBwb3NzaWJsZSBleHRyYSBkYXRhIHBheWxvYWQgdHlwZXMuCisgKiBOQjogdGhpcyBlbnVtIGlzIGJpbmFyeSBiYWNrd2FyZHMgY29tcGF0aWJsZSB3aXRoIHRoZSBwcmV2aW91cworICogT01YX0VYVFJBREFUQV9RVUFOVCBkZWZpbmUuICBUaGlzIHNob3VsZCBiZSByZXBsYWNlZCB3aXRoCisgKiBPTVhfRXh0cmFEYXRhUXVhbnRpemF0aW9uLgorICovCit0eXBlZGVmIGVudW0gT01YX0VYVFJBREFUQVRZUEUKK3sKKyAgIE9NWF9FeHRyYURhdGFOb25lID0gMCwgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgSW5kaWNhdGVzIHRoYXQgbm8gbW9yZSBleHRyYSBkYXRhIHNlY3Rpb25zIGZvbGxvdyAqLyAgICAgICAgCisgICBPTVhfRXh0cmFEYXRhUXVhbnRpemF0aW9uLCAgICAgICAgICAgICAgICAgICAvKio8IFRoZSBkYXRhIHBheWxvYWQgY29udGFpbnMgcXVhbnRpemF0aW9uIGRhdGEgKi8KKyAgIE9NWF9FeHRyYURhdGFLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICBPTVhfRXh0cmFEYXRhVmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KKyAgIE9NWF9FeHRyYURhdGFNYXggPSAweDdGRkZGRkZGCit9IE9NWF9FWFRSQURBVEFUWVBFOworCisKK3R5cGVkZWYgc3RydWN0IE9NWF9PVEhFUl9FWFRSQURBVEFUWVBFICB7CisgICAgT01YX1UzMiBuU2l6ZTsKKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAgICAgICAgICAgICAgCisgICAgT01YX1UzMiBuUG9ydEluZGV4OworICAgIE9NWF9FWFRSQURBVEFUWVBFIGVUeXBlOyAgICAgICAvKiBFeHRyYSBEYXRhIHR5cGUgKi8KKyAgICBPTVhfVTMyIG5EYXRhU2l6ZTsgICAvKiBTaXplIG9mIHRoZSBzdXBwb3J0aW5nIGRhdGEgdG8gZm9sbG93ICovCisgICAgT01YX1U4ICBkYXRhWzFdOyAgICAgLyogU3VwcG9ydGluZyBkYXRhIGhpbnQgICovCit9IE9NWF9PVEhFUl9FWFRSQURBVEFUWVBFOworCisvKiogQGluZ3JvdXAgY29tcCAqLwordHlwZWRlZiBzdHJ1Y3QgT01YX1BPUlRfUEFSQU1fVFlQRSB7CisgICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAgIC8qKjwgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovCisgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAgIC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLworICAgIE9NWF9VMzIgblBvcnRzOyAgICAgICAgICAgICAvKio8IFRoZSBudW1iZXIgb2YgcG9ydHMgZm9yIHRoaXMgY29tcG9uZW50ICovCisgICAgT01YX1UzMiBuU3RhcnRQb3J0TnVtYmVyOyAgIC8qKiBmaXJzdCBwb3J0IG51bWJlciBmb3IgdGhpcyB0eXBlIG9mIHBvcnQgKi8KK30gT01YX1BPUlRfUEFSQU1fVFlQRTsgCisKKy8qKiBAaW5ncm91cCBjb21wICovCit0eXBlZGVmIGVudW0gT01YX0VWRU5UVFlQRQoreworICAgIE9NWF9FdmVudENtZENvbXBsZXRlLCAgICAgICAgIC8qKjwgY29tcG9uZW50IGhhcyBzdWNlc3NmdWxseSBjb21wbGV0ZWQgYSBjb21tYW5kICovCisgICAgT01YX0V2ZW50RXJyb3IsICAgICAgICAgICAgICAgLyoqPCBjb21wb25lbnQgaGFzIGRldGVjdGVkIGFuIGVycm9yIGNvbmRpdGlvbiAqLworICAgIE9NWF9FdmVudE1hcmssICAgICAgICAgICAgICAgIC8qKjwgY29tcG9uZW50IGhhcyBkZXRlY3RlZCBhIGJ1ZmZlciBtYXJrICovCisgICAgT01YX0V2ZW50UG9ydFNldHRpbmdzQ2hhbmdlZCwgLyoqPCBjb21wb25lbnQgaXMgcmVwb3J0ZWQgYSBwb3J0IHNldHRpbmdzIGNoYW5nZSAqLworICAgIE9NWF9FdmVudEJ1ZmZlckZsYWcsICAgICAgICAgIC8qKjwgY29tcG9uZW50IGhhcyBkZXRlY3RlZCBhbiBFT1MgKi8gCisgICAgT01YX0V2ZW50UmVzb3VyY2VzQWNxdWlyZWQsICAgLyoqPCBjb21wb25lbnQgaGFzIGJlZW4gZ3JhbnRlZCByZXNvdXJjZXMgYW5kIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IHN0YXJ0aW5nIHRoZSBzdGF0ZSBjaGFuZ2UgZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT01YX1N0YXRlV2FpdEZvclJlc291cmNlcyB0byBPTVhfU3RhdGVJZGxlLiAqLworICAgT01YX0V2ZW50Q29tcG9uZW50UmVzdW1lZCwgICAgIC8qKjwgQ29tcG9uZW50IHJlc3VtZWQgZHVlIHRvIHJlYWNxdWlzaXRpb24gb2YgcmVzb3VyY2VzICovCisgICBPTVhfRXZlbnREeW5hbWljUmVzb3VyY2VzQXZhaWxhYmxlLCAvKio8IENvbXBvbmVudCBoYXMgYWNxdWlyZWQgcHJldmlvdXNseSB1bmF2YWlsYWJsZSBkeW5hbWljIHJlc291cmNlcyAqLworICAgT01YX0V2ZW50UG9ydEZvcm1hdERldGVjdGVkLCAgICAgIC8qKjwgQ29tcG9uZW50IGhhcyBkZXRlY3RlZCBhIHN1cHBvcnRlZCBmb3JtYXQuICovCisgICBPTVhfRXZlbnRLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICBPTVhfRXZlbnRWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLworICAgT01YX0V2ZW50TWF4ID0gMHg3RkZGRkZGRgorfSBPTVhfRVZFTlRUWVBFOworCit0eXBlZGVmIHN0cnVjdCBPTVhfQ0FMTEJBQ0tUWVBFCit7CisgICAgLyoqIFRoZSBFdmVudEhhbmRsZXIgbWV0aG9kIGlzIHVzZWQgdG8gbm90aWZ5IHRoZSBhcHBsaWNhdGlvbiB3aGVuIGFuCisgICAgICAgIGV2ZW50IG9mIGludGVyZXN0IG9jY3Vycy4gIEV2ZW50cyBhcmUgZGVmaW5lZCBpbiB0aGUgT01YX0VWRU5UVFlQRQorICAgICAgICBlbnVtZXJhdGlvbi4gIFBsZWFzZSBzZWUgdGhhdCBlbnVtZXJhdGlvbiBmb3IgZGV0YWlscyBvZiB3aGF0IHdpbGwKKyAgICAgICAgYmUgcmV0dXJuZWQgZm9yIGVhY2ggdHlwZSBvZiBldmVudC4gQ2FsbGJhY2tzIHNob3VsZCBub3QgcmV0dXJuCisgICAgICAgIGFuIGVycm9yIHRvIHRoZSBjb21wb25lbnQsIHNvIGlmIGFuIGVycm9yIG9jY3VycywgdGhlIGFwcGxpY2F0aW9uIAorICAgICAgICBzaGFsbCBoYW5kbGUgaXQgaW50ZXJuYWxseS4gIFRoaXMgaXMgYSBibG9ja2luZyBjYWxsLgorCisgICAgICAgIFRoZSBhcHBsaWNhdGlvbiBzaG91bGQgcmV0dXJuIGZyb20gdGhpcyBjYWxsIHdpdGhpbiA1IG1zZWMgdG8gYXZvaWQKKyAgICAgICAgYmxvY2tpbmcgdGhlIGNvbXBvbmVudCBmb3IgYW4gZXhjZXNzaXZlbHkgbG9uZyBwZXJpb2Qgb2YgdGltZS4KKworICAgICAgICBAcGFyYW0gaENvbXBvbmVudAorICAgICAgICAgICAgaGFuZGxlIG9mIHRoZSBjb21wb25lbnQgdG8gYWNjZXNzLiAgVGhpcyBpcyB0aGUgY29tcG9uZW50CisgICAgICAgICAgICBoYW5kbGUgcmV0dXJuZWQgYnkgdGhlIGNhbGwgdG8gdGhlIEdldEhhbmRsZSBmdW5jdGlvbi4KKyAgICAgICAgQHBhcmFtIHBBcHBEYXRhCisgICAgICAgICAgICBwb2ludGVyIHRvIGFuIGFwcGxpY2F0aW9uIGRlZmluZWQgdmFsdWUgdGhhdCB3YXMgcHJvdmlkZWQgaW4gdGhlIAorICAgICAgICAgICAgcEFwcERhdGEgcGFyYW1ldGVyIHRvIHRoZSBPTVhfR2V0SGFuZGxlIG1ldGhvZCBmb3IgdGhlIGNvbXBvbmVudC4KKyAgICAgICAgICAgIFRoaXMgYXBwbGljYXRpb24gZGVmaW5lZCB2YWx1ZSBpcyBwcm92aWRlZCBzbyB0aGF0IHRoZSBhcHBsaWNhdGlvbiAKKyAgICAgICAgICAgIGNhbiBoYXZlIGEgY29tcG9uZW50IHNwZWNpZmljIGNvbnRleHQgd2hlbiByZWNlaXZpbmcgdGhlIGNhbGxiYWNrLgorICAgICAgICBAcGFyYW0gZUV2ZW50CisgICAgICAgICAgICBFdmVudCB0aGF0IHRoZSBjb21wb25lbnQgd2FudHMgdG8gbm90aWZ5IHRoZSBhcHBsaWNhdGlvbiBhYm91dC4KKyAgICAgICAgQHBhcmFtIG5EYXRhMQorICAgICAgICAgICAgbkRhdGEgd2lsbCBiZSB0aGUgT01YX0VSUk9SVFlQRSBmb3IgYW4gZXJyb3IgZXZlbnQgYW5kIHdpbGwgYmUgCisgICAgICAgICAgICBhbiBPTVhfQ09NTUFORFRZUEUgZm9yIGEgY29tbWFuZCBjb21wbGV0ZSBldmVudCBhbmQgT01YX0lOREVYVFlQRSBmb3IgYSBPTVhfUG9ydFNldHRpbmdzQ2hhbmdlZCBldmVudC4KKyAgICAgICAgIEBwYXJhbSBuRGF0YTIKKyAgICAgICAgICAgIG5EYXRhMiB3aWxsIGhvbGQgZnVydGhlciBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIHRoZSBldmVudC4gQ2FuIGJlIE9NWF9TVEFURVRZUEUgZm9yCisgICAgICAgICAgICBhIE9NWF9Db21tYW5kU3RhdGVTZXQgY29tbWFuZCBvciBwb3J0IGluZGV4IGZvciBhIE9NWF9Qb3J0U2V0dGluZ3NDaGFuZ2VkIGV2ZW50LgorICAgICAgICAgICAgRGVmYXVsdCB2YWx1ZSBpcyAwIGlmIG5vdCB1c2VkLiApCisgICAgICAgIEBwYXJhbSBwRXZlbnREYXRhCisgICAgICAgICAgICBQb2ludGVyIHRvIGFkZGl0aW9uYWwgZXZlbnQtc3BlY2lmaWMgZGF0YSAoc2VlIHNwZWMgZm9yIG1lYW5pbmcpLgorICAgICAgKi8KKworICAgT01YX0VSUk9SVFlQRSAoKkV2ZW50SGFuZGxlcikoCisgICAgICAgIE9NWF9JTiBPTVhfSEFORExFVFlQRSBoQ29tcG9uZW50LAorICAgICAgICBPTVhfSU4gT01YX1BUUiBwQXBwRGF0YSwKKyAgICAgICAgT01YX0lOIE9NWF9FVkVOVFRZUEUgZUV2ZW50LAorICAgICAgICBPTVhfSU4gT01YX1UzMiBuRGF0YTEsCisgICAgICAgIE9NWF9JTiBPTVhfVTMyIG5EYXRhMiwKKyAgICAgICAgT01YX0lOIE9NWF9QVFIgcEV2ZW50RGF0YSk7CisKKyAgICAvKiogVGhlIEVtcHR5QnVmZmVyRG9uZSBtZXRob2QgaXMgdXNlZCB0byByZXR1cm4gZW1wdGllZCBidWZmZXJzIGZyb20gYW4KKyAgICAgICAgaW5wdXQgcG9ydCBiYWNrIHRvIHRoZSBhcHBsaWNhdGlvbiBmb3IgcmV1c2UuICBUaGlzIGlzIGEgYmxvY2tpbmcgY2FsbCAKKyAgICAgICAgc28gdGhlIGFwcGxpY2F0aW9uIHNob3VsZCBub3QgYXR0ZW1wdCB0byByZWZpbGwgdGhlIGJ1ZmZlcnMgZHVyaW5nIHRoaXMKKyAgICAgICAgY2FsbCwgYnV0IHNob3VsZCBxdWV1ZSB0aGVtIGFuZCByZWZpbGwgdGhlbSBpbiBhbm90aGVyIHRocmVhZC4gIFRoZXJlCisgICAgICAgIGlzIG5vIGVycm9yIHJldHVybiwgc28gdGhlIGFwcGxpY2F0aW9uIHNoYWxsIGhhbmRsZSBhbnkgZXJyb3JzIGdlbmVyYXRlZAorICAgICAgICBpbnRlcm5hbGx5LiAgCisgICAgICAgIAorICAgICAgICBUaGUgYXBwbGljYXRpb24gc2hvdWxkIHJldHVybiBmcm9tIHRoaXMgY2FsbCB3aXRoaW4gNSBtc2VjLgorICAgICAgICAKKyAgICAgICAgQHBhcmFtIGhDb21wb25lbnQKKyAgICAgICAgICAgIGhhbmRsZSBvZiB0aGUgY29tcG9uZW50IHRvIGFjY2Vzcy4gIFRoaXMgaXMgdGhlIGNvbXBvbmVudAorICAgICAgICAgICAgaGFuZGxlIHJldHVybmVkIGJ5IHRoZSBjYWxsIHRvIHRoZSBHZXRIYW5kbGUgZnVuY3Rpb24uCisgICAgICAgIEBwYXJhbSBwQXBwRGF0YQorICAgICAgICAgICAgcG9pbnRlciB0byBhbiBhcHBsaWNhdGlvbiBkZWZpbmVkIHZhbHVlIHRoYXQgd2FzIHByb3ZpZGVkIGluIHRoZSAKKyAgICAgICAgICAgIHBBcHBEYXRhIHBhcmFtZXRlciB0byB0aGUgT01YX0dldEhhbmRsZSBtZXRob2QgZm9yIHRoZSBjb21wb25lbnQuCisgICAgICAgICAgICBUaGlzIGFwcGxpY2F0aW9uIGRlZmluZWQgdmFsdWUgaXMgcHJvdmlkZWQgc28gdGhhdCB0aGUgYXBwbGljYXRpb24gCisgICAgICAgICAgICBjYW4gaGF2ZSBhIGNvbXBvbmVudCBzcGVjaWZpYyBjb250ZXh0IHdoZW4gcmVjZWl2aW5nIHRoZSBjYWxsYmFjay4KKyAgICAgICAgQHBhcmFtIHBCdWZmZXIKKyAgICAgICAgICAgIHBvaW50ZXIgdG8gYW4gT01YX0JVRkZFUkhFQURFUlRZUEUgc3RydWN0dXJlIGFsbG9jYXRlZCB3aXRoIFVzZUJ1ZmZlcgorICAgICAgICAgICAgb3IgQWxsb2NhdGVCdWZmZXIgaW5kaWNhdGluZyB0aGUgYnVmZmVyIHRoYXQgd2FzIGVtcHRpZWQuCisgICAgICAgIEBpbmdyb3VwIGJ1ZgorICAgICAqLworICAgIE9NWF9FUlJPUlRZUEUgKCpFbXB0eUJ1ZmZlckRvbmUpKAorICAgICAgICBPTVhfSU4gT01YX0hBTkRMRVRZUEUgaENvbXBvbmVudCwKKyAgICAgICAgT01YX0lOIE9NWF9QVFIgcEFwcERhdGEsCisgICAgICAgIE9NWF9JTiBPTVhfQlVGRkVSSEVBREVSVFlQRSogcEJ1ZmZlcik7CisKKyAgICAvKiogVGhlIEZpbGxCdWZmZXJEb25lIG1ldGhvZCBpcyB1c2VkIHRvIHJldHVybiBmaWxsZWQgYnVmZmVycyBmcm9tIGFuCisgICAgICAgIG91dHB1dCBwb3J0IGJhY2sgdG8gdGhlIGFwcGxpY2F0aW9uIGZvciBlbXB0eWluZyBhbmQgdGhlbiByZXVzZS4gIAorICAgICAgICBUaGlzIGlzIGEgYmxvY2tpbmcgY2FsbCBzbyB0aGUgYXBwbGljYXRpb24gc2hvdWxkIG5vdCBhdHRlbXB0IHRvIAorICAgICAgICBlbXB0eSB0aGUgYnVmZmVycyBkdXJpbmcgdGhpcyBjYWxsLCBidXQgc2hvdWxkIHF1ZXVlIHRoZSBidWZmZXJzIAorICAgICAgICBhbmQgZW1wdHkgdGhlbSBpbiBhbm90aGVyIHRocmVhZC4gIFRoZXJlIGlzIG5vIGVycm9yIHJldHVybiwgc28gCisgICAgICAgIHRoZSBhcHBsaWNhdGlvbiBzaGFsbCBoYW5kbGUgYW55IGVycm9ycyBnZW5lcmF0ZWQgaW50ZXJuYWxseS4gIFRoZSAKKyAgICAgICAgYXBwbGljYXRpb24gc2hhbGwgYWxzbyB1cGRhdGUgdGhlIGJ1ZmZlciBoZWFkZXIgdG8gaW5kaWNhdGUgdGhlCisgICAgICAgIG51bWJlciBvZiBieXRlcyBwbGFjZWQgaW50byB0aGUgYnVmZmVyLiAgCisKKyAgICAgICAgVGhlIGFwcGxpY2F0aW9uIHNob3VsZCByZXR1cm4gZnJvbSB0aGlzIGNhbGwgd2l0aGluIDUgbXNlYy4KKyAgICAgICAgCisgICAgICAgIEBwYXJhbSBoQ29tcG9uZW50CisgICAgICAgICAgICBoYW5kbGUgb2YgdGhlIGNvbXBvbmVudCB0byBhY2Nlc3MuICBUaGlzIGlzIHRoZSBjb21wb25lbnQKKyAgICAgICAgICAgIGhhbmRsZSByZXR1cm5lZCBieSB0aGUgY2FsbCB0byB0aGUgR2V0SGFuZGxlIGZ1bmN0aW9uLgorICAgICAgICBAcGFyYW0gcEFwcERhdGEKKyAgICAgICAgICAgIHBvaW50ZXIgdG8gYW4gYXBwbGljYXRpb24gZGVmaW5lZCB2YWx1ZSB0aGF0IHdhcyBwcm92aWRlZCBpbiB0aGUgCisgICAgICAgICAgICBwQXBwRGF0YSBwYXJhbWV0ZXIgdG8gdGhlIE9NWF9HZXRIYW5kbGUgbWV0aG9kIGZvciB0aGUgY29tcG9uZW50LgorICAgICAgICAgICAgVGhpcyBhcHBsaWNhdGlvbiBkZWZpbmVkIHZhbHVlIGlzIHByb3ZpZGVkIHNvIHRoYXQgdGhlIGFwcGxpY2F0aW9uIAorICAgICAgICAgICAgY2FuIGhhdmUgYSBjb21wb25lbnQgc3BlY2lmaWMgY29udGV4dCB3aGVuIHJlY2VpdmluZyB0aGUgY2FsbGJhY2suCisgICAgICAgIEBwYXJhbSBwQnVmZmVyCisgICAgICAgICAgICBwb2ludGVyIHRvIGFuIE9NWF9CVUZGRVJIRUFERVJUWVBFIHN0cnVjdHVyZSBhbGxvY2F0ZWQgd2l0aCBVc2VCdWZmZXIKKyAgICAgICAgICAgIG9yIEFsbG9jYXRlQnVmZmVyIGluZGljYXRpbmcgdGhlIGJ1ZmZlciB0aGF0IHdhcyBmaWxsZWQuCisgICAgICAgIEBpbmdyb3VwIGJ1ZgorICAgICAqLworICAgIE9NWF9FUlJPUlRZUEUgKCpGaWxsQnVmZmVyRG9uZSkoCisgICAgICAgIE9NWF9PVVQgT01YX0hBTkRMRVRZUEUgaENvbXBvbmVudCwKKyAgICAgICAgT01YX09VVCBPTVhfUFRSIHBBcHBEYXRhLAorICAgICAgICBPTVhfT1VUIE9NWF9CVUZGRVJIRUFERVJUWVBFKiBwQnVmZmVyKTsKKworfSBPTVhfQ0FMTEJBQ0tUWVBFOworCisvKiogVGhlIE9NWF9CVUZGRVJTVVBQTElFUlRZUEUgZW51bWVyYXRpb24gaXMgdXNlZCB0byBkaWN0YXRlIHBvcnQgc3VwcGxpZXIKKyAgICBwcmVmZXJlbmNlIHdoZW4gdHVubmVsaW5nIGJldHdlZW4gdHdvIHBvcnRzLgorICAgIEBpbmdyb3VwIHR1biBidWYKKyovCit0eXBlZGVmIGVudW0gT01YX0JVRkZFUlNVUFBMSUVSVFlQRQoreworICAgIE9NWF9CdWZmZXJTdXBwbHlVbnNwZWNpZmllZCA9IDB4MCwgLyoqPCBwb3J0IHN1cHBseWluZyB0aGUgYnVmZmVycyBpcyB1bnNwZWNpZmllZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBkb24ndCBjYXJlICovCisgICAgT01YX0J1ZmZlclN1cHBseUlucHV0LCAgICAgICAgICAgICAvKio8IGlucHV0IHBvcnQgc3VwcGxpZXMgdGhlIGJ1ZmZlcnMgKi8KKyAgICBPTVhfQnVmZmVyU3VwcGx5T3V0cHV0LCAgICAgICAgICAgIC8qKjwgb3V0cHV0IHBvcnQgc3VwcGxpZXMgdGhlIGJ1ZmZlcnMgKi8KKyAgICBPTVhfQnVmZmVyU3VwcGx5S2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIE9NWF9CdWZmZXJTdXBwbHlWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLworICAgIE9NWF9CdWZmZXJTdXBwbHlNYXggPSAweDdGRkZGRkZGCit9IE9NWF9CVUZGRVJTVVBQTElFUlRZUEU7CisKKworLyoqIGJ1ZmZlciBzdXBwbGllciBwYXJhbWV0ZXIgCisgKiBAaW5ncm91cCB0dW4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgT01YX1BBUkFNX0JVRkZFUlNVUFBMSUVSVFlQRSB7CisgICAgT01YX1UzMiBuU2l6ZTsgLyoqPCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247IC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLworICAgIE9NWF9VMzIgblBvcnRJbmRleDsgLyoqPCBwb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0byAqLworICAgIE9NWF9CVUZGRVJTVVBQTElFUlRZUEUgZUJ1ZmZlclN1cHBsaWVyOyAvKio8IGJ1ZmZlciBzdXBwbGllciAqLworfSBPTVhfUEFSQU1fQlVGRkVSU1VQUExJRVJUWVBFOworCisKKy8qKjwgaW5kaWNhdGVzIHRoYXQgYnVmZmVycyByZWNlaXZlZCBieSBhbiBpbnB1dCBwb3J0IG9mIGEgdHVubmVsIAorICAgICBtYXkgbm90IG1vZGlmeSB0aGUgZGF0YSBpbiB0aGUgYnVmZmVycyAKKyAgICAgQGluZ3JvdXAgdHVuCisgKi8KKyNkZWZpbmUgT01YX1BPUlRUVU5ORUxGTEFHX1JFQURPTkxZIDB4MDAwMDAwMDEgCisKKworLyoqIFRoZSBPTVhfVFVOTkVMU0VUVVBUWVBFIHN0cnVjdHVyZSBpcyB1c2VkIHRvIHBhc3MgZGF0YSBmcm9tIGFuIG91dHB1dAorICAgIHBvcnQgdG8gYW4gaW5wdXQgcG9ydCBhcyBwYXJ0IHRoZSB0d28gQ29tcG9uZW50VHVubmVsUmVxdWVzdCBjYWxscworICAgIHJlc3VsdGluZyBmcm9tIGEgT01YX1NldHVwVHVubmVsIGNhbGwgZnJvbSB0aGUgSUwgQ2xpZW50LiAKKyAgICBAaW5ncm91cCB0dW4KKyAqLyAgIAordHlwZWRlZiBzdHJ1Y3QgT01YX1RVTk5FTFNFVFVQVFlQRQoreworICAgIE9NWF9VMzIgblR1bm5lbEZsYWdzOyAgICAgICAgICAgICAvKio8IGJpdCBmbGFncyBmb3IgdHVubmVsaW5nICovCisgICAgT01YX0JVRkZFUlNVUFBMSUVSVFlQRSBlU3VwcGxpZXI7IC8qKjwgc3VwcGxpZXIgcHJlZmVyZW5jZSAqLworfSBPTVhfVFVOTkVMU0VUVVBUWVBFOyAKKworLyogT01YIENvbXBvbmVudCBoZWFkZXJzIGlzIGluY2x1ZGVkIHRvIGVuYWJsZSB0aGUgY29yZSB0byB1c2UKKyAgIG1hY3JvcyBmb3IgZnVuY3Rpb25zIGludG8gdGhlIGNvbXBvbmVudCBmb3IgT01YIHJlbGVhc2UgMS4wLiAgCisgICBEZXZlbG9wZXJzIHNob3VsZCBub3QgYWNjZXNzIGFueSBzdHJ1Y3R1cmVzIG9yIGRhdGEgZnJvbSB3aXRoaW4KKyAgIHRoZSBjb21wb25lbnQgaGVhZGVyIGRpcmVjdGx5ICovCisvKiBUTyBCRSBSRU1PVkVEIC0gI2luY2x1ZGUgPE9NWF9Db21wb25lbnQuaD4gKi8KKworLyoqIEdldENvbXBvbmVudFZlcnNpb24gd2lsbCByZXR1cm4gaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbXBvbmVudC4gIAorICAgIFRoaXMgaXMgYSBibG9ja2luZyBjYWxsLiAgVGhpcyBtYWNybyB3aWxsIGdvIGRpcmVjdGx5IGZyb20gdGhlCisgICAgYXBwbGljYXRpb24gdG8gdGhlIGNvbXBvbmVudCAodmlhIGEgY29yZSBtYWNybykuICBUaGUKKyAgICBjb21wb25lbnQgd2lsbCByZXR1cm4gZnJvbSB0aGlzIGNhbGwgd2l0aGluIDUgbXNlYy4KKyAgICBAcGFyYW0gW2luXSBoQ29tcG9uZW50CisgICAgICAgIGhhbmRsZSBvZiBjb21wb25lbnQgdG8gZXhlY3V0ZSB0aGUgY29tbWFuZAorICAgIEBwYXJhbSBbb3V0XSBwQ29tcG9uZW50TmFtZQorICAgICAgICBwb2ludGVyIHRvIGFuIGVtcHR5IHN0cmluZyBvZiBsZW5ndGggMTI4IGJ5dGVzLiAgVGhlIGNvbXBvbmVudCAKKyAgICAgICAgd2lsbCB3cml0ZSBpdHMgbmFtZSBpbnRvIHRoaXMgc3RyaW5nLiAgVGhlIG5hbWUgd2lsbCBiZSAKKyAgICAgICAgdGVybWluYXRlZCBieSBhIHNpbmdsZSB6ZXJvIGJ5dGUuICBUaGUgbmFtZSBvZiBhIGNvbXBvbmVudCB3aWxsIAorICAgICAgICBiZSAxMjcgYnl0ZXMgb3IgbGVzcyB0byBsZWF2ZSByb29tIGZvciB0aGUgdHJhaWxpbmcgemVybyBieXRlLiAgCisgICAgICAgIEFuIGV4YW1wbGUgb2YgYSB2YWxpZCBjb21wb25lbnQgbmFtZSBpcyAiT01YLkFCQy5DaGFubmVsTWl4ZXJcMCIuCisgICAgQHBhcmFtIFtvdXRdIHBDb21wb25lbnRWZXJzaW9uCisgICAgICAgIHBvaW50ZXIgdG8gYW4gT01YIFZlcnNpb24gc3RydWN0dXJlIHRoYXQgdGhlIGNvbXBvbmVudCB3aWxsIGZpbGwgCisgICAgICAgIGluLiAgVGhlIGNvbXBvbmVudCB3aWxsIGZpbGwgaW4gYSB2YWx1ZSB0aGF0IGluZGljYXRlcyB0aGUgCisgICAgICAgIGNvbXBvbmVudCB2ZXJzaW9uLiAgTk9URTogdGhlIGNvbXBvbmVudCB2ZXJzaW9uIGlzIE5PVCB0aGUgc2FtZSAKKyAgICAgICAgYXMgdGhlIE9NWCBTcGVjaWZpY2F0aW9uIHZlcnNpb24gKGZvdW5kIGluIGFsbCBzdHJ1Y3R1cmVzKS4gIFRoZSAKKyAgICAgICAgY29tcG9uZW50IHZlcnNpb24gaXMgZGVmaW5lZCBieSB0aGUgdmVuZG9yIG9mIHRoZSBjb21wb25lbnQgYW5kIAorICAgICAgICBpdHMgdmFsdWUgaXMgZW50aXJlbHkgdXAgdG8gdGhlIGNvbXBvbmVudCB2ZW5kb3IuCisgICAgQHBhcmFtIFtvdXRdIHBTcGVjVmVyc2lvbgorICAgICAgICBwb2ludGVyIHRvIGFuIE9NWCBWZXJzaW9uIHN0cnVjdHVyZSB0aGF0IHRoZSBjb21wb25lbnQgd2lsbCBmaWxsIAorICAgICAgICBpbi4gIFRoZSBTcGVjVmVyc2lvbiBpcyB0aGUgdmVyc2lvbiBvZiB0aGUgc3BlY2lmaWNhdGlvbiB0aGF0IHRoZSAKKyAgICAgICAgY29tcG9uZW50IHdhcyBidWlsdCBhZ2FpbnN0LiAgUGxlYXNlIG5vdGUgdGhhdCB0aGlzIHZhbHVlIG1heSBvciAKKyAgICAgICAgbWF5IG5vdCBtYXRjaCB0aGUgc3RydWN0dXJlJ3MgdmVyc2lvbi4gIEZvciBleGFtcGxlLCBpZiB0aGUgCisgICAgICAgIGNvbXBvbmVudCB3YXMgYnVpbHQgYWdhaW5zdCB0aGUgMi4wIHNwZWNpZmljYXRpb24sIGJ1dCB0aGUgCisgICAgICAgIGFwcGxpY2F0aW9uICh3aGljaCBjcmVhdGVzIHRoZSBzdHJ1Y3R1cmUgaXMgYnVpbHQgYWdhaW5zdCB0aGUgCisgICAgICAgIDEuMCBzcGVjaWZpY2F0aW9uIHRoZSB2ZXJzaW9ucyB3b3VsZCBiZSBkaWZmZXJlbnQuCisgICAgQHBhcmFtIFtvdXRdIHBDb21wb25lbnRVVUlECisgICAgICAgIHBvaW50ZXIgdG8gdGhlIFVVSUQgb2YgdGhlIGNvbXBvbmVudCB3aGljaCB3aWxsIGJlIGZpbGxlZCBpbiBieSAKKyAgICAgICAgdGhlIGNvbXBvbmVudC4gIFRoZSBVVUlEIGlzIGEgdW5pcXVlIGlkZW50aWZpZXIgdGhhdCBpcyBzZXQgYXQgCisgICAgICAgIFJVTiB0aW1lIGZvciB0aGUgY29tcG9uZW50IGFuZCBpcyB1bmlxdWUgdG8gZWFjaCBpbnN0YW50aW9uIG9mIAorICAgICAgICB0aGUgY29tcG9uZW50LgorICAgIEByZXR1cm4gT01YX0VSUk9SVFlQRQorICAgICAgICBJZiB0aGUgY29tbWFuZCBzdWNjZXNzZnVsbHkgZXhlY3V0ZXMsIHRoZSByZXR1cm4gY29kZSB3aWxsIGJlCisgICAgICAgIE9NWF9FcnJvck5vbmUuICBPdGhlcndpc2UgdGhlIGFwcHJvcHJpYXRlIE9NWCBlcnJvciB3aWxsIGJlIHJldHVybmVkLgorICAgIEBpbmdyb3VwIGNvbXAKKyAqLworI2RlZmluZSBPTVhfR2V0Q29tcG9uZW50VmVyc2lvbiggICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBoQ29tcG9uZW50LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBwQ29tcG9uZW50TmFtZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBwQ29tcG9uZW50VmVyc2lvbiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBwU3BlY1ZlcnNpb24sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBwQ29tcG9uZW50VVVJRCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICgoT01YX0NPTVBPTkVOVFRZUEUqKWhDb21wb25lbnQpLT5HZXRDb21wb25lbnRWZXJzaW9uKCAgXAorICAgICAgICBoQ29tcG9uZW50LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBwQ29tcG9uZW50TmFtZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBwQ29tcG9uZW50VmVyc2lvbiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBwU3BlY1ZlcnNpb24sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBwQ29tcG9uZW50VVVJRCkgICAgICAgICAgICAgICAgIC8qIE1hY3JvIEVuZCAqLworCisKKy8qKiBTZW5kIGEgY29tbWFuZCB0byB0aGUgY29tcG9uZW50LiAgVGhpcyBjYWxsIGlzIGEgbm9uLWJsb2NraW5nIGNhbGwuCisgICAgVGhlIGNvbXBvbmVudCBzaG91bGQgY2hlY2sgdGhlIHBhcmFtZXRlcnMgYW5kIHRoZW4gcXVldWUgdGhlIGNvbW1hbmQKKyAgICB0byB0aGUgY29tcG9uZW50IHRocmVhZCB0byBiZSBleGVjdXRlZC4gIFRoZSBjb21wb25lbnQgdGhyZWFkIHNoYWxsIAorICAgIHNlbmQgdGhlIEV2ZW50SGFuZGxlcigpIGNhbGxiYWNrIGF0IHRoZSBjb25jbHVzaW9uIG9mIHRoZSBjb21tYW5kLiAKKyAgICBUaGlzIG1hY3JvIHdpbGwgZ28gZGlyZWN0bHkgZnJvbSB0aGUgYXBwbGljYXRpb24gdG8gdGhlIGNvbXBvbmVudCAodmlhCisgICAgYSBjb3JlIG1hY3JvKS4gIFRoZSBjb21wb25lbnQgd2lsbCByZXR1cm4gZnJvbSB0aGlzIGNhbGwgd2l0aGluIDUgbXNlYy4KKyAgICAKKyAgICBXaGVuIHRoZSBjb21tYW5kIGlzICJPTVhfQ29tbWFuZFN0YXRlU2V0IiB0aGUgY29tcG9uZW50IHdpbGwgcXVldWUgYQorICAgIHN0YXRlIHRyYW5zaXRpb24gdG8gdGhlIG5ldyBzdGF0ZSBpZGVuZmllZCBpbiBuUGFyYW0uCisgICAgCisgICAgV2hlbiB0aGUgY29tbWFuZCBpcyAiT01YX0NvbW1hbmRGbHVzaCIsIHRvIGZsdXNoIGEgcG9ydCdzIGJ1ZmZlciBxdWV1ZXMsCisgICAgdGhlIGNvbW1hbmQgd2lsbCBmb3JjZSB0aGUgY29tcG9uZW50IHRvIHJldHVybiBhbGwgYnVmZmVycyBOT1QgQ1VSUkVOVExZIAorICAgIEJFSU5HIFBST0NFU1NFRCB0byB0aGUgYXBwbGljYXRpb24sIGluIHRoZSBvcmRlciBpbiB3aGljaCB0aGUgYnVmZmVycyAKKyAgICB3ZXJlIHJlY2VpdmVkLgorICAgIAorICAgIFdoZW4gdGhlIGNvbW1hbmQgaXMgIk9NWF9Db21tYW5kUG9ydERpc2FibGUiIG9yIAorICAgICJPTVhfQ29tbWFuZFBvcnRFbmFibGUiLCB0aGUgY29tcG9uZW50J3MgcG9ydCAoZ2l2ZW4gYnkgdGhlIHZhbHVlIG9mCisgICAgblBhcmFtKSB3aWxsIGJlIHN0b3BwZWQgb3IgcmVzdGFydGVkLiAKKyAgICAKKyAgICBXaGVuIHRoZSBjb21tYW5kICJPTVhfQ29tbWFuZE1hcmtCdWZmZXIiIGlzIHVzZWQgdG8gbWFyayBhIGJ1ZmZlciwgdGhlCisgICAgcENtZERhdGEgd2lsbCBwb2ludCB0byBhIE9NWF9NQVJLVFlQRSBzdHJ1Y3R1cmUgY29udGFpbmluZyB0aGUgY29tcG9uZW50CisgICAgaGFuZGxlIG9mIHRoZSBjb21wb25lbnQgdG8gZXhhbWluZSB0aGUgYnVmZmVyIGNoYWluIGZvciB0aGUgbWFyay4gIG5QYXJhbTEKKyAgICBjb250YWlucyB0aGUgaW5kZXggb2YgdGhlIHBvcnQgb24gd2hpY2ggdGhlIGJ1ZmZlciBtYXJrIGlzIGFwcGxpZWQuCisKKyAgICBTcGVjaWZpY2F0aW9uIHRleHQgZm9yIG1vcmUgZGV0YWlscy4gCisgICAgCisgICAgQHBhcmFtIFtpbl0gaENvbXBvbmVudAorICAgICAgICBoYW5kbGUgb2YgY29tcG9uZW50IHRvIGV4ZWN1dGUgdGhlIGNvbW1hbmQKKyAgICBAcGFyYW0gW2luXSBDbWQKKyAgICAgICAgQ29tbWFuZCBmb3IgdGhlIGNvbXBvbmVudCB0byBleGVjdXRlCisgICAgQHBhcmFtIFtpbl0gblBhcmFtCisgICAgICAgIFBhcmFtZXRlciBmb3IgdGhlIGNvbW1hbmQgdG8gYmUgZXhlY3V0ZWQuICBXaGVuIENtZCBoYXMgdGhlIHZhbHVlIAorICAgICAgICBPTVhfQ29tbWFuZFN0YXRlU2V0LCB2YWx1ZSBpcyBhIG1lbWJlciBvZiBPTVhfU1RBVEVUWVBFLiAgV2hlbiBDbWQgaGFzIAorICAgICAgICB0aGUgdmFsdWUgT01YX0NvbW1hbmRGbHVzaCwgdmFsdWUgb2YgblBhcmFtIGluZGljYXRlcyB3aGljaCBwb3J0KHMpIAorICAgICAgICB0byBmbHVzaC4gLTEgaXMgdXNlZCB0byBmbHVzaCBhbGwgcG9ydHMgYSBzaW5nbGUgcG9ydCBpbmRleCB3aWxsIAorICAgICAgICBvbmx5IGZsdXNoIHRoYXQgcG9ydC4gIFdoZW4gQ21kIGhhcyB0aGUgdmFsdWUgIk9NWF9Db21tYW5kUG9ydERpc2FibGUiCisgICAgICAgIG9yICJPTVhfQ29tbWFuZFBvcnRFbmFibGUiLCB0aGUgY29tcG9uZW50J3MgcG9ydCBpcyBnaXZlbiBieSAKKyAgICAgICAgdGhlIHZhbHVlIG9mIG5QYXJhbS4gIFdoZW4gQ21kIGhhcyB0aGUgdmFsdWUgIk9NWF9Db21tYW5kTWFya0J1ZmZlciIKKyAgICAgICAgdGhlIGNvbXBvbmVudHMgcG90IGlzIGdpdmVuIGJ5IHRoZSB2YWx1ZSBvZiBuUGFyYW0uCisgICAgQHBhcmFtIFtpbl0gcENtZERhdGEKKyAgICAgICAgUGFyYW1ldGVyIHBvaW50aW5nIHRvIHRoZSBPTVhfTUFSS1RZUEUgc3RydWN0dXJlIHdoZW4gQ21kIGhhcyB0aGUgdmFsdWUKKyAgICAgICAgIk9NWF9Db21tYW5kTWFya0J1ZmZlciIuICAgICAKKyAgICBAcmV0dXJuIE9NWF9FUlJPUlRZUEUKKyAgICAgICAgSWYgdGhlIGNvbW1hbmQgc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVzLCB0aGUgcmV0dXJuIGNvZGUgd2lsbCBiZQorICAgICAgICBPTVhfRXJyb3JOb25lLiAgT3RoZXJ3aXNlIHRoZSBhcHByb3ByaWF0ZSBPTVggZXJyb3Igd2lsbCBiZSByZXR1cm5lZC4KKyAgICBAaW5ncm91cCBjb21wCisgKi8KKyNkZWZpbmUgT01YX1NlbmRDb21tYW5kKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgIGhDb21wb25lbnQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgIENtZCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgIG5QYXJhbSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgIHBDbWREYXRhKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgKChPTVhfQ09NUE9ORU5UVFlQRSopaENvbXBvbmVudCktPlNlbmRDb21tYW5kKCAgICAgICAgIFwKKyAgICAgICAgIGhDb21wb25lbnQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgIENtZCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgIG5QYXJhbSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgIHBDbWREYXRhKSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTWFjcm8gRW5kICovCisKKworLyoqIFRoZSBPTVhfR2V0UGFyYW1ldGVyIG1hY3JvIHdpbGwgZ2V0IG9uZSBvZiB0aGUgY3VycmVudCBwYXJhbWV0ZXIgCisgICAgc2V0dGluZ3MgZnJvbSB0aGUgY29tcG9uZW50LiAgVGhpcyBtYWNybyBjYW5ub3Qgb25seSBiZSBpbnZva2VkIHdoZW4gCisgICAgdGhlIGNvbXBvbmVudCBpcyBpbiB0aGUgT01YX1N0YXRlSW52YWxpZCBzdGF0ZS4gIFRoZSBuUGFyYW1JbmRleAorICAgIHBhcmFtZXRlciBpcyB1c2VkIHRvIGluZGljYXRlIHdoaWNoIHN0cnVjdHVyZSBpcyBiZWluZyByZXF1ZXN0ZWQgZnJvbQorICAgIHRoZSBjb21wb25lbnQuICBUaGUgYXBwbGljYXRpb24gc2hhbGwgYWxsb2NhdGUgdGhlIGNvcnJlY3Qgc3RydWN0dXJlIAorICAgIGFuZCBzaGFsbCBmaWxsIGluIHRoZSBzdHJ1Y3R1cmUgc2l6ZSBhbmQgdmVyc2lvbiBpbmZvcm1hdGlvbiBiZWZvcmUgCisgICAgaW52b2tpbmcgdGhpcyBtYWNyby4gIFdoZW4gdGhlIHBhcmFtZXRlciBhcHBsaWVzIHRvIGEgcG9ydCwgdGhlCisgICAgY2FsbGVyIHNoYWxsIGZpbGwgaW4gdGhlIGFwcHJvcHJpYXRlIG5Qb3J0SW5kZXggdmFsdWUgaW5kaWNhdGluZyB0aGUKKyAgICBwb3J0IG9uIHdoaWNoIHRoZSBwYXJhbWV0ZXIgYXBwbGllcy4gSWYgdGhlIGNvbXBvbmVudCBoYXMgbm90IGhhZCAKKyAgICBhbnkgc2V0dGluZ3MgY2hhbmdlZCwgdGhlbiB0aGUgY29tcG9uZW50IHNob3VsZCByZXR1cm4gYSBzZXQgb2YgCisgICAgdmFsaWQgREVGQVVMVCAgcGFyYW1ldGVycyBmb3IgdGhlIGNvbXBvbmVudC4gIFRoaXMgaXMgYSBibG9ja2luZyAKKyAgICBjYWxsLiAgCisgICAgCisgICAgVGhlIGNvbXBvbmVudCBzaG91bGQgcmV0dXJuIGZyb20gdGhpcyBjYWxsIHdpdGhpbiAyMCBtc2VjLgorICAgIAorICAgIEBwYXJhbSBbaW5dIGhDb21wb25lbnQKKyAgICAgICAgSGFuZGxlIG9mIHRoZSBjb21wb25lbnQgdG8gYmUgYWNjZXNzZWQuICBUaGlzIGlzIHRoZSBjb21wb25lbnQKKyAgICAgICAgaGFuZGxlIHJldHVybmVkIGJ5IHRoZSBjYWxsIHRvIHRoZSBPTVhfR2V0SGFuZGxlIGZ1bmN0aW9uLgorICAgIEBwYXJhbSBbaW5dIG5QYXJhbUluZGV4CisgICAgICAgIEluZGV4IG9mIHRoZSBzdHJ1Y3R1cmUgdG8gYmUgZmlsbGVkLiAgVGhpcyB2YWx1ZSBpcyBmcm9tIHRoZQorICAgICAgICBPTVhfSU5ERVhUWVBFIGVudW1lcmF0aW9uLgorICAgIEBwYXJhbSBbaW4sb3V0XSBwQ29tcG9uZW50UGFyYW1ldGVyU3RydWN0dXJlCisgICAgICAgIFBvaW50ZXIgdG8gYXBwbGljYXRpb24gYWxsb2NhdGVkIHN0cnVjdHVyZSB0byBiZSBmaWxsZWQgYnkgdGhlIAorICAgICAgICBjb21wb25lbnQuCisgICAgQHJldHVybiBPTVhfRVJST1JUWVBFCisgICAgICAgIElmIHRoZSBjb21tYW5kIHN1Y2Nlc3NmdWxseSBleGVjdXRlcywgdGhlIHJldHVybiBjb2RlIHdpbGwgYmUKKyAgICAgICAgT01YX0Vycm9yTm9uZS4gIE90aGVyd2lzZSB0aGUgYXBwcm9wcmlhdGUgT01YIGVycm9yIHdpbGwgYmUgcmV0dXJuZWQuCisgICAgQGluZ3JvdXAgY29tcAorICovCisjZGVmaW5lIE9NWF9HZXRQYXJhbWV0ZXIoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGhDb21wb25lbnQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIG5QYXJhbUluZGV4LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHBDb21wb25lbnRQYXJhbWV0ZXJTdHJ1Y3R1cmUpICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICgoT01YX0NPTVBPTkVOVFRZUEUqKWhDb21wb25lbnQpLT5HZXRQYXJhbWV0ZXIoICAgICAgICAgXAorICAgICAgICBoQ29tcG9uZW50LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBuUGFyYW1JbmRleCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBwQ29tcG9uZW50UGFyYW1ldGVyU3RydWN0dXJlKSAgICAvKiBNYWNybyBFbmQgKi8KKworCisvKiogVGhlIE9NWF9TZXRQYXJhbWV0ZXIgbWFjcm8gd2lsbCBzZW5kIGFuIGluaXRpYWxpemF0aW9uIHBhcmFtZXRlcgorICAgIHN0cnVjdHVyZSB0byBhIGNvbXBvbmVudC4gIEVhY2ggc3RydWN0dXJlIHNoYWxsIGJlIHNlbnQgb25lIGF0IGEgdGltZSwKKyAgICBpbiBhIHNlcGFyYXRlIGludm9jYXRpb24gb2YgdGhlIG1hY3JvLiAgVGhpcyBtYWNybyBjYW4gb25seSBiZQorICAgIGludm9rZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIGluIHRoZSBPTVhfU3RhdGVMb2FkZWQgc3RhdGUsIG9yIHRoZQorICAgIHBvcnQgaXMgZGlzYWJsZWQgKHdoZW4gdGhlIHBhcmFtZXRlciBhcHBsaWVzIHRvIGEgcG9ydCkuIFRoZSAKKyAgICBuUGFyYW1JbmRleCBwYXJhbWV0ZXIgaXMgdXNlZCB0byBpbmRpY2F0ZSB3aGljaCBzdHJ1Y3R1cmUgaXMgYmVpbmcKKyAgICBwYXNzZWQgdG8gdGhlIGNvbXBvbmVudC4gIFRoZSBhcHBsaWNhdGlvbiBzaGFsbCBhbGxvY2F0ZSB0aGUgCisgICAgY29ycmVjdCBzdHJ1Y3R1cmUgYW5kIHNoYWxsIGZpbGwgaW4gdGhlIHN0cnVjdHVyZSBzaXplIGFuZCB2ZXJzaW9uIAorICAgIGluZm9ybWF0aW9uIChhcyB3ZWxsIGFzIHRoZSBhY3R1YWwgZGF0YSkgYmVmb3JlIGludm9raW5nIHRoaXMgbWFjcm8uCisgICAgVGhlIGFwcGxpY2F0aW9uIGlzIGZyZWUgdG8gZGlzcG9zZSBvZiB0aGlzIHN0cnVjdHVyZSBhZnRlciB0aGUgY2FsbAorICAgIGFzIHRoZSBjb21wb25lbnQgaXMgcmVxdWlyZWQgdG8gY29weSBhbnkgZGF0YSBpdCBzaGFsbCByZXRhaW4uICBUaGlzIAorICAgIGlzIGEgYmxvY2tpbmcgY2FsbC4gIAorICAgIAorICAgIFRoZSBjb21wb25lbnQgc2hvdWxkIHJldHVybiBmcm9tIHRoaXMgY2FsbCB3aXRoaW4gMjAgbXNlYy4KKyAgICAKKyAgICBAcGFyYW0gW2luXSBoQ29tcG9uZW50CisgICAgICAgIEhhbmRsZSBvZiB0aGUgY29tcG9uZW50IHRvIGJlIGFjY2Vzc2VkLiAgVGhpcyBpcyB0aGUgY29tcG9uZW50CisgICAgICAgIGhhbmRsZSByZXR1cm5lZCBieSB0aGUgY2FsbCB0byB0aGUgT01YX0dldEhhbmRsZSBmdW5jdGlvbi4KKyAgICBAcGFyYW0gW2luXSBuSW5kZXgKKyAgICAgICAgSW5kZXggb2YgdGhlIHN0cnVjdHVyZSB0byBiZSBzZW50LiAgVGhpcyB2YWx1ZSBpcyBmcm9tIHRoZQorICAgICAgICBPTVhfSU5ERVhUWVBFIGVudW1lcmF0aW9uLgorICAgIEBwYXJhbSBbaW5dIHBDb21wb25lbnRQYXJhbWV0ZXJTdHJ1Y3R1cmUKKyAgICAgICAgcG9pbnRlciB0byBhcHBsaWNhdGlvbiBhbGxvY2F0ZWQgc3RydWN0dXJlIHRvIGJlIHVzZWQgZm9yCisgICAgICAgIGluaXRpYWxpemF0aW9uIGJ5IHRoZSBjb21wb25lbnQuCisgICAgQHJldHVybiBPTVhfRVJST1JUWVBFCisgICAgICAgIElmIHRoZSBjb21tYW5kIHN1Y2Nlc3NmdWxseSBleGVjdXRlcywgdGhlIHJldHVybiBjb2RlIHdpbGwgYmUKKyAgICAgICAgT01YX0Vycm9yTm9uZS4gIE90aGVyd2lzZSB0aGUgYXBwcm9wcmlhdGUgT01YIGVycm9yIHdpbGwgYmUgcmV0dXJuZWQuCisgICAgQGluZ3JvdXAgY29tcAorICovCisjZGVmaW5lIE9NWF9TZXRQYXJhbWV0ZXIoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGhDb21wb25lbnQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIG5QYXJhbUluZGV4LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHBDb21wb25lbnRQYXJhbWV0ZXJTdHJ1Y3R1cmUpICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICgoT01YX0NPTVBPTkVOVFRZUEUqKWhDb21wb25lbnQpLT5TZXRQYXJhbWV0ZXIoICAgICAgICAgXAorICAgICAgICBoQ29tcG9uZW50LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBuUGFyYW1JbmRleCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBwQ29tcG9uZW50UGFyYW1ldGVyU3RydWN0dXJlKSAgICAvKiBNYWNybyBFbmQgKi8KKworCisvKiogVGhlIE9NWF9HZXRDb25maWcgbWFjcm8gd2lsbCBnZXQgb25lIG9mIHRoZSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZXMgCisgICAgZnJvbSBhIGNvbXBvbmVudC4gIFRoaXMgbWFjcm8gY2FuIGJlIGludm9rZWQgYW55dGltZSBhZnRlciB0aGUgCisgICAgY29tcG9uZW50IGhhcyBiZWVuIGxvYWRlZC4gIFRoZSBuUGFyYW1JbmRleCBjYWxsIHBhcmFtZXRlciBpcyB1c2VkIHRvIAorICAgIGluZGljYXRlIHdoaWNoIHN0cnVjdHVyZSBpcyBiZWluZyByZXF1ZXN0ZWQgZnJvbSB0aGUgY29tcG9uZW50LiAgVGhlIAorICAgIGFwcGxpY2F0aW9uIHNoYWxsIGFsbG9jYXRlIHRoZSBjb3JyZWN0IHN0cnVjdHVyZSBhbmQgc2hhbGwgZmlsbCBpbiB0aGUgCisgICAgc3RydWN0dXJlIHNpemUgYW5kIHZlcnNpb24gaW5mb3JtYXRpb24gYmVmb3JlIGludm9raW5nIHRoaXMgbWFjcm8uICAKKyAgICBJZiB0aGUgY29tcG9uZW50IGhhcyBub3QgaGFkIHRoaXMgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgc2VudCBiZWZvcmUsIAorICAgIHRoZW4gdGhlIGNvbXBvbmVudCBzaG91bGQgcmV0dXJuIGEgc2V0IG9mIHZhbGlkIERFRkFVTFQgdmFsdWVzIGZvciB0aGUgCisgICAgY29tcG9uZW50LiAgVGhpcyBpcyBhIGJsb2NraW5nIGNhbGwuICAKKyAgICAKKyAgICBUaGUgY29tcG9uZW50IHNob3VsZCByZXR1cm4gZnJvbSB0aGlzIGNhbGwgd2l0aGluIDUgbXNlYy4KKyAgICAKKyAgICBAcGFyYW0gW2luXSBoQ29tcG9uZW50CisgICAgICAgIEhhbmRsZSBvZiB0aGUgY29tcG9uZW50IHRvIGJlIGFjY2Vzc2VkLiAgVGhpcyBpcyB0aGUgY29tcG9uZW50CisgICAgICAgIGhhbmRsZSByZXR1cm5lZCBieSB0aGUgY2FsbCB0byB0aGUgT01YX0dldEhhbmRsZSBmdW5jdGlvbi4KKyAgICBAcGFyYW0gW2luXSBuSW5kZXgKKyAgICAgICAgSW5kZXggb2YgdGhlIHN0cnVjdHVyZSB0byBiZSBmaWxsZWQuICBUaGlzIHZhbHVlIGlzIGZyb20gdGhlCisgICAgICAgIE9NWF9JTkRFWFRZUEUgZW51bWVyYXRpb24uCisgICAgQHBhcmFtIFtpbixvdXRdIHBDb21wb25lbnRDb25maWdTdHJ1Y3R1cmUKKyAgICAgICAgcG9pbnRlciB0byBhcHBsaWNhdGlvbiBhbGxvY2F0ZWQgc3RydWN0dXJlIHRvIGJlIGZpbGxlZCBieSB0aGUgCisgICAgICAgIGNvbXBvbmVudC4KKyAgICBAcmV0dXJuIE9NWF9FUlJPUlRZUEUKKyAgICAgICAgSWYgdGhlIGNvbW1hbmQgc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVzLCB0aGUgcmV0dXJuIGNvZGUgd2lsbCBiZQorICAgICAgICBPTVhfRXJyb3JOb25lLiAgT3RoZXJ3aXNlIHRoZSBhcHByb3ByaWF0ZSBPTVggZXJyb3Igd2lsbCBiZSByZXR1cm5lZC4KKyAgICBAaW5ncm91cCBjb21wCisqLyAgICAgICAgCisjZGVmaW5lIE9NWF9HZXRDb25maWcoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGhDb21wb25lbnQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIG5Db25maWdJbmRleCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHBDb21wb25lbnRDb25maWdTdHJ1Y3R1cmUpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICgoT01YX0NPTVBPTkVOVFRZUEUqKWhDb21wb25lbnQpLT5HZXRDb25maWcoICAgICAgICAgICAgXAorICAgICAgICBoQ29tcG9uZW50LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBuQ29uZmlnSW5kZXgsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBwQ29tcG9uZW50Q29uZmlnU3RydWN0dXJlKSAgICAgICAvKiBNYWNybyBFbmQgKi8KKworCisvKiogVGhlIE9NWF9TZXRDb25maWcgbWFjcm8gd2lsbCBzZW5kIG9uZSBvZiB0aGUgY29uZmlndXJhdGlvbiAKKyAgICBzdHJ1Y3R1cmVzIHRvIGEgY29tcG9uZW50LiAgRWFjaCBzdHJ1Y3R1cmUgc2hhbGwgYmUgc2VudCBvbmUgYXQgYSB0aW1lLAorICAgIGVhY2ggaW4gYSBzZXBhcmF0ZSBpbnZvY2F0aW9uIG9mIHRoZSBtYWNyby4gIFRoaXMgbWFjcm8gY2FuIGJlIGludm9rZWQgCisgICAgYW55dGltZSBhZnRlciB0aGUgY29tcG9uZW50IGhhcyBiZWVuIGxvYWRlZC4gIFRoZSBhcHBsaWNhdGlvbiBzaGFsbCAKKyAgICBhbGxvY2F0ZSB0aGUgY29ycmVjdCBzdHJ1Y3R1cmUgYW5kIHNoYWxsIGZpbGwgaW4gdGhlIHN0cnVjdHVyZSBzaXplIAorICAgIGFuZCB2ZXJzaW9uIGluZm9ybWF0aW9uIChhcyB3ZWxsIGFzIHRoZSBhY3R1YWwgZGF0YSkgYmVmb3JlIGludm9raW5nIAorICAgIHRoaXMgbWFjcm8uICBUaGUgYXBwbGljYXRpb24gaXMgZnJlZSB0byBkaXNwb3NlIG9mIHRoaXMgc3RydWN0dXJlIGFmdGVyIAorICAgIHRoZSBjYWxsIGFzIHRoZSBjb21wb25lbnQgaXMgcmVxdWlyZWQgdG8gY29weSBhbnkgZGF0YSBpdCBzaGFsbCByZXRhaW4uICAKKyAgICBUaGlzIGlzIGEgYmxvY2tpbmcgY2FsbC4gIAorICAgIAorICAgIFRoZSBjb21wb25lbnQgc2hvdWxkIHJldHVybiBmcm9tIHRoaXMgY2FsbCB3aXRoaW4gNSBtc2VjLgorICAgIAorICAgIEBwYXJhbSBbaW5dIGhDb21wb25lbnQKKyAgICAgICAgSGFuZGxlIG9mIHRoZSBjb21wb25lbnQgdG8gYmUgYWNjZXNzZWQuICBUaGlzIGlzIHRoZSBjb21wb25lbnQKKyAgICAgICAgaGFuZGxlIHJldHVybmVkIGJ5IHRoZSBjYWxsIHRvIHRoZSBPTVhfR2V0SGFuZGxlIGZ1bmN0aW9uLgorICAgIEBwYXJhbSBbaW5dIG5Db25maWdJbmRleAorICAgICAgICBJbmRleCBvZiB0aGUgc3RydWN0dXJlIHRvIGJlIHNlbnQuICBUaGlzIHZhbHVlIGlzIGZyb20gdGhlCisgICAgICAgIE9NWF9JTkRFWFRZUEUgZW51bWVyYXRpb24gYWJvdmUuCisgICAgQHBhcmFtIFtpbl0gcENvbXBvbmVudENvbmZpZ1N0cnVjdHVyZQorICAgICAgICBwb2ludGVyIHRvIGFwcGxpY2F0aW9uIGFsbG9jYXRlZCBzdHJ1Y3R1cmUgdG8gYmUgdXNlZCBmb3IKKyAgICAgICAgaW5pdGlhbGl6YXRpb24gYnkgdGhlIGNvbXBvbmVudC4KKyAgICBAcmV0dXJuIE9NWF9FUlJPUlRZUEUKKyAgICAgICAgSWYgdGhlIGNvbW1hbmQgc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVzLCB0aGUgcmV0dXJuIGNvZGUgd2lsbCBiZQorICAgICAgICBPTVhfRXJyb3JOb25lLiAgT3RoZXJ3aXNlIHRoZSBhcHByb3ByaWF0ZSBPTVggZXJyb3Igd2lsbCBiZSByZXR1cm5lZC4KKyAgICBAaW5ncm91cCBjb21wCisgKi8KKyNkZWZpbmUgT01YX1NldENvbmZpZyggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaENvbXBvbmVudCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbkNvbmZpZ0luZGV4LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcENvbXBvbmVudENvbmZpZ1N0cnVjdHVyZSkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKChPTVhfQ09NUE9ORU5UVFlQRSopaENvbXBvbmVudCktPlNldENvbmZpZyggICAgICAgICAgICBcCisgICAgICAgIGhDb21wb25lbnQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIG5Db25maWdJbmRleCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHBDb21wb25lbnRDb25maWdTdHJ1Y3R1cmUpICAgICAgIC8qIE1hY3JvIEVuZCAqLworCisKKy8qKiBUaGUgT01YX0dldEV4dGVuc2lvbkluZGV4IG1hY3JvIHdpbGwgaW52b2tlIGEgY29tcG9uZW50IHRvIHRyYW5zbGF0ZSAKKyAgICBhIHZlbmRvciBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9yIHBhcmFtZXRlciBzdHJpbmcgaW50byBhbiBPTVggCisgICAgc3RydWN0dXJlIGluZGV4LiAgVGhlcmUgaXMgbm8gcmVxdWlyZW1lbnQgZm9yIHRoZSB2ZW5kb3IgdG8gc3VwcG9ydCAKKyAgICB0aGlzIGNvbW1hbmQgZm9yIHRoZSBpbmRleGVzIGFscmVhZHkgZm91bmQgaW4gdGhlIE9NWF9JTkRFWFRZUEUgCisgICAgZW51bWVyYXRpb24gKHRoaXMgaXMgZG9uZSB0byBzYXZlIHNwYWNlIGluIHNtYWxsIGNvbXBvbmVudHMpLiAgVGhlIAorICAgIGNvbXBvbmVudCBzaGFsbCBzdXBwb3J0IGFsbCB2ZW5kb3Igc3VwcGxpZWQgZXh0ZW5zaW9uIGluZGV4ZXMgbm90IGZvdW5kCisgICAgaW4gdGhlIG1hc3RlciBPTVhfSU5ERVhUWVBFIGVudW1lcmF0aW9uLiAgVGhpcyBpcyBhIGJsb2NraW5nIGNhbGwuICAKKyAgICAKKyAgICBUaGUgY29tcG9uZW50IHNob3VsZCByZXR1cm4gZnJvbSB0aGlzIGNhbGwgd2l0aGluIDUgbXNlYy4KKyAgICAKKyAgICBAcGFyYW0gW2luXSBoQ29tcG9uZW50CisgICAgICAgIEhhbmRsZSBvZiB0aGUgY29tcG9uZW50IHRvIGJlIGFjY2Vzc2VkLiAgVGhpcyBpcyB0aGUgY29tcG9uZW50CisgICAgICAgIGhhbmRsZSByZXR1cm5lZCBieSB0aGUgY2FsbCB0byB0aGUgR2V0SGFuZGxlIGZ1bmN0aW9uLgorICAgIEBwYXJhbSBbaW5dIGNQYXJhbWV0ZXJOYW1lCisgICAgICAgIE9NWF9TVFJJTkcgdGhhdCBzaGFsbCBiZSBsZXNzIHRoYW4gMTI4IGNoYXJhY3RlcnMgbG9uZyBpbmNsdWRpbmcKKyAgICAgICAgdGhlIHRyYWlsaW5nIG51bGwgYnl0ZS4gIFRoaXMgaXMgdGhlIHN0cmluZyB0aGF0IHdpbGwgZ2V0IAorICAgICAgICB0cmFuc2xhdGVkIGJ5IHRoZSBjb21wb25lbnQgaW50byBhIGNvbmZpZ3VyYXRpb24gaW5kZXguCisgICAgQHBhcmFtIFtvdXRdIHBJbmRleFR5cGUKKyAgICAgICAgYSBwb2ludGVyIHRvIGEgT01YX0lOREVYVFlQRSB0byByZWNlaXZlIHRoZSBpbmRleCB2YWx1ZS4KKyAgICBAcmV0dXJuIE9NWF9FUlJPUlRZUEUKKyAgICAgICAgSWYgdGhlIGNvbW1hbmQgc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVzLCB0aGUgcmV0dXJuIGNvZGUgd2lsbCBiZQorICAgICAgICBPTVhfRXJyb3JOb25lLiAgT3RoZXJ3aXNlIHRoZSBhcHByb3ByaWF0ZSBPTVggZXJyb3Igd2lsbCBiZSByZXR1cm5lZC4KKyAgICBAaW5ncm91cCBjb21wCisgKi8KKyNkZWZpbmUgT01YX0dldEV4dGVuc2lvbkluZGV4KCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaENvbXBvbmVudCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgY1BhcmFtZXRlck5hbWUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcEluZGV4VHlwZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoKE9NWF9DT01QT05FTlRUWVBFKiloQ29tcG9uZW50KS0+R2V0RXh0ZW5zaW9uSW5kZXgoICAgIFwKKyAgICAgICAgaENvbXBvbmVudCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgY1BhcmFtZXRlck5hbWUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcEluZGV4VHlwZSkgICAgICAgICAgICAgICAgICAgICAvKiBNYWNybyBFbmQgKi8KKworCisvKiogVGhlIE9NWF9HZXRTdGF0ZSBtYWNybyB3aWxsIGludm9rZSB0aGUgY29tcG9uZW50IHRvIGdldCB0aGUgY3VycmVudCAKKyAgICBzdGF0ZSBvZiB0aGUgY29tcG9uZW50IGFuZCBwbGFjZSB0aGUgc3RhdGUgdmFsdWUgaW50byB0aGUgbG9jYXRpb24KKyAgICBwb2ludGVkIHRvIGJ5IHBTdGF0ZS4gIAorICAgIAorICAgIFRoZSBjb21wb25lbnQgc2hvdWxkIHJldHVybiBmcm9tIHRoaXMgY2FsbCB3aXRoaW4gNSBtc2VjLgorICAgIAorICAgIEBwYXJhbSBbaW5dIGhDb21wb25lbnQKKyAgICAgICAgSGFuZGxlIG9mIHRoZSBjb21wb25lbnQgdG8gYmUgYWNjZXNzZWQuICBUaGlzIGlzIHRoZSBjb21wb25lbnQKKyAgICAgICAgaGFuZGxlIHJldHVybmVkIGJ5IHRoZSBjYWxsIHRvIHRoZSBPTVhfR2V0SGFuZGxlIGZ1bmN0aW9uLgorICAgIEBwYXJhbSBbb3V0XSBwU3RhdGUKKyAgICAgICAgcG9pbnRlciB0byB0aGUgbG9jYXRpb24gdG8gcmVjZWl2ZSB0aGUgc3RhdGUuICBUaGUgdmFsdWUgcmV0dXJuZWQKKyAgICAgICAgaXMgb25lIG9mIHRoZSBPTVhfU1RBVEVUWVBFIG1lbWJlcnMgCisgICAgQHJldHVybiBPTVhfRVJST1JUWVBFCisgICAgICAgIElmIHRoZSBjb21tYW5kIHN1Y2Nlc3NmdWxseSBleGVjdXRlcywgdGhlIHJldHVybiBjb2RlIHdpbGwgYmUKKyAgICAgICAgT01YX0Vycm9yTm9uZS4gIE90aGVyd2lzZSB0aGUgYXBwcm9wcmlhdGUgT01YIGVycm9yIHdpbGwgYmUgcmV0dXJuZWQuCisgICAgQGluZ3JvdXAgY29tcAorICovCisjZGVmaW5lIE9NWF9HZXRTdGF0ZSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGhDb21wb25lbnQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHBTdGF0ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKChPTVhfQ09NUE9ORU5UVFlQRSopaENvbXBvbmVudCktPkdldFN0YXRlKCAgICAgICAgICAgICBcCisgICAgICAgIGhDb21wb25lbnQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHBTdGF0ZSkgICAgICAgICAgICAgICAgICAgICAgICAgLyogTWFjcm8gRW5kICovCisKKworLyoqIFRoZSBPTVhfVXNlQnVmZmVyIG1hY3JvIHdpbGwgcmVxdWVzdCB0aGF0IHRoZSBjb21wb25lbnQgdXNlCisgICAgYSBidWZmZXIgKGFuZCBhbGxvY2F0ZSBpdHMgb3duIGJ1ZmZlciBoZWFkZXIpIGFscmVhZHkgYWxsb2NhdGVkIAorICAgIGJ5IGFub3RoZXIgY29tcG9uZW50LCBvciBieSB0aGUgSUwgQ2xpZW50LiBUaGlzIGlzIGEgYmxvY2tpbmcgCisgICAgY2FsbC4KKyAgICAKKyAgICBUaGUgY29tcG9uZW50IHNob3VsZCByZXR1cm4gZnJvbSB0aGlzIGNhbGwgd2l0aGluIDIwIG1zZWMuCisgICAgCisgICAgQHBhcmFtIFtpbl0gaENvbXBvbmVudAorICAgICAgICBIYW5kbGUgb2YgdGhlIGNvbXBvbmVudCB0byBiZSBhY2Nlc3NlZC4gIFRoaXMgaXMgdGhlIGNvbXBvbmVudAorICAgICAgICBoYW5kbGUgcmV0dXJuZWQgYnkgdGhlIGNhbGwgdG8gdGhlIE9NWF9HZXRIYW5kbGUgZnVuY3Rpb24uCisgICAgQHBhcmFtIFtvdXRdIHBwQnVmZmVyCisgICAgICAgIHBvaW50ZXIgdG8gYW4gT01YX0JVRkZFUkhFQURFUlRZUEUgc3RydWN0dXJlIHVzZWQgdG8gcmVjZWl2ZSB0aGUgCisgICAgICAgIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciBoZWFkZXIKKyAgICBAcmV0dXJuIE9NWF9FUlJPUlRZUEUKKyAgICAgICAgSWYgdGhlIGNvbW1hbmQgc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVzLCB0aGUgcmV0dXJuIGNvZGUgd2lsbCBiZQorICAgICAgICBPTVhfRXJyb3JOb25lLiAgT3RoZXJ3aXNlIHRoZSBhcHByb3ByaWF0ZSBPTVggZXJyb3Igd2lsbCBiZSByZXR1cm5lZC4KKyAgICBAaW5ncm91cCBjb21wIGJ1ZgorICovCisKKyNkZWZpbmUgT01YX1VzZUJ1ZmZlciggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgaENvbXBvbmVudCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgcHBCdWZmZXJIZHIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgblBvcnRJbmRleCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgcEFwcFByaXZhdGUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgblNpemVCeXRlcywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgcEJ1ZmZlcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoKE9NWF9DT01QT05FTlRUWVBFKiloQ29tcG9uZW50KS0+VXNlQnVmZmVyKCAgICAgICAgICAgIFwKKyAgICAgICAgICAgaENvbXBvbmVudCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgcHBCdWZmZXJIZHIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgblBvcnRJbmRleCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgcEFwcFByaXZhdGUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgblNpemVCeXRlcywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgcEJ1ZmZlcikKKworCisvKiogVGhlIE9NWF9BbGxvY2F0ZUJ1ZmZlciBtYWNybyB3aWxsIHJlcXVlc3QgdGhhdCB0aGUgY29tcG9uZW50IGFsbG9jYXRlIAorICAgIGEgbmV3IGJ1ZmZlciBhbmQgYnVmZmVyIGhlYWRlci4gIFRoZSBjb21wb25lbnQgd2lsbCBhbGxvY2F0ZSB0aGUgCisgICAgYnVmZmVyIGFuZCB0aGUgYnVmZmVyIGhlYWRlciBhbmQgcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgYnVmZmVyIAorICAgIGhlYWRlci4gIFRoaXMgaXMgYSBibG9ja2luZyBjYWxsLgorICAgIAorICAgIFRoZSBjb21wb25lbnQgc2hvdWxkIHJldHVybiBmcm9tIHRoaXMgY2FsbCB3aXRoaW4gNSBtc2VjLgorICAgIAorICAgIEBwYXJhbSBbaW5dIGhDb21wb25lbnQKKyAgICAgICAgSGFuZGxlIG9mIHRoZSBjb21wb25lbnQgdG8gYmUgYWNjZXNzZWQuICBUaGlzIGlzIHRoZSBjb21wb25lbnQKKyAgICAgICAgaGFuZGxlIHJldHVybmVkIGJ5IHRoZSBjYWxsIHRvIHRoZSBPTVhfR2V0SGFuZGxlIGZ1bmN0aW9uLgorICAgIEBwYXJhbSBbb3V0XSBwcEJ1ZmZlcgorICAgICAgICBwb2ludGVyIHRvIGFuIE9NWF9CVUZGRVJIRUFERVJUWVBFIHN0cnVjdHVyZSB1c2VkIHRvIHJlY2VpdmUgCisgICAgICAgIHRoZSBwb2ludGVyIHRvIHRoZSBidWZmZXIgaGVhZGVyCisgICAgQHBhcmFtIFtpbl0gblBvcnRJbmRleAorICAgICAgICBuUG9ydEluZGV4IGlzIHVzZWQgdG8gc2VsZWN0IHRoZSBwb3J0IG9uIHRoZSBjb21wb25lbnQgdGhlIGJ1ZmZlciB3aWxsCisgICAgICAgIGJlIHVzZWQgd2l0aC4gIFRoZSBwb3J0IGNhbiBiZSBmb3VuZCBieSB1c2luZyB0aGUgblBvcnRJbmRleAorICAgICAgICB2YWx1ZSBhcyBhbiBpbmRleCBpbnRvIHRoZSBQb3J0IERlZmluaXRpb24gYXJyYXkgb2YgdGhlIGNvbXBvbmVudC4KKyAgICBAcGFyYW0gW2luXSBwQXBwUHJpdmF0ZQorICAgICAgICBwQXBwUHJpdmF0ZSBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIHBBcHBQcml2YXRlIG1lbWJlciBvZiB0aGUgCisgICAgICAgIGJ1ZmZlciBoZWFkZXIgc3RydWN0dXJlLgorICAgIEBwYXJhbSBbaW5dIG5TaXplQnl0ZXMKKyAgICAgICAgc2l6ZSBvZiB0aGUgYnVmZmVyIHRvIGFsbG9jYXRlLiAgVXNlZCB3aGVuIGJBbGxvY2F0ZU5ldyBpcyB0cnVlLgorICAgIEByZXR1cm4gT01YX0VSUk9SVFlQRQorICAgICAgICBJZiB0aGUgY29tbWFuZCBzdWNjZXNzZnVsbHkgZXhlY3V0ZXMsIHRoZSByZXR1cm4gY29kZSB3aWxsIGJlCisgICAgICAgIE9NWF9FcnJvck5vbmUuICBPdGhlcndpc2UgdGhlIGFwcHJvcHJpYXRlIE9NWCBlcnJvciB3aWxsIGJlIHJldHVybmVkLgorICAgIEBpbmdyb3VwIGNvbXAgYnVmCisgKi8gICAgCisjZGVmaW5lIE9NWF9BbGxvY2F0ZUJ1ZmZlciggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGhDb21wb25lbnQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHBwQnVmZmVyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIG5Qb3J0SW5kZXgsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHBBcHBQcml2YXRlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIG5TaXplQnl0ZXMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKChPTVhfQ09NUE9ORU5UVFlQRSopaENvbXBvbmVudCktPkFsbG9jYXRlQnVmZmVyKCAgICAgICBcCisgICAgICAgIGhDb21wb25lbnQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHBwQnVmZmVyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIG5Qb3J0SW5kZXgsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHBBcHBQcml2YXRlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIG5TaXplQnl0ZXMpICAgICAgICAgICAgICAgICAgICAgLyogTWFjcm8gRW5kICovCisKKworLyoqIFRoZSBPTVhfRnJlZUJ1ZmZlciBtYWNybyB3aWxsIHJlbGVhc2UgYSBidWZmZXIgaGVhZGVyIGZyb20gdGhlIGNvbXBvbmVudAorICAgIHdoaWNoIHdhcyBhbGxvY2F0ZWQgdXNpbmcgZWl0aGVyIE9NWF9BbGxvY2F0ZUJ1ZmZlciBvciBPTVhfVXNlQnVmZmVyLiBJZiAgCisgICAgdGhlIGNvbXBvbmVudCBhbGxvY2F0ZWQgdGhlIGJ1ZmZlciAoc2VlIHRoZSBPTVhfVXNlQnVmZmVyIG1hY3JvKSB0aGVuIAorICAgIHRoZSBjb21wb25lbnQgc2hhbGwgZnJlZSB0aGUgYnVmZmVyIGFuZCBidWZmZXIgaGVhZGVyLiBUaGlzIGlzIGEgCisgICAgYmxvY2tpbmcgY2FsbC4gCisgICAgCisgICAgVGhlIGNvbXBvbmVudCBzaG91bGQgcmV0dXJuIGZyb20gdGhpcyBjYWxsIHdpdGhpbiAyMCBtc2VjLgorICAgIAorICAgIEBwYXJhbSBbaW5dIGhDb21wb25lbnQKKyAgICAgICAgSGFuZGxlIG9mIHRoZSBjb21wb25lbnQgdG8gYmUgYWNjZXNzZWQuICBUaGlzIGlzIHRoZSBjb21wb25lbnQKKyAgICAgICAgaGFuZGxlIHJldHVybmVkIGJ5IHRoZSBjYWxsIHRvIHRoZSBPTVhfR2V0SGFuZGxlIGZ1bmN0aW9uLgorICAgIEBwYXJhbSBbaW5dIG5Qb3J0SW5kZXgKKyAgICAgICAgblBvcnRJbmRleCBpcyB1c2VkIHRvIHNlbGVjdCB0aGUgcG9ydCBvbiB0aGUgY29tcG9uZW50IHRoZSBidWZmZXIgd2lsbAorICAgICAgICBiZSB1c2VkIHdpdGguCisgICAgQHBhcmFtIFtpbl0gcEJ1ZmZlcgorICAgICAgICBwb2ludGVyIHRvIGFuIE9NWF9CVUZGRVJIRUFERVJUWVBFIHN0cnVjdHVyZSBhbGxvY2F0ZWQgd2l0aCBVc2VCdWZmZXIKKyAgICAgICAgb3IgQWxsb2NhdGVCdWZmZXIuCisgICAgQHJldHVybiBPTVhfRVJST1JUWVBFCisgICAgICAgIElmIHRoZSBjb21tYW5kIHN1Y2Nlc3NmdWxseSBleGVjdXRlcywgdGhlIHJldHVybiBjb2RlIHdpbGwgYmUKKyAgICAgICAgT01YX0Vycm9yTm9uZS4gIE90aGVyd2lzZSB0aGUgYXBwcm9wcmlhdGUgT01YIGVycm9yIHdpbGwgYmUgcmV0dXJuZWQuCisgICAgQGluZ3JvdXAgY29tcCBidWYKKyAqLworI2RlZmluZSBPTVhfRnJlZUJ1ZmZlciggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBoQ29tcG9uZW50LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBuUG9ydEluZGV4LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBwQnVmZmVyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICgoT01YX0NPTVBPTkVOVFRZUEUqKWhDb21wb25lbnQpLT5GcmVlQnVmZmVyKCAgICAgICAgICAgXAorICAgICAgICBoQ29tcG9uZW50LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBuUG9ydEluZGV4LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBwQnVmZmVyKSAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1hY3JvIEVuZCAqLworCisKKy8qKiBUaGUgT01YX0VtcHR5VGhpc0J1ZmZlciBtYWNybyB3aWxsIHNlbmQgYSBidWZmZXIgZnVsbCBvZiBkYXRhIHRvIGFuIAorICAgIGlucHV0IHBvcnQgb2YgYSBjb21wb25lbnQuICBUaGUgYnVmZmVyIHdpbGwgYmUgZW1wdGllZCBieSB0aGUgY29tcG9uZW50CisgICAgYW5kIHJldHVybmVkIHRvIHRoZSBhcHBsaWNhdGlvbiB2aWEgdGhlIEVtcHR5QnVmZmVyRG9uZSBjYWxsIGJhY2suCisgICAgVGhpcyBpcyBhIG5vbi1ibG9ja2luZyBjYWxsIGluIHRoYXQgdGhlIGNvbXBvbmVudCB3aWxsIHJlY29yZCB0aGUgYnVmZmVyCisgICAgYW5kIHJldHVybiBpbW1lZGlhdGVseSBhbmQgdGhlbiBlbXB0eSB0aGUgYnVmZmVyLCBsYXRlciwgYXQgdGhlIHByb3BlciAKKyAgICB0aW1lLiAgQXMgZXhwZWN0ZWQsIHRoaXMgbWFjcm8gbWF5IGJlIGludm9rZWQgb25seSB3aGlsZSB0aGUgY29tcG9uZW50IAorICAgIGlzIGluIHRoZSBPTVhfU3RhdGVFeGVjdXRpbmcuICBJZiBuUG9ydEluZGV4IGRvZXMgbm90IHNwZWNpZnkgYW4gaW5wdXQKKyAgICBwb3J0LCB0aGUgY29tcG9uZW50IHNoYWxsIHJldHVybiBhbiBlcnJvci4gIAorICAgIAorICAgIFRoZSBjb21wb25lbnQgc2hvdWxkIHJldHVybiBmcm9tIHRoaXMgY2FsbCB3aXRoaW4gNSBtc2VjLgorICAgIAorICAgIEBwYXJhbSBbaW5dIGhDb21wb25lbnQKKyAgICAgICAgSGFuZGxlIG9mIHRoZSBjb21wb25lbnQgdG8gYmUgYWNjZXNzZWQuICBUaGlzIGlzIHRoZSBjb21wb25lbnQKKyAgICAgICAgaGFuZGxlIHJldHVybmVkIGJ5IHRoZSBjYWxsIHRvIHRoZSBPTVhfR2V0SGFuZGxlIGZ1bmN0aW9uLgorICAgIEBwYXJhbSBbaW5dIHBCdWZmZXIKKyAgICAgICAgcG9pbnRlciB0byBhbiBPTVhfQlVGRkVSSEVBREVSVFlQRSBzdHJ1Y3R1cmUgYWxsb2NhdGVkIHdpdGggVXNlQnVmZmVyCisgICAgICAgIG9yIEFsbG9jYXRlQnVmZmVyLgorICAgIEByZXR1cm4gT01YX0VSUk9SVFlQRQorICAgICAgICBJZiB0aGUgY29tbWFuZCBzdWNjZXNzZnVsbHkgZXhlY3V0ZXMsIHRoZSByZXR1cm4gY29kZSB3aWxsIGJlCisgICAgICAgIE9NWF9FcnJvck5vbmUuICBPdGhlcndpc2UgdGhlIGFwcHJvcHJpYXRlIE9NWCBlcnJvciB3aWxsIGJlIHJldHVybmVkLgorICAgIEBpbmdyb3VwIGNvbXAgYnVmCisgKi8KKyNkZWZpbmUgT01YX0VtcHR5VGhpc0J1ZmZlciggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaENvbXBvbmVudCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcEJ1ZmZlcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoKE9NWF9DT01QT05FTlRUWVBFKiloQ29tcG9uZW50KS0+RW1wdHlUaGlzQnVmZmVyKCAgICAgIFwKKyAgICAgICAgaENvbXBvbmVudCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcEJ1ZmZlcikgICAgICAgICAgICAgICAgICAgICAgICAvKiBNYWNybyBFbmQgKi8KKworCisvKiogVGhlIE9NWF9GaWxsVGhpc0J1ZmZlciBtYWNybyB3aWxsIHNlbmQgYW4gZW1wdHkgYnVmZmVyIHRvIGFuIAorICAgIG91dHB1dCBwb3J0IG9mIGEgY29tcG9uZW50LiAgVGhlIGJ1ZmZlciB3aWxsIGJlIGZpbGxlZCBieSB0aGUgY29tcG9uZW50CisgICAgYW5kIHJldHVybmVkIHRvIHRoZSBhcHBsaWNhdGlvbiB2aWEgdGhlIEZpbGxCdWZmZXJEb25lIGNhbGwgYmFjay4KKyAgICBUaGlzIGlzIGEgbm9uLWJsb2NraW5nIGNhbGwgaW4gdGhhdCB0aGUgY29tcG9uZW50IHdpbGwgcmVjb3JkIHRoZSBidWZmZXIKKyAgICBhbmQgcmV0dXJuIGltbWVkaWF0ZWx5IGFuZCB0aGVuIGZpbGwgdGhlIGJ1ZmZlciwgbGF0ZXIsIGF0IHRoZSBwcm9wZXIgCisgICAgdGltZS4gIEFzIGV4cGVjdGVkLCB0aGlzIG1hY3JvIG1heSBiZSBpbnZva2VkIG9ubHkgd2hpbGUgdGhlIGNvbXBvbmVudCAKKyAgICBpcyBpbiB0aGUgT01YX0V4ZWN1dGluZ1N0YXRlLiAgSWYgblBvcnRJbmRleCBkb2VzIG5vdCBzcGVjaWZ5IGFuIG91dHB1dAorICAgIHBvcnQsIHRoZSBjb21wb25lbnQgc2hhbGwgcmV0dXJuIGFuIGVycm9yLiAgCisgICAgCisgICAgVGhlIGNvbXBvbmVudCBzaG91bGQgcmV0dXJuIGZyb20gdGhpcyBjYWxsIHdpdGhpbiA1IG1zZWMuCisgICAgCisgICAgQHBhcmFtIFtpbl0gaENvbXBvbmVudAorICAgICAgICBIYW5kbGUgb2YgdGhlIGNvbXBvbmVudCB0byBiZSBhY2Nlc3NlZC4gIFRoaXMgaXMgdGhlIGNvbXBvbmVudAorICAgICAgICBoYW5kbGUgcmV0dXJuZWQgYnkgdGhlIGNhbGwgdG8gdGhlIE9NWF9HZXRIYW5kbGUgZnVuY3Rpb24uCisgICAgQHBhcmFtIFtpbl0gcEJ1ZmZlcgorICAgICAgICBwb2ludGVyIHRvIGFuIE9NWF9CVUZGRVJIRUFERVJUWVBFIHN0cnVjdHVyZSBhbGxvY2F0ZWQgd2l0aCBVc2VCdWZmZXIKKyAgICAgICAgb3IgQWxsb2NhdGVCdWZmZXIuCisgICAgQHJldHVybiBPTVhfRVJST1JUWVBFCisgICAgICAgIElmIHRoZSBjb21tYW5kIHN1Y2Nlc3NmdWxseSBleGVjdXRlcywgdGhlIHJldHVybiBjb2RlIHdpbGwgYmUKKyAgICAgICAgT01YX0Vycm9yTm9uZS4gIE90aGVyd2lzZSB0aGUgYXBwcm9wcmlhdGUgT01YIGVycm9yIHdpbGwgYmUgcmV0dXJuZWQuCisgICAgQGluZ3JvdXAgY29tcCBidWYKKyAqLworI2RlZmluZSBPTVhfRmlsbFRoaXNCdWZmZXIoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBoQ29tcG9uZW50LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBwQnVmZmVyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICgoT01YX0NPTVBPTkVOVFRZUEUqKWhDb21wb25lbnQpLT5GaWxsVGhpc0J1ZmZlciggICAgICAgXAorICAgICAgICBoQ29tcG9uZW50LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBwQnVmZmVyKSAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1hY3JvIEVuZCAqLworCisKKworLyoqIFRoZSBPTVhfVXNlRUdMSW1hZ2UgbWFjcm8gd2lsbCByZXF1ZXN0IHRoYXQgdGhlIGNvbXBvbmVudCB1c2UKKyAgICBhIEVHTEltYWdlIHByb3ZpZGVkIGJ5IEVHTCAoYW5kIGFsbG9jYXRlIGl0cyBvd24gYnVmZmVyIGhlYWRlcikKKyAgICBUaGlzIGlzIGEgYmxvY2tpbmcgY2FsbC4KKyAgICAKKyAgICBUaGUgY29tcG9uZW50IHNob3VsZCByZXR1cm4gZnJvbSB0aGlzIGNhbGwgd2l0aGluIDIwIG1zZWMuCisgICAgCisgICAgQHBhcmFtIFtpbl0gaENvbXBvbmVudAorICAgICAgICBIYW5kbGUgb2YgdGhlIGNvbXBvbmVudCB0byBiZSBhY2Nlc3NlZC4gIFRoaXMgaXMgdGhlIGNvbXBvbmVudAorICAgICAgICBoYW5kbGUgcmV0dXJuZWQgYnkgdGhlIGNhbGwgdG8gdGhlIE9NWF9HZXRIYW5kbGUgZnVuY3Rpb24uCisgICAgQHBhcmFtIFtvdXRdIHBwQnVmZmVyCisgICAgICAgIHBvaW50ZXIgdG8gYW4gT01YX0JVRkZFUkhFQURFUlRZUEUgc3RydWN0dXJlIHVzZWQgdG8gcmVjZWl2ZSB0aGUgCisgICAgICAgIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciBoZWFkZXIuICBOb3RlIHRoYXQgdGhlIG1lbW9yeSBsb2NhdGlvbiB1c2VkCisgICAgICAgIGZvciB0aGlzIGJ1ZmZlciBpcyBOT1QgdmlzaWJsZSB0byB0aGUgSUwgQ2xpZW50LgorICAgIEBwYXJhbSBbaW5dIG5Qb3J0SW5kZXgKKyAgICAgICAgblBvcnRJbmRleCBpcyB1c2VkIHRvIHNlbGVjdCB0aGUgcG9ydCBvbiB0aGUgY29tcG9uZW50IHRoZSBidWZmZXIgd2lsbAorICAgICAgICBiZSB1c2VkIHdpdGguICBUaGUgcG9ydCBjYW4gYmUgZm91bmQgYnkgdXNpbmcgdGhlIG5Qb3J0SW5kZXgKKyAgICAgICAgdmFsdWUgYXMgYW4gaW5kZXggaW50byB0aGUgUG9ydCBEZWZpbml0aW9uIGFycmF5IG9mIHRoZSBjb21wb25lbnQuCisgICAgQHBhcmFtIFtpbl0gcEFwcFByaXZhdGUKKyAgICAgICAgcEFwcFByaXZhdGUgaXMgdXNlZCB0byBpbml0aWFsaXplIHRoZSBwQXBwUHJpdmF0ZSBtZW1iZXIgb2YgdGhlIAorICAgICAgICBidWZmZXIgaGVhZGVyIHN0cnVjdHVyZS4KKyAgICBAcGFyYW0gW2luXSBlZ2xJbWFnZQorICAgICAgICBlZ2xJbWFnZSBjb250YWlucyB0aGUgaGFuZGxlIG9mIHRoZSBFR0xJbWFnZSB0byB1c2UgYXMgYSBidWZmZXIgb24gdGhlCisgICAgICAgIHNwZWNpZmllZCBwb3J0LiAgVGhlIGNvbXBvbmVudCBpcyBleHBlY3RlZCB0byB2YWxpZGF0ZSBwcm9wZXJ0aWVzIG9mIAorICAgICAgICB0aGUgRUdMSW1hZ2UgYWdhaW5zdCB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgcG9ydCB0byBlbnN1cmUgdGhlIGNvbXBvbmVudAorICAgICAgICBjYW4gdXNlIHRoZSBFR0xJbWFnZSBhcyBhIGJ1ZmZlci4gICAgICAgICAgCisgICAgQHJldHVybiBPTVhfRVJST1JUWVBFCisgICAgICAgIElmIHRoZSBjb21tYW5kIHN1Y2Nlc3NmdWxseSBleGVjdXRlcywgdGhlIHJldHVybiBjb2RlIHdpbGwgYmUKKyAgICAgICAgT01YX0Vycm9yTm9uZS4gIE90aGVyd2lzZSB0aGUgYXBwcm9wcmlhdGUgT01YIGVycm9yIHdpbGwgYmUgcmV0dXJuZWQuCisgICAgQGluZ3JvdXAgY29tcCBidWYKKyAqLworI2RlZmluZSBPTVhfVXNlRUdMSW1hZ2UoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICBoQ29tcG9uZW50LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICBwcEJ1ZmZlckhkciwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICBuUG9ydEluZGV4LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICBwQXBwUHJpdmF0ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICBlZ2xJbWFnZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICgoT01YX0NPTVBPTkVOVFRZUEUqKWhDb21wb25lbnQpLT5Vc2VFR0xJbWFnZSggICAgICAgICAgXAorICAgICAgICAgICBoQ29tcG9uZW50LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICBwcEJ1ZmZlckhkciwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICBuUG9ydEluZGV4LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICBwQXBwUHJpdmF0ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICBlZ2xJbWFnZSkKKworLyoqIFRoZSBPTVhfSW5pdCBtZXRob2QgaXMgdXNlZCB0byBpbml0aWFsaXplIHRoZSBPTVggY29yZS4gIEl0IHNoYWxsIGJlIHRoZQorICAgIGZpcnN0IGNhbGwgbWFkZSBpbnRvIE9NWCBhbmQgaXQgc2hvdWxkIG9ubHkgYmUgZXhlY3V0ZWQgb25lIHRpbWUgd2l0aG91dAorICAgIGFuIGludGVydmllbmluZyBPTVhfRGVpbml0IGNhbGwuICAKKyAgICAKKyAgICBUaGUgY29yZSBzaG91bGQgcmV0dXJuIGZyb20gdGhpcyBjYWxsIHdpdGhpbiAyMCBtc2VjLgorCisgICAgQHJldHVybiBPTVhfRVJST1JUWVBFCisgICAgICAgIElmIHRoZSBjb21tYW5kIHN1Y2Nlc3NmdWxseSBleGVjdXRlcywgdGhlIHJldHVybiBjb2RlIHdpbGwgYmUKKyAgICAgICAgT01YX0Vycm9yTm9uZS4gIE90aGVyd2lzZSB0aGUgYXBwcm9wcmlhdGUgT01YIGVycm9yIHdpbGwgYmUgcmV0dXJuZWQuCisgICAgQGluZ3JvdXAgY29yZQorICovCitPTVhfQVBJIE9NWF9FUlJPUlRZUEUgT01YX0FQSUVOVFJZIE9NWF9Jbml0KHZvaWQpOworCisKKy8qKiBUaGUgT01YX0RlaW5pdCBtZXRob2QgaXMgdXNlZCB0byBkZWluaXRpYWxpemUgdGhlIE9NWCBjb3JlLiAgSXQgc2hhbGwgYmUgCisgICAgdGhlIGxhc3QgY2FsbCBtYWRlIGludG8gT01YLiBJbiB0aGUgZXZlbnQgdGhhdCB0aGUgY29yZSBkZXRlcm1pbmVzIHRoYXQgCisgICAgdGhhcmUgYXJlIGNvbXBvbmVudHMgbG9hZGVkIHdoZW4gdGhpcyBjYWxsIGlzIG1hZGUsIHRoZSBjb3JlIG1heSByZXR1cm4gCisgICAgd2l0aCBhbiBlcnJvciByYXRoZXIgdGhhbiB0cnkgdG8gdW5sb2FkIHRoZSBjb21wb25lbnRzLgorICAgICAgICAKKyAgICBUaGUgY29yZSBzaG91bGQgcmV0dXJuIGZyb20gdGhpcyBjYWxsIHdpdGhpbiAyMCBtc2VjLgorICAgIAorICAgIEByZXR1cm4gT01YX0VSUk9SVFlQRQorICAgICAgICBJZiB0aGUgY29tbWFuZCBzdWNjZXNzZnVsbHkgZXhlY3V0ZXMsIHRoZSByZXR1cm4gY29kZSB3aWxsIGJlCisgICAgICAgIE9NWF9FcnJvck5vbmUuICBPdGhlcndpc2UgdGhlIGFwcHJvcHJpYXRlIE9NWCBlcnJvciB3aWxsIGJlIHJldHVybmVkLgorICAgIEBpbmdyb3VwIGNvcmUKKyAqLworT01YX0FQSSBPTVhfRVJST1JUWVBFIE9NWF9BUElFTlRSWSBPTVhfRGVpbml0KHZvaWQpOworCisKKy8qKiBUaGUgT01YX0NvbXBvbmVudE5hbWVFbnVtIG1ldGhvZCB3aWxsIGVudW1lcmF0ZSB0aHJvdWdoIGFsbCB0aGUgbmFtZXMgb2YKKyAgICByZWNvZ25pc2VkIHZhbGlkIGNvbXBvbmVudHMgaW4gdGhlIHN5c3RlbS4gVGhpcyBmdW5jdGlvbiBpcyBwcm92aWRlZAorICAgIGFzIGEgbWVhbnMgdG8gZGV0ZWN0IGFsbCB0aGUgY29tcG9uZW50cyBpbiB0aGUgc3lzdGVtIHJ1bi10aW1lLiBUaGVyZSBpcworICAgIG5vIHN0cmljdCBvcmRlcmluZyB0byB0aGUgZW51bWVyYXRpb24gb3JkZXIgb2YgY29tcG9uZW50IG5hbWVzLCBhbHRob3VnaAorICAgIGVhY2ggbmFtZSB3aWxsIG9ubHkgYmUgZW51bWVyYXRlZCBvbmNlLiAgSWYgdGhlIE9NWCBjb3JlIHN1cHBvcnRzIHJ1bi10aW1lCisgICAgaW5zdGFsbGF0aW9uIG9mIG5ldyBjb21wb25lbnRzLCBpdCBpcyBvbmx5IHJlcXVyaWVkIHRvIGRldGVjdCBuZXdseQorICAgIGluc3RhbGxlZCBjb21wb25lbnRzIHdoZW4gdGhlIGZpcnN0IGNhbGwgdG8gZW51bWVyYXRlIGNvbXBvbmVudCBuYW1lcworICAgIGlzIG1hZGUgKGkuZS4gd2hlbiBuSW5kZXggaXMgMHgwKS4KKyAgICAKKyAgICBUaGUgY29yZSBzaG91bGQgcmV0dXJuIGZyb20gdGhpcyBjYWxsIGluIDIwIG1zZWMuCisgICAgCisgICAgQHBhcmFtIFtvdXRdIGNDb21wb25lbnROYW1lCisgICAgICAgIHBvaW50ZXIgdG8gYSBudWxsIHRlcm1pbmF0ZWQgc3RyaW5nIHdpdGggdGhlIGNvbXBvbmVudCBuYW1lLiAgVGhlCisgICAgICAgIG5hbWVzIG9mIHRoZSBjb21wb25lbnRzIGFyZSBzdHJpbmdzIGxlc3MgdGhhbiAxMjcgYnl0ZXMgaW4gbGVuZ3RoCisgICAgICAgIHBsdXMgdGhlIHRyYWlsaW5nIG51bGwgZm9yIGEgbWF4aW11bSBzaXplIG9mIDEyOCBieXRlcy4gIEFuIGV4YW1wbGUgCisgICAgICAgIG9mIGEgdmFsaWQgY29tcG9uZW50IG5hbWUgaXMgIk9NWC5USS5BVURJTy5EU1AuTUlYRVJcMCIuICBOYW1lcyBhcmUgCisgICAgICAgIGFzc2lnbmVkIGJ5IHRoZSB2ZW5kb3IsIGJ1dCBzaGFsbCBzdGFydCB3aXRoICJPTVguIiBhbmQgdGhlbiBoYXZlIAorICAgICAgICB0aGUgVmVuZG9yIGRlc2lnbmF0aW9uIG5leHQuCisgICAgQHBhcmFtIFtpbl0gbk5hbWVMZW5ndGgKKyAgICAgICAgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gdGhlIGNDb21wb25lbnROYW1lIHN0cmluZy4gIFdpdGggYWxsIAorICAgICAgICBjb21wb25lbnQgbmFtZSBzdHJpbmdzIHJlc3RyaWN0ZWQgdG8gbGVzcyB0aGFuIDEyOCBjaGFyYWN0ZXJzIAorICAgICAgICAoaW5jbHVkaW5nIHRoZSB0cmFpbGluZyBudWxsKSBpdCBpcyByZWNvbWVuZGVkIHRoYXQgdGhlIGNhbGxlcgorICAgICAgICBwcm92aWRlIGEgaW5wdXQgc3RyaW5nIGZvciB0aGUgY0NvbXBvbmVudE5hbWUgb2YgMTI4IGNoYXJhY3RlcnMuCisgICAgQHBhcmFtIFtpbl0gbkluZGV4CisgICAgICAgIG51bWJlciBjb250YWluaW5nIHRoZSBlbnVtZXJhdGlvbiBpbmRleCBmb3IgdGhlIGNvbXBvbmVudC4gCisgICAgICAgIE11bHRpcGxlIGNhbGxzIHRvIE9NWF9Db21wb25lbnROYW1lRW51bSB3aXRoIGluY3JlYXNpbmcgdmFsdWVzCisgICAgICAgIG9mIG5JbmRleCB3aWxsIGVudW1lcmF0ZSB0aHJvdWdoIHRoZSBjb21wb25lbnQgbmFtZXMgaW4gdGhlCisgICAgICAgIHN5c3RlbSB1bnRpbCBPTVhfRXJyb3JOb01vcmUgaXMgcmV0dXJuZWQuICBUaGUgdmFsdWUgb2YgbkluZGV4CisgICAgICAgIGlzIDAgdG8gKE4tMSksIHdoZXJlIE4gaXMgdGhlIG51bWJlciBvZiB2YWxpZCBpbnN0YWxsZWQgY29tcG9uZW50cworICAgICAgICBpbiB0aGUgc3lzdGVtLgorICAgIEByZXR1cm4gT01YX0VSUk9SVFlQRQorICAgICAgICBJZiB0aGUgY29tbWFuZCBzdWNjZXNzZnVsbHkgZXhlY3V0ZXMsIHRoZSByZXR1cm4gY29kZSB3aWxsIGJlCisgICAgICAgIE9NWF9FcnJvck5vbmUuICBXaGVuIHRoZSB2YWx1ZSBvZiBuSW5kZXggZXhjZWVkcyB0aGUgbnVtYmVyIG9mIAorICAgICAgICBjb21wb25lbnRzIGluIHRoZSBzeXN0ZW0gbWludXMgMSwgT01YX0Vycm9yTm9Nb3JlIHdpbGwgYmUKKyAgICAgICAgcmV0dXJuZWQuIE90aGVyd2lzZSB0aGUgYXBwcm9wcmlhdGUgT01YIGVycm9yIHdpbGwgYmUgcmV0dXJuZWQuCisgICAgQGluZ3JvdXAgY29yZQorICovCitPTVhfQVBJIE9NWF9FUlJPUlRZUEUgT01YX0FQSUVOVFJZIE9NWF9Db21wb25lbnROYW1lRW51bSgKKyAgICBPTVhfT1VUIE9NWF9TVFJJTkcgY0NvbXBvbmVudE5hbWUsCisgICAgT01YX0lOICBPTVhfVTMyIG5OYW1lTGVuZ3RoLAorICAgIE9NWF9JTiAgT01YX1UzMiBuSW5kZXgpOworCisKKy8qKiBUaGUgT01YX0dldEhhbmRsZSBtZXRob2Qgd2lsbCBsb2NhdGUgdGhlIGNvbXBvbmVudCBzcGVjaWZpZWQgYnkgdGhlCisgICAgY29tcG9uZW50IG5hbWUgZ2l2ZW4sIGxvYWQgdGhhdCBjb21wb25lbnQgaW50byBtZW1vcnkgYW5kIHRoZW4gaW52b2tlCisgICAgdGhlIGNvbXBvbmVudCdzIG1ldGhvZHMgdG8gY3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoZSBjb21wb25lbnQuICAKKyAgICAKKyAgICBUaGUgY29yZSBzaG91bGQgcmV0dXJuIGZyb20gdGhpcyBjYWxsIHdpdGhpbiAyMCBtc2VjLgorICAgIAorICAgIEBwYXJhbSBbb3V0XSBwSGFuZGxlCisgICAgICAgIHBvaW50ZXIgdG8gYW4gT01YX0hBTkRMRVRZUEUgcG9pbnRlciB0byBiZSBmaWxsZWQgaW4gYnkgdGhpcyBtZXRob2QuCisgICAgQHBhcmFtIFtpbl0gY0NvbXBvbmVudE5hbWUKKyAgICAgICAgcG9pbnRlciB0byBhIG51bGwgdGVybWluYXRlZCBzdHJpbmcgd2l0aCB0aGUgY29tcG9uZW50IG5hbWUuICBUaGUKKyAgICAgICAgbmFtZXMgb2YgdGhlIGNvbXBvbmVudHMgYXJlIHN0cmluZ3MgbGVzcyB0aGFuIDEyNyBieXRlcyBpbiBsZW5ndGgKKyAgICAgICAgcGx1cyB0aGUgdHJhaWxpbmcgbnVsbCBmb3IgYSBtYXhpbXVtIHNpemUgb2YgMTI4IGJ5dGVzLiAgQW4gZXhhbXBsZSAKKyAgICAgICAgb2YgYSB2YWxpZCBjb21wb25lbnQgbmFtZSBpcyAiT01YLlRJLkFVRElPLkRTUC5NSVhFUlwwIi4gIE5hbWVzIGFyZSAKKyAgICAgICAgYXNzaWduZWQgYnkgdGhlIHZlbmRvciwgYnV0IHNoYWxsIHN0YXJ0IHdpdGggIk9NWC4iIGFuZCB0aGVuIGhhdmUgCisgICAgICAgIHRoZSBWZW5kb3IgZGVzaWduYXRpb24gbmV4dC4KKyAgICBAcGFyYW0gW2luXSBwQXBwRGF0YQorICAgICAgICBwb2ludGVyIHRvIGFuIGFwcGxpY2F0aW9uIGRlZmluZWQgdmFsdWUgdGhhdCB3aWxsIGJlIHJldHVybmVkCisgICAgICAgIGR1cmluZyBjYWxsYmFja3Mgc28gdGhhdCB0aGUgYXBwbGljYXRpb24gY2FuIGlkZW50aWZ5IHRoZSBzb3VyY2UKKyAgICAgICAgb2YgdGhlIGNhbGxiYWNrLgorICAgIEBwYXJhbSBbaW5dIHBDYWxsQmFja3MKKyAgICAgICAgcG9pbnRlciB0byBhIE9NWF9DQUxMQkFDS1RZUEUgc3RydWN0dXJlIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlCisgICAgICAgIGNvbXBvbmVudCB0byBpbml0aWFsaXplIGl0IHdpdGguICAKKyAgICBAcmV0dXJuIE9NWF9FUlJPUlRZUEUKKyAgICAgICAgSWYgdGhlIGNvbW1hbmQgc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVzLCB0aGUgcmV0dXJuIGNvZGUgd2lsbCBiZQorICAgICAgICBPTVhfRXJyb3JOb25lLiAgT3RoZXJ3aXNlIHRoZSBhcHByb3ByaWF0ZSBPTVggZXJyb3Igd2lsbCBiZSByZXR1cm5lZC4KKyAgICBAaW5ncm91cCBjb3JlCisgKi8KK09NWF9BUEkgT01YX0VSUk9SVFlQRSBPTVhfQVBJRU5UUlkgT01YX0dldEhhbmRsZSgKKyAgICBPTVhfT1VUIE9NWF9IQU5ETEVUWVBFKiBwSGFuZGxlLCAKKyAgICBPTVhfSU4gIE9NWF9TVFJJTkcgY0NvbXBvbmVudE5hbWUsCisgICAgT01YX0lOICBPTVhfUFRSIHBBcHBEYXRhLAorICAgIE9NWF9JTiAgT01YX0NBTExCQUNLVFlQRSogcENhbGxCYWNrcyk7CisKKworLyoqIFRoZSBPTVhfRnJlZUhhbmRsZSBtZXRob2Qgd2lsbCBmcmVlIGEgaGFuZGxlIGFsbG9jYXRlZCBieSB0aGUgT01YX0dldEhhbmRsZSAKKyAgICBtZXRob2QuICBJZiB0aGUgY29tcG9uZW50IHJlZmVyZW5jZSBjb3VudCBnb2VzIHRvIHplcm8sIHRoZSBjb21wb25lbnQgd2lsbAorICAgIGJlIHVubG9hZGVkIGZyb20gbWVtb3J5LiAgCisgICAgCisgICAgVGhlIGNvcmUgc2hvdWxkIHJldHVybiBmcm9tIHRoaXMgY2FsbCB3aXRoaW4gMjAgbXNlYyB3aGVuIHRoZSBjb21wb25lbnQgaXMgCisgICAgaW4gdGhlIE9NWF9TdGF0ZUxvYWRlZCBzdGF0ZS4KKworICAgIEBwYXJhbSBbaW5dIGhDb21wb25lbnQKKyAgICAgICAgSGFuZGxlIG9mIHRoZSBjb21wb25lbnQgdG8gYmUgYWNjZXNzZWQuICBUaGlzIGlzIHRoZSBjb21wb25lbnQKKyAgICAgICAgaGFuZGxlIHJldHVybmVkIGJ5IHRoZSBjYWxsIHRvIHRoZSBHZXRIYW5kbGUgZnVuY3Rpb24uCisgICAgQHJldHVybiBPTVhfRVJST1JUWVBFCisgICAgICAgIElmIHRoZSBjb21tYW5kIHN1Y2Nlc3NmdWxseSBleGVjdXRlcywgdGhlIHJldHVybiBjb2RlIHdpbGwgYmUKKyAgICAgICAgT01YX0Vycm9yTm9uZS4gIE90aGVyd2lzZSB0aGUgYXBwcm9wcmlhdGUgT01YIGVycm9yIHdpbGwgYmUgcmV0dXJuZWQuCisgICAgQGluZ3JvdXAgY29yZQorICovCitPTVhfQVBJIE9NWF9FUlJPUlRZUEUgT01YX0FQSUVOVFJZIE9NWF9GcmVlSGFuZGxlKAorICAgIE9NWF9JTiAgT01YX0hBTkRMRVRZUEUgaENvbXBvbmVudCk7CisKKworCisvKiogVGhlIE9NWF9TZXR1cFR1bm5lbCBtZXRob2Qgd2lsbCBoYW5kbGUgdGhlIG5lY2Vzc2FyeSBjYWxscyB0byB0aGUgY29tcG9uZW50cworICAgIHRvIHNldHVwIHRoZSBzcGVjaWZpZWQgdHVubmVsIHRoZSB0d28gY29tcG9uZW50cy4gIE5PVEU6IFRoaXMgaXMKKyAgICBhbiBhY3R1YWwgbWV0aG9kIChub3QgYSAjZGVmaW5lIG1hY3JvKS4gIFRoaXMgbWV0aG9kIHdpbGwgbWFrZSBjYWxscyBpbnRvCisgICAgdGhlIGNvbXBvbmVudCBDb21wb25lbnRUdW5uZWxSZXF1ZXN0IG1ldGhvZCB0byBkbyB0aGUgYWN0dWFsIHR1bm5lbCAKKyAgICBjb25uZWN0aW9uLiAgCisKKyAgICBUaGUgQ29tcG9uZW50VHVubmVsUmVxdWVzdCBtZXRob2Qgb24gYm90aCBjb21wb25lbnRzIHdpbGwgYmUgY2FsbGVkLiAKKyAgICBUaGlzIG1ldGhvZCBzaGFsbCBub3QgYmUgY2FsbGVkIHVubGVzcyB0aGUgY29tcG9uZW50IGlzIGluIHRoZSAKKyAgICBPTVhfU3RhdGVMb2FkZWQgc3RhdGUgZXhjZXB0IHdoZW4gdGhlIHBvcnRzIHVzZWQgZm9yIHRoZSB0dW5uZWwgYXJlCisgICAgZGlzYWJsZWQuIEluIHRoaXMgY2FzZSwgdGhlIGNvbXBvbmVudCBtYXkgYmUgaW4gdGhlIE9NWF9TdGF0ZUV4ZWN1dGluZywKKyAgICBPTVhfU3RhdGVQYXVzZSwgb3IgT01YX1N0YXRlSWRsZSBzdGF0ZXMuIAorCisgICAgVGhlIGNvcmUgc2hvdWxkIHJldHVybiBmcm9tIHRoaXMgY2FsbCB3aXRoaW4gMjAgbXNlYy4KKyAgICAKKyAgICBAcGFyYW0gW2luXSBoT3V0cHV0CisgICAgICAgIEhhbmRsZSBvZiB0aGUgY29tcG9uZW50IHRvIGJlIGFjY2Vzc2VkLiAgQWxzbyB0aGlzIGlzIHRoZSBoYW5kbGUKKyAgICAgICAgb2YgdGhlIGNvbXBvbmVudCB3aG9zZSBwb3J0LCBzcGVjaWZpZWQgaW4gdGhlIG5Qb3J0T3V0cHV0IHBhcmFtZXRlcgorICAgICAgICB3aWxsIGJlIHVzZWQgdGhlIHNvdXJjZSBmb3IgdGhlIHR1bm5lbC4gVGhpcyBpcyB0aGUgY29tcG9uZW50IGhhbmRsZQorICAgICAgICByZXR1cm5lZCBieSB0aGUgY2FsbCB0byB0aGUgT01YX0dldEhhbmRsZSBmdW5jdGlvbi4gIFRoZXJlIGlzIGEgCisgICAgICAgIHJlcXVpcmVtZW50IHRoYXQgaE91dHB1dCBiZSB0aGUgc291cmNlIGZvciB0aGUgZGF0YSB3aGVuCisgICAgICAgIHR1bmVsbGluZyAoaS5lLiBuUG9ydE91dHB1dCBpcyBhbiBvdXRwdXQgcG9ydCkuICBJZiAweDAsIHRoZSBjb21wb25lbnQKKyAgICAgICAgc3BlY2lmaWVkIGluIGhJbnB1dCB3aWxsIGhhdmUgaXQncyBwb3J0IHNwZWNpZmllZCBpbiBuUG9ydElucHV0CisgICAgICAgIHNldHVwIGZvciBjb21tdW5pY2F0aW9uIHdpdGggdGhlIGFwcGxpY2F0aW9uIC8gSUwgY2xpZW50LgorICAgIEBwYXJhbSBbaW5dIG5Qb3J0T3V0cHV0CisgICAgICAgIG5Qb3J0T3V0cHV0IGlzIHVzZWQgdG8gc2VsZWN0IHRoZSBzb3VyY2UgcG9ydCBvbiBjb21wb25lbnQgdG8gYmUKKyAgICAgICAgdXNlZCBpbiB0aGUgdHVubmVsLiAKKyAgICBAcGFyYW0gW2luXSBoSW5wdXQKKyAgICAgICAgVGhpcyBpcyB0aGUgY29tcG9uZW50IHRvIHNldHVwIHRoZSB0dW5uZWwgd2l0aC4gVGhpcyBpcyB0aGUgaGFuZGxlCisgICAgICAgIG9mIHRoZSBjb21wb25lbnQgd2hvc2UgcG9ydCwgc3BlY2lmaWVkIGluIHRoZSBuUG9ydElucHV0IHBhcmFtZXRlcgorICAgICAgICB3aWxsIGJlIHVzZWQgdGhlIGRlc3RpbmF0aW9uIGZvciB0aGUgdHVubmVsLiBUaGlzIGlzIHRoZSBjb21wb25lbnQgaGFuZGxlCisgICAgICAgIHJldHVybmVkIGJ5IHRoZSBjYWxsIHRvIHRoZSBPTVhfR2V0SGFuZGxlIGZ1bmN0aW9uLiAgVGhlcmUgaXMgYSAKKyAgICAgICAgcmVxdWlyZW1lbnQgdGhhdCBoSW5wdXQgYmUgdGhlIGRlc3RpbmF0aW9uIGZvciB0aGUgZGF0YSB3aGVuCisgICAgICAgIHR1bmVsbGluZyAoaS5lLiBuUG9ydEludXQgaXMgYW4gaW5wdXQgcG9ydCkuICAgSWYgMHgwLCB0aGUgY29tcG9uZW50CisgICAgICAgIHNwZWNpZmllZCBpbiBoT3V0cHV0IHdpbGwgaGF2ZSBpdCdzIHBvcnQgc3BlY2lmaWVkIGluIG5Qb3J0UE91dHB1dAorICAgICAgICBzZXR1cCBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBhcHBsaWNhdGlvbiAvIElMIGNsaWVudC4KKyAgICBAcGFyYW0gW2luXSBuUG9ydElucHV0CisgICAgICAgIG5Qb3J0SW5wdXQgaXMgdXNlZCB0byBzZWxlY3QgdGhlIGRlc3RpbmF0aW9uIHBvcnQgb24gY29tcG9uZW50IHRvIGJlCisgICAgICAgIHVzZWQgaW4gdGhlIHR1bm5lbC4KKyAgICBAcmV0dXJuIE9NWF9FUlJPUlRZUEUKKyAgICAgICAgSWYgdGhlIGNvbW1hbmQgc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVzLCB0aGUgcmV0dXJuIGNvZGUgd2lsbCBiZQorICAgICAgICBPTVhfRXJyb3JOb25lLiAgT3RoZXJ3aXNlIHRoZSBhcHByb3ByaWF0ZSBPTVggZXJyb3Igd2lsbCBiZSByZXR1cm5lZC4KKyAgICAgICAgV2hlbiBPTVhfRXJyb3JOb3RJbXBsZW1lbnRlZCBpcyByZXR1cm5lZCwgb25lIG9yIGJvdGggY29tcG9uZW50cyBpcyAKKyAgICAgICAgYSBub24taW50ZXJvcCBjb21wb25lbnQgYW5kIGRvZXMgbm90IHN1cHBvcnQgdHVubmVsaW5nLgorICAgICAgICAKKyAgICAgICAgT24gZmFpbHVyZSwgdGhlIHBvcnRzIG9mIGJvdGggY29tcG9uZW50cyBhcmUgc2V0dXAgZm9yIGNvbW11bmljYXRpb24KKyAgICAgICAgd2l0aCB0aGUgYXBwbGljYXRpb24gLyBJTCBDbGllbnQuCisgICAgQGluZ3JvdXAgY29yZSB0dW4KKyAqLworT01YX0FQSSBPTVhfRVJST1JUWVBFIE9NWF9BUElFTlRSWSBPTVhfU2V0dXBUdW5uZWwoCisgICAgT01YX0lOICBPTVhfSEFORExFVFlQRSBoT3V0cHV0LAorICAgIE9NWF9JTiAgT01YX1UzMiBuUG9ydE91dHB1dCwKKyAgICBPTVhfSU4gIE9NWF9IQU5ETEVUWVBFIGhJbnB1dCwKKyAgICBPTVhfSU4gIE9NWF9VMzIgblBvcnRJbnB1dCk7CisgICAgCisvKiogQGluZ3JvdXAgY3AgKi8KK09NWF9BUEkgT01YX0VSUk9SVFlQRSAgIE9NWF9HZXRDb250ZW50UGlwZSgKKyAgICBPTVhfT1VUIE9NWF9IQU5ETEVUWVBFICpoUGlwZSwKKyAgICBPTVhfSU4gT01YX1NUUklORyBzelVSSSk7CisKKy8qKiBUaGUgT01YX0dldENvbXBvbmVudHNPZlJvbGUgbWV0aG9kIHdpbGwgcmV0dXJuIHRoZSBudW1iZXIgb2YgY29tcG9uZW50cyB0aGF0IHN1cHBvcnQgdGhlIGdpdmVuCisgICAgcm9sZSBhbmQgKGlmIHRoZSBjb21wTmFtZXMgZmllbGQgaXMgbm9uLU5VTEwpIHRoZSBuYW1lcyBvZiB0aG9zZSBjb21wb25lbnRzLiBUaGUgY2FsbCB3aWxsIGZhaWwgaWYgCisgICAgYW4gaW5zdWZmaWNpZW50bHkgc2l6ZWQgYXJyYXkgb2YgbmFtZXMgaXMgc3VwcGxpZWQuIFRvIGVuc3VyZSB0aGUgYXJyYXkgaXMgc3VmZmljaWVudGx5IHNpemVkIHRoZQorICAgIGNsaWVudCBzaG91bGQ6CisgICAgICAgICogZmlyc3QgY2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGggdGhlIGNvbXBOYW1lcyBmaWVsZCBOVUxMIHRvIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIGNvbXBvbmVudCBuYW1lcworICAgICAgICAqIHNlY29uZCBjYWxsIHRoaXMgZnVuY3Rpb24gd2l0aCB0aGUgY29tcE5hbWVzIGZpZWxkIHBvaW50aW5nIHRvIGFuIGFycmF5IG9mIG5hbWVzIGFsbG9jYXRlZCAKKyAgICAgICAgICBhY2NvcmRpbmcgdG8gdGhlIG51bWJlciByZXR1cm5lZCBieSB0aGUgZmlyc3QgY2FsbC4KKworICAgIFRoZSBjb3JlIHNob3VsZCByZXR1cm4gZnJvbSB0aGlzIGNhbGwgd2l0aGluIDUgbXNlYy4KKyAgICAKKyAgICBAcGFyYW0gW2luXSByb2xlCisgICAgICAgIFRoaXMgaXMgZ2VuZXJpYyBzdGFuZGFyZCBjb21wb25lbnQgbmFtZSBjb25zaXN0aW5nIG9ubHkgb2YgY29tcG9uZW50IGNsYXNzIAorICAgICAgICBuYW1lIGFuZCB0aGUgdHlwZSB3aXRoaW4gdGhhdCBjbGFzcyAoZS5nLiAnYXVkaW9fZGVjb2Rlci5hYWMnKS4KKyAgICBAcGFyYW0gW2lub3V0XSBwTnVtQ29tcHMKKyAgICAgICAgVGhpcyBpcyB1c2VkIGJvdGggYXMgaW5wdXQgYW5kIG91dHB1dC4gCisgCisgICAgICAgIElmIGNvbXBOYW1lcyBpcyBOVUxMLCB0aGUgaW5wdXQgaXMgaWdub3JlZCBhbmQgdGhlIG91dHB1dCBzcGVjaWZpZXMgaG93IG1hbnkgY29tcG9uZW50cyBzdXBwb3J0CisgICAgICAgIHRoZSBnaXZlbiByb2xlLgorICAgICAKKyAgICAgICAgSWYgY29tcE5hbWVzIGlzIG5vdCBOVUxMLCBvbiBpbnB1dCBpdCBib3VuZHMgdGhlIHNpemUgb2YgdGhlIGlucHV0IHN0cnVjdHVyZSBhbmQgCisgICAgICAgIG9uIG91dHB1dCwgaXQgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgY29tcG9uZW50cyBzdHJpbmcgbmFtZXMgbGlzdGVkIHdpdGhpbiB0aGUgY29tcE5hbWVzIHBhcmFtZXRlci4KKyAgICBAcGFyYW0gW2lub3V0XSBjb21wTmFtZXMKKyAgICAgICAgSWYgTlVMTCB0aGlzIGZpZWxkIGlzIGlnbm9yZWQuIElmIG5vbi1OVUxMIHRoaXMgcG9pbnRzIHRvIGFuIGFycmF5IG9mIDEyOC1ieXRlIHN0cmluZ3Mgd2hpY2ggYWNjZXB0cyAKKyAgICAgICAgYSBsaXN0IG9mIHRoZSBuYW1lcyBvZiBhbGwgcGh5c2ljYWwgY29tcG9uZW50cyB0aGF0IGltcGxlbWVudCB0aGUgc3BlY2lmaWVkIHN0YW5kYXJkIGNvbXBvbmVudCBuYW1lLiAKKyAgICAgICAgRWFjaCBuYW1lIGlzIE5VTEwgdGVybWluYXRlZC4gbnVtQ29tcHMgaW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgbmFtZXMuCisgICAgQGluZ3JvdXAgY29yZQorICovCitPTVhfQVBJIE9NWF9FUlJPUlRZUEUgT01YX0dldENvbXBvbmVudHNPZlJvbGUgKCAKKwlPTVhfSU4gICAgICBPTVhfU1RSSU5HIHJvbGUsCisgICAgT01YX0lOT1VUICAgT01YX1UzMiAqcE51bUNvbXBzLAorICAgIE9NWF9JTk9VVCAgIE9NWF9VOCAgKipjb21wTmFtZXMpOworCisvKiogVGhlIE9NWF9HZXRSb2xlc09mQ29tcG9uZW50IG1ldGhvZCB3aWxsIHJldHVybiB0aGUgbnVtYmVyIG9mIHJvbGVzIHN1cHBvcnRlZCBieSB0aGUgZ2l2ZW4KKyAgICBjb21wb25lbnQgYW5kIChpZiB0aGUgcm9sZXMgZmllbGQgaXMgbm9uLU5VTEwpIHRoZSBuYW1lcyBvZiB0aG9zZSByb2xlcy4gVGhlIGNhbGwgd2lsbCBmYWlsIGlmIAorICAgIGFuIGluc3VmZmljaWVudGx5IHNpemVkIGFycmF5IG9mIG5hbWVzIGlzIHN1cHBsaWVkLiBUbyBlbnN1cmUgdGhlIGFycmF5IGlzIHN1ZmZpY2llbnRseSBzaXplZCB0aGUKKyAgICBjbGllbnQgc2hvdWxkOgorICAgICAgICAqIGZpcnN0IGNhbGwgdGhpcyBmdW5jdGlvbiB3aXRoIHRoZSByb2xlcyBmaWVsZCBOVUxMIHRvIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIHJvbGUgbmFtZXMKKyAgICAgICAgKiBzZWNvbmQgY2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGggdGhlIHJvbGVzIGZpZWxkIHBvaW50aW5nIHRvIGFuIGFycmF5IG9mIG5hbWVzIGFsbG9jYXRlZCAKKyAgICAgICAgICBhY2NvcmRpbmcgdG8gdGhlIG51bWJlciByZXR1cm5lZCBieSB0aGUgZmlyc3QgY2FsbC4KKworICAgIFRoZSBjb3JlIHNob3VsZCByZXR1cm4gZnJvbSB0aGlzIGNhbGwgd2l0aGluIDUgbXNlYy4KKworICAgIEBwYXJhbSBbaW5dIGNvbXBOYW1lCisgICAgICAgIFRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIGNvbXBvbmVudCBiZWluZyBxdWVyaWVkIGFib3V0LgorICAgIEBwYXJhbSBbaW5vdXRdIHBOdW1Sb2xlcworICAgICAgICBUaGlzIGlzIHVzZWQgYm90aCBhcyBpbnB1dCBhbmQgb3V0cHV0LiAKKyAKKyAgICAgICAgSWYgcm9sZXMgaXMgTlVMTCwgdGhlIGlucHV0IGlzIGlnbm9yZWQgYW5kIHRoZSBvdXRwdXQgc3BlY2lmaWVzIGhvdyBtYW55IHJvbGVzIHRoZSBjb21wb25lbnQgc3VwcG9ydHMuCisgICAgIAorICAgICAgICBJZiBjb21wTmFtZXMgaXMgbm90IE5VTEwsIG9uIGlucHV0IGl0IGJvdW5kcyB0aGUgc2l6ZSBvZiB0aGUgaW5wdXQgc3RydWN0dXJlIGFuZCAKKyAgICAgICAgb24gb3V0cHV0LCBpdCBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiByb2xlcyBzdHJpbmcgbmFtZXMgbGlzdGVkIHdpdGhpbiB0aGUgcm9sZXMgcGFyYW1ldGVyLgorICAgIEBwYXJhbSBbb3V0XSByb2xlcworICAgICAgICBJZiBOVUxMIHRoaXMgZmllbGQgaXMgaWdub3JlZC4gSWYgbm9uLU5VTEwgdGhpcyBwb2ludHMgdG8gYW4gYXJyYXkgb2YgMTI4LWJ5dGUgc3RyaW5ncyAKKyAgICAgICAgd2hpY2ggYWNjZXB0cyBhIGxpc3Qgb2YgdGhlIG5hbWVzIG9mIGFsbCBzdGFuZGFyZCBjb21wb25lbnRzIHJvbGVzIGltcGxlbWVudGVkIG9uIHRoZSAKKyAgICAgICAgc3BlY2lmaWVkIGNvbXBvbmVudCBuYW1lLiBudW1Db21wcyBpbmRpY2F0ZXMgdGhlIG51bWJlciBvZiBuYW1lcy4KKyAgICBAaW5ncm91cCBjb3JlCisgKi8KK09NWF9BUEkgT01YX0VSUk9SVFlQRSBPTVhfR2V0Um9sZXNPZkNvbXBvbmVudCAoIAorCU9NWF9JTiAgICAgIE9NWF9TVFJJTkcgY29tcE5hbWUsIAorICAgIE9NWF9JTk9VVCAgIE9NWF9VMzIgKnBOdW1Sb2xlcywKKyAgICBPTVhfT1VUICAgICBPTVhfVTggKipyb2xlcyk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZgorLyogRmlsZSBFT0YgKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9vcGVubWF4L09NWF9JVkNvbW1vbi5oIGIvaW5jbHVkZS9tZWRpYS9vcGVubWF4L09NWF9JVkNvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiYjRkZWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL21lZGlhL29wZW5tYXgvT01YX0lWQ29tbW9uLmgKQEAgLTAsMCArMSw5NDcgQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogQ29weXJpZ2h0IChDKSAxOTk4LTIwMDkgUGFja2V0VmlkZW8KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIKKyAqIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucworICogYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisvKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBUaGUgS2hyb25vcyBHcm91cCBJbmMuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0CisgKiB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAorICogVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKKyAqIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqLworCisvKioKKyAqIEBmaWxlIE9NWF9JVkNvbW1vbi5oIC0gT3Blbk1heCBJTCB2ZXJzaW9uIDEuMS4yCisgKiAgVGhlIHN0cnVjdHVyZXMgbmVlZGVkIGJ5IFZpZGVvIGFuZCBJbWFnZSBjb21wb25lbnRzIHRvIGV4Y2hhbmdlCisgKiAgcGFyYW1ldGVycyBhbmQgY29uZmlndXJhdGlvbiBkYXRhIHdpdGggdGhlIGNvbXBvbmVudHMuCisgKi8KKyNpZm5kZWYgT01YX0lWQ29tbW9uX2gKKyNkZWZpbmUgT01YX0lWQ29tbW9uX2gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisvKioKKyAqIEVhY2ggT01YIGhlYWRlciBtdXN0IGluY2x1ZGUgYWxsIHJlcXVpcmVkIGhlYWRlciBmaWxlcyB0byBhbGxvdyB0aGUgaGVhZGVyCisgKiB0byBjb21waWxlIHdpdGhvdXQgZXJyb3JzLiAgVGhlIGluY2x1ZGVzIGJlbG93IGFyZSByZXF1aXJlZCBmb3IgdGhpcyBoZWFkZXIKKyAqIGZpbGUgdG8gY29tcGlsZSBzdWNjZXNzZnVsbHkKKyAqLworCisjaW5jbHVkZSA8T01YX0NvcmUuaD4KKworLyoqIEBkZWZncm91cCBpdiBPcGVuTUFYIElMIEltYWdpbmcgYW5kIFZpZGVvIERvbWFpbgorICogQ29tbW9uIHN0cnVjdHVyZXMgZm9yIE9wZW5NQVggSUwgSW1hZ2luZyBhbmQgVmlkZW8gZG9tYWlucworICogQHsKKyAqLworCisKKy8qKgorICogRW51bWVyYXRpb24gZGVmaW5pbmcgcG9zc2libGUgdW5jb21wcmVzc2VkIGltYWdlL3ZpZGVvIGZvcm1hdHMuCisgKgorICogRU5VTVM6CisgKiAgVW51c2VkICAgICAgICAgICAgICAgICA6IFBsYWNlaG9sZGVyIHZhbHVlIHdoZW4gZm9ybWF0IGlzIE4vQQorICogIE1vbm9jaHJvbWUgICAgICAgICAgICAgOiBibGFjayBhbmQgd2hpdGUKKyAqICA4Yml0UkdCMzMyICAgICAgICAgICAgIDogUmVkIDc6NSwgR3JlZW4gNDoyLCBCbHVlIDE6MAorICogIDEyYml0UkdCNDQ0ICAgICAgICAgICAgOiBSZWQgMTE6OCwgR3JlZW4gNzo0LCBCbHVlIDM6MAorICogIDE2Yml0QVJHQjQ0NDQgICAgICAgICAgOiBBbHBoYSAxNToxMiwgUmVkIDExOjgsIEdyZWVuIDc6NCwgQmx1ZSAzOjAKKyAqICAxNmJpdEFSR0IxNTU1ICAgICAgICAgIDogQWxwaGEgMTUsIFJlZCAxNDoxMCwgR3JlZW4gOTo1LCBCbHVlIDQ6MAorICogIDE2Yml0UkdCNTY1ICAgICAgICAgICAgOiBSZWQgMTU6MTEsIEdyZWVuIDEwOjUsIEJsdWUgNDowCisgKiAgMTZiaXRCR1I1NjUgICAgICAgICAgICA6IEJsdWUgMTU6MTEsIEdyZWVuIDEwOjUsIFJlZCA0OjAKKyAqICAxOGJpdFJHQjY2NiAgICAgICAgICAgIDogUmVkIDE3OjEyLCBHcmVlbiAxMTo2LCBCbHVlIDU6MAorICogIDE4Yml0QVJHQjE2NjUgICAgICAgICAgOiBBbHBoYSAxNywgUmVkIDE2OjExLCBHcmVlbiAxMDo1LCBCbHVlIDQ6MAorICogIDE5Yml0QVJHQjE2NjYgICAgICAgICAgOiBBbHBoYSAxOCwgUmVkIDE3OjEyLCBHcmVlbiAxMTo2LCBCbHVlIDU6MAorICogIDI0Yml0UkdCODg4ICAgICAgICAgICAgOiBSZWQgMjQ6MTYsIEdyZWVuIDE1OjgsIEJsdWUgNzowCisgKiAgMjRiaXRCR1I4ODggICAgICAgICAgICA6IEJsdWUgMjQ6MTYsIEdyZWVuIDE1OjgsIFJlZCA3OjAKKyAqICAyNGJpdEFSR0IxODg3ICAgICAgICAgIDogQWxwaGEgMjMsIFJlZCAyMjoxNSwgR3JlZW4gMTQ6NywgQmx1ZSA2OjAKKyAqICAyNWJpdEFSR0IxODg4ICAgICAgICAgIDogQWxwaGEgMjQsIFJlZCAyMzoxNiwgR3JlZW4gMTU6OCwgQmx1ZSA3OjAKKyAqICAzMmJpdEJHUkE4ODg4ICAgICAgICAgIDogQmx1ZSAzMToyNCwgR3JlZW4gMjM6MTYsIFJlZCAxNTo4LCBBbHBoYSA3OjAKKyAqICAzMmJpdEFSR0I4ODg4ICAgICAgICAgIDogQWxwaGEgMzE6MjQsIFJlZCAyMzoxNiwgR3JlZW4gMTU6OCwgQmx1ZSA3OjAKKyAqICBZVVY0MTFQbGFuYXIgICAgICAgICAgIDogVSxZIGFyZSBzdWJzYW1wbGVkIGJ5IGEgZmFjdG9yIG9mIDQgaG9yaXpvbnRhbGx5CisgKiAgWVVWNDExUGFja2VkUGxhbmFyICAgICA6IHBhY2tlZCBwZXIgcGF5bG9hZCBpbiBwbGFuYXIgc2xpY2VzCisgKiAgWVVWNDIwUGxhbmFyICAgICAgICAgICA6IFRocmVlIGFycmF5cyBZLFUsVi4KKyAqICBZVVY0MjBQYWNrZWRQbGFuYXIgICAgIDogcGFja2VkIHBlciBwYXlsb2FkIGluIHBsYW5hciBzbGljZXMKKyAqICBZVVY0MjBTZW1pUGxhbmFyICAgICAgIDogVHdvIGFycmF5cywgb25lIGlzIGFsbCBZLCB0aGUgb3RoZXIgaXMgVSBhbmQgVgorICogIFlVVjQyMlBsYW5hciAgICAgICAgICAgOiBUaHJlZSBhcnJheXMgWSxVLFYuCisgKiAgWVVWNDIyUGFja2VkUGxhbmFyICAgICA6IHBhY2tlZCBwZXIgcGF5bG9hZCBpbiBwbGFuYXIgc2xpY2VzCisgKiAgWVVWNDIyU2VtaVBsYW5hciAgICAgICA6IFR3byBhcnJheXMsIG9uZSBpcyBhbGwgWSwgdGhlIG90aGVyIGlzIFUgYW5kIFYKKyAqICBZQ2JZQ3IgICAgICAgICAgICAgICAgIDogT3JnYW5pemVkIGFzIDE2Yml0IFlVWVYgKGkuZS4gWUNiWUNyKQorICogIFlDcllDYiAgICAgICAgICAgICAgICAgOiBPcmdhbml6ZWQgYXMgMTZiaXQgWVZZVSAoaS5lLiBZQ3JZQ2IpCisgKiAgQ2JZQ3JZICAgICAgICAgICAgICAgICA6IE9yZ2FuaXplZCBhcyAxNmJpdCBVWVZZIChpLmUuIENiWUNyWSkKKyAqICBDcllDYlkgICAgICAgICAgICAgICAgIDogT3JnYW5pemVkIGFzIDE2Yml0IFZZVVkgKGkuZS4gQ3JZQ2JZKQorICogIFlVVjQ0NEludGVybGVhdmVkICAgICAgOiBFYWNoIHBpeGVsIGNvbnRhaW5zIGVxdWFsIHBhcnRzIFlVVgorICogIFJhd0JheWVyOGJpdCAgICAgICAgICAgOiBTTUlBIGNhbWVyYSBvdXRwdXQgZm9ybWF0CisgKiAgUmF3QmF5ZXIxMGJpdCAgICAgICAgICA6IFNNSUEgY2FtZXJhIG91dHB1dCBmb3JtYXQKKyAqICBSYXdCYXllcjhiaXRjb21wcmVzc2VkIDogU01JQSBjYW1lcmEgb3V0cHV0IGZvcm1hdAorICovCit0eXBlZGVmIGVudW0gT01YX0NPTE9SX0ZPUk1BVFRZUEUgeworICAgIE9NWF9DT0xPUl9Gb3JtYXRVbnVzZWQsCisgICAgT01YX0NPTE9SX0Zvcm1hdE1vbm9jaHJvbWUsCisgICAgT01YX0NPTE9SX0Zvcm1hdDhiaXRSR0IzMzIsCisgICAgT01YX0NPTE9SX0Zvcm1hdDEyYml0UkdCNDQ0LAorICAgIE9NWF9DT0xPUl9Gb3JtYXQxNmJpdEFSR0I0NDQ0LAorICAgIE9NWF9DT0xPUl9Gb3JtYXQxNmJpdEFSR0IxNTU1LAorICAgIE9NWF9DT0xPUl9Gb3JtYXQxNmJpdFJHQjU2NSwKKyAgICBPTVhfQ09MT1JfRm9ybWF0MTZiaXRCR1I1NjUsCisgICAgT01YX0NPTE9SX0Zvcm1hdDE4Yml0UkdCNjY2LAorICAgIE9NWF9DT0xPUl9Gb3JtYXQxOGJpdEFSR0IxNjY1LAorICAgIE9NWF9DT0xPUl9Gb3JtYXQxOWJpdEFSR0IxNjY2LAorICAgIE9NWF9DT0xPUl9Gb3JtYXQyNGJpdFJHQjg4OCwKKyAgICBPTVhfQ09MT1JfRm9ybWF0MjRiaXRCR1I4ODgsCisgICAgT01YX0NPTE9SX0Zvcm1hdDI0Yml0QVJHQjE4ODcsCisgICAgT01YX0NPTE9SX0Zvcm1hdDI1Yml0QVJHQjE4ODgsCisgICAgT01YX0NPTE9SX0Zvcm1hdDMyYml0QkdSQTg4ODgsCisgICAgT01YX0NPTE9SX0Zvcm1hdDMyYml0QVJHQjg4ODgsCisgICAgT01YX0NPTE9SX0Zvcm1hdFlVVjQxMVBsYW5hciwKKyAgICBPTVhfQ09MT1JfRm9ybWF0WVVWNDExUGFja2VkUGxhbmFyLAorICAgIE9NWF9DT0xPUl9Gb3JtYXRZVVY0MjBQbGFuYXIsCisgICAgT01YX0NPTE9SX0Zvcm1hdFlVVjQyMFBhY2tlZFBsYW5hciwKKyAgICBPTVhfQ09MT1JfRm9ybWF0WVVWNDIwU2VtaVBsYW5hciwKKyAgICBPTVhfQ09MT1JfRm9ybWF0WVVWNDIyUGxhbmFyLAorICAgIE9NWF9DT0xPUl9Gb3JtYXRZVVY0MjJQYWNrZWRQbGFuYXIsCisgICAgT01YX0NPTE9SX0Zvcm1hdFlVVjQyMlNlbWlQbGFuYXIsCisgICAgT01YX0NPTE9SX0Zvcm1hdFlDYllDciwKKyAgICBPTVhfQ09MT1JfRm9ybWF0WUNyWUNiLAorICAgIE9NWF9DT0xPUl9Gb3JtYXRDYllDclksCisgICAgT01YX0NPTE9SX0Zvcm1hdENyWUNiWSwKKyAgICBPTVhfQ09MT1JfRm9ybWF0WVVWNDQ0SW50ZXJsZWF2ZWQsCisgICAgT01YX0NPTE9SX0Zvcm1hdFJhd0JheWVyOGJpdCwKKyAgICBPTVhfQ09MT1JfRm9ybWF0UmF3QmF5ZXIxMGJpdCwKKyAgICBPTVhfQ09MT1JfRm9ybWF0UmF3QmF5ZXI4Yml0Y29tcHJlc3NlZCwKKyAgICBPTVhfQ09MT1JfRm9ybWF0TDIsCisgICAgT01YX0NPTE9SX0Zvcm1hdEw0LAorICAgIE9NWF9DT0xPUl9Gb3JtYXRMOCwKKyAgICBPTVhfQ09MT1JfRm9ybWF0TDE2LAorICAgIE9NWF9DT0xPUl9Gb3JtYXRMMjQsCisgICAgT01YX0NPTE9SX0Zvcm1hdEwzMiwKKyAgICBPTVhfQ09MT1JfRm9ybWF0WVVWNDIwUGFja2VkU2VtaVBsYW5hciwKKyAgICBPTVhfQ09MT1JfRm9ybWF0WVVWNDIyUGFja2VkU2VtaVBsYW5hciwKKyAgICBPTVhfQ09MT1JfRm9ybWF0MThCaXRCR1I2NjYsCisgICAgT01YX0NPTE9SX0Zvcm1hdDI0Qml0QVJHQjY2NjYsCisgICAgT01YX0NPTE9SX0Zvcm1hdDI0Qml0QUJHUjY2NjYsCisgICAgT01YX0NPTE9SX0Zvcm1hdEtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLworICAgIE9NWF9DT0xPUl9Gb3JtYXRWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLworICAgIC8qKjxSZXNlcnZlZCBhbmRyb2lkIG9wYXF1ZSBjb2xvcmZvcm1hdC4gVGVsbHMgdGhlIGVuY29kZXIgdGhhdAorICAgICAqIHRoZSBhY3R1YWwgY29sb3Jmb3JtYXQgd2lsbCBiZSAgcmVsYXllZCBieSB0aGUKKyAgICAgKiBHcmFsbG9jIEJ1ZmZlcnMuCisgICAgICogRklYTUU6IEluIHRoZSBwcm9jZXNzIG9mIHJlc2VydmluZyBzb21lIGVudW0gdmFsdWVzIGZvcgorICAgICAqIEFuZHJvaWQtc3BlY2lmaWMgT01YIElMIGNvbG9yZm9ybWF0cy4gQ2hhbmdlIHRoaXMgZW51bSB0bworICAgICAqIGFuIGFjY2VwdGFibGUgcmFuZ2Ugb25jZSB0aGF0IGlzIGRvbmUuCisgICAgICogKi8KKyAgICBPTVhfQ09MT1JfRm9ybWF0QW5kcm9pZE9wYXF1ZSA9IDB4N0YwMDA3ODksCisgICAgT01YX1RJX0NPTE9SX0Zvcm1hdFlVVjQyMFBhY2tlZFNlbWlQbGFuYXIgPSAweDdGMDAwMTAwLAorICAgIE9NWF9RQ09NX0NPTE9SX0Zvcm1hdFlWVTQyMFNlbWlQbGFuYXIgPSAweDdGQTMwQzAwLAorICAgIE9NWF9DT0xPUl9Gb3JtYXRNYXggPSAweDdGRkZGRkZGCit9IE9NWF9DT0xPUl9GT1JNQVRUWVBFOworCisKKy8qKgorICogRGVmaW5lcyB0aGUgbWF0cml4IGZvciBjb252ZXJzaW9uIGZyb20gUkdCIHRvIFlVViBvciB2aWNlIHZlcnNhLgorICogaUNvbG9yTWF0cml4IHNob3VsZCBiZSBpbml0aWFsaXplZCB3aXRoIHRoZSBmaXhlZCBwb2ludCB2YWx1ZXMKKyAqIHVzZWQgaW4gY29udmVydGluZyBiZXR3ZWVuIGZvcm1hdHMuCisgKi8KK3R5cGVkZWYgc3RydWN0IE9NWF9DT05GSUdfQ09MT1JDT05WRVJTSU9OVFlQRSB7CisgICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAgIC8qKjwgU2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovCisgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAgIC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvICovCisgICAgT01YX1UzMiBuUG9ydEluZGV4OyAgICAgICAgIC8qKjwgUG9ydCB0aGF0IHRoaXMgc3RydWN0IGFwcGxpZXMgdG8gKi8KKyAgICBPTVhfUzMyIHhDb2xvck1hdHJpeFszXVszXTsgLyoqPCBTdG9yZWQgaW4gc2lnbmVkIFExNiBmb3JtYXQgKi8KKyAgICBPTVhfUzMyIHhDb2xvck9mZnNldFs0XTsgICAgLyoqPCBTdG9yZWQgaW4gc2lnbmVkIFExNiBmb3JtYXQgKi8KK31PTVhfQ09ORklHX0NPTE9SQ09OVkVSU0lPTlRZUEU7CisKKworLyoqCisgKiBTdHJ1Y3R1cmUgZGVmaW5pbmcgcGVyY2VudCB0byBzY2FsZSBlYWNoIGZyYW1lIGRpbWVuc2lvbi4gIEZvciBleGFtcGxlOgorICogVG8gbWFrZSB0aGUgd2lkdGggNTAlIGxhcmdlciwgdXNlIGZXaWR0aCA9IDEuNSBhbmQgdG8gbWFrZSB0aGUgd2lkdGgKKyAqIDEvMiB0aGUgb3JpZ2luYWwgc2l6ZSwgdXNlIGZXaWR0aCA9IDAuNQorICovCit0eXBlZGVmIHN0cnVjdCBPTVhfQ09ORklHX1NDQUxFRkFDVE9SVFlQRSB7CisgICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAvKio8IFNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcyAqLworICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm8gKi8KKyAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7ICAgICAgIC8qKjwgUG9ydCB0aGF0IHRoaXMgc3RydWN0IGFwcGxpZXMgdG8gKi8KKyAgICBPTVhfUzMyIHhXaWR0aDsgICAgICAgICAgIC8qKjwgRml4ZWQgcG9pbnQgdmFsdWUgc3RvcmVkIGFzIFExNiAqLworICAgIE9NWF9TMzIgeEhlaWdodDsgICAgICAgICAgLyoqPCBGaXhlZCBwb2ludCB2YWx1ZSBzdG9yZWQgYXMgUTE2ICovCit9T01YX0NPTkZJR19TQ0FMRUZBQ1RPUlRZUEU7CisKKworLyoqCisgKiBFbnVtZXJhdGlvbiBvZiBwb3NzaWJsZSBpbWFnZSBmaWx0ZXIgdHlwZXMKKyAqLwordHlwZWRlZiBlbnVtIE9NWF9JTUFHRUZJTFRFUlRZUEUgeworICAgIE9NWF9JbWFnZUZpbHRlck5vbmUsCisgICAgT01YX0ltYWdlRmlsdGVyTm9pc2UsCisgICAgT01YX0ltYWdlRmlsdGVyRW1ib3NzLAorICAgIE9NWF9JbWFnZUZpbHRlck5lZ2F0aXZlLAorICAgIE9NWF9JbWFnZUZpbHRlclNrZXRjaCwKKyAgICBPTVhfSW1hZ2VGaWx0ZXJPaWxQYWludCwKKyAgICBPTVhfSW1hZ2VGaWx0ZXJIYXRjaCwKKyAgICBPTVhfSW1hZ2VGaWx0ZXJHcGVuLAorICAgIE9NWF9JbWFnZUZpbHRlckFudGlhbGlhcywKKyAgICBPTVhfSW1hZ2VGaWx0ZXJEZVJpbmcsCisgICAgT01YX0ltYWdlRmlsdGVyU29sYXJpemUsCisgICAgT01YX0ltYWdlRmlsdGVyS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovCisgICAgT01YX0ltYWdlRmlsdGVyVmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KKyAgICBPTVhfSW1hZ2VGaWx0ZXJNYXggPSAweDdGRkZGRkZGCit9IE9NWF9JTUFHRUZJTFRFUlRZUEU7CisKKworLyoqCisgKiBJbWFnZSBmaWx0ZXIgY29uZmlndXJhdGlvbgorICoKKyAqIFNUUlVDVCBNRU1CRVJTOgorICogIG5TaXplICAgICAgICA6IFNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcworICogIG5WZXJzaW9uICAgICA6IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24KKyAqICBuUG9ydEluZGV4ICAgOiBQb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0bworICogIGVJbWFnZUZpbHRlciA6IEltYWdlIGZpbHRlciB0eXBlIGVudW1lcmF0aW9uCisgKi8KK3R5cGVkZWYgc3RydWN0IE9NWF9DT05GSUdfSU1BR0VGSUxURVJUWVBFIHsKKyAgICBPTVhfVTMyIG5TaXplOworICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsKKyAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7CisgICAgT01YX0lNQUdFRklMVEVSVFlQRSBlSW1hZ2VGaWx0ZXI7Cit9IE9NWF9DT05GSUdfSU1BR0VGSUxURVJUWVBFOworCisKKy8qKgorICogQ3VzdG9taXplZCBVIGFuZCBWIGZvciBjb2xvciBlbmhhbmNlbWVudAorICoKKyAqIFNUUlVDVCBNRU1CRVJTOgorICogIG5TaXplICAgICAgICAgICAgIDogU2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzCisgKiAgblZlcnNpb24gICAgICAgICAgOiBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uCisgKiAgblBvcnRJbmRleCAgICAgICAgOiBQb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0bworICogIGJDb2xvckVuaGFuY2VtZW50IDogRW5hYmxlL2Rpc2FibGUgY29sb3IgZW5oYW5jZW1lbnQKKyAqICBuQ3VzdG9taXplZFUgICAgICA6IFByYWN0aWNhbCB2YWx1ZXM6IDE2LTI0MCwgcmFuZ2U6IDAtMjU1LCB2YWx1ZSBzZXQgZm9yCisgKiAgICAgICAgICAgICAgICAgICAgICBVIGNvbXBvbmVudAorICogIG5DdXN0b21pemVkViAgICAgIDogUHJhY3RpY2FsIHZhbHVlczogMTYtMjQwLCByYW5nZTogMC0yNTUsIHZhbHVlIHNldCBmb3IKKyAqICAgICAgICAgICAgICAgICAgICAgIFYgY29tcG9uZW50CisgKi8KK3R5cGVkZWYgc3RydWN0IE9NWF9DT05GSUdfQ09MT1JFTkhBTkNFTUVOVFRZUEUgeworICAgIE9NWF9VMzIgblNpemU7CisgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOworICAgIE9NWF9VMzIgblBvcnRJbmRleDsKKyAgICBPTVhfQk9PTCBiQ29sb3JFbmhhbmNlbWVudDsKKyAgICBPTVhfVTggbkN1c3RvbWl6ZWRVOworICAgIE9NWF9VOCBuQ3VzdG9taXplZFY7Cit9IE9NWF9DT05GSUdfQ09MT1JFTkhBTkNFTUVOVFRZUEU7CisKKworLyoqCisgKiBEZWZpbmUgY29sb3Iga2V5IGFuZCBjb2xvciBrZXkgbWFzaworICoKKyAqIFNUUlVDVCBNRU1CRVJTOgorICogIG5TaXplICAgICAgOiBTaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMKKyAqICBuVmVyc2lvbiAgIDogT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbgorICogIG5Qb3J0SW5kZXggOiBQb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0bworICogIG5BUkdCQ29sb3IgOiAzMmJpdCBBbHBoYSwgUmVkLCBHcmVlbiwgQmx1ZSBDb2xvcgorICogIG5BUkdCTWFzayAgOiAzMmJpdCBNYXNrIGZvciBBbHBoYSwgUmVkLCBHcmVlbiwgQmx1ZSBjaGFubmVscworICovCit0eXBlZGVmIHN0cnVjdCBPTVhfQ09ORklHX0NPTE9SS0VZVFlQRSB7CisgICAgT01YX1UzMiBuU2l6ZTsKKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247CisgICAgT01YX1UzMiBuUG9ydEluZGV4OworICAgIE9NWF9VMzIgbkFSR0JDb2xvcjsKKyAgICBPTVhfVTMyIG5BUkdCTWFzazsKK30gT01YX0NPTkZJR19DT0xPUktFWVRZUEU7CisKKworLyoqCisgKiBMaXN0IG9mIGNvbG9yIGJsZW5kIHR5cGVzIGZvciBwcmUvcG9zdCBwcm9jZXNzaW5nCisgKgorICogRU5VTVM6CisgKiAgTm9uZSAgICAgICAgICA6IE5vIGNvbG9yIGJsZW5kaW5nIHByZXNlbnQKKyAqICBBbHBoYUNvbnN0YW50IDogRnVuY3Rpb24gaXMgKGFscGhhX2NvbnN0YW50ICogc3JjKSArCisgKiAgICAgICAgICAgICAgICAgICgxIC0gYWxwaGFfY29uc3RhbnQpICogZHN0KQorICogIEFscGhhUGVyUGl4ZWwgOiBGdW5jdGlvbiBpcyAoYWxwaGEgKiBzcmMpICsgKDEgLSBhbHBoYSkgKiBkc3QpCisgKiAgQWx0ZXJuYXRlICAgICA6IEZ1bmN0aW9uIGlzIGFsdGVybmF0aW5nIHBpeGVscyBmcm9tIHNyYyBhbmQgZHN0CisgKiAgQW5kICAgICAgICAgICA6IEZ1bmN0aW9uIGlzIChzcmMgJiBkc3QpCisgKiAgT3IgICAgICAgICAgICA6IEZ1bmN0aW9uIGlzIChzcmMgfCBkc3QpCisgKiAgSW52ZXJ0ICAgICAgICA6IEZ1bmN0aW9uIGlzIH5zcmMKKyAqLwordHlwZWRlZiBlbnVtIE9NWF9DT0xPUkJMRU5EVFlQRSB7CisgICAgT01YX0NvbG9yQmxlbmROb25lLAorICAgIE9NWF9Db2xvckJsZW5kQWxwaGFDb25zdGFudCwKKyAgICBPTVhfQ29sb3JCbGVuZEFscGhhUGVyUGl4ZWwsCisgICAgT01YX0NvbG9yQmxlbmRBbHRlcm5hdGUsCisgICAgT01YX0NvbG9yQmxlbmRBbmQsCisgICAgT01YX0NvbG9yQmxlbmRPciwKKyAgICBPTVhfQ29sb3JCbGVuZEludmVydCwKKyAgICBPTVhfQ29sb3JCbGVuZEtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLworICAgIE9NWF9Db2xvckJsZW5kVmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KKyAgICBPTVhfQ29sb3JCbGVuZE1heCA9IDB4N0ZGRkZGRkYKK30gT01YX0NPTE9SQkxFTkRUWVBFOworCisKKy8qKgorICogQ29sb3IgYmxlbmQgY29uZmlndXJhdGlvbgorICoKKyAqIFNUUlVDVCBNRU1CRVJTOgorICogIG5TaXplICAgICAgICAgICAgIDogU2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzCisgKiAgblZlcnNpb24gICAgICAgICAgOiBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uCisgKiAgblBvcnRJbmRleCAgICAgICAgOiBQb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0bworICogIG5SR0JBbHBoYUNvbnN0YW50IDogQ29uc3RhbnQgZ2xvYmFsIGFscGhhIHZhbHVlcyB3aGVuIGdsb2JhbCBhbHBoYSBpcyB1c2VkCisgKiAgZUNvbG9yQmxlbmQgICAgICAgOiBDb2xvciBibGVuZCB0eXBlIGVudW1lcmF0aW9uCisgKi8KK3R5cGVkZWYgc3RydWN0IE9NWF9DT05GSUdfQ09MT1JCTEVORFRZUEUgeworICAgIE9NWF9VMzIgblNpemU7CisgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOworICAgIE9NWF9VMzIgblBvcnRJbmRleDsKKyAgICBPTVhfVTMyIG5SR0JBbHBoYUNvbnN0YW50OworICAgIE9NWF9DT0xPUkJMRU5EVFlQRSAgZUNvbG9yQmxlbmQ7Cit9IE9NWF9DT05GSUdfQ09MT1JCTEVORFRZUEU7CisKKworLyoqCisgKiBIb2xkIGZyYW1lIGRpbWVuc2lvbgorICoKKyAqIFNUUlVDVCBNRU1CRVJTOgorICogIG5TaXplICAgICAgOiBTaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMKKyAqICBuVmVyc2lvbiAgIDogT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbgorICogIG5Qb3J0SW5kZXggOiBQb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0bworICogIG5XaWR0aCAgICAgOiBGcmFtZSB3aWR0aCBpbiBwaXhlbHMKKyAqICBuSGVpZ2h0ICAgIDogRnJhbWUgaGVpZ2h0IGluIHBpeGVscworICovCit0eXBlZGVmIHN0cnVjdCBPTVhfRlJBTUVTSVpFVFlQRSB7CisgICAgT01YX1UzMiBuU2l6ZTsKKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247CisgICAgT01YX1UzMiBuUG9ydEluZGV4OworICAgIE9NWF9VMzIgbldpZHRoOworICAgIE9NWF9VMzIgbkhlaWdodDsKK30gT01YX0ZSQU1FU0laRVRZUEU7CisKKworLyoqCisgKiBSb3RhdGlvbiBjb25maWd1cmF0aW9uCisgKgorICogU1RSVUNUIE1FTUJFUlM6CisgKiAgblNpemUgICAgICA6IFNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcworICogIG5WZXJzaW9uICAgOiBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uCisgKiAgblBvcnRJbmRleCA6IFBvcnQgdGhhdCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzIHRvCisgKiAgblJvdGF0aW9uICA6ICsvLSBpbnRlZ2VyIHJvdGF0aW9uIHZhbHVlCisgKi8KK3R5cGVkZWYgc3RydWN0IE9NWF9DT05GSUdfUk9UQVRJT05UWVBFIHsKKyAgICBPTVhfVTMyIG5TaXplOworICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsKKyAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7CisgICAgT01YX1MzMiBuUm90YXRpb247Cit9IE9NWF9DT05GSUdfUk9UQVRJT05UWVBFOworCisKKy8qKgorICogUG9zc2libGUgbWlycm9yaW5nIGRpcmVjdGlvbnMgZm9yIHByZS9wb3N0IHByb2Nlc3NpbmcKKyAqCisgKiBFTlVNUzoKKyAqICBOb25lICAgICAgIDogTm8gbWlycm9yaW5nCisgKiAgVmVydGljYWwgICA6IFZlcnRpY2FsIG1pcnJvcmluZywgZmxpcCBvbiBYIGF4aXMKKyAqICBIb3Jpem9udGFsIDogSG9yaXpvbnRhbCBtaXJyb3JpbmcsIGZsaXAgb24gWSBheGlzCisgKiAgQm90aCAgICAgICA6IEJvdGggdmVydGljYWwgYW5kIGhvcml6b250YWwgbWlycm9yaW5nCisgKi8KK3R5cGVkZWYgZW51bSBPTVhfTUlSUk9SVFlQRSB7CisgICAgT01YX01pcnJvck5vbmUgPSAwLAorICAgIE9NWF9NaXJyb3JWZXJ0aWNhbCwKKyAgICBPTVhfTWlycm9ySG9yaXpvbnRhbCwKKyAgICBPTVhfTWlycm9yQm90aCwKKyAgICBPTVhfTWlycm9yS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovCisgICAgT01YX01pcnJvclZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCisgICAgT01YX01pcnJvck1heCA9IDB4N0ZGRkZGRkYKK30gT01YX01JUlJPUlRZUEU7CisKKworLyoqCisgKiBNaXJyb3JpbmcgY29uZmlndXJhdGlvbgorICoKKyAqIFNUUlVDVCBNRU1CRVJTOgorICogIG5TaXplICAgICAgOiBTaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMKKyAqICBuVmVyc2lvbiAgIDogT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbgorICogIG5Qb3J0SW5kZXggOiBQb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0bworICogIGVNaXJyb3IgICAgOiBNaXJyb3IgdHlwZSBlbnVtZXJhdGlvbgorICovCit0eXBlZGVmIHN0cnVjdCBPTVhfQ09ORklHX01JUlJPUlRZUEUgeworICAgIE9NWF9VMzIgblNpemU7CisgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOworICAgIE9NWF9VMzIgblBvcnRJbmRleDsKKyAgICBPTVhfTUlSUk9SVFlQRSAgZU1pcnJvcjsKK30gT01YX0NPTkZJR19NSVJST1JUWVBFOworCisKKy8qKgorICogUG9zaXRpb24gaW5mb3JtYXRpb24gb25seQorICoKKyAqIFNUUlVDVCBNRU1CRVJTOgorICogIG5TaXplICAgICAgOiBTaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMKKyAqICBuVmVyc2lvbiAgIDogT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbgorICogIG5Qb3J0SW5kZXggOiBQb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0bworICogIG5YICAgICAgICAgOiBYIGNvb3JkaW5hdGUgZm9yIHRoZSBwb2ludAorICogIG5ZICAgICAgICAgOiBZIGNvb3JkaW5hdGUgZm9yIHRoZSBwb2ludAorICovCit0eXBlZGVmIHN0cnVjdCBPTVhfQ09ORklHX1BPSU5UVFlQRSB7CisgICAgT01YX1UzMiBuU2l6ZTsKKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247CisgICAgT01YX1UzMiBuUG9ydEluZGV4OworICAgIE9NWF9TMzIgblg7CisgICAgT01YX1MzMiBuWTsKK30gT01YX0NPTkZJR19QT0lOVFRZUEU7CisKKworLyoqCisgKiBGcmFtZSBzaXplIHBsdXMgcG9zaXRpb24KKyAqCisgKiBTVFJVQ1QgTUVNQkVSUzoKKyAqICBuU2l6ZSAgICAgIDogU2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzCisgKiAgblZlcnNpb24gICA6IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24KKyAqICBuUG9ydEluZGV4IDogUG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8KKyAqICBuTGVmdCAgICAgIDogWCBDb29yZGluYXRlIG9mIHRoZSB0b3AgbGVmdCBjb3JuZXIgb2YgdGhlIHJlY3RhbmdsZQorICogIG5Ub3AgICAgICAgOiBZIENvb3JkaW5hdGUgb2YgdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlCisgKiAgbldpZHRoICAgICA6IFdpZHRoIG9mIHRoZSByZWN0YW5nbGUKKyAqICBuSGVpZ2h0ICAgIDogSGVpZ2h0IG9mIHRoZSByZWN0YW5nbGUKKyAqLwordHlwZWRlZiBzdHJ1Y3QgT01YX0NPTkZJR19SRUNUVFlQRSB7CisgICAgT01YX1UzMiBuU2l6ZTsKKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247CisgICAgT01YX1UzMiBuUG9ydEluZGV4OworICAgIE9NWF9TMzIgbkxlZnQ7CisgICAgT01YX1MzMiBuVG9wOworICAgIE9NWF9VMzIgbldpZHRoOworICAgIE9NWF9VMzIgbkhlaWdodDsKK30gT01YX0NPTkZJR19SRUNUVFlQRTsKKworCisvKioKKyAqIERlYmxvY2tpbmcgc3RhdGU7IGl0IGlzIHJlcXVpcmVkIHRvIGJlIHNldCB1cCBiZWZvcmUgc3RhcnRpbmcgdGhlIGNvZGVjCisgKgorICogU1RSVUNUIE1FTUJFUlM6CisgKiAgblNpemUgICAgICAgOiBTaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMKKyAqICBuVmVyc2lvbiAgICA6IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24KKyAqICBuUG9ydEluZGV4ICA6IFBvcnQgdGhhdCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzIHRvCisgKiAgYkRlYmxvY2tpbmcgOiBFbmFibGUvZGlzYWJsZSBkZWJsb2NraW5nIG1vZGUKKyAqLwordHlwZWRlZiBzdHJ1Y3QgT01YX1BBUkFNX0RFQkxPQ0tJTkdUWVBFIHsKKyAgICBPTVhfVTMyIG5TaXplOworICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsKKyAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7CisgICAgT01YX0JPT0wgYkRlYmxvY2tpbmc7Cit9IE9NWF9QQVJBTV9ERUJMT0NLSU5HVFlQRTsKKworCisvKioKKyAqIFN0YWJpbGl6YXRpb24gc3RhdGUKKyAqCisgKiBTVFJVQ1QgTUVNQkVSUzoKKyAqICBuU2l6ZSAgICAgIDogU2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzCisgKiAgblZlcnNpb24gICA6IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24KKyAqICBuUG9ydEluZGV4IDogUG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8KKyAqICBiU3RhYiAgICAgIDogRW5hYmxlL2Rpc2FibGUgZnJhbWUgc3RhYmlsaXphdGlvbiBzdGF0ZQorICovCit0eXBlZGVmIHN0cnVjdCBPTVhfQ09ORklHX0ZSQU1FU1RBQlRZUEUgeworICAgIE9NWF9VMzIgblNpemU7CisgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOworICAgIE9NWF9VMzIgblBvcnRJbmRleDsKKyAgICBPTVhfQk9PTCBiU3RhYjsKK30gT01YX0NPTkZJR19GUkFNRVNUQUJUWVBFOworCisKKy8qKgorICogV2hpdGUgQmFsYW5jZSBjb250cm9sIHR5cGUKKyAqCisgKiBTVFJVQ1QgTUVNQkVSUzoKKyAqICBTdW5MaWdodCA6IFJlZmVyZW5jZWQgaW4gSlNSLTIzNAorICogIEZsYXNoICAgIDogT3B0aW1hbCBmb3IgZGV2aWNlJ3MgaW50ZWdyYXRlZCBmbGFzaAorICovCit0eXBlZGVmIGVudW0gT01YX1dISVRFQkFMQ09OVFJPTFRZUEUgeworICAgIE9NWF9XaGl0ZUJhbENvbnRyb2xPZmYgPSAwLAorICAgIE9NWF9XaGl0ZUJhbENvbnRyb2xBdXRvLAorICAgIE9NWF9XaGl0ZUJhbENvbnRyb2xTdW5MaWdodCwKKyAgICBPTVhfV2hpdGVCYWxDb250cm9sQ2xvdWR5LAorICAgIE9NWF9XaGl0ZUJhbENvbnRyb2xTaGFkZSwKKyAgICBPTVhfV2hpdGVCYWxDb250cm9sVHVuZ3N0ZW4sCisgICAgT01YX1doaXRlQmFsQ29udHJvbEZsdW9yZXNjZW50LAorICAgIE9NWF9XaGl0ZUJhbENvbnRyb2xJbmNhbmRlc2NlbnQsCisgICAgT01YX1doaXRlQmFsQ29udHJvbEZsYXNoLAorICAgIE9NWF9XaGl0ZUJhbENvbnRyb2xIb3Jpem9uLAorICAgIE9NWF9XaGl0ZUJhbENvbnRyb2xLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KKyAgICBPTVhfV2hpdGVCYWxDb250cm9sVmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KKyAgICBPTVhfV2hpdGVCYWxDb250cm9sTWF4ID0gMHg3RkZGRkZGRgorfSBPTVhfV0hJVEVCQUxDT05UUk9MVFlQRTsKKworCisvKioKKyAqIFdoaXRlIEJhbGFuY2UgY29udHJvbCBjb25maWd1cmF0aW9uCisgKgorICogU1RSVUNUIE1FTUJFUlM6CisgKiAgblNpemUgICAgICAgICAgICA6IFNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcworICogIG5WZXJzaW9uICAgICAgICAgOiBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uCisgKiAgblBvcnRJbmRleCAgICAgICA6IFBvcnQgdGhhdCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzIHRvCisgKiAgZVdoaXRlQmFsQ29udHJvbCA6IFdoaXRlIGJhbGFuY2UgZW51bWVyYXRpb24KKyAqLwordHlwZWRlZiBzdHJ1Y3QgT01YX0NPTkZJR19XSElURUJBTENPTlRST0xUWVBFIHsKKyAgICBPTVhfVTMyIG5TaXplOworICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsKKyAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7CisgICAgT01YX1dISVRFQkFMQ09OVFJPTFRZUEUgZVdoaXRlQmFsQ29udHJvbDsKK30gT01YX0NPTkZJR19XSElURUJBTENPTlRST0xUWVBFOworCisKKy8qKgorICogRXhwb3N1cmUgY29udHJvbCB0eXBlCisgKi8KK3R5cGVkZWYgZW51bSBPTVhfRVhQT1NVUkVDT05UUk9MVFlQRSB7CisgICAgT01YX0V4cG9zdXJlQ29udHJvbE9mZiA9IDAsCisgICAgT01YX0V4cG9zdXJlQ29udHJvbEF1dG8sCisgICAgT01YX0V4cG9zdXJlQ29udHJvbE5pZ2h0LAorICAgIE9NWF9FeHBvc3VyZUNvbnRyb2xCYWNrTGlnaHQsCisgICAgT01YX0V4cG9zdXJlQ29udHJvbFNwb3RMaWdodCwKKyAgICBPTVhfRXhwb3N1cmVDb250cm9sU3BvcnRzLAorICAgIE9NWF9FeHBvc3VyZUNvbnRyb2xTbm93LAorICAgIE9NWF9FeHBvc3VyZUNvbnRyb2xCZWFjaCwKKyAgICBPTVhfRXhwb3N1cmVDb250cm9sTGFyZ2VBcGVydHVyZSwKKyAgICBPTVhfRXhwb3N1cmVDb250cm9sU21hbGxBcHBlcnR1cmUsCisgICAgT01YX0V4cG9zdXJlQ29udHJvbEtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLworICAgIE9NWF9FeHBvc3VyZUNvbnRyb2xWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLworICAgIE9NWF9FeHBvc3VyZUNvbnRyb2xNYXggPSAweDdGRkZGRkZGCit9IE9NWF9FWFBPU1VSRUNPTlRST0xUWVBFOworCisKKy8qKgorICogV2hpdGUgQmFsYW5jZSBjb250cm9sIGNvbmZpZ3VyYXRpb24KKyAqCisgKiBTVFJVQ1QgTUVNQkVSUzoKKyAqICBuU2l6ZSAgICAgICAgICAgIDogU2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzCisgKiAgblZlcnNpb24gICAgICAgICA6IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24KKyAqICBuUG9ydEluZGV4ICAgICAgIDogUG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8KKyAqICBlRXhwb3N1cmVDb250cm9sIDogRXhwb3N1cmUgY29udHJvbCBlbnVtZXJhdGlvbgorICovCit0eXBlZGVmIHN0cnVjdCBPTVhfQ09ORklHX0VYUE9TVVJFQ09OVFJPTFRZUEUgeworICAgIE9NWF9VMzIgblNpemU7CisgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOworICAgIE9NWF9VMzIgblBvcnRJbmRleDsKKyAgICBPTVhfRVhQT1NVUkVDT05UUk9MVFlQRSBlRXhwb3N1cmVDb250cm9sOworfSBPTVhfQ09ORklHX0VYUE9TVVJFQ09OVFJPTFRZUEU7CisKKworLyoqCisgKiBEZWZpbmVzIHNlbnNvciBzdXBwb3J0ZWQgbW9kZS4KKyAqCisgKiBTVFJVQ1QgTUVNQkVSUzoKKyAqICBuU2l6ZSAgICAgIDogU2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzCisgKiAgblZlcnNpb24gICA6IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24KKyAqICBuUG9ydEluZGV4IDogUG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8KKyAqICBuRnJhbWVSYXRlIDogU2luZ2xlIHNob3QgbW9kZSBpcyBpbmRpY2F0ZWQgYnkgYSAwCisgKiAgYk9uZVNob3QgICA6IEVuYWJsZSBmb3Igc2luZ2xlIHNob3QsIGRpc2FibGUgZm9yIHN0cmVhbWluZworICogIHNGcmFtZVNpemUgOiBGcmFtZXNpemUKKyAqLwordHlwZWRlZiBzdHJ1Y3QgT01YX1BBUkFNX1NFTlNPUk1PREVUWVBFIHsKKyAgICBPTVhfVTMyIG5TaXplOworICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsKKyAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7CisgICAgT01YX1UzMiBuRnJhbWVSYXRlOworICAgIE9NWF9CT09MIGJPbmVTaG90OworICAgIE9NWF9GUkFNRVNJWkVUWVBFIHNGcmFtZVNpemU7Cit9IE9NWF9QQVJBTV9TRU5TT1JNT0RFVFlQRTsKKworCisvKioKKyAqIERlZmluZXMgY29udHJhc3QgbGV2ZWwKKyAqCisgKiBTVFJVQ1QgTUVNQkVSUzoKKyAqICBuU2l6ZSAgICAgIDogU2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzCisgKiAgblZlcnNpb24gICA6IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24KKyAqICBuUG9ydEluZGV4IDogUG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8KKyAqICBuQ29udHJhc3QgIDogVmFsdWVzIGFsbG93ZWQgZm9yIGNvbnRyYXN0IC0xMDAgdG8gMTAwLCB6ZXJvIG1lYW5zIG5vIGNoYW5nZQorICovCit0eXBlZGVmIHN0cnVjdCBPTVhfQ09ORklHX0NPTlRSQVNUVFlQRSB7CisgICAgT01YX1UzMiBuU2l6ZTsKKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247CisgICAgT01YX1UzMiBuUG9ydEluZGV4OworICAgIE9NWF9TMzIgbkNvbnRyYXN0OworfSBPTVhfQ09ORklHX0NPTlRSQVNUVFlQRTsKKworCisvKioKKyAqIERlZmluZXMgYnJpZ2h0bmVzcyBsZXZlbAorICoKKyAqIFNUUlVDVCBNRU1CRVJTOgorICogIG5TaXplICAgICAgIDogU2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzCisgKiAgblZlcnNpb24gICAgOiBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uCisgKiAgblBvcnRJbmRleCAgOiBQb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0bworICogIG5CcmlnaHRuZXNzIDogMC0xMDAlCisgKi8KK3R5cGVkZWYgc3RydWN0IE9NWF9DT05GSUdfQlJJR0hUTkVTU1RZUEUgeworICAgIE9NWF9VMzIgblNpemU7CisgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOworICAgIE9NWF9VMzIgblBvcnRJbmRleDsKKyAgICBPTVhfVTMyIG5CcmlnaHRuZXNzOworfSBPTVhfQ09ORklHX0JSSUdIVE5FU1NUWVBFOworCisKKy8qKgorICogRGVmaW5lcyBiYWNrbGlnaHQgbGV2ZWwgY29uZmlndXJhdGlvbiBmb3IgYSB2aWRlbyBzaW5rLCBlLmcuIExDRCBwYW5lbAorICoKKyAqIFNUUlVDVCBNRU1CRVJTOgorICogIG5TaXplICAgICAgOiBTaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMKKyAqICBuVmVyc2lvbiAgIDogT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbgorICogIG5Qb3J0SW5kZXggOiBQb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0bworICogIG5CYWNrbGlnaHQgOiBWYWx1ZXMgYWxsb3dlZCBmb3IgYmFja2xpZ2h0IDAtMTAwJQorICogIG5UaW1lb3V0ICAgOiBOdW1iZXIgb2YgbWlsbGlzZWNvbmRzIGJlZm9yZSBiYWNrbGlnaHQgYXV0b21hdGljYWxseSB0dXJucworICogICAgICAgICAgICAgICBvZmYuICBBIHZhbHVlIG9mIDB4MCBkaXNhYmxlcyBiYWNraWdodCB0aW1lb3V0CisgKi8KK3R5cGVkZWYgc3RydWN0IE9NWF9DT05GSUdfQkFDS0xJR0hUVFlQRSB7CisgICAgT01YX1UzMiBuU2l6ZTsKKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247CisgICAgT01YX1UzMiBuUG9ydEluZGV4OworICAgIE9NWF9VMzIgbkJhY2tsaWdodDsKKyAgICBPTVhfVTMyIG5UaW1lb3V0OworfSBPTVhfQ09ORklHX0JBQ0tMSUdIVFRZUEU7CisKKworLyoqCisgKiBEZWZpbmVzIHNldHRpbmcgZm9yIEdhbW1hCisgKgorICogU1RSVUNUIE1FTUJFUlM6CisgKiAgblNpemUgICAgICA6IFNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcworICogIG5WZXJzaW9uICAgOiBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uCisgKiAgblBvcnRJbmRleCA6IFBvcnQgdGhhdCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzIHRvCisgKiAgbkdhbW1hICAgICA6IFZhbHVlcyBhbGxvd2VkIGZvciBnYW1tYSAtMTAwIHRvIDEwMCwgemVybyBtZWFucyBubyBjaGFuZ2UKKyAqLwordHlwZWRlZiBzdHJ1Y3QgT01YX0NPTkZJR19HQU1NQVRZUEUgeworICAgIE9NWF9VMzIgblNpemU7CisgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOworICAgIE9NWF9VMzIgblBvcnRJbmRleDsKKyAgICBPTVhfUzMyIG5HYW1tYTsKK30gT01YX0NPTkZJR19HQU1NQVRZUEU7CisKKworLyoqCisgKiBEZWZpbmUgZm9yIHNldHRpbmcgc2F0dXJhdGlvbgorICoKKyAqIFNUUlVDVCBNRU1CRVJTOgorICogIG5TaXplICAgICAgIDogU2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzCisgKiAgblZlcnNpb24gICAgOiBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uCisgKiAgblBvcnRJbmRleCAgOiBQb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0bworICogIG5TYXR1cmF0aW9uIDogVmFsdWVzIGFsbG93ZWQgZm9yIHNhdHVyYXRpb24gLTEwMCB0byAxMDAsIHplcm8gbWVhbnMKKyAqICAgICAgICAgICAgICAgIG5vIGNoYW5nZQorICovCit0eXBlZGVmIHN0cnVjdCBPTVhfQ09ORklHX1NBVFVSQVRJT05UWVBFIHsKKyAgICBPTVhfVTMyIG5TaXplOworICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsKKyAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7CisgICAgT01YX1MzMiBuU2F0dXJhdGlvbjsKK30gT01YX0NPTkZJR19TQVRVUkFUSU9OVFlQRTsKKworCisvKioKKyAqIERlZmluZSBmb3Igc2V0dGluZyBMaWdodG5lc3MKKyAqCisgKiBTVFJVQ1QgTUVNQkVSUzoKKyAqICBuU2l6ZSAgICAgIDogU2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzCisgKiAgblZlcnNpb24gICA6IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24KKyAqICBuUG9ydEluZGV4IDogUG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8KKyAqICBuTGlnaHRuZXNzIDogVmFsdWVzIGFsbG93ZWQgZm9yIGxpZ2h0bmVzcyAtMTAwIHRvIDEwMCwgemVybyBtZWFucyBubworICogICAgICAgICAgICAgICBjaGFuZ2UKKyAqLwordHlwZWRlZiBzdHJ1Y3QgT01YX0NPTkZJR19MSUdIVE5FU1NUWVBFIHsKKyAgICBPTVhfVTMyIG5TaXplOworICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsKKyAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7CisgICAgT01YX1MzMiBuTGlnaHRuZXNzOworfSBPTVhfQ09ORklHX0xJR0hUTkVTU1RZUEU7CisKKworLyoqCisgKiBQbGFuZSBibGVuZCBjb25maWd1cmF0aW9uCisgKgorICogU1RSVUNUIE1FTUJFUlM6CisgKiAgblNpemUgICAgICA6IFNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcworICogIG5WZXJzaW9uICAgOiBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uCisgKiAgblBvcnRJbmRleCA6IEluZGV4IG9mIGlucHV0IHBvcnQgYXNzb2NpYXRlZCB3aXRoIHRoZSBwbGFuZS4KKyAqICBuRGVwdGggICAgIDogRGVwdGggb2YgdGhlIHBsYW5lIGluIHJlbGF0aW9uIHRvIHRoZSBzY3JlZW4uIEhpZ2hlcgorICogICAgICAgICAgICAgICBudW1iZXJlZCBkZXB0aHMgYXJlICJiZWhpbmQiIGxvd2VyIG51bWJlciBkZXB0aHMuCisgKiAgICAgICAgICAgICAgIFRoaXMgbnVtYmVyIGRlZmF1bHRzIHRvIHRoZSBQb3J0IEluZGV4IG51bWJlci4KKyAqICBuQWxwaGEgICAgIDogVHJhbnNwYXJlbmN5IGJsZW5kaW5nIGNvbXBvbmVudCBmb3IgdGhlIGVudGlyZSBwbGFuZS4KKyAqICAgICAgICAgICAgICAgU2VlIGJsZW5kaW5nIG1vZGVzIGZvciBtb3JlIGRldGFpbC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgT01YX0NPTkZJR19QTEFORUJMRU5EVFlQRSB7CisgICAgT01YX1UzMiBuU2l6ZTsKKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247CisgICAgT01YX1UzMiBuUG9ydEluZGV4OworICAgIE9NWF9VMzIgbkRlcHRoOworICAgIE9NWF9VMzIgbkFscGhhOworfSBPTVhfQ09ORklHX1BMQU5FQkxFTkRUWVBFOworCisKKy8qKgorICogRGVmaW5lIGludGVybGFjZSB0eXBlCisgKgorICogU1RSVUNUIE1FTUJFUlM6CisgKiAgblNpemUgICAgICAgICAgICAgICAgIDogU2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzCisgKiAgblZlcnNpb24gICAgICAgICAgICAgIDogT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbgorICogIG5Qb3J0SW5kZXggICAgICAgICAgICA6IFBvcnQgdGhhdCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzIHRvCisgKiAgYkVuYWJsZSAgICAgICAgICAgICAgIDogRW5hYmxlIGNvbnRyb2wgdmFyaWFibGUgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eQorICogICAgICAgICAgICAgICAgICAgICAgICAgIChzZWUgYmVsb3cpCisgKiAgbkludGVybGVhdmVQb3J0SW5kZXggIDogSW5kZXggb2YgaW5wdXQgb3Igb3V0cHV0IHBvcnQgYXNzb2NpYXRlZCB3aXRoCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGludGVybGVhdmVkIHBsYW5lLgorICogIHBQbGFuYXJQb3J0SW5kZXhlc1s0XSA6IEluZGV4IG9mIGlucHV0IG9yIG91dHB1dCBwbGFuYXIgcG9ydHMuCisgKi8KK3R5cGVkZWYgc3RydWN0IE9NWF9QQVJBTV9JTlRFUkxFQVZFVFlQRSB7CisgICAgT01YX1UzMiBuU2l6ZTsKKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247CisgICAgT01YX1UzMiBuUG9ydEluZGV4OworICAgIE9NWF9CT09MIGJFbmFibGU7CisgICAgT01YX1UzMiBuSW50ZXJsZWF2ZVBvcnRJbmRleDsKK30gT01YX1BBUkFNX0lOVEVSTEVBVkVUWVBFOworCisKKy8qKgorICogRGVmaW5lcyB0aGUgcGljdHVyZSBlZmZlY3QgdXNlZCBmb3IgYW4gaW5wdXQgcGljdHVyZQorICovCit0eXBlZGVmIGVudW0gT01YX1RSQU5TSVRJT05FRkZFQ1RUWVBFIHsKKyAgICBPTVhfRWZmZWN0Tm9uZSwKKyAgICBPTVhfRWZmZWN0RmFkZUZyb21CbGFjaywKKyAgICBPTVhfRWZmZWN0RmFkZVRvQmxhY2ssCisgICAgT01YX0VmZmVjdFVuc3BlY2lmaWVkVGhyb3VnaENvbnN0YW50Q29sb3IsCisgICAgT01YX0VmZmVjdERpc3NvbHZlLAorICAgIE9NWF9FZmZlY3RXaXBlLAorICAgIE9NWF9FZmZlY3RVbnNwZWNpZmllZE1peE9mVHdvU2NlbmVzLAorICAgIE9NWF9FZmZlY3RLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KKyAgICBPTVhfRWZmZWN0VmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KKyAgICBPTVhfRWZmZWN0TWF4ID0gMHg3RkZGRkZGRgorfSBPTVhfVFJBTlNJVElPTkVGRkVDVFRZUEU7CisKKworLyoqCisgKiBTdHJ1Y3R1cmUgdXNlZCB0byBjb25maWd1cmUgY3VycmVudCB0cmFuc2l0aW9uIGVmZmVjdAorICoKKyAqIFNUUlVDVCBNRU1CRVJTOgorICogblNpemUgICAgICA6IFNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcworICogblZlcnNpb24gICA6IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24KKyAqIG5Qb3J0SW5kZXggOiBQb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0bworICogZUVmZmVjdCAgICA6IEVmZmVjdCB0byBlbmFibGUKKyAqLwordHlwZWRlZiBzdHJ1Y3QgT01YX0NPTkZJR19UUkFOU0lUSU9ORUZGRUNUVFlQRSB7CisgICAgT01YX1UzMiBuU2l6ZTsKKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247CisgICAgT01YX1UzMiBuUG9ydEluZGV4OworICAgIE9NWF9UUkFOU0lUSU9ORUZGRUNUVFlQRSBlRWZmZWN0OworfSBPTVhfQ09ORklHX1RSQU5TSVRJT05FRkZFQ1RUWVBFOworCisKKy8qKgorICogRGVmaW5lcyBwb3NzaWJsZSBkYXRhIHVuaXQgdHlwZXMgZm9yIGVuY29kZWQgdmlkZW8gZGF0YS4gVGhlIGRhdGEgdW5pdAorICogdHlwZXMgYXJlIHVzZWQgYm90aCBmb3IgZW5jb2RlZCB2aWRlbyBpbnB1dCBmb3IgcGxheWJhY2sgYXMgd2VsbCBhcworICogZW5jb2RlZCB2aWRlbyBvdXRwdXQgZnJvbSByZWNvcmRpbmcuCisgKi8KK3R5cGVkZWYgZW51bSBPTVhfREFUQVVOSVRUWVBFIHsKKyAgICBPTVhfRGF0YVVuaXRDb2RlZFBpY3R1cmUsCisgICAgT01YX0RhdGFVbml0VmlkZW9TZWdtZW50LAorICAgIE9NWF9EYXRhVW5pdFNldmVyYWxTZWdtZW50cywKKyAgICBPTVhfRGF0YVVuaXRBcmJpdHJhcnlTdHJlYW1TZWN0aW9uLAorICAgIE9NWF9EYXRhVW5pdEtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLworICAgIE9NWF9EYXRhVW5pdFZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCisgICAgT01YX0RhdGFVbml0TWF4ID0gMHg3RkZGRkZGRgorfSBPTVhfREFUQVVOSVRUWVBFOworCisKKy8qKgorICogRGVmaW5lcyBwb3NzaWJsZSBlbmNhcHN1bGF0aW9uIHR5cGVzIGZvciBjb2RlZCB2aWRlbyBkYXRhIHVuaXQuIFRoZQorICogZW5jYXBzdWxhdGlvbiBpbmZvcm1hdGlvbiBpcyB1c2VkIGJvdGggZm9yIGVuY29kZWQgdmlkZW8gaW5wdXQgZm9yCisgKiBwbGF5YmFjayBhcyB3ZWxsIGFzIGVuY29kZWQgdmlkZW8gb3V0cHV0IGZyb20gcmVjb3JkaW5nLgorICovCit0eXBlZGVmIGVudW0gT01YX0RBVEFVTklURU5DQVBTVUxBVElPTlRZUEUgeworICAgIE9NWF9EYXRhRW5jYXBzdWxhdGlvbkVsZW1lbnRhcnlTdHJlYW0sCisgICAgT01YX0RhdGFFbmNhcHN1bGF0aW9uR2VuZXJpY1BheWxvYWQsCisgICAgT01YX0RhdGFFbmNhcHN1bGF0aW9uUnRwUGF5bG9hZCwKKyAgICBPTVhfRGF0YUVuY2Fwc3VsYXRpb25LaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KKyAgICBPTVhfRGF0YUVuY2Fwc3VsYXRpb25WZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLworICAgIE9NWF9EYXRhRW5jYXBzdWxhdGlvbk1heCA9IDB4N0ZGRkZGRkYKK30gT01YX0RBVEFVTklURU5DQVBTVUxBVElPTlRZUEU7CisKKworLyoqCisgKiBTdHJ1Y3R1cmUgdXNlZCB0byBjb25maWd1cmUgdGhlIHR5cGUgb2YgYmVpbmcgZGVjb2RlZC9lbmNvZGVkCisgKi8KK3R5cGVkZWYgc3RydWN0IE9NWF9QQVJBTV9EQVRBVU5JVFRZUEUgeworICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgLyoqPCBTaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247IC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLworICAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAgLyoqPCBQb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0byAqLworICAgIE9NWF9EQVRBVU5JVFRZUEUgZVVuaXRUeXBlOworICAgIE9NWF9EQVRBVU5JVEVOQ0FQU1VMQVRJT05UWVBFIGVFbmNhcHN1bGF0aW9uVHlwZTsKK30gT01YX1BBUkFNX0RBVEFVTklUVFlQRTsKKworCisvKioKKyAqIERlZmluZXMgZGl0aGVyIHR5cGVzCisgKi8KK3R5cGVkZWYgZW51bSBPTVhfRElUSEVSVFlQRSB7CisgICAgT01YX0RpdGhlck5vbmUsCisgICAgT01YX0RpdGhlck9yZGVyZWQsCisgICAgT01YX0RpdGhlckVycm9yRGlmZnVzaW9uLAorICAgIE9NWF9EaXRoZXJPdGhlciwKKyAgICBPTVhfRGl0aGVyS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovCisgICAgT01YX0RpdGhlclZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCisgICAgT01YX0RpdGhlck1heCA9IDB4N0ZGRkZGRkYKK30gT01YX0RJVEhFUlRZUEU7CisKKworLyoqCisgKiBTdHJ1Y3R1cmUgdXNlZCB0byBjb25maWd1cmUgY3VycmVudCB0eXBlIG9mIGRpdGhlcmluZworICovCit0eXBlZGVmIHN0cnVjdCBPTVhfQ09ORklHX0RJVEhFUlRZUEUgeworICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgLyoqPCBTaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247IC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLworICAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAgLyoqPCBQb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0byAqLworICAgIE9NWF9ESVRIRVJUWVBFIGVEaXRoZXI7ICAgLyoqPCBUeXBlIG9mIGRpdGhlcmluZyB0byB1c2UgKi8KK30gT01YX0NPTkZJR19ESVRIRVJUWVBFOworCit0eXBlZGVmIHN0cnVjdCBPTVhfQ09ORklHX0NBUFRVUkVNT0RFVFlQRSB7CisgICAgT01YX1UzMiBuU2l6ZTsKKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247CisgICAgT01YX1UzMiBuUG9ydEluZGV4OyAgICAgLyoqPCBQb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0byAqLworICAgIE9NWF9CT09MIGJDb250aW51b3VzOyAgIC8qKjwgSWYgdHJ1ZSB0aGVuIGlnbm9yZSBmcmFtZSByYXRlIGFuZCBlbWl0IGNhcHR1cmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIGRhdGEgYXMgZmFzdCBhcyBwb3NzaWJsZSAob3RoZXJ3aXNlIG9iZXkgcG9ydCdzIGZyYW1lIHJhdGUpLiAqLworICAgIE9NWF9CT09MIGJGcmFtZUxpbWl0ZWQ7IC8qKjwgSWYgdHJ1ZSB0aGVuIHRlcm1pbmF0ZSBjYXB0dXJlIGFmdGVyIHRoZSBwb3J0IGVtaXRzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgc3BlY2lmaWVkIG51bWJlciBvZiBmcmFtZXMgKG90aGVyd2lzZSB0aGUgcG9ydCBkb2VzIG5vdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgdGVybWluYXRlIHRoZSBjYXB0dXJlIHVudGlsIGluc3RydWN0ZWQgdG8gZG8gc28gYnkgdGhlIGNsaWVudCkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICBFdmVuIGlmIHNldCwgdGhlIGNsaWVudCBtYXkgbWFudWFsbHkgdGVybWluYXRlIHRoZSBjYXB0dXJlIHByaW9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICB0byByZWFjaGluZyB0aGUgbGltaXQuICovCisgICAgT01YX1UzMiBuRnJhbWVMaW1pdDsgICAgICAvKio8IExpbWl0IG9uIG51bWJlciBvZiBmcmFtZXMgZW1pdHRlZCBkdXJpbmcgYSBjYXB0dXJlIChvbmx5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIHZhbGlkIGlmIGJGcmFtZUxpbWl0ZWQgaXMgc2V0KS4gKi8KK30gT01YX0NPTkZJR19DQVBUVVJFTU9ERVRZUEU7CisKK3R5cGVkZWYgZW51bSBPTVhfTUVURVJJTkdUWVBFIHsKKworICAgIE9NWF9NZXRlcmluZ01vZGVBdmVyYWdlLCAgICAgLyoqPCBDZW50ZXItd2VpZ2h0ZWQgYXZlcmFnZSBtZXRlcmluZy4gKi8KKyAgICBPTVhfTWV0ZXJpbmdNb2RlU3BvdCwgIAkgICAgICAvKio8IFNwb3QgKHBhcnRpYWwpIG1ldGVyaW5nLiAqLworICAgIE9NWF9NZXRlcmluZ01vZGVNYXRyaXgsICAgICAgLyoqPCBNYXRyaXggb3IgZXZhbHVhdGl2ZSBtZXRlcmluZy4gKi8KKworICAgIE9NWF9NZXRlcmluZ0tocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLworICAgIE9NWF9NZXRlcmluZ1ZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCisgICAgT01YX0VWTW9kZU1heCA9IDB4N2ZmZmZmZmYKK30gT01YX01FVEVSSU5HVFlQRTsKKwordHlwZWRlZiBzdHJ1Y3QgT01YX0NPTkZJR19FWFBPU1VSRVZBTFVFVFlQRSB7CisgICAgT01YX1UzMiBuU2l6ZTsKKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247CisgICAgT01YX1UzMiBuUG9ydEluZGV4OworICAgIE9NWF9NRVRFUklOR1RZUEUgZU1ldGVyaW5nOworICAgIE9NWF9TMzIgeEVWQ29tcGVuc2F0aW9uOyAgICAgIC8qKjwgRml4ZWQgcG9pbnQgdmFsdWUgc3RvcmVkIGFzIFExNiAqLworICAgIE9NWF9VMzIgbkFwZXJ0dXJlRk51bWJlcjsgICAgIC8qKjwgZS5nLiBuQXBlcnR1cmVGTnVtYmVyID0gMiBpbXBsaWVzICJmLzIiIC0gUTE2IGZvcm1hdCAqLworICAgIE9NWF9CT09MIGJBdXRvQXBlcnR1cmU7CQkvKio8IFdoZXRoZXIgYXBlcnR1cmUgbnVtYmVyIGlzIGRlZmluZWQgYXV0b21hdGljYWxseSAqLworICAgIE9NWF9VMzIgblNodXR0ZXJTcGVlZE1zZWM7ICAgIC8qKjwgU2h1dHRlcnNwZWVkIGluIG1pbGxpc2Vjb25kcyAqLworICAgIE9NWF9CT09MIGJBdXRvU2h1dHRlclNwZWVkOwkvKio8IFdoZXRoZXIgc2h1dHRlciBzcGVlZCBpcyBkZWZpbmVkIGF1dG9tYXRpY2FsbHkgKi8KKyAgICBPTVhfVTMyIG5TZW5zaXRpdml0eTsgICAgICAgICAvKio8IGUuZy4gblNlbnNpdGl2aXR5ID0gMTAwIGltcGxpZXMgIklTTyAxMDAiICovCisgICAgT01YX0JPT0wgYkF1dG9TZW5zaXRpdml0eTsJLyoqPCBXaGV0aGVyIHNlbnNpdGl2aXR5IGlzIGRlZmluZWQgYXV0b21hdGljYWxseSAqLworfSBPTVhfQ09ORklHX0VYUE9TVVJFVkFMVUVUWVBFOworCisvKioKKyAqIEZvY3VzIHJlZ2lvbiBjb25maWd1cmF0aW9uCisgKgorICogU1RSVUNUIE1FTUJFUlM6CisgKiAgblNpemUgICAgICAgICAgIDogU2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzCisgKiAgblZlcnNpb24gICAgICAgIDogT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbgorICogIG5Qb3J0SW5kZXggICAgICA6IFBvcnQgdGhhdCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzIHRvCisgKiAgYkNlbnRlciAgICAgICAgIDogVXNlIGNlbnRlciByZWdpb24gYXMgZm9jdXMgcmVnaW9uIG9mIGludGVyZXN0CisgKiAgYkxlZnQgICAgICAgICAgIDogVXNlIGxlZnQgcmVnaW9uIGFzIGZvY3VzIHJlZ2lvbiBvZiBpbnRlcmVzdAorICogIGJSaWdodCAgICAgICAgICA6IFVzZSByaWdodCByZWdpb24gYXMgZm9jdXMgcmVnaW9uIG9mIGludGVyZXN0CisgKiAgYlRvcCAgICAgICAgICAgIDogVXNlIHRvcCByZWdpb24gYXMgZm9jdXMgcmVnaW9uIG9mIGludGVyZXN0CisgKiAgYkJvdHRvbSAgICAgICAgIDogVXNlIGJvdHRvbSByZWdpb24gYXMgZm9jdXMgcmVnaW9uIG9mIGludGVyZXN0CisgKiAgYlRvcExlZnQgICAgICAgIDogVXNlIHRvcCBsZWZ0IHJlZ2lvbiBhcyBmb2N1cyByZWdpb24gb2YgaW50ZXJlc3QKKyAqICBiVG9wUmlnaHQgICAgICAgOiBVc2UgdG9wIHJpZ2h0IHJlZ2lvbiBhcyBmb2N1cyByZWdpb24gb2YgaW50ZXJlc3QKKyAqICBiQm90dG9tTGVmdCAgICAgOiBVc2UgYm90dG9tIGxlZnQgcmVnaW9uIGFzIGZvY3VzIHJlZ2lvbiBvZiBpbnRlcmVzdAorICogIGJCb3R0b21SaWdodCAgICA6IFVzZSBib3R0b20gcmlnaHQgcmVnaW9uIGFzIGZvY3VzIHJlZ2lvbiBvZiBpbnRlcmVzdAorICovCit0eXBlZGVmIHN0cnVjdCBPTVhfQ09ORklHX0ZPQ1VTUkVHSU9OVFlQRSB7CisgICAgT01YX1UzMiBuU2l6ZTsKKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247CisgICAgT01YX1UzMiBuUG9ydEluZGV4OworICAgIE9NWF9CT09MIGJDZW50ZXI7CisgICAgT01YX0JPT0wgYkxlZnQ7CisgICAgT01YX0JPT0wgYlJpZ2h0OworICAgIE9NWF9CT09MIGJUb3A7CisgICAgT01YX0JPT0wgYkJvdHRvbTsKKyAgICBPTVhfQk9PTCBiVG9wTGVmdDsKKyAgICBPTVhfQk9PTCBiVG9wUmlnaHQ7CisgICAgT01YX0JPT0wgYkJvdHRvbUxlZnQ7CisgICAgT01YX0JPT0wgYkJvdHRvbVJpZ2h0OworfSBPTVhfQ09ORklHX0ZPQ1VTUkVHSU9OVFlQRTsKKworLyoqCisgKiBGb2N1cyBTdGF0dXMgdHlwZQorICovCit0eXBlZGVmIGVudW0gT01YX0ZPQ1VTU1RBVFVTVFlQRSB7CisgICAgT01YX0ZvY3VzU3RhdHVzT2ZmID0gMCwKKyAgICBPTVhfRm9jdXNTdGF0dXNSZXF1ZXN0LAorICAgIE9NWF9Gb2N1c1N0YXR1c1JlYWNoZWQsCisgICAgT01YX0ZvY3VzU3RhdHVzVW5hYmxlVG9SZWFjaCwKKyAgICBPTVhfRm9jdXNTdGF0dXNMb3N0LAorICAgIE9NWF9Gb2N1c1N0YXR1c0tocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLworICAgIE9NWF9Gb2N1c1N0YXR1c1ZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCisgICAgT01YX0ZvY3VzU3RhdHVzTWF4ID0gMHg3RkZGRkZGRgorfSBPTVhfRk9DVVNTVEFUVVNUWVBFOworCisvKioKKyAqIEZvY3VzIHN0YXR1cyBjb25maWd1cmF0aW9uCisgKgorICogU1RSVUNUIE1FTUJFUlM6CisgKiAgblNpemUgICAgICAgICAgICAgICA6IFNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcworICogIG5WZXJzaW9uICAgICAgICAgICAgOiBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uCisgKiAgblBvcnRJbmRleCAgICAgICAgICA6IFBvcnQgdGhhdCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzIHRvCisgKiAgZUZvY3VzU3RhdHVzICAgICAgICA6IFNwZWNpZmllcyB0aGUgZm9jdXMgc3RhdHVzCisgKiAgYkNlbnRlclN0YXR1cyAgICAgICA6IFVzZSBjZW50ZXIgcmVnaW9uIGFzIGZvY3VzIHJlZ2lvbiBvZiBpbnRlcmVzdAorICogIGJMZWZ0U3RhdHVzICAgICAgICAgOiBVc2UgbGVmdCByZWdpb24gYXMgZm9jdXMgcmVnaW9uIG9mIGludGVyZXN0CisgKiAgYlJpZ2h0U3RhdHVzICAgICAgICA6IFVzZSByaWdodCByZWdpb24gYXMgZm9jdXMgcmVnaW9uIG9mIGludGVyZXN0CisgKiAgYlRvcFN0YXR1cyAgICAgICAgICA6IFVzZSB0b3AgcmVnaW9uIGFzIGZvY3VzIHJlZ2lvbiBvZiBpbnRlcmVzdAorICogIGJCb3R0b21TdGF0dXMgICAgICAgOiBVc2UgYm90dG9tIHJlZ2lvbiBhcyBmb2N1cyByZWdpb24gb2YgaW50ZXJlc3QKKyAqICBiVG9wTGVmdFN0YXR1cyAgICAgIDogVXNlIHRvcCBsZWZ0IHJlZ2lvbiBhcyBmb2N1cyByZWdpb24gb2YgaW50ZXJlc3QKKyAqICBiVG9wUmlnaHRTdGF0dXMgICAgIDogVXNlIHRvcCByaWdodCByZWdpb24gYXMgZm9jdXMgcmVnaW9uIG9mIGludGVyZXN0CisgKiAgYkJvdHRvbUxlZnRTdGF0dXMgICA6IFVzZSBib3R0b20gbGVmdCByZWdpb24gYXMgZm9jdXMgcmVnaW9uIG9mIGludGVyZXN0CisgKiAgYkJvdHRvbVJpZ2h0U3RhdHVzICA6IFVzZSBib3R0b20gcmlnaHQgcmVnaW9uIGFzIGZvY3VzIHJlZ2lvbiBvZiBpbnRlcmVzdAorICovCit0eXBlZGVmIHN0cnVjdCBPTVhfUEFSQU1fRk9DVVNTVEFUVVNUWVBFIHsKKyAgICBPTVhfVTMyIG5TaXplOworICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsKKyAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7CisgICAgT01YX0ZPQ1VTU1RBVFVTVFlQRSBlRm9jdXNTdGF0dXM7CisgICAgT01YX0JPT0wgYkNlbnRlclN0YXR1czsKKyAgICBPTVhfQk9PTCBiTGVmdFN0YXR1czsKKyAgICBPTVhfQk9PTCBiUmlnaHRTdGF0dXM7CisgICAgT01YX0JPT0wgYlRvcFN0YXR1czsKKyAgICBPTVhfQk9PTCBiQm90dG9tU3RhdHVzOworICAgIE9NWF9CT09MIGJUb3BMZWZ0U3RhdHVzOworICAgIE9NWF9CT09MIGJUb3BSaWdodFN0YXR1czsKKyAgICBPTVhfQk9PTCBiQm90dG9tTGVmdFN0YXR1czsKKyAgICBPTVhfQk9PTCBiQm90dG9tUmlnaHRTdGF0dXM7Cit9IE9NWF9QQVJBTV9GT0NVU1NUQVRVU1RZUEU7CisKKy8qKiBAfSAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYKKy8qIEZpbGUgRU9GICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL29wZW5tYXgvT01YX0ltYWdlLmggYi9pbmNsdWRlL21lZGlhL29wZW5tYXgvT01YX0ltYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJlMzllYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbWVkaWEvb3Blbm1heC9PTVhfSW1hZ2UuaApAQCAtMCwwICsxLDM0NSBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwOSBQYWNrZXRWaWRlbworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlcgorICogZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zCisgKiBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKy8qKgorICogQ29weXJpZ2h0IChjKSAyMDA4IFRoZSBLaHJvbm9zIEdyb3VwIEluYy4gCisgKiAKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdAorICogdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQorICogQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKKyAqIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCisgKiBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gCisgKi8KKworLyoqIAorICogQGZpbGUgT01YX0ltYWdlLmggLSBPcGVuTWF4IElMIHZlcnNpb24gMS4xLjIKKyAqIFRoZSBzdHJ1Y3R1cmVzIG5lZWRlZCBieSBJbWFnZSBjb21wb25lbnRzIHRvIGV4Y2hhbmdlIHBhcmFtZXRlcnMgYW5kIAorICogY29uZmlndXJhdGlvbiBkYXRhIHdpdGggdGhlIGNvbXBvbmVudHMuCisgKi8KKyNpZm5kZWYgT01YX0ltYWdlX2gKKyNkZWZpbmUgT01YX0ltYWdlX2gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisKKy8qKgorICogRWFjaCBPTVggaGVhZGVyIG11c3QgaW5jbHVkZSBhbGwgcmVxdWlyZWQgaGVhZGVyIGZpbGVzIHRvIGFsbG93IHRoZSAKKyAqIGhlYWRlciB0byBjb21waWxlIHdpdGhvdXQgZXJyb3JzLiAgVGhlIGluY2x1ZGVzIGJlbG93IGFyZSByZXF1aXJlZCAgCisgKiBmb3IgdGhpcyBoZWFkZXIgZmlsZSB0byBjb21waWxlIHN1Y2Nlc3NmdWxseSAKKyAqLworCisjaW5jbHVkZSA8T01YX0lWQ29tbW9uLmg+CisKKy8qKiBAZGVmZ3JvdXAgaW1hZ2luZyBPcGVuTUFYIElMIEltYWdpbmcgRG9tYWluCisgKiBAaW5ncm91cCBpdgorICogU3RydWN0dXJlcyBmb3IgT3Blbk1BWCBJTCBJbWFnaW5nIGRvbWFpbgorICogQHsKKyAqLworCisvKiogCisgKiBFbnVtZXJhdGlvbiB1c2VkIHRvIGRlZmluZSB0aGUgcG9zc2libGUgaW1hZ2UgY29tcHJlc3Npb24gY29kaW5nLiAKKyAqLwordHlwZWRlZiBlbnVtIE9NWF9JTUFHRV9DT0RJTkdUWVBFIHsKKyAgICBPTVhfSU1BR0VfQ29kaW5nVW51c2VkLCAgICAgIC8qKjwgVmFsdWUgd2hlbiBmb3JtYXQgaXMgTi9BICovCisgICAgT01YX0lNQUdFX0NvZGluZ0F1dG9EZXRlY3QsICAvKio8IEF1dG8gZGV0ZWN0aW9uIG9mIGltYWdlIGZvcm1hdCAqLworICAgIE9NWF9JTUFHRV9Db2RpbmdKUEVHLCAgICAgICAgLyoqPCBKUEVHL0pGSUYgaW1hZ2UgZm9ybWF0ICovCisgICAgT01YX0lNQUdFX0NvZGluZ0pQRUcySywgICAgICAvKio8IEpQRUcgMjAwMCBpbWFnZSBmb3JtYXQgKi8KKyAgICBPTVhfSU1BR0VfQ29kaW5nRVhJRiwgICAgICAgIC8qKjwgRVhJRiBpbWFnZSBmb3JtYXQgKi8KKyAgICBPTVhfSU1BR0VfQ29kaW5nVElGRiwgICAgICAgIC8qKjwgVElGRiBpbWFnZSBmb3JtYXQgKi8KKyAgICBPTVhfSU1BR0VfQ29kaW5nR0lGLCAgICAgICAgIC8qKjwgR3JhcGhpY3MgaW1hZ2UgZm9ybWF0ICovCisgICAgT01YX0lNQUdFX0NvZGluZ1BORywgICAgICAgICAvKio8IFBORyBpbWFnZSBmb3JtYXQgKi8KKyAgICBPTVhfSU1BR0VfQ29kaW5nTFpXLCAgICAgICAgIC8qKjwgTFpXIGltYWdlIGZvcm1hdCAqLworICAgIE9NWF9JTUFHRV9Db2RpbmdCTVAsICAgICAgICAgLyoqPCBXaW5kb3dzIEJpdG1hcCBmb3JtYXQgKi8KKyAgICBPTVhfSU1BR0VfQ29kaW5nS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIE9NWF9JTUFHRV9Db2RpbmdWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLworICAgIE9NWF9JTUFHRV9Db2RpbmdNYXggPSAweDdGRkZGRkZGCit9IE9NWF9JTUFHRV9DT0RJTkdUWVBFOworCisKKy8qKgorICogRGF0YSBzdHJ1Y3R1cmUgdXNlZCB0byBkZWZpbmUgYW4gaW1hZ2UgcGF0aC4gVGhlIG51bWJlciBvZiBpbWFnZSBwYXRocyAKKyAqIGZvciBpbnB1dCBhbmQgb3V0cHV0IHdpbGwgdmFyeSBieSB0eXBlIG9mIHRoZSBpbWFnZSBjb21wb25lbnQuICAKKyAqIAorICogIElucHV0IChha2EgU291cmNlKSA6IFplcm8gSW5wdXRzLCBvbmUgT3V0cHV0LAorICogIFNwbGl0dGVyICAgICAgICAgICA6IE9uZSBJbnB1dCwgMiBvciBtb3JlIE91dHB1dHMsCisgKiAgUHJvY2Vzc2luZyBFbGVtZW50IDogT25lIElucHV0LCBvbmUgb3V0cHV0LAorICogIE1peGVyICAgICAgICAgICAgICA6IDIgb3IgbW9yZSBpbnB1dHMsIG9uZSBvdXRwdXQsCisgKiAgT3V0cHV0IChha2EgU2luaykgIDogT25lIElucHV0LCB6ZXJvIG91dHB1dHMuCisgKiAKKyAqIFRoZSBQb3J0RGVmaW5pdGlvbiBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBkZWZpbmUgYWxsIG9mIHRoZSBwYXJhbWV0ZXJzIAorICogbmVjZXNzYXJ5IGZvciB0aGUgY29tcGxpYW50IGNvbXBvbmVudCB0byBzZXR1cCBhbiBpbnB1dCBvciBhbiBvdXRwdXQgIAorICogaW1hZ2UgcGF0aC4gIElmIGFkZGl0aW9uYWwgdmVuZG9yIHNwZWNpZmljIGRhdGEgaXMgcmVxdWlyZWQsIGl0IHNob3VsZCAgCisgKiBiZSB0cmFuc21pdHRlZCB0byB0aGUgY29tcG9uZW50IHVzaW5nIHRoZSBDdXN0b21Db21tYW5kIGZ1bmN0aW9uLiAgIAorICogQ29tcGxpYW50IGNvbXBvbmVudHMgd2lsbCBwcmVwb3B1bGF0ZSB0aGlzIHN0cnVjdHVyZSB3aXRoIG9wdGltYWwgIAorICogdmFsdWVzIGR1cmluZyB0aGUgT01YX0dldFBhcmFtZXRlcigpIGNvbW1hbmQuCisgKgorICogU1RSVUNUIE1FTUJFUlM6CisgKiAgY01JTUVUeXBlICAgICAgICAgICAgIDogTUlNRSB0eXBlIG9mIGRhdGEgZm9yIHRoZSBwb3J0CisgKiAgcE5hdGl2ZVJlbmRlciAgICAgICAgIDogUGxhdGZvcm0gc3BlY2lmaWMgcmVmZXJlbmNlIGZvciBhIGRpc3BsYXkgaWYgYSAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBzeW5jLCBvdGhlcndpc2UgdGhpcyBmaWVsZCBpcyAwCisgKiAgbkZyYW1lV2lkdGggICAgICAgICAgIDogV2lkdGggb2YgZnJhbWUgdG8gYmUgdXNlZCBvbiBwb3J0IGlmIAorICogICAgICAgICAgICAgICAgICAgICAgICAgIHVuY29tcHJlc3NlZCBmb3JtYXQgaXMgdXNlZC4gIFVzZSAwIGZvciAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICB1bmtub3duLCBkb24ndCBjYXJlIG9yIHZhcmlhYmxlCisgKiAgbkZyYW1lSGVpZ2h0ICAgICAgICAgIDogSGVpZ2h0IG9mIGZyYW1lIHRvIGJlIHVzZWQgb24gcG9ydCBpZiAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICB1bmNvbXByZXNzZWQgZm9ybWF0IGlzIHVzZWQuIFVzZSAwIGZvciAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICB1bmtub3duLCBkb24ndCBjYXJlIG9yIHZhcmlhYmxlCisgKiAgblN0cmlkZSAgICAgICAgICAgICAgIDogTnVtYmVyIG9mIGJ5dGVzIHBlciBzcGFuIG9mIGFuIGltYWdlIChpLmUuIAorICogICAgICAgICAgICAgICAgICAgICAgICAgIGluZGljYXRlcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGdldCBmcm9tCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhbiBOIHRvIHNwYW4gTisxLCB3aGVyZSBuZWdhdGl2ZSBzdHJpZGUgCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNhdGVzIHRoZSBpbWFnZSBpcyBib3R0b20gdXAKKyAqICBuU2xpY2VIZWlnaHQgICAgICAgICAgOiBIZWlnaHQgdXNlZCB3aGVuIGVuY29kaW5nIGluIHNsaWNlcworICogIGJGbGFnRXJyb3JDb25jZWFsbWVudCA6IFR1cm5zIG9uIGVycm9yIGNvbmNlYWxtZW50IGlmIGl0IGlzIHN1cHBvcnRlZCBieSAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgT01YIGNvbXBvbmVudAorICogIGVDb21wcmVzc2lvbkZvcm1hdCAgICA6IENvbXByZXNzaW9uIGZvcm1hdCB1c2VkIGluIHRoaXMgaW5zdGFuY2Ugb2YgIAorICogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjb21wb25lbnQuIFdoZW4gT01YX0lNQUdFX0NvZGluZ1VudXNlZCBpcyAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQsIGVDb2xvckZvcm1hdCBpcyB2YWxpZAorICogIGVDb2xvckZvcm1hdCAgICAgICAgICA6IERlY29tcHJlc3NlZCBmb3JtYXQgdXNlZCBieSB0aGlzIGNvbXBvbmVudAorICogIHBOYXRpdmVXaW5kb3cgICAgICAgICA6IFBsYXRmb3JtIHNwZWNpZmljIHJlZmVyZW5jZSBmb3IgYSB3aW5kb3cgb2JqZWN0IGlmIGEgCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheSBzaW5rICwgb3RoZXJ3aXNlIHRoaXMgZmllbGQgaXMgMHgwLiAKKyAqLwordHlwZWRlZiBzdHJ1Y3QgT01YX0lNQUdFX1BPUlRERUZJTklUSU9OVFlQRSB7CisgICAgT01YX1NUUklORyBjTUlNRVR5cGU7CisgICAgT01YX05BVElWRV9ERVZJQ0VUWVBFIHBOYXRpdmVSZW5kZXI7CisgICAgT01YX1UzMiBuRnJhbWVXaWR0aDsgCisgICAgT01YX1UzMiBuRnJhbWVIZWlnaHQ7CisgICAgT01YX1MzMiBuU3RyaWRlOyAgICAgCisgICAgT01YX1UzMiBuU2xpY2VIZWlnaHQ7CisgICAgT01YX0JPT0wgYkZsYWdFcnJvckNvbmNlYWxtZW50OworICAgIE9NWF9JTUFHRV9DT0RJTkdUWVBFIGVDb21wcmVzc2lvbkZvcm1hdDsKKyAgICBPTVhfQ09MT1JfRk9STUFUVFlQRSBlQ29sb3JGb3JtYXQ7CisgICAgT01YX05BVElWRV9XSU5ET1dUWVBFIHBOYXRpdmVXaW5kb3c7Cit9IE9NWF9JTUFHRV9QT1JUREVGSU5JVElPTlRZUEU7CisKKworLyoqICAKKyAqIFBvcnQgZm9ybWF0IHBhcmFtZXRlci4gIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgdG8gZW51bWVyYXRlIHRoZSB2YXJpb3VzIAorICogZGF0YSBpbnB1dC9vdXRwdXQgZm9ybWF0IHN1cHBvcnRlZCBieSB0aGUgcG9ydC4KKyAqIAorICogU1RSVUNUIE1FTUJFUlM6CisgKiAgblNpemUgICAgICAgICAgICAgIDogU2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzCisgKiAgblZlcnNpb24gICAgICAgICAgIDogT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbgorICogIG5Qb3J0SW5kZXggICAgICAgICA6IEluZGljYXRlcyB3aGljaCBwb3J0IHRvIHNldAorICogIG5JbmRleCAgICAgICAgICAgICA6IEluZGljYXRlcyB0aGUgZW51bWVyYXRpb24gaW5kZXggZm9yIHRoZSBmb3JtYXQgZnJvbSAKKyAqICAgICAgICAgICAgICAgICAgICAgICAweDAgdG8gTi0xCisgKiAgZUNvbXByZXNzaW9uRm9ybWF0IDogQ29tcHJlc3Npb24gZm9ybWF0IHVzZWQgaW4gdGhpcyBpbnN0YW5jZSBvZiB0aGUgCisgKiAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LiBXaGVuIE9NWF9JTUFHRV9Db2RpbmdVbnVzZWQgaXMgc3BlY2lmaWVkLCAKKyAqICAgICAgICAgICAgICAgICAgICAgICBlQ29sb3JGb3JtYXQgaXMgdmFsaWQKKyAqICBlQ29sb3JGb3JtYXQgICAgICAgOiBEZWNvbXByZXNzZWQgZm9ybWF0IHVzZWQgYnkgdGhpcyBjb21wb25lbnQKKyAqLwordHlwZWRlZiBzdHJ1Y3QgT01YX0lNQUdFX1BBUkFNX1BPUlRGT1JNQVRUWVBFIHsKKyAgICBPTVhfVTMyIG5TaXplOworICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsKKyAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7CisgICAgT01YX1UzMiBuSW5kZXg7CisgICAgT01YX0lNQUdFX0NPRElOR1RZUEUgZUNvbXByZXNzaW9uRm9ybWF0OworICAgIE9NWF9DT0xPUl9GT1JNQVRUWVBFIGVDb2xvckZvcm1hdDsKK30gT01YX0lNQUdFX1BBUkFNX1BPUlRGT1JNQVRUWVBFOworCisKKy8qKiAKKyAqIEZsYXNoIGNvbnRyb2wgdHlwZSAKKyAqCisgKiBFTlVNUworICogIFRvcmNoIDogRmxhc2ggZm9yY2VkIGNvbnN0YW50bHkgb24KKyAqLwordHlwZWRlZiBlbnVtIE9NWF9JTUFHRV9GTEFTSENPTlRST0xUWVBFIHsKKyAgICBPTVhfSU1BR0VfRmxhc2hDb250cm9sT24gPSAwLAorICAgIE9NWF9JTUFHRV9GbGFzaENvbnRyb2xPZmYsCisgICAgT01YX0lNQUdFX0ZsYXNoQ29udHJvbEF1dG8sCisgICAgT01YX0lNQUdFX0ZsYXNoQ29udHJvbFJlZEV5ZVJlZHVjdGlvbiwKKyAgICBPTVhfSU1BR0VfRmxhc2hDb250cm9sRmlsbGluLAorICAgIE9NWF9JTUFHRV9GbGFzaENvbnRyb2xUb3JjaCwKKyAgICBPTVhfSU1BR0VfRmxhc2hDb250cm9sS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIE9NWF9JTUFHRV9GbGFzaENvbnRyb2xWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLworICAgIE9NWF9JTUFHRV9GbGFzaENvbnRyb2xNYXggPSAweDdGRkZGRkZGCit9IE9NWF9JTUFHRV9GTEFTSENPTlRST0xUWVBFOworCisKKy8qKiAKKyAqIEZsYXNoIGNvbnRyb2wgY29uZmlndXJhdGlvbiAKKyAqCisgKiBTVFJVQ1QgTUVNQkVSUzoKKyAqICBuU2l6ZSAgICAgICAgIDogU2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzCisgKiAgblZlcnNpb24gICAgICA6IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24KKyAqICBuUG9ydEluZGV4ICAgIDogUG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8KKyAqICBlRmxhc2hDb250cm9sIDogRmxhc2ggY29udHJvbCB0eXBlCisgKi8KK3R5cGVkZWYgc3RydWN0IE9NWF9JTUFHRV9QQVJBTV9GTEFTSENPTlRST0xUWVBFIHsKKyAgICBPTVhfVTMyIG5TaXplOworICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsKKyAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7CisgICAgT01YX0lNQUdFX0ZMQVNIQ09OVFJPTFRZUEUgZUZsYXNoQ29udHJvbDsKK30gT01YX0lNQUdFX1BBUkFNX0ZMQVNIQ09OVFJPTFRZUEU7CisKKworLyoqIAorICogRm9jdXMgY29udHJvbCB0eXBlIAorICovCit0eXBlZGVmIGVudW0gT01YX0lNQUdFX0ZPQ1VTQ09OVFJPTFRZUEUgeworICAgIE9NWF9JTUFHRV9Gb2N1c0NvbnRyb2xPbiA9IDAsCisgICAgT01YX0lNQUdFX0ZvY3VzQ29udHJvbE9mZiwKKyAgICBPTVhfSU1BR0VfRm9jdXNDb250cm9sQXV0bywKKyAgICBPTVhfSU1BR0VfRm9jdXNDb250cm9sQXV0b0xvY2ssCisgICAgT01YX0lNQUdFX0ZvY3VzQ29udHJvbEtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKKyAgICBPTVhfSU1BR0VfRm9jdXNDb250cm9sVmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KKyAgICBPTVhfSU1BR0VfRm9jdXNDb250cm9sTWF4ID0gMHg3RkZGRkZGRgorfSBPTVhfSU1BR0VfRk9DVVNDT05UUk9MVFlQRTsKKworIAorLyoqIAorICogRm9jdXMgY29udHJvbCBjb25maWd1cmF0aW9uIAorICoKKyAqIFNUUlVDVCBNRU1CRVJTOgorICogIG5TaXplICAgICAgICAgICA6IFNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcworICogIG5WZXJzaW9uICAgICAgICA6IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24KKyAqICBuUG9ydEluZGV4ICAgICAgOiBQb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0bworICogIGVGb2N1c0NvbnRyb2wgICA6IEZvY3VzIGNvbnRyb2wKKyAqICBuRm9jdXNTdGVwcyAgICAgOiBGb2N1cyBjYW4gdGFrZSBvbiB2YWx1ZXMgZnJvbSAwIG1tIHRvIGluZmluaXR5LiAKKyAqICAgICAgICAgICAgICAgICAgICBJbnRlcmVzdCBpcyBvbmx5IGluIG51bWJlciBvZiBzdGVwcyBvdmVyIHRoaXMgcmFuZ2UuCisgKiAgbkZvY3VzU3RlcEluZGV4IDogQ3VycmVudCBmb2N1cyBzdGVwIGluZGV4CisgKi8KK3R5cGVkZWYgc3RydWN0IE9NWF9JTUFHRV9DT05GSUdfRk9DVVNDT05UUk9MVFlQRSB7CisgICAgT01YX1UzMiBuU2l6ZTsKKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247CisgICAgT01YX1UzMiBuUG9ydEluZGV4OworICAgIE9NWF9JTUFHRV9GT0NVU0NPTlRST0xUWVBFIGVGb2N1c0NvbnRyb2w7CisgICAgT01YX1UzMiBuRm9jdXNTdGVwczsKKyAgICBPTVhfVTMyIG5Gb2N1c1N0ZXBJbmRleDsKK30gT01YX0lNQUdFX0NPTkZJR19GT0NVU0NPTlRST0xUWVBFOworCisKKy8qKiAKKyAqIFEgRmFjdG9yIGZvciBKUEVHIGNvbXByZXNzaW9uLCB3aGljaCBjb250cm9scyB0aGUgdHJhZGVvZmYgYmV0d2VlbiBpbWFnZQorICogcXVhbGl0eSBhbmQgc2l6ZS4gIFEgRmFjdG9yIHByb3ZpZGVzIGEgbW9yZSBzaW1wbGUgbWVhbnMgb2YgY29udHJvbGxpbmcKKyAqIEpQRUcgY29tcHJlc3Npb24gcXVhbGl0eSwgd2l0aG91dCBkaXJlY3RseSBwcm9ncmFtbWluZyBRdWFudGl6YXRpb24KKyAqIHRhYmxlcyBmb3IgY2hyb21hIGFuZCBsdW1hIAorICoKKyAqIFNUUlVDVCBNRU1CRVJTOgorICogIG5TaXplICAgICAgOiBTaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgICAgICAgICAKKyAqICBuVmVyc2lvbiAgIDogT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAKKyAqICBuUG9ydEluZGV4IDogUG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8gCisgKiAgblFGYWN0b3IgICA6IEpQRUcgUSBmYWN0b3IgdmFsdWUgaW4gdGhlIHJhbmdlIG9mIDEtMTAwLiBBIGZhY3RvciBvZiAxIAorICogICAgICAgICAgICAgICBwcm9kdWNlcyB0aGUgc21hbGxlc3QsIHdvcnN0IHF1YWxpdHkgaW1hZ2VzLCBhbmQgYSBmYWN0b3IgCisgKiAgICAgICAgICAgICAgIG9mIDEwMCBwcm9kdWNlcyB0aGUgbGFyZ2VzdCwgYmVzdCBxdWFsaXR5IGltYWdlcy4gIEEgCisgKiAgICAgICAgICAgICAgIHR5cGljYWwgZGVmYXVsdCBpcyA3NSBmb3Igc21hbGwgZ29vZCBxdWFsaXR5IGltYWdlcyAgICAgICAgICAgICAgIAorICovCit0eXBlZGVmIHN0cnVjdCBPTVhfSU1BR0VfUEFSQU1fUUZBQ1RPUlRZUEUgeworICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgCisgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAKKyAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7ICAgICAgIAorICAgIE9NWF9VMzIgblFGYWN0b3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorfSBPTVhfSU1BR0VfUEFSQU1fUUZBQ1RPUlRZUEU7CisKKy8qKiAKKyAqIFF1YW50aXphdGlvbiB0YWJsZSB0eXBlIAorICovCisKK3R5cGVkZWYgZW51bSBPTVhfSU1BR0VfUVVBTlRJWkFUSU9OVEFCTEVUWVBFIHsKKyAgICBPTVhfSU1BR0VfUXVhbnRpemF0aW9uVGFibGVMdW1hID0gMCwKKyAgICBPTVhfSU1BR0VfUXVhbnRpemF0aW9uVGFibGVDaHJvbWEsCisgICAgT01YX0lNQUdFX1F1YW50aXphdGlvblRhYmxlQ2hyb21hQ2IsCisgICAgT01YX0lNQUdFX1F1YW50aXphdGlvblRhYmxlQ2hyb21hQ3IsCisgICAgT01YX0lNQUdFX1F1YW50aXphdGlvblRhYmxlS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIE9NWF9JTUFHRV9RdWFudGl6YXRpb25UYWJsZVZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCisgICAgT01YX0lNQUdFX1F1YW50aXphdGlvblRhYmxlTWF4ID0gMHg3RkZGRkZGRgorfSBPTVhfSU1BR0VfUVVBTlRJWkFUSU9OVEFCTEVUWVBFOworCisvKiogCisgKiBKUEVHIHF1YW50aXphdGlvbiB0YWJsZXMgYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIERDVCBjb21wcmVzc2lvbiBmb3IKKyAqIFlVViBkYXRhLCBhcyBhbiBhbHRlcm5hdGl2ZSB0byBzcGVjaWZ5aW5nIFEgZmFjdG9yLCBwcm92aWRpbmcgZXhhY3QgCisgKiBjb250cm9sIG9mIGNvbXByZXNzaW9uIAorICoKKyAqIFNUUlVDVCBNRU1CRVJTOgorICogIG5TaXplICAgICAgICAgICAgICAgICAgIDogU2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzCisgKiAgblZlcnNpb24gICAgICAgICAgICAgICAgOiBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uIAorICogIG5Qb3J0SW5kZXggICAgICAgICAgICAgIDogUG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8KKyAqICBlUXVhbnRpemF0aW9uVGFibGUgICAgICA6IFF1YW50aXphdGlvbiB0YWJsZSB0eXBlCisgKiAgblF1YW50aXphdGlvbk1hdHJpeFs2NF0gOiBKUEVHIHF1YW50aXphdGlvbiB0YWJsZSBvZiBjb2VmZmljaWVudHMgc3RvcmVkIAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gaW5jcmVhc2luZyBjb2x1bW5zIHRoZW4gYnkgcm93cyBvZiBkYXRhIChpLmUuIAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93IDEsIC4uLiByb3cgOCkuIFF1YW50aXphdGlvbiB2YWx1ZXMgYXJlIGluIAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHJhbmdlIDAtMjU1IGFuZCBzdG9yZWQgaW4gbGluZWFyIG9yZGVyCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaS5lLiB0aGUgY29tcG9uZW50IHdpbGwgemlnLXphZyB0aGUgCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFudGl6YXRpb24gdGFibGUgZGF0YSBpZiByZXF1aXJlZCBpbnRlcm5hbGx5KSAKKyAqLwordHlwZWRlZiBzdHJ1Y3QgT01YX0lNQUdFX1BBUkFNX1FVQU5USVpBVElPTlRBQkxFVFlQRSB7CisgICAgT01YX1UzMiBuU2l6ZTsKKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247CisgICAgT01YX1UzMiBuUG9ydEluZGV4OworICAgIE9NWF9JTUFHRV9RVUFOVElaQVRJT05UQUJMRVRZUEUgZVF1YW50aXphdGlvblRhYmxlOworICAgIE9NWF9VOCBuUXVhbnRpemF0aW9uTWF0cml4WzY0XTsKK30gT01YX0lNQUdFX1BBUkFNX1FVQU5USVpBVElPTlRBQkxFVFlQRTsKKworCisvKiogCisgKiBIdWZmbWFuIHRhYmxlIHR5cGUsIHRoZSBzYW1lIEh1ZmZtYW4gdGFibGUgaXMgYXBwbGllZCBmb3IgY2hyb21hIGFuZCAKKyAqIGx1bWEgY29tcG9uZW50IAorICovCit0eXBlZGVmIGVudW0gT01YX0lNQUdFX0hVRkZNQU5UQUJMRVRZUEUgeworICAgIE9NWF9JTUFHRV9IdWZmbWFuVGFibGVBQyA9IDAsCisgICAgT01YX0lNQUdFX0h1ZmZtYW5UYWJsZURDLAorICAgIE9NWF9JTUFHRV9IdWZmbWFuVGFibGVBQ0x1bWEsCisgICAgT01YX0lNQUdFX0h1ZmZtYW5UYWJsZUFDQ2hyb21hLAorICAgIE9NWF9JTUFHRV9IdWZmbWFuVGFibGVEQ0x1bWEsCisgICAgT01YX0lNQUdFX0h1ZmZtYW5UYWJsZURDQ2hyb21hLAorICAgIE9NWF9JTUFHRV9IdWZmbWFuVGFibGVLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICAgT01YX0lNQUdFX0h1ZmZtYW5UYWJsZVZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCisgICAgT01YX0lNQUdFX0h1ZmZtYW5UYWJsZU1heCA9IDB4N0ZGRkZGRkYKK30gT01YX0lNQUdFX0hVRkZNQU5UQUJMRVRZUEU7CisKKy8qKiAKKyAqIEpQRUcgSHVmZm1hbiB0YWJsZSAKKyAqCisgKiBTVFJVQ1QgTUVNQkVSUzoKKyAqICBuU2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcworICogIG5WZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgIDogT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbgorICogIG5Qb3J0SW5kZXggICAgICAgICAgICAgICAgICAgICAgIDogUG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8KKyAqICBlSHVmZm1hblRhYmxlICAgICAgICAgICAgICAgICAgICA6IEh1ZmZtYW4gdGFibGUgdHlwZQorICogIG5OdW1iZXJPZkh1ZmZtYW5Db2RlT2ZMZW5ndGhbMTZdIDogMC0xNiwgbnVtYmVyIG9mIEh1ZmZtYW4gY29kZXMgb2YgZWFjaCAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlIGxlbmd0aAorICogIG5IdWZmbWFuVGFibGVbMjU2XSAgICAgICAgICAgICAgIDogMC0yNTUsIHRoZSBzaXplIHVzZWQgZm9yIEFDIGFuZCBEQyAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEh1ZmZtYW5UYWJsZSBhcmUgMTYgYW5kIDE2MiAKKyAqLwordHlwZWRlZiBzdHJ1Y3QgT01YX0lNQUdFX1BBUkFNX0hVRkZNQU5UVEFCTEVUWVBFIHsKKyAgICBPTVhfVTMyIG5TaXplOworICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsKKyAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7CisgICAgT01YX0lNQUdFX0hVRkZNQU5UQUJMRVRZUEUgZUh1ZmZtYW5UYWJsZTsKKyAgICBPTVhfVTggbk51bWJlck9mSHVmZm1hbkNvZGVPZkxlbmd0aFsxNl07CisgICAgT01YX1U4IG5IdWZmbWFuVGFibGVbMjU2XTsKK31PTVhfSU1BR0VfUEFSQU1fSFVGRk1BTlRUQUJMRVRZUEU7CisKKy8qKiBAfSAqLworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmCisvKiBGaWxlIEVPRiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9vcGVubWF4L09NWF9JbmRleC5oIGIvaW5jbHVkZS9tZWRpYS9vcGVubWF4L09NWF9JbmRleC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwYjhkOTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL21lZGlhL29wZW5tYXgvT01YX0luZGV4LmgKQEAgLTAsMCArMSwyNzUgQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogQ29weXJpZ2h0IChDKSAxOTk4LTIwMDkgUGFja2V0VmlkZW8KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIKKyAqIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucworICogYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisvKgorICogQ29weXJpZ2h0IChjKSAyMDA4IFRoZSBLaHJvbm9zIEdyb3VwIEluYy4gCisgKiAKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdAorICogdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQorICogQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKKyAqIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCisgKiBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gCisgKgorICovCisKKy8qKiBAZmlsZSBPTVhfSW5kZXguaCAtIE9wZW5NYXggSUwgdmVyc2lvbiAxLjEuMgorICogIFRoZSBPTVhfSW5kZXggaGVhZGVyIGZpbGUgY29udGFpbnMgdGhlIGRlZmluaXRpb25zIGZvciBib3RoIGFwcGxpY2F0aW9ucworICogIGFuZCBjb21wb25lbnRzIC4KKyAqLworCisKKyNpZm5kZWYgT01YX0luZGV4X2gKKyNkZWZpbmUgT01YX0luZGV4X2gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisKKy8qIEVhY2ggT01YIGhlYWRlciBtdXN0IGluY2x1ZGUgYWxsIHJlcXVpcmVkIGhlYWRlciBmaWxlcyB0byBhbGxvdyB0aGUKKyAqICBoZWFkZXIgdG8gY29tcGlsZSB3aXRob3V0IGVycm9ycy4gIFRoZSBpbmNsdWRlcyBiZWxvdyBhcmUgcmVxdWlyZWQKKyAqICBmb3IgdGhpcyBoZWFkZXIgZmlsZSB0byBjb21waWxlIHN1Y2Nlc3NmdWxseSAKKyAqLworI2luY2x1ZGUgPE9NWF9UeXBlcy5oPgorCisKKy8qKiBUaGUgT01YX0lOREVYVFlQRSBlbnVtZXJhdGlvbiBpcyB1c2VkIHRvIHNlbGVjdCBhIHN0cnVjdHVyZSB3aGVuIGVpdGhlcgorICogIGdldHRpbmcgb3Igc2V0dGluZyBwYXJhbWV0ZXJzIGFuZC9vciBjb25maWd1cmF0aW9uIGRhdGEuICBFYWNoIGVudHJ5IGluIAorICogIHRoaXMgZW51bWVyYXRpb24gbWFwcyB0byBhbiBPTVggc3BlY2lmaWVkIHN0cnVjdHVyZS4gIFdoZW4gdGhlIAorICogIE9NWF9HZXRQYXJhbWV0ZXIsIE9NWF9TZXRQYXJhbWV0ZXIsIE9NWF9HZXRDb25maWcgb3IgT01YX1NldENvbmZpZyBtZXRob2RzCisgKiAgYXJlIHVzZWQsIHRoZSBzZWNvbmQgcGFyYW1ldGVyIHdpbGwgYWx3YXlzIGJlIGFuIGVudHJ5IGZyb20gdGhpcyBlbnVtZXJhdGlvbgorICogIGFuZCB0aGUgdGhpcmQgZW50cnkgd2lsbCBiZSB0aGUgc3RydWN0dXJlIHNob3duIGluIHRoZSBjb21tZW50cyBmb3IgdGhlIGVudHJ5LgorICogIEZvciBleGFtcGxlLCBpZiB0aGUgYXBwbGljYXRpb24gaXMgaW5pdGlhbGl6aW5nIGEgY3JvcHBpbmcgZnVuY3Rpb24sIHRoZSAKKyAqICBPTVhfU2V0Q29uZmlnIGNvbW1hbmQgd291bGQgaGF2ZSBPTVhfSW5kZXhDb25maWdDb21tb25JbnB1dENyb3AgYXMgdGhlIHNlY29uZCBwYXJhbWV0ZXIgCisgKiAgYW5kIHdvdWxkIHNlbmQgYSBwb2ludGVyIHRvIGFuIGluaXRpYWxpemVkIE9NWF9SRUNUVFlQRSBzdHJ1Y3R1cmUgYXMgdGhlIAorICogIHRoaXJkIHBhcmFtZXRlci4KKyAqICAKKyAqICBUaGUgZW51bWVyYXRpb24gZW50cmllcyBuYW1lZCB3aXRoIHRoZSBPTVhfQ29uZmlnIHByZWZpeCBhcmUgc2VudCB1c2luZworICogIHRoZSBPTVhfU2V0Q29uZmlnIGNvbW1hbmQgYW5kIHRoZSBlbnVtZXJhdGlvbiBlbnRyaWVzIG5hbWVkIHdpdGggdGhlCisgKiAgT01YX1BBUkFNXyBwcmVmaXggYXJlIHNlbnQgdXNpbmcgdGhlIE9NWF9TZXRQYXJhbWV0ZXIgY29tbWFuZC4KKyAqLwordHlwZWRlZiBlbnVtIE9NWF9JTkRFWFRZUEUgeworCisgICAgT01YX0luZGV4Q29tcG9uZW50U3RhcnRVbnVzZWQgPSAweDAxMDAwMDAwLAorICAgIE9NWF9JbmRleFBhcmFtUHJpb3JpdHlNZ210LCAgICAgICAgICAgICAvKio8IHJlZmVyZW5jZTogT01YX1BSSU9SSVRZTUdNVFRZUEUgKi8KKyAgICBPTVhfSW5kZXhQYXJhbUF1ZGlvSW5pdCwgICAgICAgICAgICAgICAgLyoqPCByZWZlcmVuY2U6IE9NWF9QT1JUX1BBUkFNX1RZUEUgKi8KKyAgICBPTVhfSW5kZXhQYXJhbUltYWdlSW5pdCwgICAgICAgICAgICAgICAgLyoqPCByZWZlcmVuY2U6IE9NWF9QT1JUX1BBUkFNX1RZUEUgKi8KKyAgICBPTVhfSW5kZXhQYXJhbVZpZGVvSW5pdCwgICAgICAgICAgICAgICAgLyoqPCByZWZlcmVuY2U6IE9NWF9QT1JUX1BBUkFNX1RZUEUgKi8KKyAgICBPTVhfSW5kZXhQYXJhbU90aGVySW5pdCwgICAgICAgICAgICAgICAgLyoqPCByZWZlcmVuY2U6IE9NWF9QT1JUX1BBUkFNX1RZUEUgKi8KKyAgICBPTVhfSW5kZXhQYXJhbU51bUF2YWlsYWJsZVN0cmVhbXMsICAgICAgLyoqPCByZWZlcmVuY2U6IE9NWF9QQVJBTV9VMzJUWVBFICovCisgICAgT01YX0luZGV4UGFyYW1BY3RpdmVTdHJlYW0sICAgICAgICAgICAgIC8qKjwgcmVmZXJlbmNlOiBPTVhfUEFSQU1fVTMyVFlQRSAqLworICAgIE9NWF9JbmRleFBhcmFtU3VzcGVuc2lvblBvbGljeSwgICAgICAgICAvKio8IHJlZmVyZW5jZTogT01YX1BBUkFNX1NVU1BFTlNJT05QT0xJQ1lUWVBFICovCisgICAgT01YX0luZGV4UGFyYW1Db21wb25lbnRTdXNwZW5kZWQsICAgICAgIC8qKjwgcmVmZXJlbmNlOiBPTVhfUEFSQU1fU1VTUEVOU0lPTlRZUEUgKi8KKyAgICBPTVhfSW5kZXhDb25maWdDYXB0dXJpbmcsICAgICAgICAgICAgICAgLyoqPCByZWZlcmVuY2U6IE9NWF9DT05GSUdfQk9PTEVBTlRZUEUgKi8gCisgICAgT01YX0luZGV4Q29uZmlnQ2FwdHVyZU1vZGUsICAgICAgICAgICAgIC8qKjwgcmVmZXJlbmNlOiBPTVhfQ09ORklHX0NBUFRVUkVNT0RFVFlQRSAqLyAKKyAgICBPTVhfSW5kZXhBdXRvUGF1c2VBZnRlckNhcHR1cmUsICAgICAgICAgLyoqPCByZWZlcmVuY2U6IE9NWF9DT05GSUdfQk9PTEVBTlRZUEUgKi8gCisgICAgT01YX0luZGV4UGFyYW1Db250ZW50VVJJLCAgICAgICAgICAgICAgIC8qKjwgcmVmZXJlbmNlOiBPTVhfUEFSQU1fQ09OVEVOVFVSSVRZUEUgKi8KKyAgICBPTVhfSW5kZXhQYXJhbUN1c3RvbUNvbnRlbnRQaXBlLCAgICAgICAgLyoqPCByZWZlcmVuY2U6IE9NWF9QQVJBTV9DT05URU5UUElQRVRZUEUgKi8gCisgICAgT01YX0luZGV4UGFyYW1EaXNhYmxlUmVzb3VyY2VDb25jZWFsbWVudCwgLyoqPCByZWZlcmVuY2U6IE9NWF9SRVNPVVJDRUNPTkNFQUxNRU5UVFlQRSAqLworICAgIE9NWF9JbmRleENvbmZpZ01ldGFkYXRhSXRlbUNvdW50LCAgICAgICAvKio8IHJlZmVyZW5jZTogT01YX0NPTkZJR19NRVRBREFUQUlURU1DT1VOVFRZUEUgKi8KKyAgICBPTVhfSW5kZXhDb25maWdDb250YWluZXJOb2RlQ291bnQsICAgICAgLyoqPCByZWZlcmVuY2U6IE9NWF9DT05GSUdfQ09OVEFJTkVSTk9ERUNPVU5UVFlQRSAqLworICAgIE9NWF9JbmRleENvbmZpZ01ldGFkYXRhSXRlbSwgICAgICAgICAgICAvKio8IHJlZmVyZW5jZTogT01YX0NPTkZJR19NRVRBREFUQUlURU1UWVBFICovCisgICAgT01YX0luZGV4Q29uZmlnQ291bnRlck5vZGVJRCwgICAgICAgICAgIC8qKjwgcmVmZXJlbmNlOiBPTVhfQ09ORklHX0NPTlRBSU5FUk5PREVJRFRZUEUgKi8KKyAgICBPTVhfSW5kZXhQYXJhbU1ldGFkYXRhRmlsdGVyVHlwZSwgICAgICAgLyoqPCByZWZlcmVuY2U6IE9NWF9QQVJBTV9NRVRBREFUQUZJTFRFUlRZUEUgKi8KKyAgICBPTVhfSW5kZXhQYXJhbU1ldGFkYXRhS2V5RmlsdGVyLCAgICAgICAgLyoqPCByZWZlcmVuY2U6IE9NWF9QQVJBTV9NRVRBREFUQUZJTFRFUlRZUEUgKi8KKyAgICBPTVhfSW5kZXhDb25maWdQcmlvcml0eU1nbXQsICAgICAgICAgICAgLyoqPCByZWZlcmVuY2U6IE9NWF9QUklPUklUWU1HTVRUWVBFICovCisgICAgT01YX0luZGV4UGFyYW1TdGFuZGFyZENvbXBvbmVudFJvbGUsICAgIC8qKjwgcmVmZXJlbmNlOiBPTVhfUEFSQU1fQ09NUE9ORU5UUk9MRVRZUEUgKi8KKworICAgIE9NWF9JbmRleFBvcnRTdGFydFVudXNlZCA9IDB4MDIwMDAwMDAsCisgICAgT01YX0luZGV4UGFyYW1Qb3J0RGVmaW5pdGlvbiwgICAgICAgICAgIC8qKjwgcmVmZXJlbmNlOiBPTVhfUEFSQU1fUE9SVERFRklOSVRJT05UWVBFICovCisgICAgT01YX0luZGV4UGFyYW1Db21wQnVmZmVyU3VwcGxpZXIsICAgICAgIC8qKjwgcmVmZXJlbmNlOiBPTVhfUEFSQU1fQlVGRkVSU1VQUExJRVJUWVBFICovIAorICAgIE9NWF9JbmRleFJlc2VydmVkU3RhcnRVbnVzZWQgPSAweDAzMDAwMDAwLAorCisgICAgLyogQXVkaW8gcGFyYW1ldGVycyBhbmQgY29uZmlndXJhdGlvbnMgKi8KKyAgICBPTVhfSW5kZXhBdWRpb1N0YXJ0VW51c2VkID0gMHgwNDAwMDAwMCwKKyAgICBPTVhfSW5kZXhQYXJhbUF1ZGlvUG9ydEZvcm1hdCwgICAgICAgICAgLyoqPCByZWZlcmVuY2U6IE9NWF9BVURJT19QQVJBTV9QT1JURk9STUFUVFlQRSAqLworICAgIE9NWF9JbmRleFBhcmFtQXVkaW9QY20sICAgICAgICAgICAgICAgICAvKio8IHJlZmVyZW5jZTogT01YX0FVRElPX1BBUkFNX1BDTU1PREVUWVBFICovCisgICAgT01YX0luZGV4UGFyYW1BdWRpb0FhYywgICAgICAgICAgICAgICAgIC8qKjwgcmVmZXJlbmNlOiBPTVhfQVVESU9fUEFSQU1fQUFDUFJPRklMRVRZUEUgKi8KKyAgICBPTVhfSW5kZXhQYXJhbUF1ZGlvUmEsICAgICAgICAgICAgICAgICAgLyoqPCByZWZlcmVuY2U6IE9NWF9BVURJT19QQVJBTV9SQVRZUEUgKi8KKyAgICBPTVhfSW5kZXhQYXJhbUF1ZGlvTXAzLCAgICAgICAgICAgICAgICAgLyoqPCByZWZlcmVuY2U6IE9NWF9BVURJT19QQVJBTV9NUDNUWVBFICovCisgICAgT01YX0luZGV4UGFyYW1BdWRpb0FkcGNtLCAgICAgICAgICAgICAgIC8qKjwgcmVmZXJlbmNlOiBPTVhfQVVESU9fUEFSQU1fQURQQ01UWVBFICovCisgICAgT01YX0luZGV4UGFyYW1BdWRpb0c3MjMsICAgICAgICAgICAgICAgIC8qKjwgcmVmZXJlbmNlOiBPTVhfQVVESU9fUEFSQU1fRzcyM1RZUEUgKi8KKyAgICBPTVhfSW5kZXhQYXJhbUF1ZGlvRzcyOSwgICAgICAgICAgICAgICAgLyoqPCByZWZlcmVuY2U6IE9NWF9BVURJT19QQVJBTV9HNzI5VFlQRSAqLworICAgIE9NWF9JbmRleFBhcmFtQXVkaW9BbXIsICAgICAgICAgICAgICAgICAvKio8IHJlZmVyZW5jZTogT01YX0FVRElPX1BBUkFNX0FNUlRZUEUgKi8KKyAgICBPTVhfSW5kZXhQYXJhbUF1ZGlvV21hLCAgICAgICAgICAgICAgICAgLyoqPCByZWZlcmVuY2U6IE9NWF9BVURJT19QQVJBTV9XTUFUWVBFICovCisgICAgT01YX0luZGV4UGFyYW1BdWRpb1NiYywgICAgICAgICAgICAgICAgIC8qKjwgcmVmZXJlbmNlOiBPTVhfQVVESU9fUEFSQU1fU0JDVFlQRSAqLworICAgIE9NWF9JbmRleFBhcmFtQXVkaW9NaWRpLCAgICAgICAgICAgICAgICAvKio8IHJlZmVyZW5jZTogT01YX0FVRElPX1BBUkFNX01JRElUWVBFICovCisgICAgT01YX0luZGV4UGFyYW1BdWRpb0dzbV9GUiwgICAgICAgICAgICAgIC8qKjwgcmVmZXJlbmNlOiBPTVhfQVVESU9fUEFSQU1fR1NNRlJUWVBFICovCisgICAgT01YX0luZGV4UGFyYW1BdWRpb01pZGlMb2FkVXNlclNvdW5kLCAgIC8qKjwgcmVmZXJlbmNlOiBPTVhfQVVESU9fUEFSQU1fTUlESUxPQURVU0VSU09VTkRUWVBFICovCisgICAgT01YX0luZGV4UGFyYW1BdWRpb0c3MjYsICAgICAgICAgICAgICAgIC8qKjwgcmVmZXJlbmNlOiBPTVhfQVVESU9fUEFSQU1fRzcyNlRZUEUgKi8KKyAgICBPTVhfSW5kZXhQYXJhbUF1ZGlvR3NtX0VGUiwgICAgICAgICAgICAgLyoqPCByZWZlcmVuY2U6IE9NWF9BVURJT19QQVJBTV9HU01FRlJUWVBFICovCisgICAgT01YX0luZGV4UGFyYW1BdWRpb0dzbV9IUiwgICAgICAgICAgICAgIC8qKjwgcmVmZXJlbmNlOiBPTVhfQVVESU9fUEFSQU1fR1NNSFJUWVBFICovCisgICAgT01YX0luZGV4UGFyYW1BdWRpb1BkY19GUiwgICAgICAgICAgICAgIC8qKjwgcmVmZXJlbmNlOiBPTVhfQVVESU9fUEFSQU1fUERDRlJUWVBFICovCisgICAgT01YX0luZGV4UGFyYW1BdWRpb1BkY19FRlIsICAgICAgICAgICAgIC8qKjwgcmVmZXJlbmNlOiBPTVhfQVVESU9fUEFSQU1fUERDRUZSVFlQRSAqLworICAgIE9NWF9JbmRleFBhcmFtQXVkaW9QZGNfSFIsICAgICAgICAgICAgICAvKio8IHJlZmVyZW5jZTogT01YX0FVRElPX1BBUkFNX1BEQ0hSVFlQRSAqLworICAgIE9NWF9JbmRleFBhcmFtQXVkaW9UZG1hX0ZSLCAgICAgICAgICAgICAvKio8IHJlZmVyZW5jZTogT01YX0FVRElPX1BBUkFNX1RETUFGUlRZUEUgKi8KKyAgICBPTVhfSW5kZXhQYXJhbUF1ZGlvVGRtYV9FRlIsICAgICAgICAgICAgLyoqPCByZWZlcmVuY2U6IE9NWF9BVURJT19QQVJBTV9URE1BRUZSVFlQRSAqLworICAgIE9NWF9JbmRleFBhcmFtQXVkaW9RY2VscDgsICAgICAgICAgICAgICAvKio8IHJlZmVyZW5jZTogT01YX0FVRElPX1BBUkFNX1FDRUxQOFRZUEUgKi8KKyAgICBPTVhfSW5kZXhQYXJhbUF1ZGlvUWNlbHAxMywgICAgICAgICAgICAgLyoqPCByZWZlcmVuY2U6IE9NWF9BVURJT19QQVJBTV9RQ0VMUDEzVFlQRSAqLworICAgIE9NWF9JbmRleFBhcmFtQXVkaW9FdnJjLCAgICAgICAgICAgICAgICAvKio8IHJlZmVyZW5jZTogT01YX0FVRElPX1BBUkFNX0VWUkNUWVBFICovCisgICAgT01YX0luZGV4UGFyYW1BdWRpb1NtdiwgICAgICAgICAgICAgICAgIC8qKjwgcmVmZXJlbmNlOiBPTVhfQVVESU9fUEFSQU1fU01WVFlQRSAqLworICAgIE9NWF9JbmRleFBhcmFtQXVkaW9Wb3JiaXMsICAgICAgICAgICAgICAvKio8IHJlZmVyZW5jZTogT01YX0FVRElPX1BBUkFNX1ZPUkJJU1RZUEUgKi8KKworICAgIE9NWF9JbmRleENvbmZpZ0F1ZGlvTWlkaUltbWVkaWF0ZUV2ZW50LCAvKio8IHJlZmVyZW5jZTogT01YX0FVRElPX0NPTkZJR19NSURJSU1NRURJQVRFRVZFTlRUWVBFICovCisgICAgT01YX0luZGV4Q29uZmlnQXVkaW9NaWRpQ29udHJvbCwgICAgICAgIC8qKjwgcmVmZXJlbmNlOiBPTVhfQVVESU9fQ09ORklHX01JRElDT05UUk9MVFlQRSAqLworICAgIE9NWF9JbmRleENvbmZpZ0F1ZGlvTWlkaVNvdW5kQmFua1Byb2dyYW0sIC8qKjwgcmVmZXJlbmNlOiBPTVhfQVVESU9fQ09ORklHX01JRElTT1VOREJBTktQUk9HUkFNVFlQRSAqLworICAgIE9NWF9JbmRleENvbmZpZ0F1ZGlvTWlkaVN0YXR1cywgICAgICAgICAvKio8IHJlZmVyZW5jZTogT01YX0FVRElPX0NPTkZJR19NSURJU1RBVFVTVFlQRSAqLworICAgIE9NWF9JbmRleENvbmZpZ0F1ZGlvTWlkaU1ldGFFdmVudCwgICAgICAvKio8IHJlZmVyZW5jZTogT01YX0FVRElPX0NPTkZJR19NSURJTUVUQUVWRU5UVFlQRSAqLworICAgIE9NWF9JbmRleENvbmZpZ0F1ZGlvTWlkaU1ldGFFdmVudERhdGEsICAvKio8IHJlZmVyZW5jZTogT01YX0FVRElPX0NPTkZJR19NSURJTUVUQUVWRU5UREFUQVRZUEUgKi8KKyAgICBPTVhfSW5kZXhDb25maWdBdWRpb1ZvbHVtZSwgICAgICAgICAgICAgLyoqPCByZWZlcmVuY2U6IE9NWF9BVURJT19DT05GSUdfVk9MVU1FVFlQRSAqLworICAgIE9NWF9JbmRleENvbmZpZ0F1ZGlvQmFsYW5jZSwgICAgICAgICAgICAvKio8IHJlZmVyZW5jZTogT01YX0FVRElPX0NPTkZJR19CQUxBTkNFVFlQRSAqLworICAgIE9NWF9JbmRleENvbmZpZ0F1ZGlvQ2hhbm5lbE11dGUsICAgICAgICAvKio8IHJlZmVyZW5jZTogT01YX0FVRElPX0NPTkZJR19DSEFOTkVMTVVURVRZUEUgKi8KKyAgICBPTVhfSW5kZXhDb25maWdBdWRpb011dGUsICAgICAgICAgICAgICAgLyoqPCByZWZlcmVuY2U6IE9NWF9BVURJT19DT05GSUdfTVVURVRZUEUgKi8KKyAgICBPTVhfSW5kZXhDb25maWdBdWRpb0xvdWRuZXNzLCAgICAgICAgICAgLyoqPCByZWZlcmVuY2U6IE9NWF9BVURJT19DT05GSUdfTE9VRE5FU1NUWVBFICovCisgICAgT01YX0luZGV4Q29uZmlnQXVkaW9FY2hvQ2FuY2VsYXRpb24sICAgIC8qKjwgcmVmZXJlbmNlOiBPTVhfQVVESU9fQ09ORklHX0VDSE9DQU5DRUxBVElPTlRZUEUgKi8KKyAgICBPTVhfSW5kZXhDb25maWdBdWRpb05vaXNlUmVkdWN0aW9uLCAgICAgLyoqPCByZWZlcmVuY2U6IE9NWF9BVURJT19DT05GSUdfTk9JU0VSRURVQ1RJT05UWVBFICovCisgICAgT01YX0luZGV4Q29uZmlnQXVkaW9CYXNzLCAgICAgICAgICAgICAgIC8qKjwgcmVmZXJlbmNlOiBPTVhfQVVESU9fQ09ORklHX0JBU1NUWVBFICovCisgICAgT01YX0luZGV4Q29uZmlnQXVkaW9UcmVibGUsICAgICAgICAgICAgIC8qKjwgcmVmZXJlbmNlOiBPTVhfQVVESU9fQ09ORklHX1RSRUJMRVRZUEUgKi8KKyAgICBPTVhfSW5kZXhDb25maWdBdWRpb1N0ZXJlb1dpZGVuaW5nLCAgICAgLyoqPCByZWZlcmVuY2U6IE9NWF9BVURJT19DT05GSUdfU1RFUkVPV0lERU5JTkdUWVBFICovCisgICAgT01YX0luZGV4Q29uZmlnQXVkaW9DaG9ydXMsICAgICAgICAgICAgIC8qKjwgcmVmZXJlbmNlOiBPTVhfQVVESU9fQ09ORklHX0NIT1JVU1RZUEUgKi8KKyAgICBPTVhfSW5kZXhDb25maWdBdWRpb0VxdWFsaXplciwgICAgICAgICAgLyoqPCByZWZlcmVuY2U6IE9NWF9BVURJT19DT05GSUdfRVFVQUxJWkVSVFlQRSAqLworICAgIE9NWF9JbmRleENvbmZpZ0F1ZGlvUmV2ZXJiZXJhdGlvbiwgICAgICAvKio8IHJlZmVyZW5jZTogT01YX0FVRElPX0NPTkZJR19SRVZFUkJFUkFUSU9OVFlQRSAqLworICAgIE9NWF9JbmRleENvbmZpZ0F1ZGlvQ2hhbm5lbFZvbHVtZSwgICAgICAvKio8IHJlZmVyZW5jZTogT01YX0FVRElPX0NPTkZJR19DSEFOTkVMVk9MVU1FVFlQRSAqLworCisgICAgLyogSW1hZ2Ugc3BlY2lmaWMgcGFyYW1ldGVycyBhbmQgY29uZmlndXJhdGlvbnMgKi8KKyAgICBPTVhfSW5kZXhJbWFnZVN0YXJ0VW51c2VkID0gMHgwNTAwMDAwMCwKKyAgICBPTVhfSW5kZXhQYXJhbUltYWdlUG9ydEZvcm1hdCwgICAgICAgICAgLyoqPCByZWZlcmVuY2U6IE9NWF9JTUFHRV9QQVJBTV9QT1JURk9STUFUVFlQRSAqLworICAgIE9NWF9JbmRleFBhcmFtRmxhc2hDb250cm9sLCAgICAgICAgICAgICAvKio8IHJlZmVyZW5jZTogT01YX0lNQUdFX1BBUkFNX0ZMQVNIQ09OVFJPTFRZUEUgKi8KKyAgICBPTVhfSW5kZXhDb25maWdGb2N1c0NvbnRyb2wsICAgICAgICAgICAgLyoqPCByZWZlcmVuY2U6IE9NWF9JTUFHRV9DT05GSUdfRk9DVVNDT05UUk9MVFlQRSAqLworICAgIE9NWF9JbmRleFBhcmFtUUZhY3RvciwgICAgICAgICAgICAgICAgICAvKio8IHJlZmVyZW5jZTogT01YX0lNQUdFX1BBUkFNX1FGQUNUT1JUWVBFICovCisgICAgT01YX0luZGV4UGFyYW1RdWFudGl6YXRpb25UYWJsZSwgICAgICAgIC8qKjwgcmVmZXJlbmNlOiBPTVhfSU1BR0VfUEFSQU1fUVVBTlRJWkFUSU9OVEFCTEVUWVBFICovCisgICAgT01YX0luZGV4UGFyYW1IdWZmbWFuVGFibGUsICAgICAgICAgICAgIC8qKjwgcmVmZXJlbmNlOiBPTVhfSU1BR0VfUEFSQU1fSFVGRk1BTlRUQUJMRVRZUEUgKi8KKyAgICBPTVhfSW5kZXhDb25maWdGbGFzaENvbnRyb2wsICAgICAgICAgICAgLyoqPCByZWZlcmVuY2U6IE9NWF9JTUFHRV9QQVJBTV9GTEFTSENPTlRST0xUWVBFICovCisKKyAgICAvKiBWaWRlbyBzcGVjaWZpYyBwYXJhbWV0ZXJzIGFuZCBjb25maWd1cmF0aW9ucyAqLworICAgIE9NWF9JbmRleFZpZGVvU3RhcnRVbnVzZWQgPSAweDA2MDAwMDAwLAorICAgIE9NWF9JbmRleFBhcmFtVmlkZW9Qb3J0Rm9ybWF0LCAgICAgICAgICAvKio8IHJlZmVyZW5jZTogT01YX1ZJREVPX1BBUkFNX1BPUlRGT1JNQVRUWVBFICovCisgICAgT01YX0luZGV4UGFyYW1WaWRlb1F1YW50aXphdGlvbiwgICAgICAgIC8qKjwgcmVmZXJlbmNlOiBPTVhfVklERU9fUEFSQU1fUVVBTlRJWkFUSU9OVFlQRSAqLworICAgIE9NWF9JbmRleFBhcmFtVmlkZW9GYXN0VXBkYXRlLCAgICAgICAgICAvKio8IHJlZmVyZW5jZTogT01YX1ZJREVPX1BBUkFNX1ZJREVPRkFTVFVQREFURVRZUEUgKi8KKyAgICBPTVhfSW5kZXhQYXJhbVZpZGVvQml0cmF0ZSwgICAgICAgICAgICAgLyoqPCByZWZlcmVuY2U6IE9NWF9WSURFT19QQVJBTV9CSVRSQVRFVFlQRSAqLworICAgIE9NWF9JbmRleFBhcmFtVmlkZW9Nb3Rpb25WZWN0b3IsICAgICAgICAvKio8IHJlZmVyZW5jZTogT01YX1ZJREVPX1BBUkFNX01PVElPTlZFQ1RPUlRZUEUgKi8KKyAgICBPTVhfSW5kZXhQYXJhbVZpZGVvSW50cmFSZWZyZXNoLCAgICAgICAgLyoqPCByZWZlcmVuY2U6IE9NWF9WSURFT19QQVJBTV9JTlRSQVJFRlJFU0hUWVBFICovCisgICAgT01YX0luZGV4UGFyYW1WaWRlb0Vycm9yQ29ycmVjdGlvbiwgICAgIC8qKjwgcmVmZXJlbmNlOiBPTVhfVklERU9fUEFSQU1fRVJST1JDT1JSRUNUSU9OVFlQRSAqLworICAgIE9NWF9JbmRleFBhcmFtVmlkZW9WQlNNQywgICAgICAgICAgICAgICAvKio8IHJlZmVyZW5jZTogT01YX1ZJREVPX1BBUkFNX1ZCU01DVFlQRSAqLworICAgIE9NWF9JbmRleFBhcmFtVmlkZW9NcGVnMiwgICAgICAgICAgICAgICAvKio8IHJlZmVyZW5jZTogT01YX1ZJREVPX1BBUkFNX01QRUcyVFlQRSAqLworICAgIE9NWF9JbmRleFBhcmFtVmlkZW9NcGVnNCwgICAgICAgICAgICAgICAvKio8IHJlZmVyZW5jZTogT01YX1ZJREVPX1BBUkFNX01QRUc0VFlQRSAqLworICAgIE9NWF9JbmRleFBhcmFtVmlkZW9XbXYsICAgICAgICAgICAgICAgICAvKio8IHJlZmVyZW5jZTogT01YX1ZJREVPX1BBUkFNX1dNVlRZUEUgKi8KKyAgICBPTVhfSW5kZXhQYXJhbVZpZGVvUnYsICAgICAgICAgICAgICAgICAgLyoqPCByZWZlcmVuY2U6IE9NWF9WSURFT19QQVJBTV9SVlRZUEUgKi8KKyAgICBPTVhfSW5kZXhQYXJhbVZpZGVvQXZjLCAgICAgICAgICAgICAgICAgLyoqPCByZWZlcmVuY2U6IE9NWF9WSURFT19QQVJBTV9BVkNUWVBFICovCisgICAgT01YX0luZGV4UGFyYW1WaWRlb0gyNjMsICAgICAgICAgICAgICAgIC8qKjwgcmVmZXJlbmNlOiBPTVhfVklERU9fUEFSQU1fSDI2M1RZUEUgKi8KKyAgICBPTVhfSW5kZXhQYXJhbVZpZGVvUHJvZmlsZUxldmVsUXVlcnlTdXBwb3J0ZWQsIC8qKjwgcmVmZXJlbmNlOiBPTVhfVklERU9fUEFSQU1fUFJPRklMRUxFVkVMVFlQRSAqLworICAgIE9NWF9JbmRleFBhcmFtVmlkZW9Qcm9maWxlTGV2ZWxDdXJyZW50LCAvKio8IHJlZmVyZW5jZTogT01YX1ZJREVPX1BBUkFNX1BST0ZJTEVMRVZFTFRZUEUgKi8KKyAgICBPTVhfSW5kZXhDb25maWdWaWRlb0JpdHJhdGUsICAgICAgICAgICAgLyoqPCByZWZlcmVuY2U6IE9NWF9WSURFT19DT05GSUdfQklUUkFURVRZUEUgKi8KKyAgICBPTVhfSW5kZXhDb25maWdWaWRlb0ZyYW1lcmF0ZSwgICAgICAgICAgLyoqPCByZWZlcmVuY2U6IE9NWF9DT05GSUdfRlJBTUVSQVRFVFlQRSAqLworICAgIE9NWF9JbmRleENvbmZpZ1ZpZGVvSW50cmFWT1BSZWZyZXNoLCAgICAvKio8IHJlZmVyZW5jZTogT01YX0NPTkZJR19JTlRSQVJFRlJFU0hWT1BUWVBFICovCisgICAgT01YX0luZGV4Q29uZmlnVmlkZW9JbnRyYU1CUmVmcmVzaCwgICAgIC8qKjwgcmVmZXJlbmNlOiBPTVhfQ09ORklHX01BQ1JPQkxPQ0tFUlJPUk1BUFRZUEUgKi8KKyAgICBPTVhfSW5kZXhDb25maWdWaWRlb01CRXJyb3JSZXBvcnRpbmcsICAgLyoqPCByZWZlcmVuY2U6IE9NWF9DT05GSUdfTUJFUlJPUlJFUE9SVElOR1RZUEUgKi8KKyAgICBPTVhfSW5kZXhQYXJhbVZpZGVvTWFjcm9ibG9ja3NQZXJGcmFtZSwgLyoqPCByZWZlcmVuY2U6IE9NWF9QQVJBTV9NQUNST0JMT0NLU1RZUEUgKi8KKyAgICBPTVhfSW5kZXhDb25maWdWaWRlb01hY3JvQmxvY2tFcnJvck1hcCwgLyoqPCByZWZlcmVuY2U6IE9NWF9DT05GSUdfTUFDUk9CTE9DS0VSUk9STUFQVFlQRSAqLworICAgIE9NWF9JbmRleFBhcmFtVmlkZW9TbGljZUZNTywgICAgICAgICAgICAvKio8IHJlZmVyZW5jZTogT01YX1ZJREVPX1BBUkFNX0FWQ1NMSUNFRk1PICovCisgICAgT01YX0luZGV4Q29uZmlnVmlkZW9BVkNJbnRyYVBlcmlvZCwgICAgIC8qKjwgcmVmZXJlbmNlOiBPTVhfVklERU9fQ09ORklHX0FWQ0lOVFJBUEVSSU9EICovCisgICAgT01YX0luZGV4Q29uZmlnVmlkZW9OYWxTaXplLCAgICAgICAgICAgIC8qKjwgcmVmZXJlbmNlOiBPTVhfVklERU9fQ09ORklHX05BTFNJWkUgKi8KKworICAgIC8qIEltYWdlICYgVmlkZW8gY29tbW9uIENvbmZpZ3VyYXRpb25zICovCisgICAgT01YX0luZGV4Q29tbW9uU3RhcnRVbnVzZWQgPSAweDA3MDAwMDAwLAorICAgIE9NWF9JbmRleFBhcmFtQ29tbW9uRGVibG9ja2luZywgICAgICAgICAvKio8IHJlZmVyZW5jZTogT01YX1BBUkFNX0RFQkxPQ0tJTkdUWVBFICovCisgICAgT01YX0luZGV4UGFyYW1Db21tb25TZW5zb3JNb2RlLCAgICAgICAgIC8qKjwgcmVmZXJlbmNlOiBPTVhfUEFSQU1fU0VOU09STU9ERVRZUEUgKi8KKyAgICBPTVhfSW5kZXhQYXJhbUNvbW1vbkludGVybGVhdmUsICAgICAgICAgLyoqPCByZWZlcmVuY2U6IE9NWF9QQVJBTV9JTlRFUkxFQVZFVFlQRSAqLworICAgIE9NWF9JbmRleENvbmZpZ0NvbW1vbkNvbG9yRm9ybWF0Q29udmVyc2lvbiwgLyoqPCByZWZlcmVuY2U6IE9NWF9DT05GSUdfQ09MT1JDT05WRVJTSU9OVFlQRSAqLworICAgIE9NWF9JbmRleENvbmZpZ0NvbW1vblNjYWxlLCAgICAgICAgICAgICAvKio8IHJlZmVyZW5jZTogT01YX0NPTkZJR19TQ0FMRUZBQ1RPUlRZUEUgKi8KKyAgICBPTVhfSW5kZXhDb25maWdDb21tb25JbWFnZUZpbHRlciwgICAgICAgLyoqPCByZWZlcmVuY2U6IE9NWF9DT05GSUdfSU1BR0VGSUxURVJUWVBFICovCisgICAgT01YX0luZGV4Q29uZmlnQ29tbW9uQ29sb3JFbmhhbmNlbWVudCwgIC8qKjwgcmVmZXJlbmNlOiBPTVhfQ09ORklHX0NPTE9SRU5IQU5DRU1FTlRUWVBFICovCisgICAgT01YX0luZGV4Q29uZmlnQ29tbW9uQ29sb3JLZXksICAgICAgICAgIC8qKjwgcmVmZXJlbmNlOiBPTVhfQ09ORklHX0NPTE9SS0VZVFlQRSAqLworICAgIE9NWF9JbmRleENvbmZpZ0NvbW1vbkNvbG9yQmxlbmQsICAgICAgICAvKio8IHJlZmVyZW5jZTogT01YX0NPTkZJR19DT0xPUkJMRU5EVFlQRSAqLworICAgIE9NWF9JbmRleENvbmZpZ0NvbW1vbkZyYW1lU3RhYmlsaXNhdGlvbiwvKio8IHJlZmVyZW5jZTogT01YX0NPTkZJR19GUkFNRVNUQUJUWVBFICovCisgICAgT01YX0luZGV4Q29uZmlnQ29tbW9uUm90YXRlLCAgICAgICAgICAgIC8qKjwgcmVmZXJlbmNlOiBPTVhfQ09ORklHX1JPVEFUSU9OVFlQRSAqLworICAgIE9NWF9JbmRleENvbmZpZ0NvbW1vbk1pcnJvciwgICAgICAgICAgICAvKio8IHJlZmVyZW5jZTogT01YX0NPTkZJR19NSVJST1JUWVBFICovCisgICAgT01YX0luZGV4Q29uZmlnQ29tbW9uT3V0cHV0UG9zaXRpb24sICAgIC8qKjwgcmVmZXJlbmNlOiBPTVhfQ09ORklHX1BPSU5UVFlQRSAqLworICAgIE9NWF9JbmRleENvbmZpZ0NvbW1vbklucHV0Q3JvcCwgICAgICAgICAvKio8IHJlZmVyZW5jZTogT01YX0NPTkZJR19SRUNUVFlQRSAqLworICAgIE9NWF9JbmRleENvbmZpZ0NvbW1vbk91dHB1dENyb3AsICAgICAgICAvKio8IHJlZmVyZW5jZTogT01YX0NPTkZJR19SRUNUVFlQRSAqLworICAgIE9NWF9JbmRleENvbmZpZ0NvbW1vbkRpZ2l0YWxab29tLCAgICAgICAvKio8IHJlZmVyZW5jZTogT01YX0NPTkZJR19TQ0FMRUZBQ1RPUlRZUEUgKi8KKyAgICBPTVhfSW5kZXhDb25maWdDb21tb25PcHRpY2FsWm9vbSwgICAgICAgLyoqPCByZWZlcmVuY2U6IE9NWF9DT05GSUdfU0NBTEVGQUNUT1JUWVBFKi8KKyAgICBPTVhfSW5kZXhDb25maWdDb21tb25XaGl0ZUJhbGFuY2UsICAgICAgLyoqPCByZWZlcmVuY2U6IE9NWF9DT05GSUdfV0hJVEVCQUxDT05UUk9MVFlQRSAqLworICAgIE9NWF9JbmRleENvbmZpZ0NvbW1vbkV4cG9zdXJlLCAgICAgICAgICAvKio8IHJlZmVyZW5jZTogT01YX0NPTkZJR19FWFBPU1VSRUNPTlRST0xUWVBFICovCisgICAgT01YX0luZGV4Q29uZmlnQ29tbW9uQ29udHJhc3QsICAgICAgICAgIC8qKjwgcmVmZXJlbmNlOiBPTVhfQ09ORklHX0NPTlRSQVNUVFlQRSAqLworICAgIE9NWF9JbmRleENvbmZpZ0NvbW1vbkJyaWdodG5lc3MsICAgICAgICAvKio8IHJlZmVyZW5jZTogT01YX0NPTkZJR19CUklHSFRORVNTVFlQRSAqLworICAgIE9NWF9JbmRleENvbmZpZ0NvbW1vbkJhY2tsaWdodCwgICAgICAgICAvKio8IHJlZmVyZW5jZTogT01YX0NPTkZJR19CQUNLTElHSFRUWVBFICovCisgICAgT01YX0luZGV4Q29uZmlnQ29tbW9uR2FtbWEsICAgICAgICAgICAgIC8qKjwgcmVmZXJlbmNlOiBPTVhfQ09ORklHX0dBTU1BVFlQRSAqLworICAgIE9NWF9JbmRleENvbmZpZ0NvbW1vblNhdHVyYXRpb24sICAgICAgICAvKio8IHJlZmVyZW5jZTogT01YX0NPTkZJR19TQVRVUkFUSU9OVFlQRSAqLworICAgIE9NWF9JbmRleENvbmZpZ0NvbW1vbkxpZ2h0bmVzcywgICAgICAgICAvKio8IHJlZmVyZW5jZTogT01YX0NPTkZJR19MSUdIVE5FU1NUWVBFICovCisgICAgT01YX0luZGV4Q29uZmlnQ29tbW9uRXhjbHVzaW9uUmVjdCwgICAgIC8qKjwgcmVmZXJlbmNlOiBPTVhfQ09ORklHX1JFQ1RUWVBFICovCisgICAgT01YX0luZGV4Q29uZmlnQ29tbW9uRGl0aGVyaW5nLCAgICAgICAgIC8qKjwgcmVmZXJlbmNlOiBPTVhfQ09ORklHX0RJVEhFUlRZUEUgKi8KKyAgICBPTVhfSW5kZXhDb25maWdDb21tb25QbGFuZUJsZW5kLCAgICAgICAgLyoqPCByZWZlcmVuY2U6IE9NWF9DT05GSUdfUExBTkVCTEVORFRZUEUgKi8KKyAgICBPTVhfSW5kZXhDb25maWdDb21tb25FeHBvc3VyZVZhbHVlLCAgICAgLyoqPCByZWZlcmVuY2U6IE9NWF9DT05GSUdfRVhQT1NVUkVWQUxVRVRZUEUgKi8KKyAgICBPTVhfSW5kZXhDb25maWdDb21tb25PdXRwdXRTaXplLCAgICAgICAgLyoqPCByZWZlcmVuY2U6IE9NWF9GUkFNRVNJWkVUWVBFICovCisgICAgT01YX0luZGV4UGFyYW1Db21tb25FeHRyYVF1YW50RGF0YSwgICAgIC8qKjwgcmVmZXJlbmNlOiBPTVhfT1RIRVJfRVhUUkFEQVRBVFlQRSAqLworICAgIE9NWF9JbmRleENvbmZpZ0NvbW1vbkZvY3VzUmVnaW9uLCAgICAgICAvKio8IHJlZmVyZW5jZTogT01YX0NPTkZJR19GT0NVU1JFR0lPTlRZUEUgKi8KKyAgICBPTVhfSW5kZXhDb25maWdDb21tb25Gb2N1c1N0YXR1cywgICAgICAgLyoqPCByZWZlcmVuY2U6IE9NWF9QQVJBTV9GT0NVU1NUQVRVU1RZUEUgKi8KKyAgICBPTVhfSW5kZXhDb25maWdDb21tb25UcmFuc2l0aW9uRWZmZWN0LCAgLyoqPCByZWZlcmVuY2U6IE9NWF9DT05GSUdfVFJBTlNJVElPTkVGRkVDVFRZUEUgKi8KKworICAgIC8qIFJlc2VydmVkIENvbmZpZ3VyYXRpb24gcmFuZ2UgKi8KKyAgICBPTVhfSW5kZXhPdGhlclN0YXJ0VW51c2VkID0gMHgwODAwMDAwMCwKKyAgICBPTVhfSW5kZXhQYXJhbU90aGVyUG9ydEZvcm1hdCwgICAgICAgICAgLyoqPCByZWZlcmVuY2U6IE9NWF9PVEhFUl9QQVJBTV9QT1JURk9STUFUVFlQRSAqLworICAgIE9NWF9JbmRleENvbmZpZ090aGVyUG93ZXIsICAgICAgICAgICAgICAvKio8IHJlZmVyZW5jZTogT01YX09USEVSX0NPTkZJR19QT1dFUlRZUEUgKi8KKyAgICBPTVhfSW5kZXhDb25maWdPdGhlclN0YXRzLCAgICAgICAgICAgICAgLyoqPCByZWZlcmVuY2U6IE9NWF9PVEhFUl9DT05GSUdfU1RBVFNUWVBFICovCisKKworICAgIC8qIFJlc2VydmVkIFRpbWUgcmFuZ2UgKi8KKyAgICBPTVhfSW5kZXhUaW1lU3RhcnRVbnVzZWQgPSAweDA5MDAwMDAwLAorICAgIE9NWF9JbmRleENvbmZpZ1RpbWVTY2FsZSwgICAgICAgICAgICAgICAvKio8IHJlZmVyZW5jZTogT01YX1RJTUVfQ09ORklHX1NDQUxFVFlQRSAqLworICAgIE9NWF9JbmRleENvbmZpZ1RpbWVDbG9ja1N0YXRlLCAgICAgICAgICAvKio8IHJlZmVyZW5jZTogT01YX1RJTUVfQ09ORklHX0NMT0NLU1RBVEVUWVBFICovCisgICAgT01YX0luZGV4Q29uZmlnVGltZUFjdGl2ZVJlZkNsb2NrLCAgICAgIC8qKjwgcmVmZXJlbmNlOiBPTVhfVElNRV9DT05GSUdfQUNUSVZFUkVGQ0xPQ0tUWVBFICovCisgICAgT01YX0luZGV4Q29uZmlnVGltZUN1cnJlbnRNZWRpYVRpbWUsICAgIC8qKjwgcmVmZXJlbmNlOiBPTVhfVElNRV9DT05GSUdfVElNRVNUQU1QVFlQRSAocmVhZCBvbmx5KSAqLworICAgIE9NWF9JbmRleENvbmZpZ1RpbWVDdXJyZW50V2FsbFRpbWUsICAgICAvKio8IHJlZmVyZW5jZTogT01YX1RJTUVfQ09ORklHX1RJTUVTVEFNUFRZUEUgKHJlYWQgb25seSkgKi8KKyAgICBPTVhfSW5kZXhDb25maWdUaW1lQ3VycmVudEF1ZGlvUmVmZXJlbmNlLCAvKio8IHJlZmVyZW5jZTogT01YX1RJTUVfQ09ORklHX1RJTUVTVEFNUFRZUEUgKHdyaXRlIG9ubHkpICovCisgICAgT01YX0luZGV4Q29uZmlnVGltZUN1cnJlbnRWaWRlb1JlZmVyZW5jZSwgLyoqPCByZWZlcmVuY2U6IE9NWF9USU1FX0NPTkZJR19USU1FU1RBTVBUWVBFICh3cml0ZSBvbmx5KSAqLworICAgIE9NWF9JbmRleENvbmZpZ1RpbWVNZWRpYVRpbWVSZXF1ZXN0LCAgICAvKio8IHJlZmVyZW5jZTogT01YX1RJTUVfQ09ORklHX01FRElBVElNRVJFUVVFU1RUWVBFICh3cml0ZSBvbmx5KSAqLworICAgIE9NWF9JbmRleENvbmZpZ1RpbWVDbGllbnRTdGFydFRpbWUsICAgICAvKio8cmVmZXJlbmNlOiAgT01YX1RJTUVfQ09ORklHX1RJTUVTVEFNUFRZUEUgKHdyaXRlIG9ubHkpICovCisgICAgT01YX0luZGV4Q29uZmlnVGltZVBvc2l0aW9uLCAgICAgICAgICAgIC8qKjwgcmVmZXJlbmNlOiBPTVhfVElNRV9DT05GSUdfVElNRVNUQU1QVFlQRSAqLworICAgIE9NWF9JbmRleENvbmZpZ1RpbWVTZWVrTW9kZSwgICAgICAgICAgICAvKio8IHJlZmVyZW5jZTogT01YX1RJTUVfQ09ORklHX1NFRUtNT0RFVFlQRSAqLworCisKKyAgICBPTVhfSW5kZXhLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICAgLyogVmVuZG9yIHNwZWNpZmljIGFyZWEgKi8KKyAgICBPTVhfSW5kZXhWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsCisgICAgLyogVmVuZG9yIHNwZWNpZmljIHN0cnVjdHVyZXMgc2hvdWxkIGJlIGluIHRoZSByYW5nZSBvZiAweDdGMDAwMDAwIAorICAgICAgIHRvIDB4N0ZGRkZGRkUuICBUaGlzIHJhbmdlIGlzIG5vdCBicm9rZW4gb3V0IGJ5IHZlbmRvciwgc28KKyAgICAgICBwcml2YXRlIGluZGV4ZXMgYXJlIG5vdCBndWFyYW50ZWVkIHVuaXF1ZSBhbmQgdGhlcmVmb3JlIHNob3VsZAorICAgICAgIG9ubHkgYmUgc2VudCB0byB0aGUgYXBwcm9wcmlhdGUgY29tcG9uZW50LiAqLworCisgICAgT01YX0luZGV4TWF4ID0gMHg3RkZGRkZGRgorCit9IE9NWF9JTkRFWFRZUEU7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNlbmRpZgorLyogRmlsZSBFT0YgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvb3Blbm1heC9PTVhfT3RoZXIuaCBiL2luY2x1ZGUvbWVkaWEvb3Blbm1heC9PTVhfT3RoZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmJjZTgzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9tZWRpYS9vcGVubWF4L09NWF9PdGhlci5oCkBAIC0wLDAgKzEsMzU0IEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIENvcHlyaWdodCAoQykgMTk5OC0yMDA5IFBhY2tldFZpZGVvCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyCisgKiBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMKKyAqIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBUaGUgS2hyb25vcyBHcm91cCBJbmMuIAorICogCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QKKyAqIHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuIAorICogCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUworICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCisgKiBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQorICogU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuIAorICoKKyAqLworCisvKiogQGZpbGUgT01YX090aGVyLmggLSBPcGVuTWF4IElMIHZlcnNpb24gMS4xLjIKKyAqICBUaGUgc3RydWN0dXJlcyBuZWVkZWQgYnkgT3RoZXIgY29tcG9uZW50cyB0byBleGNoYW5nZQorICogIHBhcmFtZXRlcnMgYW5kIGNvbmZpZ3VyYXRpb24gZGF0YSB3aXRoIHRoZSBjb21wb25lbnRzLgorICovCisKKyNpZm5kZWYgT01YX090aGVyX2gKKyNkZWZpbmUgT01YX090aGVyX2gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisKKy8qIEVhY2ggT01YIGhlYWRlciBtdXN0IGluY2x1ZGUgYWxsIHJlcXVpcmVkIGhlYWRlciBmaWxlcyB0byBhbGxvdyB0aGUKKyAqICBoZWFkZXIgdG8gY29tcGlsZSB3aXRob3V0IGVycm9ycy4gIFRoZSBpbmNsdWRlcyBiZWxvdyBhcmUgcmVxdWlyZWQKKyAqICBmb3IgdGhpcyBoZWFkZXIgZmlsZSB0byBjb21waWxlIHN1Y2Nlc3NmdWxseSAKKyAqLworCisjaW5jbHVkZSA8T01YX0NvcmUuaD4KKworCisvKiogCisgKiBFbnVtZXJhdGlvbiBvZiBwb3NzaWJsZSBkYXRhIHR5cGVzIHdoaWNoIG1hdGNoIHRvIG11bHRpcGxlIGRvbWFpbnMgb3Igbm8KKyAqIGRvbWFpbiBhdCBhbGwuICBGb3IgdHlwZXMgd2hpY2ggYXJlIHZlbmRvciBzcGVjaWZpYywgYSB2YWx1ZSBhYm92ZQorICogT01YX09USEVSX1ZFTkRPUlRTVEFSVCBzaG91bGQgYmUgdXNlZC4KKyAqLwordHlwZWRlZiBlbnVtIE9NWF9PVEhFUl9GT1JNQVRUWVBFIHsKKyAgICBPTVhfT1RIRVJfRm9ybWF0VGltZSA9IDAsIC8qKjwgVHJhbnNtaXNzaW9uIG9mIHZhcmlvdXMgdGltZXN0YW1wcywgZWxhcHNlZCB0aW1lLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZSBkZWx0YXMsIGV0YyAqLworICAgIE9NWF9PVEhFUl9Gb3JtYXRQb3dlciwgICAgLyoqPCBQZXJoYXBzIHVzZWQgZm9yIGVuYWJsaW5nL2Rpc2FibGluZyBwb3dlciAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFuYWdlbWVudCwgc2V0dGluZyBjbG9ja3M/ICovCisgICAgT01YX09USEVSX0Zvcm1hdFN0YXRzLCAgICAvKio8IENvdWxkIGJlIHRoaW5ncyBzdWNoIGFzIGZyYW1lIHJhdGUsIGZyYW1lcyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJvcHBlZCwgZXRjICovCisgICAgT01YX09USEVSX0Zvcm1hdEJpbmFyeSwgICAvKio8IEFyYml0cmFyeSBiaW5hcnkgZGF0YSAqLworICAgIE9NWF9PVEhFUl9Gb3JtYXRWZW5kb3JSZXNlcnZlZCA9IDEwMDAsIC8qKjwgU3RhcnRpbmcgdmFsdWUgZm9yIHZlbmRvciBzcGVjaWZpYyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHMgKi8KKworICAgIE9NWF9PVEhFUl9Gb3JtYXRLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICAgT01YX09USEVSX0Zvcm1hdFZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCisgICAgT01YX09USEVSX0Zvcm1hdE1heCA9IDB4N0ZGRkZGRkYKK30gT01YX09USEVSX0ZPUk1BVFRZUEU7CisKKy8qKiAKKyAqIEVudW1lcmF0aW9uIG9mIHNlZWsgbW9kZXMuCisgKi8KK3R5cGVkZWYgZW51bSBPTVhfVElNRV9TRUVLTU9ERVRZUEUgeworICAgIE9NWF9USU1FX1NlZWtNb2RlRmFzdCA9IDAsIC8qKjwgUHJlZmVyIHNlZWtpbmcgdG8gYW4gYXBwcm94aW1hdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIG9mIHRoZSByZXF1ZXN0ZWQgc2VlayBwb3NpdGlvbiBvdmVyICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdGhlIGFjdHVhbCBzZWVrIHBvc2l0aW9uIGlmIGl0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcmVzdWx0cyBpbiBhIGZhc3RlciBzZWVrLiAqLworICAgIE9NWF9USU1FX1NlZWtNb2RlQWNjdXJhdGUsIC8qKjwgUHJlZmVyIHNlZWtpbmcgdG8gdGhlIGFjdHVhbCBzZWVrIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHBvc2l0aW9uIG92ZXIgYW4gYXBwcm94aW1hdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIG9mIHRoZSByZXF1ZXN0ZWQgc2VlayBwb3NpdGlvbiBldmVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogaWYgaXQgcmVzdWx0cyBpbiBhIHNsb3dlciBzZWVrLiAqLworICAgIE9NWF9USU1FX1NlZWtNb2RlS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIE9NWF9USU1FX1NlZWtNb2RlVmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KKyAgICBPTVhfVElNRV9TZWVrTW9kZU1heCA9IDB4N0ZGRkZGRkYKK30gT01YX1RJTUVfU0VFS01PREVUWVBFOworCisvKiBTdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIHRoZSBzZWVrbW9kZSBvZiB0aGUgY29tcG9uZW50ICovCit0eXBlZGVmIHN0cnVjdCBPTVhfVElNRV9DT05GSUdfU0VFS01PREVUWVBFIHsKKyAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAgICAgIC8qKjwgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovCisgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAgICAgICAvKio8IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24gKi8KKyAgICBPTVhfVElNRV9TRUVLTU9ERVRZUEUgZVR5cGU7ICAgIC8qKjwgVGhlIHNlZWsgbW9kZSAqLworfSBPTVhfVElNRV9DT05GSUdfU0VFS01PREVUWVBFOworCisvKiogU3RydWN0dXJlIHJlcHJlc2VudGluZyBhIHRpbWUgc3RhbXAgdXNlZCB3aXRoIHRoZSBmb2xsb3dpbmcgY29uZmlncyAKKyAqIG9uIHRoZSBDbG9jayBDb21wb25lbnQgKENDKToKKyAqIAorICogT01YX0luZGV4Q29uZmlnVGltZUN1cnJlbnRXYWxsVGltZTogcXVlcnkgb2YgdGhlIENDknMgY3VycmVudCB3YWxsICAKKyAqICAgICB0aW1lCisgKiBPTVhfSW5kZXhDb25maWdUaW1lQ3VycmVudE1lZGlhVGltZTogcXVlcnkgb2YgdGhlIENDknMgY3VycmVudCBtZWRpYQorICogICAgIHRpbWUKKyAqIE9NWF9JbmRleENvbmZpZ1RpbWVDdXJyZW50QXVkaW9SZWZlcmVuY2UgYW5kICAKKyAqIE9NWF9JbmRleENvbmZpZ1RpbWVDdXJyZW50VmlkZW9SZWZlcmVuY2U6IGF1ZGlvL3ZpZGVvIHJlZmVyZW5jZSAKKyAqICAgICBjbG9jayBzZW5kaW5nIFNDIGl0cyByZWZlcmVuY2UgdGltZQorICogT01YX0luZGV4Q29uZmlnVGltZUNsaWVudFN0YXJ0VGltZTogYSBDbG9jayBDb21wb25lbnQgY2xpZW50IHNlbmRzIAorICogICAgIHRoaXMgc3RydWN0dXJlIHRvIHRoZSBDbG9jayBDb21wb25lbnQgdmlhIGEgU2V0Q29uZmlnIG9uIGl0cyAKKyAqICAgICBjbGllbnQgcG9ydCB3aGVuIGl0IHJlY2VpdmVzIGEgYnVmZmVyIHdpdGgKKyAqICAgICBPTVhfQlVGRkVSRkxBR19TVEFSVFRJTUUgc2V0LiBJdCBtdXN0IHVzZSB0aGUgdGltZXN0YW1wCisgKiAgICAgc3BlY2lmaWVkIGJ5IHRoYXQgYnVmZmVyIGZvciBuU3RhcnRUaW1lc3RhbXAuIAorICoKKyAqIEl0knMgYWxzbyB1c2VkIHdpdGggdGhlIGZvbGxvd2luZyBjb25maWcgb24gY29tcG9uZW50cyBpbiBnZW5lcmFsOgorICoKKyAqIE9NWF9JbmRleENvbmZpZ1RpbWVQb3NpdGlvbjogSUwgY2xpZW50IHF1ZXJ5aW5nIGNvbXBvbmVudCBwb3NpdGlvbiAKKyAqIChHZXRDb25maWcpIG9yIGNvbW1hbmRpbmcgYSBjb21wb25lbnQgdG8gc2VlayB0byB0aGUgZ2l2ZW4gbG9jYXRpb24KKyAqIChTZXRDb25maWcpCisgKi8JCit0eXBlZGVmIHN0cnVjdCBPTVhfVElNRV9DT05GSUdfVElNRVNUQU1QVFlQRSB7CisgICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAgICAvKio8IHNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcyAqLworICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgICAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIGluZm9ybWF0aW9uICovCisgICAgT01YX1UzMiBuUG9ydEluZGV4OyAgICAgLyoqPCBwb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0byAqLworICAgIE9NWF9USUNLUyBuVGltZXN0YW1wOyAgCSAgICAgLyoqPCB0aW1lc3RhbXAgLiovIAorfSBPTVhfVElNRV9DT05GSUdfVElNRVNUQU1QVFlQRTsgIAorCisvKiogRW51bWVyYXRpb24gb2YgcG9zc2libGUgcmVmZXJlbmNlIGNsb2NrcyB0byB0aGUgbWVkaWEgdGltZS4gKi8KK3R5cGVkZWYgZW51bSBPTVhfVElNRV9VUERBVEVUWVBFIHsKKyAgICAgIE9NWF9USU1FX1VwZGF0ZVJlcXVlc3RGdWxmaWxsbWVudCwgICAgLyoqPCBVcGRhdGUgaXMgdGhlIGZ1bGZpbGxtZW50IG9mIGEgbWVkaWEgdGltZSByZXF1ZXN0LiAqLworICAgICAgT01YX1RJTUVfVXBkYXRlU2NhbGVDaGFuZ2VkLAkgICAgICAgIC8qKjwgVXBkYXRlIHdhcyBnZW5lcmF0ZWQgYmVjYXVzZSB0aGUgc2NhbGUgY2hhZ25lZC4gKi8KKyAgICAgIE9NWF9USU1FX1VwZGF0ZUNsb2NrU3RhdGVDaGFuZ2VkLCAgICAgLyoqPCBVcGRhdGUgd2FzIGdlbmVyYXRlZCBiZWNhdXNlIHRoZSBjbG9jayBzdGF0ZSBjaGFuZ2VkLiAqLworICAgICAgT01YX1RJTUVfVXBkYXRlS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgICAgT01YX1RJTUVfVXBkYXRlVmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KKyAgICAgIE9NWF9USU1FX1VwZGF0ZU1heCA9IDB4N0ZGRkZGRkYKK30gT01YX1RJTUVfVVBEQVRFVFlQRTsKKworLyoqIEVudW1lcmF0aW9uIG9mIHBvc3NpYmxlIHJlZmVyZW5jZSBjbG9ja3MgdG8gdGhlIG1lZGlhIHRpbWUuICovCit0eXBlZGVmIGVudW0gT01YX1RJTUVfUkVGQ0xPQ0tUWVBFIHsKKyAgICAgIE9NWF9USU1FX1JlZkNsb2NrTm9uZSwgICAgLyoqPCBVc2Ugbm8gcmVmZXJlbmNlcy4gKi8KKyAgICAgIE9NWF9USU1FX1JlZkNsb2NrQXVkaW8sCS8qKjwgVXNlIHJlZmVyZW5jZXMgc2VudCB0aHJvdWdoIE9NWF9JbmRleENvbmZpZ1RpbWVDdXJyZW50QXVkaW9SZWZlcmVuY2UgKi8KKyAgICAgIE9NWF9USU1FX1JlZkNsb2NrVmlkZW8sICAgLyoqPCBVc2UgcmVmZXJlbmNlcyBzZW50IHRocm91Z2ggT01YX0luZGV4Q29uZmlnVGltZUN1cnJlbnRWaWRlb1JlZmVyZW5jZSAqLworICAgICAgT01YX1RJTUVfUmVmQ2xvY2tLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICAgICBPTVhfVElNRV9SZWZDbG9ja1ZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCisgICAgICBPTVhfVElNRV9SZWZDbG9ja01heCA9IDB4N0ZGRkZGRkYKK30gT01YX1RJTUVfUkVGQ0xPQ0tUWVBFOworCisvKiogRW51bWVyYXRpb24gb2YgY2xvY2sgc3RhdGVzLiAqLwordHlwZWRlZiBlbnVtIE9NWF9USU1FX0NMT0NLU1RBVEUgeworICAgICAgT01YX1RJTUVfQ2xvY2tTdGF0ZVJ1bm5pbmcsICAgICAgICAgICAgIC8qKjwgQ2xvY2sgcnVubmluZy4gKi8KKyAgICAgIE9NWF9USU1FX0Nsb2NrU3RhdGVXYWl0aW5nRm9yU3RhcnRUaW1lLCAvKio8IENsb2NrIHdhaXRpbmcgdW50aWwgdGhlIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgcHJlc2NyaWJlZCBjbGllbnRzIGVtaXQgdGhlaXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIHN0YXJ0IHRpbWUuICovCisgICAgICBPTVhfVElNRV9DbG9ja1N0YXRlU3RvcHBlZCwgICAgICAgICAgICAgLyoqPCBDbG9jayBzdG9wcGVkLiAqLworICAgICAgT01YX1RJTUVfQ2xvY2tTdGF0ZUtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKKyAgICAgIE9NWF9USU1FX0Nsb2NrU3RhdGVWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLworICAgICAgT01YX1RJTUVfQ2xvY2tTdGF0ZU1heCA9IDB4N0ZGRkZGRkYKK30gT01YX1RJTUVfQ0xPQ0tTVEFURTsKKworLyoqIFN0cnVjdHVyZSByZXByZXNlbnRpbmcgYSBtZWRpYSB0aW1lIHJlcXVlc3QgdG8gdGhlIGNsb2NrIGNvbXBvbmVudC4KKyAqCisgKiAgQSBjbGllbnQgY29tcG9uZW50IHNlbmRzIHRoaXMgc3RydWN0dXJlIHRvIHRoZSBDbG9jayBDb21wb25lbnQgdmlhIGEgU2V0Q29uZmlnCisgKiAgb24gaXRzIGNsaWVudCBwb3J0IHRvIHNwZWNpZnkgYSBtZWRpYSB0aW1lc3RhbXAgdGhlIENsb2NrIENvbXBvbmVudAorICogIHNob3VsZCBlbWl0LiAgVGhlIENsb2NrIENvbXBvbmVudCBzaG91bGQgZnVsZmlsbCB0aGUgcmVxdWVzdCBieSBzZW5kaW5nIGEKKyAqICBPTVhfVElNRV9NRURJQVRJTUVUWVBFIHdoZW4gaXRzIG1lZGlhIGNsb2NrIG1hdGNoZXMgdGhlIHJlcXVlc3RlZCAKKyAqICB0aW1lc3RhbXAuCisgKgorICogIFRoZSBjbGllbnQgbWF5IHJlcXVpcmUgYSBtZWRpYSB0aW1lIHJlcXVlc3QgYmUgZnVsZmlsbGVkIHNsaWdodGx5CisgKiAgZWFybGllciB0aGFuIHRoZSBtZWRpYSB0aW1lIHNwZWNpZmllZC4gSW4gdGhpcyBjYXNlIHRoZSBjbGllbnQgc3BlY2lmaWVzIAorICogIGFuIG9mZnNldCB3aGljaCBpcyBlcXVhbCB0byB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHdhbGwgdGltZSBjb3JyZXNwb25kaW5nIAorICogIHRvIHRoZSByZXF1ZXN0ZWQgbWVkaWEgdGltZSBhbmQgdGhlIHdhbGwgdGltZSB3aGVuIGl0IHdpbGwgYmUgCisgKiAgZnVsZmlsbGVkLiAKKyAqCisgKiAgQSBjbGllbnQgY29tcG9uZW50IG1heSB1c2VzIHRoZXNlIHJlcXVlc3RzIGFuZCB0aGUgT01YX1RJTUVfTUVESUFUSU1FVFlQRSB0bworICogIHRpbWUgZXZlbnRzIGFjY29yZGluZyB0byB0aW1lc3RhbXBzLiBJZiBhIGNsaWVudCBtdXN0IHBlcmZvcm0gYW4gb3BlcmF0aW9uIE8gYXQKKyAqICBhIHRpbWUgVCAoZS5nLiBkZWxpdmVyIGEgdmlkZW8gZnJhbWUgYXQgaXRzIGNvcnJlc3BvbmRpbmcgdGltZXN0YW1wKSwgaXQgbWFrZXMgYSAKKyAqICBtZWRpYSB0aW1lIHJlcXVlc3QgYXQgVCAocGVyaGFwcyBzcGVjaWZ5aW5nIGFuIG9mZnNldCB0byBlbnN1cmUgdGhlIHJlcXVlc3QgZnVsZmlsbG1lbnQKKyAqICBpcyBhIGxpdHRsZSBlYXJseSkuIFdoZW4gdGhlIGNsb2NrIGNvbXBvbmVudCBwYXNzZXMgdGhlIHJlc3VsdGluZyBPTVhfVElNRV9NRURJQVRJTUVUWVBFCisgKiAgc3RydWN0dXJlIGJhY2sgdG8gdGhlIGNsaWVudCBjb21wb25lbnQsIHRoZSBjbGllbnQgbWF5IHBlcmZvcm0gb3BlcmF0aW9uIE8gKHBlcmhhcHMgaGF2aW5nCisgKiAgdG8gd2FpdCBhIHNsaWdodCBhbW91bnQgbW9yZSB0aW1lIGl0c2VsZiBhcyBzcGVjaWZpZWQgYnkgdGhlIHJldHVybiB2YWx1ZXMpLgorICovCisKK3R5cGVkZWYgc3RydWN0IE9NWF9USU1FX0NPTkZJR19NRURJQVRJTUVSRVFVRVNUVFlQRSB7CisgICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAgIC8qKjwgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovCisgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAgIC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLworICAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAgICAvKio8IHBvcnQgdGhhdCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzIHRvICovCisgICAgT01YX1BUUiBwQ2xpZW50UHJpdmF0ZTsgICAgIC8qKjwgQ2xpZW50IHByaXZhdGUgZGF0YSB0byBkaXNhYmlndWF0ZSB0aGlzIG1lZGlhIHRpbWUgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgZnJvbSBvdGhlcnMgKGUuZy4gdGhlIG51bWJlciBvZiB0aGUgZnJhbWUgdG8gZGVsaXZlcikuIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIER1cGxpY2F0ZWQgaW4gdGhlIG1lZGlhIHRpbWUgc3RydWN0dXJlIHRoYXQgZnVsZmlsbHMgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgdGhpcyByZXF1ZXN0LiBBIHZhbHVlIG9mIHplcm8gaXMgcmVzZXJ2ZWQgZm9yIHRpbWUgc2NhbGUgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgdXBkYXRlcy4gKi8KKyAgICBPTVhfVElDS1Mgbk1lZGlhVGltZXN0YW1wOyAgLyoqPCBNZWRpYSB0aW1lc3RhbXAgcmVxdWVzdGVkLiovIAorICAgIE9NWF9USUNLUyBuT2Zmc2V0OyAgICAgICAgICAvKio8IEFtb3VudCBvZiB3YWxsIGNsb2NrIHRpbWUgYnkgd2hpY2ggdGhpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIHJlcXVlc3Qgc2hvdWxkIGJlIGZ1bGZpbGxlZCBlYXJseSAqLworfSBPTVhfVElNRV9DT05GSUdfTUVESUFUSU1FUkVRVUVTVFRZUEU7CisKKy8qKjwgU3RydWN0dXJlIHNlbnQgZnJvbSB0aGUgY2xvY2sgY29tcG9uZW50IGNsaWVudCBlaXRoZXIgd2hlbiBmdWxmaWxsaW5nIAorICogICBhIG1lZGlhIHRpbWUgcmVxdWVzdCBvciB3aGVuIHRoZSB0aW1lIHNjYWxlIGhhcyBjaGFuZ2VkLiAKKyAqCisgKiAgIEluIHRoZSBmb3JtZXIgY2FzZSB0aGUgQ2xvY2sgQ29tcG9uZW50IGZpbGxzIHRoaXMgc3RydWN0dXJlIGFuZCB0aW1lcyBpdHMgZW1pc3Npb24gCisgKiAgIHRvIGEgY2xpZW50IGNvbXBvbmVudCAodmlhIHRoZSBjbGllbnQgcG9ydCkgYWNjb3JkaW5nIHRvIHRoZSBjb3JyZXNwb25kaW5nIG1lZGlhIAorICogICB0aW1lIHJlcXVlc3Qgc2VudCBieSB0aGUgY2xpZW50LiBUaGUgQ2xvY2sgQ29tcG9uZW50IHNob3VsZCB0aW1lIHRoZSBlbWlzc2lvbiB0byBvY2N1cgorICogICB3aGVuIHRoZSByZXF1ZXN0ZWQgdGltZXN0YW1wIG1hdGNoZXMgdGhlIENsb2NrIENvbXBvbmVudCdzIG1lZGlhIHRpbWUgYnV0IGFsc28gdGhlIAorICogICBwcmVzY3JpYmVkIG9mZnNldCBlYXJseS4gCisgKgorICogICBVcG9uIHNjYWxlIGNoYW5nZXMgdGhlIGNsb2NrIGNvbXBvbmVudCBjbGVhcnMgdGhlIG5DbGllbnRQcml2YXRlIGRhdGEsIHNlbmRzIHRoZSBjdXJyZW50CisgKiAgIG1lZGlhIHRpbWUgYW5kIHNldHMgdGhlIG5TY2FsZSB0byB0aGUgbmV3IHNjYWxlIHZpYSB0aGUgY2xpZW50IHBvcnQuIEl0IGVtaXRzIGEgCisgKiAgIE9NWF9USU1FX01FRElBVElNRVRZUEUgdG8gYWxsIGNsaWVudHMgaW5kZXBlbmRlbnQgb2YgYW55IHJlcXVlc3RzLiBUaGlzIGFsbG93cyBjbGllbnRzIHRvIAorICogICBhbHRlciBwcm9jZXNzaW5nIHRvIGFjY29tb2RhdGUgc2NhbGluZy4gRm9yIGluc3RhbmNlIGEgdmlkZW8gY29tcG9uZW50IG1pZ2h0IHNraXAgaW50ZXItZnJhbWVzIAorICogICBpbiB0aGUgY2FzZSBvZiBleHRyZW1lIGZhc3Rmb3J3YXJkLiBMaWtld2lzZSBhbiBhdWRpbyBjb21wb25lbnQgbWlnaHQgYWRkIG9yIHJlbW92ZSBzYW1wbGVzIAorICogICBmcm9tIGFuIGF1ZGlvIGZyYW1lIHRvIHNjYWxlIGF1ZGlvIGRhdGEuIAorICoKKyAqICAgSXQgaXMgZXhwZWN0ZWQgdGhhdCBzb21lIGNsb2NrIGNvbXBvbmVudHMgbWF5IG5vdCBiZSBhYmxlIHRvIGZ1bGZpbGwgcmVxdWVzdHMKKyAqICAgYXQgZXhhY3RseSB0aGUgcHJlc2NyaWJlZCB0aW1lLiBUaGlzIGlzIGFjY2VwdGFibGUgc28gbG9uZyBhcyB0aGUgcmVxdWVzdCBpcyAKKyAqICAgZnVsZmlsbGVkIGF0IGxlYXN0IGFzIGVhcmx5IGFzIGRlc2NyaWJlZCBhbmQgbm90IGxhdGVyLiBUaGlzIHN0cnVjdHVyZSBwcm92aWRlcyAKKyAqICAgZmllbGRzIHRoZSBjbGllbnQgbWF5IHVzZSB0byB3YWl0IGZvciB0aGUgcmVtYWluaW5nIHRpbWUuCisgKgorICogICBUaGUgY2xpZW50IG1heSB1c2UgZWl0aGVyIHRoZSBuT2Zmc2V0IG9yIG5XYWxsVGltZUF0TWVkaWEgZmllbGRzIHRvIGRldGVybWluZSB0aGUgCisgKiAgIHdhbGwgdGltZSB1bnRpbCB0aGUgbk1lZGlhVGltZXN0YW1wIGFjdHVhbGx5IG9jY3Vycy4gSW4gdGhlIGxhdHRlciBjYXNlIHRoZQorICogICBjbGllbnQgY2FuIGdldCBhIG1vcmUgYWNjdXJhdGUgdmFsdWUgZm9yIG9mZnNldCBieSBnZXR0aW5nIHRoZSBjdXJyZW50IHdhbGwKKyAqICAgZnJvbSB0aGUgY2xvYyBjb21wb25lbnQgYW5kIHN1YnRyYWN0aW5nIGl0IGZyb20gbldhbGxUaW1lQXRNZWRpYS4gCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgT01YX1RJTUVfTUVESUFUSU1FVFlQRSB7CisgICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAgICAgICAvKio8IHNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcyAqLworICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgICAgICAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCisgICAgT01YX1UzMiBuQ2xpZW50UHJpdmF0ZTsgICAgICAgICAvKio8IENsaWVudCBwcml2YXRlIGRhdGEgdG8gZGlzYWJpZ3VhdGUgdGhpcyBtZWRpYSB0aW1lIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICBmcm9tIG90aGVycy4gQ29waWVkIGZyb20gdGhlIG1lZGlhIHRpbWUgcmVxdWVzdC4gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIEEgdmFsdWUgb2YgemVybyBpcyByZXNlcnZlZCBmb3IgdGltZSBzY2FsZSB1cGRhdGVzLiAqLworICAgIE9NWF9USU1FX1VQREFURVRZUEUgZVVwZGF0ZVR5cGU7IC8qKjwgUmVhc29uIGZvciB0aGUgdXBkYXRlICovCisgICAgT01YX1RJQ0tTIG5NZWRpYVRpbWVzdGFtcDsgICAgICAvKio8IE1lZGlhIHRpbWUgcmVxdWVzdGVkLiBJZiBubyBtZWRpYSB0aW1lIHdhcyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgcmVxdWVzdGVkIHRoZW4gdGhpcyBpcyB0aGUgY3VycmVudCBtZWRpYSB0aW1lLiAqLyAKKyAgICBPTVhfVElDS1Mgbk9mZnNldDsgICAgICAgICAgICAgIC8qKjwgQW1vdW50IG9mIHdhbGwgY2xvY2sgdGltZSBieSB3aGljaCB0aGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIHJlcXVlc3Qgd2FzIGFjdHVhbGx5IGZ1bGZpbGxlZCBlYXJseSAqLworCisgICAgT01YX1RJQ0tTIG5XYWxsVGltZUF0TWVkaWFUaW1lOyAvKio8IFdhbGwgdGltZSBjb3JyZXNwb25kaW5nIHRvIG5NZWRpYVRpbWVTdGFtcC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgQSBjbGllbnQgbWF5IGNvbXBhcmUgdGhpcyB2YWx1ZSB0byBjdXJyZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIG1lZGlhIHRpbWUgb2J0YWluZWQgZnJvbSB0aGUgQ2xvY2sgQ29tcG9uZW50IHRvIGRldGVybWluZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICB0aGUgd2FsbCB0aW1lIHVudGlsIHRoZSBtZWRpYSB0aW1lc3RhbXAgaXMgcmVhbGx5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIGN1cnJlbnQuICovCisgICAgT01YX1MzMiB4U2NhbGU7ICAgICAgICAgICAgICAgICAvKio8IEN1cnJlbnQgbWVkaWEgdGltZSBzY2FsZSBpbiBRMTYgZm9ybWF0LiAqLworICAgIE9NWF9USU1FX0NMT0NLU1RBVEUgZVN0YXRlOyAgICAgLyogU2Vla2luZyBDaGFuZ2UuIEFkZGVkIDcvMTIuKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU3RhdGUgb2YgdGhlIG1lZGlhIHRpbWUuICovCit9IE9NWF9USU1FX01FRElBVElNRVRZUEU7ICAKKworLyoqIFN0cnVjdHVyZSByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgbWVkaWEgdGltZSBzY2FsZSBmYWN0b3IuIEFwcGxpY2FibGUgb25seSB0byBjbG9jayAKKyAqICBjb21wb25lbnQsIG90aGVyIGNvbXBvbmVudHMgc2VlIHNjYWxlIGNoYW5nZXMgdmlhIE9NWF9USU1FX01FRElBVElNRVRZUEUgYnVmZmVycyBzZW50IHZpYQorICogIHRoZSBjbG9jayBjb21wb25lbnQgY2xpZW50IHBvcnRzLiBVcG9uIHJlY2lldmluZyB0aGlzIGNvbmZpZyB0aGUgY2xvY2sgY29tcG9uZW50IGNoYW5nZXMgCisgKiAgdGhlIHJhdGUgYnkgd2hpY2ggdGhlIG1lZGlhIHRpbWUgaW5jcmVhc2VzIG9yIGRlY3JlYXNlcyBlZmZlY3RpdmVseSBpbXBsZW1lbnRpbmcgdHJpY2sgbW9kZXMuIAorICovIAordHlwZWRlZiBzdHJ1Y3QgT01YX1RJTUVfQ09ORklHX1NDQUxFVFlQRSB7CisgICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAgICAgICAvKio8IHNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcyAqLworICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgICAgICAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCisgICAgT01YX1MzMiB4U2NhbGU7ICAgICAgICAgICAgICAgICAvKio8IFRoaXMgaXMgYSB2YWx1ZSBpbiBRMTYgZm9ybWF0IHdoaWNoIGlzIHVzZWQgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBzY2FsaW5nIHRoZSBtZWRpYSB0aW1lICovCit9IE9NWF9USU1FX0NPTkZJR19TQ0FMRVRZUEU7CisgCisvKiogQml0cyB1c2VkIHRvIGlkZW50aWZ5IGEgY2xvY2sgcG9ydC4gVXNlZCBpbiBPTVhfVElNRV9DT05GSUdfQ0xPQ0tTVEFURVRZUEWScyBuV2FpdE1hc2sgZmllbGQgKi8KKyNkZWZpbmUgT01YX0NMT0NLUE9SVDAgMHgwMDAwMDAwMQorI2RlZmluZSBPTVhfQ0xPQ0tQT1JUMSAweDAwMDAwMDAyCisjZGVmaW5lIE9NWF9DTE9DS1BPUlQyIDB4MDAwMDAwMDQKKyNkZWZpbmUgT01YX0NMT0NLUE9SVDMgMHgwMDAwMDAwOAorI2RlZmluZSBPTVhfQ0xPQ0tQT1JUNCAweDAwMDAwMDEwCisjZGVmaW5lIE9NWF9DTE9DS1BPUlQ1IDB4MDAwMDAwMjAKKyNkZWZpbmUgT01YX0NMT0NLUE9SVDYgMHgwMDAwMDA0MAorI2RlZmluZSBPTVhfQ0xPQ0tQT1JUNyAweDAwMDAwMDgwCisKKy8qKiBTdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IG1vZGUgb2YgdGhlIG1lZGlhIGNsb2NrLiAKKyAqICBJTCBDbGllbnQgdXNlcyB0aGlzIGNvbmZpZyB0byBjaGFuZ2Ugb3IgcXVlcnkgdGhlIG1vZGUgb2YgdGhlIAorICogIG1lZGlhIGNsb2NrIG9mIHRoZSBjbG9jayBjb21wb25lbnQuIEFwcGxpY2FibGUgb25seSB0byBjbG9jaworICogIGNvbXBvbmVudC4gCisgKiAgCisgKiAgT24gYSBTZXRDb25maWcgaWYgZVN0YXRlIGlzIE9NWF9USU1FX0Nsb2NrU3RhdGVSdW5uaW5nIG1lZGlhIHRpbWUKKyAqICBzdGFydHMgaW1tZWRpYXRlbHkgYXQgdGhlIHByZXNjcmliZWQgc3RhcnQgdGltZS4gSWYKKyAqICBPTVhfVElNRV9DbG9ja1N0YXRlV2FpdGluZ0ZvclN0YXJ0VGltZSB0aGUgQ2xvY2sgQ29tcG9uZW50IGlnbm9yZXMKKyAqICB0aGUgZ2l2ZW4gblN0YXJ0VGltZSBhbmQgd2FpdHMgZm9yIGFsbCBjbGllbnRzIHNwZWNpZmllZCBpbiB0aGUgCisgKiAgbldhaXRNYXNrIHRvIHNlbmQgc3RhcnR0aW1lcyAodmlhIAorICogIE9NWF9JbmRleENvbmZpZ1RpbWVDbGllbnRTdGFydFRpbWUpLiBUaGUgQ2xvY2sgQ29tcG9uZW50IHRoZW4gc3RhcnRzIAorICogIHRoZSBtZWRpYSBjbG9jayB1c2luZyB0aGUgZWFybGllc3Qgc3RhcnQgdGltZSBzdXBwbGllZC4gKi8gICAgCit0eXBlZGVmIHN0cnVjdCBPTVhfVElNRV9DT05GSUdfQ0xPQ0tTVEFURVRZUEUgeworICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgICAvKio8IHNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcyAqLworICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgICAvKio8IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgaW5mb3JtYXRpb24gKi8KKyAgICBPTVhfVElNRV9DTE9DS1NUQVRFIGVTdGF0ZTsgLyoqPCBTdGF0ZSBvZiB0aGUgbWVkaWEgdGltZS4gKi8KKyAgICBPTVhfVElDS1MgblN0YXJ0VGltZTsgICAgICAgLyoqPCBTdGFydCB0aW1lIG9mIHRoZSBtZWRpYSB0aW1lLiAqLworICAgIE9NWF9USUNLUyBuT2Zmc2V0OyAgICAgICAgICAvKio8IFRpbWUgdG8gb2Zmc2V0IHRoZSBtZWRpYSB0aW1lIGJ5IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAoZS5nLiBwcmVyb2xsKS4gTWVkaWEgdGltZSB3aWxsIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJlcG9ydGVkIHRvIGJlIG5PZmZzZXQgdGlja3MgZWFybGllci4gICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBPTVhfVTMyIG5XYWl0TWFzazsgICAgICAgICAgLyoqPCBNYXNrIG9mIE9NWF9DTE9DS1BPUlQgdmFsdWVzLiAqLworfSBPTVhfVElNRV9DT05GSUdfQ0xPQ0tTVEFURVRZUEU7CisKKy8qKiBTdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIHRoZSByZWZlcmVuY2UgY2xvY2sgY3VycmVudGx5IGJlaW5nIHVzZWQgdG8KKyAqICBjb21wdXRlIG1lZGlhIHRpbWUuIElMIGNsaWVudCB1c2VzIHRoaXMgY29uZmlnIHRvIGNoYW5nZSBvciBxdWVyeSB0aGUgCisgKiAgY2xvY2sgY29tcG9uZW50J3MgYWN0aXZlIHJlZmVyZW5jZSBjbG9jayAqLwordHlwZWRlZiBzdHJ1Y3QgT01YX1RJTUVfQ09ORklHX0FDVElWRVJFRkNMT0NLVFlQRSB7CisgICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAgICAgICAvKio8IHNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcyAqLworICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgICAgICAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCisgICAgT01YX1RJTUVfUkVGQ0xPQ0tUWVBFIGVDbG9jazsgICAvKio8IFJlZmVyZW5jZSBjbG9jayB1c2VkIHRvIGNvbXB1dGUgbWVkaWEgdGltZSAqLyAgICAgICAgICAgICAgICAgICAgICAgIAorfSBPTVhfVElNRV9DT05GSUdfQUNUSVZFUkVGQ0xPQ0tUWVBFOworCisvKiogRGVzY3JpcHRvciBmb3Igc2V0dGluZyBzcGVjaWZpY3Mgb2YgcG93ZXIgdHlwZS4KKyAqICBOb3RlOiB0aGlzIHN0cnVjdHVyZSBpcyBsaXN0ZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiAqLwordHlwZWRlZiBzdHJ1Y3QgT01YX09USEVSX0NPTkZJR19QT1dFUlRZUEUgeworICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247IC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLworICAgIE9NWF9CT09MIGJFbmFibGVQTTsgICAgICAgLyoqPCBGbGFnIHRvIGVuYWJsZSBQb3dlciBNYW5hZ2VtZW50ICovCit9IE9NWF9PVEhFUl9DT05GSUdfUE9XRVJUWVBFOworCisKKy8qKiBEZXNjcmlwdG9yIGZvciBzZXR0aW5nIHNwZWNpZmljcyBvZiBzdGF0cyB0eXBlLgorICogIE5vdGU6IHRoaXMgc3RydWN0dXJlIGlzIGxpc3RlZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuICovCit0eXBlZGVmIHN0cnVjdCBPTVhfT1RIRVJfQ09ORklHX1NUQVRTVFlQRSB7CisgICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAvKio8IHNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcyAqLworICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCisgICAgLyogd2hhdCBnb2VzIGhlcmUgKi8KK30gT01YX09USEVSX0NPTkZJR19TVEFUU1RZUEU7CisKKworLyoqCisgKiBUaGUgUG9ydERlZmluaXRpb24gc3RydWN0dXJlIGlzIHVzZWQgdG8gZGVmaW5lIGFsbCBvZiB0aGUgcGFyYW1ldGVycyAKKyAqIG5lY2Vzc2FyeSBmb3IgdGhlIGNvbXBsaWFudCBjb21wb25lbnQgdG8gc2V0dXAgYW4gaW5wdXQgb3IgYW4gb3V0cHV0IG90aGVyIAorICogcGF0aC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgT01YX09USEVSX1BPUlRERUZJTklUSU9OVFlQRSB7CisgICAgT01YX09USEVSX0ZPUk1BVFRZUEUgZUZvcm1hdDsgIC8qKjwgVHlwZSBvZiBkYXRhIGV4cGVjdGVkIGZvciB0aGlzIGNoYW5uZWwgKi8KK30gT01YX09USEVSX1BPUlRERUZJTklUSU9OVFlQRTsKKworLyoqICBQb3J0IGZvcm1hdCBwYXJhbWV0ZXIuICBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIHRvIGVudW1lcmF0ZQorICAqICB0aGUgdmFyaW91cyBkYXRhIGlucHV0L291dHB1dCBmb3JtYXQgc3VwcG9ydGVkIGJ5IHRoZSBwb3J0LgorICAqLwordHlwZWRlZiBzdHJ1Y3QgT01YX09USEVSX1BBUkFNX1BPUlRGT1JNQVRUWVBFIHsKKyAgICBPTVhfVTMyIG5TaXplOyAvKio8IHNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcyAqLworICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCisgICAgT01YX1UzMiBuUG9ydEluZGV4OyAvKio8IEluZGljYXRlcyB3aGljaCBwb3J0IHRvIHNldCAqLworICAgIE9NWF9VMzIgbkluZGV4OyAvKio8IEluZGljYXRlcyB0aGUgZW51bWVyYXRpb24gaW5kZXggZm9yIHRoZSBmb3JtYXQgZnJvbSAweDAgdG8gTi0xICovCisgICAgT01YX09USEVSX0ZPUk1BVFRZUEUgZUZvcm1hdDsgLyoqPCBUeXBlIG9mIGRhdGEgZXhwZWN0ZWQgZm9yIHRoaXMgY2hhbm5lbCAqLworfSBPTVhfT1RIRVJfUEFSQU1fUE9SVEZPUk1BVFRZUEU7IAorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYKKy8qIEZpbGUgRU9GICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL29wZW5tYXgvT01YX1R5cGVzLmggYi9pbmNsdWRlL21lZGlhL29wZW5tYXgvT01YX1R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNmZDRiYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbWVkaWEvb3Blbm1heC9PTVhfVHlwZXMuaApAQCAtMCwwICsxLDM2NSBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwOSBQYWNrZXRWaWRlbworICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlcgorICogZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zCisgKiBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggVGhlIEtocm9ub3MgR3JvdXAgSW5jLiAKKyAqIAorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0CisgKiB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6IAorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAKKyAqIAorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAorICogVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKKyAqIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAKKyAqCisgKi8KKworLyoqIE9NWF9UeXBlcy5oIC0gT3Blbk1heCBJTCB2ZXJzaW9uIDEuMS4yCisgKiAgVGhlIE9NWF9UeXBlcyBoZWFkZXIgZmlsZSBjb250YWlucyB0aGUgcHJpbWl0aXZlIHR5cGUgZGVmaW5pdGlvbnMgdXNlZCBieSAKKyAqICB0aGUgY29yZSwgdGhlIGFwcGxpY2F0aW9uIGFuZCB0aGUgY29tcG9uZW50LiAgVGhpcyBmaWxlIG1heSBuZWVkIHRvIGJlCisgKiAgbW9kaWZpZWQgdG8gYmUgdXNlZCBvbiBzeXN0ZW1zIHRoYXQgZG8gbm90IGhhdmUgImNoYXIiIHNldCB0byA4IGJpdHMsIAorICogICJzaG9ydCIgc2V0IHRvIDE2IGJpdHMgYW5kICJsb25nIiBzZXQgdG8gMzIgYml0cy4KKyAqLworCisjaWZuZGVmIE9NWF9UeXBlc19oCisjZGVmaW5lIE9NWF9UeXBlc19oCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworLyoqIFRoZSBPTVhfQVBJIGFuZCBPTVhfQVBJRU5UUlkgYXJlIHBsYXRmb3JtIHNwZWNpZmljIGRlZmluaXRpb25zIHVzZWQKKyAqICB0byBkZWNsYXJlIE9NWCBmdW5jdGlvbiBwcm90b3R5cGVzLiAgVGhleSBhcmUgbW9kaWZpZWQgdG8gbWVldCB0aGUKKyAqICByZXF1aXJlbWVudHMgZm9yIGEgcGFydGljdWxhciBwbGF0Zm9ybSAqLworI2lmZGVmIF9fU1lNQklBTjMyX18gICAKKyMgICBpZmRlZiBfX09NWF9FWFBPUlRTCisjICAgICAgIGRlZmluZSBPTVhfQVBJIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQorIyAgIGVsc2UKKyMgICAgICAgaWZkZWYgX1dJTjMyCisjICAgICAgICAgICBkZWZpbmUgT01YX0FQSSBfX2RlY2xzcGVjKGRsbGV4cG9ydCkgCisjICAgICAgIGVsc2UKKyMgICAgICAgICAgIGRlZmluZSBPTVhfQVBJIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQorIyAgICAgICBlbmRpZgorIyAgIGVuZGlmCisjZWxzZQorIyAgIGlmZGVmIF9XSU4zMgorIyAgICAgIGlmZGVmIF9fT01YX0VYUE9SVFMKKyMgICAgICAgICAgZGVmaW5lIE9NWF9BUEkgX19kZWNsc3BlYyhkbGxleHBvcnQpCisjICAgICAgZWxzZQorLy8jICAgICAgICAgIGRlZmluZSBPTVhfQVBJIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQorI2RlZmluZSBPTVhfQVBJCisjICAgICAgZW5kaWYKKyMgICBlbHNlCisjICAgICAgaWZkZWYgX19PTVhfRVhQT1JUUworIyAgICAgICAgICBkZWZpbmUgT01YX0FQSQorIyAgICAgIGVsc2UKKyMgICAgICAgICAgZGVmaW5lIE9NWF9BUEkgZXh0ZXJuCisjICAgICAgZW5kaWYKKyMgICBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgT01YX0FQSUVOVFJZCisjZGVmaW5lIE9NWF9BUElFTlRSWSAKKyNlbmRpZiAKKworLyoqIE9NWF9JTiBpcyB1c2VkIHRvIGlkZW50aWZ5IGlucHV0cyB0byBhbiBPTVggZnVuY3Rpb24uICBUaGlzIGRlc2lnbmF0aW9uIAorICAgIHdpbGwgYWxzbyBiZSB1c2VkIGluIHRoZSBjYXNlIG9mIGEgcG9pbnRlciB0aGF0IHBvaW50cyB0byBhIHBhcmFtZXRlciAKKyAgICB0aGF0IGlzIHVzZWQgYXMgYW4gb3V0cHV0LiAqLworI2lmbmRlZiBPTVhfSU4KKyNkZWZpbmUgT01YX0lOCisjZW5kaWYKKworLyoqIE9NWF9PVVQgaXMgdXNlZCB0byBpZGVudGlmeSBvdXRwdXRzIGZyb20gYW4gT01YIGZ1bmN0aW9uLiAgVGhpcyAKKyAgICBkZXNpZ25hdGlvbiB3aWxsIGFsc28gYmUgdXNlZCBpbiB0aGUgY2FzZSBvZiBhIHBvaW50ZXIgdGhhdCBwb2ludHMgCisgICAgdG8gYSBwYXJhbWV0ZXIgdGhhdCBpcyB1c2VkIGFzIGFuIGlucHV0LiAqLworI2lmbmRlZiBPTVhfT1VUCisjZGVmaW5lIE9NWF9PVVQKKyNlbmRpZgorCisKKy8qKiBPTVhfSU5PVVQgaXMgdXNlZCB0byBpZGVudGlmeSBwYXJhbWV0ZXJzIHRoYXQgbWF5IGJlIGVpdGhlciBpbnB1dHMgb3IKKyAgICBvdXRwdXRzIGZyb20gYW4gT01YIGZ1bmN0aW9uIGF0IHRoZSBzYW1lIHRpbWUuICBUaGlzIGRlc2lnbmF0aW9uIHdpbGwgCisgICAgYWxzbyBiZSB1c2VkIGluIHRoZSBjYXNlIG9mIGEgcG9pbnRlciB0aGF0ICBwb2ludHMgdG8gYSBwYXJhbWV0ZXIgdGhhdCAKKyAgICBpcyB1c2VkIGJvdGggYXMgYW4gaW5wdXQgYW5kIGFuIG91dHB1dC4gKi8KKyNpZm5kZWYgT01YX0lOT1VUCisjZGVmaW5lIE9NWF9JTk9VVAorI2VuZGlmCisKKy8qKiBPTVhfQUxMIGlzIHVzZWQgdG8gYXMgYSB3aWxkY2FyZCB0byBzZWxlY3QgYWxsIGVudGl0aWVzIG9mIHRoZSBzYW1lIHR5cGUKKyAqICB3aGVuIHNwZWNpZnlpbmcgdGhlIGluZGV4LCBvciByZWZlcnJpbmcgdG8gYSBvYmplY3QgYnkgYW4gaW5kZXguICAoaS5lLgorICogIHVzZSBPTVhfQUxMIHRvIGluZGljYXRlIGFsbCBOIGNoYW5uZWxzKS4gV2hlbiB1c2VkIGFzIGEgcG9ydCBpbmRleAorICogIGZvciBhIGNvbmZpZyBvciBwYXJhbWV0ZXIgdGhpcyBPTVhfQUxMIGRlbm90ZXMgdGhhdCB0aGUgY29uZmlnIG9yCisgKiAgcGFyYW1ldGVyIGFwcGxpZXMgdG8gdGhlIGVudGlyZSBjb21wb25lbnQgbm90IGp1c3Qgb25lIHBvcnQuICovCisjZGVmaW5lIE9NWF9BTEwgMHhGRkZGRkZGRgorCisvKiogSW4gdGhlIGZvbGxvd2luZyB3ZSBkZWZpbmUgZ3JvdXBzIHRoYXQgaGVscCBidWlsZGluZyBkb3h5Z2VuIGRvY3VtZW50YXRpb24gKi8KKworLyoqIEBkZWZncm91cCBjb3JlIE9wZW5NQVggSUwgY29yZQorICogRnVuY3Rpb25zIGFuZCBzdHJ1Y3R1cmUgcmVsYXRlZCB0byB0aGUgT01YIElMIGNvcmUKKyAqLworIAorIC8qKiBAZGVmZ3JvdXAgY29tcCBPcGVuTUFYIElMIGNvbXBvbmVudAorICogRnVuY3Rpb25zIGFuZCBzdHJ1Y3R1cmUgcmVsYXRlZCB0byB0aGUgT01YIElMIGNvbXBvbmVudAorICovCisgCisvKiogQGRlZmdyb3VwIHJwbSBSZXNvdXJjZSBhbmQgUG9saWN5IE1hbmFnZW1lbnQgCisgKiBTdHJ1Y3R1cmVzIGZvciByZXNvdXJjZSBhbmQgcG9saWN5IG1hbmFnZW1lbnQgb2YgY29tcG9uZW50cworICovCisKKy8qKiBAZGVmZ3JvdXAgYnVmIEJ1ZmZlciBNYW5hZ2VtZW50CisgKiBCdWZmZXIgaGFuZGxpbmcgZnVuY3Rpb25zIGFuZCBzdHJ1Y3R1cmVzCisgKi8KKyAgCisvKiogQGRlZmdyb3VwIHR1biBUdW5uZWxpbmcKKyAqIEBpbmdyb3VwIGNvcmUgY29tcAorICogU3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zIHRvIG1hbmFnZSB0dW5uZWxzIGFtb25nIGNvbXBvbmVudCBwb3J0cworICovCisgCisvKiogQGRlZmdyb3VwIGNwIENvbnRlbnQgUGlwZXMKKyAqICBAaW5ncm91cCBjb3JlCisgKi8KKyAKKyAvKiogQGRlZmdyb3VwIG1ldGFkYXRhIE1ldGFkYXRhIGhhbmRsaW5nCisgICogCisgICovIAorCisvKiogT01YX1U4IGlzIGFuIDggYml0IHVuc2lnbmVkIHF1YW50aXR5IHRoYXQgaXMgYnl0ZSBhbGlnbmVkICovCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgT01YX1U4OworCisvKiogT01YX1M4IGlzIGFuIDggYml0IHNpZ25lZCBxdWFudGl0eSB0aGF0IGlzIGJ5dGUgYWxpZ25lZCAqLwordHlwZWRlZiBzaWduZWQgY2hhciBPTVhfUzg7CisKKy8qKiBPTVhfVTE2IGlzIGEgMTYgYml0IHVuc2lnbmVkIHF1YW50aXR5IHRoYXQgaXMgMTYgYml0IHdvcmQgYWxpZ25lZCAqLwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBPTVhfVTE2OworCisvKiogT01YX1MxNiBpcyBhIDE2IGJpdCBzaWduZWQgcXVhbnRpdHkgdGhhdCBpcyAxNiBiaXQgd29yZCBhbGlnbmVkICovCit0eXBlZGVmIHNpZ25lZCBzaG9ydCBPTVhfUzE2OworCisvKiogT01YX1UzMiBpcyBhIDMyIGJpdCB1bnNpZ25lZCBxdWFudGl0eSB0aGF0IGlzIDMyIGJpdCB3b3JkIGFsaWduZWQgKi8KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBPTVhfVTMyOworCisvKiogT01YX1MzMiBpcyBhIDMyIGJpdCBzaWduZWQgcXVhbnRpdHkgdGhhdCBpcyAzMiBiaXQgd29yZCBhbGlnbmVkICovCit0eXBlZGVmIHNpZ25lZCBsb25nIE9NWF9TMzI7CisKKworLyogVXNlcnMgd2l0aCBjb21waWxlcnMgdGhhdCBjYW5ub3QgYWNjZXB0IHRoZSAibG9uZyBsb25nIiBkZXNpZ25hdGlvbiBzaG91bGQKKyAgIGRlZmluZSB0aGUgT01YX1NLSVA2NEJJVCBtYWNyby4gIEl0IHNob3VsZCBiZSBub3RlZCB0aGF0IHRoaXMgbWF5IGNhdXNlIAorICAgc29tZSBjb21wb25lbnRzIHRvIGZhaWwgdG8gY29tcGlsZSBpZiB0aGUgY29tcG9uZW50IHdhcyB3cml0dGVuIHRvIHJlcXVpcmUKKyAgIDY0IGJpdCBpbnRlZ3JhbCB0eXBlcy4gIEhvd2V2ZXIsIHRoZXNlIGNvbXBvbmVudHMgd291bGQgTk9UIGNvbXBpbGUgYW55d2F5CisgICBzaW5jZSB0aGUgY29tcGlsZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgd2F5IHRoZSBjb21wb25lbnQgd2FzIHdyaXR0ZW4uCisqLworI2lmbmRlZiBPTVhfU0tJUDY0QklUCisjaWZkZWYgX19TWU1CSUFOMzJfXworLyoqIE9NWF9VNjQgaXMgYSA2NCBiaXQgdW5zaWduZWQgcXVhbnRpdHkgdGhhdCBpcyA2NCBiaXQgd29yZCBhbGlnbmVkICovCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBPTVhfVTY0OworCisvKiogT01YX1M2NCBpcyBhIDY0IGJpdCBzaWduZWQgcXVhbnRpdHkgdGhhdCBpcyA2NCBiaXQgd29yZCBhbGlnbmVkICovCit0eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgT01YX1M2NDsKKworI2VsaWYgZGVmaW5lZChXSU4zMikKKworLyoqIE9NWF9VNjQgaXMgYSA2NCBiaXQgdW5zaWduZWQgcXVhbnRpdHkgdGhhdCBpcyA2NCBiaXQgd29yZCBhbGlnbmVkICovICAgCit0eXBlZGVmIHVuc2lnbmVkIF9faW50NjQgIE9NWF9VNjQ7CisKKy8qKiBPTVhfUzY0IGlzIGEgNjQgYml0IHNpZ25lZCBxdWFudGl0eSB0aGF0IGlzIDY0IGJpdCB3b3JkIGFsaWduZWQgKi8KK3R5cGVkZWYgc2lnbmVkICAgX19pbnQ2NCAgT01YX1M2NDsKKworI2Vsc2UgLyogV0lOMzIgKi8KKworLyoqIE9NWF9VNjQgaXMgYSA2NCBiaXQgdW5zaWduZWQgcXVhbnRpdHkgdGhhdCBpcyA2NCBiaXQgd29yZCBhbGlnbmVkICovCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBPTVhfVTY0OworCisvKiogT01YX1M2NCBpcyBhIDY0IGJpdCBzaWduZWQgcXVhbnRpdHkgdGhhdCBpcyA2NCBiaXQgd29yZCBhbGlnbmVkICovCit0eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgT01YX1M2NDsKKworI2VuZGlmIC8qIFdJTjMyICovCisjZW5kaWYKKworCisvKiogVGhlIE9NWF9CT09MIHR5cGUgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB0byByZXByZXNlbnQgYSB0cnVlIG9yIGEgZmFsc2UgCisgICAgdmFsdWUgd2hlbiBwYXNzaW5nIHBhcmFtZXRlcnMgdG8gYW5kIGZyb20gdGhlIE9NWCBjb3JlIGFuZCBjb21wb25lbnRzLiAgVGhlCisgICAgT01YX0JPT0wgaXMgYSAzMiBiaXQgcXVhbnRpdHkgYW5kIGlzIGFsaWduZWQgb24gYSAzMiBiaXQgd29yZCBib3VuZGFyeS4KKyAqLwordHlwZWRlZiBlbnVtIE9NWF9CT09MIHsKKyAgICBPTVhfRkFMU0UgPSAwLAorICAgIE9NWF9UUlVFID0gIU9NWF9GQUxTRSwKKyAgICBPTVhfQk9PTF9NQVggPSAweDdGRkZGRkZGCit9IE9NWF9CT09MOyAKKyAKKy8qKiBUaGUgT01YX1BUUiB0eXBlIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgdG8gcGFzcyBwb2ludGVycyBiZXR3ZWVuIHRoZSBPTVgKKyAgICBhcHBsaWNhdGlvbnMgYW5kIHRoZSBPTVggQ29yZSBhbmQgY29tcG9uZW50cy4gIFRoaXMgaXMgYSAzMiBiaXQgcG9pbnRlciBhbmQKKyAgICBpcyBhbGlnbmVkIG9uIGEgMzIgYml0IGJvdW5kYXJ5LgorICovCit0eXBlZGVmIHZvaWQqIE9NWF9QVFI7CisKKy8qKiBUaGUgT01YX1NUUklORyB0eXBlIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgdG8gcGFzcyAiQyIgdHlwZSBzdHJpbmdzIGJldHdlZW4KKyAgICB0aGUgYXBwbGljYXRpb24gYW5kIHRoZSBjb3JlIGFuZCBjb21wb25lbnQuICBUaGUgT01YX1NUUklORyB0eXBlIGlzIGEgMzIgCisgICAgYml0IHBvaW50ZXIgdG8gYSB6ZXJvIHRlcm1pbmF0ZWQgc3RyaW5nLiAgVGhlICBwb2ludGVyIGlzIHdvcmQgYWxpZ25lZCBhbmQgCisgICAgdGhlIHN0cmluZyBpcyBieXRlIGFsaWduZWQuICAKKyAqLwordHlwZWRlZiBjaGFyKiBPTVhfU1RSSU5HOworCisvKiogVGhlIE9NWF9CWVRFIHR5cGUgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB0byBwYXNzIGFycmF5cyBvZiBieXRlcyBzdWNoIGFzCisgICAgYnVmZmVycyBiZXR3ZWVuIHRoZSBhcHBsaWNhdGlvbiBhbmQgdGhlIGNvbXBvbmVudCBhbmQgY29yZS4gIFRoZSBPTVhfQllURSAKKyAgICB0eXBlIGlzIGEgMzIgYml0IHBvaW50ZXIgdG8gYSB6ZXJvIHRlcm1pbmF0ZWQgc3RyaW5nLiAgVGhlICBwb2ludGVyIGlzIHdvcmQKKyAgICBhbGlnbmVkIGFuZCB0aGUgc3RyaW5nIGlzIGJ5dGUgYWxpZ25lZC4KKyAqLwordHlwZWRlZiB1bnNpZ25lZCBjaGFyKiBPTVhfQllURTsKKworLyoqIE9NWF9VVUlEVFlQRSBpcyBhIHZlcnkgbG9uZyB1bmlxdWUgaWRlbnRpZmllciB0byB1bmlxdWVseSBpZGVudGlmeQorICAgIGF0IHJ1bnRpbWUuICBUaGlzIGlkZW50aWZpZXIgc2hvdWxkIGJlIGdlbmVyYXRlZCBieSBhIGNvbXBvbmVudCBpbiBhIHdheQorICAgIHRoYXQgZ3VhcmFudGVlcyB0aGF0IGV2ZXJ5IGluc3RhbmNlIG9mIHRoZSBpZGVudGlmaWVyIHJ1bm5pbmcgb24gdGhlIHN5c3RlbQorICAgIGlzIHVuaXF1ZS4gKi8KK3R5cGVkZWYgdW5zaWduZWQgY2hhciBPTVhfVVVJRFRZUEVbMTI4XTsKKworLyoqIFRoZSBPTVhfRElSVFlQRSBlbnVtZXJhdGlvbiBpcyB1c2VkIHRvIGluZGljYXRlIGlmIGEgcG9ydCBpcyBhbiBpbnB1dCBvcgorICAgIGFuIG91dHB1dCBwb3J0LiAgVGhpcyBlbnVtZXJhdGlvbiBpcyBjb21tb24gYWNyb3NzIGFsbCBjb21wb25lbnQgdHlwZXMuICAgIAorICovCit0eXBlZGVmIGVudW0gT01YX0RJUlRZUEUKK3sKKyAgICBPTVhfRGlySW5wdXQsICAgICAgICAgICAgICAvKio8IFBvcnQgaXMgYW4gaW5wdXQgcG9ydCAqLworICAgIE9NWF9EaXJPdXRwdXQsICAgICAgICAgICAgIC8qKjwgUG9ydCBpcyBhbiBvdXRwdXQgcG9ydCAqLworICAgIE9NWF9EaXJNYXggPSAweDdGRkZGRkZGCit9IE9NWF9ESVJUWVBFOworCisvKiogVGhlIE9NWF9FTkRJQU5UWVBFIGVudW1lcmF0aW9uIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhlIGJpdCBvcmRlcmluZyAKKyAgICBmb3IgbnVtZXJpY2FsIGRhdGEgKGkuZS4gYmlnIGVuZGlhbiwgb3IgbGl0dGxlIGVuZGlhbikuICAgIAorICovCit0eXBlZGVmIGVudW0gT01YX0VORElBTlRZUEUKK3sKKyAgICBPTVhfRW5kaWFuQmlnLCAvKio8IGJpZyBlbmRpYW4gKi8KKyAgICBPTVhfRW5kaWFuTGl0dGxlLCAvKio8IGxpdHRsZSBlbmRpYW4gKi8KKyAgICBPTVhfRW5kaWFuTWF4ID0gMHg3RkZGRkZGRgorfSBPTVhfRU5ESUFOVFlQRTsKKworCisvKiogVGhlIE9NWF9OVU1FUklDQUxEQVRBVFlQRSBlbnVtZXJhdGlvbiBpcyB1c2VkIHRvIGluZGljYXRlIGlmIGRhdGEgCisgICAgaXMgc2lnbmVkIG9yIHVuc2lnbmVkCisgKi8KK3R5cGVkZWYgZW51bSBPTVhfTlVNRVJJQ0FMREFUQVRZUEUKK3sKKyAgICBPTVhfTnVtZXJpY2FsRGF0YVNpZ25lZCwgLyoqPCBzaWduZWQgZGF0YSAqLworICAgIE9NWF9OdW1lcmljYWxEYXRhVW5zaWduZWQsIC8qKjwgdW5zaWduZWQgZGF0YSAqLworICAgIE9NWF9OdW1lcmNpYWxEYXRhTWF4ID0gMHg3RkZGRkZGRgorfSBPTVhfTlVNRVJJQ0FMREFUQVRZUEU7CisKKworLyoqIFVuc2lnbmVkIGJvdW5kZWQgdmFsdWUgdHlwZSAqLwordHlwZWRlZiBzdHJ1Y3QgT01YX0JVMzIgeworICAgIE9NWF9VMzIgblZhbHVlOyAvKio8IGFjdHVhbCB2YWx1ZSAqLworICAgIE9NWF9VMzIgbk1pbjsgICAvKio8IG1pbmltdW0gZm9yIHZhbHVlIChpLmUuIG5WYWx1ZSA+PSBuTWluKSAqLworICAgIE9NWF9VMzIgbk1heDsgICAvKio8IG1heGltdW0gZm9yIHZhbHVlIChpLmUuIG5WYWx1ZSA8PSBuTWF4KSAqLworfSBPTVhfQlUzMjsKKworCisvKiogU2lnbmVkIGJvdW5kZWQgdmFsdWUgdHlwZSAqLwordHlwZWRlZiBzdHJ1Y3QgT01YX0JTMzIgeworICAgIE9NWF9TMzIgblZhbHVlOyAvKio8IGFjdHVhbCB2YWx1ZSAqLworICAgIE9NWF9TMzIgbk1pbjsgICAvKio8IG1pbmltdW0gZm9yIHZhbHVlIChpLmUuIG5WYWx1ZSA+PSBuTWluKSAqLworICAgIE9NWF9TMzIgbk1heDsgICAvKio8IG1heGltdW0gZm9yIHZhbHVlIChpLmUuIG5WYWx1ZSA8PSBuTWF4KSAqLworfSBPTVhfQlMzMjsKKworCisvKiogU3RydWN0dXJlIHJlcHJlc2VudGluZyBzb21lIHRpbWUgb3IgZHVyYXRpb24gaW4gbWljcm9zZWNvbmRzLiBUaGlzIHN0cnVjdHVyZQorICAqICBtdXN0IGJlIGludGVycHJldGVkIGFzIGEgc2lnbmVkIDY0IGJpdCB2YWx1ZS4gVGhlIHF1YW50aXR5IGlzIHNpZ25lZCB0byBhY2NvbW1vZGF0ZSAKKyAgKiAgbmVnYXRpdmUgZGVsdGFzIGFuZCBwcmVyb2xsIHNjZW5hcmlvcy4gVGhlIHF1YW50aXR5IGlzIHJlcHJlc2VudGVkIGluIG1pY3Jvc2Vjb25kcyAKKyAgKiAgdG8gYWNjb21vZGF0ZSBoaWdoIHJlc29sdXRpb24gdGltZXN0YW1wcyAoZS5nLiBEVkQgcHJlc2VudGF0aW9uIHRpbWVzdGFtcHMgYmFzZWQKKyAgKiAgb24gYSA5MGtIeiBjbG9jaykgYW5kIHRvIGFsbG93IG1vcmUgYWNjdXJhdGUgYW5kIHN5bmNocm9uaXplZCBkZWxpdmVyeSAoZS5nLiAKKyAgKiAgaW5kaXZpZHVhbCBhdWRpbyBzYW1wbGVzIGRlbGl2ZXJlZCBhdCAxOTIga0h6KS4gVGhlIHF1YW50aXR5IGlzIDY0IGJpdCB0byAKKyAgKiAgYWNjb21tb2RhdGUgYSBsYXJnZSBkeW5hbWljIHJhbmdlIChzaWduZWQgMzIgYml0IHZhbHVlcyB3b3VsZCBhbGxvdyBvbmx5IGZvciBwbHVzCisgICogIG9yIG1pbnVzIDM1IG1pbnV0ZXMpLgorICAqCisgICogIEltcGxlbWVudGF0aW9ucyB3aXRoIGxpbWl0ZWQgcHJlY2lzaW9uIG1heSBjb252ZXJ0IHRoZSBzaWduZWQgNjQgYml0IHZhbHVlIHRvIAorICAqICBhIHNpZ25lZCAzMiBiaXQgdmFsdWUgaW50ZXJuYWxseSBidXQgcmlzayBsb3NzIG9mIHByZWNpc2lvbi4gIAorICAqLworI2lmbmRlZiBPTVhfU0tJUDY0QklUCit0eXBlZGVmIE9NWF9TNjQgT01YX1RJQ0tTOworI2Vsc2UKK3R5cGVkZWYgc3RydWN0IE9NWF9USUNLUworeworICAgIE9NWF9VMzIgbkxvd1BhcnQ7ICAgIC8qKiBsb3cgYml0cyBvZiB0aGUgc2lnbmVkIDY0IGJpdCB0aWNrIHZhbHVlICovCisgICAgT01YX1UzMiBuSGlnaFBhcnQ7ICAgLyoqIGhpZ2ggYml0cyBvZiB0aGUgc2lnbmVkIDY0IGJpdCB0aWNrIHZhbHVlICovCit9IE9NWF9USUNLUzsKKyNlbmRpZgorI2RlZmluZSBPTVhfVElDS1NfUEVSX1NFQ09ORCAxMDAwMDAwCisKKy8qKiBEZWZpbmUgdGhlIHB1YmxpYyBpbnRlcmZhY2UgZm9yIHRoZSBPTVggSGFuZGxlLiAgVGhlIGNvcmUgd2lsbCBub3QgdXNlCisgICAgdGhpcyB2YWx1ZSBpbnRlcm5hbGx5LCBidXQgdGhlIGFwcGxpY2F0aW9uIHNob3VsZCBvbmx5IHVzZSB0aGlzIHZhbHVlLgorICovCit0eXBlZGVmIHZvaWQqIE9NWF9IQU5ETEVUWVBFOworCit0eXBlZGVmIHN0cnVjdCBPTVhfTUFSS1RZUEUKK3sKKyAgICBPTVhfSEFORExFVFlQRSBoTWFya1RhcmdldENvbXBvbmVudDsgICAvKio8IFRoZSBjb21wb25lbnQgdGhhdCB3aWxsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGUgYSBtYXJrIGV2ZW50IHVwb24gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzaW5nIHRoZSBtYXJrLiAqLworICAgIE9NWF9QVFIgcE1hcmtEYXRhOyAgIC8qKjwgQXBwbGljYXRpb24gc3BlY2lmaWMgZGF0YSBhc3NvY2lhdGVkIHdpdGggCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWFyayBzZW50IG9uIGEgbWFyayBldmVudCB0byBkaXNhbWJpZ3VhdGUgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIG1hcmsgZnJvbSBvdGhlcnMuICovCit9IE9NWF9NQVJLVFlQRTsKKworCisvKiogT01YX05BVElWRV9ERVZJQ0VUWVBFIGlzIHVzZWQgdG8gbWFwIGEgT01YIHZpZGVvIHBvcnQgdG8gdGhlCisgKiAgcGxhdGZvcm0gJiBvcGVyYXRpbmcgc3BlY2lmaWMgb2JqZWN0IHVzZWQgdG8gcmVmZXJlbmNlIHRoZSBkaXNwbGF5IAorICogIG9yIGNhbiBiZSB1c2VkIGJ5IGEgYXVkaW8gcG9ydCBmb3IgbmF0aXZlIGF1ZGlvIHJlbmRlcmluZyAqLwordHlwZWRlZiB2b2lkKiBPTVhfTkFUSVZFX0RFVklDRVRZUEU7CisKKy8qKiBPTVhfTkFUSVZFX1dJTkRPV1RZUEUgaXMgdXNlZCB0byBtYXAgYSBPTVggdmlkZW8gcG9ydCB0byB0aGUKKyAqICBwbGF0Zm9ybSAmIG9wZXJhdGluZyBzcGVjaWZpYyBvYmplY3QgdXNlZCB0byByZWZlcmVuY2UgdGhlIHdpbmRvdyAqLwordHlwZWRlZiB2b2lkKiBPTVhfTkFUSVZFX1dJTkRPV1RZUEU7CisKKy8qKiBUaGUgT01YX1ZFUlNJT05UWVBFIHVuaW9uIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUgdmVyc2lvbiBmb3IKKyAgICBhIHN0cnVjdHVyZSBvciBjb21wb25lbnQuICBGb3IgYSBjb21wb25lbnQsIHRoZSB2ZXJzaW9uIGlzIGVudGlyZWx5CisgICAgc3BlY2lmaWVkIGJ5IHRoZSBjb21wb25lbnQgdmVuZG9yLiAgQ29tcG9uZW50cyBkb2luZyB0aGUgc2FtZSBmdW5jdGlvbgorICAgIGZyb20gZGlmZmVyZW50IHZlbmRvcnMgbWF5IG9yIG1heSBub3QgaGF2ZSB0aGUgc2FtZSB2ZXJzaW9uLiAgRm9yIAorICAgIHN0cnVjdHVyZXMsIHRoZSB2ZXJzaW9uIHNoYWxsIGJlIHNldCBieSB0aGUgZW50aXR5IHRoYXQgYWxsb2NhdGVzIHRoZQorICAgIHN0cnVjdHVyZS4gIEZvciBzdHJ1Y3R1cmVzIHNwZWNpZmllZCBpbiB0aGUgT01YIDEuMSBzcGVjaWZpY2F0aW9uLCB0aGUKKyAgICB2YWx1ZSBvZiB0aGUgdmVyc2lvbiBzaGFsbCBiZSBzZXQgdG8gMS4xLjAuMCBpbiBhbGwgY2FzZXMuICBBY2Nlc3MgdG8gdGhlCisgICAgT01YX1ZFUlNJT05UWVBFIGNhbiBiZSBieSBhIHNpbmdsZSAzMiBiaXQgYWNjZXNzIChlLmcuIGJ5IG5WZXJzaW9uKSBvcgorICAgIGJ5IGFjY2Vzc2luZyBvbmUgb2YgdGhlIHN0cnVjdHVyZSBlbGVtZW50cyB0bywgZm9yIGV4YW1wbGUsIGNoZWNrIG9ubHkKKyAgICB0aGUgTWFqb3IgcmV2aXNpb24uCisgKi8KK3R5cGVkZWYgdW5pb24gT01YX1ZFUlNJT05UWVBFCit7CisgICAgc3RydWN0CisgICAgeworICAgICAgICBPTVhfVTggblZlcnNpb25NYWpvcjsgICAvKio8IE1ham9yIHZlcnNpb24gYWNjZXNzb3IgZWxlbWVudCAqLworICAgICAgICBPTVhfVTggblZlcnNpb25NaW5vcjsgICAvKio8IE1pbm9yIHZlcnNpb24gYWNjZXNzb3IgZWxlbWVudCAqLworICAgICAgICBPTVhfVTggblJldmlzaW9uOyAgICAgICAvKio8IFJldmlzaW9uIHZlcnNpb24gYWNjZXNzb3IgZWxlbWVudCAqLworICAgICAgICBPTVhfVTggblN0ZXA7ICAgICAgICAgICAvKio8IFN0ZXAgdmVyc2lvbiBhY2Nlc3NvciBlbGVtZW50ICovCisgICAgfSBzOworICAgIE9NWF9VMzIgblZlcnNpb247ICAgICAgICAgICAvKio8IDMyIGJpdCB2YWx1ZSB0byBtYWtlIGFjY2Vzc2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb24gZWFzaWx5IGRvbmUgaW4gYSBzaW5nbGUgd29yZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSBjb3B5L2NvbXBhcmUgb3BlcmF0aW9uICovCit9IE9NWF9WRVJTSU9OVFlQRTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmCisvKiBGaWxlIEVPRiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9vcGVubWF4L09NWF9WaWRlby5oIGIvaW5jbHVkZS9tZWRpYS9vcGVubWF4L09NWF9WaWRlby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmODQ4NWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL21lZGlhL29wZW5tYXgvT01YX1ZpZGVvLmgKQEAgLTAsMCArMSwxMDc4IEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIENvcHlyaWdodCAoQykgMTk5OC0yMDA5IFBhY2tldFZpZGVvCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyCisgKiBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMKKyAqIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworLyoqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggVGhlIEtocm9ub3MgR3JvdXAgSW5jLiAKKyAqIAorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0CisgKiB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6IAorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAKKyAqIAorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAorICogVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKKyAqIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAKKyAqCisgKi8KKworLyoqIAorICogIEBmaWxlIE9NWF9WaWRlby5oIC0gT3Blbk1heCBJTCB2ZXJzaW9uIDEuMS4yCisgKiAgVGhlIHN0cnVjdHVyZXMgaXMgbmVlZGVkIGJ5IFZpZGVvIGNvbXBvbmVudHMgdG8gZXhjaGFuZ2UgcGFyYW1ldGVycyAKKyAqICBhbmQgY29uZmlndXJhdGlvbiBkYXRhIHdpdGggT01YIGNvbXBvbmVudHMuCisgKi8KKyNpZm5kZWYgT01YX1ZpZGVvX2gKKyNkZWZpbmUgT01YX1ZpZGVvX2gKKworLyoqIEBkZWZncm91cCB2aWRlbyBPcGVuTUFYIElMIFZpZGVvIERvbWFpbgorICogQGluZ3JvdXAgaXYKKyAqIFN0cnVjdHVyZXMgZm9yIE9wZW5NQVggSUwgVmlkZW8gZG9tYWluCisgKiBAeworICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworCisvKioKKyAqIEVhY2ggT01YIGhlYWRlciBtdXN0IGluY2x1ZGUgYWxsIHJlcXVpcmVkIGhlYWRlciBmaWxlcyB0byBhbGxvdyB0aGUKKyAqIGhlYWRlciB0byBjb21waWxlIHdpdGhvdXQgZXJyb3JzLiAgVGhlIGluY2x1ZGVzIGJlbG93IGFyZSByZXF1aXJlZAorICogZm9yIHRoaXMgaGVhZGVyIGZpbGUgdG8gY29tcGlsZSBzdWNjZXNzZnVsbHkgCisgKi8KKworI2luY2x1ZGUgPE9NWF9JVkNvbW1vbi5oPgorCisKKy8qKgorICogRW51bWVyYXRpb24gdXNlZCB0byBkZWZpbmUgdGhlIHBvc3NpYmxlIHZpZGVvIGNvbXByZXNzaW9uIGNvZGluZ3MuICAKKyAqIE5PVEU6ICBUaGlzIGVzc2VudGlhbGx5IHJlZmVycyB0byBmaWxlIGV4dGVuc2lvbnMuIElmIHRoZSBjb2RpbmcgaXMgCisgKiAgICAgICAgYmVpbmcgdXNlZCB0byBzcGVjaWZ5IHRoZSBFTkNPREUgdHlwZSwgdGhlbiBhZGRpdGlvbmFsIHdvcmsgCisgKiAgICAgICAgbXVzdCBiZSBkb25lIHRvIGNvbmZpZ3VyZSB0aGUgZXhhY3QgZmxhdm9yIG9mIHRoZSBjb21wcmVzc2lvbiAKKyAqICAgICAgICB0byBiZSB1c2VkLiAgRm9yIGRlY29kZSBjYXNlcyB3aGVyZSB0aGUgdXNlciBhcHBsaWNhdGlvbiBjYW4gCisgKiAgICAgICAgbm90IGRpZmZlcmVudGlhdGUgYmV0d2VlbiBNUEVHLTQgYW5kIEguMjY0IGJpdCBzdHJlYW1zLCBpdCBpcyAKKyAqICAgICAgICB1cCB0byB0aGUgY29kZWMgdG8gaGFuZGxlIHRoaXMuCisgKi8KK3R5cGVkZWYgZW51bSBPTVhfVklERU9fQ09ESU5HVFlQRSB7CisgICAgT01YX1ZJREVPX0NvZGluZ1VudXNlZCwgICAgIC8qKjwgVmFsdWUgd2hlbiBjb2RpbmcgaXMgTi9BICovCisgICAgT01YX1ZJREVPX0NvZGluZ0F1dG9EZXRlY3QsIC8qKjwgQXV0b2RldGVjdGlvbiBvZiBjb2RpbmcgdHlwZSAqLworICAgIE9NWF9WSURFT19Db2RpbmdNUEVHMiwgICAgICAvKio8IEFLQTogSC4yNjIgKi8KKyAgICBPTVhfVklERU9fQ29kaW5nSDI2MywgICAgICAgLyoqPCBILjI2MyAqLworICAgIE9NWF9WSURFT19Db2RpbmdNUEVHNCwgICAgICAvKio8IE1QRUctNCAqLworICAgIE9NWF9WSURFT19Db2RpbmdXTVYsICAgICAgICAvKio8IGFsbCB2ZXJzaW9ucyBvZiBXaW5kb3dzIE1lZGlhIFZpZGVvICovCisgICAgT01YX1ZJREVPX0NvZGluZ1JWLCAgICAgICAgIC8qKjwgYWxsIHZlcnNpb25zIG9mIFJlYWwgVmlkZW8gKi8KKyAgICBPTVhfVklERU9fQ29kaW5nQVZDLCAgICAgICAgLyoqPCBILjI2NC9BVkMgKi8KKyAgICBPTVhfVklERU9fQ29kaW5nTUpQRUcsICAgICAgLyoqPCBNb3Rpb24gSlBFRyAqLworICAgIE9NWF9WSURFT19Db2RpbmdWUFgsICAgICAgICAvKio8IEdvb2dsZSBWUFgsIGZvcm1lcmx5IGtub3duIGFzIE9uMiBWUDggKi8KKyAgICBPTVhfVklERU9fQ29kaW5nS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIE9NWF9WSURFT19Db2RpbmdWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLworICAgIE9NWF9WSURFT19Db2RpbmdNYXggPSAweDdGRkZGRkZGCit9IE9NWF9WSURFT19DT0RJTkdUWVBFOworCisKKy8qKgorICogRGF0YSBzdHJ1Y3R1cmUgdXNlZCB0byBkZWZpbmUgYSB2aWRlbyBwYXRoLiAgVGhlIG51bWJlciBvZiBWaWRlbyBwYXRocyBmb3IgCisgKiBpbnB1dCBhbmQgb3V0cHV0IHdpbGwgdmFyeSBieSB0eXBlIG9mIHRoZSBWaWRlbyBjb21wb25lbnQuICAKKyAqIAorICogICAgSW5wdXQgKGFrYSBTb3VyY2UpIDogemVybyBJbnB1dHMsIG9uZSBPdXRwdXQsCisgKiAgICBTcGxpdHRlciAgICAgICAgICAgOiBvbmUgSW5wdXQsIDIgb3IgbW9yZSBPdXRwdXRzLAorICogICAgUHJvY2Vzc2luZyBFbGVtZW50IDogb25lIElucHV0LCBvbmUgb3V0cHV0LAorICogICAgTWl4ZXIgICAgICAgICAgICAgIDogMiBvciBtb3JlIGlucHV0cywgb25lIG91dHB1dCwKKyAqICAgIE91dHB1dCAoYWthIFNpbmspICA6IG9uZSBJbnB1dCwgemVybyBvdXRwdXRzLgorICogCisgKiBUaGUgUG9ydERlZmluaXRpb24gc3RydWN0dXJlIGlzIHVzZWQgdG8gZGVmaW5lIGFsbCBvZiB0aGUgcGFyYW1ldGVycyAKKyAqIG5lY2Vzc2FyeSBmb3IgdGhlIGNvbXBsaWFudCBjb21wb25lbnQgdG8gc2V0dXAgYW4gaW5wdXQgb3IgYW4gb3V0cHV0IHZpZGVvIAorICogcGF0aC4gIElmIGFkZGl0aW9uYWwgdmVuZG9yIHNwZWNpZmljIGRhdGEgaXMgcmVxdWlyZWQsIGl0IHNob3VsZCBiZSAKKyAqIHRyYW5zbWl0dGVkIHRvIHRoZSBjb21wb25lbnQgdXNpbmcgdGhlIEN1c3RvbUNvbW1hbmQgZnVuY3Rpb24uICBDb21wbGlhbnQgCisgKiBjb21wb25lbnRzIHdpbGwgcHJlcG9wdWxhdGUgdGhpcyBzdHJ1Y3R1cmUgd2l0aCBvcHRpbWFsIHZhbHVlcyBkdXJpbmcgdGhlIAorICogR2V0RGVmYXVsdEluaXRQYXJhbXMgY29tbWFuZC4KKyAqCisgKiBTVFJVQ1QgTUVNQkVSUzoKKyAqICBjTUlNRVR5cGUgICAgICAgICAgICAgOiBNSU1FIHR5cGUgb2YgZGF0YSBmb3IgdGhlIHBvcnQKKyAqICBwTmF0aXZlUmVuZGVyICAgICAgICAgOiBQbGF0Zm9ybSBzcGVjaWZpYyByZWZlcmVuY2UgZm9yIGEgZGlzcGxheSBpZiBhIAorICogICAgICAgICAgICAgICAgICAgICAgICAgIHN5bmMsIG90aGVyd2lzZSB0aGlzIGZpZWxkIGlzIDAKKyAqICBuRnJhbWVXaWR0aCAgICAgICAgICAgOiBXaWR0aCBvZiBmcmFtZSB0byBiZSB1c2VkIG9uIGNoYW5uZWwgaWYgCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdW5jb21wcmVzc2VkIGZvcm1hdCBpcyB1c2VkLiAgVXNlIDAgZm9yIHVua25vd24sCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uJ3QgY2FyZSBvciB2YXJpYWJsZQorICogIG5GcmFtZUhlaWdodCAgICAgICAgICA6IEhlaWdodCBvZiBmcmFtZSB0byBiZSB1c2VkIG9uIGNoYW5uZWwgaWYgCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdW5jb21wcmVzc2VkIGZvcm1hdCBpcyB1c2VkLiBVc2UgMCBmb3IgdW5rbm93biwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBkb24ndCBjYXJlIG9yIHZhcmlhYmxlCisgKiAgblN0cmlkZSAgICAgICAgICAgICAgIDogTnVtYmVyIG9mIGJ5dGVzIHBlciBzcGFuIG9mIGFuIGltYWdlIAorICogICAgICAgICAgICAgICAgICAgICAgICAgIChpLmUuIGluZGljYXRlcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGdldAorICogICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gc3BhbiBOIHRvIHNwYW4gTisxLCB3aGVyZSBuZWdhdGl2ZSBzdHJpZGUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2F0ZXMgdGhlIGltYWdlIGlzIGJvdHRvbSB1cAorICogIG5TbGljZUhlaWdodCAgICAgICAgICA6IEhlaWdodCB1c2VkIHdoZW4gZW5jb2RpbmcgaW4gc2xpY2VzCisgKiAgbkJpdHJhdGUgICAgICAgICAgICAgIDogQml0IHJhdGUgb2YgZnJhbWUgdG8gYmUgdXNlZCBvbiBjaGFubmVsIGlmIAorICogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzZWQgZm9ybWF0IGlzIHVzZWQuIFVzZSAwIGZvciB1bmtub3duLCAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBkb24ndCBjYXJlIG9yIHZhcmlhYmxlCisgKiAgeEZyYW1lcmF0ZSAgICAgICAgICAgIDogRnJhbWUgcmF0ZSB0byBiZSB1c2VkIG9uIGNoYW5uZWwgaWYgdW5jb21wcmVzc2VkIAorICogICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCBpcyB1c2VkLiBVc2UgMCBmb3IgdW5rbm93biwgZG9uJ3QgY2FyZSBvciAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4gIFVuaXRzIGFyZSBRMTYgZnJhbWVzIHBlciBzZWNvbmQuCisgKiAgYkZsYWdFcnJvckNvbmNlYWxtZW50IDogVHVybnMgb24gZXJyb3IgY29uY2VhbG1lbnQgaWYgaXQgaXMgc3VwcG9ydGVkIGJ5IAorICogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBPTVggY29tcG9uZW50CisgKiAgZUNvbXByZXNzaW9uRm9ybWF0ICAgIDogQ29tcHJlc3Npb24gZm9ybWF0IHVzZWQgaW4gdGhpcyBpbnN0YW5jZSBvZiB0aGUgCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LiBXaGVuIE9NWF9WSURFT19Db2RpbmdVbnVzZWQgaXMgCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkLCBlQ29sb3JGb3JtYXQgaXMgdXNlZAorICogIGVDb2xvckZvcm1hdCA6IERlY29tcHJlc3NlZCBmb3JtYXQgdXNlZCBieSB0aGlzIGNvbXBvbmVudAorICogIHBOYXRpdmVXaW5kb3cgOiBQbGF0Zm9ybSBzcGVjaWZpYyByZWZlcmVuY2UgZm9yIGEgd2luZG93IG9iamVjdCBpZiBhIAorICogICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXkgc2luayAsIG90aGVyd2lzZSB0aGlzIGZpZWxkIGlzIDB4MC4gCisgKi8KK3R5cGVkZWYgc3RydWN0IE9NWF9WSURFT19QT1JUREVGSU5JVElPTlRZUEUgeworICAgIE9NWF9TVFJJTkcgY01JTUVUeXBlOworICAgIE9NWF9OQVRJVkVfREVWSUNFVFlQRSBwTmF0aXZlUmVuZGVyOworICAgIE9NWF9VMzIgbkZyYW1lV2lkdGg7CisgICAgT01YX1UzMiBuRnJhbWVIZWlnaHQ7CisgICAgT01YX1MzMiBuU3RyaWRlOworICAgIE9NWF9VMzIgblNsaWNlSGVpZ2h0OworICAgIE9NWF9VMzIgbkJpdHJhdGU7CisgICAgT01YX1UzMiB4RnJhbWVyYXRlOworICAgIE9NWF9CT09MIGJGbGFnRXJyb3JDb25jZWFsbWVudDsKKyAgICBPTVhfVklERU9fQ09ESU5HVFlQRSBlQ29tcHJlc3Npb25Gb3JtYXQ7CisgICAgT01YX0NPTE9SX0ZPUk1BVFRZUEUgZUNvbG9yRm9ybWF0OworICAgIE9NWF9OQVRJVkVfV0lORE9XVFlQRSBwTmF0aXZlV2luZG93OworfSBPTVhfVklERU9fUE9SVERFRklOSVRJT05UWVBFOworCisvKiogIAorICogUG9ydCBmb3JtYXQgcGFyYW1ldGVyLiAgVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBlbnVtZXJhdGUgdGhlIHZhcmlvdXMgCisgKiBkYXRhIGlucHV0L291dHB1dCBmb3JtYXQgc3VwcG9ydGVkIGJ5IHRoZSBwb3J0LgorICogCisgKiBTVFJVQ1QgTUVNQkVSUzoKKyAqICBuU2l6ZSAgICAgICAgICAgICAgOiBTaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMKKyAqICBuVmVyc2lvbiAgICAgICAgICAgOiBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uCisgKiAgblBvcnRJbmRleCAgICAgICAgIDogSW5kaWNhdGVzIHdoaWNoIHBvcnQgdG8gc2V0CisgKiAgbkluZGV4ICAgICAgICAgICAgIDogSW5kaWNhdGVzIHRoZSBlbnVtZXJhdGlvbiBpbmRleCBmb3IgdGhlIGZvcm1hdCBmcm9tIAorICogICAgICAgICAgICAgICAgICAgICAgIDB4MCB0byBOLTEKKyAqICBlQ29tcHJlc3Npb25Gb3JtYXQgOiBDb21wcmVzc2lvbiBmb3JtYXQgdXNlZCBpbiB0aGlzIGluc3RhbmNlIG9mIHRoZSAKKyAqICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQuIFdoZW4gT01YX1ZJREVPX0NvZGluZ1VudXNlZCBpcyBzcGVjaWZpZWQsIAorICogICAgICAgICAgICAgICAgICAgICAgIGVDb2xvckZvcm1hdCBpcyB1c2VkIAorICogIGVDb2xvckZvcm1hdCAgICAgICA6IERlY29tcHJlc3NlZCBmb3JtYXQgdXNlZCBieSB0aGlzIGNvbXBvbmVudAorICogIHhGcmFtZVJhdGUgICAgICAgICA6IEluZGljYXRlcyB0aGUgdmlkZW8gZnJhbWUgcmF0ZSBpbiBRMTYgZm9ybWF0CisgKi8KK3R5cGVkZWYgc3RydWN0IE9NWF9WSURFT19QQVJBTV9QT1JURk9STUFUVFlQRSB7CisgICAgT01YX1UzMiBuU2l6ZTsKKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247CisgICAgT01YX1UzMiBuUG9ydEluZGV4OworICAgIE9NWF9VMzIgbkluZGV4OworICAgIE9NWF9WSURFT19DT0RJTkdUWVBFIGVDb21wcmVzc2lvbkZvcm1hdDsgCisgICAgT01YX0NPTE9SX0ZPUk1BVFRZUEUgZUNvbG9yRm9ybWF0OworICAgIE9NWF9VMzIgeEZyYW1lcmF0ZTsKK30gT01YX1ZJREVPX1BBUkFNX1BPUlRGT1JNQVRUWVBFOworCisKKy8qKgorICogVGhpcyBpcyBhIHN0cnVjdHVyZSBmb3IgY29uZmlndXJpbmcgdmlkZW8gY29tcHJlc3Npb24gcXVhbnRpemF0aW9uIAorICogcGFyYW1ldGVyIHZhbHVlcy4gIENvZGVjcyBtYXkgc3VwcG9ydCBkaWZmZXJlbnQgUVAgdmFsdWVzIGZvciBkaWZmZXJlbnQKKyAqIGZyYW1lIHR5cGVzLgorICoKKyAqIFNUUlVDVCBNRU1CRVJTOgorICogIG5TaXplICAgICAgOiBTaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMKKyAqICBuVmVyc2lvbiAgIDogT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvCisgKiAgblBvcnRJbmRleCA6IFBvcnQgdGhhdCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzIHRvCisgKiAgblFwSSAgICAgICA6IFFQIHZhbHVlIHRvIHVzZSBmb3IgaW5kZXggZnJhbWVzCisgKiAgblFwUCAgICAgICA6IFFQIHZhbHVlIHRvIHVzZSBmb3IgUCBmcmFtZXMKKyAqICBuUXBCICAgICAgIDogUVAgdmFsdWVzIHRvIHVzZSBmb3IgYmlkaXJlY3Rpb25hbCBmcmFtZXMgCisgKi8KK3R5cGVkZWYgc3RydWN0IE9NWF9WSURFT19QQVJBTV9RVUFOVElaQVRJT05UWVBFIHsKKyAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgIAorICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsKKyAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7CisgICAgT01YX1UzMiBuUXBJOworICAgIE9NWF9VMzIgblFwUDsKKyAgICBPTVhfVTMyIG5RcEI7Cit9IE9NWF9WSURFT19QQVJBTV9RVUFOVElaQVRJT05UWVBFOworCisKKy8qKiAKKyAqIFN0cnVjdHVyZSBmb3IgY29uZmlndXJhdGlvbiBvZiB2aWRlbyBmYXN0IHVwZGF0ZSBwYXJhbWV0ZXJzLiAKKyAqICAKKyAqIFNUUlVDVCBNRU1CRVJTOgorICogIG5TaXplICAgICAgOiBTaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMKKyAqICBuVmVyc2lvbiAgIDogT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvIAorICogIG5Qb3J0SW5kZXggOiBQb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0bworICogIGJFbmFibGVWRlUgOiBFbmFibGUvRGlzYWJsZSB2aWRlbyBmYXN0IHVwZGF0ZQorICogIG5GaXJzdEdPQiAgOiBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiB0aGUgZmlyc3QgbWFjcm9ibG9jayByb3cKKyAqICBuRmlyc3RNQiAgIDogc3BlY2lmaWVzIHRoZSBmaXJzdCBNQiByZWxhdGl2ZSB0byB0aGUgc3BlY2lmaWVkIGZpcnN0IEdPQgorICogIG5OdW1NQnMgICAgOiBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBNQnMgdG8gYmUgcmVmcmVzaGVkIGZyb20gbkZpcnN0R09CIAorICogICAgICAgICAgICAgICBhbmQgbkZpcnN0TUIKKyAqLwordHlwZWRlZiBzdHJ1Y3QgT01YX1ZJREVPX1BBUkFNX1ZJREVPRkFTVFVQREFURVRZUEUgeworICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgCisgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAKKyAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7ICAgICAgIAorICAgIE9NWF9CT09MIGJFbmFibGVWRlU7ICAgICAgCisgICAgT01YX1UzMiBuRmlyc3RHT0I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIE9NWF9VMzIgbkZpcnN0TUI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIE9NWF9VMzIgbk51bU1CczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCit9IE9NWF9WSURFT19QQVJBTV9WSURFT0ZBU1RVUERBVEVUWVBFOworCisKKy8qKiAKKyAqIEVudW1lcmF0aW9uIG9mIHBvc3NpYmxlIGJpdHJhdGUgY29udHJvbCB0eXBlcyAKKyAqLwordHlwZWRlZiBlbnVtIE9NWF9WSURFT19DT05UUk9MUkFURVRZUEUgeworICAgIE9NWF9WaWRlb19Db250cm9sUmF0ZURpc2FibGUsCisgICAgT01YX1ZpZGVvX0NvbnRyb2xSYXRlVmFyaWFibGUsCisgICAgT01YX1ZpZGVvX0NvbnRyb2xSYXRlQ29uc3RhbnQsCisgICAgT01YX1ZpZGVvX0NvbnRyb2xSYXRlVmFyaWFibGVTa2lwRnJhbWVzLAorICAgIE9NWF9WaWRlb19Db250cm9sUmF0ZUNvbnN0YW50U2tpcEZyYW1lcywKKyAgICBPTVhfVmlkZW9fQ29udHJvbFJhdGVLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICAgT01YX1ZpZGVvX0NvbnRyb2xSYXRlVmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KKyAgICBPTVhfVmlkZW9fQ29udHJvbFJhdGVNYXggPSAweDdGRkZGRkZGCit9IE9NWF9WSURFT19DT05UUk9MUkFURVRZUEU7CisKKworLyoqIAorICogU3RydWN0dXJlIGZvciBjb25maWd1cmluZyBiaXRyYXRlIG1vZGUgb2YgYSBjb2RlYy4gCisgKgorICogU1RSVUNUIE1FTUJFUlM6CisgKiAgblNpemUgICAgICAgICAgOiBTaXplIG9mIHRoZSBzdHJ1Y3QgaW4gYnl0ZXMKKyAqICBuVmVyc2lvbiAgICAgICA6IE9NWCBzcGVjIHZlcnNpb24gaW5mbworICogIG5Qb3J0SW5kZXggICAgIDogUG9ydCB0aGF0IHRoaXMgc3RydWN0IGFwcGxpZXMgdG8KKyAqICBlQ29udHJvbFJhdGUgICA6IENvbnRyb2wgcmF0ZSB0eXBlIGVudW0KKyAqICBuVGFyZ2V0Qml0cmF0ZSA6IFRhcmdldCBiaXRyYXRlIHRvIGVuY29kZSB3aXRoCisgKi8KK3R5cGVkZWYgc3RydWN0IE9NWF9WSURFT19QQVJBTV9CSVRSQVRFVFlQRSB7CisgICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgICAgICAgICAgICAgICAKKyAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7ICAgICAgICAgICAgICAgICAgICAgCisgICAgT01YX1ZJREVPX0NPTlRST0xSQVRFVFlQRSBlQ29udHJvbFJhdGU7IAorICAgIE9NWF9VMzIgblRhcmdldEJpdHJhdGU7ICAgICAgICAgICAgICAgICAKK30gT01YX1ZJREVPX1BBUkFNX0JJVFJBVEVUWVBFOworCisKKy8qKiAKKyAqIEVudW1lcmF0aW9uIG9mIHBvc3NpYmxlIG1vdGlvbiB2ZWN0b3IgKE1WKSB0eXBlcyAKKyAqLwordHlwZWRlZiBlbnVtIE9NWF9WSURFT19NT1RJT05WRUNUT1JUWVBFIHsKKyAgICBPTVhfVmlkZW9fTW90aW9uVmVjdG9yUGl4ZWwsCisgICAgT01YX1ZpZGVvX01vdGlvblZlY3RvckhhbGZQZWwsCisgICAgT01YX1ZpZGVvX01vdGlvblZlY3RvclF1YXJ0ZXJQZWwsCisgICAgT01YX1ZpZGVvX01vdGlvblZlY3RvckVpZ2h0aFBlbCwKKyAgICBPTVhfVmlkZW9fTW90aW9uVmVjdG9yS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIE9NWF9WaWRlb19Nb3Rpb25WZWN0b3JWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLworICAgIE9NWF9WaWRlb19Nb3Rpb25WZWN0b3JNYXggPSAweDdGRkZGRkZGCit9IE9NWF9WSURFT19NT1RJT05WRUNUT1JUWVBFOworCisKKy8qKgorICogU3RydWN0dXJlIGZvciBjb25maWd1cmluZyB0aGUgbnVtYmVyIG9mIG1vdGlvbiB2ZWN0b3JzIHVzZWQgYXMgd2VsbAorICogYXMgdGhlaXIgYWNjdXJhY3kuCisgKiAKKyAqIFNUUlVDVCBNRU1CRVJTOgorICogIG5TaXplICAgICAgICAgICAgOiBTaXplIG9mIHRoZSBzdHJ1Y3QgaW4gYnl0ZXMKKyAqICBuVmVyc2lvbiAgICAgICAgIDogT01YIHNwZWMgdmVyc2lvbiBpbmZvCisgKiAgblBvcnRJbmRleCAgICAgICA6IHBvcnQgdGhhdCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzIHRvCisgKiAgZUFjY3VyYWN5ICAgICAgICA6IEVudW1lcmF0ZWQgTVYgYWNjdXJhY3kKKyAqICBiVW5yZXN0cmljdGVkTVZzIDogQWxsb3cgdW5yZXN0cmljdGVkIE1WcworICogIGJGb3VyTVYgICAgICAgICAgOiBBbGxvdyB1c2Ugb2YgNCBNVnMKKyAqICBzWFNlYXJjaFJhbmdlICAgIDogU2VhcmNoIHJhbmdlIGluIGhvcml6b250YWwgZGlyZWN0aW9uIGZvciBNVnMKKyAqICBzWVNlYXJjaFJhbmdlICAgIDogU2VhcmNoIHJhbmdlIGluIHZlcnRpY2FsIGRpcmVjdGlvbiBmb3IgTVZzCisgKi8KK3R5cGVkZWYgc3RydWN0IE9NWF9WSURFT19QQVJBTV9NT1RJT05WRUNUT1JUWVBFIHsKKyAgICBPTVhfVTMyIG5TaXplOworICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsKKyAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7CisgICAgT01YX1ZJREVPX01PVElPTlZFQ1RPUlRZUEUgZUFjY3VyYWN5OworICAgIE9NWF9CT09MIGJVbnJlc3RyaWN0ZWRNVnM7CisgICAgT01YX0JPT0wgYkZvdXJNVjsKKyAgICBPTVhfUzMyIHNYU2VhcmNoUmFuZ2U7CisgICAgT01YX1MzMiBzWVNlYXJjaFJhbmdlOworfSBPTVhfVklERU9fUEFSQU1fTU9USU9OVkVDVE9SVFlQRTsKKworCisvKiogCisgKiBFbnVtZXJhdGlvbiBvZiBwb3NzaWJsZSBtZXRob2RzIHRvIHVzZSBmb3IgSW50cmEgUmVmcmVzaCAKKyAqLwordHlwZWRlZiBlbnVtIE9NWF9WSURFT19JTlRSQVJFRlJFU0hUWVBFIHsKKyAgICBPTVhfVklERU9fSW50cmFSZWZyZXNoQ3ljbGljLAorICAgIE9NWF9WSURFT19JbnRyYVJlZnJlc2hBZGFwdGl2ZSwKKyAgICBPTVhfVklERU9fSW50cmFSZWZyZXNoQm90aCwKKyAgICBPTVhfVklERU9fSW50cmFSZWZyZXNoS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIE9NWF9WSURFT19JbnRyYVJlZnJlc2hWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLworICAgIE9NWF9WSURFT19JbnRyYVJlZnJlc2hNYXggPSAweDdGRkZGRkZGCit9IE9NWF9WSURFT19JTlRSQVJFRlJFU0hUWVBFOworCisKKy8qKgorICogU3RydWN0dXJlIGZvciBjb25maWd1cmluZyBpbnRyYSByZWZyZXNoIG1vZGUgCisgKiAKKyAqIFNUUlVDVCBNRU1CRVJTOgorICogIG5TaXplICAgICAgICA6IFNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcworICogIG5WZXJzaW9uICAgICA6IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24KKyAqICBuUG9ydEluZGV4ICAgOiBQb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0bworICogIGVSZWZyZXNoTW9kZSA6IEN5Y2xpYywgQWRhcHRpdmUsIG9yIEJvdGgKKyAqICBuQWlyTUJzICAgICAgOiBOdW1iZXIgb2YgaW50cmEgbWFjcm9ibG9ja3MgdG8gcmVmcmVzaCBpbiBhIGZyYW1lIHdoZW4gCisgKiAgICAgICAgICAgICAgICAgQUlSIGlzIGVuYWJsZWQKKyAqICBuQWlyUmVmICAgICAgOiBOdW1iZXIgb2YgdGltZXMgYSBtb3Rpb24gbWFya2VkIG1hY3JvYmxvY2sgaGFzIHRvIGJlICAKKyAqICAgICAgICAgICAgICAgICBpbnRyYSBjb2RlZAorICogIG5DaXJNQnMgICAgICA6IE51bWJlciBvZiBjb25zZWN1dGl2ZSBtYWNyb2Jsb2NrcyB0byBiZSBjb2RlZCBhcyAiaW50cmEiICAKKyAqICAgICAgICAgICAgICAgICB3aGVuIENJUiBpcyBlbmFibGVkCisgKi8KK3R5cGVkZWYgc3RydWN0IE9NWF9WSURFT19QQVJBTV9JTlRSQVJFRlJFU0hUWVBFIHsKKyAgICBPTVhfVTMyIG5TaXplOworICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsKKyAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7CisgICAgT01YX1ZJREVPX0lOVFJBUkVGUkVTSFRZUEUgZVJlZnJlc2hNb2RlOworICAgIE9NWF9VMzIgbkFpck1CczsKKyAgICBPTVhfVTMyIG5BaXJSZWY7CisgICAgT01YX1UzMiBuQ2lyTUJzOworfSBPTVhfVklERU9fUEFSQU1fSU5UUkFSRUZSRVNIVFlQRTsKKworCisvKioKKyAqIFN0cnVjdHVyZSBmb3IgZW5hYmxpbmcgdmFyaW91cyBlcnJvciBjb3JyZWN0aW9uIG1ldGhvZHMgZm9yIHZpZGVvIAorICogY29tcHJlc3Npb24uCisgKgorICogU1RSVUNUIE1FTUJFUlM6CisgKiAgblNpemUgICAgICAgICAgICAgICAgICAgOiBTaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMKKyAqICBuVmVyc2lvbiAgICAgICAgICAgICAgICA6IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24gCisgKiAgblBvcnRJbmRleCAgICAgICAgICAgICAgOiBQb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0byAKKyAqICBiRW5hYmxlSEVDICAgICAgICAgICAgICA6IEVuYWJsZS9kaXNhYmxlIGhlYWRlciBleHRlbnNpb24gY29kZXMgKEhFQykKKyAqICBiRW5hYmxlUmVzeW5jICAgICAgICAgICA6IEVuYWJsZS9kaXNhYmxlIHJlc3luY2hyb25pemF0aW9uIG1hcmtlcnMKKyAqICBuUmVzeW5jaE1hcmtlclNwYWNpbmcgICA6IFJlc3luY2ggbWFya2VycyBpbnRlcnZhbCAoaW4gYml0cykgdG8gYmUgCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWVkIGluIHRoZSBzdHJlYW0gCisgKiAgYkVuYWJsZURhdGFQYXJ0aXRpb25pbmcgOiBFbmFibGUvZGlzYWJsZSBkYXRhIHBhcnRpdGlvbmluZyAKKyAqICBiRW5hYmxlUlZMQyAgICAgICAgICAgICA6IEVuYWJsZS9kaXNhYmxlIHJldmVyc2libGUgdmFyaWFibGUgbGVuZ3RoIAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kaW5nCisgKi8KK3R5cGVkZWYgc3RydWN0IE9NWF9WSURFT19QQVJBTV9FUlJPUkNPUlJFQ1RJT05UWVBFIHsKKyAgICBPTVhfVTMyIG5TaXplOworICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsKKyAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7CisgICAgT01YX0JPT0wgYkVuYWJsZUhFQzsKKyAgICBPTVhfQk9PTCBiRW5hYmxlUmVzeW5jOworICAgIE9NWF9VMzIgIG5SZXN5bmNoTWFya2VyU3BhY2luZzsKKyAgICBPTVhfQk9PTCBiRW5hYmxlRGF0YVBhcnRpdGlvbmluZzsKKyAgICBPTVhfQk9PTCBiRW5hYmxlUlZMQzsKK30gT01YX1ZJREVPX1BBUkFNX0VSUk9SQ09SUkVDVElPTlRZUEU7CisKKworLyoqIAorICogQ29uZmlndXJhdGlvbiBvZiB2YXJpYWJsZSBibG9jay1zaXplIG1vdGlvbiBjb21wZW5zYXRpb24gKFZCU01DKSAKKyAqIAorICogU1RSVUNUIE1FTUJFUlM6CisgKiAgblNpemUgICAgICA6IFNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcworICogIG5WZXJzaW9uICAgOiBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uIAorICogIG5Qb3J0SW5kZXggOiBQb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0bworICogIGIxNngxNiAgICAgOiBFbmFibGUgaW50ZXIgYmxvY2sgc2VhcmNoIDE2eDE2CisgKiAgYjE2eDggICAgICA6IEVuYWJsZSBpbnRlciBibG9jayBzZWFyY2ggMTZ4OAorICogIGI4eDE2ICAgICAgOiBFbmFibGUgaW50ZXIgYmxvY2sgc2VhcmNoIDh4MTYKKyAqICBiOHg4ICAgICAgIDogRW5hYmxlIGludGVyIGJsb2NrIHNlYXJjaCA4eDgKKyAqICBiOHg0ICAgICAgIDogRW5hYmxlIGludGVyIGJsb2NrIHNlYXJjaCA4eDQKKyAqICBiNHg4ICAgICAgIDogRW5hYmxlIGludGVyIGJsb2NrIHNlYXJjaCA0eDgKKyAqICBiNHg0ICAgICAgIDogRW5hYmxlIGludGVyIGJsb2NrIHNlYXJjaCA0eDQKKyAqLwordHlwZWRlZiBzdHJ1Y3QgT01YX1ZJREVPX1BBUkFNX1ZCU01DVFlQRSB7CisgICAgT01YX1UzMiBuU2l6ZTsgCisgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAKKyAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7ICAgICAgIAorICAgIE9NWF9CT09MIGIxNngxNjsgCisgICAgT01YX0JPT0wgYjE2eDg7IAorICAgIE9NWF9CT09MIGI4eDE2OworICAgIE9NWF9CT09MIGI4eDg7CisgICAgT01YX0JPT0wgYjh4NDsKKyAgICBPTVhfQk9PTCBiNHg4OworICAgIE9NWF9CT09MIGI0eDQ7Cit9IE9NWF9WSURFT19QQVJBTV9WQlNNQ1RZUEU7CisKKworLyoqIAorICogSC4yNjMgcHJvZmlsZSB0eXBlcywgZWFjaCBwcm9maWxlIGluZGljYXRlcyBzdXBwb3J0IGZvciB2YXJpb3VzIAorICogcGVyZm9ybWFuY2UgYm91bmRzIGFuZCBkaWZmZXJlbnQgYW5uZXhlcy4KKyAqCisgKiBFTlVNUzoKKyAqICBCYXNlbGluZSAgICAgICAgICAgOiBCYXNlbGluZSBQcm9maWxlOiBILjI2MyAoVjEpLCBubyBvcHRpb25hbCBtb2RlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAqICBIMzIwIENvZGluZyAgICAgICAgOiBILjMyMCBDb2RpbmcgRWZmaWNpZW5jeSBCYWNrd2FyZCBDb21wYXRpYmlsaXR5IAorICogICAgICAgICAgICAgICAgICAgICAgIFByb2ZpbGU6IEguMjYzKyAoVjIpLCBpbmNsdWRlcyBhbm5leGVzIEksIEosIEwuNAorICogICAgICAgICAgICAgICAgICAgICAgIGFuZCBUCisgKiAgQmFja3dhcmRDb21wYXRpYmxlIDogQmFja3dhcmQgQ29tcGF0aWJpbGl0eSBQcm9maWxlOiBILjI2MyAoVjEpLCAKKyAqICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlcyBhbm5leCBGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgKiAgSVNXVjIgICAgICAgICAgICAgIDogSW50ZXJhY3RpdmUgU3RyZWFtaW5nIFdpcmVsZXNzIFByb2ZpbGU6IEguMjYzKyAKKyAqICAgICAgICAgICAgICAgICAgICAgICAoVjIpLCBpbmNsdWRlcyBhbm5leGVzIEksIEosIEsgYW5kIFQgICAgICAgICAgICAgICAgIAorICogIElTV1YzICAgICAgICAgICAgICA6IEludGVyYWN0aXZlIFN0cmVhbWluZyBXaXJlbGVzcyBQcm9maWxlOiBILjI2MysrICAKKyAqICAgICAgICAgICAgICAgICAgICAgICAoVjMpLCBpbmNsdWRlcyBwcm9maWxlIDMgYW5kIGFubmV4ZXMgViBhbmQgVy42LjMuOCAgIAorICogIEhpZ2hDb21wcmVzc2lvbiAgICA6IENvbnZlcnNhdGlvbmFsIEhpZ2ggQ29tcHJlc3Npb24gUHJvZmlsZTogSC4yNjMrKyAgCisgKiAgICAgICAgICAgICAgICAgICAgICAgKFYzKSwgaW5jbHVkZXMgcHJvZmlsZXMgMSAmIDIgYW5kIGFubmV4ZXMgRCBhbmQgVSAgIAorICogIEludGVybmV0ICAgICAgICAgICA6IENvbnZlcnNhdGlvbmFsIEludGVybmV0IFByb2ZpbGU6IEguMjYzKysgKFYzKSwgIAorICogICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVzIHByb2ZpbGUgNSBhbmQgYW5uZXggSyAgICAgICAgICAgICAgICAgICAgICAgCisgKiAgSW50ZXJsYWNlICAgICAgICAgIDogQ29udmVyc2F0aW9uYWwgSW50ZXJsYWNlIFByb2ZpbGU6IEguMjYzKysgKFYzKSwgIAorICogICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVzIHByb2ZpbGUgNSBhbmQgYW5uZXggVy42LjMuMTEgICAgICAgICAgICAgICAKKyAqICBIaWdoTGF0ZW5jeSAgICAgICAgOiBIaWdoIExhdGVuY3kgUHJvZmlsZTogSC4yNjMrKyAoVjMpLCBpbmNsdWRlcyAgCisgKiAgICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZSA2IGFuZCBhbm5leGVzIE8uMSBhbmQgUC41ICAgICAgICAgICAgICAgICAgICAgICAKKyAqLwordHlwZWRlZiBlbnVtIE9NWF9WSURFT19IMjYzUFJPRklMRVRZUEUgeworICAgIE9NWF9WSURFT19IMjYzUHJvZmlsZUJhc2VsaW5lICAgICAgICAgICAgPSAweDAxLCAgICAgICAgCisgICAgT01YX1ZJREVPX0gyNjNQcm9maWxlSDMyMENvZGluZyAgICAgICAgICA9IDB4MDIsICAgICAgICAgIAorICAgIE9NWF9WSURFT19IMjYzUHJvZmlsZUJhY2t3YXJkQ29tcGF0aWJsZSAgPSAweDA0LCAgCisgICAgT01YX1ZJREVPX0gyNjNQcm9maWxlSVNXVjIgICAgICAgICAgICAgICA9IDB4MDgsICAgICAgICAgICAgICAgCisgICAgT01YX1ZJREVPX0gyNjNQcm9maWxlSVNXVjMgICAgICAgICAgICAgICA9IDB4MTAsICAgICAgICAgICAgICAgCisgICAgT01YX1ZJREVPX0gyNjNQcm9maWxlSGlnaENvbXByZXNzaW9uICAgICA9IDB4MjAsICAgICAKKyAgICBPTVhfVklERU9fSDI2M1Byb2ZpbGVJbnRlcm5ldCAgICAgICAgICAgID0gMHg0MCwgICAgICAgICAgICAKKyAgICBPTVhfVklERU9fSDI2M1Byb2ZpbGVJbnRlcmxhY2UgICAgICAgICAgID0gMHg4MCwgICAgICAgICAgIAorICAgIE9NWF9WSURFT19IMjYzUHJvZmlsZUhpZ2hMYXRlbmN5ICAgICAgICAgPSAweDEwMCwgICAgICAgICAKKyAgICBPTVhfVklERU9fSDI2M1Byb2ZpbGVLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICAgT01YX1ZJREVPX0gyNjNQcm9maWxlVmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KKyAgICBPTVhfVklERU9fSDI2M1Byb2ZpbGVNYXggICAgICAgICAgICAgICAgID0gMHg3RkZGRkZGRiAgCit9IE9NWF9WSURFT19IMjYzUFJPRklMRVRZUEU7CisKKworLyoqIAorICogSC4yNjMgbGV2ZWwgdHlwZXMsIGVhY2ggbGV2ZWwgaW5kaWNhdGVzIHN1cHBvcnQgZm9yIHZhcmlvdXMgZnJhbWUgc2l6ZXMsIAorICogYml0IHJhdGVzLCBkZWNvZGVyIGZyYW1lIHJhdGVzLgorICovCit0eXBlZGVmIGVudW0gT01YX1ZJREVPX0gyNjNMRVZFTFRZUEUgeworICAgIE9NWF9WSURFT19IMjYzTGV2ZWwxMCAgPSAweDAxLCAgCisgICAgT01YX1ZJREVPX0gyNjNMZXZlbDIwICA9IDB4MDIsICAgICAgCisgICAgT01YX1ZJREVPX0gyNjNMZXZlbDMwICA9IDB4MDQsICAgICAgCisgICAgT01YX1ZJREVPX0gyNjNMZXZlbDQwICA9IDB4MDgsICAgICAgCisgICAgT01YX1ZJREVPX0gyNjNMZXZlbDQ1ICA9IDB4MTAsICAgICAgCisgICAgT01YX1ZJREVPX0gyNjNMZXZlbDUwICA9IDB4MjAsICAgICAgCisgICAgT01YX1ZJREVPX0gyNjNMZXZlbDYwICA9IDB4NDAsICAgICAgCisgICAgT01YX1ZJREVPX0gyNjNMZXZlbDcwICA9IDB4ODAsIAorICAgIE9NWF9WSURFT19IMjYzTGV2ZWxLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICAgT01YX1ZJREVPX0gyNjNMZXZlbFZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCisgICAgT01YX1ZJREVPX0gyNjNMZXZlbE1heCA9IDB4N0ZGRkZGRkYgIAorfSBPTVhfVklERU9fSDI2M0xFVkVMVFlQRTsKKworCisvKiogCisgKiBTcGVjaWZpZXMgdGhlIHBpY3R1cmUgdHlwZS4gVGhlc2UgdmFsdWVzIHNob3VsZCBiZSBPUidkIHRvIHNpZ25hbCBhbGwgCisgKiBwaWN0dXJlcyB0eXBlcyB3aGljaCBhcmUgYWxsb3dlZC4KKyAqCisgKiBFTlVNUzoKKyAqICBHZW5lcmljIFBpY3R1cmUgVHlwZXM6ICAgICAgICAgIEksIFAgYW5kIEIKKyAqICBILjI2MyBTcGVjaWZpYyBQaWN0dXJlIFR5cGVzOiAgIFNJIGFuZCBTUAorICogIEguMjY0IFNwZWNpZmljIFBpY3R1cmUgVHlwZXM6ICAgRUkgYW5kIEVQCisgKiAgTVBFRy00IFNwZWNpZmljIFBpY3R1cmUgVHlwZXM6ICBTCisgKi8KK3R5cGVkZWYgZW51bSBPTVhfVklERU9fUElDVFVSRVRZUEUgeworICAgIE9NWF9WSURFT19QaWN0dXJlVHlwZUkgICA9IDB4MDEsCisgICAgT01YX1ZJREVPX1BpY3R1cmVUeXBlUCAgID0gMHgwMiwKKyAgICBPTVhfVklERU9fUGljdHVyZVR5cGVCICAgPSAweDA0LAorICAgIE9NWF9WSURFT19QaWN0dXJlVHlwZVNJICA9IDB4MDgsCisgICAgT01YX1ZJREVPX1BpY3R1cmVUeXBlU1AgID0gMHgxMCwKKyAgICBPTVhfVklERU9fUGljdHVyZVR5cGVFSSAgPSAweDExLAorICAgIE9NWF9WSURFT19QaWN0dXJlVHlwZUVQICA9IDB4MTIsCisgICAgT01YX1ZJREVPX1BpY3R1cmVUeXBlUyAgID0gMHgxNCwKKyAgICBPTVhfVklERU9fUGljdHVyZVR5cGVLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICAgT01YX1ZJREVPX1BpY3R1cmVUeXBlVmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KKyAgICBPTVhfVklERU9fUGljdHVyZVR5cGVNYXggPSAweDdGRkZGRkZGCit9IE9NWF9WSURFT19QSUNUVVJFVFlQRTsKKworCisvKiogCisgKiBILjI2MyBQYXJhbXMgCisgKgorICogU1RSVUNUIE1FTUJFUlM6CisgKiAgblNpemUgICAgICAgICAgICAgICAgICAgIDogU2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzCisgKiAgblZlcnNpb24gICAgICAgICAgICAgICAgIDogT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAKKyAqICBuUG9ydEluZGV4ICAgICAgICAgICAgICAgOiBQb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0bworICogIG5QRnJhbWVzICAgICAgICAgICAgICAgICA6IE51bWJlciBvZiBQIGZyYW1lcyBiZXR3ZWVuIGVhY2ggSSBmcmFtZQorICogIG5CRnJhbWVzICAgICAgICAgICAgICAgICA6IE51bWJlciBvZiBCIGZyYW1lcyBiZXR3ZWVuIGVhY2ggSSBmcmFtZQorICogIGVQcm9maWxlICAgICAgICAgICAgICAgICA6IEguMjYzIHByb2ZpbGUocykgdG8gdXNlCisgKiAgZUxldmVsICAgICAgICAgICAgICAgICAgIDogSC4yNjMgbGV2ZWwocykgdG8gdXNlCisgKiAgYlBMVVNQVFlQRUFsbG93ZWQgICAgICAgIDogSW5kaWNhdGluZyB0aGF0IGl0IGlzIGFsbG93ZWQgdG8gdXNlIFBMVVNQVFlQRSAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3BlY2lmaWVkIGluIHRoZSAxOTk4IHZlcnNpb24gb2YgSC4yNjMpIHRvIAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGljYXRlIGN1c3RvbSBwaWN0dXJlIHNpemVzIG9yIGNsb2NrIAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZXF1ZW5jaWVzIAorICogIG5BbGxvd2VkUGljdHVyZVR5cGVzICAgICA6IFNwZWNpZmllcyB0aGUgcGljdHVyZSB0eXBlcyBhbGxvd2VkIGluIHRoZSAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRzdHJlYW0KKyAqICBiRm9yY2VSb3VuZGluZ1R5cGVUb1plcm8gOiB2YWx1ZSBvZiB0aGUgUlRZUEUgYml0IChiaXQgNiBvZiBNUFBUWVBFKSBpcyAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgY29uc3RyYWluZWQuIEl0IGlzIHJlY29tbWVuZGVkIHRvIGNoYW5nZSAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgdmFsdWUgb2YgdGhlIFJUWVBFIGJpdCBmb3IgZWFjaCByZWZlcmVuY2UgCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGljdHVyZSBpbiBlcnJvci1mcmVlIGNvbW11bmljYXRpb24KKyAqICBuUGljdHVyZUhlYWRlclJlcGV0aXRpb24gOiBTcGVjaWZpZXMgdGhlIGZyZXF1ZW5jeSBvZiBwaWN0dXJlIGhlYWRlciAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBldGl0aW9uCisgKiAgbkdPQkhlYWRlckludGVydmFsICAgICAgIDogU3BlY2lmaWVzIHRoZSBpbnRlcnZhbCBvZiBub24tZW1wdHkgR09CICAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzIGluIHVuaXRzIG9mIEdPQnMKKyAqLwordHlwZWRlZiBzdHJ1Y3QgT01YX1ZJREVPX1BBUkFNX0gyNjNUWVBFIHsKKyAgICBPTVhfVTMyIG5TaXplOworICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsKKyAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7CisgICAgT01YX1UzMiBuUEZyYW1lczsKKyAgICBPTVhfVTMyIG5CRnJhbWVzOworICAgIE9NWF9WSURFT19IMjYzUFJPRklMRVRZUEUgZVByb2ZpbGU7CisJT01YX1ZJREVPX0gyNjNMRVZFTFRZUEUgZUxldmVsOworICAgIE9NWF9CT09MIGJQTFVTUFRZUEVBbGxvd2VkOworICAgIE9NWF9VMzIgbkFsbG93ZWRQaWN0dXJlVHlwZXM7CisgICAgT01YX0JPT0wgYkZvcmNlUm91bmRpbmdUeXBlVG9aZXJvOworICAgIE9NWF9VMzIgblBpY3R1cmVIZWFkZXJSZXBldGl0aW9uOworICAgIE9NWF9VMzIgbkdPQkhlYWRlckludGVydmFsOworfSBPTVhfVklERU9fUEFSQU1fSDI2M1RZUEU7CisKKworLyoqIAorICogTVBFRy0yIHByb2ZpbGUgdHlwZXMsIGVhY2ggcHJvZmlsZSBpbmRpY2F0ZXMgc3VwcG9ydCBmb3IgdmFyaW91cyAKKyAqIHBlcmZvcm1hbmNlIGJvdW5kcyBhbmQgZGlmZmVyZW50IGFubmV4ZXMuCisgKi8KK3R5cGVkZWYgZW51bSBPTVhfVklERU9fTVBFRzJQUk9GSUxFVFlQRSB7CisgICAgT01YX1ZJREVPX01QRUcyUHJvZmlsZVNpbXBsZSA9IDAsICAvKio8IFNpbXBsZSBQcm9maWxlICovCisgICAgT01YX1ZJREVPX01QRUcyUHJvZmlsZU1haW4sICAgICAgICAvKio8IE1haW4gUHJvZmlsZSAqLworICAgIE9NWF9WSURFT19NUEVHMlByb2ZpbGU0MjIsICAgICAgICAgLyoqPCA0OjI6MiBQcm9maWxlICovCisgICAgT01YX1ZJREVPX01QRUcyUHJvZmlsZVNOUiwgICAgICAgICAvKio8IFNOUiBQcm9maWxlICovCisgICAgT01YX1ZJREVPX01QRUcyUHJvZmlsZVNwYXRpYWwsICAgICAvKio8IFNwYXRpYWwgUHJvZmlsZSAqLworICAgIE9NWF9WSURFT19NUEVHMlByb2ZpbGVIaWdoLCAgICAgICAgLyoqPCBIaWdoIFByb2ZpbGUgKi8KKyAgICBPTVhfVklERU9fTVBFRzJQcm9maWxlS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIE9NWF9WSURFT19NUEVHMlByb2ZpbGVWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLworICAgIE9NWF9WSURFT19NUEVHMlByb2ZpbGVNYXggPSAweDdGRkZGRkZGICAKK30gT01YX1ZJREVPX01QRUcyUFJPRklMRVRZUEU7CisKKworLyoqIAorICogTVBFRy0yIGxldmVsIHR5cGVzLCBlYWNoIGxldmVsIGluZGljYXRlcyBzdXBwb3J0IGZvciB2YXJpb3VzIGZyYW1lIAorICogc2l6ZXMsIGJpdCByYXRlcywgZGVjb2RlciBmcmFtZSByYXRlcy4gIE5vIG5lZWQgCisgKi8KK3R5cGVkZWYgZW51bSBPTVhfVklERU9fTVBFRzJMRVZFTFRZUEUgeworICAgIE9NWF9WSURFT19NUEVHMkxldmVsTEwgPSAwLCAgLyoqPCBMb3cgTGV2ZWwgKi8gCisgICAgT01YX1ZJREVPX01QRUcyTGV2ZWxNTCwgICAgICAvKio8IE1haW4gTGV2ZWwgKi8gCisgICAgT01YX1ZJREVPX01QRUcyTGV2ZWxIMTQsICAgICAvKio8IEhpZ2ggMTQ0MCAqLyAKKyAgICBPTVhfVklERU9fTVBFRzJMZXZlbEhMLCAgICAgIC8qKjwgSGlnaCBMZXZlbCAqLyAgIAorICAgIE9NWF9WSURFT19NUEVHMkxldmVsS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIE9NWF9WSURFT19NUEVHMkxldmVsVmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KKyAgICBPTVhfVklERU9fTVBFRzJMZXZlbE1heCA9IDB4N0ZGRkZGRkYgIAorfSBPTVhfVklERU9fTVBFRzJMRVZFTFRZUEU7CisKKworLyoqIAorICogTVBFRy0yIHBhcmFtcyAKKyAqCisgKiBTVFJVQ1QgTUVNQkVSUzoKKyAqICBuU2l6ZSAgICAgIDogU2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzCisgKiAgblZlcnNpb24gICA6IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24KKyAqICBuUG9ydEluZGV4IDogUG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8KKyAqICBuUEZyYW1lcyAgIDogTnVtYmVyIG9mIFAgZnJhbWVzIGJldHdlZW4gZWFjaCBJIGZyYW1lCisgKiAgbkJGcmFtZXMgICA6IE51bWJlciBvZiBCIGZyYW1lcyBiZXR3ZWVuIGVhY2ggSSBmcmFtZQorICogIGVQcm9maWxlICAgOiBNUEVHLTIgcHJvZmlsZShzKSB0byB1c2UKKyAqICBlTGV2ZWwgICAgIDogTVBFRy0yIGxldmVscyhzKSB0byB1c2UKKyAqLwordHlwZWRlZiBzdHJ1Y3QgT01YX1ZJREVPX1BBUkFNX01QRUcyVFlQRSB7CisgICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgIAorICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsKKyAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7ICAgICAgCisgICAgT01YX1UzMiBuUEZyYW1lczsgICAgICAgIAorICAgIE9NWF9VMzIgbkJGcmFtZXM7ICAgICAgICAKKyAgICBPTVhfVklERU9fTVBFRzJQUk9GSUxFVFlQRSBlUHJvZmlsZTsKKwlPTVhfVklERU9fTVBFRzJMRVZFTFRZUEUgZUxldmVsOyAgIAorfSBPTVhfVklERU9fUEFSQU1fTVBFRzJUWVBFOworCisKKy8qKiAKKyAqIE1QRUctNCBwcm9maWxlIHR5cGVzLCBlYWNoIHByb2ZpbGUgaW5kaWNhdGVzIHN1cHBvcnQgZm9yIHZhcmlvdXMgCisgKiBwZXJmb3JtYW5jZSBib3VuZHMgYW5kIGRpZmZlcmVudCBhbm5leGVzLgorICogCisgKiBFTlVNUzoKKyAqICAtIFNpbXBsZSBQcm9maWxlLCBMZXZlbHMgMS0zCisgKiAgLSBTaW1wbGUgU2NhbGFibGUgUHJvZmlsZSwgTGV2ZWxzIDEtMgorICogIC0gQ29yZSBQcm9maWxlLCBMZXZlbHMgMS0yCisgKiAgLSBNYWluIFByb2ZpbGUsIExldmVscyAyLTQKKyAqICAtIE4tYml0IFByb2ZpbGUsIExldmVsIDIKKyAqICAtIFNjYWxhYmxlIFRleHR1cmUgUHJvZmlsZSwgTGV2ZWwgMQorICogIC0gU2ltcGxlIEZhY2UgQW5pbWF0aW9uIFByb2ZpbGUsIExldmVscyAxLTIKKyAqICAtIFNpbXBsZSBGYWNlIGFuZCBCb2R5IEFuaW1hdGlvbiAoRkJBKSBQcm9maWxlLCBMZXZlbHMgMS0yCisgKiAgLSBCYXNpYyBBbmltYXRlZCBUZXh0dXJlIFByb2ZpbGUsIExldmVscyAxLTIKKyAqICAtIEh5YnJpZCBQcm9maWxlLCBMZXZlbHMgMS0yCisgKiAgLSBBZHZhbmNlZCBSZWFsIFRpbWUgU2ltcGxlIFByb2ZpbGVzLCBMZXZlbHMgMS00CisgKiAgLSBDb3JlIFNjYWxhYmxlIFByb2ZpbGUsIExldmVscyAxLTMKKyAqICAtIEFkdmFuY2VkIENvZGluZyBFZmZpY2llbmN5IFByb2ZpbGUsIExldmVscyAxLTQKKyAqICAtIEFkdmFuY2VkIENvcmUgUHJvZmlsZSwgTGV2ZWxzIDEtMgorICogIC0gQWR2YW5jZWQgU2NhbGFibGUgVGV4dHVyZSwgTGV2ZWxzIDItMworICovCit0eXBlZGVmIGVudW0gT01YX1ZJREVPX01QRUc0UFJPRklMRVRZUEUgeworICAgIE9NWF9WSURFT19NUEVHNFByb2ZpbGVTaW1wbGUgICAgICAgICAgID0gMHgwMSwgICAgICAgIAorICAgIE9NWF9WSURFT19NUEVHNFByb2ZpbGVTaW1wbGVTY2FsYWJsZSAgID0gMHgwMiwgICAgCisgICAgT01YX1ZJREVPX01QRUc0UHJvZmlsZUNvcmUgICAgICAgICAgICAgPSAweDA0LCAgICAgICAgICAgICAgCisgICAgT01YX1ZJREVPX01QRUc0UHJvZmlsZU1haW4gICAgICAgICAgICAgPSAweDA4LCAgICAgICAgICAgICAKKyAgICBPTVhfVklERU9fTVBFRzRQcm9maWxlTmJpdCAgICAgICAgICAgICA9IDB4MTAsICAgICAgICAgICAgICAKKyAgICBPTVhfVklERU9fTVBFRzRQcm9maWxlU2NhbGFibGVUZXh0dXJlICA9IDB4MjAsICAgCisgICAgT01YX1ZJREVPX01QRUc0UHJvZmlsZVNpbXBsZUZhY2UgICAgICAgPSAweDQwLCAgICAgICAgCisgICAgT01YX1ZJREVPX01QRUc0UHJvZmlsZVNpbXBsZUZCQSAgICAgICAgPSAweDgwLCAgICAgICAgIAorICAgIE9NWF9WSURFT19NUEVHNFByb2ZpbGVCYXNpY0FuaW1hdGVkICAgID0gMHgxMDAsICAgICAKKyAgICBPTVhfVklERU9fTVBFRzRQcm9maWxlSHlicmlkICAgICAgICAgICA9IDB4MjAwLCAgICAgICAgICAgIAorICAgIE9NWF9WSURFT19NUEVHNFByb2ZpbGVBZHZhbmNlZFJlYWxUaW1lID0gMHg0MDAsICAKKyAgICBPTVhfVklERU9fTVBFRzRQcm9maWxlQ29yZVNjYWxhYmxlICAgICA9IDB4ODAwLCAgICAgIAorICAgIE9NWF9WSURFT19NUEVHNFByb2ZpbGVBZHZhbmNlZENvZGluZyAgID0gMHgxMDAwLCAgICAKKyAgICBPTVhfVklERU9fTVBFRzRQcm9maWxlQWR2YW5jZWRDb3JlICAgICA9IDB4MjAwMCwgICAgICAKKyAgICBPTVhfVklERU9fTVBFRzRQcm9maWxlQWR2YW5jZWRTY2FsYWJsZSA9IDB4NDAwMCwKKyAgICBPTVhfVklERU9fTVBFRzRQcm9maWxlQWR2YW5jZWRTaW1wbGUgICA9IDB4ODAwMCwKKyAgICBPTVhfVklERU9fTVBFRzRQcm9maWxlS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIE9NWF9WSURFT19NUEVHNFByb2ZpbGVWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLworICAgIE9NWF9WSURFT19NUEVHNFByb2ZpbGVNYXggICAgICAgICAgICAgID0gMHg3RkZGRkZGRiAgCit9IE9NWF9WSURFT19NUEVHNFBST0ZJTEVUWVBFOworCisKKy8qKiAKKyAqIE1QRUctNCBsZXZlbCB0eXBlcywgZWFjaCBsZXZlbCBpbmRpY2F0ZXMgc3VwcG9ydCBmb3IgdmFyaW91cyBmcmFtZSAKKyAqIHNpemVzLCBiaXQgcmF0ZXMsIGRlY29kZXIgZnJhbWUgcmF0ZXMuICBObyBuZWVkIAorICovCit0eXBlZGVmIGVudW0gT01YX1ZJREVPX01QRUc0TEVWRUxUWVBFIHsKKyAgICBPTVhfVklERU9fTVBFRzRMZXZlbDAgID0gMHgwMSwgICAvKio8IExldmVsIDAgKi8gICAKKyAgICBPTVhfVklERU9fTVBFRzRMZXZlbDBiID0gMHgwMiwgICAvKio8IExldmVsIDBiICovICAgCisgICAgT01YX1ZJREVPX01QRUc0TGV2ZWwxICA9IDB4MDQsICAgLyoqPCBMZXZlbCAxICovIAorICAgIE9NWF9WSURFT19NUEVHNExldmVsMiAgPSAweDA4LCAgIC8qKjwgTGV2ZWwgMiAqLyAKKyAgICBPTVhfVklERU9fTVBFRzRMZXZlbDMgID0gMHgxMCwgICAvKio8IExldmVsIDMgKi8gCisgICAgT01YX1ZJREVPX01QRUc0TGV2ZWw0ICA9IDB4MjAsICAgLyoqPCBMZXZlbCA0ICovICAKKyAgICBPTVhfVklERU9fTVBFRzRMZXZlbDRhID0gMHg0MCwgICAvKio8IExldmVsIDRhICovICAKKyAgICBPTVhfVklERU9fTVBFRzRMZXZlbDUgID0gMHg4MCwgICAvKio8IExldmVsIDUgKi8gIAorICAgIE9NWF9WSURFT19NUEVHNExldmVsS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIE9NWF9WSURFT19NUEVHNExldmVsVmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KKyAgICBPTVhfVklERU9fTVBFRzRMZXZlbE1heCA9IDB4N0ZGRkZGRkYgIAorfSBPTVhfVklERU9fTVBFRzRMRVZFTFRZUEU7CisKKworLyoqIAorICogTVBFRy00IGNvbmZpZ3VyYXRpb24uICBUaGlzIHN0cnVjdHVyZSBoYW5kbGVzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucworICogd2hpY2ggYXJlIHNwZWNpZmljIHRvIE1QRUc0IGFsZ29yaXRobXMKKyAqCisgKiBTVFJVQ1QgTUVNQkVSUzoKKyAqICBuU2l6ZSAgICAgICAgICAgICAgICA6IFNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcworICogIG5WZXJzaW9uICAgICAgICAgICAgIDogT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbgorICogIG5Qb3J0SW5kZXggICAgICAgICAgIDogUG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8KKyAqICBuU2xpY2VIZWFkZXJTcGFjaW5nICA6IE51bWJlciBvZiBtYWNyb2Jsb2NrcyBiZXR3ZWVuIHNsaWNlIGhlYWRlciAoSDI2MysgCisgKiAgICAgICAgICAgICAgICAgICAgICAgICBBbm5leCBLKS4gUHV0IHplcm8gaWYgbm90IHVzZWQKKyAqICBiU1ZIICAgICAgICAgICAgICAgICA6IEVuYWJsZSBTaG9ydCBWaWRlbyBIZWFkZXIgbW9kZQorICogIGJHb3YgICAgICAgICAgICAgICAgIDogRmxhZyB0byBlbmFibGUgR09WCisgKiAgblBGcmFtZXMgICAgICAgICAgICAgOiBOdW1iZXIgb2YgUCBmcmFtZXMgYmV0d2VlbiBlYWNoIEkgZnJhbWUgKGFsc28gY2FsbGVkIAorICogICAgICAgICAgICAgICAgICAgICAgICAgR09WIHBlcmlvZCkKKyAqICBuQkZyYW1lcyAgICAgICAgICAgICA6IE51bWJlciBvZiBCIGZyYW1lcyBiZXR3ZWVuIGVhY2ggSSBmcmFtZQorICogIG5JRENWTENUaHJlc2hvbGQgICAgIDogVmFsdWUgb2YgaW50cmEgREMgVkxDIHRocmVzaG9sZAorICogIGJBQ1ByZWQgICAgICAgICAgICAgIDogRmxhZyB0byB1c2UgYWMgcHJlZGljdGlvbgorICogIG5NYXhQYWNrZXRTaXplICAgICAgIDogTWF4aW11bSBzaXplIG9mIHBhY2tldCBpbiBieXRlcy4KKyAqICBuVGltZUluY1JlcyAgICAgICAgICA6IFVzZWQgdG8gcGFzcyBWT1AgdGltZSBpbmNyZW1lbnQgcmVzb2x1dGlvbiBmb3IgTVBFRzQuIAorICogICAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJwcmV0ZWQgYXMgZGVzY3JpYmVkIGluIE1QRUc0IHN0YW5kYXJkLgorICogIGVQcm9maWxlICAgICAgICAgICAgIDogTVBFRy00IHByb2ZpbGUocykgdG8gdXNlLgorICogIGVMZXZlbCAgICAgICAgICAgICAgIDogTVBFRy00IGxldmVsKHMpIHRvIHVzZS4KKyAqICBuQWxsb3dlZFBpY3R1cmVUeXBlcyA6IFNwZWNpZmllcyB0aGUgcGljdHVyZSB0eXBlcyBhbGxvd2VkIGluIHRoZSBiaXRzdHJlYW0KKyAqICBuSGVhZGVyRXh0ZW5zaW9uICAgICA6IFNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGNvbnNlY3V0aXZlIHZpZGVvIHBhY2tldAorICogICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVycyB3aXRoaW4gYSBWT1AKKyAqICBiUmV2ZXJzaWJsZVZMQyAgICAgICA6IFNwZWNpZmllcyB3aGV0aGVyIHJldmVyc2libGUgdmFyaWFibGUgbGVuZ3RoIGNvZGluZyAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGluIHVzZQorICovCit0eXBlZGVmIHN0cnVjdCBPTVhfVklERU9fUEFSQU1fTVBFRzRUWVBFIHsKKyAgICBPTVhfVTMyIG5TaXplOworICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsKKyAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7CisgICAgT01YX1UzMiBuU2xpY2VIZWFkZXJTcGFjaW5nOworICAgIE9NWF9CT09MIGJTVkg7CisgICAgT01YX0JPT0wgYkdvdjsKKyAgICBPTVhfVTMyIG5QRnJhbWVzOworICAgIE9NWF9VMzIgbkJGcmFtZXM7CisgICAgT01YX1UzMiBuSURDVkxDVGhyZXNob2xkOworICAgIE9NWF9CT09MIGJBQ1ByZWQ7CisgICAgT01YX1UzMiBuTWF4UGFja2V0U2l6ZTsKKyAgICBPTVhfVTMyIG5UaW1lSW5jUmVzOworICAgIE9NWF9WSURFT19NUEVHNFBST0ZJTEVUWVBFIGVQcm9maWxlOworICAgIE9NWF9WSURFT19NUEVHNExFVkVMVFlQRSBlTGV2ZWw7CisgICAgT01YX1UzMiBuQWxsb3dlZFBpY3R1cmVUeXBlczsKKyAgICBPTVhfVTMyIG5IZWFkZXJFeHRlbnNpb247CisgICAgT01YX0JPT0wgYlJldmVyc2libGVWTEM7Cit9IE9NWF9WSURFT19QQVJBTV9NUEVHNFRZUEU7CisKKworLyoqIAorICogV01WIFZlcnNpb25zIAorICovCit0eXBlZGVmIGVudW0gT01YX1ZJREVPX1dNVkZPUk1BVFRZUEUgeworICAgIE9NWF9WSURFT19XTVZGb3JtYXRVbnVzZWQgPSAweDAxLCAgIC8qKjwgRm9ybWF0IHVudXNlZCBvciB1bmtub3duICovCisgICAgT01YX1ZJREVPX1dNVkZvcm1hdDcgICAgICA9IDB4MDIsICAgLyoqPCBXaW5kb3dzIE1lZGlhIFZpZGVvIGZvcm1hdCA3ICovCisgICAgT01YX1ZJREVPX1dNVkZvcm1hdDggICAgICA9IDB4MDQsICAgLyoqPCBXaW5kb3dzIE1lZGlhIFZpZGVvIGZvcm1hdCA4ICovCisgICAgT01YX1ZJREVPX1dNVkZvcm1hdDkgICAgICA9IDB4MDgsICAgLyoqPCBXaW5kb3dzIE1lZGlhIFZpZGVvIGZvcm1hdCA5ICovCisgICAgT01YX1ZJREVPX1dNRkZvcm1hdEtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKKyAgICBPTVhfVklERU9fV01GRm9ybWF0VmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KKyAgICBPTVhfVklERU9fV01WRm9ybWF0TWF4ICAgID0gMHg3RkZGRkZGRgorfSBPTVhfVklERU9fV01WRk9STUFUVFlQRTsKKworCisvKiogCisgKiBXTVYgUGFyYW1zIAorICoKKyAqIFNUUlVDVCBNRU1CRVJTOgorICogIG5TaXplICAgICAgOiBTaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMKKyAqICBuVmVyc2lvbiAgIDogT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbgorICogIG5Qb3J0SW5kZXggOiBQb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0bworICogIGVGb3JtYXQgICAgOiBWZXJzaW9uIG9mIFdNViBzdHJlYW0gLyBkYXRhCisgKi8KK3R5cGVkZWYgc3RydWN0IE9NWF9WSURFT19QQVJBTV9XTVZUWVBFIHsKKyAgICBPTVhfVTMyIG5TaXplOyAKKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247CisgICAgT01YX1UzMiBuUG9ydEluZGV4OworICAgIE9NWF9WSURFT19XTVZGT1JNQVRUWVBFIGVGb3JtYXQ7Cit9IE9NWF9WSURFT19QQVJBTV9XTVZUWVBFOworCisKKy8qKiAKKyAqIFJlYWwgVmlkZW8gVmVyc2lvbiAKKyAqLwordHlwZWRlZiBlbnVtIE9NWF9WSURFT19SVkZPUk1BVFRZUEUgeworICAgIE9NWF9WSURFT19SVkZvcm1hdFVudXNlZCA9IDAsIC8qKjwgRm9ybWF0IHVudXNlZCBvciB1bmtub3duICovCisgICAgT01YX1ZJREVPX1JWRm9ybWF0OCwgICAgICAgICAgLyoqPCBSZWFsIFZpZGVvIGZvcm1hdCA4ICovCisgICAgT01YX1ZJREVPX1JWRm9ybWF0OSwgICAgICAgICAgLyoqPCBSZWFsIFZpZGVvIGZvcm1hdCA5ICovCisgICAgT01YX1ZJREVPX1JWRm9ybWF0RzIsICAgICAgICAgLyoqPCBSZWFsIFZpZGVvIEZvcm1hdCBHMiAqLworICAgIE9NWF9WSURFT19SVkZvcm1hdEtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKKyAgICBPTVhfVklERU9fUlZGb3JtYXRWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLworICAgIE9NWF9WSURFT19SVkZvcm1hdE1heCA9IDB4N0ZGRkZGRkYKK30gT01YX1ZJREVPX1JWRk9STUFUVFlQRTsKKworCisvKiogCisgKiBSZWFsIFZpZGVvIFBhcmFtcyAKKyAqCisgKiBTVFVDVCBNRU1CRVJTOgorICogIG5TaXplICAgICAgICAgICAgICA6IFNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcworICogIG5WZXJzaW9uICAgICAgICAgICA6IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24gCisgKiAgblBvcnRJbmRleCAgICAgICAgIDogUG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8KKyAqICBlRm9ybWF0ICAgICAgICAgICAgOiBWZXJzaW9uIG9mIFJWIHN0cmVhbSAvIGRhdGEKKyAqICBuQml0c1BlclBpeGVsICAgICAgOiBCaXRzIHBlciBwaXhlbCBjb2RlZCBpbiB0aGUgZnJhbWUKKyAqICBuUGFkZGVkV2lkdGggICAgICAgOiBQYWRkZWQgd2lkdGggaW4gcGl4ZWwgb2YgYSB2aWRlbyBmcmFtZQorICogIG5QYWRkZWRIZWlnaHQgICAgICA6IFBhZGRlZCBIZWlnaHQgaW4gcGl4ZWxzIG9mIGEgdmlkZW8gZnJhbWUKKyAqICBuRnJhbWVSYXRlICAgICAgICAgOiBSYXRlIG9mIHZpZGVvIGluIGZyYW1lcyBwZXIgc2Vjb25kCisgKiAgbkJpdHN0cmVhbUZsYWdzICAgIDogRmxhZ3Mgd2hpY2ggaW50ZXJuYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGJpdHN0cmVhbQorICogIG5CaXRzdHJlYW1WZXJzaW9uICA6IEJpdHN0cmVhbSB2ZXJzaW9uCisgKiAgbk1heEVuY29kZUZyYW1lU2l6ZTogTWF4IGVuY29kZWQgZnJhbWUgc2l6ZQorICogIGJFbmFibGVQb3N0RmlsdGVyICA6IFR1cm4gb24vb2ZmIHBvc3QgZmlsdGVyCisgKiAgYkVuYWJsZVRlbXBvcmFsSW50ZXJwb2xhdGlvbiA6IFR1cm4gb24vb2ZmIHRlbXBvcmFsIGludGVycG9sYXRpb24KKyAqICBiRW5hYmxlTGF0ZW5jeU1vZGUgOiBXaGVuIGVuYWJsZWQsIHRoZSBkZWNvZGVyIGRvZXMgbm90IGRpc3BsYXkgYSBkZWNvZGVkIAorICogICAgICAgICAgICAgICAgICAgICAgIGZyYW1lIHVudGlsIGl0IGhhcyBkZXRlY3RlZCB0aGF0IG5vIGVuaGFuY2VtZW50IGxheWVyIAorICogIAkJCQkJIGZyYW1lcyBvciBkZXBlbmRlbnQgQiBmcmFtZXMgd2lsbCBiZSBjb21pbmcuIFRoaXMgCisgKiAgCQkJCQkgZGV0ZWN0aW9uIHVzdWFsbHkgb2NjdXJzIHdoZW4gYSBzdWJzZXF1ZW50IG5vbi1CIAorICogIAkJCQkJIGZyYW1lIGlzIGVuY291bnRlcmVkIAorICovCit0eXBlZGVmIHN0cnVjdCBPTVhfVklERU9fUEFSQU1fUlZUWVBFIHsKKyAgICBPTVhfVTMyIG5TaXplOworICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsKKyAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7CisgICAgT01YX1ZJREVPX1JWRk9STUFUVFlQRSBlRm9ybWF0OworICAgIE9NWF9VMTYgbkJpdHNQZXJQaXhlbDsKKyAgICBPTVhfVTE2IG5QYWRkZWRXaWR0aDsKKyAgICBPTVhfVTE2IG5QYWRkZWRIZWlnaHQ7CisgICAgT01YX1UzMiBuRnJhbWVSYXRlOworICAgIE9NWF9VMzIgbkJpdHN0cmVhbUZsYWdzOworICAgIE9NWF9VMzIgbkJpdHN0cmVhbVZlcnNpb247CisgICAgT01YX1UzMiBuTWF4RW5jb2RlRnJhbWVTaXplOworICAgIE9NWF9CT09MIGJFbmFibGVQb3N0RmlsdGVyOworICAgIE9NWF9CT09MIGJFbmFibGVUZW1wb3JhbEludGVycG9sYXRpb247CisgICAgT01YX0JPT0wgYkVuYWJsZUxhdGVuY3lNb2RlOworfSBPTVhfVklERU9fUEFSQU1fUlZUWVBFOworCisKKy8qKiAKKyAqIEFWQyBwcm9maWxlIHR5cGVzLCBlYWNoIHByb2ZpbGUgaW5kaWNhdGVzIHN1cHBvcnQgZm9yIHZhcmlvdXMgCisgKiBwZXJmb3JtYW5jZSBib3VuZHMgYW5kIGRpZmZlcmVudCBhbm5leGVzLgorICovCit0eXBlZGVmIGVudW0gT01YX1ZJREVPX0FWQ1BST0ZJTEVUWVBFIHsKKyAgICBPTVhfVklERU9fQVZDUHJvZmlsZUJhc2VsaW5lID0gMHgwMSwgICAvKio8IEJhc2VsaW5lIHByb2ZpbGUgKi8KKyAgICBPTVhfVklERU9fQVZDUHJvZmlsZU1haW4gICAgID0gMHgwMiwgICAvKio8IE1haW4gcHJvZmlsZSAqLworICAgIE9NWF9WSURFT19BVkNQcm9maWxlRXh0ZW5kZWQgPSAweDA0LCAgIC8qKjwgRXh0ZW5kZWQgcHJvZmlsZSAqLworICAgIE9NWF9WSURFT19BVkNQcm9maWxlSGlnaCAgICAgPSAweDA4LCAgIC8qKjwgSGlnaCBwcm9maWxlICovCisgICAgT01YX1ZJREVPX0FWQ1Byb2ZpbGVIaWdoMTAgICA9IDB4MTAsICAgLyoqPCBIaWdoIDEwIHByb2ZpbGUgKi8KKyAgICBPTVhfVklERU9fQVZDUHJvZmlsZUhpZ2g0MjIgID0gMHgyMCwgICAvKio8IEhpZ2ggNDoyOjIgcHJvZmlsZSAqLworICAgIE9NWF9WSURFT19BVkNQcm9maWxlSGlnaDQ0NCAgPSAweDQwLCAgIC8qKjwgSGlnaCA0OjQ6NCBwcm9maWxlICovCisgICAgT01YX1ZJREVPX0FWQ1Byb2ZpbGVLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICAgT01YX1ZJREVPX0FWQ1Byb2ZpbGVWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLworICAgIE9NWF9WSURFT19BVkNQcm9maWxlTWF4ICAgICAgPSAweDdGRkZGRkZGICAKK30gT01YX1ZJREVPX0FWQ1BST0ZJTEVUWVBFOworCisKKy8qKiAKKyAqIEFWQyBsZXZlbCB0eXBlcywgZWFjaCBsZXZlbCBpbmRpY2F0ZXMgc3VwcG9ydCBmb3IgdmFyaW91cyBmcmFtZSBzaXplcywgCisgKiBiaXQgcmF0ZXMsIGRlY29kZXIgZnJhbWUgcmF0ZXMuICBObyBuZWVkIAorICovCit0eXBlZGVmIGVudW0gT01YX1ZJREVPX0FWQ0xFVkVMVFlQRSB7CisgICAgT01YX1ZJREVPX0FWQ0xldmVsMSAgID0gMHgwMSwgICAgIC8qKjwgTGV2ZWwgMSAqLworICAgIE9NWF9WSURFT19BVkNMZXZlbDFiICA9IDB4MDIsICAgICAvKio8IExldmVsIDFiICovCisgICAgT01YX1ZJREVPX0FWQ0xldmVsMTEgID0gMHgwNCwgICAgIC8qKjwgTGV2ZWwgMS4xICovCisgICAgT01YX1ZJREVPX0FWQ0xldmVsMTIgID0gMHgwOCwgICAgIC8qKjwgTGV2ZWwgMS4yICovCisgICAgT01YX1ZJREVPX0FWQ0xldmVsMTMgID0gMHgxMCwgICAgIC8qKjwgTGV2ZWwgMS4zICovCisgICAgT01YX1ZJREVPX0FWQ0xldmVsMiAgID0gMHgyMCwgICAgIC8qKjwgTGV2ZWwgMiAqLworICAgIE9NWF9WSURFT19BVkNMZXZlbDIxICA9IDB4NDAsICAgICAvKio8IExldmVsIDIuMSAqLworICAgIE9NWF9WSURFT19BVkNMZXZlbDIyICA9IDB4ODAsICAgICAvKio8IExldmVsIDIuMiAqLworICAgIE9NWF9WSURFT19BVkNMZXZlbDMgICA9IDB4MTAwLCAgICAvKio8IExldmVsIDMgKi8KKyAgICBPTVhfVklERU9fQVZDTGV2ZWwzMSAgPSAweDIwMCwgICAgLyoqPCBMZXZlbCAzLjEgKi8KKyAgICBPTVhfVklERU9fQVZDTGV2ZWwzMiAgPSAweDQwMCwgICAgLyoqPCBMZXZlbCAzLjIgKi8KKyAgICBPTVhfVklERU9fQVZDTGV2ZWw0ICAgPSAweDgwMCwgICAgLyoqPCBMZXZlbCA0ICovCisgICAgT01YX1ZJREVPX0FWQ0xldmVsNDEgID0gMHgxMDAwLCAgIC8qKjwgTGV2ZWwgNC4xICovCisgICAgT01YX1ZJREVPX0FWQ0xldmVsNDIgID0gMHgyMDAwLCAgIC8qKjwgTGV2ZWwgNC4yICovCisgICAgT01YX1ZJREVPX0FWQ0xldmVsNSAgID0gMHg0MDAwLCAgIC8qKjwgTGV2ZWwgNSAqLworICAgIE9NWF9WSURFT19BVkNMZXZlbDUxICA9IDB4ODAwMCwgICAvKio8IExldmVsIDUuMSAqLworICAgIE9NWF9WSURFT19BVkNMZXZlbEtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKKyAgICBPTVhfVklERU9fQVZDTGV2ZWxWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLworICAgIE9NWF9WSURFT19BVkNMZXZlbE1heCA9IDB4N0ZGRkZGRkYgIAorfSBPTVhfVklERU9fQVZDTEVWRUxUWVBFOworCisKKy8qKiAKKyAqIEFWQyBsb29wIGZpbHRlciBtb2RlcyAKKyAqCisgKiBPTVhfVklERU9fQVZDTG9vcEZpbHRlckVuYWJsZSAgICAgICAgICAgICAgIDogRW5hYmxlCisgKiBPTVhfVklERU9fQVZDTG9vcEZpbHRlckRpc2FibGUgICAgICAgICAgICAgIDogRGlzYWJsZQorICogT01YX1ZJREVPX0FWQ0xvb3BGaWx0ZXJEaXNhYmxlU2xpY2VCb3VuZGFyeSA6IERpc2FibGVkIG9uIHNsaWNlIGJvdW5kYXJpZXMKKyAqLwordHlwZWRlZiBlbnVtIE9NWF9WSURFT19BVkNMT09QRklMVEVSVFlQRSB7CisgICAgT01YX1ZJREVPX0FWQ0xvb3BGaWx0ZXJFbmFibGUgPSAwLAorICAgIE9NWF9WSURFT19BVkNMb29wRmlsdGVyRGlzYWJsZSwKKyAgICBPTVhfVklERU9fQVZDTG9vcEZpbHRlckRpc2FibGVTbGljZUJvdW5kYXJ5LAorICAgIE9NWF9WSURFT19BVkNMb29wRmlsdGVyS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIE9NWF9WSURFT19BVkNMb29wRmlsdGVyVmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KKyAgICBPTVhfVklERU9fQVZDTG9vcEZpbHRlck1heCA9IDB4N0ZGRkZGRkYKK30gT01YX1ZJREVPX0FWQ0xPT1BGSUxURVJUWVBFOworCisKKy8qKiAKKyAqIEFWQyBwYXJhbXMgCisgKgorICogU1RSVUNUIE1FTUJFUlM6CisgKiAgblNpemUgICAgICAgICAgICAgICAgICAgICA6IFNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcworICogIG5WZXJzaW9uICAgICAgICAgICAgICAgICAgOiBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uCisgKiAgblBvcnRJbmRleCAgICAgICAgICAgICAgICA6IFBvcnQgdGhhdCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzIHRvCisgKiAgblNsaWNlSGVhZGVyU3BhY2luZyAgICAgICA6IE51bWJlciBvZiBtYWNyb2Jsb2NrcyBiZXR3ZWVuIHNsaWNlIGhlYWRlciwgcHV0ICAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemVybyBpZiBub3QgdXNlZAorICogIG5QRnJhbWVzICAgICAgICAgICAgICAgICAgOiBOdW1iZXIgb2YgUCBmcmFtZXMgYmV0d2VlbiBlYWNoIEkgZnJhbWUKKyAqICBuQkZyYW1lcyAgICAgICAgICAgICAgICAgIDogTnVtYmVyIG9mIEIgZnJhbWVzIGJldHdlZW4gZWFjaCBJIGZyYW1lCisgKiAgYlVzZUhhZGFtYXJkICAgICAgICAgICAgICA6IEVuYWJsZS9kaXNhYmxlIEhhZGFtYXJkIHRyYW5zZm9ybQorICogIG5SZWZGcmFtZXMgICAgICAgICAgICAgICAgOiBNYXggbnVtYmVyIG9mIHJlZmVyZW5jZSBmcmFtZXMgdG8gdXNlIGZvciBpbnRlcgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3Rpb24gc2VhcmNoICgxLTE2KQorICogIG5SZWZJZHhUcmFpbGluZyAgICAgICAgICAgOiBQaWMgcGFyYW0gc2V0IHJlZiBmcmFtZSBpbmRleCAoaW5kZXggaW50byByZWYKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUgYnVmZmVyIG9mIHRyYWlsaW5nIGZyYW1lcyBsaXN0KSwgQiBmcmFtZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0CisgKiAgblJlZklkeEZvcndhcmQgICAgICAgICAgICA6IFBpYyBwYXJhbSBzZXQgcmVmIGZyYW1lIGluZGV4IChpbmRleCBpbnRvIHJlZgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZSBidWZmZXIgb2YgZm9yd2FyZCBmcmFtZXMgbGlzdCksIEIgZnJhbWUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydAorICogIGJFbmFibGVVRVAgICAgICAgICAgICAgICAgOiBFbmFibGUvZGlzYWJsZSB1bmVxdWFsIGVycm9yIHByb3RlY3Rpb24uIFRoaXMgCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIG9ubHkgdmFsaWQgb2YgZGF0YSBwYXJ0aXRpb25pbmcgaXMgZW5hYmxlZC4KKyAqICBiRW5hYmxlRk1PICAgICAgICAgICAgICAgIDogRW5hYmxlL2Rpc2FibGUgZmxleGlibGUgbWFjcm9ibG9jayBvcmRlcmluZworICogIGJFbmFibGVBU08gICAgICAgICAgICAgICAgOiBFbmFibGUvZGlzYWJsZSBhcmJpdHJhcnkgc2xpY2Ugb3JkZXJpbmcKKyAqICBiRW5hYmxlUlMgICAgICAgICAgICAgICAgIDogRW5hYmxlL2Rpc2FibGUgc2VuZGluZyBvZiByZWR1bmRhbnQgc2xpY2VzCisgKiAgZVByb2ZpbGUgICAgICAgICAgICAgICAgICA6IEFWQyBwcm9maWxlKHMpIHRvIHVzZQorICogIGVMZXZlbCAgICAgICAgICAgICAgICAgICAgOiBBVkMgbGV2ZWwocykgdG8gdXNlCisgKiAgbkFsbG93ZWRQaWN0dXJlVHlwZXMgICAgICA6IFNwZWNpZmllcyB0aGUgcGljdHVyZSB0eXBlcyBhbGxvd2VkIGluIHRoZSAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0c3RyZWFtCisgKiAgYkZyYW1lTUJzT25seSAgICAgICAgICAgICA6IHNwZWNpZmllcyB0aGF0IGV2ZXJ5IGNvZGVkIHBpY3R1cmUgb2YgdGhlIAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlZCB2aWRlbyBzZXF1ZW5jZSBpcyBhIGNvZGVkIGZyYW1lIAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluaW5nIG9ubHkgZnJhbWUgbWFjcm9ibG9ja3MKKyAqICBiTUJBRkYgICAgICAgICAgICAgICAgICAgIDogRW5hYmxlL2Rpc2FibGUgc3dpdGNoaW5nIGJldHdlZW4gZnJhbWUgYW5kIAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZCBtYWNyb2Jsb2NrcyB3aXRoaW4gYSBwaWN0dXJlCisgKiAgYkVudHJvcHlDb2RpbmdDQUJBQyAgICAgICA6IEVudHJvcHkgZGVjb2RpbmcgbWV0aG9kIHRvIGJlIGFwcGxpZWQgZm9yIHRoZSAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ludGF4IGVsZW1lbnRzIGZvciB3aGljaCB0d28gZGVzY3JpcHRvcnMgYXBwZWFyIAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgc3ludGF4IHRhYmxlcworICogIGJXZWlnaHRlZFBQcmVkaWN0aW9uICAgICAgOiBFbmFibGUvZGlzYWJsZSB3ZWlnaHRlZCBwcmVkaWN0aW9uIHNoYWxsIG5vdCAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgYXBwbGllZCB0byBQIGFuZCBTUCBzbGljZXMKKyAqICBuV2VpZ2h0ZWRCaXByZWRpY2l0b25Nb2RlIDogRGVmYXVsdCB3ZWlnaHRlZCBwcmVkaWN0aW9uIGlzIGFwcGxpZWQgdG8gQiAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xpY2VzIAorICogIGJjb25zdElwcmVkICAgICAgICAgICAgICAgOiBFbmFibGUvZGlzYWJsZSBpbnRyYSBwcmVkaWN0aW9uCisgKiAgYkRpcmVjdDh4OEluZmVyZW5jZSAgICAgICA6IFNwZWNpZmllcyB0aGUgbWV0aG9kIHVzZWQgaW4gdGhlIGRlcml2YXRpb24gCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MgZm9yIGx1bWEgbW90aW9uIHZlY3RvcnMgZm9yIEJfU2tpcCwgCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJfRGlyZWN0XzE2eDE2IGFuZCBCX0RpcmVjdF84eDggYXMgc3BlY2lmaWVkIAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBzdWJjbGF1c2UgOC40LjEuMiBvZiB0aGUgQVZDIHNwZWMgCisgKiAgYkRpcmVjdFNwYXRpYWxUZW1wb3JhbCAgICA6IEZsYWcgaW5kaWNhdGluZyBzcGF0aWFsIG9yIHRlbXBvcmFsIGRpcmVjdAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlIHVzZWQgaW4gQiBzbGljZSBjb2RpbmcgKHJlbGF0ZWQgdG8gCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJEaXJlY3Q4eDhJbmZlcmVuY2UpIC4gU3BhdGlhbCBkaXJlY3QgbW9kZSBpcyAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9yZSBjb21tb24gYW5kIHNob3VsZCBiZSB0aGUgZGVmYXVsdC4KKyAqICBuQ2FiYWNJbml0SWR4ICAgICAgICAgICAgIDogSW5kZXggdXNlZCB0byBpbml0IENBQkFDIGNvbnRleHRzCisgKiAgZUxvb3BGaWx0ZXJNb2RlICAgICAgICAgICA6IEVuYWJsZS9kaXNhYmxlIGxvb3AgZmlsdGVyCisgKi8KK3R5cGVkZWYgc3RydWN0IE9NWF9WSURFT19QQVJBTV9BVkNUWVBFIHsKKyAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAgICAgCisgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAgICAgIAorICAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAgICAgICAKKyAgICBPTVhfVTMyIG5TbGljZUhlYWRlclNwYWNpbmc7ICAKKyAgICBPTVhfVTMyIG5QRnJhbWVzOyAgICAgCisgICAgT01YX1UzMiBuQkZyYW1lczsgICAgIAorICAgIE9NWF9CT09MIGJVc2VIYWRhbWFyZDsKKyAgICBPTVhfVTMyIG5SZWZGcmFtZXM7ICAKKwlPTVhfVTMyIG5SZWZJZHgxMEFjdGl2ZU1pbnVzMTsKKwlPTVhfVTMyIG5SZWZJZHgxMUFjdGl2ZU1pbnVzMTsKKyAgICBPTVhfQk9PTCBiRW5hYmxlVUVQOyAgCisgICAgT01YX0JPT0wgYkVuYWJsZUZNTzsgIAorICAgIE9NWF9CT09MIGJFbmFibGVBU087ICAKKyAgICBPTVhfQk9PTCBiRW5hYmxlUlM7ICAgCisgICAgT01YX1ZJREVPX0FWQ1BST0ZJTEVUWVBFIGVQcm9maWxlOworCU9NWF9WSURFT19BVkNMRVZFTFRZUEUgZUxldmVsOyAKKyAgICBPTVhfVTMyIG5BbGxvd2VkUGljdHVyZVR5cGVzOyAgCisJT01YX0JPT0wgYkZyYW1lTUJzT25seTsgICAgICAgIAkJCQkJCQkJCQorICAgIE9NWF9CT09MIGJNQkFGRjsgICAgICAgICAgICAgICAKKyAgICBPTVhfQk9PTCBiRW50cm9weUNvZGluZ0NBQkFDOyAgCisgICAgT01YX0JPT0wgYldlaWdodGVkUFByZWRpY3Rpb247IAorICAgIE9NWF9VMzIgbldlaWdodGVkQmlwcmVkaWNpdG9uTW9kZTsgCisgICAgT01YX0JPT0wgYmNvbnN0SXByZWQgOworICAgIE9NWF9CT09MIGJEaXJlY3Q4eDhJbmZlcmVuY2U7ICAKKwlPTVhfQk9PTCBiRGlyZWN0U3BhdGlhbFRlbXBvcmFsOworCU9NWF9VMzIgbkNhYmFjSW5pdElkYzsKKwlPTVhfVklERU9fQVZDTE9PUEZJTFRFUlRZUEUgZUxvb3BGaWx0ZXJNb2RlOworfSBPTVhfVklERU9fUEFSQU1fQVZDVFlQRTsKKwordHlwZWRlZiBzdHJ1Y3QgT01YX1ZJREVPX1BBUkFNX1BST0ZJTEVMRVZFTFRZUEUgeworICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAgICAgIAorICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAgICAgIAorICAgT01YX1UzMiBuUG9ydEluZGV4OyAgICAgICAgICAgIAorICAgT01YX1UzMiBlUHJvZmlsZTsgICAgICAvKio8IHR5cGUgaXMgT01YX1ZJREVPX0FWQ1BST0ZJTEVUWVBFLCBPTVhfVklERU9fSDI2M1BST0ZJTEVUWVBFLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIE9NWF9WSURFT19NUEVHNFBST0ZJTEVUWVBFIGRlcGVuZGluZyBvbiBjb250ZXh0ICovCisgICBPTVhfVTMyIGVMZXZlbDsgICAgICAgIC8qKjwgdHlwZSBpcyBPTVhfVklERU9fQVZDTEVWRUxUWVBFLCBPTVhfVklERU9fSDI2M0xFVkVMVFlQRSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBPTVhfVklERU9fTVBFRzRQUk9GSUxFVFlQRSBkZXBlbmRpbmcgb24gY29udGV4dCAqLworICAgT01YX1UzMiBuUHJvZmlsZUluZGV4OyAvKio8IFVzZWQgdG8gcXVlcnkgZm9yIGluZGl2aWR1YWwgcHJvZmlsZSBzdXBwb3J0IGluZm9ybWF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGlzIHZhbGlkIG9ubHkgZm9yIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9NWF9JbmRleFBhcmFtVmlkZW9Qcm9maWxlTGV2ZWxRdWVyeVN1cHBvcnRlZCBpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgYWxsIG90aGVyIGluZGljZXMgdGhpcyBwYXJhbWV0ZXIgaXMgdG8gYmUgaWdub3JlZC4gKi8KK30gT01YX1ZJREVPX1BBUkFNX1BST0ZJTEVMRVZFTFRZUEU7CisKKy8qKiAKKyAqIFN0cnVjdHVyZSBmb3IgZHluYW1pY2FsbHkgY29uZmlndXJpbmcgYml0cmF0ZSBtb2RlIG9mIGEgY29kZWMuIAorICoKKyAqIFNUUlVDVCBNRU1CRVJTOgorICogIG5TaXplICAgICAgICAgIDogU2l6ZSBvZiB0aGUgc3RydWN0IGluIGJ5dGVzCisgKiAgblZlcnNpb24gICAgICAgOiBPTVggc3BlYyB2ZXJzaW9uIGluZm8KKyAqICBuUG9ydEluZGV4ICAgICA6IFBvcnQgdGhhdCB0aGlzIHN0cnVjdCBhcHBsaWVzIHRvCisgKiAgbkVuY29kZUJpdHJhdGUgOiBUYXJnZXQgYXZlcmFnZSBiaXRyYXRlIHRvIGJlIGdlbmVyYXRlZCBpbiBicHMKKyAqLwordHlwZWRlZiBzdHJ1Y3QgT01YX1ZJREVPX0NPTkZJR19CSVRSQVRFVFlQRSB7CisgICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgICAgICAgICAgICAgICAKKyAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7ICAgICAgICAgICAgICAgICAgICAgCisgICAgT01YX1UzMiBuRW5jb2RlQml0cmF0ZTsgICAgICAgICAgICAgICAgIAorfSBPTVhfVklERU9fQ09ORklHX0JJVFJBVEVUWVBFOworCisvKiogCisgKiBEZWZpbmVzIEVuY29kZXIgRnJhbWUgUmF0ZSBzZXR0aW5nCisgKgorICogU1RSVUNUIE1FTUJFUlM6CisgKiAgblNpemUgICAgICAgICAgICA6IFNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcworICogIG5WZXJzaW9uICAgICAgICAgOiBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uIAorICogIG5Qb3J0SW5kZXggICAgICAgOiBQb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0bworICogIHhFbmNvZGVGcmFtZXJhdGUgOiBFbmNvZGluZyBmcmFtZXJhdGUgcmVwcmVzZW50ZWQgaW4gUTE2IGZvcm1hdAorICovCit0eXBlZGVmIHN0cnVjdCBPTVhfQ09ORklHX0ZSQU1FUkFURVRZUEUgeworICAgIE9NWF9VMzIgblNpemU7CisgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOworICAgIE9NWF9VMzIgblBvcnRJbmRleDsKKyAgICBPTVhfVTMyIHhFbmNvZGVGcmFtZXJhdGU7IC8qIFExNiBmb3JtYXQgKi8KK30gT01YX0NPTkZJR19GUkFNRVJBVEVUWVBFOworCit0eXBlZGVmIHN0cnVjdCBPTVhfQ09ORklHX0lOVFJBUkVGUkVTSFZPUFRZUEUgeworICAgIE9NWF9VMzIgblNpemU7CisgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOworICAgIE9NWF9VMzIgblBvcnRJbmRleDsKKyAgICBPTVhfQk9PTCBJbnRyYVJlZnJlc2hWT1A7Cit9IE9NWF9DT05GSUdfSU5UUkFSRUZSRVNIVk9QVFlQRTsKKwordHlwZWRlZiBzdHJ1Y3QgT01YX0NPTkZJR19NQUNST0JMT0NLRVJST1JNQVBUWVBFIHsKKyAgICBPTVhfVTMyIG5TaXplOworICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsKKyAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7CisgICAgT01YX1UzMiBuRXJyTWFwU2l6ZTsgICAgICAgICAgIC8qIFNpemUgb2YgdGhlIEVycm9yIE1hcCBpbiBieXRlcyAqLworICAgIE9NWF9VOCAgRXJyTWFwWzFdOyAgICAgICAgICAgICAvKiBFcnJvciBtYXAgaGludCAqLworfSBPTVhfQ09ORklHX01BQ1JPQkxPQ0tFUlJPUk1BUFRZUEU7CisKK3R5cGVkZWYgc3RydWN0IE9NWF9DT05GSUdfTUJFUlJPUlJFUE9SVElOR1RZUEUgeworICAgIE9NWF9VMzIgblNpemU7CisgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOworICAgIE9NWF9VMzIgblBvcnRJbmRleDsKKyAgICBPTVhfQk9PTCBiRW5hYmxlZDsKK30gT01YX0NPTkZJR19NQkVSUk9SUkVQT1JUSU5HVFlQRTsKKwordHlwZWRlZiBzdHJ1Y3QgT01YX1BBUkFNX01BQ1JPQkxPQ0tTVFlQRSB7CisgICAgT01YX1UzMiBuU2l6ZTsKKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247CisgICAgT01YX1UzMiBuUG9ydEluZGV4OworICAgIE9NWF9VMzIgbk1hY3JvYmxvY2tzOworfSBPTVhfUEFSQU1fTUFDUk9CTE9DS1NUWVBFOworCisvKiogCisgKiBBVkMgU2xpY2UgTW9kZSBtb2RlcyAKKyAqCisgKiBPTVhfVklERU9fU0xJQ0VNT0RFX0FWQ0RlZmF1bHQgICA6IE5vcm1hbCBmcmFtZSBlbmNvZGluZywgb25lIHNsaWNlIHBlciBmcmFtZQorICogT01YX1ZJREVPX1NMSUNFTU9ERV9BVkNNQlNsaWNlICAgOiBOQUwgbW9kZSwgbnVtYmVyIG9mIE1CcyBwZXIgZnJhbWUKKyAqIE9NWF9WSURFT19TTElDRU1PREVfQVZDQnl0ZVNsaWNlIDogTkFMIG1vZGUsIG51bWJlciBvZiBieXRlcyBwZXIgZnJhbWUKKyAqLwordHlwZWRlZiBlbnVtIE9NWF9WSURFT19BVkNTTElDRU1PREVUWVBFIHsKKyAgICBPTVhfVklERU9fU0xJQ0VNT0RFX0FWQ0RlZmF1bHQgPSAwLAorICAgIE9NWF9WSURFT19TTElDRU1PREVfQVZDTUJTbGljZSwKKyAgICBPTVhfVklERU9fU0xJQ0VNT0RFX0FWQ0J5dGVTbGljZSwKKyAgICBPTVhfVklERU9fU0xJQ0VNT0RFX0FWQ0tocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKKyAgICBPTVhfVklERU9fU0xJQ0VNT0RFX0FWQ1ZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCisgICAgT01YX1ZJREVPX1NMSUNFTU9ERV9BVkNMZXZlbE1heCA9IDB4N0ZGRkZGRkYKK30gT01YX1ZJREVPX0FWQ1NMSUNFTU9ERVRZUEU7CisKKy8qKiAKKyAqIEFWQyBGTU8gU2xpY2UgTW9kZSBQYXJhbXMgCisgKgorICogU1RSVUNUIE1FTUJFUlM6CisgKiAgblNpemUgICAgICA6IFNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcworICogIG5WZXJzaW9uICAgOiBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uCisgKiAgblBvcnRJbmRleCA6IFBvcnQgdGhhdCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzIHRvCisgKiAgbk51bVNsaWNlR3JvdXBzIDogU3BlY2lmaWVzIHRoZSBudW1iZXIgb2Ygc2xpY2UgZ3JvdXBzCisgKiAgblNsaWNlR3JvdXBNYXBUeXBlIDogU3BlY2lmaWVzIHRoZSB0eXBlIG9mIHNsaWNlIGdyb3VwcworICogIGVTbGljZU1vZGUgOiBTcGVjaWZpZXMgdGhlIHR5cGUgb2Ygc2xpY2UKKyAqLwordHlwZWRlZiBzdHJ1Y3QgT01YX1ZJREVPX1BBUkFNX0FWQ1NMSUNFRk1PIHsKKyAgICBPTVhfVTMyIG5TaXplOyAKKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247CisgICAgT01YX1UzMiBuUG9ydEluZGV4OworICAgIE9NWF9VOCBuTnVtU2xpY2VHcm91cHM7CisgICAgT01YX1U4IG5TbGljZUdyb3VwTWFwVHlwZTsKKyAgICBPTVhfVklERU9fQVZDU0xJQ0VNT0RFVFlQRSBlU2xpY2VNb2RlOworfSBPTVhfVklERU9fUEFSQU1fQVZDU0xJQ0VGTU87CisKKy8qKiAKKyAqIEFWQyBJRFIgUGVyaW9kIENvbmZpZ3MKKyAqCisgKiBTVFJVQ1QgTUVNQkVSUzoKKyAqICBuU2l6ZSAgICAgIDogU2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzCisgKiAgblZlcnNpb24gICA6IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24KKyAqICBuUG9ydEluZGV4IDogUG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8KKyAqICBuSURSUGVyaW9kIDogU3BlY2lmaWVzIHBlcmlvZGljaXR5IG9mIElEUiBmcmFtZXMKKyAqICBuUEZyYW1lcyA6IFNwZWNpZmllcyBpbnRlcm5hbCBvZiBjb2RpbmcgSW50cmEgZnJhbWVzCisgKi8KK3R5cGVkZWYgc3RydWN0IE9NWF9WSURFT19DT05GSUdfQVZDSU5UUkFQRVJJT0QgeworICAgIE9NWF9VMzIgblNpemU7IAorICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsKKyAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7CisgICAgT01YX1UzMiBuSURSUGVyaW9kOworICAgIE9NWF9VMzIgblBGcmFtZXM7Cit9IE9NWF9WSURFT19DT05GSUdfQVZDSU5UUkFQRVJJT0Q7CisKKy8qKiAKKyAqIEFWQyBOQUwgU2l6ZSBDb25maWdzCisgKgorICogU1RSVUNUIE1FTUJFUlM6CisgKiAgblNpemUgICAgICA6IFNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcworICogIG5WZXJzaW9uICAgOiBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uCisgKiAgblBvcnRJbmRleCA6IFBvcnQgdGhhdCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzIHRvCisgKiAgbk5hbHVCeXRlcyA6IFNwZWNpZmllcyB0aGUgTkFMIHVuaXQgc2l6ZQorICovCit0eXBlZGVmIHN0cnVjdCBPTVhfVklERU9fQ09ORklHX05BTFNJWkUgeworICAgIE9NWF9VMzIgblNpemU7IAorICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsKKyAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7CisgICAgT01YX1UzMiBuTmFsdUJ5dGVzOworfSBPTVhfVklERU9fQ09ORklHX05BTFNJWkU7CisKKy8qKiBAfSAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYKKy8qIEZpbGUgRU9GICovCisK