TWFqb3IgY2hhbmdlcyBmcm9tIDEuMCB0byAxLjEKCisgRXZlcnl3aGVyZTogQ2FuIGNvbXBpbGUgdHdvIHZlcnNpb25zIG9mIHRoZSBjb2RlLCB1bmRlciBnY2Mgb3IgYmNjCihCcnVjZSBFdmFuJ3MgY2MpLCBzbyB0aGF0IDE2LWJpdCBib290IFBST01zIGNhbiBiZSBtYWRlLiBTZWUKbmV0Ym9vdC0xNi9SRUFETUUuMTYgZm9yIG1vcmUgZGV0YWlscy4KCisgRXZlcnl3aGVyZTogUmVtb3ZlZCBkdXBsaWNhdGUgZGVmaW5lcywgZS5nLiBldmVyeWJvZHkgZGVmaW5lZCB0aGVpcgpvd24gSUQgZm9yIGV0aGVybmV0IGFkZHJlc3Mgc2l6ZSAoNikuIFB1dCBJRHMgZm9yIG1hZ2ljIG51bWJlcnMgaW4KdmFyaW91cyBwbGFjZXMuICBTdGlsbCBzb21lIGluY29uc2lzdGVuY3ksIEVUSF8gYW5kIEVUSEVSXyBhcmUgdXNlZC4KCisgRXZlcnl3aGVyZTogQWRkZWQgcHJvdG90eXBlcyBvZiBmdW5jdGlvbnMgdG8gbmV0Ym9vdC5oLiAgUmVtb3ZlZAp1bnVzZWQgdmFyaWFibGVzLgoKKyBNYWtlZmlsZXM6IFJld3JpdHRlbi4KCisgbmV0Ym9vdC5oOiBBZGRlZCBkZWZpbmUgZm9yIFRGVFBfTUFYX1BBQ0tFVCA9IDUxMi4gSW5jcmVhc2VkIFRJTUVPVVQKZm9yIHRmdHAgcGFja2V0cyB0byAxODAgKGFib3V0IDEwIHNlY29uZHMpIHNvIHRoYXQgdGZ0cCBzZXJ2ZXJzIHdvdWxkCmJlIGFibGUgdG8gcmV0cmFuc21pdCBibG9ja3MuCgorIG1haW4uYzogUmV3cm90ZSB0ZnRwKCkuIE9yaWdpbmFsIHdhcyBpbnRlbmRlZCB0byBnZXQgb25seSBvbmUgYmxvY2sKYW5kIHRoZSBzdHJhaW4gb24gdGhlIHN0cnVjdHVyZSBkdWUgdG8gbW9kaWZpY2F0aW9ucyB3YXMgc2hvd2luZy4KSW5jcmVhc2VkIGNvbmZpZ19idWZmZXIgc2l6ZSB0byBURlRQX01BWF9QQUNLRVQrMSB0byBhdm9pZCBzcGVjaWFsCmNhc2luZyBkYXRhIGxlbmd0aD01MTIuCgorIGxpbnV4bG9hZGVyLmM6IENsZWFuZWQgdXAgdGhlIGNvZGUgaW4gc29tZSBwbGFjZXMsIGVzcGVjaWFsbHkKbGludXhfdGZ0cC4gIE1vdmVkIHRoZSBib290cCByZXBseSBibG9jayBpbnRvIGJzcyBzcGFjZSBpbnN0ZWFkIG9mIGEKZml4ZWQgbG9jYXRpb24gc3VjaCBhcyAweDkwMDAwLgoKKyBuczgzOTAuYzogUmVtb3ZlZCBvbmUgYnVnIHJlZ2FyZGluZyBwYWNrZXQgbGVuZ3RoLiBwYWNrZXRsZW4gd2FzCndyb25nbHkgc2hvcnRlbmVkIHdoZW4gcGFja2V0cyB3cmFwYXJvdW5kIHRoZSByaW5nIGJ1ZmZlci4KCisgM2M1MDkuYzogQ2hhbmdlZCBzb21lIG9mIHRoZSBnb3RvcyB0byByZXR1cm5zLiAgUmVtb3ZlZCBBUlAgY29kZSBzaW5jZQp0aGF0J3MgYWxyZWFkeSBkb25lIGVsc2V3aGVyZS4gIFJlbW92ZWQgaW50ZXJydXB0IGVuYWJsZSBhbmQgUnggZWFybHkKbm90aWZpY2F0aW9uICh3ZSBjYW4ndCBkbyBhbnl0aGluZyB3aXRoIHRoZSBwYWNrZXQgdW50aWwgaXQncyBjb21wbGV0ZQphbnl3YXkpLgoKTWFqb3IgY2hhbmdlcyBmcm9tIDEuMSB0byAxLjIKCisgU21hbGwgYnVnIGluIG1ha2Vyb20uYy4gRXh0cmEgc2VtaWNvbG9uIHNob3J0ZW5lZCBmb3IgbG9vcCBhbmQgbWFkZQpkb3VibGUgY2hlY2tpbmcgY29kZSBpbnZhbGlkLgoKKyBBZGRlZCB2ZXJzaW9uIGlkZW50aWZpY2F0aW9uIHRvIHN0YXJ0dXAgc3RyaW5nLgoKKyBHYXRoZXJlZCBleHRlcm5hbCBkZWNsYXJhdGlvbnMgaW50byBuZXRib290LmguCgorIE5ldyBjb21waWxlIHRpbWUgb3B0aW9uIGZvciBuZXRib290LTMyLiBJZiBJTlQxOUggaXMgbm90IGRlZmluZWQsCnRoZW4gYm9vdCBST00gdGFrZXMgY29udHJvbCBhcyBzb29uIGFzIEJJT1Mgc2NhbnMgaXQuIFRoaXMgbWF5IHNvbHZlCnRoZSBwcm9ibGVtIG9mIHNvbWUgQklPU2VzIG5vdCBjYWxsaW5nIHRoZSBib290IFJPTSBhdCBJTlQxOUguIFRoaXMKbWF5IGJlIHdoZW4gZGlza3MgYXJlIGRldGVjdGVkIGJ5IHRoZSBCSU9TLCBpLmUuIHRoZSBtYWNoaW5lIGlzIG5vdAp0cnVseSBkaXNrbGVzcy4KCisgQWRkZWQgYSBuZXcgcHJvZ3JhbSwgdGVzdC5jLCBmb3IgbWFraW5nIHRlc3QgUk9NcyB0byB2ZXJpZnkgdGhhdAp0aGUgQklPUyByZWNvZ25pc2VzIHRoZSBST00uCgorIE5ldyBkaXJlY3RvcnkgY29udHJpYiBjb250YWlucyBjb250cmlidXRlZCBjb2RlLiBDdXJyZW50bHkgY29udGFpbnMKbWFzcSBieSBHZXJkIEtub3JyOiBtYWtlIGEgYm9vdCBmbG9wcHkgd2l0aG91dCBET1MKY29tYm9vdC0xLjAgYnkgQWRhbSBKLiBSaWNodGVyOiBhbHNvIG1ha2UgYSBib290IGZsb3BweSB3aXRob3V0IERPUy4KCisgTmV3IG1rbmJpLTEuNCBmcm9tIEdlcm8gS3VobG1hbm4gYW5kIE1hcmt1cyBHdXRzY2hrZS4gVGhpcyBvbmUgaGFuZGxlcwp0aGUgbmV3IGJ6SW1hZ2UgZm9ybWF0LgoKQnVtcGVkIHVwIHZlcnNpb24gdG8gMi4wIGJlY2F1c2Ugd2UgYXJlIHNvIGxpc3RlZCBpbiB0aGUgTGludXggMi4wCmRpc3RyaWJ1dGlvbiBhbmQgdGhpcyB3b3VsZCBhdm9pZCBjb25mdXNpb24uCgpNYWpvciBjaGFuZ2VzIGZyb20gMi4wIHRvIDIuMQoKKyBBZGRlZCBMU00gZm9yIHRyYW5zbmFtZS1wYXRjaCB0byBjb250cmliLgoKKyBBZGRlZCBwYXRjaCBmb3Igc2VyaWFsIGNvbnNvbGUgZnJvbSBDbGF1cyBIZWluZQo8Y2xhdXMgQVQgbW9tbyBQRVJJT0QgbWF0aCBQRVJJT0Qgcnd0aC1hYWNoZW4gUEVSSU9EIGRlPi4KCisgQ2xhdXMgSGVpbmUgY29udHJpYnV0ZWQgcGF0Y2hlcyB0byB0aGUgMi4wLjIxLzIyIGtlcm5lbCBzb3VyY2VzIHRvCmFsbG93IE5GUyBzd2FwLgoKKyBNYXJrdXMgR3V0c2Noa2UgcHJvdmlkZWQgZml4ZXMgdG8gc3RhcnQyLlMgc28gdGhhdCBtYWluIGNhbiByZXR1cm4gdG8KdGhlIFJPTSBjb2RlIGlmIHVzZXIgZG9lc24ndCB3YW50IHRvIFJPTSBib290LgoKKyBBZGRlZCBjb2RlIHRvIG1haW4uYyB0byB0aW1lb3V0IG9uIHRoZSBwcm9tcHQgYW5kIGFzc3VtZSBZIG9yIE4KZm9yIHRoZSBhbnN3ZXIuIFRpbWVvdXQgYW5kIGFuc3dlciBjb25maWd1cmFibGUuCgorIE1hZGUgTkUxLzIwMDAgcHJvYmUgYWRkcmVzc2VzIGNvbmZpZ3VyYWJsZSBmcm9tIE1ha2VmaWxlLiBGaXhlZCB1cAphdXRvc2NhbiBjb2RlLgoKKyBNYWRlIE5GU19CT09UIGEgY29uZmlndXJhYmxlIG9wdGlvbi4gQnkgdW5kZWZpbmluZyBpdCwgb25seSB0YWdnZWQKZmlsZSBsb2FkIGlzIHN1cHBvcnRlZCBidXQgUk9NcyBhcmUgdW5kZXIgOGsuCgorIFJPTVNJWkUgaXMgbm90IHVzZWQgYnkgbWFrZXJvbSBub3cuIC1zIGZsYWcgY29udHJvbHMgc2l6ZSBvZiBST00KYXQgcnVudGltZS4gIFNvIGRvbid0IG5lZWQgdG8gcmVjb21waWxlIG1ha2Vyb20gaWYgUk9NU0laRSBjaGFuZ2VzLgoKKyBVcGRhdGVkIG5ldGJvb3QtMTYgZm9yIHRoZSBsYXRlc3QgZGV2IHRvb2xzIGZyb20gdGhlIExpbnV4LU1UCnByb2plY3QuIFVzZSB0aGUgc2l6ZS5jIGZyb20gdGhlcmUuCgorIEdvdCByaWQgb2YgX21haW4oKSBpbiBtYWluLmMsIGluc3RlYWQgdXNpbmcgI2lmZGVmIEVMRiBpbiBzdGFydDIuUy4KRUxGIGlzIHByZWZlcnJlZCBub3cgYW55d2F5LgoKKyBDaGFuZ2VkIGJjb21wYXJlIHRvIHN0YW5kYXJkIGJjbXAgYW5kIHJldmVyc2VkIHNlbnNlIG9mIHJlc3VsdC4KUmVhc29uOiB0byB1c2Ugc3RhbmRhcmQgbGlicmFyeSBpZiBhdmFpbGFibGUsIGUuZy4gTmV0Ym9vdC0xNi4KCisgQ29tbW9uIE1ha2VmaWxlIGZvciAzMiBiaXQgYW5kIDE2IHZlcnNpb25zLCB3aXRoIGRpZmZlcmVuY2VzIGluCkNvbmZpZyBmaWxlcy4KCk1ham9yIGNoYW5nZXMgZnJvbSAyLjEgdG8gMi4yCgorIE5ldyBkZXZpY2UgZHJpdmVyIGZvciB0aGUgQ3J5c3RhbCBTZW1pY29uZHVjdG9yIENTODl4MCBjaGlwc2V0IGZhbWlseS4KICAoYmVjYXVzZSBvZiBsZWdhbCBwcm9ibGVtcywgdGhpcyBjb2RlIGlzIGN1cnJlbnRseSBpbiB0aGUgImNvbnRyaWIiCiAgZGlyZWN0b3J5LikKCisgQWRkZWQgc3VwcG9ydCBmb3IgbG9hZGluZyBCT09UUCBleHRlbnNpb24gZmlsZXMgKGMuZi4gUkZDMTUzMykuCgorIElmIHdlIGhhdmUgdG8gZ28gdGhydSBhIGdhdGV3YXksIHRoZW4gdXNlIHRoZSBvbmUgdGhhdCBoYXMgYmVlbiB1c2VkIGZvcgogIHRoZSBCT09UUCBkYWVtb24uIElmIHRoZSBCT09UUCBkYWVtb24gaXMgZGlyZWN0bHkgYWNjZXNzaWJsZSwgdGhlbiB1c2UKICB0aGUgZmlyc3QgZW50cnkgaW4gdGhlICJndyIgZ2F0ZXdheSBsaXN0IGluc3RlYWQuCgorIEZvciBhbGwgcmV0cmllcywgYmFjayBvZmYgYWNjb3JkaW5nIHRvIFJGQzk1MSBieSByYW5kb21pemluZyB0aGUgdGltZW91dHMKICBhbmQgZXhwb25lbnRpYWxseSBpbmNyZWFzaW5nIHRoZW0gdW50aWwgYW4gYXZlcmFnZSBvZiBvbmUgbWludXRlIGlzCiAgcmVhY2hlZC4KCisgV2FybiBpZiBjb2RlIHdpbGwgbm90IGZpdCBpbnRvIGNob3NlbiBST00gc2l6ZS4gSGFwcGVucyBvbmx5IGlmIHRoZQogIGF1dG9zaXppbmcgaW4gdGhlIE1ha2VmaWxlIHNvbWVob3cgZmFpbHMuCgorIE1vZGlmaWVkIHRoZSBjb2RlIGZvciBlbmFibGluZyB0aGUgQTIwIGdhdGU7IHRoaXMgY291bGQgaW5jcmVhc2UKICBjb21wYXRpYmlsaXR5LCBidXQgSSBzdGlsbCBoYXZlIHRvIGhlYXIgZnJvbSB1c2Vycy4KCisgVGhlIGNvcHlyaWdodCBtZXNzYWdlIHdpbGwgbm93IHJlZmxlY3QsIHdoaWNoIGZlYXR1cmVzIGhhdmUgYmVlbgogIGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lLgoKKyBBZGRlZCBzdXBwb3J0IGZvciBzZWxlY3RpbmcgZGlmZmVyZW50IGJvb3QgaW1hZ2VzIGZyb20gYSBtZW51LiBBcyBhIHNpZGUKICBlZmZlY3QsIHRoaXMgY2FuIGJlIHVzZWQgdG8gdXBncmFkZSB0aGUgUk9NIHdpdGhvdXQgaGF2aW5nIHRvIGJ1cm4gYSBuZXcKICBpbWFnZSAoYy5mLiBSRUFETUUuVmVuZG9yVGFncykuCgorIERpc3BsYXkgYSAibWVzc2FnZSBvZiB0aGUgZGF5IiB0aGF0IGlzIHByb3ZpZGVkIGJ5IHRoZSBCT09UUCBkYWVtb24uCgorIFRoZSBzYW5pdHkgY2hlY2sgZm9yIGRldGVjdGluZyBhIExpbnV4IGtlcm5lbCB3YXMgdG9vIHN0cm9uZyB0byBwcm9wZXJseQogIHJlY29nbml6ZSBhIDIuMS54IGtlcm5lbDsgdGhpcyBoYXMgYmVlbiBmaXhlZC4KCisgVHJ5cyB0byBuZWdvdGlhdGUgZm9yIDE0MzIgb2N0ZWN0IGJsb2NrcywgaWYgdGhlIFRGVFAgZGFlbW9uIGtub3dzCiAgYWJvdXQgUkZDMTc4My4KCisgV2UgY2FuIG9wdGlvbmFsbHkgYm9vdCBmcm9tIGxvY2FsIGRpc2ssIGlmIHRoZSBCT09UUCBzZXJ2ZXIgY2Fubm90CiAgYmUgY29udGFjdGVkLgoKKyBSZXN0cnVjdHVyZWQgZGlyZWN0b3JpZXM6IGdvdCByaWQgb2YgbmV0Ym9vdC1mcmVlYnNkIHRvIHJlZHVjZSBjb25mdXNpb24KICB3aXRoIEdlcm8gS3VobG1hbm4ncyBuZXRib290LCBtb3ZlZCBkb2N1bWVudGF0aW9uIHRvIGRvYyBhbmQgcmVuYW1lZAogIGRpcmVjdG9yaWVzIHRvIGJlIG1vcmUgaW4gbGluZSB3aXRoIFVuaXggY29udmVudGlvbnMuIEVkaXRlZCBkb2N1bWVudGF0aW9uLgoKKyBDcmVhdGVkIGEgZGlzcGF0Y2ggdGFibGUgZm9yIE5JQyByb3V0aW5lcyBzbyB0aGF0IHdlIGNhbiBpbmNsdWRlIG9uZQogIG9yIG1vcmUgZHJpdmVycyBpbiBvbmUgYmluYXJ5LiBSZW5hbWVkIGFsbCBlbnRyeSBwb2ludHMgaW4gdGhlIGRyaXZlcgogIHNvdXJjZXMuIENyZWF0ZWQgdHdvIG5ldyBmaWxlcywgY29uZmlnLmMsIHdoaWNoIGhvbGRzIHRoZSBkaXNwYXRjaAogIHRhYmxlIGFuZCBjYW4gYmUgY29uZGl0aW9uYWxseSBjb21waWxlZDsgYW5kIG5pYy5jIHdoaWNoIGNvbnRhaW5zIHRoZQogIGV4dGVybiB2YXJpYWJsZXMgcmVmZXJlbmNlZCBieSB0aGUgZHJpdmVycy4KCisgQXV0b21hdGljYWxseSBkZWNpZGUgd2hhdCBzaXplIFJPTSBpcyBuZWVkZWQgYnkgZG9pbmcgYSBzaXplIGFuZCB0aGVuCiAgY2hvb3NpbmcgdGhlIGNvcnJlY3Qgc3RhcnR1cCBvYmplY3QuIEN1cnJlbnRseSBjYXRlcnMgZm9yIDhrLCAxNmsgYW5kCiAgMzJrIFJPTXMuCgorIE9wdGlvbmFsbHkgaW5jbHVkZSBhIHNpbXBsZSBpbnRlcnByZXRlciBmb3IgQU5TSSBlc2NhcGUgc2VxdWVuY2VzLiBUaGlzCiAgYWxsb3dzIGZvciBmYW5jaWVyIGJvb3QgbWVudXMuCgorIFJlbW92ZSBwYXRjaGVzIGRpcmVjdG9yeSB3aGljaCBpcyBtb3N0bHkgcmVsZXZhbnQgdG8gMS54IGtlcm5lbHMgb25seS4KICBFdmVyeWJvZHkgc2hvdWxkIHVzZSAyLngga2VybmVscyBub3cuIElmIGZvciBzb21lIHJlYXNvbiB5b3UgbmVlZCB0aG9zZQogIHBhdGNoZXMsIGdldCBhbiBvbGRlciByZWxlYXNlIG9mIGV0aGVyYm9vdC4KCisgRml4IE1ha2VmaWxlIHRvIHdvcmsgZXZlbiBpZiAuIG5vdCBvbiBQQVRILgoKKyBTYWRseSwgMzIgYml0IFJPTXMgYXJlIG5vdyA+IDhrYi4gV2Ugd2lsbCB0cnkgdG8gcmVkdWNlIHRoZSBzaXplIGJ5CiAgY29uZGl0aW9uYWxzIGluIGEgbGF0ZXIgcmVsZWFzZS4gRm9yIG5vdywgdXNlIHZlcnNpb24gMi4xIGlmIHlvdXIgTklDCiAgd29uJ3QgdGFrZSA+IDhrYiBST01zLgoKKyBSZWxlYXNlIGFzIDMuMGIxIGJlY2F1c2Ugb2YgdGhlIGxhcmdlIGFtb3VudCBvZiBjaGFuZ2VzLgoKKyBGaXhlZCBhIGZldyBwcm9ibGVtcyB3aXRoIHRoZSBjb2RlIGZvciBBTlNJIGVzY2FwZSBzZXF1ZW5jZXMgYW5kCiAgYWRkZWQgb3B0aW9uYWwgc3VwcG9ydCBmb3IgZGlzcGxheWluZyBncmFwaGljcy4KCisgT3B0aW9uYWwgc3VwcG9ydCBmb3IgcGFzc3dvcmQgcHJvdGVjdGVkIGJvb3QgaW1hZ2VzLgoKKyBPcHRpb25hbCBzdXBwb3J0IGZvciBib290aW5nIGZyb20gYmxvY2sgZGV2aWNlcyAoZmxvcHB5LCBoZCkuCgorIFRoZSBib290cCBzZXJ2ZXIgY2FuIHBhc3MgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIHRvIHRoZSBsb2FkZWQga2VybmVsCiAgaW1hZ2UgKGN1cnJlbnRseSwgdGhpcyBvbmx5ICBhcHBsaWVzIHRvIExpbnV4KSAgYW5kIHRoZSB1c2VyIGNhbiAgYmUKICBhbGxvd2VkIHRvIGVkaXQgYSBjb21tYW5kbGluZTsgdGhlIGxhdHRlciBpcyBvcHRpb25hbGx5IHByb3RlY3RlZCBieQogIGEgcGFzc3dvcmQgc2NoZW1lLgoKKyBTZXQgdGhlIHdhcm0tYm9vdCBmbGFnIHdoZW4gdGhlIG1haW4gcm91dGluZSBpcyBlbnRlcmVkLgoKKyBSZWxlYXNlIGFzIDMuMGIyCgorIEFkZGVkIGNvZGUgZm9yIHVwZGF0aW5nIHRoZSBGbGFzaENhcmQgRVBST00gb3ZlciB0aGUgbmV0d29yawogIChjb250cmliL2ZsYXNoaW1nKS4KCisgQWRkZWQgdmVyeSBzaW1wbGUgY29kZSBmb3IgdHVybmluZyBhIFJPTSBpbWFnZSBpbnRvIGEgbmV0d29yayBsb2FkYWJsZSBpbWFnZS4KICBUaGlzIGlzIHVzZWZ1bCBmb3IgZGVidWdnaW5nLCBidXQgc29tZSB1c2VycyB3aXRob3V0IGZsYXNoIEVQUk9NcyBtaWdodAogIGFwcHJlY2lhdGUgdGhlIHBvc3NpYmlsaXR5IHRvIGxvYWQgYSBmdWxseSBmbGVkZ2VkIGltYWdlIGZyb20gYSB2ZXJ5IGJhc2ljCiAgY29uZmlndXJhdGlvbi4KCisgT3B0aW9uYWwgc3VwcG9ydCBmb3IgY29tcHJlc3NpbmcgdGhlIFJPTSBpbWFnZXMuIFBsZWFzZSByZWFkCiAgZG9jL0NPUFlJTkcuY29tcHJlc3NvciBiZWZvcmUgdXNpbmcgdGhpcyBmZWF0dXJlLgoKKyBTeW5jJ2Qgb3VyIHNvdXJjZSB0cmVlIHdpdGggR2VybydzIG5ldGJvb3QtMC41OyB0aGlzIG1lYW5zIHRoYXQgeW91IG5vdyBuZWVkCiAgdGhlIGFzODYgZnJvbSB0aGUgRUxLcyBwcm9qZWN0IGluIG9yZGVyIHRvIHJlY29tcGlsZSBhbGwgb2YgdGhlIGZpbGVzLiBUaGlzCiAgc2hvdWxkIG5vdCBhZmZlY3Qgbm9ybWFsIHVzYWdlLCB0aG91Z2guCgorIEFkZGVkICJta25iaS1ibGtkZXYiIGZvciBib290aW5nIGZyb20gbG9jYWwgYmxvY2sgZGV2aWNlcy4KCisgRml4ZWQgc29tZSBidWdzIGluIHBwbXRvYW5zaS5jIGFuZCBib290bWVudS5jCgorIFJlbmFtZWQgcmVmZXJlbmNlIGNvbXByZXNzb3IgaW1wbGVtZW50YXRpb24gdG8gY29tcHJlc3Nvci5leHAgb3RoZXJ3aXNlCiAgbWFrZSB0cmllcyB0byB1c2UgaXQgYW5kIGl0IHNob3VsZCBub3QgYmUgdHVybmVkIG9uIGJ5IGRlZmF1bHQuCgorIFplcm8naW5nIEJTUyBpbiAxNi1iaXQgdmVyc2lvbiBoYXMgdG8gYmUgZG9uZSB0byBfZW5kLCBub3QgdG8gQTAwMDAKICBiZWNhdXNlIGl0J3MgZXhlY3V0aW5nIGluIGEgc2VnbWVudCwgbm90IGluIGZsYXQgYWRkcmVzcyBzcGFjZSBpbiAxNgogIGJpdCBtb2RlLgoKKyBLZW4gWWFwIGNvbnRyaWJ1dGVkIGEgcXVpY2sgYW5kIGRpcnR5IFBlcmwgc2NyaXB0IGZvciBwZW9wbGUgd2hvIHVzZQogIG5ldGJvb3QgdG8gdGVzdCBFTEtTLiAgU28gZmFyIEknbSB0aGUgb25seSBvbmUgSSBrbm93IG9mOyBtYXliZSB0aGUKICBvdGhlcnMgYXJlIHNpbGVudC4gOi0oCgorIFJlbGVhc2UgYXMgMy4wCgpNYWpvciBjaGFuZ2VzIGZyb20gMy4wIHRvIDMuMQoKKyA0IHZlcnNpb25zIG9mIGV0aGVyYm9vdCBjYW4gYmUgYnVpbHQgZm9yIGEgTklDOiAuY29tIGZvciB0ZXN0aW5nIGFuZAogIC5yb20gZm9yIGJ1cm5pbmcgaW50byBFUFJPTSwgYW5kIGNvcnJlc3BvbmRpbmcgY29tcHJlc3NlZCB2ZXJzaW9uczoKICAubHpjb20gYW5kIC5senJvbS4KCisgVGhlIGxvYWRlcnMgYXJlIG5vdyBzZXBhcmF0ZSBwcm9ncmFtcyB3aGljaCBhcmUgcHJlcGVuZGVkIHRvIHRoZQogIGV0aGVyYm9vdCBiaW5hcnkuIFRoaXMgYWxsb3dzIHRoZW0gKHBsYWluIGFuZCB1bmNvbXByZXNzaW5nIHZlcnNpb25zKSB0bwogIGJlIG1haW50YWluZWQgc2VwYXJhdGVseSBhbmQgZ2l2ZXMgYSBiaXQgbW9yZSBSQU0gdG8gdGhlIGV0aGVyYm9vdCBjb2RlLgoKKyBObyBuZWVkIHRvIGRlZmluZSBST01TSVpFIGluIHRoZSBidWlsZC4gbWFrZXJvbSBhdXRvbWF0aWNhbGx5IGRpc2NvdmVycwogIHRoZSBST00gc2l6ZSBuZWVkZWQgYW5kIGZpbGxzIGluIHRoZSBzaXplIGZpZWxkIGluIHRoZSBST00uIFRoaXMKICBzaW1wbGlmaWVzIHRoZSBidWlsZCBwcm9jZWR1cmUuCgorIDE2IGJpdCB2ZXJzaW9ucyB1c2UgdGhlIHNhbWUgbG9hZGVycyBhcyB0aGUgMzIgYml0IHZlcnNpb24uIEFsc28gZml4ZWQKICB0d28gYnVncyBpbiB0aGUgMTYgYml0IHZlcnNpb25zOiAoMSkgYSBub24tODA4NiBpbnN0cnVjdGlvbiBpbiB6bG9hZGVyLAogICgyKSBzZXR0aW5nIHdhcm0tYm9vdCBmbGFnIGluIG1haW4gd2hpY2ggemFwcGVkIHNvbWUgY29kZS4KCisgRml4ZWQgYSBkb2N1bWVudGF0aW9uIGJ1ZyBvbiB0aGUgQU5TSSBlc2NhcGUgc2VxdWVuY2VzLgoKKyBJbmNsdWRlIG5ldGJvb3QtMC41LjMgZGlzdHJpYnV0aW9uIGZyb20gR2VybyBLdWhsbWFubi4KCisgSW5jbHVkZWQgc29tZSBjb250cmlidXRpb25zIGZyb20gRGlja29uLlJlZWQgQVQgY2wgUEVSSU9EIGNhbSBQRVJJT0QKYWMgUEVSSU9EIHVrOiBSdW5uaW5nIGRpc3BsYXkgb2YgS2J5dGVzIGxvYWRlZCwgbGluZSBvZiBkZWxpbWl0ZXJzIGFmdGVyCmxvYWRpbmcgY29tcGxldGUsIGEgdGVtcG9yYXJ5IGhhY2sgdG8gYWRkcmVzcyB0aW1pbmcgcHJvYmxlbXMgd2l0aCB0aGUKM0M1MDksIGFuZCBzb21lIE1ha2VmaWxlIGNsZWFudXAuIFRoZSBmaXJzdCB0d28gY2hhbmdlcyBuZWVkIHRvIGJlCmVuYWJsZWQgaW4gQ29uZmlnIHdpdGggZGVmaW5lcy4KCisgbWtuYmktYmxrZGV2IHNlZW1zIHRvIGhhdmUgYmVlbiBsZWZ0IG91dCBieSBHZXJvIEt1aGxtYW5uLiBBZGQgdG8KICBjb250cmliIGRpcmVjdG9yeS4gWW91IHByb2JhYmx5IGhhdmUgdG8gbWFrZSBhIHN5bWxpbmsgdG8gaXQgZnJvbQogIHRoZSBuZXRib290LTAuNS4yIGRpcmVjdG9yeS4KCisgUmVsZWFzZSBhcyAzLjEKCk1ham9yIGNoYW5nZXMgZnJvbSAzLjEgdG8gMy4yCgorIDE2IGJpdCB2ZXJzaW9uIG5vdyBjYW4gbG9hZCB0byBleHRlbmRlZCBtZW1vcnksIGlmIGl0IGV4aXN0cy4gT24KICBhIDgwODYvOCB0aGlzIHdpbGwgc2lsZW50bHkgZmFpbC4KCisgQ2xlYW5lZCB1cCBpbnRlcmZhY2UgYmV0d2VlbiBtYWluIGJvZHkgb2YgY29kZSBhbmQgTklDIGRyaXZlcnMuIE5vCiAgZ2xvYmFsIHZhcmlhYmxlcyByZWZlcmVuY2VkIGluIE5JQyBkcml2ZXIsIGV2ZXJ5dGhpbmcgaXMgcGFzc2VkCiAgdGhyb3VnaCBhIHN0cnVjdHVyZS4gT25seSB0aGUgcHJvYmUgZnVuY3Rpb24gaXMgdmlzaWJsZSBvdXRzaWRlLAogIHBvaW50ZXJzIHRvIHRoZSBvdGhlcnMgYXJlIHJldHVybmVkIGluIHRoZSBzdHJ1Y3R1cmUuCgorIEltcGxlbWVudGVkIGF1dG9wcm9iZSBmb3IgM2M1MDMuIEFsc28gc2ltcGxpZmllcyBjb2RlIGF0IHNhbWUgdGltZS4KCisgUmVtb3ZlZCBBUlAgcmVzcG9uc2UgY29kZSBpbiBuczgzOTAuYy4gRG9uJ3QgdGhpbmsgd2UgbmVlZCB0byByZXNwb25kCiAgdG8gQVJQIHJlcXVlc3RzIGJlY2F1c2Ugb3RoZXIgbWFjaGluZXMgd2lsbCBkbyBncmF0dWl0dW91cyBBUlAgd2hlbgogIGJvb3QgY29kZSBzZW5kcyBvdXQgYm9vdHAgcmVxdWVzdC4gQXJlIHRoZXJlIGNhc2VzIHdoZXJlIHRoaXMgaXMgbm90CiAgdHJ1ZT8gR2F0ZXdheXM/CgorIEFkZGVkIDEgc2Vjb25kIHRpbWVvdXQgdG8gcm91dGluZSB0aGF0IGNsZWFycyB0aGUga2V5Ym9hcmQgYnVmZmVyCiAgaW4gY2FzZSB0aGVyZSBpcyBubyBrZXlib2FyZC4KCisgQWRkZWQgYSBza2VsZXRvbiBkcml2ZXIgdGhhdCBjYW4gYmUgdXNlZCBhcyBhIHRlbXBsYXRlIGZvciBuZXcgTklDCiAgZHJpdmVycy4KCisgLi9semh1ZiBpbiBNYWtlZmlsZSBzbyB0aGF0IGl0IHdpbGwgcnVuIGV2ZW4gaWYgLiBpcyBub3Qgb24gcGF0aC4KCisgRml4ZWQgY29tYm9vdCB0byB3b3JrIG9uIDI4NnMgYWxzby4gV29uJ3Qgd29yayB5ZXQgb24gODA4Ni84LgoKKyBGaXhlZCBta25iaS1ibGtkZXYgdG8gY29uZmlndXJlIHByb3Blcmx5IHVuZGVyIG5ldGJvb3QtMC43LgoKKyBBZGRlZCBEYXZpZCBNdW5ybydzIFBDSSBjb2RlIGFkYXB0ZWQgZnJvbSBMaW51eC4gQ3VycmVudGx5IGhhcyBlbnRyaWVzCiAgZm9yIFBDSSBORTIwMDAgY2xvbmVzLiBHZW5lcmFsaXNlZCBpdCB0byBwcm9iZSBvdGhlciBQQ0kgY2FyZHMgbGF0ZXIgb24uCgorIE1vdmVkIHR3aWRkbGUoKSBvdXRzaWRlIE5JQyBkcml2ZXIgZXhjZXB0IHdoZXJlIHVzZWQgdG8gcHJvdmlkZSBhIGRlbGF5LgoKKyBGaXhlZCBidWcgaW4gTWFrZWZpbGUgc3BvdHRlZCBieSBUb24gQmllZ3N0cmFhdGVuLiBTaG91bGQgcHJlcGVuZAogIFpMT0FERVIgdG8gbWFrZSBhbGwubHpjb20sIG5vdCBMT0FERVIuCgorIENoYXJsaWUgQnJhZHkgZG9uYXRlZCBhIE5FMjEwMCAoTEFOQ0UpIGNhcmQsIHNvIEtlbiBZYXAgd3JvdGUgYSBkcml2ZXIKICBmb3IgaXQuIFNob3VsZCB3b3JrIGZvciBvdGhlciBMQU5DRSAoNzk5MCwgZXRjKSBiYXNlZCBjYXJkcyB3aXRoIHNvbWUKICBtb2RpZmljYXRpb25zLgoKKyBNYXJrdXMgR3V0c2Noa2Ugd3JvdGUgcm9tLXNjYW4sIGFuZCBpdCBpcyBpbiBjb250cmliLy4KCisgSGFjayByb20tc2Nhbi5jIHNvIHRoYXQgYSBET1MgdmVyc2lvbiBjYW4gYmUgY29tcGlsZWQuCgorIFJlbW92ZWQgYWxsLiogdGFyZ2V0cyBmcm9tIE1ha2VmaWxlLiBUaGUgTklDIHNwZWNpZmljIGxvYWRlcnMgc2hvdWxkIGJlCiAgdXNlZCBpbiBwcmVmZXJlbmNlIGFzIHRoZSBhbGwuKiBsb2FkZXJzIGNhbiBydW4gb3V0IG9mIG1lbW9yeS4KCisgQWRkZWQgYSBkaXNhYmxlIHJvdXRpbmUgdG8gZGlzcGF0Y2ggdGFibGUgc28gdGhhdCBjYXJkcyBjYW4gYmUgdHVybmVkCiAgb2ZmIGJlZm9yZSB0aGUgbG9hZGVkIGNvZGUgaXMgZXhlY3V0ZWQuCgorIE1ha2UgSU5UMTlIIHRoZSBkZWZhdWx0LgoKKyBSb2dpZXIgV29sZmYgcGVyc3VhZGVkIEFXIGNvbXB1dGVyIHN5c3RlbXMgdG8gY29udHJpYnV0ZSB0aGUgSW50ZWwKICBFdGhlckV4cHJlc3NQcm8gMTAwIGRyaXZlci4gVGhlIGJpbmFyeSB0byBoZXggY29udmVydGVyIGluIGNvbnRyaWIvCiAgaXMgYWxzbyBmcm9tIFJvZ2llciBXb2xmZi4gUGFydCBvZiB0aGUgd29yayBpcyBzcG9uc29yZWQgYnkgQml0V2l6YXJkCiAgTkwgKHd3dy5iaXR3aXphcmQubmwpLgoKKyBEaXN0cmlidXRlIHdpdGggYSBzdWJzZXQgb2YgbmV0Ym9vdC0wLjcuMiB0aGF0IGRvZXNuJ3QgaGF2ZSB0aGUgYm9vdHJvbQogIHBvcnRpb24uCgorIFJlbGVhc2UgYXMgMy4yLgoKTWFqb3IgY2hhbmdlcyBmcm9tIDMuMiB0byA0LjAKCisgTWVyZ2VkIGluIFZsYWQgTHVuZ3UncyBwYXRjaGVzIGZvciBESENQIHN1cHBvcnQsIGlmZGVmJ2VkIGJ5IERIQ1BfU1VQUE9SVC4KCisgWElEIG1hdGNoaW5nIGZpeCBhbHNvIHByb3ZpZGVkIGJ5IFZsYWQgTHVuZ3UuCgorIE1lcmdlZCBpbiBXaWxsaWFtIEFyYmF1Z2gncyBwYXRjaGVzIHRvIG1ha2UgZWVwcm8gZHJpdmVyIHdvcmsgcHJvcGVybHkuCgorIEFkZCB0byBjb250cmliLyBiZXR0ZXIgYmluMmludGVsaGV4IGZyb20gSmVhbiBNYXJjIExhY3JvaXguCgorIFBhdGNoZXMgZnJvbSBKaW0gSGFndWUgKHRoYW5rcyEpIGZvciB0aGUgZm9sbG93aW5nOgoKKiBBZGRlZCBQSU8gbW9kZSBmb3IgM2M1MDMgdG8gbnM4MzkwLmMuIENoYW5nZWQgdGhlIGNhcmQgZGV0ZWN0aW9uIHRvCiAgZGV0ZWN0IHNoYXJlZCBtZW1vcnkgb3IgUElPIGFuZCB1c2UgdGhlIHNlbGVjdGVkIG9uZSwgYW5kIHJlbW92ZWQKICBhIGp1bXBlciBjaGVjayB0aGF0IGZhaWxlZCBvbiB0aGUgQnVsbCAobm8ganVtcGVycykuCgoqIEFkZGVkIG1vcmUgI2lmZGVmcyB0byBuczgzOTAuYyB0byBpbmNsdWRlIG9ubHkgY29kZSByZWxldmFudCB0byB0aGUKICBjYXJkIGJlaW5nIGNvbXBpbGVkLCBhbmQgcmVtb3ZlZCB1bm5lY2Vzc2FyeSBydW4tdGltZSBjYXJkIHZlbmRvcgogIGJlaGF2aW91ciBicmFuY2hlcyAtIGl0J3MgYWxsIG5vdyAjaWZkZWZkLgoKKiBBZGRlZCBhIC0zIHBhcmFtZXRlciB0byBtYWtlcm9tIHRvIHNldCB0aGUgbGFzdCB0d28gYnl0ZXMgdG8gMHg4MC4KICBUaGVzZSBhcmUgdGhlIHZhbHVlcyB0aGV5IGhhdmUgaW4gdGhlIDNDb20gRXRoZXJib290IGltYWdlIHRoYXQgd2FzCiAgaW4gdGhlIEJ1bGwuIChBbHNvIG9uIHRoZSAzYzUwMyBjYXJkIEkgaGF2ZSAtIEtlbi4pIEFsc28gYWx0ZXJlZCB0aGUKICBNYWtlZmlsZSB0byBhZGQgdGhpcyBwYXJhbWV0ZXIgd2hlbiBidWlsZGluZyBhIDNjNTAzIGltYWdlLgoKKiBNb2RpZmllcyBsemh1Zi5jLCBvYmpkdW1wODYuYyAmIHNpemU4Ni5jIHRvIHdvcmsgb24gZWl0aGVyLWVuZGlhbiBzeXN0ZW1zLgoKKiBBZGRzIGEgLURUNTAzX0FVSSBjb25maWcgcGFyYW10ZXIgdG8gbGV0IHlvdSBjaG9vc2UgQVVJIG9yIEJOQyBvbgogIDNjNTAzcy4gIFByZXZpb3VzbHkgaXQgZGVmYXVsdGVkIHRvIEFVSSwgYW5kIHlvdSBoYWQgdG8gY2hhbmdlIHRoZQogIGNvZGUgdG8gYWx0ZXIgaXQuCgoqIENoYW5nZWQgdGhlIEJDQyBpbmNsdWRlIGRpcmVjdG9yeSB0byAvdXNyL2JjYy9pbmNsdWRlLiBJZiB5b3UgdXNlIHRoZQogIEJDQyBpbmNsdWRlIGZpbGVzIHRoZXkgZG9uJ3QgZGVmaW5lIHVfY2hhciwgdV9zaG9ydCBldGMuIEkndmUgYWRkZWQKICB0aGVzZSBpbnRvIGxpbnV4ZGVmLmgsIGlmZGVmJ2Qgb24gQkNDLgoKKiBBZGRzIGEgdHJpdmlhbCBMaW51eCAzYzUwMyBkcml2ZXIgcGF0Y2ggdG8gdGhlIGNvbnRyaWIgZGlyZWN0b3J5CiAgdG8gbGV0IGl0IHNwb3QgdGhlc2UgJ2VyZSBCdWxsIHRoaW5ncy4KCisgQ2hhcmxpZSBCcmFkeSBjb25maXJtZWQgdGhhdCB0aGUgTGFuY2UgZHJpdmVyIHdvcmtzIHdpdGggUENJIHNvIHRoZXJlCmlzIGEgbmV3IGxhbmNlcGNpIGRyaXZlciBub3cuCgorIFJlbW92ZWQgc3VwcG9ydCBmb3IgTkZTX0JPT1Q7IG9ubHkgVEZUUCBib290aW5nIHN1cHBvcnRlZCBub3cuCgorIFJlbW92ZWQgc3VwcG9ydCBmb3IgbGluZWFyIGltYWdlczsgb25seSB0YWdnZWQgaW1hZ2VzIHN1cHBvcnRlZCBub3cuCgorIFJlbW92ZWQgUFJJT1JJWkVCT09UUEtFUk5FTCBhbmQgQk9PVFBLRVJORUxPTkxZLiBCb290cCByZXBseSBtdXN0CnNwZWNpZnkga2VybmVsIG5hbWUuCgorIEJ1ZyBmaXggZm9yIDE2IGJpdCB2ZXJzaW9uIG9mIDNjNTA5IGRyaXZlcjogc2lnbiBiaXQgcHJvcGFnYXRpb24gYnVnLgoKKyBSZXZlcnQgdG8gbm9uLXBhdXNpbmcgdmVyc2lvbnMgb2Ygb3V0W2J3XSBhbmQgaW5iIGZvciBORXgwMDAgZHJpdmVyCmJlY2F1c2Ugb2YgcmVwb3J0cyBvZiB0aW1pbWcgcHJvYmxlbXMgb24gc29tZSBjYXJkcy4KCisgTmV3IGRyaXZlciBmb3IgTkk2NTEwLiBKdXN0IGEgc2ltcGxlIHR3ZWFrIG9mIHRoZSBsYW5jZSBkcml2ZXIgZm9yCmRpZmZlcmVudCBJRCBieXRlcyBhbmQgZGlmZmVyZW50IHJlZ2lzdGVyIG9mZnNldHMuIEFjY29yZGluZyB0byB0aGUKTkk2NTEwIGRyaXZlciBpbiBMaW51eCwgdGhlIE5JNjUxMCBFdGhlcmJsYXN0ZXIgaXMgbW9yZSBsaWtlIHRoZSBORTIxMDAKYW5kIHdvdWxkIGJlIGRldGVjdGVkIGJ5IHRoZSBORTIxMDAgZHJpdmVyLiBTbyB1c2UgdGhhdCBvbmUgaW5zdGVhZC4KCisgTmV3IGRyaXZlcnMgZm9yIDNjNTA3IGFuZCBOSTUyMTAsIGJvdGggb2Ygd2hpY2ggdXNlIHRoZSBpODI1ODYgY2hpcC4gSXQKd29ya3MgcHJvcGVybHkgZm9yIGJvdGggbm93LiBJIG5lZWRlZCB0byBoYXZlIGVub3VnaCByZWNlaXZlIGJ1ZmZlcnMgdG8KbWFrZSBzdXJlIGk4MjU4NiBuZXZlciBnb2VzIGludG8gYW4gb3V0IG9mIHJlc291cmNlcyBzdGF0ZS4gM2M1MDcgZHJpdmVyCmhhcyBvbmUgcXVpcmssIGl0IG9ubHkgcmVzcG9uZHMgYWZ0ZXIgc2Vjb25kIGJvb3RwIHJlcXVlc3QuIEkgc2VlbSB0bwpyZW1lbWJlciBzb21ldGhpbmcgYWJvdXQgdGhpcyBwcm9ibGVtIG9mIGxvc2luZyB0aGUgZmlyc3QgcGFja2V0IGFmdGVyCmluaXRpYWxpc2F0aW9uIGluIGVhcmx5IExpbnV4IGRpc2N1c3Npb25zLiAgSSBhbSBhbHNvIG5vdyBjb252aW5jZWQKdGhhdCBJbnRlbCBkZXNpZ25lcnMgaGF2ZSB3ZWlyZCBtaW5kcy4gQlRXLCBOSTUyMTAgZHJpdmVyIGFzc3VtZXMgOGsKUkFNIGJlY2F1c2UgaWYgeW91IHB1dCB0aGUgUk9NIG9uIHRoZSBOSUMgeW91IGNhbiBvbmx5IGhhdmUgOGsgUkFNLiBJZgp5b3UgYXJlIHB1dHRpbmcgdGhlIFJPTSBvZmYtYm9hcmQgYW5kIHlvdSB3YW50IDE2aywgd2VsbCwgdGFsayB0byBtZS4KCisgQ2FsbCBuaWNfZGlzYWJsZSByb3V0aW5lIGp1c3QgYmVmb3JlIGp1bXBpbmcgdG8gbG9hZGVkIGltYWdlLiBUaGlzCmRvZXMgbm90aGluZyBpbiBtb3N0IGRyaXZlcnMsIGJ1dCBtYXkgaGF2ZSBzaWRlIGVmZmVjdHMgYXMgdGhlIG5pY19yZXNldApyb3V0aW5lIHVzZWQgdG8gYmUgY2FsbGVkIGluc3RlYWQuCgorIE9uZSBvZiB0aG9zZSAid2h5IEkgZGlkbid0IHRoaW5rIG9mIGl0IGJlZm9yZSIgaWRlYXM6IEEgbW9kaWZpZWQgdmVyc2lvbgpvZiBjb21ib290LCBjYWxsZWQgZmxvcHB5bG9hZCwgdGhhdCBpcyBwcmVwZW5kZWQgdG8gdGhlIC5yb20gaW1hZ2UgcmF0aGVyCnRoYW4gdGhlIC5jb20gaW1hZ2UgYW5kIHRoZW4gYm90aCB3cml0dGVuIHJhdyB0byBhIGZsb3BweSBmb3IgdGVzdGluZyB0aGUKYm9vdHJvbS4gQWxsIHdlIGhhdmUgdG8gZG8gaXMganVtcCB0byBhbiBlbnRyeSBwb2ludCBpbiAoeilsb2FkZXIgdGhhdApza2lwcyB0aGUgSU5UMTlIIHN0dWZmLiBSZWxvY2F0aW9uIHdpbGwgaGFwcGVuIGF1dG9tYXRpY2FsbHkuICBOb3cgdGhlCi5jb20gaW1hZ2VzIGFuZCBjb21ib290IGFyZSBzdXBlcmZsdW91cywgdW5sZXNzIG9uZSBpcyBtYXNvY2hpc3RpYyBlbm91Z2gKdG8gd2FudCB0byB0cnkgdG8gdGVzdCB1bmRlciBET1MuCgpBZGRlZCAuZmQwIHRhcmdldHMgdG8gTWFrZWZpbGUuIFNheWluZyBtYWtlIDxjYXJkPi5mZDAgd2lsbCBtYWtlCmZsb3BweWxvYWQuYmluIGFuZCA8Y2FyZD4ucm9tLCBhbmQgY2F0IGJvdGggdG8gL2Rldi9mZDAuIE5hdHVyYWxseSB0aGUKZHJpdmUgbXVzdCBiZSB3cml0YWJsZSBhbmQgeW91IG11c3QgaGF2ZSBhIGZsb3BweSBpbiB0aGUgZHJpdmUuCgorIE5ldyBkcml2ZXIgZm9yIFRpYXJhIChGdWppdHN1IEV0aGVyU3RhcikuIFRoaXMgd2FzIG9uZSBvZiB0aGUgZWFzaWVzdApkcml2ZXJzIHRvIHdyaXRlLiBCdXQgdGhlIGNoaXAgYXBwYXJlbnRseSBoYXMgc29tZSBxdWlya3M7IHRoZXJlIGlzIG5vCkxpbnV4IGRyaXZlciBmb3IgaXQgaW4gdGhlIHN0YW5kYXJkIGRpc3RyaWJ1dGlvbiBhbmQgdGhlIGVtYWlsIGFkZHJlc3MKb2Ygc29tZW9uZSB3aG8gd3JvdGUgYW4gYWxwaGEgZHJpdmVyIGlzIGludmFsaWQuIFBlcmhhcHMgSSdsbCBidW1wIGludG8KYW4gQVQxNzAwICh3aGljaCBoYXMgYSBzaW1pbGFyIGNoaXApIG9uZSBkYXkgYW5kIGJlIGFibGUgdG8gcmV1c2UgYSBsb3QKb2YgdGhlIGNvZGUuCgorIFVwZGF0ZWQgY29udHJpYi9ta2Vsa3NuYmkgZm9yIEVMS1MgMC4wLjY4LgoKKyBDb25maXJtZWQgdGhhdCB0aGUgU01DODIxNiBkcml2ZXIgd29ya3MuIDg0MTYgbm90IHRlc3RlZCwgaXQncyBhIFBuUApjYXJkLiBDYW4gYW55Ym9keSBjb25maXJtIHRoaXM/CgorIE5ldyBjb250cmlidXRlZCBzb2Z0d2FyZTogcDkxMG5kLCBhIHRpbnkgcHJpbnRlciBkYWVtb24gc3VpdGFibGUgZm9yCmRpc2tsZXNzIGhvc3RzLgoKKyBNYWRlIEFOU0lFU0Mgd29yayBmb3IgRXRoZXJib290LzE2LgoKKyBGaXhlZCBNYWtlZmlsZSBhbmQgQ29uZmlnLiogc28gdGhhdCBpdCB3b3JrcyB3aXRoIG9sZCBiaW51dGlscy4KCisgSW5jbHVkZWQgYSBzdWJzZXQgb2YgbmV0Ym9vdC0wLjcuMy4KCisgUmVsZWFzZWQgYXMgdmVyc2lvbiA0LjAuCgpDaGFuZ2VzIGJldHdlZW4gNC4wIGFuZCA0LjEKCisgUGF0Y2hlcyBieSBBbmRyZXcgQ291bHRodXJzdCBmb3IgZWVwcm8xMDBiLgoKKyBQYXRjaGVzIGJ5IERvdWcgQW1icmlza28gZm9yIGJvb3RpbmcgV2luZG93czk1IGFmdGVyIGFuc3dlcmluZyBOIHRvCnRoZSBib290IGZyb20gbmV0d29yayBxdWVzdGlvbi4gQWRkZWQgY29uZGl0aW9uYWwgY29kZSB0byBjb3BlIHdpdGgKYnJva2VuIERIQ1Agc2VydmVyIGFuZCBUQUcgMTI4LgoKKyBQdXQgdmVyc2lvbiBhbmQgZHJpdmVyIGlkZW50aWZpZXIgYXQgZW5kIG9mIFJPTSBpbWFnZSBpZiBpdCBmaXRzLAp0byBoZWxwIGlkZW50aWZ5IFJPTXMgaW4gZnV0dXJlLgoKKyBDYXB0dXJlIFJPTSBzZWdtZW50IGFkZHJlc3MgYW5kIGxlbmd0aCB0byBoZWxwIGNob29zZSBiZXR3ZWVuIG11bHRpcGxlCk5JQ3MgbGF0ZXIuCgorIERvbid0IGNsZWFyIGFsbCBvZiBtZW1vcnkgYmVjYXVzZSBpdCB3aWxsIGRlc3Ryb3kgcmV0dXJuIGFkZHJlc3MKb24gc3RhY2suCgorIENoYW5nZXMgdG8gY29tYm9vdC0xLjIgKGFsdGhvdWdoIG9ic29sZXRlKSB0byBydW4gb24gODA4OHMuCgorIE5ldyB2ZXJzaW9uIDAuMiBvZiBwOTEwbmQsIGEgbm9uLXNwb29saW5nIHByaW50ZXIgZGFlbW9uLgoKKyBQYXRjaGVzIGJ5IEFsZXggSGFyaW4gdG8gcHJlcGVuZGVkIGxvYWRlcnMgYW5kIG1ha2Vyb20gdG8gZ2VuZXJhdGUgUG5QCnJlYWR5IFJPTXMuIE1vZGlmaWVkIG1ha2Vyb20gdG8gYXV0b21hdGljYWxseSBkZXRlY3QgUG5QIGFuZCBQQ0kgaGVhZGVycwphbmQgZG8gdGhlIHJpZ2h0IHRoaW5nLiBBZGRlZCBvcHRpb24gdG8gY2hhbmdlIHRoZSB2ZW5kb3IgYW5kIGRldmljZSBJRHMuCgorIEF1Z21lbnRlZCBkb2N1bWVudGF0aW9uIGZvciAyLjEgYW5kIGFib3ZlIGtlcm5lbHMuIEtlcm5lbCBub3cgd2FudHMgdG8KbW91bnQgL3RmdHBib290Lzxob3N0bmFtZSBpbiBib290cHRhYj4gcmF0aGVyIHRoYW4gL3RmdHBib290LzxpcCBhZGRyZXNzPgphcyB0aGUgcm9vdCBGUy4KCisgQ2hhbmdlZCBhbGwgdGhlIG91dGIqIGFuZCBvdXR3IGNhbGxzIGluIGRyaXZlcnMgKGV4Y2VwdCBlZXBybykgdG8gYmUKT1VUQiogYW5kIE9VVFcsIHRoZW4gZGVmaW5lZCBtYWNyb3MgdG8gdHJhbnNsYXRlIHRvIG91dFticF0qIGZvciBib3RoCkV0aGVyYm9vdC8zMiBhbmQgRXRoZXJib290LzE2LCBpbnN0ZWFkIG9mIHBhc3RpbmcgbWFjcm9zIGZyb20gTGludXgKaW5jbHVkZSBmaWxlcyBiZWNhdXNlIGFwcGFyZW50bHkgdGhleSd2ZSBjaGFuZ2VkIGluIDIuMS4gQXQgdGhlIHNhbWUKdGltZSByZXZlcnNlZCB0aGUgYXJndW1lbnRzIGluIHN0YXJ0MTYuUyBmb3Igb3V0YiBhbmQgb3V0dyB0byBtYXRjaCB0aGUKTGludXggY29udmVudGlvbi4gVW5mb3J0dW5hdGVseSB0aGUgb3V0W2J3XSB1c2FnZSBjYW1lIHRoYXQgd2F5IGZyb20KRnJlZUJTRC4gU29tZWRheSBJJ2xsIHJldmVyc2UgdGhlIGFyZ3VtZW50cyBpbiB0aGUgQyBmaWxlcyBwcm9wZXJseS4KRm9yIGFueSBuZXcgZHJpdmVyIHdyaXRlcnMsIHlvdSBzaG91bGQgdXNlIHRoZSBMaW51eCBvcmRlciBub3cuCgorIE5ldyBjb250cmlidXRlZCB1dGlsaXR5LCBkaXNuYmkgZm9yIGRlY29kaW5nIGFuZCBleHRyYWN0aW5nIG5ldHdvcmsKYm9vdCBpbWFnZXMuCgorIE1hcnRpbiBBdGtpbnMgY29udHJpYnV0ZWQgbW50bmJpIGZvciBtb3VudGluZyBET1MgTkJJcy4KCisgUGV0ZXIgRG9iY3NhbnlpIGNvbnRyaWJ1dGVkIHZlbmRvciBhbmQgZGV2aWNlIElEcyBmb3IgdGhlIE5ldHZpbgpORTIwMDAvUENJIGNsb25lLgoKKyBhZGFtIEFUIG11ZGxpc3QgUEVSSU9EIGVvcmJpdCBQRVJJT0QgbmV0IGNvbnRyaWJ1dGVkIFJBUlAgY29kZSBhcwphbHRlcm5hdGl2ZSB0byBCT09UUC9ESENQLiBBY3RpdmF0ZWQgYnkgUkFSUF9OT1RfQk9PVFAgZGVmaW5lLgoKKyBBZGRlZCBsaW5rIHRvIENsYXVzLUp1c3R1cyBIZWluZSdzIE5GUyBzd2FwIFdlYiBwYWdlIGFuZCB1cGRhdGVkIHRoZQpjb250cmliIGRpcmVjdG9yeS4KCisgRGlzYWJsZWQgbWF4IHBhY2tldCBsZW5ndGggY2hlY2sgaW4gbnM4MzkwLmMuIENhdXNlZCBzcHVyaW91cyBCb2d1cwpwYWNrZXQgbWVzc2FnZXMgaW4gc29tZSBjYXNlcyBhbmQgZG9lc24ndCBzZWVtIHRoYXQgdXNlZnVsIGEgc2FuaXR5CmNoZWNrIGFueXdheS4KCisgRGFuaWVsIEVuZ3N0cm9tIGNvbnRyaWJ1dGVkIGEgU01DOTAwMCBkcml2ZXIuCgorIERpZGllciBQb2lyb3QgY29udHJpYnV0ZWQgYW4gRXRoZXJwb3dlciBJSSAoRVBJQyAxMDApIGRyaXZlci4KCisgQWRkZWQgYnVnIGZpeCBieSBBdHRpbGEgQm9n4XIgZm9yIGJvb3RtZW51LmMgYW5kIHBhdGNoIHRvIG1haW4uYyB0bwpyZW1vdmUgbG9vcGluZyBtZW51cyBvbiBmYWlsdXJlLiBBbHNvIGNvZGUgZm9yIEFSUCByZXBsaWVzIGFuZCBURlRQCmJsb2NrIHJldHJhbnNtaXQgKCNpZmRlZmVkIGJlY2F1c2UgY29udHJvdmVyc2lhbCkuCgorIENvZGUgY2xlYW51cCBvZiB0ZnRwIGFuZCB0ZnRwZCBhbHNvIGJ5IEF0dGlsYSBCb2fhci4KCisgTmF0aGFuIFIuIE5ldWxpbmdlciBmaXhlZCBhIGJ1ZyB3aXRoIGJsb2NrIGJlaW5nIGRlY2xhcmVkIHNob3J0IGluc3RlYWQKb2YgdV9zaG9ydCBpbiB0ZnRwZC5jLCB3aGljaCBsaW1pdGVkIHRyYW5zZmVycyB0byAzMmsgYmxvY2tzLiBGaXhlZApwcm9ibGVtIHdpdGggZmllbGQgdHVfYmxvY2sgYmVpbmcgZGVjbGFyZWQgYXMgc2lnbmVkIHNob3J0IGluIG1hbnkKcGxhdGZvcm1zIGJ5IGluY2x1ZGluZyBmaXhlZCB2ZXJzaW9uIG9mIHRmdHAuaC4gRml4ZWQgdGZ0cCBhbHNvIGZvcgpnb29kIG1lYXN1cmUuCgorIE5ldyBtaW5pLUhPV1RPIG9uIGEgInNzaCB0ZXJtaW5hbCIuCgorIEFuZHJlYXMgTWFjayBwb2ludGVkIG91dCB0aGF0IGVlcHJvMTAwIGRvZXNuJ3QgY29tcGlsZSBvbiAyLjEgYW5kCjIuMiBrZXJuZWxzLiBSZW1vdmVkIHVubmVjZXNzYXJ5IGluY2x1ZGUgb2YgYmlvczMyLmggYW5kIHJlbGlhbmNlIG9uCmRlZmluaXRpb24gb2YgdmlydF90b19idXMgaW4ga2VybmVsIGhlYWRlcnMgaW4gZWVwcm8xMDAuYywgZXBpYzEwMC5jCmFuZCBsYW5jZS5jLgoKKyBEYXZpZCBTaGFycCBjb250cmlidXRlZCBhIFR1bGlwIGRyaXZlciB3cml0dGVuIGZvciBGcmVlQlNEIG5ldGJvb3QuCktlbiBZYXAgcG9ydGVkIHRvIEV0aGVyYm9vdC4gTm90IHRlc3RlZCB5ZXQgYmVjYXVzZSBubyBoYXJkd2FyZS4KCisgUmVwbGFjZWQgcmVmZXJlbmNlcyB0byBhcnB0YWJsZVtBUlBfQ0xJRU5UXS5ub2RlIHRvIG5pYy0+bm9kZV9hZGRyIGluCmVlcHJvMTAwLmMgYW5kIGVwaWMxMDAuYyBhcyB0aGV5IHNob3VsZCBiZS4KCisgR3JlZyBCZWVsZXkgb2YgTGlnaHRTeXMgVGVjaG5vbG9neSBTZXJ2aWNlcyBjb250cmlidXRlZCBhIDNjOTA1Ygpkcml2ZXIuIEJlIHN1cmUgdG8gcmVhZCB0aGUgcmVsZWFzZSBub3RlcyBpbiAzYzkwNWIudHh0LgoKKyBH/G50ZXIgS25hdWYgc3VnZ2VzdGVkIG1ha2luZyB0aGUgcHJvbXB0IHN0cmluZ3MgbW9yZSBnZW5lcmljIGFuZCB0bwpwdXQgYSBuZXdsaW5lIGFmdGVyIHRoZSBhbnN3ZXIuIEJld2FyZSwgTiBub3cgbWVhbnMgTmV0d29yayBib290IGFuZApub3QgTm8gdG8gbmV0d29yayBib290LgoKKyBBbGV4IE5lbWlyb3Zza3kgY29udHJpYnV0ZWQgc29tZSBwYXRjaGVzIGZvciBCSU9TZXMgdGhhdCB1c2UgYW4gZXh0ZW5kZWQKc3BhY2UgYXQgdGhlIHRvcCBvZiA2NDBrLiBBbHNvIHNvbWUgY29kZSBmb3IgQklPU2VzIHRoYXQgZG9uJ3QgaW1wbGVtZW50CkJJT1MzMiBjb3JyZWN0bHkgb3IgYXQgYWxsLgoKKyBVc2UgUENJIGV4dGVuc2lvbiBCSU9TIGhlYWRlciBvbmx5IGZvciBQQ0kgY2FyZHMsIGFsbCBvdGhlcnMgdXNlIGxlZ2FjeQpleHRlbnNpb24gQklPUyBoZWFkZXIuCgorIEtsYXVzIEVzcGVubGF1YiBjb250cmlidXRlZCB2YXJpb3VzIGNsZWFudXAgcGF0Y2hlcyB0byB0aGUgY29kZS4gIEFsc28KaW50cm9kdWNlZCBSYWluZXIgQmF3aWRhbWFubidzIGNvZGUsIHNlZSBuZXh0IHBhcmFncmFwaC4KCisgUmFpbmVyIEJhd2lkYW1hbm4gY29udHJpYnV0ZWQgYSBSZWFsdGVrIDgxMzkgZHJpdmVyLgoKKyBTaW1wbGlmaWVkIHJ1bGVzIGZvciBidWlsZGluZyAuYmluIGZpbGVzLCB1c2UgLWIgb2YgYXM4NiBzbyB3ZQpkb24ndCBuZWVkIGxkODYgb3Igb2JqZHVtcDg2IG5vdy4gQnV0IGxhdGVyIGZvdW5kIHRoYXQgYSBmaXhlZCBhczg2IGlzCnJlcXVpcmVkLiBTbyBzdXBwbHkgcHJlYXNzZW1ibGVkIGJpbmFyaWVzLiBUaGUga2VlbiBoYWNrZXJzIGNhbiBnZXQgdGhlCmZpeGVkIHRvb2xzLgoKKyBHZW9yZyBCYXVtIGNvbnRyaWJ1dGVkIGEgU2NobmVpZGVyICYgS29jaCBHMTYgZHJpdmVyLiBPbmx5IHRoZQozMiBiaXQgdmVyc2lvbiB3b3JrcyBhdCB0aGUgbW9tZW50OyBldmVuIHRob3VnaCB0aGUgMTYgYml0IHZlcnNpb24KY29tcGlsZXMsIGl0IHdvbid0IHdvcmsgYmVjYXVzZSB0aGUgY3VycmVudCBjb2RlIGFzc3VtZXMgZmxhdCBtZW1vcnkKYWRkcmVzc2luZy4gQW55Ym9keSB3aG8gbmVlZHMgdGhlIDE2IGJpdCB2ZXJzaW9uIHNob3VsZCBmZWVsIGZyZWUgdG8KZml4IGl0LgoKKyBSZWR1Y2Ugc2l6ZSBvZiBST00gaW1hZ2UgbG9hZGVkIGJ5IGZsb3BweWJvb3QuYmluIGZyb20gNjRrQiB0byAzMmtCCmZvciBhIHNsaWdodCBzcGVlZHVwIGluIGxvYWRpbmcuIE5vbmUgb2YgdGhlIGltYWdlcyBhcmUgZXZlbiAzMmtCIGFueXdheS4KCisgVXBkYXRlZCBzb21lIG9mIHRoZSBkb2N1bWVudHMgaW4gZG9jL3NnbWwuCgorIEtsYXVzIEVzcGVubGF1YiBzZW50IGluIGEgdG90YWxseSByZXZhbXBlZCBzdGFydDMyLlMsIHVzaW5nIHRoZSBjb2RlMTYKYW5kIGNvZGUzMiBkaXJlY3RpdmVzIGluIHJlY2VudCBHTlUgYXMgKHNvIGlmIHRoaXMgZmlsZSB3b24ndCBhc3NlbWJsZQptYXliZSB5b3VyIGFzIHZlcnNpb24gaXMgbm90IHJlY2VudCBlbm91Z2gpLiBBbHNvIHBhdGNoZXMgdG8gdGhlIG1lbnUKaGFuZGxpbmcgY29kZS4KCisgamx1a2UgQVQgZGVha2luIFBFUklPRCBlZHUgUEVSSU9EIGF1IHNlbnQgaW4gYSBmaXggZm9yIHRoZSBXRC9TTUM4MDEzCmxvbmcgYWdvIHdoaWNoIEkgZmluYWxseSBnb3QgYXJvdW5kIHRvIHZlcmlmeWluZy4KCisgc3RhcnQxNi5vIGFuZCBzdGFydDMyLm8gYXJlIHN1cHBsaWVkIGZvciB0aG9zZSBwZW9wbGUgd2hvIGhhdmUgcHJvYmxlbXMKY29tcGlsaW5nIHN0YXJ0Ki5TIHdpdGggYXMvYXM4Ni4KClJlbGVhc2VkIGFzIEV0aGVyYm9vdC00LjIuMAoKKyBPbmUgbGluZSBmaXggdG8gM2M1MDliIGJ5IEdyZWcgQmVlbGV5IGZvciBXYWtlLU9uLUxBTiBzdXBwb3J0LgoKKyBBZGRlZCBwYXRjaGVzIGJ5IEtsYXVzIEVzcGVubGF1YiB0aGF0IEkgZm9yZ290LgoKKyBNYWRlIEFTX1BTRVVET1Mgbm90IHRoZSBkZWZhdWx0LCBhc3N1bWUgdGhhdCBwZW9wbGUgaGF2ZSBzdWZmaWNpZW50bHkKdXAtdG8tZGF0ZSBHTlUgYXMuIElmIG5vdCB0aGV5IGNhbiB1bmNvbW1lbnQgdGhhdCBsaW5lLgoKUmVsZWFzZWQgYXMgRXRoZXJib290LTQuMi4xCgorIERpc2FibGUgM2M1MDkgYWZ0ZXIgbG9hZGluZyBmaW5pc2hlZCBvciBwb3J0IG1heSBiZSB1bnVzYWJsZS4KCisgV29vcHMsIGZvcmdvdCB0byB1cCB0aGUgdmVyc2lvbidzIGxhc3QgZGlnaXQgaW4gdGhlIGxhc3QgcmVsZWFzZS4KCisgU3RlcGhhbiBCYXVlciBzZW50IGluIGEgZGV2aWNlIElEIGZvciBjb25maWcuYyBmb3IgMjExNDIgY2hpcCBUdWxpcHMuCgorIElmZGVmIG91dCBpbnB1dCBvdmVycnVuIHJlY292ZXJ5IGNvZGUgKGl0J3MgcmVhbGx5IG9ubHkgbmVlZGVkIGZvcgpORTIwMDBzKSBhbmQgdXNlIFNITUVNIGJ5IGRlZmF1bHQgZm9yIDNjNTAzcyB0byBicmluZyB0aGUgUk9NIHNpemUgZG93bgpiZWxvdyA4a0IuCgorIEFkZGVkIGNvZGUgdG8gc3RhcnQzMi5TIHRvIGRldGVjdCA8IDM4NiBhbmQgZXhpdCBzbyBpdCBkb2Vzbid0IGhhbmcKdGhlIGNvbXB1dGVyLiBEb2Vzbid0IHByaW50IGEgbWVzc2FnZSB5ZXQuCgorIENoYW5nZWQgUkVBRE1FLnNnbWwgdG8gcmVjb21tZW5kIHRoYXQgVEZUUCB1c2UgYSBzZXBhcmF0ZSBkaXJlY3RvcnkKZnJvbSBORlMsIC90ZnRwZGlyLiBBZGRlZCBzYW1wbGUgY29uZmlndXJhdGlvbiBmaWxlIGZvciBESENQRCBhbmQgY2F2ZWF0CmFib3V0IHRoZSBuYW1lIG9mIHRoZSByb290IGRpcmVjdG9yeSB3aGVuIHVzaW5nIERIQ1BELgoKKyBSZXZhbXBlZCBhdG5ldGJvb3Quc2dtbDogdXNlIG10b29scyBtb3N0IG9mIHRoZSB0aW1lLCB3cml0ZSBhYm91dCBhCmZldyBleGFtcGxlIGFwcGxpY2F0aW9ucy4KCisgUXVpY2sgUGVybCBzY3JpcHQgZm9yIGNvbnZlcnRpbmcgYm9vdHB0YWIgdG8gZGhjcGQuY29uZi4KClJlbGVhc2VkIGFzIEV0aGVyYm9vdC00LjIuMgoKKyBGb3Jnb3QgdG8gcHV0IG5ldyB2ZXJzaW9uIG9mIHNyYy9zdGFydDMyLm8uIE5vdCB1cmdlbnQgdGhvdWdoLCB0aGUKZXh0cmEgY29kZSBvbmx5IGd1YXJkcyBhZ2FpbnN0IEV0aGVyYm9vdC8zMiBiZWluZyBleGVjdXRlZCBvbiA8IDM4Ni4KCisgU3VwcGx5IHZlcnNpb24gcHJlYXNzZW1ibGVkIHN0YXJ0MzIubyB3aXRoIEFOU0lFU0MgYW5kIEZMT1BQWSBkZWZpbmVkCmZvciB0aG9zZSB3aXRoIGEgZGVmaWNpZW50IGFzLiBEZWZpbmUgZHVtbXkgaGFuZGxlYW5zaSByb3V0aW5lIGluCmFuc2llc2MuYyBzbyB0aGF0IGl0IHdpbGwgc3RpbGwgbGluayBldmVuIGlmIHRoaXMgc3RhcnQzMi5vIGlzIHVzZWQuCgorIEVkaXRlZCAqLmFzbSBzbyB0aGF0IHRoZXkgY2FuIGJlIGFzc2VtYmxlZCBieSBlaXRoZXIgYXM4NiAoRUxLUyB2ZXJzaW9uKQpvciBuYXNtLgoKKyBDaGFuZ2VkIE1ha2VmaWxlIHNvIHRoYXQgb25lIGNhbiBjaG9vc2UgYmV0d2VlbiBubyBhczg2LCBhczg2IG9yIG5hc20uCgorIEFkZGVkIE1hcmsgQnVyYXppbidzIGNvbmRpdGlvbmFsIGNvZGUgZm9yIENvbXBleCBSTDIwMDAgUENJIE5JQy4KCisgSW5jcmVhc2UgZGVsYXkgZHVyaW5nIHByb2JlIHBoYXNlIHRvIDEwbXMgYXMgMW1zIGlzIHRvbyBsb3cgZm9yIHNvbWUKM2M1MDkgYm9hcmRzLiAgRG9uYWxkIEJlY2tlcidzIExpbnV4IGRyaXZlciBoaW50cyB0aGF0ID4gMm1zIGlzIG5lZWRlZAp0byBiZSBzYWZlLiBBbHNvIGNhbGwgdDUwOV9kaXNhYmxlIGluIGNhc2UgYm9hcmQgd2FzIGFjdGl2ZS4KCisgVXBkYXRlIFJFQURNRS5zZ21sIGRhdGUgYW5kIHZlcnNpb24uCgpSZWxlYXNlZCBhcyBFdGhlcmJvb3QgNC4yLjMuCgorIHJ0bDgxMzkuYzogUmVkdWNlIHRoZSBudW1iZXIgb2YgdHJhbnNtaXQgYnVmZmVycyB0byByZWR1Y2UgZm9vdHByaW50LgpSZW1vdmUgcG9sbGluZyBsb29wIGluICpfbG9vcCgpLCBjYWxsZXIgYWxyZWFkeSBkb2VzIHRoZSBsb29waW5nLgoKKyBtYWluLmM6IEZpeCBjb2RlIGluZGVudGF0aW9uIGluIGJvb3RwKCkuCgorIFNtYWxsIGNvcnJlY3Rpb25zIHRvIGRvY3VtZW50YXRpb24uCgpSZWxlYXNlZCBhcyBFdGhlcmJvb3QgNC4yLjQuCgorIE1hdHRoaWFzIE1laXhuZXIgZm91bmQgYSBsb25nc3RhbmRpbmcgYnVnIGluIHJ0bDgxMzkuYyB3aGVyZSBpdCB3YXMKdGVzdGluZyB0aGUgd3JvbmcgYml0IGZvciB0aGUgZXhpc3RlbmNlIG9mIGEgcGFja2V0IGluIHRoZSBidWZmZXIuCgorIEFkZGVkIHBhcmFncmFwaCB0byBkb2N1bWVudGF0aW9uIGFib3V0IGNhdmVhdHMgZm9yIGhvc3RpbmcgTkZTIHJvb3QKb24gYSBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlLgoKUmVsZWFzZWQgYXMgRXRoZXJib290IDQuMi41LgoKKyBVcGRhdGVkIG1rbG5pbSBmb3IgUkg2LjAgd2hpY2ggdXNlcyBhIGRpZmZlcmVudCBmbG9wcHkgaW1hZ2UgYW5kCnJlcXVpcmVzICduZXR3b3JrJyB0byBiZSBhcHBlbmRlZCB0byBrZXJuZWwgcGFyYW1ldGVycy4KCisgUmV2ZXJzZWQgc2Vuc2Ugb2YgI2lmZGVmIERIQ1BfU1VQUE9SVCB0byAjaWZuZGVmIE5PX0RIQ1BfU1VQUE9SVCBhbmQKc28gZm9ydGgsIGkuZS4gdGhlIGRlZmF1bHQgaXMgd2l0aCBESENQIHN1cHBvcnQuCgorIFN1Z2dlc3QgcmVkdWNpbmcgb3B0aW9ucyBmb3IgcnRsODEzOSBkcml2ZXIgdG8gbWluaW1pc2UgZm9vdHByaW50IGluCnJlbGVhc2Ugbm90ZXMuCgorIEppbSBNY1F1aWxsYW4gcHJvdmlkZWQgY2hhbmdlcyB0byBzdXBwb3J0IHRoZSBTTUMxMjExLCB3aGljaCB1c2VzIHRoZQpSVEw4MTM5IGNoaXAuCgorIENoYW5nZWQgbHJldCBpbiBzdGFydDMyLlMgdG8gaW50ICQweDE5IHNvIHRoYXQgaXQgZG9lc24ndCBkZXBlbmQgb24KdGhlIHJldHVybiBsb2NhdGlvbiBiZWluZyB0aGVyZS4KClJlbGVhc2VkIGFzIEV0aGVyYm9vdCA0LjIuNgoKKyBTdWNjZWVkZWQgaW4gYm9vdGluZyBGcmVlRE9TIHdpdGggdGhlIGtlcm5lbCBpbiB0aGUgdGFnZ2VkIGltYWdlIHJhdGhlcgp0aGFuIG9uIHRoZSByYW1kaXNrLCBpLmUuIHRoZSBib290IHByb2Nlc3MganVtcHMgZGlyZWN0bHkgdG8gdGhlIGtlcm5lbAppbiBtZW1vcnkuIFRoZSB1dGlsaXR5IGlzIG1rZnJlZWRvc25iaSBpbiBjb250cmliLy4KCisgQWRkaXRpb25zIHRvIHRoZSBkb2N1bWVudGF0aW9uLgoKUmVsZWFzZWQgYXMgRXRoZXJib290IDQuMi43CgorIE1hdHQgSG9ydG1hbiBwb2ludGVkIG91dCB0aGF0IHRoZSBCSU9TIGNsb2NrIHZhbHVlIHJldHVybmVkIGJ5IElOVDFBSApyb2xscyBvdmVyIGF0IG1pZG5pZ2h0LCBjYXVzaW5nIGRlbGF5IGxvb3BzIHRoYXQgY3Jvc3MgbWlkbmlnaHQgdG8KZmFpbC4gRml4IHdhcyB0byBrZWVwIHRyYWNrIG9mIG1pZG5pZ2h0IGNyb3NzaW5ncyBpbiBjdXJydGlja3Mgc28gdGhhdApjdXJydGlja3MnIHJldHVybiB2YWx1ZSBpcyBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcuCgorIEFkZGVkIHBhcmFncmFwaCB0byBkb2N1bWVudGF0aW9uIGFib3V0IGVkaXRpbmcgUENJIHZlbmRvciBhbmQgZGV2aWNlCklEcyBpbiBNYWtlZmlsZSBpZiBuZWVkZWQuCgorIE1lcmdlZCBpbiBGcmVlQlNEIHN1cHBvcnQgY29kZSBzdXBwbGllZCBieSBEb3VnIEFtYnJpc2tvLiBUaGFua3MhCgpSZWxlYXNlZCBhcyBFdGhlcmJvb3QgNC4yLjgKCisgQ2xlYW5lZCB1cCB0aGUgRnJlZUJTRCBzdXBwb3J0IGluIG9zbG9hZGVyLmMuIFN5bWJvbHMgdG8gdXNlIGluIENvbmZpZwphcmUgdG8gc2VsZWN0IGltYWdlIHR5cGUsIG5vdCBGcmVlQlNEIHNwZWNpZmljIG5vdy4KCisgQWRkZWQgc2ltcGxlIHNpZ25hdHVyZSBjaGVja2luZyBjb2RlIGluIGZsb3BweWxvYWQuYXNtIGluIGNhc2Ugc29tZWJvZHkKZm9yZ2V0cyB0byBhcHBlbmQgYSBST00gaW1hZ2Ugb3IgdHJpZXMgdG8gbG9hZCBhIG5vbi1ST00gaW1hZ2UuCgorIE1lcmdlZCBpbiAzYzkweCBhbmQgbXVsdGlwbGUgUENJIGJ1cyBzdXBwb3J0IGJ5IFN0ZXZlIFNtaXRoLiBUaGFua3MhCgorIEluY2x1ZGVkIE5ULURpc2tsZXNzLVRlcm1pbmFsIEhPV1RPIGJ5IFBhdmVsIFRrYXRjaG91ay4KCisgSW5jbHVkZWQgc25hcHNob3Qgb2YgSC4gUGV0ZXIgQW52aW4ncyByZXdyaXRlIG9mIHRmdHAuCgorIENvbWJpbmVkIHRmdHAgYW5kIHRmdHBkIGRpcmVjdG9yaWVzLCBhbmQgdG91Y2hlZCB1cCBNYWtlZmlsZSB0byByZWZsZWN0Cm5vcm1hbCBMaW51eCBpbnN0YWxsIGRpcmVjdG9yaWVzLgoKUmVsZWFzZWQgYXMgRXRoZXJib290IDQuMi45CgorIE5ULURpc2tsZXNzLVRlcm1pbmFsIEhPV1RPIHJlbmFtZWQgdG8gRGlza2xlc3MtRnJvbS1OVC4KCisgT25lIGxpbmUgZml4IHRvIG1rbmJpLWRvcyB0byByZWNvZ25pc2UgRkFUMTYgZmlsZXN5c3RlbXMgYXMgbGVnYWwuClVwZGF0ZWQgZmlyc3QuUyBpbiBta25iaS1kb3Mgc28gdGhhdCBpdCBjYW4gYmUgYXNzZW1ibGVkIGJ5IG5hc20gYW5kIGlzCmFsc28gc3VpdGFibGUgZm9yIEZyZWVET1Mgd2l0aCB0aGUgcmlnaHQgZGVmaW5lLiBTdGlsbCBiYWNrd2FyZCBjb21wYXRpYmxlCndpdGggYXM4Ni4gQnVnIGZpeCBhdCBsaW5lIHN0YXJ0aW5nIGdldG5tMzouCgorIFVwZGF0ZWQgZmlyc3QuUyBpbiBta25iaS1saW51eCBzbyB0aGF0IGl0IGNhbiBiZSBhc3NlbWJsZWQgYnkgbmFzbSBhbHNvLgoKKyBMb2NhdGUgYm9vdHAgZGF0YSBibG9jayBhdCAweDkzQzAwLTB4OTNGRkYgdG8gZnJlZSB1cCAxMDI0KyBieXRlcyBpbgpbMHg5ODAwMC0weDlGRkZGXS4gRXRoZXJib290LzMyIG9ubHksIGJ1c2luZXNzIGFzIHVzdWFsIGZvciBFdGhlcmJvb3QvMTYuCgorIFBhdGNoIGZyb20gQXR0aWxhIEJvZ+FyIHRvIG1ha2UgQ09OR0VTVEVEIGEgY29tcGlsZSBvcHRpb24gZm9yClRGVFBfVElNRU9VVC4gQWxzbyBjb3JyZWN0ZWQgc3BlbGxpbmcgb2YgaGlzIG5hbWUgaW4gUkVBRE1FLgoKKyBGaXhlZCBzdGFydDMyLlMgdG8gYXNzZW1ibGUgY29ycmVjdGx5IHdpdGggZ2FzIHZlcnNpb24gMi45NS4gTXVzdApkZWZpbmUgR0FTMjk1IGluIENGTEFHUy4KCisgQWRkIGNvbnRyaWIvM2M5MHh1dGlsIGNvbnRhaW5pbmcgYSB1dGlsaXR5IGZvciBoYW5kbGluZyAzYzkweCBFRVBST01zCmluIHNpdHUuCgorIFVwZGF0ZSBwOTEwbmQgdG8gMC4zLiBjbGllbnQucGwgbm93IGNoZWNrcyBpZiBob3N0bmFtZSBpcyBrbm93biBhbmQKdXNlcyBtb3JlIGNvbnZlbmllbnQgcm91dGluZXMgZnJvbSBTb2NrZXQgbW9kdWxlLgoKKyBNb3ZlZCB0aGUgRmxhc2hjYXJkIGRpcmVjdG9yeSBpbnRvIGEgc2VwYXJhdGUgcGFja2FnZSBhcyBpdCdzIG9mCmxpbWl0ZWQgaW50ZXJlc3QuCgpSZWxlYXNlZCBhcyBFdGhlcmJvb3QgNC4yLjEwCgorIEZpeGVkIGJ1ZyBpbnRyb2R1Y2VkIGluIDQuMi4xMCBpbiBjb2RlIGZvciBoYW5kbGluZyBib290cCBleHRlbnNpb24KZmlsZXMuCgorIENoYW5nZSBpbiAzYzkweC5jIHNvIHRoYXQgaXQgY2FuIGNvbXBpbGUgdW5kZXIgRnJlZUJTRC4KCisgUGF0Y2ggdG8gdHVsaXAuYyBmcm9tIE5pY2sgTG9wZXogdG8gaGFuZGxlIE1hY3Jvbml4IDk4NzE1IChUdWxpcCBjbG9uZSkuCgpSZWxlYXNlZCBhcyBFdGhlcmJvb3QgNC4yLjExCgorIFByZWZlciBSRkMxNTMzX0dBVEVXQVkgdG8gZ2lhZGRyIGZvciByb3V0aW5nIHRmdHAgcGFja2V0cy4KCisgUHJpbnQgb3V0IGJvdGggcmVsYXkgYWRkcmVzcyBhbmQgZ2F0ZXdheSBhZGRyZXNzLgoKKyBTdG9yZWQgYXJwdGFibGUgaXBhZGRycyBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIuIE1ha2VzIGV2ZXJ5dGhpbmcgc2ltcGxlcgphbmQgd2UgY2FuIGdldCByaWQgb2YgY29udmVydF9pcGFkZHIuIE5vdyAlSSBpbiBwcmludGYgYW5kIGluZXRfbnRvYQpoYXZlIHRvIGRlYWwgd2l0aCBOQk8uIFdlIHJlZHVjZSB0aGUgZm9vdHByaW50IGJ5IH4xMDAgYnl0ZXMuCgorIFJlbmFtZWQgc2V0aXAgdG8gbW9yZSBzdGFuZGFyZCBpbmV0X250b2EgYW5kIGNoYW5nZSBhcmd1bWVudCB0eXBlIHRvCnN1aXQsIHVzaW5nIGluX2FkZHIuCgorIFJlcGxhY2VkIGJjbXAgYnkgbWVtY21wLCBiemVybyBieSBtZW1zZXQsIGFuZCBiY29weSBieSBtZW1jcHkuIEFsbG93cwp1cyB0byB1c2Ugb3B0aW1pc2VkIHZlcnNpb25zIGluIGlubGluZSBhc3NlbWJsZXIuCgorIFJlcGxhY2VkIE9VVEIgYW5kIE9VVFcgYnkgb3V0YiBhbmQgb3V0dyB3aXRoIGFyZ3VtZW50cyByZXZlcnNlZC4KRmluYWxseSBhbGwgdGhlIG91dCBtYWNyb3MgYXJlIHRoZSBzYW1lIGZvcm0gYXMgZm9yIExpbnV4LgoKKyBSZXBsYWNlZCBcclxuIGFuZCBcblxyIGluIG91dHB1dCBzdHJpbmdzIHdpdGggXG4gc2luY2UgcHV0Y2hhcgpub3cgcHJpbnRzIFxyIGJlZm9yZSBcbi4gVGhlbiBjaGFuZ2VkIHByaW50ZigiXG4iKSB0byBwdXRjaGFyKCdcbicpLgpMaWtlIFVuaXggY29udmVudGlvbiBmb3Igc3RyaW5ncyBub3cuCgorIEdvdCByaWQgb2YgdGVzdC5jIGFuZCBNYWtlZmlsZSBydWxlcyBjb25uZWN0ZWQgd2l0aCBpdC4KCisgQWRkZWQgcGF0Y2ggdG8gZWVwcm8xMDAuYyBieSBNYXR0IEhvcnRtYW4gdG8gY29ycmVjdCBQQ0kgbGF0ZW5jeS4KCisgTWVyZ2VkIGluIE1hcnR5IENvbm5vcidzIG50dWxpcC5jLiBOb3cgc3VwcG9ydHMgTWFjcm9uaXggOTg3MTUgYW5kCkxpbmtzeXMgTE5FMTAwVFguCgpSZWxlYXNlZCBhcyBFdGhlcmJvb3QgNC4yLjEyCgorIEFuZGVycyBMYXJzZW4gY29udHJpYnV0ZWQgbWtRTlhuYmksIGZvciBnZW5lcmF0aW5nIHRhZ2dlZCBpbWFnZXMgZnJvbQpRTlgga2VybmVscy4KCisgQmVybmQgV2llYmVsdCBjb250cmlidXRlZCBjb2RlIHRvIHJlcXVlc3QgdmVuZG9yIHRhZ3MgaW4gREhDUC4KCisgRml4ZWQgbW9yZSBidWdzIGludHJvZHVjZWQgaW4gNC4yLjEwIGluIGNvZGUgZm9yIGhhbmRsaW5nIGJvb3RwCmV4dGVuc2lvbiBmaWxlcy4KClJlbGVhc2VkIGFzIEV0aGVyYm9vdCA0LjIuMTMKCisgTWFydHkgQ29ubm9yIHJlZHVjZWQgUlRMODEzOSBmb290cHJpbnQgYnkgdXNpbmcgb25seSBvbmUgdHJhbnNtaXQKYnVmZmVyIGluc3RlYWQgb2YgNC4gTm93IFJUTDgxMzkgaXMgcmVsaWFibGUuCgorIE1vdmVkIGluaXRpYWxpc2VkIGRhdGEgZGVjbGFyYXRpb24gZnJvbSBuczgzOTAuaCB0byBuczgzOTAuYy4KCisgQ29udHJpYnV0ZWQgdXRpbGl0aWVzIGZvciB3YWtlLW9uLUxBTjogd29sLmMgKEJvYiBFZHdhcmRzKSBhbmQgd2FrZS5wbC4KCisgTWFrZWZpbGUgZm9yIDNjOTB4dXRpbC9yb211dGlsLmMuIC1PIGlzIGVzc2VudGlhbCB3aGVuIGNvbXBpbGluZy4KCisgSGFwcHkgeWVhciAyMDAwIQoKUmVsZWFzZWQgYXMgRXRoZXJib290IDQuNC4wCgorIFZJQS1SaGluZSBkcml2ZXIgY29udHJpYnV0ZWQgYnkgUGFvbG8gTWFyaW5pLiBGb290cHJpbnQgcmVkdWNlZCBieQpNYXJ0eSBDb25ub3IuCgorIE5ldGdlYXIgRkEzMTBUWCAoVHVsaXAgY2xvbmUsIExDODJDMTY4IGNoaXApIHN1cHBvcnQgYWRkZWQgYnkgTWFydHkKQ29ubm9yLgoKKyBTdXBwb3J0IGZvciAzQzkwNUMgYWRkZWQgYnkgTWFydHkgQ29ubm9yLgoKKyBta2xuaW0gdXBkYXRlZCB0byBzdXBwb3J0IFN1U0UgNi54IGFsc28uCgpSZWxlYXNlZCBhcyBFdGhlcmJvb3QgNC40LjEKCisgTmV3IGNvbmZpZ3VyYXRpb24gZmlsZSBzY2hlbWUgdG8gc3BlY2lmeSB3aGF0IFJPTXMgYXJlIGJ1aWx0LgoKKyBBZGFtIEZyaXR6bGVyIGNvbnRyaWJ1dGVkIDNjNTI5IChNQ0EgdmVyc2lvbiBvZiAzYzUwOSkgc3VwcG9ydCBpbgpkcml2ZXIuCgorIE1hcnR5IENvbm5vciB3cm90ZSBhIHZlcnNpb24gb2YgM2M5MHh1dGlsL3JvbXV0aWwgZm9yIDkwNUMgTklDcy4KCisgR/xudGVyIEtuYXVmIGNvbnRyaWJ1dGVkIGEgd2FrZSBvbiBMQU4gQ0dJIHNjcmlwdC4KCisgTm90ZXMgaW4gY29udHJpYi9lZXBybzEwMG5vdGVzIG9uIGhvdyB0byBmbGFzaCB0aGUgRUVQUk9NLgoKKyBIYXBweSBBdXN0cmFsaWEgRGF5LCAyMDAwLTAxLTI2LgoKUmVsZWFzZWQgYXMgRXRoZXJib290IDQuNC4yCgorIGh3aWxtZXIgQVQgZ214IFBFUklPRCBkZSBmb3VuZCBhIHByb2JlIGVycm9yIGluIDNjNTA3LmMsIHNob3VsZG4ndAptYXNrIG1lbW9yeSBzaXplIHdpdGggMHhmZmZmTCwgdGhpcyBmYWlscyB3aXRoIDY0a0IgbWVtb3J5LiAgQWxzbwpjaGFuZ2VkIHRvIHVzZSByZWFsLXRpbWUtY2xvY2sgdG8gdGltZW91dCBvbiBpbml0aWFsaXNhdGlvbiBvZiBpODI1ODYKcmF0aGVyIHRoYW4gcmVseWluZyBvbiBkZWNyZW1lbnRpbmcgYSB2YXJpYWJsZSAod2hpY2ggaXMgQ1BVIHNwZWVkCmRlcGVuZGVudCkuCgorIEphbWVzIFBlYXJzb24gcG9pbnRlZCBvdXQgdGhhdCB+IHNob3VsZCBiZSBlc2NhcGVkIGFzICZ0aWxkZTsgaW4KdmVuZG9ydGFncy5zZ21sLiBBbHNvIGNsZWFuZWQgdXAgdGhlIDgtYml0IGNoYXJhY3RlcnMgd2hpbGUgSSB3YXMgYXQgaXQuCgorIEf8bnRlciBLbmF1ZiBwb2ludGVkIG91dCB0aGF0IGlmIEFTS19CT09UIGlzIGRlZmluZWQsIHRoZW4ga2V5IGlucHV0CmVjaG9zIHR3aWNlLiBBbHNvLCBDUiBkb2Vzbid0IHNlbGVjdCB0aGUgZGVmYXVsdC4gUHJvYmxlbSB3YXMgdGhhdCBnZXRjaGFyCmNvbnZlcnRzIGFsbCBcciB0byBcbiB0aGVuIG1haW4uYyB3YXMgdGVzdGluZyBhZ2FpbnN0IFxyIGluc3RlYWQgb2YgXG4sCmFuZCBhbHNvIHRoYXQgZ2V0Y2hhcigpIHdhcyBlY2hvaW5nIHdoZW4gaXQgc2hvdWxkIGxlYXZlIGl0IHRvIHRoZSBjYWxsZXIuCkRlbGV0ZWQgY29kZSBmcm9tIGdldGNoYXIoKSBhbmQgbWFkZSBpdCBhIGZ1bmN0aW9uIHdpdGggbm8gYXJndW1lbnRzLgpBbHNvIHNlbnQgbWUgYSBuZXcgdmVyc2lvbiBvZiBtcC1mb3JtLnBsIHdpdGggbXAtZm9ybS50eHQuIEFsc28gc3VnZ2VzdGVkCnRoZSBnb29kIGlkZWEgdGhhdCB0aGUgZ2F0ZXdheSBhbmQgcmVsYXkgZmllbGRzIG5vdCBiZSBkaXNwbGF5ZWQgaWYgdGhleQphcmUgbm90IHVzZWQuCgorIEJvYiBFZHdhcmRzIHNlbnQgaW4gcGF0Y2hlcyB0byBudHVsaXAuYyB0byBhdXRvZGV0ZWN0IDEwMCBNYiBtZWRpYQpmb3IgMjExNDIvMyBOSUNzLgoKKyBPa3VqaSBZb3NoaW5vcmkgZm91bmQgYSBzbWFsbCBidWcgaW4gbWFpbi5jOiBmb3IgKHJldHJ5MSA9IDA7IHJldHJ5IDwgLi4KRG9uJ3Qga25vdyB3aGF0IGVmZmVjdCBpdCBoYWQuCgorIEtsYXVzIEVzcGVubGF1YiBzZW50IHBhdGNoZXMgd2hpY2ggbWFrZSB0aGUgUlRMODEzOSBkcml2ZXIgbW9yZQpyZWxpYWJsZSwgc2VlIG5vdGVzIGluIHJ0bDgxMzkuYy4KCisgUnVzcyBOZWxzb24gZ2F2ZSBwZXJtaXNzaW9uIHRvIHJlbGVhc2UgY3M4OXgwIGRyaXZlciB3aXRoIEV0aGVyYm9vdC4KSXQncyBub3JtYWxseSB1bmRlciBHUEwuIE1vdmVkIGNzODl4MCBkcml2ZXIgdG8gc3JjIGRpcmVjdG9yeSwgcmVtb3ZlZApjczg5eDAuc2dtbC4KCisgQ2xhcmlmaWVkIGNvcHlyaWdodHMgb2YgZmlsZXMgaW4gZGlzdHJpYnV0aW9uLgoKUmVsZWFzZWQgYXMgRXRoZXJib290IDQuNC4zCgorIEtsYXVzIEVzcGVubGF1YiBzZW50IGluIHNvbWUgcGF0Y2hlcyB0byBvdmVyY29tZSB0aGUgNjRLIGJsb2NrIHJvbGxvdmVyCnByb2JsZW0gaW4gdGZ0cC4KCisgQm9iIEVkd2FyZHMsIFBhdWwgTWFja2VycmFzIGFuZCBNYXJ0eSBDb25ub3Igd29ya2VkIG91dCBmaXhlcyB0bwpudHVsaXAuYyB0byBoYW5kbGUgMjExNDIvMyBUdWxpcHMgcHJvcGVybHkuCgorIEthcnN0ZW4gVGlubmVmZWxkIHNlbnQgaW4gYSBNYWtlZmlsZSBmcmFnbWVudCBmb3IgZG9jL3NnbWwvTWFrZWZpbGUKdG8gZ2VuZXJhdGUgRFZJIGFuZCBQUyBmaWxlcyB1c2luZyBzZ21sMmxhdGV4LgoKKyB0dWxpcC4qIHJlbmFtZWQgdG8gb3R1bGlwLiosIG50dWxpcC4qIHJlbmFtZWQgdG8gdHVsaXAuKgoKKyBBZGRlZCBGQVEgYW5kIFdyaXRpbmcgYW4gRXRoZXJib290IERyaXZlciBzZWN0aW9ucyB0byBSRUFETUUuCgorIFdvb3BzLCBpZiBhbmQgb2Ygc3dhcHBlZCBpbiBkZCBjb21tYW5kIGluIGF0bmV0Ym9vdC5zZ21sLgoKUmVsZWFzZWQgYXMgRXRoZXJib290IDQuNC40CgorIEZVS1VIQVJBIE1ha290byBzdXBwbGllZCBhIHBhdGNoIGZvciA0LjQuNCBmb3IgRnJlZUJTRCBFTEYgYm9vdGluZwp3aXRoIGxhcmdlIHRmdHAgYmxvY2tzIHdoaWNoIEkgbWlzc2VkIHB1dHRpbmcgaW4uCgorIFNtYWxsIHBhdGNoIGJ5IE1hcnR5IENvbm5vciB0byB0dWxpcC5jIHRvIGhhbmRsZSBmYXN0IFR1bGlwcyBiZXR0ZXIuCgorIFdyb3RlIHNtYWxsIGxvYWRlciB0byBsb2FkIGltYWdlcyBmcm9tIC5jb20gZmlsZXMuCgorIFNodXN1a2UgTmlzaXlhbWEgY29udHJpYnV0ZWQgYSAzYzU5NSAoYW5kIG1heSB3b3JrIGZvciAzYzU5MCkgZHJpdmVyLgoKUmVsZWFzZWQgYXMgRXRoZXJib290IDQuNC41CgpBIG1ham9yIHJlb3JnYW5pc2F0aW9uIGJ5IEtsYXVzIEVzcGVubGF1Yi4gSGVyZSBhcmUgaGlzIG5vdGVzLCB2ZXJiYXRpbToKClRoZSBiaWdnZXN0IGNoYW5nZSBpcyB0aGUgYWxtb3N0IHJld3JpdHRlbiBNYWtlZmlsZXMgKGJvdGggaW4gc3JjIGFuZCBpbgpkb2MgLSB0aGUgb25lIGluIGRvYyBpcyBzdGlsbCByZWFzb25hYmx5IHNpbXBsZSkuICBJZiB5b3Ugd2FudCB0byBnZXQKYW4gb3ZlcnZpZXcgLSBiYXNpY2FsbHkgb25lIE1ha2VmaWxlIG5vdyBidWlsZHMgYm90aCAvMTYgYW5kIC8zMiBST01zLgpUaGlzIGludm9sdmVzIHF1aXRlIGEgZmV3IG1ha2UgdmFyaWFibGVzIChzaW1pbGFybHkgaW4gQ29uZmlnKSwgYnV0IGl0CnNob3VsZCBiZSBtb3N0bHkgc2VsZi1leHBsYWluaW5nLiAgSSBhbHNvIGNvbnZlcnRlZCB0aGUgc3VmZml4IHJ1bGVzIHRvCnBhdHRlcm4gcnVsZXMsIGJlY2F1c2UgaXQgaXMgdGhlIG9ubHkgd2F5IHRvIGtlZXAgdGhlIGJ1aWxkIGRpcmVjdG9yaWVzCmZvciAvMTYgYW5kIC8zMiBhcGFydC4KCkdlbmVyYWxseSBhbGwgLzMyIGNvZGUgaXMgY29tcGlsZWQgaW4gYmluMzIsIGFsbCAvMTYgY29kZSBpcyBjb21waWxlZAppbiBiaW4xNiwgYW5kIHRoZSBjb2RlIHRoYXQgd29ya3MgZm9yIGJvdGggaXMgaW4gYmluLgoKVGhlIG5hbWVzIChvYmplY3QgZmlsZXMsIGltYWdlcywgYnV0IE5PVCB0aGUgZmluYWwgUk9NcykgdXNlZCBkdXJpbmcKdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIHNvbWUgUENJIGNhcmRzIGhhdmUgY2hhbmdlZCAoZXNwZWNpYWxseSBsYW5jZXBjaQphbmQgbmVwY2kpLgoKSSBlbGltaW5hdGVkIHRoZSBkcml2ZXIuYSBmaWxlIGJ5IGFkZGluZyB5ZXQgbW9yZSB1Z2x5IGNvZGUgdG8gZ2VucnVsZXMucGwKKG5vLCBJJ20gbm90IHZlcnkgcHJvdWQgb2YgdGhlIGNvZGUgSSBhZGRlZCB0aGVyZSAtIEkgaGF0ZSBwZXJsLCBidXQKYXQgbGVhc3QgaXQgd29ya3MpLCB3aGljaCBub3cgZ2VuZXJhdGVzIGFsbCBzb3J0cyBvZiBtYWtlIHJ1bGVzIGFuZApkZXBlbmRlbmN5IGluZm9ybWF0aW9uLiAgVGhpcyBlbGltaW5hdGVzIHRoZSByZWR1bmRhbnQgcmVjb21waWxlIG9mIGFsbApvdGhlciBkcml2ZXJzIGlmIHlvdSBzcGVjaWZpZWQgYSBzcGVjaWZpYyB0YXJnZXQgYXQgdGhlIG1ha2UgY29tbWFuZCBsaW5lLgoKVGhlcmUgYXJlIG5vdyBhdXRvbWF0aWMgY2hlY2tzIGZvciB0aGUgZ2VuZXJhdGVkIFJPTSBzaXplICgzSyBzYWZldHkKbWFyZ2luIGFyZSB1c2VkIHRvIGFsbG93IGZvciAxSyBCSU9TIEVCREEgYW5kIDJLIHN0YWNrKS4gIFRoaXMgc2hvdWxkCmF2b2lkIG1vc3Qgb2YgdGhlIGNhc2VzIGluIHdoaWNoIHRoZSBzdGFjayBvdmVyd3JpdGVzIGNvZGUgYW5kL29yIGRhdGEsCmNhdXNpbmcgc3RyYW5nZSBjcmFzaGVzLgoKT24gdG8gdGhlIHJlYWwgY29kZSAtIEkgcmV3cm90ZSBib3RoIHRoZSBFTEYgYW5kIGEub3V0IGxvYWRpbmcgKHRoZQpibG9ja3NpemUgaXMgbm93IHByb3Blcmx5IGhhbmRsZWQgZm9yIGFsbCBmb3JtYXRzKSwgYW5kIG5vdyBtb3N0IG9mIHRoZQpjb2RlIGlzIGlkZW50aWNhbC4gIFNvbWVvbmUgbWlnaHQgd2FudCB0byBtZXJnZSB0aGUgdHdvLiAgSSB2ZXJpZmllZCB0aGF0CmJvdGggYS5vdXQgYW5kIEVMRiBGcmVlQlNEIGxvYWRpbmcgc3RpbGwgd29ya3MgYnkgYm9vdGluZyB0aGUgRnJlZUJTRAoyLjIuOCBhbmQgMy40IGluc3RhbGwga2VybmVscyAodGhlIEVMRiBrZXJuZWwgeW91IGdhdmUgbWUgZGlkbid0IHdvcmsKZm9yIHdoYXRldmVyIHJlYXNvbikuICBBY3R1YWxseSBJIHRlc3RlZCBldmVyeXRoaW5nIGV4Y2VwdCBOQkksIGJ1dCB0aGF0CmNvZGUgaXMgY29tcGxldGVseSB1bmNoYW5nZWQuCgpJIGVsaW1pbmF0ZWQgY29uZmlnLmggYW5kIGNyZWF0ZWQgY2FyZHMuaCAtIGp1c3QgaGF2ZSBhIGxvb2sgYW5kIHlvdQpzaG91bGQgZ2V0IHRoZSBpZGVhLiAgVGhlIFBDSS9JU0EgcHJvdG90eXBlIG1hdGNoaW5nIGhhY2sgaXMgbm93IGJ1cmllZAppbiB0aGVyZS4gIEFsbCBQQ0kgZHJpdmVycyAoYW5kIHNrZWwuYykgaGF2ZSBiZWVuIGNvbnZlcnRlZCB0byB0aGUgbmV3CmluY2x1ZGUgZmlsZS4KClRoZSBvbmx5IGZpbGUgdGhhdCBpcyByZWFsbHkgbmV3IGlzIG5mcy5jLCB3aGljaCBjb250YWlucyB0aGUgY29kZSB3aGVyZQpJIHN0YXJ0ZWQgbXkgam91cm5leS4KClRoZSBsb2FkZXIgY29kZSBpcyBub3cgbWVyZ2VkIGludG8gb25lIGZpbGUgZm9yIGJvdGggdGhlIG5vcm1hbCBhbmQKY29tcHJlc3NlZCBjYXNlLiAgU29tZSBidWdzIGhhdmUgYmVlbiBmaXhlZCBhbG9uZyB0aGUgd2F5ICh0aGUgbm9ybWFsCmxvYWRlciBjb3BpZWQgdG9vIG11Y2ggZGF0YSwgcG90ZW50aWFsbHkgY3Jhc2hpbmcgdGhlIG1hY2hpbmUpLiAgQlRXOiBJCnJlbW92ZWQgdGhlIGJsb2NrIGNvcHkgZnJvbSBjb21ib290LCBiZWNhdXNlIHRoZSBmaXJzdCB0aGluZyB0aGUgbG9hZGVyCmNvZGUgZG9lcyBpcyAtIHRvIGNvcHkgdGhlIGNvZGUgdG8gdGhlIHJpZ2h0IHBsYWNlLiAgQWxzbyBjb3B5aW5nIGl0IHRvCjB4ODAwMDAgcHJldmVudHMgY29tcHJlc3NlZCBST01zICh0aG91Z2ggdGhlcmUgaXMgbm8gd2F5IGluIHRoZSBNYWtlZmlsZQp0byBjcmVhdGUgc3VjaCBhIGJlYXN0KS4gIEFsc28gdGhlIHN0YWNrIGNoYW5naW5nIGNvZGUgd2FzIHdyb25nIC0KdGhlIG92ZXJmbG93IGhhbmRsaW5nIGlzIG1pc3Npbmc6IDB4OWZ4eHh4LTB4ODAwMDAwIGlzIHRydW5jYXRlZCB0bwpmaXQgaW4gdGhlIDE2IGJpdCByZWdpc3Rlciwgd2hpY2ggaXMgbm90IHF1aXRlIHdoYXQgb25lIHdvdWxkIGV4cGVjdC4KVGhlIHN0YWNrIHBvaW50ZXIgbXVzdCBiZSBpbiB0aGUgc2FtZSBzZWdtZW50LCBzbyBmb3Igb3ZlcmZsb3dzIGp1c3QKbG9hZCAwLiAgQW55d2F5LCB3ZSBkb24ndCBuZWVkIGEgbmV3IHN0YWNrIGZvciA0IGJ5dGVzICh0aGUgcmV0dXJuCmFkZHJlc3MpLiAgQWxzbyB0aGUgc2hpZnRzIHdvbid0IHdvcmsgb24gYW4gODA4Ni84MDg4LiAgVGhlIFJPTSBzZWdtZW50CmFuZCBsZW5ndGggY29kZSBpcyBhbHNvIGRvbmUgb25jZSBtb3JlIGluIGxvYWRlci5TLiAgRmluYWxseSB0aGUgb3JnCjB4MTAwIGRpZG4ndCB3b3JrIHdpdGggbXkgdmVyc2lvbiBvZiBhczg2IC0gaXQgcHJlcGVuZGVkIDI1NiBudWxsIGJ5dGVzLgpEb24ndCBnZXQgbWUgd3JvbmcgLSBJIHNlZSB0aGF0IGNvbWJvb3Qgd2FzIGp1c3QgYSBxdWljayBhbmQgZGlydHkgaGFjay4KSXQncyBub3cgd29ya2luZy4uLgoKSSBhbHNvIGZpeGVkIGZsb3BweWxvYWQgdG8gcmVhZCBleGFjdGx5IHRoZSByaWdodCBhbW91bnQgb2YgZGF0YSAobm90CnVwIHRvIDY1NTIwIGJ5dGVzIG1vcmUgbGlrZSB0aGUgTGludXggY29kZSBkaWQpIGFuZCByaXBwZWQgb3V0IHNvbWUKdW51c2VkIGNvZGUuCgozYzUwOS5jOiBpbmNsdWRlcyBmaXhlZCwgY29uc3QgYWRkZWQsIHN0YXRpYyBhZGRlZCwgcmVtb3ZlZCByZWR1bmRhbnQgY29kZQoKM2M5MHguYzogaW5jbHVkZXMgZml4ZWQsIGNvbnN0IGFkZGVkLCBzaG9ydGVuZWQgbWVzc2FnZXMgdG8gc2F2ZSBzcGFjZSwKbWFkZSB0aGUgdHJhbnNjZWl2ZXIgc2VsZWN0aW9uIGJvb3Ryb20gZml4IG9wdGlvbmFsIChkZWZhdWx0OiBvZmYpLAp1cGRhdGVkIDNjOTB4LnR4dAoKYW5zaWVzYy5jOiBkZS10ZnRwaWZpZWQgKG5vdyB1c2VzICJkb3dubG9hZCIpCgpjb25maWcuYzogbW92ZWQgdGhlIGRyaXZlciBwcm90b3R5cGVzIHRvIHNlcGFyYXRlIGZpbGUsIGFkZGVkIGEgZmV3IGNvbnN0Cgpjczg5eDAuYzogYW5zaWZpZWQsIGNvbnN0IGFkZGVkLCBmaXhlZCB0aW1lb3V0IGhhbmRsaW5nCgplZXBybzEwMC5jOiBpbmNsdWRlcyBmaXhlZCwgY29uc3QgYWRkZWQsIHN0YXRpYyBhZGRlZCwgVVNFX0lOVEVSTkFMX0JVRkZFUgpoYWNrLCBwYXNzaW5nIGdsb2JhbHMgYXMgYSBwYXJhbWV0ZXIgcmVtb3ZlZCwgdGltZW91dCBoYW5kbGluZyBmaXhlZCwKY29tbWVudHMgZml4ZWQKCmVwaWMxMDAuYzogY29tbWVudHMgZml4ZWQsIGNvbnN0IGFkZGVkLCBzdGF0aWMgYWRkZWQsIFVTRV9JTlRFUk5BTF9CVUZGRVIKaGFjaywgcmVtb3ZlZCB1bnVzZWQgdmFyaWFibGVzLCBjaGFuZ2VkIGRlYnVnIGNvZGUgdG8gdXNlIG1hY3JvIGluc3RlYWQKb2YgdmFyaWFibGUsIGFsbG93IGJyb2FkY2FzdHMgdG8gYmUgcmVjZWl2ZWQgKGFmdGVyIGFsbCBob3cgZGlkIGl0CndvcmsgYmVmb3JlPz8/KQoKZXRoZXJib290Lmg6IGR1YWwvc2VyaWFsIGNvbnNvbGUgImNsZWFudXBzIiwgYWRkZWQgTkZTIHN1cHBvcnQsIGZpeGVkCklOVEVSTkFMX0JPT1RQX0RBVEEgZm9yIHBhdGhvbG9naWMgY2FzZXMsIHJlbW92ZWQgcHJvdG90eXBlIHdpdGhpbiBjb21tZW50Cihob3cgZGlkIHRoYXQgZW5kIHVwIHRoZXJlPyksIG1vdmVkIHByb3RvdHlwZXMgZm9yIGNvbmZpZy5jIGNvZGUgaGVyZSwKYWRkZWQgY29uc3RzIGFsbCBvdmVyIHRoZSBwbGFjZQoKZmxvcHB5LmM6IGFkZGVkIHN0YXRpYywgY2hhbmdlZCBjbGVhbnVwIGNvZGUKCmZsb3BweWxvYWQuUzogcmVuYW1lZCBmcm9tIC5hc20KCmdlbnJ1bGVzLnBsOiBJIGRpZG4ndCB3cml0ZSB0aGlzIDopCgppODI1ODYuYzogZml4ZWQgaW5jbHVkZXMsIGFkZGVkIGNvbnN0CgpsYW5jZS5jOiBmaXhlZCBETUEgZm9yIFBDSSBjYXJkcywgcmVtb3ZlZCBsZWZ0b3ZlcnMgZnJvbSBMaW51eCBkcml2ZXIsClVTRV9JTlRFUk5BTF9CVUZGRVIgaGFjawoKbGludXgtYXNtLWlvLmg6IGFkZGVkIHByb3RvdHlwZXMKCmxpbnV4LWFzbS1zdHJpbmcuaDogYWRkZWQgcHJvdG90eXBlcwoKbG9hZGVyLlM6IHJlbmFtZWQgZnJvbSBsb2FkZXIuYXNtLCBtb3JlIGNvbW1lbnRzIHNlZSBlbHNld2hlcmUgaW4KdGhpcyBtYWlsCgpsb2FkZXIuaW5jOiByZW1vdmVkCgptYWluLmM6IGluY2x1ZGVzIGZpeGVkLCBzdGF0aWMgYW5kIGNvbnN0IGFkZGVkLCBFdGhlcmJvb3QvMzIgbm93IHByaW50cwpyZWxvY2FkZHIsIGhvb2tzIGZvciBORlMgc3VwcG9ydCwgZHJhaW4gdGhlIFJ4IHF1ZXVlIGluIHNvbWUgc3RyYXRlZ2ljCnBsYWNlcyAoYWZ0ZXIgc2xlZXApLCBjaGFuZ2VkIGludGVyZmFjZSB0byBhd2FpdF9yZXBseTogdGltZW91dCBoYW5kbGluZywKbmV3IGNsZWFudXAgY29kZQoKbWlzYy5jOiBhbnNpZmllZCwgdHdpZGRsZSBjb2RlIGNoYW5nZWQsIHN0cmNhc2VjbXAgZW5hYmxlZCBmb3IKRXRoZXJib290LzE2IChzbWFsbGVyIHRoYW4gdGhlIDE2IGJpdCBsaWJjIHZlcnNpb24pLCBjbGVhciBBMjAgYmVmb3JlCmtlcm5lbCBpcyBzdGFydGVkIChvbmx5IGZvciBOQkkpLCBkdWFsIGNvbnNvbGUgZml4ZXMsIHJlbW92ZWQgYm9ndXMKY29tbWVudCBhYm91dCBpbnRlcnJ1cHQgZW5hYmxpbmcgdXNpbmcgaXNrZXkoKQoKbmljLmg6IGluY2x1ZGUgZ3VhcmQgYWRkZWQsIGFkZGVkIGNvbnN0CgpuczgzOTAuYzogZml4ZWQgaW5jbHVkZXMgZm9yIFBDSSB2ZXJzaW9uLCBhZGRlZCBjb25zdCwgYW5zaWZpZWQsIHJlbmFtZWQKaW50ZXJuYWwgZnVuY3Rpb25zCgpvc2RlcC5oOiByZW1vdmVkICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+IC0gcHJvYmFibHkgYWxsICNpZmRlZgpfX2xpbnV4X18gYW5kIF9fRnJlZUJTRF9fIG1heSBiZSByZW1vdmVkIG5vdy4KCm9zbG9hZGVyLmM6IHNlZSBlbHNld2hlcmUgaW4gdGhpcyBtYWlsLiByZW1vdmVkIGxvYWRzIG9mIGRlYnVnZ2luZyBjb2RlLgoKb3R1bGlwLmM6IHJlbW92ZWQgdW51c2VkIHZhcmlhYmxlcywgVVNFX0lOVEVSTkFMX0JVRkZFUiBoYWNrLCBhbnNpZmllZCwKYWRkZWQgY29uc3QKCm90dWx0aXAuaDogYWRkZWQgY29uc3QKCnBjaS5jOiBmaXhlZCBzaWduZWQgY29tcGFyaXNvbgoKcGNpLmg6IGluY2x1ZGUgZ3VhcmQgYWRkZWQsIGNvbnN0IGFkZGVkCgpydGw4MTM5LmM6IHN0YXRpYyBhZGRlZCwgY29uc3QgYWRkZWQsIGdsb2JhbHMgYXJlIG5vIGxvbmdlciBwYXNzZXMgYXMKcGFyYW1ldGVycywgZml4ZWQgcHJvYmUgbG9vcAoKc2VyaWFsLlM6IHJlbW92ZWQgdGhlIE1ha2VmaWxlIGhhY2sgdG8gY2FsY3VsYXRlIHRoZSBkaXZpc29yIGFuZCByZXBsYWNlCml0IGJ5IGEgQ1BQIGhhY2sKCnNrX2cxNi5jOiBhZGRlZCBzdGF0aWMvY29uc3QKCnNrZWwuYzogdXBkYXRlZAoKc21jOTAwMC5jOiBmaXhlZCBpbmNsdWRlcywgYWRkZWQgY29uc3QsIGZpeGVkIHRpbWVvdXQsIHJlbW92ZWQgdW51c2VkCnZhcmlhYmxlcwoKc3RhcnQxNi5TOiBjaGFuZ2VkIHN0YWNrIHBvaW50ZXIgcmVsb2FkaW5nCgpzdGFydDMyLlM6IGNsZWFuZWQgdXAgR0FTMjk1IHN1cHBvcnQsIGZpeGVkIENQVSBkZXRlY3Rpb24sIGZpeGVkIG1lbXNpemUKZm9yID4gNjRNQiwgYWRkZWQgYmFzZW1lbXNpemUoKQoKdGlhcmEuYzogZml4ZWQgaW5jbHVkZXMsIGFkZGVkIGNvbnN0LCByZW1vdmVkIHVudXNlZCB2YXJpYWJsZQoKdHVsaXAuYzogZml4ZWQgaW5jbHVkZXMsIGFkZGVkIGNvbnN0LCBkZWNyZWFzZWQgb3ZlcnNpemVkIGZyYW1lIHRvbGVyYW5jZSwKVVNFX0lOVEVSTkFMX0JVRkZFUiBoYWNrLCBjb252ZXJ0ZWQgdG8gQyBjb21tZW50cywgZml4ZWQgcHJvdG90eXBlcywKcmVtb3ZlZCB1bnVzZWQgdmFyaWFibGUKCnZpYS1yaGluZS5jOiBmaXhlZCBpbmNsdWRlcywgY29udmVydGVkIHRvIEMgY29tbWVudHMsIHJlbW92ZWQgdW51c2VkCmZ1bmN0aW9ucywgZml4ZWQgdGltZW91dCwgVVNFX0lOVEVSTkFMX0JVRkZFUiBoYWNrLCByZW1vdmVkIHVudXNlZAp2YXJpYWJsZSwgY29uc3QgYWRkZWQKCmx6aHVmLmMgd2FzIG1vZGlmaWVkIG5vdCB0byBvdXRwdXQgJzonIGNoYXJhY3RlcnMsIGJlY2F1c2UgSSBmaW5kIGl0CnVzZWZ1bCB0byBzZWFyY2ggZm9yIHRoZW0gaW4gYSBtYWtlIGxvZyB0byBzcG90IGFsbCBlcnJvciBtZXNzYWdlcy4KCkZpbmFsbHkgYWxsIHN5bWxpbmtzIGhhdmUgZ29uZQoKSSBmaXhlZCBzZ21sL3ZlbmRvcnRhZ3Muc2dtbCAobWF5YmUgaXQncyBtb3JlIGEgd29ya2Fyb3VuZCk6IHNnbWwydHh0CmRpZG4ndCBsaWtlIHRoZSB+ficgc2VxdWVuY2UgYW5kIGlnbm9yZWQgYSB3aG9sZSBsaW5lLCBtYWtpbmcgdGhlIC50eHQKZmlsZSBpbmNvbXBsZXRlLiAgQWxzbyBmcmVlYnNkLnR4dCB3YXMgY29udmVydGVkIHRvIHNnbWwuCgpNeSBzdGFuZGFyZCBwYXRjaCB0byBuZXRib290LTAuOC4xL2NvbmZpZ3VyZSAodG8gcmVtb3ZlIHRoZSAidW5rbm93biIpIGlzCmFnYWluIGluIHBsYWNlIC0gaG93IGlzIHRoaXMgZmlsZSBjcmVhdGVkPyBCeSBoYW5kPyAgSSBhZGRlZCBzZXJpYWwvZHVhbApjb25zb2xlIHN1cHBvcnQgdG8gbWtuYmktbGludXguCgpPaCwgYW5kIHNvbWV0aGluZyBJIGFsbW9zdCBmb3Jnb3Q6IEV0aGVyYm9vdCBub3cgd29ya3MgdW5kZXIgVk13YXJlLgpWTXdhcmUgaGFzIGEgcmF0aGVyIGxhcmdlIEVCREEgKDNLIGluc3RlYWQgb2YgMUsgbGlrZSBtb3N0IG90aGVyCkJJT1MgdmVyc2lvbnMpLCBzbyBvbmUgbWlnaHQgaGF2ZSB0byBzYWNyaWZpY2UgYSBmZXcgbmlmdHkgb3B0aW9ucy4KTm90ZSB0aGF0IHRoZSBNYWtlZmlsZSBjaGVjayBjYW5ub3QgZGV0ZWN0IHRoaXMgLSBtYXliZSB3ZSBzaG91bGQgYWRkIGEKcnVudGltZSBjaGVjaywgdG9vPyAgT25lIHRoaW5nIHRoYXQgZG9lc24ndCB3b3JrIHdpdGggVk13YXJlIGlzIHRoZSAiQm9vdApMb2NhbCIgc3R1ZmYgLSBpdCdzIG5vdCB0ZXJyaWJseSB1c2VmdWwgaWYgeW91IGhhdmUgdG8gYm9vdCBmcm9tIGRpc2ssCmJ1dCBpdCBzaG91bGRuJ3QgY3Jhc2ggdGhlIG1hY2hpbmUgKEkndmUgc2VlbiBzZXZlcmFsIHRyaXBsZSBmYXVsdHMsCmRlcGVuZGluZyBvbiBSRUxPQ0FERFIgYW5kIHRoZSBzdGFjayB1c2FnZSkuICBJIHRyYWNrZWQgaXQgZG93biB0byB0aGUKZmFjdCB0aGF0IFZNd2FyZSBjcmFzaGVzIG9uIGludCAweDE5IGlmIHRoZSBtZW1vcnkgYXJlYSAweDk4MDAwLTB4OWYzZmYKaXMgb3ZlcndyaXR0ZW4uICBJZiBvbmUgY2hhbmdlcyBSRUxPQ0FERFIgdG8gMHg4ZjAwMCwgZXZlcnl0aGluZyB3b3JrcwpuaWNlbHkuICBTb21lb25lIHNob3VsZCByZXBvcnQgdGhlIGJ1ZyB0byBWTXdhcmUuICBBbHNvIHByb3BlciBib290IFJPTQpzdXBwb3J0IHNob3VsZCBiZSBhZGRlZCB0byBWTXdhcmUgYW5kIHRoZXkgc2hvdWxkIHVwZ3JhZGUgdGhlIHZpcnR1YWwKY2FyZCB0byAxMDBNYnBzIChkb24ndCBsYXVnaCAtIHRoZXkgbGltaXQgdGhlIGJhbmR3aWR0aCB0byAxME1icHMgZXZlbgppZiB5b3UgaGF2ZSBhIHJlYWwgMTAwTWJwcyBjYXJkISkuICBNYXliZSBvbmUgY291bGQgZXZlbiB1c2UgdGhlIGZsYXNoCnV0aWxpdHkgZm9yIHRoZSByZWNlbnQgQU1EIFBDbmV0IGNhcmRzLi4uCgpSZWxlYXNlZCBhcyBFdGhlcmJvb3QgNC41LjUKCisgTW9yZSBmaXhlcyBmcm9tIEtsYXVzIEVzcGVubGF1YiwgYmFzZWQgb24gYnVnIHJlcG9ydHMgYnkgRG91ZyBBbWJyaXNrbwphbmQgb3RoZXJzLiBTbWFsbCBjbGVhbnVwcyBpbiB0dWxpcC5jLiBIZSBhbHNvIGFkZGVkIGEgQkFDS09GRl9MSU1JVApwYXJhbWV0ZXIgdG8gdGhlIGV4cG9uZW50aWFsIGJhY2tvZmYgZm9yIHJldHJ5IGludGVydmFscy4KCisgQ2hyaXN0b3BoIFdpbGxpbmcgc2VudCBpbiBhIGZpeCBmb3IgUENJIE5FMjAwMHMgd2hpY2ggZm9yY2VzIDE2LWJpdAp0cmFuc2ZlciBtb2RlIGZvciBQQ0kuIFRoaXMgbWlnaHQgbWFrZSBpdCB3b3JrIG9uIHNvbWUgUENJIE5FMjAwMHMgdGhhdApmYWlsZWQgYmVmb3JlLCBwbGVhc2UgdGVzdCBpZiB5b3UgY2FuLgoKKyBNb3ZlZCBjb21tZXJjaWFsIGxpbmtzIG9mZiBtYWluIHdlYiBwYWdlIGludG8gd2ViIHBhZ2Ugb2YgaXRzIG93bi4KCisgTWVyZ2VkIGluIFRSWV9GTE9QUFlfRklSU1QgY29kZSBmcm9tIDxhcyBBVCBiYXJ0IFBFUklPRCBubD4uCgpSZWxlYXNlZCBhcyBFdGhlcmJvb3QgNC41LjYKCisgRnJhbmsgTWVobmVydCBzcG90dGVkIGEgYnVnIGluIHR1bGlwLmMgd2hlcmUgdGhlIHNvbGUgdHJhbnNtaXQgYnVmZmVyCndhcyBub3QgdGFnZ2VkIGFzIHRoZSBsYXN0IG9uZSBpbiB0aGUgY2hhaW4uCgorIEhhY2tlZCBzZXJpYWwuUyB0byBjaGVjayBpZiBhIHNlcmlhbCBpbnRlcmZhY2UgaXMgcHJlc2VudCBhbmQgdG8gZGlzYWJsZQp0aGUgcm91dGluZXMgaWYgbm90LCBzbyB0aGF0IEV0aGVyYm9vdCBkb2VzIG5vdCBoYW5nIG9uIGEgbWFjaGluZSB3aXRob3V0CmEgc2VyaWFsIGludGVyZmFjZSwgZXZlbiBpZiB0aGUgb3B0aW9uIGhhcyBiZWVuIGNvbXBpbGVkIGluLgoKKyBXcm90ZSBta3JvbW5iaSBmb3IgbWFraW5nIGEgbmV0d29yayBib290YWJsZSBpbWFnZSBmcm9tIGEgUk9NIGltYWdlCihmb3IgdXNpbmcgRXRoZXJib290IHRvIHRlc3QgYW5vdGhlciBFdGhlcmJvb3QgZHJpdmVyKS4KCisgS3J6eXN6dG9mIEhhbGFzYSBmb3VuZCBhIHNtYWxsIGJ1ZyBpbiBuZnMuYyBpbiB0aGUgaGFuZGxpbmcgb2YgQk9PVFAKZXh0ZW5zaW9uIGZpbGVzLgoKKyBTb21lIGluc3RydWN0aW9ucyBvbiBhZGRpbmcgRXRoZXJib290IHRvIGEgbWFpbiBCSU9TIHdlcmUgY29udHJpYnV0ZWQKYnkgRGlyayB2b24gU3VjaG9kb2xldHouCgorIFNvbWUgY29tbWVudGFyeSBvbiBjYnJvbS5leGUgdmVyc2lvbnMgcG9zdGVkIGJ5IFJhcHAgSW5mb3JtYXRpayBTeXN0ZW1lCkdtYkggdG8gdGhlIE5ldGJvb3QgbWFpbGluZyBsaXN0IGluY2x1ZGVkLgoKUmVsZWFzZWQgYXMgRXRoZXJib290IDQuNS43CgorIFBhdHJpY2sgQXVnZSBwb2ludGVkIG91dCB0aGF0IC1EVDUwM19TSE1FTSBvcHRpb24gc2hvdWxkIGJlIG5vdCB1c2VkCmJ5IGRlZmF1bHQsIGFzIHRoZSBjb21tZW50cyBzYXkuCgorIEhlaW5yaWNoIFJlYmVobiBwb2ludGVkIG91dCB0aGF0IHRoZSBkb2N1bWVudGF0aW9uIG5lZWRlZCB0byBiZSB1cGRhdGVkCmZvciB0aGUgbmV3IGJpbjMyIGFuZCBiaW4xNiBwcmVmaXhlcyBmb3IgdGFyZ2V0cy4KCisgQ2hyaXN0b3BoIFBsYXR0bmVyIGZvdW5kIHRoYXQgbm9kZV9hZGRyIGluIHN0cnVjdCBuaWMgc2hvdWxkIGJlIHVuc2lnbmVkCmNoYXIgKiBvciBwcm9ibGVtcyBvY2N1ciBpbiB0aGUgaGFuZGxpbmcgb2YgdGhlIE1BQyBhZGRyZXNzIGluIGNzODl4MC5jLgoKKyBHcmVnIEh1ZHNvbiBwb2ludGVkIG91dCB0aGF0IGluZXRfbnRvYSBpcyBtaXNuYW1lZCwgaXQgc2hvdWxkIGJlCmluZXRfYXRvbi4KCisgVnNldm9sb2QgU2lwYWtvZmYgc3VnZ2VzdGVkIHRoYXQgdGhlIHByb2JlIGFkZHJlc3MgbGlzdCBmb3IgTkUyMDAwCnNob3VsZCBtYXRjaCB0aGF0IG9mIExpbnV4LiBEb25lLCB3aXRoIHRoZSBkZWxldGlvbiBvZiAweDM2MCB3aGljaCBvZnRlbgpjb25mbGljdHMgd2l0aCB0aGUgcGFyYWxsZWwgcG9ydCBhdCAweDM3OC4KCisgQ3JlYXRlZCBta25iaSwgYSBQZXJsIHV0aWxpdHkgdGhhdCByZXBsYWNlcyBta25iaS1kb3MsIG1rbmJpLWxpbnV4LApta2ZyZWVkb3NuYmksIGFuZCBta3JvbW5iaS4gUmVtb3ZlZCBta3tmcmVlZG9zLHJvbSxlbGtzfW5iaS8gZnJvbQpjb250cmliLy4gIChFTEtTIGhhcyBpdHMgb3duIHRhZ2dlZCBpbWFnZSBjcmVhdGlvbiBtZXRob2Qgbm93LikKCisgUmVtb3ZlZCBvYnNvbGV0ZS8gZnJvbSBjb250cmliLy4KClJlbGVhc2VkIGFzIEV0aGVyYm9vdCA0LjUuOAoKKyBTb21lIHNtYWxsIGVuaGFuY2VtZW50cyB0byBta25iaS4gTWVyZ2VkIGluIGRpc25iaSBhbmQgbWtsbmltLiBDaGFuZ2VkCnZlcnNpb24gdG8gMS4wLgoKKyBuZXRib290LTAuOC4xIGRpcmVjdG9yaWVzIGRpc3RyaWJ1dGVkIHNlcGFyYXRlbHkgbm93LgoKUmVsZWFzZWQgYXMgRXRoZXJib290IDQuNi4wCgorIE5pY2sgTG9wZXogZGlzY292ZXJlZCB0aGF0IHRoZSBEYXZpY29tIDkxMDIgaXMgWWV0IEFub3RoZXIgVHVsaXAgQ2xvbmUKYW5kIGEgZmV3IGFwcHJvcHJpYXRlIGluaXRpYWxpc2F0aW9ucyB3aWxsIG1ha2UgaXQgd29yay4KCisgTWF0dGhldyBSZWltZXIgc2VudCBpbiBwYXRjaGVzIGZvciBjb250cmliLzNjOTB4dXRpbC5jL2Jyb211dGlsLmMgdG8KY29tcGlsZSBhbmQgcnVuIHVuZGVyIEZyZWVCU0QuCgorIEtyenlzenRvZiBIYWxhc2EgZm91bmQgdGhhdCB0aGUgbnVtYmVyIG9mIGJ1ZmZlcnMgaW4gZXBpYzEwMC5jIG5lZWRlZAp0byBiZSByYWlzZWQgdG8gMiBlYWNoIGZvciBvcGVyYXRpb24gYXQgMTAgTWIgZm9yIHRoZSBQQ0kgRXRoZXJQb3dlcgo5NDMyQi1UWCB1c2luZyB0aGUgU01DIDgzQzE3MS4KCisgS2xhdXMgRXNwZW5sYXViIGZpeGVkIHRoZSByb290IHBhdGggaGFuZGxpbmcgaW4gbWFpbi5jLCBpdCB3YXNuJ3QKcmVxdWVzdGluZyBvcHRpb24gMTcgaW4gREhDUC4gQWxzbyByZW1vdmVkIG9uZSBwcm90b3R5cGUgd2FybmluZyBpbgp0ZnRwKCkuCgorIERhbmllbCBTaGFuZSBzZW50IGluIGNvZGUgZm9yIGZvciBhZGRpbmcgaWRlbnRpZmllcnMgdG8gYSBESENQIHJlcXVlc3QsCnVzaW5nIGEgdXNlciBzcGVjaWZpZWQgREhDUCBvcHRpb24uIFRoZSBwYXRjaCBpcyBpbiBjb250cmliL2RoY3BpZC4KCisgQnVnIGZpeCBpbiBta25iaS0xLjAgZm9yIHRoZSBpcGFkZHJzPXJvbSBvcHRpb24sIHdhcm5pbmdzIGFib3V0IGJhZGx5CmZvcm1lZCBzcGVjaWZpY2F0aW9uIHRvIGlwYWRkcnM9IG9yIHVucmVzb2x2YWJsZSBuYW1lcy4KClJlbGVhc2VkIGFzIEV0aGVyYm9vdCA0LjYuMQoKKyBTdHVhcnQgTHlubmUgc2VudCBpbiBwYXRjaGVzIHRvIGFsbG93IC0gdG8gbWVhbiByZXVzZSBrZXJuZWwgZmlsZW5hbWUKaW4gbWVudSBzcGVjaWZpY2F0aW9ucy4gQWxzbyBmaXhlZCBESENQIHJlcXVlc3QgdG8gYXNrIGZvciB0YWdzIDEyOSBhbmQKMTMwIChLZW4gYWRkZWQgdGhpcyksIGFzIHRoZSBta25iaSBtYW4gcGFnZSBwcm9taXNlZC4KCisgRml4ZWQgVVJMIGZvciBSaWNoYXJkIEZlcnJpJ3MgTFVJLgoKKyBBZGRlZCBVUkwgZm9yIEdyZWdvcnkgUi4gV2FybmVzJyBDbHVzdGVyTkZTLgoKKyBDaGFuZ2VkIFJGQzIxMzJfTUFYX1NJWkUgb3B0aW9uIGluIG1haW4uYyB0byBhbGxvdyBtYXhpbXVtIHNpemUgREhDUApyZXBsaWVzLgoKKyBNYXR0aGlhcyBTY2huaWVkZXJtZXllciBzdWJtaXR0ZWQgYW4gb3B0aW9uYWwgZmVhdHVyZSB0byB1c2UgbnVtYmVycwppbnN0ZWFkIG9mIGxldHRlcnMgZm9yIGJvb3RtZW51IGVudHJpZXMuCgorIEJyb3VnaHQgc29tZSBGQVFzIHVwIHRvIGRhdGUgd2l0aCBta25iaS0xLjAuCgorIFdyb3RlIHBlcmwgc2NyaXB0IG1rbHJwbmIgZm9yIG1ha2luZyBuZXRib290IGltYWdlIGZyb20gTGludXggUm91dGVyClByb2plY3QgZmxvcHB5LiAgVGVzdGVkIG9uIENveW90ZSBMaW51eCAoYmFzZWQgb24gTFJQKS4KClJlbGVhc2VkIGFzIEV0aGVyYm9vdCA0LjYuMgoKKyBSZS1lbmFibGVkIHR1bGlwLmM6dHVsaXBfZGlzYWJsZSgpIGNvZGUuCgorIE1pbm9yIGZpeCB0byBTSE9XX05VTUVSSUMgY29kZSBpbiBib290bWVudS5jLgoKKyBNaW5vciBzcGVsbGluZyBjb3JyZWN0aW9ucyB0byB2ZW5kb3J0YWdzLnNnbWwuCgorIGFuZHJlYXMua2FiZWwgQVQgc2xhYyBQRVJJT0Qgc3RhbmZvcmQgUEVSSU9EIGVkdSBwb2ludGVkIG91dCB0aGF0IHRvCmJlIFJGQzk1MSBjb21wbGlhbnQsIHRoZSBicm9hZGNhc3QgQk9PVFAgcmVxdWVzdCBuZWFyIGxpbmUgNzA1IG9mIG1haW4uYwpzaG91bGQgdXNlIHBvcnQgQk9PVFBfQ0xJRU5UIGFuZCB0aHVzIHN0YW5kIGEgYmV0dGVyIGNoYW5jZSBvZiBnb2luZwp0aHJvdWdoIGZpcmV3YWxscy4KCisgQ2hyaXN0b3BoIFBsYXR0bmVyIGZvdW5kIHRoYXQgdGhlIDE2IGJpdCBidXMgd2lkdGggZml4IGZvciBORVBDSSBjYXJkcwppbnRyb2R1Y2VkIGluIDQuNS42IGJyZWFrcyBvcGVyYXRpb24gZm9yIG90aGVyIE5FUENJIGNhcmRzLiBTbyBub3cgdGhlCiNkZWZpbmUgc3ltYm9sIGlzIE5TODM5MF9GT1JDRV8xNkJJVCwgdG8gYmUgdXNlZCB3aGVuIHRoZSBOSUMgcmVxdWlyZXMKMTYgYml0IGJ1cyB3aWR0aCBidXQgRXRoZXJib290IGd1ZXNzZXMgd3JvbmcuIFRoaXMgbmVlZHMgdG8gYmUgZml4ZWQKbGF0ZXIgdG8gYXV0b2RldGVjdCBhZGFwdGVyIGJ1cyB3aWR0aC4KCisgU2h1c3VrZSBOaXNpeWFtYSBzZW50IG1lIHRoZSBQQ0kgSURzIGZvciAzQzU5NSBOSUNzIHNvIHRoYXQgUk9NIGltYWdlcwpjb3VsZCBiZSBnZW5lcmF0ZWQgZm9yIHRoZW0uCgorIEppbSBNY1F1aWxsYW4gc2VudCBpbiBtb2RpZmljYXRpb25zIHRvIHR1bGlwLmMgdG8gcmVqZWN0IGJhZCBwYWNrZXRzLgoKKyBLbGF1cyBFc3BlbmxhdWIgc3VnZ2VzdGVkIGNoYW5naW5nIHRoZSBmaWxlbmFtZSBzdWJzdGl0aW9uIG1hY3JvIGluIHRoZQpJREVOVDE2IGFuZCBJREVOVDMyIHN0cmluZ3MgdG8gJChARikgc28gdGhhdCBvbmx5IHRoZSBmaWxlbmFtZSBwb3J0aW9uIG9mCnRoZSBwYXRobmFtZSBpcyBpbnNlcnRlZC4gIE90aGVyd2lzZSB0aGUgY29udHJpYnV0ZWQgcm9taWQgcHJvZ3JhbSBicmVha3MuCgorIEFkZGVkIGF1dGhvciBpZGVudCBhbmQgY29weXJpZ2h0IHN0YXR1cyB0byBjb250cmliL2JpbjJpbnRlbGhleC5jLnNpbXBsZQphdCBSb2dpZXIgV29sZmYncyByZXF1ZXN0LgoKKyBH/G50ZXIgS25hdWZmIHNlbnQgdXBkYXRlcyB0byByb21pZCBhbmQgbXAtZm9ybS4KClJlbGVhc2VkIGFzIEV0aGVyYm9vdCA0LjYuMwoKKyBNYXJ0eSBDb25ub3IgY29udHJpYnV0ZWQgcGF0Y2hlcyB0byB0dWxpcC5jIHRvIHN1cHBvcnQgdGhlIExpbmtTeXMKTE5FMTAwVFggdjQgTklDcy4KCisgQWRkZWQgcm1yZC5jb20gdG8gbWtuYmktMS4wIGRpcmVjdG9yeS4KCisgQWRkZWQgZXhwZXJpbWVudGFsIGNoYW5nZXMgdG8gYWxsb3cgUkVMT0NBRERSIHRvIGJlIGNoYW5nZWQgdG8gMHg4ODAwMAp0byBhdm9pZCBEaXNrIE9uIENoaXAgZHJpdmVycy4gU2VlIFJFTE5PVEVTIGFuZCBNYWtlZmlsZSBmb3IgZGV0YWlscy4KClJlbGVhc2VkIGFzIEV0aGVyYm9vdCA0LjYuNAoKKyBDaHJpcyBKb2hucyBmb3VuZCBhIGxvbmctc3RhbmRpbmcgYnVnIGluIGZpcnN0LWxpbnV4LlMuIEVTIHdvdWxkCnNvbWV0aW1lcyAhPSBDUywgbWFraW5nIHRoZSByYW1kaXNrIG1vdmluZyBmYWlsLgoKKyBNYWRlIC0taGFyZGRpc2sgd29yayBmb3IgbWtuYmktZmRvcy4KClJlbGVhc2VkIGFzIEV0aGVyYm9vdCA0LjYuNQoKKyBCdWcgaW4gbWtuYmktZG9zLCBsYXN0IHNlY3RvciBvbWl0dGVkIGluIHJhbWRpc2sgaW1hZ2UuCgorIFVzZSBjZWlsKCkgZm9yIGNvbXB1dGluZyBudW1iZXIgb2Ygcm9vdGRpciBzZWN0b3JzLgoKKyAtLWhhcmRkaXNrIG5vdyB3b3JrcyBmb3IgbWtuYmktZG9zIGFsc28uCgorIFNob3VsZCB3b3JrIG9uIEZBVDE2IHBhcnRpdGlvbnMgbm93LgoKKyBOZXcgZHJpdmVyIGZvciBXaW5ib25kIFc4OUM4NDAgYnkgSWdvciBWLiBLb3ZhbGVua28uCgorIE1vZGlmaWNhdGlvbiB0byBsb2FkZXIuUyBieSBTdGV2ZSBTbWl0aCBmb3Igc29tZSBQQ0kgQklPU2VzIHRoYXQgZG9uJ3QKaGFuZGxlIElOVDE5SCB3ZWxsLgoKKyBTbWFsbCBidWcgaW4gb3Nsb2FkZXIuYywgaiBub3QgZGVmaW5lZCBpbiB0d28gcGxhY2VzIGlmIERFTElNSVRFUkxJTkVTCmRlZmluZWQuCgpSZWxlYXNlZCBhcyBFdGhlcmJvb3QgNC43LjYgKGRldmVsb3BtZW50YWwpCgorIEFsbCB0aGUgY2hhbmdlcyBmcm9tIDQuNi41IHRvIDQuNi42IGJhY2sgcHJvcGFnYXRlZCBleGNlcHQgZm9yIHRoZQpsb2FkZXIuUyBjaGFuZ2UuCgorIFJlbW92ZWQgLW5vc3RkbGliIGZyb20gbGQgZmxhZ3MuIFNlZW1zIHRvIGJlIGEgdmVzdGlnZSBmcm9tIHdoZW4gd2UKd2VyZSBjYWxsaW5nIGdjYyBhcyBpdCdzIG5vdCBhbiBsZCBvcHRpb24uCgpSZWxlYXNlZCBhcyBFdGhlcmJvb3QgNC42LjYKCisgQ29udHJpYnV0ZWQgb25lLWxpbmUgcGF0Y2ggdG8gYWxsb3cgYm9vdGluZyBmcm9tIFNDU0kgZGlza3MgYWxzbyAoc2QpLgoKKyBHcnplZ29yeiBKYWJsb25za2kgc2VudCBpbiBhIGZpeCBmb3IgbG9uZy1zdGFuZGluZyBidWcgaW4gbG9hZGVyLlMgdGhhdApwcmV2ZW50ZWQgYm9vdGluZyBvbiBzb21lIEJJT1Nlcy4KCisgTW9yZSB1cGRhdGVzIHRvIGRvY3VtZW50YXRpb24uCgpSZWxlYXNlZCBhcyBFdGhlcmJvb3QgNC42LjcKCisgUmljayBLZW5uZWxsIHBvaW50ZWQgb3V0IHRoYXQgdGhlcmUgaXMgYW5vdGhlciBwbGFjZSBpbiBtYWluLmMgd2hlcmUKdGhlIERIQ1AgcmVxdWVzdCBpcyBzZW50IHdpdGggYSBzb3VyY2UgcG9ydCBvZiAwLCB3aGljaCBtYXkgbm90IGVsaWNpdApyZXBsaWVzIGZyb20gc29tZSBESENQIHNlcnZlcnMgb3IgcGFzcyBnYXRld2F5cy4gQ2hhbmdlZCB0bwpCT09UUF9DTElFTlQuCgorIERlcGNhIGRyaXZlciBmaW5hbGx5IHdvcmtzLgoKKyBDaGFuZ2VkIHVuc2lnbmVkIGludCBsZW47IHRvIGludCBsZW47IGluIDNjNTk1LmMgdHJhbnNtaXQgcm91dGluZQp3aGljaCB3YXMgZ2VuZXJhdGluZyBhIHdhcm5pbmcgZnJvbSBnY2MuCgorIFJlbW92ZWQgd2FybmluZyBhYm91dCBsam1wIGluZGlyZWN0IHdpdGhvdXQgKiBpbiBzdGFydDMyLlMgYnkgcHV0dGluZwppbiB0aGUgKi4gQ2hlY2tlZCB0aGF0IGdlbmVyYXRlZCBjb2RlIGhhcyBub3QgY2hhbmdlZCBieSBjb21wYXJpbmcKYmluYXJpZXMuIExhdGVyOiBCdXQgb25seSBmb3IgZ2FzIDIuOS41IGFuZCBhYm92ZSwgZ2FzIDIuOS4xIGRvZXNuJ3QKbGlrZSAqLgoKKyBXYW50ZWQgdG8gZG8gdGhlIHNhbWUgZm9yIHRoZSBsY2FsbCdzIGluIHBjaS5jIGJ1dCBkaXNjb3ZlcmVkIHRoYXQKZ2FzIDIuOS4xIGNob2tlcyBvbiAqLCBhbmQgYXMgSSBkb24ndCB3YW50IHRvIGludHJvZHVjZSBtb3JlICNpZmRlZnMKaW50byBwY2kuYywgd2UnbGwganVzdCBsaXZlIHdpdGggdGhlIHdhcm5pbmdzIHVudGlsIGdhcyAyLjkuMSBpcyBkZWFkCm9yIHRoZSBpbmNvcnJlY3Qgc3ludGF4IGlzIHJlamVjdGVkIGJ5IGEgY3VycmVudCBnYXMgcmVsZWFzZS4KCisgUmV2ZXJzZWQgI2RlZmluZSBzbyB0aGF0IEdBUzI5MSBpbmRpY2F0ZXMgZ2FzIDIuOS4xLiBSYXRpb25hbGU6IGdhcwoyLjEwIHByb2JhYmx5IGJlaGF2ZXMgbGlrZSBnYXMgMi45LjUgc28gdGhlIGRlZmF1bHQgc2hvdWxkIGJlIHRoZSBuZXcKYmVoYXZpb3VyLgoKKyBOSTUwMTAgZHJpdmVyIGZpbmFsbHkgd29ya3MuIFdlaXJkIE5JQywgaGFzIG9ubHkgMmtCIG1lbW9yeSBvbiBib2FyZApzbyBpZiB5b3UgZG9uJ3Qgc3dpdGNoIHRvIHRoZSByZWNlaXZlciBpbW1lZGlhdGVseSBhZnRlciB0cmFuc21pdHRpbmcKeW91IHdpbGwgbG9zZSB0aGUgcmVwbHkgcGFja2V0LiAoVGhpcyBpcyBhIHZlcnkgYW5jaWVudCBib2FyZCwgSSB3YXMKZG9pbmcgdGhlIGRyaXZlciBmb3Iga2lja3MuKQoKKyBJbXBsZW1lbnRlZCBhIGxvdy1vdmVyaGVhZCB0aW1lciByb3V0aW5lIGZvciBpbXBsZW1lbnRpbmcgdGltZW91dHMgaW4KZHJpdmVycy4gVGhpcyB0aW1lciBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIG9mIGhhY2tzIHdpdGggaW50ZWdlciBsb29wcwood2hpY2ggYXJlIENQVSBzcGVlZCBkZXBlbmRlbnQpIG9yIGNhbGxpbmcgY3VycnRpY2tzKCksIHdoaWNoIGhhcwpyZWxhdGl2ZWx5IGhpZ2ggb3ZlcmhlYWQgYmVjYXVzZSBpdCByZWFkcyB0aGUgQklPUyB0aW1lciwgYW5kIGhhcyBhCnJlc29sdXRpb24gb2Ygb25seSAxLzE4dGggb2YgYSBzZWNvbmQuICBUaW1lciAyIG9mIHRoZSA4MjU0IHRpbWVyIGNoaXAKY2FuIGJlIGxvYWRlZCB3aXRoIGFuIHVuc2lnbmVkIDE2LWJpdCB2YWx1ZSB0aGF0IHdpbGwgYmUgZGVjcmVtZW50ZWQgYXQKYWJvdXQgMTE5MyBjb3VudHMgcGVyIG1zIChjb25zdGFudCBUSUNLU19QRVJfTVMgaW4gdGltZXIuaCkuIFNvIHRoZQptYXhpbXVtIHRpbWVvdXQgdGhhdCBjYW4gYmUgaW1wbGVtZW50ZWQgd2l0aCBhIHNpbmdsZSBjYWxsIGlzIGFib3V0IDU0Cm1zLiBDYWxsIGxvYWRfdGltZXIodTE2KSB0byBsb2FkIGFuZCBzdGFydCB0aGUgdGltZXIgKDAgPT0gNjU1MzYpLiBDYWxsCmludCB0aW1lcjJfcnVubmluZygpIHRvIGNoZWNrIGlmIGl0IGlzIHN0aWxsIGFjdGl2ZS4gdGltZXIyX3J1bm5pbmcgY2FuCmJlIGludGVybGVhdmVkIHdpdGggb3RoZXIgdGVzdHMsIGUuZy4gb24gdGhlIE5JQyBoYXJkd2FyZSByZWdpc3RlcnMuCldoZW4gdGhlIHRpbWVyIHJ1bnMgZG93biB0byAwLCBpdCB3aWxsIHJldHVybiAwLiBJZiB5b3UganVzdCBuZWVkIHRvCmRlbGF5IGEgc2hvcnQgdGltZSwgY2FsbCB3YWl0b25fdGltZXIyKHUxNikgdG8gbG9hZCBhbmQgZGVsYXkgdGhhdCBtYW55CnRpY2tzLgoKKyBSZW1vdmVkIHNsb3dkb3duaW8oKSBmcm9tIHNvdXJjZXMuIEl0J3MgY2FsbGVkIGluIG9ubHkgb25lIHBsYWNlIGFuZAppcyBmb2xsb3dlZCBieSBhIGNhbGwgdG8gY3VycnRpY2tzKCkgd2hpY2ggd2lsbCByZXN1bHQgaW4gYSBsYXJnZSBkZWxheQphbnl3YXkuIEl0J3MgYWxzbyBub3QgY2xlYXIgaWYgdGhlIHN0cmF0ZWd5IGluIHNsb3dkb3duaW8gKGEgY291cGxlIG9mCmxvY2FsIGp1bXBzKSB3aWxsIGV2ZW4gd29yayBvbiBmYXN0IENQVXMgd2l0aCBpbnN0cnVjdGlvbiBjYWNoZXMuCgorIFJlbW92ZWQgc3VwcG9ydCBmb3IgJWkgKGFsaWFzIGZvciAlZCkgaW4gcHJpbnRmLiBOb2JvZHkgdXNlcyBpdCwgaWYKdGhleSBkbyB0aGV5IHNob3VsZCBqdXN0IGVkaXQgdGhlIGZvcm1hdCBzdHJpbmcgdG8gdXNlICVkLCBhbmQgcmVtb3ZpbmcKaXQgbWVhbnMgb25lIGxlc3Mgbm9uLXN0YW5kYXJkIGZvcm1hdCBpbiBwcmludGY7IHdlIGhhdmUgJVgsICViIGFuZCAlSQphcyBpdCBpcy4KCisgU2ltcGxpZmllZCBjdXJydGlja3MoKSBieSBhY2Nlc3NpbmcgQklPUyB2YXJpYWJsZXMgZGlyZWN0bHkgaW5zdGVhZCBvZgpjYWxsaW5nIHRpbWVvZmRheSBCSU9TIGludGVycnVwdC4KClJlbGVhc2VkIGFzIEV0aGVyYm9vdCA0LjYuOAoKKyBJJ20gcGlzc2VkIG9mZiB3aXRoIHRoZSBpbmNvbnNpc3RlbmN5IGJldHdlZW4gZ2FzIDIuOS4xIGFuZCBnYXMgMi45LjUKcmUgbGptcCAqIChpbmRpcmVjdCBqdW1wKS4gU29tZSBhc3NlbWJsZXJzIGNsYWltaW5nIHRvIGJlIDIuOS41IGRpc2xpa2UKdGhlICogKFJINi4yJ3MgaXMgb25lKS4gSSdtIGdvaW5nIHRvIGp1c3QgbWFrZSBpdCBsam1wIGFuZCBsaXZlIHdpdGggdGhlCndhcm5pbmcgbWVzc2FnZSB1bnRpbCB0aGUgZ2FzIDIuOS4xIHN5bnRheCBpcyB0b3RhbGx5IGRlYWQuCgorIFZhcmlvdXMgZml4ZXMgZnJvbSBLbGF1cyBFc3BlbmxhdWI6IEZpeCBmb3IgTkZTIGJvb3RpbmcgZnJvbSAqQlNECnBsYXRmb3JtcywgZml4IGZvciBMYW5jZSBkcml2ZXIsIGludGVycnVwdCB3YXMgYmVpbmcgdHVybmVkIG9uLCBmaXggZm9yCnNlcmlhbC5TIGFuZCBjb2RlIGNsZWFudXBzLgoKKyBQYXVsIFJvYmVydHNvbiBvZiBMb2Nzb2Z0IGZvdW5kIHRoYXQgaWYgdGhlIHRvcCBoYWxmIG9mICVlc3AgY29udGFpbnMKZ2FyYmFnZSBqdXN0IGJlZm9yZSB0aGUgZmlyc3QgY2FsbCB0byByZWFsX3RvX3Byb3QgaW4gc3RhcnQzMi5TLCBpdCBjYW4KYWZmZWN0IGJvb3Rpbmcgb24gc29tZSBCSU9TZXMuIEluc2VydGVkIGFuZGwgdG8gY2xlYXIgdG9wIGhhbGYuCgorIFNsZWVwIGZvciAyIHNlY29uZHMgYWZ0ZXIgZmFpbHVyZSB0byBsb2FkIGZpbGUgdG8gYXZvaWQgcG91bmRpbmcgdGhlCnNlcnZlciBpZiB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCBhbmQgdGh1cyBzaHV0dGluZyBkb3duIHRoZSB0ZnRwCnNlcnZpY2UgKGluZXRkIGhhcyByYXRoZXIgcG9vciByYXRlIGNvbnRyb2xzKS4KCisgU2hyZWRkYSBvZiBnbXguZGUgcmVwb3J0ZWQgYSBkaXNjcmVwYW5jeSBiZXR3ZWVuIHRoZSBNYWNyb25peCBNWDk4NzE1CmRldmljZSBJRHMgdXNlZCBpbiBwY2kuaCBhbmQgTklDLiBNYXJ0eSBDb25ub3IgaGFzIHJ1bGVkIHRoYXQgdGhlIGlkIGluCk5JQyBpcyBhIHR5cG8uICBJZiBib290aW5nIHdvcmtzIGZyb20gZmxvcHB5IGJ1dCBub3QgZnJvbSBST00sIHRoaXMgbWF5CmJlIHRoZSByZWFzb24uCgpSZWxlYXNlZCBhcyBFdGhlcmJvb3QgNC42LjkKCisgT29wcywgYSBicm93biBwYXBlciBiYWcgYnVnIGluIHN0YXJ0MzIuUy4gRm9yZ290IHRoYXQgdGhlIGN1cnJ0aWNrcygpCm5lZWRzIGludGVycnVwdHMgZW5hYmxlZCB0byB3b3JrLiBDYWxsaW5nIHRoZSBCSU9TIGFsbG93ZWQgaW50ZXJydXB0cyB0bwpoYXBwZW4gYnkgZ29pbmcgaW50byByZWFsIG1vZGUgKGludGVycnVwdHMgYXJlIGRpc2FibGVkIGluIHByb3RlY3RlZAptb2RlKS4gU28gaW5zZXJ0ZWQgcHJvdF90b19yZWFsIGFuZCByZWFsX3RvX3Byb3QgcGFpciBpbnNpZGUKY3VycnRpY2tzKCkuCgpSZWxlYXNlZCBhcyBFdGhlcmJvb3QgNC42LjEwCgorIE1hcnR5IENvbm5vciBhbmQgR2FyeSBCeWVycyBvZiB0aGluZ3Vpbi5vcmcgY29udHJpYnV0ZWQgYSBMSUxPIHByZWZpeApmaWxlIHRoYXQgbWFrZXMgdGhlIEV0aGVyYm9vdCBpbWFnZSBsb29rIGxpa2UgYSBMaW51eCBrZXJuZWwgdG8gTElMTyBhbmQKdGh1cyBib290YWJsZSBmcm9tIHRoZSBMSUxPIHByb21wdC4KCisgSWZkZWZlZCBvdXQgY29kZSBpbiBta25iaSB0aGF0IGZhbGxzIGJhY2sgdG8gdGhlIHRmdHAgZGlyZWN0b3J5IGZvcgpyb290LXBhdGguIFRoZSByZXN1bHQgaXMgdGhhdCB0aGUgb3B0aW9ucyBwYXNzZWQgdG8gdGhlIGtlcm5lbCBzcGVjaWZpZXMKdGhlIHRmdHAgZGlyZWN0b3J5IGFzIG5mc3Jvb3QgZXZlbiBpZiB0aGVyZSBpcyBubyByb290LXBhdGggb3B0aW9uIGluCnRoZSBESENQIG9yIEJPT1Qgc2VydmVyIGNvbmZpZ3VyYXRpb24uIFRoaXMgaW50ZXJhY3RzIGJhZGx5IHdpdGggcmVjZW50CkxpbnV4IGtlcm5lbHMgd2hpY2ggYWN0dWFsbHkgcGF5IGF0dGVudGlvbiB0byB0aGUgcm9vdC1wYXRoIGhhbmRlZCBkb3duCmFuZCB1c2UgdGhhdCBhcyBuZnNyb290LiBQZW9wbGUgd2hvIHdlcmUgZXhwZWN0aW5nIHRoZSBkaXNrbGVzcyBrZXJuZWwKdG8gdXNlIHRoZSBkZWZhdWx0IC90ZnRwYm9vdC88bmFtZSBvZiBjbGllbnQ+IGFzIG5mc3Jvb3Qgd291bGQgaGF2ZSBiZWVuCnN1cnByaXNlZCB0byBmaW5kIGl0IHRyeWluZyB0byB1c2UgdGhlIHRmdHAgZGlyZWN0b3J5ICh3aGljaCBvZnRlbgpoYXBwZW5zIHRvIGJlIC90ZnRwYm9vdCwgYWx0aG91Z2ggSSByZWNvbW1lbmQgdGhhdCBpdCBiZSBkaWZmZXJlbnQsIHRvCmltcHJvdmUgc2VjdXJpdHkpLgoKKyBFcmljIEJpZWRlcm1hbiBmb3VuZCBhbiBvZmYtYnktb25lIGJ1ZyBpbiB0aGUgRUxGIGxvYWRlci4KCisgQ2hyaXN0b3BoIFBsYXR0bmVyIHBvaW50ZWQgb3V0IHRoYXQgdGhlIGNvbW1lbnRzIGZvciBDT01DT05TT0xFIGluCkNvbmZpZyBhcmUgd3JvbmcsIHRoZSBzZXJpYWwgcG9ydCBpcyBhdCAzRjgsIG5vdCAzNzguCgorIEEgY291cGxlIG9mIHVwZGF0ZXMgdG8gd29sLmMgYW5kIHdha2UucGwgYnkgR/xudGVyIEtuYXVmZi4KCisgVGhlIERhdmljb20gOTAwOSBhbmQgOTEwMiBkcml2ZXIgd2FzIGNvbnRyaWJ1dGVkIGJ5IFN0ZW4gV2FuZyBvZgpEYXZpY29tLiBJdCB3aWxsIGJlIG1lcmdlZCBpbnRvIHR1bGlwLmMgbGF0ZXIuCgorIEltcGxlbWVudCBlZXBybzEwMF9kaXNhYmxlLiBUaGVyZSBoYXZlIGJlZW4gcmVwb3J0cyBvZiBtZW1vcnkKY29ycnVwdGlvbiBhZnRlciBFdGhlcmJvb3QgaGFzIGhhbmRlZCBvdmVyIHRvIHRoZSBib290ZWQgaW1hZ2UgZHVlIHRvCnRoZSBsaXZlIGNvbnRyb2xsZXIuCgorIE1hdHQgSG9ydG1hbiByZXBvcnRlZCBhIG5ldyBJbnRlbCBOSUMsIDgyNTU5RVIsIHdpdGggZGlmZmVyZW50IElEcy4KQWRkZWQgdG8gZmlsZSBOSUMuCgorIFJhbmphbiBQYXJ0aGFzYXJhdGh5IHJlcG9ydGVkIGFub3RoZXIgVHVsaXAgY2xvbmUgZnJvbSBTVCBNaWNybyB3aXRoCmRpZmZlcmVudCBJRHMuICBBZGRlZCB0byBmaWxlIE5JQy4KClJlbGVhc2VkIGFzIEV0aGVyYm9vdCA0LjYuMTEKCisgU3RlZmFuIExlc2ljbmlrIHNlbnQgaW4gYSByZXBvcnQgZnJvbSBJbnRlbCB3aGljaCBleHBsYWlucyB3aGF0IGlzCnByb2JhYmx5IHdyb25nIHdpdGggdGhlIFBuUCBoZWFkZXIuIEJFViBzaG91bGQgcG9pbnQgdG8gdGhlIG1haW5saW5lCnZlY3Rvciwgbm90IHRvIHRoZSBwYXJ0IHRoYXQgaW5zdGFsbHMgdGhlIElOVDE5SCB2ZWN0b3IuCgorIEhvcGVmdWxseSBmaW5hbGx5IGZpeGVkIERIQ1Agb3B0aW9uIGxpbWl0IHByb2JsZW0uIEl0IHdhcyByZXF1ZXN0aW5nCmxhcmdlIHBhY2tldHMgYnV0IG5vdCBwYXJzaW5nIHRoZW0gZnVsbHkgZHVlIHRvIHRoZSBsZW5ndGggbGltaXQgcGFzc2VkCmludG8gZGVjb2RlX3JmYzE1MzMoKS4gVGhhbmtzIHRvIHNocmVkZGEgZm9yIHRlc3RpbmcgdGhpcy4KCisgQWRkZWQgdGhlICMgbW9kaWZpZXIgdG8gcHJpbnRmLCBpdCBwcmVmaXhlcyAweCB0byAleCBhbmQgJVggbWFraW5nCnByaW50ZiBmb3JtYXRzIHNob3J0ZXIgdGhyb3VnaG91dC4gMHglW3hYXSBjaGFuZ2VkIHRvICUjW3hYXSBpbiBsb3RzIG9mCmZpbGVzLiAgTm93IGlmIG9ubHkgSSBjb3VsZCBtYWtlIGIseCxYIHRoZSBzdGFuZGFyZCBoaHgsaHgseCBhbmQgZ2V0IHJpZApvZiBJLgoKKyBBbmRyZWFzIE5ldWhhdXMgcHJvdmlkZWQgcGF0Y2hlcyBmb3IgbXVsdGlwbGUgcnggYnVmZmVycyBmb3IgbGFuY2UuYwp3aGljaCBtYWRlIGl0IHdvcmsgYWdhaW4gd2l0aCBWTXdhcmUuCgorIFBlcmwgc2NyaXB0IHRvIGNvbnZlcnQgZmxvcHB5ZncgZmxvcHBpZXMgdG8gbmV0Ym9vdGFibGUgaW1hZ2VzLgoKKyBNYXJ0eSBDb25ub3IgbWFkZSBzb21lIHNtYWxsIGNoYW5nZXMgdG8gbGlsb3ByZWZpeCBhbmQgTWFrZWZpbGUgdG8KbWFrZSB0aGUgTElMTyBpbWFnZXMgU1lTTElOVVggYm9vdGFibGUgYWxzby4KCisgTWFrZSB0aGUgZGVmYXVsdCByZXR1cm4gdmFsdWUgZm9yIF9wb2xsIGluIHNrZWwuYyAwIHNvIHRoYXQgd2hlbgpkcml2ZXIgd3JpdGVycyBpbXBsZW1lbnQgX3RyYW5zbWl0IGZpcnN0LCBpdCB3aWxsIG5vdCBoYW5nIG9uIGdhcmJhZ2UKcmV0dXJuIHZhbHVlcyBmcm9tIF9wb2xsIHdoZW4gaXQncyBjYWxsZWQgdG8gZmx1c2ggdGhlIGlucHV0IHF1ZXVlCmJlZm9yZSB0aGUgZmlyc3QgdHJhbnNtaXQuCgorIEVFUFJPLzEwIGRyaXZlciBub3cgd29ya3MuILVzIHRpbWVyIHJvdXRpbmVzIGNhbWUgaW4gdXNlZnVsLgoKKyBBbmRlcnMgTGFyc2VuIHNlbnQgaW4gYSBwYXRjaCB0byAzYzkweC50eHQgd2hpY2ggbWFrZXMgaXQgY2xlYXJlci4KCisgQWRkZWQgbW9yZSBzdHVmZiB0byB0aGUgZG9jdW1lbnRhdGlvbi4KCisgRml4ZWQgYnVnIGluIG1rbmJpIHRoYXQgYWx3YXlzIGRpZCB0aGUgZXF1aXZhbGVudCBvZiAtLWlwYWRkcnM9cm9tCm5vIG1hdHRlciB3aGF0LiBBbHNvIHJlbW92ZWQgdW5kZWYgZnJvbSBteSB2YXJpYWJsZSBsaXN0IGluIFRydW5jRkQucG0Kc28gdGhhdCBpdCB3b24ndCBoYXZlIHByb2JsZW1zIHdpdGggUGVybCBpbnRlcnByZXRlcnMuCgpSZWxlYXNlZCBhcyBFdGhlcmJvb3QgNC42LjEyCgorIEppbSBNY1F1aWxsYW4gc2VudCBpbiBhIHBhdGNoIGZvciBmaXJzdC1saW51eC5TIHdoZXJlIGl0IHdhcyBhc3N1bWluZwp0aGUgYXJndW1lbnQgaW4gdGFnIDEyOSAoYWRkaXRpb25hbCBwYXJhbWV0ZXJzKSBpcyBhIG51bGwgdGVybWluYXRlZApzdHJpbmcsIHdoZW4gaXQncyBhIGxlbmd0aCBjb3VudGVkIHN0cmluZy4gQSBuZXcgcm91dGluZSwgYWRka2FyZyB3YXMKY3JlYXRlZCB0byBoYW5kbGUgdGhpcy4KCisgZWVwcm8xMDAgc2hvdWxkIGhhbmRsZSBuZXdlciBOSUNzIHdpdGggMjU2IGJ5dGUgRUVQUk9NcyBub3cuIFRoaXMKaW5jbHVkZXMgdGhlIG9uYm9hcmQgTklDcyBvbiBzb21lIG1vdGhlcmJvYXJkcywgc2VlIGZpbGUgTklDLiBUaGFua3MgdG8KU3RlcGhhbiBMYXVmZmVyIGZvciBoZWxwaW5nIHdpdGggdGhlIGZpeGVzLiBXQVJOSU5HOiBUaGlzIGNvZGUgbWF5IGhhdmUKYSBidWcgdGhhdCBjYXVzZXMgdGhlIG9uYm9hcmQgRUVQUk9NIHRvIGJlIGNvcnJ1cHRlZC4gV2UgYmVsaWV2ZSB3ZSBoYXZlCmZvdW5kIGFuZCByZW1vdmVkIHRoZSBidWcgYnV0IHBsZWFzZSBwcm9jZWVkIHdpdGggY2FyZS4KCisgREhDUERJU0NPVkVSIHdhcyBzZW5kaW5nIG91dCBvbmUgYnl0ZSB0b28gbWFueSBmb3IgUEFSQU1fTElTVC4KCisgSW4gREhDUERJU0NPVkVSIHNlbmQgIkV0aGVyYm9vdCIgaW4gVkVORE9SX0NMQVNTX0lEIG9wdGlvbiAoNjApLiAgV2lsbAphZGQgY29kZSBsYXRlciB0byBjaGVjayBmb3IgIkV0aGVyYm9vdCIgaW4gdmVuZG9yIGVuY2Fwc3VsYXRlZCBvcHRpb25zLgoKKyBVc2VkILVzIHRpbWVyIHJvdXRpbmVzIGluIDNjNTA5IGZvciBtb3JlIGFjY3VyYXRlIHRpbWluZyBhbmQgaGVuY2UKYmV0dGVyIGhhcmR3YXJlIGRldGVjdGlvbi4gVXNlIENPTU1BTkRfSU5fUFJPR1JFU1MgYml0IHRvIGRldGVjdAp0cmFuc21pdCBjb21wbGV0ZSBpbnN0ZWFkIG9mIHdhaXRpbmcgZm9yIGEgZml4ZWQgYW1vdW50IG9mIHRpbWUuIEdldCByaWQKb2YgZXRoX3ZlbmRvciBhbmQgYXNzb2NpYXRlZCB0ZXN0cywgaXQgZG9lc24ndCBzZXJ2ZSBhbnkgdXNlZnVsIHB1cnBvc2UKc2luY2UgdGhlIGRyaXZlciB3YXMgbW9kdWxhcmlzZWQgbG9uZyBhZ28gYW5kIHRoZSAzYzUwOSBkZXRlY3Rpb24gc3RhdHVzCmlzIHN0b3JlZCBvdXRzaWRlIG9mIHRoZSBkcml2ZXIgbm93LiBHb3QgcmlkIG9mIHNvbWUgdW51c2VkIGdsb2JhbApzdGF0aWNzIGluIDNjNTA5LmMsIGxlZnRvdmVycyB3aGVuIHRoZSBkcml2ZXJzIHdlcmUgbW9ub2xpdGhpYy4gV2FpdCAyCnNlY29uZHMgYWZ0ZXIgZW5hYmxpbmcgVFAgaW50ZXJmYWNlIHRvIGdpdmUgaXQgdGltZSB0byBjb21lIHVwLiBUaGlzCmFsbG93cyB1cyB0byBnZXQgcmlkIG9mIFQ1MDlIQUNLIGluIG1haW4uYy4KCisgR2V0IHJpZCBvZiBldGhfdmVuZG9yIGFuZCBhc3NvY2lhdGVkIHRlc3RzIGluIGNzODl4MC5jLCBzYW1lIHJlYXNvbnMKYXMgZm9yIDNjNTA5LmMuCgorIE1vdmVkIHRoZSByZXN0IG9mIHRoZSBWRU5ET1JfIGFuZCBGTEFHXyBkZWZpbmVzIGludG8gbnM4MzkwLmgsIGFzCm5zODM5MC5jIGlzIHRoZSBvbmx5IGZpbGUgdGhhdCB1c2VzIHRoZW0gbm93LgoKKyBVc2UgbG93ZXIgMzIgYml0cyBvZiBub2RlIGFkZHJlc3MgKyBjdXJyZW50IHRpbWUgZm9yIHhpZCAobmV0d29yayBieXRlCm9yZGVyKS4gTW9yZSBsaWtlbHkgdG8gYmUgZGlzdGluY3QgZnJvbSBvdGhlciBjbGllbnRzIHRoYW4ganVzdCB0aGUKY3VycmVudCB0aW1lLCB3aGljaCBpcyBzaW1pbGFyIGZvciBhbGwgY2xpZW50cyBib290ZWQgYXQgYWJvdXQgdGhlIHNhbWUKdGltZS4KCisgU3VwcG9ydCBmb3IgMTYtYml0IGNvZGUgaGFzIGJlZW4gcmVtb3ZlZC4gIFhUcyBhbmQgQVRzIGFyZSBwcmV0dHkgbXVjaApkZWFkIG5vdyBhbmQgaW4gZmFjdCBtYW55IEV0aGVyYm9vdC8xNiBkcml2ZXJzIGhhdmUgYmVlbiBicm9rZW4gZm9yIGEKd2hpbGUgYnV0IG5vYm9keSBub3RpY2VkLiBUaGlzIHNob3VsZCBtYWtlIHNvbWUgb2YgdGhlIGNvZGUgZWFzaWVyIHRvCm1haW50YWluLiAgSWYgeW91IHJlYWxseSB3YW50ZWQgMTYgYml0IHN1cHBvcnQsIHVzZSBhbiBvbGRlciB2ZXJzaW9uIG9mCkV0aGVyYm9vdCwgbWF5YmUgNC40IG9yIHNvbWV0aGluZyBsaWtlIHRoYXQsIG5vdCBzdXJlIHdoZW4gdGhpbmdzCnN0YXJ0ZWQgYnJlYWtpbmcgZm9yIDE2IGJpdCBtb2RlLgoKKyBTaG91bGQgbm90IHN0b3JlIElQIGFuZCBVRFAgaGVhZGVycyBhdCBCT09UUF9EQVRBX0FERFJFU1MuIFJlZGVmaW5lZApib290cF90IHdpdGhvdXQgSVAgYW5kIFVEUCBoZWFkZXJzLiBOb3cgcmVxdWVzdGVkIHNpemUgb2YgYm9vdHAgcGFja2V0Cm1hdGNoZXMgc3RvcmFnZSBhdmFpbGFibGUuIERvIG5vdCBhZGQgc2l6ZW9mKGlwaGRyKSArIHNpemVvZih1ZHBoZHIpIHRvCmJvb3RwIHBvaW50ZXIgaW4gc3RhcnQzMi5TOnhzdGFydCBub3cuIHN0YXJ0MTYuUzp4c3RhcnQgd2FzIGJyb2tlbgpiZWNhdXNlIGl0IGRpZCBub3QgZG8gdGhpcyBhZGRpdGlvbiBidXQgbm9ib2R5IG5vdGljZWQuCgorIFJlbW92ZWQgYXJyYXkga2VybmVsX2J1Ziwgc2F2aW5nIDEyOCBieXRlcyBhbmQgcmVwbGFjZWQgd2l0aApLRVJORUxfQlVGLCBhIHBvaW50ZXIgaW50byB0aGUgYnBfZmlsZSBvZiB0aGUgYm9vdHBfcmVwbHkgc3RydWN0dXJlIGF0CkJPT1RQX0RBVEFfQUREUi4gTm90ZTogdGhpcyBkZXBlbmRzIG9uIHRoZSBzZXJ2ZXIgbm90IHNlbmRpbmcgT3B0aW9uCk92ZXJsb2FkIHdoaWNoIHdvdWxkIHVzZSB0aGUgc25hbWUgYW5kIGZpbGUgZmllbGRzIGZvciBvcHRpb25zLCBidXQgd2UKZG9uJ3QgcmVxdWVzdCB0aGlzIG9wdGlvbiBzbyBpdCBzaG91bGRuJ3QuICBSZW1vdmVkIGNoYXIgKmtlcm5lbCwKaW5zdGVhZCBjaGVjayBLRVJORUxfQlVGWzBdIGp1c3QgYmVmb3JlIGJvb3RpbmcgYW5kIGlmIG51bGwsIHVzZQpmYWxsYmFjayBmaWxlbmFtZS4gIChUaGlzIGlzIG5lZWRlZCBmb3IgZnV0dXJlIGV4dGVuc2lvbnMgdG8gYm9vdGluZwpwcm90b2NvbC4pCgorIERlZmluZSBhIHNob3J0ZXIgdGZ0cHJlcV90IHR5cGUgZm9yIG1ha2luZyByZXF1ZXN0cyBpbnN0ZWFkIG9mIHVzaW5nIGEKZnVsbCBzaXplZCB0ZnRwX3QgcGFja2V0IHRvIHJlZHVjZSBzdGFjayB1c2FnZS4KCisgRGVmaW5lZCBtYWNyb3MgZm9yIGh0b25sL2h0b25zL250b2hsL250b2hzIGZvciBjYXNlcyB3aGVyZSB0aGUgb3BlcmFuZAppcyBhIGNvbnN0YW50LCBzYXZpbmcgYSBmdW5jdGlvbiBjYWxsLgoKKyBTdGFydGVkIG9uIGZpcnN0MzIuYywgYSBwcm90ZWN0ZWQgbW9kZSAzMi1iaXQgdmVyc2lvbiBvZgpmaXJzdC1saW51eC5TLCB3aGljaCBzaG91bGQgYmUgZmFyIGVhc2llciB0byByZWFkIGFuZCBtYWludGFpbi4gV2lsbApib290IGJhc2ljIExpbnV4IGtlcm5lbHMgY29ycmVjdGx5IGJ1dCBkb2Vzbid0IGhhbmRsZSByYW1kaXNrIG9yCmtlcm5lbCBhcmd1bWVudHMgeWV0LgoKKyBVcGRhdGVkIG5mcy1zd2FwIGRvY3VtZW50YXRpb24gaW4gY29udHJpYi9uZnMtc3dhcCB0byBwb2ludCB0bwpDbGF1cy1KdXN0dXMgSGVpbmUncyBuZXcgd2ViIHBhZ2UuCgpSZWxlYXNlZCBhcyBFdGhlcmJvb3QgNC43LjEzIChkZXZlbG9wbWVudCkKCisgQWRkZWQgbW9yZSBJRHMgZm9yIGVlcHJvMTAwIHZhcmlhbnRzIHRha2VuIGZyb20gdGhlIExpbnV4IDIuMi4xOApzb3VyY2UuIFNob3VsZCBoYW5kbGUgdGhlIEVFUFJPTSBwcm9wZXJseSBub3csIGEgZmV3IGRlZmluZXMgd2VyZSB3cm9uZwppbiA0LjcuMTMuICBMb29wIGNvdW50ZXIgdGltZW91dHMgaW4gZWVwcm8xMDAuYyByZXBsYWNlZCB3aXRoIGhhcmR3YXJlCnRpbWVvdXRzLiAgRG9uJ3QgbG9vcCB3YWl0aW5nIGZvciBwYWNrZXQgaW4gX3BvbGwsIHJldHVybiAwIGltbWVkaWF0ZWx5LgoKKyBmaXJzdDMyLmxpbnV4IHdvcmtzLiBEb2VzIGtlcm5lbCBhcmd1bWVudHMgYW5kIHJhbWRpc2sgYnV0IGRvZXNuJ3QgZG8KYXBwZW5kZWQgcGFyYW1ldGVycyBmcm9tIG1lbnUgc2VsZWN0aW9ucywgd2hpY2ggc2hvdWxkIGJlIHJlcGxhY2VkIGJ5IGEKbW9yZSBlbGVnYW50IG1lbnUgc2NoZW1lIGFueXdheS4gIE5lZWRlZCBnYXRlQTIwIHJvdXRpbmVzIGluCm1rbmJpLTEuMS9maXJzdDMyLmMgb3RoZXJ3aXNlIGNhbm5vdCBhY2Nlc3MgZXh0ZW5kZWQgbWVtb3J5LgpmaXJzdDMyLmxpbnV4IHNob3VsZCBiZSBhYmxlIHRvIGhhbmRsZSBtZW1vcnkgPiA2NCBNQiwgd2hpY2ggdGhlIG9sZCBvbmUKY291bGRuJ3QuICBTdXBwb3J0IGZvciBmaXJzdDMycG0gY2FsbCBwcm90b2NvbCBhZGRlZC4KCisgM2M1OTUuYyBjaGFuZ2VkIHRvIHVzZSBoYXJkd2FyZSB0aW1lciBmb3IgZGVsYXlzLiBUcmFuc21pdCByb3V0aW5lCndhaXRzIGZvciBhIGZpeGVkIHBlcmlvZCBhZnRlciB0cmFuc21pdHRpbmcuIENoYW5nZWQgdG8gY2hlY2sKU19DT01NQU5EX0lOX1BST0dSRVNTIGJpdC4gSXQgYWxzbyBjb250YWlucyBzb21lIG9mIHRoZSBzYW1lIHVudXNlZAp2YXJpYWJsZXMgYXMgM2M1MDkuYyBhbmQgbWVudGlvbnMgM2M1MDkgaW4gc29tZSBjb21tZW50cy4gQ2xlYW5lZCB1cC4KCisgSG1tLCBob3cgY29tZSB0aGlzIHdhc24ndCBmaXhlZCBsb25nIGFnbz8gU2hvdWxkIGRpc2NhcmQgQk9PVFAvREhDUApyZXBsaWVzIHRoYXQgYXJlIG5vdCB0byBicm9hZGNhc3Qgb3Igb3duIE1BQyBhZGRyZXNzLiBJIGd1ZXNzIHhpZCBjYXVnaHQKcHJhY3RpY2FsbHkgYWxsIG9mIHRoZSBub24tbWF0Y2hpbmcgcGFja2V0cy4gKExhdGVyOiBBY3R1YWxseSB0aGUgTklDCnNob3VsZCBmaWx0ZXIgb3V0IHBhY2tldHMgd2UgZG9uJ3Qgd2FudCwgYnV0IGxlYXZlIHRlc3QgaW4gYW55d2F5LCBpdCdzCnRoZSBsYXN0IHRlc3QuKQoKKyBSZW1vdmVkIGxhc3QgdmVzdGlnZXMgb2YgRVRIRVJCT09UMzIgYW5kIEVUSEVSQk9PVDE2LgoKKyBFVEhFUl9BRERSX1NJWkUgPT4gRVRIX0FMRU4sIEVUSEVSX0hEUl9TSVpFID0+IEVUSF9ITEVOLApFVEhFUl9NSU5fUEFDS0VUID0+IEVUSF9aTEVOLCBFVEhFUl9NQVhfUEFDS0VUID0+IEVUSF9GUkFNRV9MRU4uICBNb3JlCkxpbnV4eSBhbmQgdGhlcmVmb3JlIG1vcmUgZmFtaWxpYXIgdG8gcHJvZ3JhbW1lcnMuCgorIENsZWFyZWQgdXAgY29uZnVzaW9uIHdpdGggNjAvNjQgYW5kIDE1MTQvMTUxOCBmb3IgbWluaW11bSBhbmQgbWF4aW11bQpmcmFtZSBzaXplcy4gUHJhY3RpY2FsbHkgYWx3YXlzIHRoZSByaWdodCBudW1iZXJzIGFyZSA2MC8xNTE0LCBleGNlcHQKdGhhdCBzb21lIGNoaXBzIGNvdW50IHRoZSBGQ1MgaW4gdGhlIHJlY2VpdmUgbGVuZ3RoLCB0aGVuIHdlIGhhdmUgdG8gdXNlCjY0LzE1MTguCgorIE1ha2UgX19zd2FwMzIgYW5kIF9fc3dhcDE2IGlubGluZSByb3V0aW5lcyBhdmFpbGFibGUgZ2xvYmFsbHkgYXMKc3dhcDMyIGFuZCBzd2FwMTYuIGVlcHJvLmMgY2FuIHVzZSBzd2FwMTYgaW5zdGVhZCBvZiBtYWtpbmcgdXAgb25lLgoKKyBNYWtlIGF1aSBmaWVsZCBpbiBuaWMuaCBhbiBpbnQgc2luY2UgaXQgd2lsbCBiZSBwYWRkZWQgdG8gYSBsb25nd29yZApib3VuZGFyeSBhbnl3YXkgYW5kIGNhbGwgaXQgZmxhZ3Mgc28gdGhhdCBvdGhlciBkcml2ZXJzIGNhbiB1c2UgaXQgZm9yCnRoZWlyIG93biBwdXJwb3Nlcy4gQ3VycmVudGx5IG9ubHkgM2M1MDMgdXNlcyBpdCB0byBpbmRpY2F0ZSBBVUkgeGN2ci4KCisgTWFrZSBzcHJpbnRmIHJldHVybiBudW1iZXIgb2YgY2hhcmFjdGVycyB3cml0dGVuIGluc3RlYWQgb2YgYSBwb2ludGVyCnRvIHRoZSBsYXN0IGNoYXIgd3JpdHRlbiB0byBiZSBtb3JlIGNvbnNpc3RlbnQgd2l0aCBzdGFuZGFyZCBDLgoKUmVsZWFzZWQgYXMgRXRoZXJib290IDQuNy4xNCAoZGV2ZWxvcG1lbnQpCgorIFRoYW5rcyB0byBNYXJrIFZhbmRlV2V0dGVyaW5nIGZvciB0aGUgc3RhcnQgb2YgSG9tZVBOQSAobmV0d29ya2luZwpvdmVyIHBob25lIGxpbmVzKSBzdXBwb3J0IGZvciB0aGUgQU1EIDc5Qzk3OC4KCisgQnVnIGZpeGVkIGluIGZpcnN0MzIuYyBoYW5kbGluZyBvZiAoaXB8bmZzcm9vdCk9WCB3aGVyZSBYIGlzIG5vdCByb20uCgorIGZpcnN0MzJwbS5saW51eCB3b3Jrcy4gTm8gbmVlZCB0byBnbyBpbnRvIHJlYWwgbW9kZSB0byBjYWxsIGZpcnN0MzJwbQphbmQgdGhlbiBpdCBnb2VzIGJhY2sgdG8gcHJvdGVjdGVkIG1vZGUuIFBhdmVzIHRoZSB3YXkgZm9yIGV4dGVuc2lvbgpyb3V0aW5lcyB0byBFdGhlcmJvb3QuICBJbXBsZW1lbnQgcHJvZ3JhbSByZXR1cm5zIHRvIGxvYWRlciBmbGFnIGluCmhlYWRlciBmaWVsZC4gIEFkZGVkIG9wdGlvbiB0byBta25iaSB0byBzcGVjaWZ5IHRoaXMuCgorIGZpcnN0MzIqLmxpbnV4OiBDaGVjayB0YWcgMTI4IHByZXNlbnQgYW5kIGNvcnJlY3QgYmVmb3JlIGFwcGVuZGluZyB0YWcKMTI5LiBBbHNvIHRhZyAxMjkgc2hvdWxkIGJlIGFwcGVuZGVkIHRvIHBhcmFtZXRlcnMgYmVmb3JlIHN1YnN0aXR1dGlvbnMuCgorIE1lcmdlZCBjbGVhbnVwX25ldCBpbnRvIGNsZWFudXAgc2luY2UgdGhleSBhcmUgYWx3YXlzIGNhbGxlZCB0b2dldGhlci4KCisgRmxvcHB5IGJvb3RpbmcgZG9lc24ndCBuZWVkIHRvIGJlIHBhc3NlZCBCT09UUF9EQVRBX0FERFIuCgorIENsZWFuIHVwIHZhcmlhYmxlcyBhc3NvY2lhdGVkIHdpdGggdGFnZ2VkIGltYWdlIGxvYWRpbmcgaW4gb3Nsb2FkZXIuYy4KClJlbGVhc2VkIGFzIEV0aGVyYm9vdCA0LjcuMTUgKGRldmVsb3BtZW50KQoKKyBEdXBsaWNhdGVkIDNjOTAwIFBDSSBJRHMgdW5kZXIgM2M1OTUgYXMgc29tZSBOSUNzIGFwcGFyZW50bHkgZGV0ZWN0CmFuZCB3b3JrIHdpdGggdGhlIDNjNTk1IGRyaXZlciBidXQgbm90IHRoZSAzYzkweCBkcml2ZXIsIGFjY29yZGluZyB0byBhCnJlcG9ydCBmcm9tIERpcmsgUGZhdS4gKFRoZSAzYzkweCBzZXJpZXMgaGFzIHR3byBtb2RlcyBvZiBvcGVyYXRpb24sCnByb2dyYW1tZWQgSS9PIG1vZGUgZGVzY2VuZGVkIGZyb20gdGhlIDNjNTA5LCBnb29kIG9ubHkgZm9yIDEwIE1iCm9wZXJhdGlvbiwgYW5kIGJ1cyBtYXN0ZXJpbmcgbW9kZSwgZXNzZW50aWFsIGZvciAxMDAgTWIgb3BlcmF0aW9uLiBGb3IKbmV0d29yayBib290aW5nLCBlaXRoZXIgbW9kZSBpcyBhY2NlcHRhYmxlLikKCisgUmVtb3ZlZCBhdXRvIGZyb20ga2VybmVsIHBhcmFtZXRlcnM7IGl0J3MgdGhlIGRlZmF1bHQgYWxyZWFkeS4KCisgVXNlIGhhcmR3YXJlIHRpbWVyIGluc3RlYWQgb2YgbG9vcCBjb3VudGVyIGZvciB0cmFuc21pdCB0aW1lb3V0IGluCjNjOTB4LmMuCgorIERlZmluZSBhIGptcGJ1ZiB0eXBlIGZvciBzZXRqbXAgYW5kIGxvbmdqbXAuIFRyaW0gc2l6ZSB0byA3IGxvbmdzLAp0aGF0J3MgYWxsIHRoYXQncyBuZWVkZWQuIFN0YW5kYXJkaXNlIHRoZSByZXR1cm4gdmFsdWVzIGZyb20gbG9uZ2ptcDoKLTI6IGxvYWRlciBlcnJvciwgLTE6IHRpbWVvdXQgb3IgRVNDLCAwLi4uOiB2YXJpb3VzIG1lYW5pbmdzIHRvCkV0aGVyYm9vdCBtYWluIGxvYWRlci4KCisgQW5zaWZ5IGZ1bmN0aW9uIGhlYWRlcnMgaW4gYm9vdG1lbnUuYy4KCisgTWFrZSBfaW50MTAgcmV0dXJuIGF4IHwgKGJ4IDw8IDE2KSBhcyByZXN1bHQgc28gdGhhdCB0aGVzZSBjYW4gYmUKYWNjZXNzZWQgbW9yZSBlZmZpY2llbnRseSBpbiB0aGUgZm9sbG93aW5nIHN0YXRlbWVudHMuCgorIE1ha2UgaGFuZGxlYW5zaSB0YWtlIHVuc2lnbmVkIGludCBpbnN0ZWFkIG9mIHVuc2lnbmVkIGNoYXIgYXMKYXJndW1lbnQsIG90aGVyd2lzZSBleHRyYSBjb2RlIHdpbGwgYmUgZ2VuZXJhdGVkIHRvIGhhbmRsZSB0aGlzCmFjY29yZGluZyB0byBBTlNJIHJ1bGVzLiAgKFF1aXRlIHNpZ25pZmljYW50IHNhdmluZyBvZiA1NSBieXRlcy4pIFJlbmFtZQppdCBhbnNpX3B1dGMgZm9yIGNsYXJpdHkuCgorIFByZWZpeCBnZXRjLCBwdXRjIGFuZCBpc2NoYXIgd2l0aCBjb25zb2xlXyB0byBtYWtlIHRoaW5ncyBjbGVhcmVyIGFuZAp0byBhdm9pZCBjb25mdXNpb24gd2l0aCB0aGUgVW5peCBnZXRjLCBwdXRjLgoKKyBBZGQgbWVudSBhcyBhIHRhcmdldCB0byBta25iaS4gU3RhcnRlZCBzb3VyY2UgY29kZSBmb3IgbWVudSBleHRlbnNpb24uClN1Y2Nlc3NmdWxseSB0cmFuc2ZlcnJlZCBjb250cm9sIHRvIG1lbnUgYXQgMHgxMDAwMCBhbmQgYmFjay4gQU5TSQpjb2xvdXIgY29udHJvbHMgd29yaywgYXQgbGVhc3QuIFJldHVybiBlbmQgbmVlZHMgbW9yZSB3b3JrLgoKKyBTdGFydGVkIG9uIEVMRiBzdXBwb3J0IGluIG1rbmJpLgoKUmVsZWFzZWQgYXMgRXRoZXJib290IDQuNy4xNiAoZGV2ZWxvcG1lbnQpCgorIEFkZGVkIGF0ZnRwIDAuMiAoZnRwOi8vZnRwLm1hbWFsaW51eC5jb20vcHViL2F0ZnRwLykgdG8gY29udHJpYi8uClN1cHBvc2VkbHkgY29udGFpbnMgYSB0ZnRwZCB0aGF0IHJ1bnMgbXVsdGl0aHJlYWRlZCwgd2hpY2ggbWF5IGhlbHAKcGVvcGxlIGhhdmluZyBwcm9ibGVtcyB3aXRoICppbmV0ZCBzaHV0dGluZyBkb3duIHRmdHBkcyB0aGF0IHNwYXduIHRvbwpmYXN0LgoKKyBBZGRlZCBhIGZldyBtb3JlIFR1bGlwIGVudHJpZXMgdG8gY29uZmlnLmMgYW5kIE5JQywgbm90IGFsbCBvZiB0aGVtCmhhdmUgYmVlbiBjb25maXJtZWQgd29ya2luZy4KCisgR290IEVMRiBmb3JtYXQgY3JlYXRpb24gaW4gbWtlbGYtbGludXggd29ya2luZyBub3cuIEF0IGxlYXN0IG9uZSBlbXB0eQpzZWN0aW9uIGhlYWRlciBpcyByZXF1aXJlZCB0byBtYWtlIGEgdmFsaWQgRUxGIGZpbGUuCgorIEFkZGVkIGNvZGUgdG8gc3VwcG9ydCBub24tTVVMVElCT09UIEVMRiB3aGVuIElNQUdFX0VMRiBpcyBzZWxlY3RlZCBidXQKSU1BR0VfTVVMVElCT09UIGlzIG5vdC4gIEJvb3RpbmcgZnJvbSBpbWFnZXMgY3JlYXRlZCBieSBta2VsZi1saW51eApub3cgd29ya3MhCgorIFRBR0dFRF9JTUFHRSBpcyBub3cgbm90IGFsd2F5cyBzZWxlY3RlZC4gSXQncyBqdXN0IHRoZSBmYWxsYmFjayBpZgpub25lIG9mIFRBR0dFRF9JTUFHRSwgQU9VVF9JTUFHRSBvciBFTEZfSU1BR0UgaXMgc2VsZWN0ZWQuIFRoZXJlZm9yZSB5b3UKbXVzdCBleHBsaWNpdGx5IHNlbGVjdCBUQUdHRURfSU1BR0UgaWYgeW91IHdhbnQgaXQsIGFuZCB5b3UgaGF2ZQpzZWxlY3RlZCBBT1VUX0lNQUdFIG9yIEVMRl9JTUFHRS4gIFN0YXJ0dXAgYmFubmVyIGxpbmUgZGlzcGxheXMgYWxsCmltYWdlIGZvcm1hdHMgYWNjZXB0ZWQuCgorIGV4aXQoKSBpbiBta25iaS9zdGFydDMyLlMgc2hvdWxkIGNvcHkgYXJndW1lbnQgdG8gJWVheCBmaXJzdC4KCisgSW1hZ2VzIHdpdGggMHhBQTU1IGluIGJ5dGVzIDUxMC01MTEgYXJlIG5vIGxvbmdlciBhY2NlcHRlZCwgd2hpY2gKc2hvdWxkIHJlamVjdCBpbnZhbGlkIGZvcm1hdHMgbm93LCBlLmcuIExpbnV4IGtlcm5lbCBpbWFnZXMsIHdoaWNoIGhhdmUKYSBib290IHNlY3RvciBpbiB0aGUgZmlyc3QgYmxvY2suIFN0cmljdGx5IHRoaXMgZG9lcyBub3QgY29uZm9ybSB0byB0aGUKb3JpZ2luYWwgbmV0Ym9vdCBzcGVjIGJ5IEphbWllIEhvbmFuLCB3aGljaCBzcGVjaWZpZXMgdGhhdCBub24tdGFnZ2VkLApsaW5lYXIgaW1hZ2VzIHN0YXJ0aW5nIGZyb20gMHgxMDAwMCBhcmUgYWxsb3dlZCwgYnV0IHRoYXQgZm9ybWF0IGlzCnByZXR0eSB1c2VsZXNzIG5vdy4gQW55IGRlY2VudCBsb2FkaW5nIHNjaGVtZSBuZWVkcyBhIHJvYWRtYXAgdG8gdGhlCmJsb2NrcyBpbiB0aGUgZG93bmxvYWRlZCBmaWxlLCB3aGljaCBpcyB3aGF0IHRhZ2dlZCwgYS5vdXQsIG9yIEVMRgppbWFnZXMgcHJvdmlkZSBpbiB0aGUgaGVhZGVyLiBROiBXaGF0IGlzIGNvbmZpZ19idWZmZXIgaW4gbWFpbi5jIGZvcj8KTm90aGluZyBlbHNlIHNlZW1zIHRvIHVzZSBpdC4gSXMgaXQgYSByZWxpYyBvZiBub24tdGFnZ2VkIGltYWdlcz8KCisgQ2xlYW4gdXAgbG90cyBvZiBvYnNvbGV0ZSBwcm90b3R5cGVzIGluIGV0aGVyYm9vdC5oLiBBbnNpZnkgbG90cyBvZgpmdW5jdGlvbiBoZWFkZXJzIGluIG1haW4uYy4gTWFrZSBsb3RzIG9mIGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzIGluCm1haW4uYyBzdGF0aWMuICBNYWtlIGJvb3RtZW51LmM6Z2V0b3B0dmFsdWUoKSBzdGF0aWMuCgorIFNpbXBsZSBleHRlcm5hbCBtZW51IHByb2dyYW0gd29ya3MhCgorIE1vcmUgZG9jdW1lbnRhdGlvbiBjbGVhbnVwLCBub3RhYmx5IGVkaXRpbmcgdGhlIGNvbXBpbGUgb3B0aW9ucyB0bwptYXRjaCB3aGF0IGhhcyBiZWVuIGRvbmUuCgpSZWxlYXNlZCBhcyBFdGhlcmJvb3QgNC43LjE3IChkZXZlbG9wbWVudCkKCisgTWFydHkgQ29ubm9yIGRpZCBpdCBhZ2FpbiEgSGUgZm91bmQgYSBsb25nIHN0YW5kaW5nIGJ1ZyBpbiB0aGUgUG5QIFJPTQpoZWFkZXIgd2hpY2ggY2F1c2VkIGl0IG5vdCB0byBiZSByZWNvZ25pc2VkIGJ5IEJJT1Nlcy4gTm93IEV0aGVyYm9vdCBST00KaW1hZ2VzIGFyZSBQblAgY29tcGxpYW50LiBJIGhhY2tlZCBtYWtlcm9tLmMgdG8gZmlsbCBpbiB0aGUgb2Zmc2V0IG9mCnRoZSBpZGVudCBzdHJpbmcgZm9yIHRoZSBkZXZpY2Ugc3RyaW5nIHNvIHRoYXQgdGhlIEJJT1MgY2FuIGV2ZW4gcHJpbnQKb3V0ICJFdGhlcmJvb3QiIGFuZCB0aGUgZGV2aWNlIGlkZW50IG9uIGJvb3QgdXAuCgorIE1hZGUgZGVtbyBtZW51IHByb2dyYW0gYSBiaXQgbW9yZSBlbGFib3JhdGUgd2l0aCB0aW1lb3V0LgoKKyBJZ29yIFYuIEtvdmFsZW5rbyBmaXhlZCB0aGUgV2luYm9uZCBXODlDODQwIGRyaXZlciB0byB1c2UgdGhlIGhhcmR3YXJlCnRpbWVyIGluc3RlYWQgb2YgQ1BVIGNvdW50ZXIgbG9vcHMuIE5vdyBub25lIG9mIHRoZSBFdGhlcmJvb3QgZHJpdmVycwpyZWx5IG9uIENQVSBzcGVlZCBkZXBlbmRlbnQgbG9vcHMuCgorIFNtYWxsIGZpeCB0byBjb250cmliL3A5MTBuZC5jIHRvIG5vdCB1c2UgZ2V0cHJvdG9ieW5hbWUgd2hpY2ggcmVxdWlyZXMKbGlibnNzX2ZpbGVzLnNvLCB3aGljaCBtYXkgbm90IGJlIGluc3RhbGxlZCBpbiBhbGwgZW52aXJvbm1lbnRzLgoKKyBTbWFsbCBjaGFuZ2UgdG8gY29udHJpYi9ta2Zmd25iIHRvIGFsbG93IHRoZSB1c2VyIHRvIGNob29zZSBFTEYgZm9ybWF0CihieSBlZGl0aW5nIG9uZSBsaW5lKSBpbnN0ZWFkIG9mIHRhZ2dlZCBmb3JtYXQuCgorIFBhdGNoIHRvIGF0ZnRwLTAuMiB0byBtYWtlIGl0IGFjY2VwdCBhIGZpbGVuYW1lIGlmIHRoZSBkaXJlY3RvcnkgaXMgYQpwcmVmaXggb2YgdGhlIGZpbGVuYW1lLiBUaGlzIGlzIG5lZWRlZCBzbyB0aGF0IHZhbGlkIGFic29sdXRlIHBhdGhuYW1lcwp3aWxsIHdvcmsuIFBhdGNoIHNlbnQgdG8gYXRmdHAgYXV0aG9ycy4KCisgQWRkZWQgc3VwcG9ydCBmb3IgZmlsdGVyaW5nIG91dCByZXBsaWVzIHdoaWNoIGRvIG5vdCBpbmNsdWRlIGEgVmVuZG9yCkNsYXNzIElkZW50aWZpZXIgb2YgIkV0aGVyYm9vdCIgaW4gdGhlIFZlbmRvciBFbmNhcHN1bGF0ZWQgT3B0aW9ucy4gVGhpcwpjYW4gYmUgdXNlZCB0byBzZWxlY3Qgb25seSB0aGUgREhDUCBzZXJ2ZXJzIHdoaWNoIHdlIHdhbnQgdG8gZ2V0CmFkZHJlc3NlcyBmcm9tIGFuZCByZWplY3QgdGhlIHJlc3QuICBTZWxlY3QgdGhlIGNvbXBpbGUgb3B0aW9uCi1EUkVRVUlSRV9WQ0lfRVRIRVJCT09ULiBUaGlzIHJlcXVpcmVzIElTQyBESENQRCAyIG9yIDMgQUZBSUsuICAoSXQncwpub3QgZG9jdW1lbnRlZCBpbiBESENQRCAyLCBidXQgaXQgd29ya3MuKSBPdGhlciBESENQIHNlcnZlcnMgbWF5IHN1cHBvcnQKVkVPLiAoSXQncyBhIFJGQzIxMzIgb3B0aW9uLikKCisgSmltIFRob21hcyBzdWdnZXN0ZWQgYSB3YXksIG90aGVyIHRoYW4gY3JlYXRpbmcgL2Zhc3Rib290LCBvZgpwcmV2ZW50aW5nIGZzY2sgZnJvbSBydW5uaW5nIG9uIE5GUyByb290LCBsbiAtcyAvYmluL3RydWUKL3NiaW4vZnNjay5uZnMuIE5vdCB2ZXJpZmllZCBidXQgc2hvdWxkIHdvcmsuIEFkZGVkIHRvIGRvY3VtZW50YXRpb24uCgpSZWxlYXNlZCBhcyBFdGhlcmJvb3QgNC43LjE4IChkZXZlbG9wbWVudCkKCisgUGF2ZWwgVGthdGNob3VrIHZlcmlmaWVzIHRoYXQgbGFuY2UuYyBjYW4gaGFuZGxlIFBDbmV0LUZBU1QgSUlJCjc5Yzk3My4gQWRkZWQgYSBuZXcgZW50cnkgdG8gbGFuY2UuYyBhbmQgTklDLiBOSUMgZW50cnkgbm90IHZlcmlmaWVkCnlldC4KCisgRW5oYW5jZWQgZGlzbmJpIHRvIGRlY29kZSBFTEYgaW1hZ2VzIHRvby4KCisgQXJyZ2ghIFRoZXJlIGFyZSBvbGQgQklPU2VzIHRoYXQgcmVseSBvbiB0aGUgd3Jvbmcgb3JkZXIgb2YgdGhlIGJ5dGVzCmluIHRoZSBkZXZpY2UgaWRlbnRpZmllciBpbiB0aGUgUENJUiBhbmQgUG5QIHN0cnVjdHVyZXMuIFdyb3RlIGEgUGVybApwcm9ncmFtIHN3YXBkZXZpZHMucGwgdG8gc3dhcCB0aGVzZSBieXRlcy4gQXBwbHkgdGhpcyB0byBpbWFnZSBmaWxlIGp1c3QKYmVmb3JlIHByb2dyYW1taW5nIHRoZSBFUFJPTS4KCisgTWFydHkgQ29ubm9yIHN1Z2dlc3RlZCB0aGF0IHRoZSBzcGVjcyBzdGF0ZSB0aGF0IGZvciBQblAgUk9NcyB0aGUKdW5zdWNjZXNzZnVsIHJldHVybiBmcm9tIGJvb3Qgc2hvdWxkIGJlIGludCAweDE4IHJhdGhlciB0aGFuIGludCAweDE5LgpVc2luZyBpbnQgMHgxOSwgc2VsZWN0aW5nIEwgZm9yIGxvY2FsIGRldmljZSBkb2Vzbid0IHdvcmsuIEZpeGVzIG5lZWRlZAppbiBib3RoIGxvYWRlci5TIGFuZCBzdGFydDMyLlMgKGdldCBscmV0IHRvIHdvcmsgcHJvcGVybHksIGluc3RlYWQgb2YKZG9pbmcgYW4gaW50IDB4MTkgZGlyZWN0bHksIGludm9sdmVkIHNhdmluZyBzcyBhbmQgc3AgaW4gcmVhbCBtb2RlCmluc3RlYWQgb2YgaW4gcHJvdGVjdGVkIG1vZGUpLgoKKyBXcm90ZSBhIFBlcmwgcHJvZ3JhbSBkaXNyb20ucGwgdG8gZGlzcGxheSBrZXkgc3RydWN0dXJlcyBvZiBhIFJPTQppbWFnZS4KCisgQWRkZWQgY2FsbCB0byBiaW5tb2RlKCkgaW4gdmFyaW91cyBQZXJsIHV0aWxpdGllcyBzbyB0aGV5IHNob3VsZCB3b3JrCnVuZGVyIG90aGVyIE9TZXMuCgorIEFkZGVkIGNoZWNrIGluIG1ha2Vyb20uYyB0byB3YXJuIGlmIDU1IEFBIG5vdCBmb3VuZCBhdCBzdGFydCBvZiBpbWFnZS4KSXQgc2VlbXMgc29tZSBwZW9wbGUgZG9uJ3QgcmVhZCB0aGUgd2FybmluZyBub3QgdG8gdXNlIHRoZSBMaW51eApzdXBwbGllZCBhczg2LgoKKyBJdCBzZWVtcyBaIGlzIGEgcmVjZW50IGFkZGl0aW9uIHRvIHBhY2svdW5wYWNrIGZvcm1hdHMgaW4gUGVybCBhbmQKZXZlbiBhIFBlcmwgYXMgcmVjZW50IGFzIDUuMDA0IGRvZXNuJ3QgaW1wbGVtZW50IGl0LiBDaGFuZ2UgWjUgaW4KbWtuYmkucGwgYW5kIFRydW5jRkQucG0gdG8gYTUgc2luY2Ugd2Ugb25seSBuZWVkIHRvIGNvbXBhcmUgaXQgYWdhaW5zdAonRkFUMTInIGFuZCAnRkFUMTYnLgoKKyBTb21lIGVycm9ycyBmb3VuZCBpbiBvc2xvYWRlci5jIGluIHRoZSAjaWZkZWYgSU1BR0VfTVVMVElCT09UCnNlY3Rpb25zLiAga2VybmVsIHNob3VsZCBiZSBLRVJORUxfQlVGIGFuZCB1bmlvbiBpbmZvIHNob3VsZCBoYXZlCnVuc2lnbmVkIHNob3J0IHNbMjU2XTsuIEFsc28ga2VybmVsIC0+IEtFUk5FTF9CVUYgZm9yIElNQUdFX0ZSRUVCU0QsCm9idmlvdXNseSBmZXcgRlJFRUJTRCB1c2VycyBoYXZlIHRyaWVkIGNvbXBpbGluZyBpdC4KCisgRXhwbGFpbiBpbiBkb2NzIHRoYXQgLmNvbSBhbmQgLihseilsaWxvIGltYWdlcyBjYW4gYmUgZ2VuZXJhdGVkIGFuZAp0b3VjaCBicmllZmx5IG9uIGhvdyB0byB1c2UgdGhlbS4KCisgRG9uYWxkIENocmlzdGVuc2VuIGNvbnRyaWJ1dGVkIHRyYW5zbGF0aW9ucyBvZiBmbG9wcHlsb2FkLlMgYW5kCmxvYWRlci5TIHRvIGdhcyBzeW50YXguIEN1cnJlbnRseSB0aGV5IGFyZSBpbiBjb250cmliL2dhc3N5bnRheC8uICBUaGV5CnBvdGVudGlhbGx5IGFsbG93IHVzIHRvIHRocm93IGF3YXkgYXM4NiBhbmQvb3IgbmFzbSBhbmQgdXNlIEdOVSB0b29scwp0aHJvdWdob3V0LCBidXQgSSBoYXZlIHRvIGRvIHNvbWUgd29yayBvbiB0aGVtOiAxLiBJIGhhdmUgdG8gY2hlY2sgd2hhdAp2ZXJzaW9ucyBvZiBnYXMgYWNjZXB0IHRoZSBzeW50YXgsIHRoZSAxNi1iaXQgbW9kZSBpbiBnYXMgd2FzIGEgcmVjZW50CmVuaGFuY2VtZW50OyAyLiBJIGhhdmUgdG8gcHV0IGJhY2sgdGhlICNpZmRlZiBQQ0lfUE5QX0hFQURFUiBpbnRvCmxvYWRlci5TIGFuZCBhbHNvIGJyaW5nIGl0IHVwIHRvIGRhdGUgdG8gdGhlIHJlY2VudCBwYXRjaGVzLgpmbG9wcHlsb2FkLlMgc2hvdWxkIGJlIHVzYWJsZSBhcyBpcy4KClJlbGVhc2VkIGFzIEV0aGVyYm9vdCA0LjcuMTkgKGRldmVsb3BtZW50KQoKKyBEb25hbGQgQ2hyaXN0ZW5zZW4gY29tcGxldGVkIHRoZSB0cmFuc2xhdGlvbiBvZiBsb2FkZXIuUyBhbmQgYWxsIHRoZQpvdGhlciAuUyBmaWxlcyBpbiB0aGUgc3JjIGRpcmVjdG9yeSB0aGF0IHByZXZpb3VzbHkgcmVxdWlyZWQgYXM4NiBvcgpuYXNtLiBObyBtb3JlIGZ1dHppbmcgYXJvdW5kIHdpdGggcHJlY29tcGlsZWQgdmVyc2lvbnMuIFlpcGVlIQoKKyBMdWlnaSBSaXp6byBjb250cmlidXRlZCBhIHNsaWdodGx5IGhhY2tlZCBGcmVlQlNEIGxvYWRlciB0aGF0IHdvcmtzIG9uCmZsb3BweSBvciBoYXJkIGRpc2suIFNlZSBib290MWEucyBmb3IgZGV0YWlscy4gTWFrZWZpbGUgcnVsZXMgZWRpdGVkLgpUYXJnZXRzIHJlbmFtZWQgLmRzayBhbmQgLmx6ZHNrIHRvIGluZGljYXRlIHRoZXkncmUgbm90IGZsb3BweSBzcGVjaWZpYwpub3cuIERvY3VtZW50YXRpb24gdXBkYXRlZC4gSSBub3RlIHRoYXQgdGhlIGxvYWRlciBpcyBzbWFydCBlbm91Z2ggdG8KZmlndXJlIG91dCBleGFjdGx5IGhvdyBtYW55IHNlY3RvcnMgaGF2ZSB0byBiZSByZWFkLgoKKyBSZW5hbWVkIGNvbWxvYWQuUyB0byBjb21wcmVmaXguUyB3aGljaCBkZXNjcmliZXMgaXQgYmV0dGVyLgoKKyBta25iaSB0b29scyBzcGxpdCBvdXQgaW50byBzZXBhcmF0ZSBwYWNrYWdlIGZvciBpbmRlcGVuZGVudApkZXZlbG9wbWVudC4KCisgVXNlIEEzMiBpbnN0ZWFkIG9mIFozMiBpbiB1bnBhY2sgZm9ybWF0IGluIGRpc3JvbS5wbCBpbiBjYXNlIHdlCmVuY291bnRlciBvbGQgUGVybCB2ZXJzaW9ucyAoPCA1LjAwNSkuCgorIFZlbmRvciBDbGFzcyBJZGVudGlmaWVyIHN0cmluZyB0aGF0J3Mgc2VudCBvdXQgaXMgbm93IG9mIHRoZSBmb3JtCkV0aGVyYm9vdC14LnkgKDEzIGJ5dGVzIGxvbmcpLgoKKyBSZWR1Y2VkIHNpemUgb2YgZWVfZGF0YSBpbiBkYXZpY29tLmMgdG8gMzIgYnl0ZXMgYmVjYXVzZSB3ZSBvbmx5IG5lZWQKdG8gYWNjZXNzIHRoZSBNQUMgYWRkcmVzcyBpbiBieXRlcyAyMDoyNS4KCisgQ2hhbmdlZCB0eXBlIG9mIGZvcm1hbCBhcmd1bWVudHMgdG8gcGNpLltjaF0gcm91dGluZXMgdG8gdW5zaWduZWQgaW50CmV4Y2VwdCBmb3IgdGhlIGxhc3QgYXJndW1lbnQsIGJlY2F1c2UgaW4gQU5TSSBDIHBhcmFtZXRlciBwYXNzaW5nIGlzCmxpa2UgYXNzaWdubWVudCBhbmQgZXh0cmEgZHVtbXkgdmFyaWFibGVzIGFuZCBjb2RlIG1heSBuZWVkIHRvIGJlCmdlbmVyYXRlZCBpZiB0aGUgZm9ybWFsIGFyZ3VtZW50IHR5cGUgaXMgbm90IHRoZSB0aGUgc2FtZSBzaXplIGFzIHRoZQphY3R1YWwgYXJndW1lbnQgdGhhdCBnZXRzIHB1c2hlZCBvbiB0aGUgc3RhY2suIE5vdCBpbnNpZ25pZmljYW50Cm92ZXJoZWFkLCByZWR1Y3Rpb24gZnJvbSAxODUzIHRvIDE3MjcgYnl0ZXMgZHVlIHRvIGNoYW5nZS4gQ2hhbmdlZCBkZXZmbgphbmQgYnVzIG1lbWJlcnMgb2Ygc3RydWN0IHBjaV9kZXZpY2UgdG8gdW5zaWduZWQgY2hhciB0byBlbmZvcmNlIGxpbWl0Cm9uIHR5cGUuIFN1cnByaXNpbmdseSB0aGlzIHJlZHVjZWQgdGhlIHNpemUgZnVydGhlciB0byAxNjY3IGJ5dGVzLgpQcm9iYWJseSB0aGUgY29tcGlsaWVyIGNvdWxkIGRvIG1vcmUgb3B0aW1pc2F0aW9ucyBhZnRlciB0aGUgbGFzdApjaGFuZ2UuCgorIFNvbWUgZHJpdmVycyBoYXJkd2lyZWQgMCBmb3IgYnVzIG51bWJlciBpbiBjYWxscyB0byBwY2liaW9zXyoKZnVuY3Rpb25zLiBDaGFuZ2VkIHRvIHBjaS0+YnVzLCB3aGljaCBpcyBzZXQgaW4gc2Nhbl9idXMuIE9ubHkKcGVvcGxlIHdpdGggTklDcyBub3Qgb24gYnVzIDAgd291bGQgaGF2ZSBub3RpY2VkLgoKKyBGb3VuZCBhIGNvdXBsZSBtb3JlIG9sZC1zdHlsZSBwcmUtQU5TSSBDIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucy4gVHVybmVkCm9uIC1hbnNpIGFuZCAtcGVkYW50aWMgZm9yIGtpY2tzIGFuZCBmaXhlZCBzb21lIG5vbi1BTlNJbmVzcywgZS5nLgovLyBjb21tZW50IGluICNkZWZpbmUsIHRleHQgYWZ0ZXIgI2VuZGlmLCBjYXN0aW5nIG1lbWNweSBhcmd1bWVudHMgdG8Kdm9pZCAqLCB1c2luZyB2b2lkICogaW5zdGVhZCBvZiBjaGFyICouIFNvbWUgY2hhciBkZWNsYXJhdGlvbnMgY2hhbmdlZAp0byB1bnNpZ25lZCBjaGFyLgoKUmVsZWFzZWQgYXMgRXRoZXJib290IDQuNy4yMCAoZGV2ZWxvcG1lbnQpCgorIEkgY2hhbmdlZCBteSBtaW5kLiBJIHRoaW5rIHRoZSBmb3JtYXQgaW4gZGlzcm9tLnBsIHNob3VsZCBiZSBaMzIsCm90aGVyd2lzZSBpdCBkaXNwbGF5cyBiaW5hcnkgY2hhcmFjdGVycyBhZnRlciB0aGUgdmFsaWQgcGFydCBvZiB0aGUKc3RyaW5nLiBGb3IgcGVvcGxlIHdpdGggUGVybCA8IDUuMDA1LCBwbGVhc2UgdXBncmFkZS4KCisgTW92ZWQgUkVMT0MgZG93biB0byAweDk0MDAwLiBUdXJuZWQgb24gVVNFX0lOVEVSTkFMX0JVRkZFUiBieSBkZWZhdWx0LgpVbmxlc3MgQk9PVFBfREFUQV9BVF8weDkzQzAwIGlzIGRlZmluZWQsIHVzZSBpbnRlcm5hbCBib290cCBzdHJ1Y3V0cmUuClRoaXMgZ2V0cyBFdGhlcmJvb3Qgb3V0IG9mIHRoZSBhcmVhIGp1c3QgYmVsb3cgMHgxMDAwMCBhbmQgdGhlIGFyZWEgZnJvbQoweDkzQzAwLTB4OTNGRkYuIERIQ1AgcGFja2V0cyBjYW4gbm93IGJlIGFzIGxhcmdlIGFzIHRoZSBFdGhlcm5ldApwYXlsb2FkLiBMYXRlciBvbiwgZmlyc3QzMi5jIGFuZCB0aGUgcGFyYW1ldGVyIGFyZWEgY291bGQgZXhwYW5kIGEgYml0LgpJbiBsYW5jZS5jIGhhZCB0byByZWR1Y2UgUlhfUklOR19TSVpFIChieSByZWR1Y2luZyBMQU5DRV9MT0dfUlhfQlVGRkVSUykKZnJvbSAxNiB0byA0IHRvIGZpdCB0aGUgZHJpdmVyLiBJJ2QgbGlrZSB0byBoZWFyIGZlZWRiYWNrIGZyb20gbGFuY2UKdXNlcnMuIElzIDI0a0Igb2YgcmVjZWl2ZSBidWZmZXJzIHJlYWxseSBuZWVkZWQgZ2l2ZW4gdGhhdCBFdGhlcmJvb3QKdXNlcyBzdG9wLXdhaXQgcHJvdG9jb2xzPwoKKyBEb3VnIEFtYnJpc2tvIHNlbnQgaW4gc29tZSBwYXRjaGVzIGZvciBGcmVlQlNEOiBhIGNvcnJlY3Rpb24gZm9yIG9uZQp0eXBvIEkgbWlzc2VkIGFuZCBjaGFuZ2VzIHRvIG1ha2UgY29tcGlsYXRpb24gdW5kZXIgRnJlZUJTRCBlYXNpZXIuCgorIE1pY2hhZWwgU2lueiBjb250cmlidXRlZCBwYXRjaGVzIHRvIGFsbG93IHRoZSBGcmVlQlNEIGxvYWRpbmcgY29kZSB0bwpsb2FkIGRlYnVnZ2luZyBzeW1ib2xzIGFsc28uCgorIE1hcnR5IENvbm5vciBjb250cmlidXRlZCBhIFNpUzkwMCBkcml2ZXIuIEFsc28gcG9pbnRlZCBvdXQgdGhhdCBpZgpBU0tfQk9PVCA8PSAwLCB0aGUgcHJvbXB0IGFuZCByZWFkIHNob3VsZG4ndCBldmVuIGhhcHBlbi4gQ29uZGl0aW9uYWwKY29kZSByZXdvcmtlZC4KCisgU3BsaXQgZG9jdW1lbnRhdGlvbiBpbnRvIHVzZXIgbWFudWFsIGFuZCBkZXZlbG9wZXIgbWFudWFsLiBBZGRlZAptYXRlcmlhbC4KClJlbGVhc2VkIGFzIEV0aGVyYm9vdCA0LjcuMjEgKGRldmVsb3BtZW50KQoKKyBQcmVzdG9uIFdpbHNvbiBwb2ludGVkIG91dCB0aGF0IGRzLmludGVybmljLm5ldCBzaG91bGQgYmUgcmVwbGFjZWQgYnkKd3d3LmlldGYub3JnIGluIGRvY3VtZW50YXRpb24gVVJMcy4gQWxzbyBSRkMxMDkwIHNob3VsZCBiZSBSRkMxMDk0CihORlMpLgoKKyBNYXJ0eSBDb25ub3IgcG9pbnRlZCBvdXQgc29tZSBicm9rZW4gbGlua3MgZHVlIHRvIHRoZSBzcGxpdCBpbgpkb2N1bWVudGF0aW9uLiBBbHNvIGNvbW1lbnRzIGRvbid0IG1hdGNoIGNvZGUgaW4gbGFuY2UuYyBmb3IgY2hhbmdlIGp1c3QKYWJvdmUuIEFsc28gcGFzc2VkIG9uIGEgYnVnIGZvdW5kIGJ5IGEgdXNlciBvZiByb20tby1tYXRpYy5uZXQgd2hlcmUKdGZ0cCB3YXMgbm90IGRlZmluZWQgd2hlbiBBTlNJRVNDIHdhcyBkZWZpbmVkLiBNeSBtaXN0YWtlLCBJIG1hZGUgaXQgYQpzdGF0aWMgZnVuY3Rpb24gd2hlbiBpdCBuZWVkcyB0byBiZSBleHBvcnRlZCB0byBhbnNpZXNjLmMuCgorIENocmlzdG9waCBQbGF0dG5lciBmb3VuZCB0aGF0IHRoZSBFdGhlcmJvb3Qgc3RhcnR1cCBtZXNzZXMgdXAgdGhlCmZsYWdzIHdoaWxlIHRlc3RpbmcgZm9yIGEgMzg2Ky4gVGhpcyBkb2Vzbid0IGFmZmVjdCBFdGhlcmJvb3QgYnV0IGl0IGNhbgpjYXVzZSB0aGUgbG9hZGVkIG9wZXJhdGluZyBzeXN0ZW0gdG8gY3Jhc2guIEZpeDogcHVzaGYgYmVmb3JlIGFuZCBwb3BmCmFmdGVyIHRoZSBDUFUgbW9kZWwgdGVzdGluZy4KCisgSmVhbi1KYWNxdWVzIE1pY2hlbCBjb250cmlidXRlZCBwYXRjaGVzIHRvIHRoZSB2aWEtcmhpbmUuYyBkcml2ZXIgdG8KbWFrZSBpdCB3b3JrIGZvciB0aGUgVlQ2MTAyIG1vZGVsIGFzIHVzZWQgb24gc29tZSBERkU1MzAtVFggUmV2LkEzIE5JQ3MuCgorIEx1aWdpIFJpenpvIHNlbnQgaW4gYSBmaXhlZCBib290MWEucyB0aGF0IGFjdHVhbGx5IHdvcmtzIG9uIEhEcyBub3cuCgorIFN0ZWZhbiBGdXJ0bWF5ciBzZW50IGluIGEgbGlzdCBvZiBVUkxzIHRvIFRGVFAgc2VydmVycyBmb3IgTlQuIEFkZGVkCnRvIGRpcmVjdG9yeSBjb250cmliL0Rpc2tsZXNzLUZyb20tTlQuCgorIFBhdWwgV2hpdHRha2VyIGNvbnRyaWJ1dGVkIGEgSE9XVE8gaW4gSFRNTCBmb3JtYXQgb24gYm9vdGluZyB3aXRoIE5UCmFzIHRoZSBzZXJ2ZXIuICBBZGRlZCB0byBkaXJlY3RvcnkgY29udHJpYi9EaXNrbGVzcy1Gcm9tLU5ULgoKKyBDSiBwb2ludGVkIG91dCB0aGF0IHRoZSBhZHZlcnRpc2VkIG1lc3NhZ2Ugc2l6ZSBpcyA+IDE1MDAgYnl0ZXMuCkRlZmluZSBNQVhfQk9PVFBfRVhUTEVOIHNvIHRoYXQgdGhlIHNpemUgb2YgdGhlIHN0cnVjdHVyZSBtYXRjaGVzIHRoZQpFdGhlcm5ldCBwYXlsb2FkIHNpemUuCgpSZWxlYXNlZCBhcyBFdGhlcmJvb3QgNC43LjIyIChkZXZlbG9wbWVudCkKCisgUmVpbnRyb2R1Y2UgdGhlIG9sZCBWaWEtUmhpbmUgUENJIElEcyBpbnRvIGZpbGUgTklDIGFuZCBnaXZlIHRoZQpjb3JyZXNwb25kaW5nIFJPTSBpbWFnZXMgLW9sZCBzdWZmaXhlcywgaW4gY2FzZSBzb21lIHBlb3BsZSBhcmUgdXNpbmcKdGhlIG9sZCBjaGlwcy4KCisgUGV0ZXIgS/ZnZWwgY29udHJpYnV0ZWQgcGF0Y2hlcyB0byB0aGUgU2lTOTAwIGRyaXZlciB0byBtYWtlIGl0IHdvcmsKZm9yIHRoZSBTaVM2MzBlIGFuZCBTaVM3MzBzLgoKKyBDaGFybGVzIERvYnNvbiBwb2ludGVkIG91dCB0aGF0IHdoZW4gYm9vdGluZyBmcm9tIGEgUG5QIEJJT1MsIHRoZSBjb2RlCnNob3VsZCBub3QgaG9vayBvciByZXN0b3JlIHRoZSBJTlQxOUggZW50cnkgcG9pbnQuICBQdXQgaG9va2luZyBjb2RlCmluc2lkZSAjaWZuZGVmIFBDSV9QTlBfSEVBREVSIGFuZCBjaGFuZ2VkIGVudHJ5IHBvaW50IGluIFBuUCBzdHJ1Y3R1cmUKZnJvbSBzdGFydDE5aCB0byBibG9ja21vdmUuCgorIEkgaGF2ZSBvbmUgcmVwb3J0IHRoYXQgZ2FzIDIuOTEgZG9lc24ndCBhc3NlbWJsZSBsb2FkZXIuUyBiZWNhdXNlIGl0CmNhbid0IGhhbmRsZSBhbGwgdGhlIDE2LWJpdCBjb2RlLiBTaW5jZSB0aGUgYmVuZWZpdHMgb2YgdXNpbmcgZ2FzIGZvcgphbGwgYXNzZW1ibHkgY29kZSBhcmUgZ3JlYXQsIGFuZCBnYXMgMi45NSBoYXMgYmVlbiBvdXQgdGhlcmUgZm9yIGEgbG9uZwp0aW1lLCBJIHJlZ3JldGZ1bGx5IHNheSB0byBhZmZlY3RlZCB1c2VyczogdXBncmFkZSB5b3VyIHRvb2xzLiBPdGhlcndpc2UKdGhlcmUgbWF5IGJlIGEgd29ya2Fyb3VuZCBieSBzcGVjaWZ5aW5nIHRoZSBvcGNvZGVzIGxpdGVyYWxseS4gIEkgbGVhdmUKaXQgdG8gaW50ZXJlc3RlZCBwYXJ0aWVzIHRvIHRyeS4gSWYgeW91IGRvIHRoaXMsIHB1dCBpbiBhbiAjaWZkZWYKR0FTMjkxLCBuYXR1cmFsbHkuCgorIFVwZGF0ZWQgY29udHJpYi90ZnRwLWhwYSB0byAwLjE2IGZyb20gZnRwLmtlcm5lbC5vcmcuCgpSZWxlYXNlZCBhcyBFdGhlcmJvb3QgNC43LjIzIChkZXZlbG9wbWVudCkKCisgUmVuYW1lIG5lcGNpIGVudHJ5IGluIGZpbGUgTklDIHRvIHJ0bDgwMjkgdG8gYXZvaWQgZ2l2aW5nIHRoZQppbXByZXNzaW9uIHRoYXQgbmVwY2kgd2lsbCB3b3JrIGZvciBhbGwgUENJIE5FMjAwMCBjbG9uZXMuIE1ha2UgdGhlCmlzc3VlIG9mIFBDSSBJRHMgaW4gUk9NcyBjbGVhcmVyIGluIGRvY3VtZW50YXRpb24sIGJvdGggaW4gdGhlCmNvbmZpZ3VyYXRpb24gYW5kIHRyb3VibGVzaG9vdGluZyBzZWN0aW9ucy4KCisgVGFuaWEgT2thIGFuZCBIeXVuLUpvb24gQ2hhIGF0IGFib3V0IHRoZSBzYW1lIHRpbWUgZm91bmQgdGhhdAppbXBsZW1lbnRpbmcgdGhlIHJ0bF9kaXNhYmxlKCkgcm91dGluZSBpbiBydGw4MTM5LmMgc3RvcHBlZCByYW5kb20KY3Jhc2hlcyBpbiBMaW51eCBsYXRlci4gSXQgaXMgaW1wb3J0YW50IHRvIGRpc2FibGUgdGhlIE5JQyBhZnRlciBuZXR3b3JrCmxvYWRpbmcuCgorIEltcGxlbWVudGVkIF9kaXNhYmxlKCkgcm91dGluZSBpbiB3ODljODQwLCAzYzkweCBhbmQgdmlhLXJoaW5lIGRyaXZlcnMKdG9vLiBEb24ndCBrbm93IGhvdyB0byBkbyBpdCBmb3IgZXBpYzEwMC4KCisgcDkxMG5kLTAuNCBpbiBjb250cmliLyBoYXMgLWYgZGV2aWNlIG9wdGlvbiBub3cgdG8gc3BlY2lmeSBvdGhlcgpwcmludGVyIHBvcnRzLCBlLmcuICBVU0IuCgorIFJvYmIgTWFpbiBmb3VuZCBhIGJ1ZyB3aXRoIHRoZSAjaWZkZWYgbG9naWMgaW4gbG9hZGVyLlMuIFRoaXMgbWF5IGZpeApwcm9ibGVtcyB3aXRoIEJJT1MgZGV0ZWN0aW9uLgoKUmVsZWFzZWQgYXMgRXRoZXJib290IDQuNy4yNCAoZGV2ZWxvcG1lbnQpCgorIFBhb2xvIE1hcmluaSBzZW50IGluIHNvbWUgY29kZSB0byBtYWtlIGl0IHdvcmsgb24gaGlzIGJhcmUgbWV0YWwgKG5vCnN0YW5kYXJkIEJJT1Mgb3IgcGVyaXBoZXJhbHMpIHBsYXRmb3JtLiBUaGlzIG1heSBiZSBhIHVzZWZ1bCBzdGFydGluZwpwb2ludCBmb3Igc29tZSBhcHBsaWNhdGlvbnMuIFNlZSBjb250cmliL2JhcmVtZXRhbC8uCgorIEVyaWMgVy4gQmllZGVybWFuIGNvbnRyaWJ1dGVkIGEgUGVybCBzY3JpcHQgaW4KY29udHJpYi9hd2FyZF9wbHVnaW5fcm9tcy8gdG8gbGlzdCBmbGFzaCBCSU9TIHBsdWdpbiBjb21wb25lbnRzLgoKKyBNYXJ0eSBDb25ub3IgcmV3cm90ZSB0aGUgVHVsaXAgZHJpdmVyIHRvIGhhbmRsZSBtYW55IG1vcmUgdmFyaWFudHMuCgorIEZvciBQQ0kgUk9NcyBsb2FkZXIuUyBjYW4gbm93IGRldGVjdCBpZiBpdCdzIGJlaW5nIGNhbGxlZCBmcm9tIGEgUG5QCkJJT1MgYW5kIGNob29zZSB0byBob29rIElOVDE5SCBpZiBub3QuCgorIFBhc3Mgc3RydWN0ICpyb21faW5mbyBpbiBwcml2X2RhdGEgdG8gcHJvYmUgcm91dGluZS4gVGhpcyBpcyB0byBhbGxvdwpkcml2ZXJzIHRvIGRlY2lkZSwgYmFzZWQgb24gdGhlIFJPTSBhZGRyZXNzLCB3aGljaCBvbmUgb2YgbXVsdGlwbGUKaW5zdGFuY2VzIG9mIGlkZW50aWNhbCBuZXR3b3JrIGFkYXB0b3JzIHRvIGFjdGl2YXRlLiBTdGFydGVkIG9uIDNjNTA5CmNvZGUgdG8gdXNlIHRoaXMgYnV0IG5lZWQgdG8gdW5kZXJzdGFuZCAzYzUwOSBjb250ZW50aW9uIHJlc29sdXRpb24KbWVjaGFuaXNtIGZpcnN0LgoKKyBMaW5rIHNyYy9semh1Zi5jIHRvIGNvbnRyaWIvY29tcHJlc3Nvci9semh1Zi5jIHNvIHRoYXQgd2UgZG9uJ3QgbmVlZAp0byByZWZlciB0byBjb250cmliL2NvbXByZXNzb3IvbHpodWYuYyBhbnltb3JlIGluIE1ha2VmaWxlLgoKUmVsZWFzZWQgYXMgRXRoZXJib290IDQuNy4yNSAoZGV2ZWxvcG1lbnQpCgorIE1pbm9yIGRvY3VtZW50YXRpb24gZWRpdHMsIG1lcmdlZCBpbiBOSUMgZW50cmllcyBmb3IgbmV3bHkgc3VwcG9ydGVkClR1bGlwIHZhcmlhbnRzIGZyb20gTWFydHkgQ29ubm9yLgoKKyBPbmUgbGFzdCBtaW51dGUgY2hhbmdlLCBSb2JiIE1haW4gc3VnZ2VzdGVkIGNhbGxpbmcgY3M4OXgwX3Jlc2V0KCkKZnJvbSBjczg5eDBfZGlzYWJsZSgpIHRvIHNodXRkb3duIHRoZSBoYXJkd2FyZSBjbGVhbmx5LgoKKyBVcGRhdGVkIHRmdHAtaHBhIHRvIDAuMTcuCgorIFNsaWdodCBtb2QgdG8gbHpodWYuYyB0byBtYWtlIGNvbXByZXNzaW9uIHN0YXRpc3RpY3MgcmVwb3J0IHNob3J0ZXIuCgpSZWxlYXNlZCBhcyBFdGhlcmJvb3QgNS4wLjAgKHByb2R1Y3Rpb24pCgorIERvbmFsZCBDaHJpc3RlbnNlbiBmb3VuZCBhIHNtYWxsIGJ1ZyBpbiBvc2xvYWRlci5jLiBOb3QgYWxsIGNvbnRleHQKd2FzIGNsZWFyZWQgb24gdGZ0cCByZXN0YXJ0IHdoaWNoIGNhdXNlZCByZXN0YXJ0ZWQgdGZ0cCBsb2FkcyB0byBmYWlsLgoKKyBDb3JyZWN0IGEgc21hbGwgZXJyb3IgaW4gc2V0dGluZyAlc3Agd2hlbiBub3QgcnVubmluZyBhdCAweDl4eHh4LgpOb3cgcmVsb2NhdGlvbiB0byAweDg0MDAwIHdvcmtzLgoKKyBNYXJ0eSBDb25ub3IgYWRkZWQgYSBnZW5lcmljIFR1bGlwIGVudHJ5IGFuZCByZW5hbWVkIHRoZSBNYWNyb25peAplbnRyaWVzIGJlY2F1c2UgUEhQIGRvZXNuJ3QgbGlrZSBzdHJpbmdzIHN0YXJ0aW5nIHdpdGggZGlnaXRzIChmb3IKcm9tLW8tbWF0aWMubmV0KS4KCisgSW4gbG9hZGVyLlMsIG1vdmUgY29kZSB0byBzYXZlIFJPTSBzZWdtZW50IGFuZCBsZW5ndGggdG8gYmVmb3JlIGp1bXAKdG8gbmV3IHNlZ21lbnQsIG90aGVyd2lzZSBpZiBNT1ZFUk9NIGlzIGRlZmluZWQsIHRoZW4gdGhlIFJPTSBzZWdtZW50IGlzCmFsd2F5cyAweDgwMDAuIEluIGV0aGVyYm9vdC5oLCBkZWZpbmUgYW4gaW5saW5lIGZ1bmN0aW9uIHRvIHNheSBpZiBhIFJPTQphZGRyZXNzIGlzIG9rIHRvIGJvb3QgZnJvbS4gQWxsb3cgaWYgPCAweEMwMDAwIG9yIG1hdGNoZXMgYXNzaWduZWQgUk9NCmFkZHJlc3Mgb2YgTklDLgoKKyBUaG9tYXMgS2Vzc2xlciBmb3VuZCBhIGJ1ZyBpbiB2ZW5kb3J0YWdzLnNnbWwgcmUgb3B0aW9uLU5OTiB0YWdzIGluCmRoY3BkLmNvbmYsIHRoZSB3cm9uZyBzeW50YXggd2FzIHByZXNlbnRlZC4gSG93ZXZlciBvbiB0cnlpbmcgdGhlCm9wdGlvbi1OTk4gc3ludGF4IGRvY3VtZW50ZWQgaW4gdGhlIGRoY3Atb3B0aW9ucyBtYW4gcGFnZSwgaXQgd2FzCmRpc2NvdmVyZWQgdGhhdCBvcHRpb24gb3B0aW9uLU5OTiBpcyBubyBsb25nZXIgc3VwcG9ydGVkIGluIHRoZSBvbGQgd2F5CmluIHJlY2VudCB2ZXJzaW9ucyBvZiBJU0MgZGhjcGQgdjM7IGEgbmV3IHN5bnRheCBzaG91bGQgYmUgdXNlZC4gQWRkZWQKbm90ZSB0byB2ZW5kb3J0YWdzLnNnbWwgdG8gd2FybiB1c2Vycy4KCisgSW5jb3Jwb3JhdGVkIGNoYW5nZXMgc3VnZ2VzdGVkIGJ5IEhhbm51IE1hcnRpa2thIHRvICNkZWZpbmUKREVGQVVMVF9LRVJORUxQQVRIIGluIGV0aGVyYm9vdC5oIGZvciByYXJwKCksIGFuZCBkaXNwbGF5IHRoZSBURlRQCnNlcnZlciBhZGRyZXNzIGJlZm9yZSBmaWxlbmFtZSBpbiBMb2FkaW5nOiBtZXNzYWdlLgoKKyBTcGxpdCBvZmYgZG9jdW1lbnRhdGlvbiBpbnRvIHNlcGFyYXRlIHBhY2thZ2UgaW4gYW50aWNpcGF0aW9uIG9mCnByb2R1Y3Rpb24vZGV2ZWxvcG1lbnQgc2VyaWVzIHNwbGl0LiBNb3ZlZCBwcmV2aW91cyBMT0cgdG8gdG9wIGxldmVsLgpNb3ZlZCBkaXN0cmlidXRpb24gc2VjdGlvbiBvZiBpbmRleC5odG1sIGludG8gc2VwYXJhdGUgd2ViIHBhZ2Ugc28gdGhhdAppbmRleC5odG1sIHdpbGwgYmUgbGVzcyBlcGhlbWVyYWwuCgpSZWxlYXNlZCBhcyBFdGhlcmJvb3QgNS4wLjEgKHByb2R1Y3Rpb24pCgorIEFya2FkaXVzeiBNaXNraWV3aWN6IHBvaW50ZWQgb3V0IHRoYXQgLS1vZm9ybWF0IHNob3VsZCBiZSB1c2VkIGluc3RlYWQKb2YgLW9mb3JtYXQgYXMgb2xkIGxkIGFjY2VwdHMgYm90aCB3aGlsZSBuZXcgbGQgcmVxdWlyZXMgLS1vZm9ybWF0LgoKKyBjb250cmliL3t0ZnRwLWhwYSxhdGZ0cH0gYXJlIGRpc3RyaWJ1dGVkIHNlcGFyYXRlbHkgZnJvbSB0aGUKZGlzdHJpYnV0aW9uIHBhZ2UgdG8gbWFrZSB0aGVtIGVhc3kgdG8gdXBkYXRlLgoKKyBFcmljIEJpZWRlcm1hbiBjb250cmlidXRlZCBtYW55IHNtYWxsIGNoYW5nZXMgaW4gdGhlIGNvZGUgdG8gaW1wcm92ZQp0aGUgYmVoYXZpb3VyIGluIGV4Y2VwdGlvbnMgYW5kIGdlbmVyYWxseSBpbXByb3ZlIHRoZSBjb2RlIHN0cnVjdHVyZToKCjEpIENsZWFudXAgZXRoZXJib290IHJlc3RhcnRpbmcuICBUaGVyZSBpcyBub3cgb25seSBvbmUgcGxhY2UgdGhhdCBuZWVkcwp0byB0ZXN0IGZvciBFTUVSR0VOQ1lCT09URElTSy4KCjIpIENoYW5nZSBwY2kuYyBhcyBJIGhhdmUgc3VnZ2VzdGVkLiAgSXQgaXMgc2V0dXAgdG8gc2NhbiBldmVyeSBwb3NzaWJsZQpwY2kgYnVzIHVudGlsIGl0IGZpbmRzIGFuIGV0aGVyYm9vdCBjYXJkLgoKMykgQ2hhbmdlIG9zbG9hZGVyLmMgc28gdGhhdCBpZiBhbiBpbWFnZSB0aGF0IGNhbiByZXR1cm4sIGJ1dCBpc24ndApzdXBwb3NlZCB0byBpdCByZXN0YXJ0cyBldGhlcmJvb3Qgd2l0aCAtMiBpbnN0ZWFkIG9mIHRoZSByZXR1cm5lZCB2YWx1ZS4KCjQpIFJld3JpdGVzIHRoZSBkZWxheSBsb2dpYyBzbyB0aGF0IHdlIGNvbXB1dGUgaG93IGxvbmcgd2Ugc2hvdWxkIHNsZWVwLAphbmQgdGhlbiBzbGVlcCB0aGUgd2hvbGUgdGltZSBpbiBhd2FpdF9yZXBseSBzbyBpbiBhIGNvbmdlc3RlZCBuZXR3b3Jrcwp3ZSBkb24ndCBtaXNzIHNsb3cgcGFja2V0cy4KCjUpIGRpdmlkZXMgbG9hZCBpbnRvIGxvYWQgJiBsb2FkX2NvbmZpZ3VyYXRpb24uICBUaGlzIHJlbW92ZXMgdGhlIG5lZWQKZm9yIHRoZSB3ZWlyZCBib290cF9jb21wbGV0ZWQgdmFyaWFibGUuICBBbmQgbWFrZXMgaXQgYSBsaXR0bGUgbW9yZQpleHBsaWNpdCB3aGF0IHdlIGFyZSBkb2luZy4KCjYpIGFkZCBhbiBpbnRlcnJ1cHRpYmxlX3NsZWVwIGZ1bmN0aW9uIHNvIHRoYXQgd2UgY2FuIHNsZWVwIGFuZCBzdGlsbApwcm9jZXNzIGtleXN0cm9rZXMuCgo3KSByZXdyaXRlcyB0aGUgcmVzdGFydCBsb2dpYzoKICAgLSByZW5hbWVzIGptcF9ib290bWVudSB0byByZXN0YXJ0X2V0aGVyYm9vdC4KICAgLSByZW1vdmVzIGJvb3RtZW51IChUaGUgZnVuY3Rpb24gaXNuJ3QpCiAgIC0gSXQgZXhwbGljaXRseSBkb2VzIGFuIGV0aF9yZXNldCAmIGV0aF9wcm9iZSBwYWlyIHRvIHJlaW5pdGlhbGl6ZQogICAgIHRoZSBpbnRlcmZhY2UuICBUaGlzIHNob3VsZCBoZWxwIGlmIHNvbWVvbmUgaGFzIHBsdWdnZWQgdGhlCmludGVyZmFjZSBpbnRvIGEgZGlmZmVyZW50IHN3aXRjaCBzaW5jZSBib290aW5nIHN0YXJ0ZWQuCiAgIC0gbW92ZXMgQVNLX0JPT1QgYW5kIFRSWV9GTE9QUFlfRklSU1QgaW50byB0aGVpciBvd24gZnVuY3Rpb25zLgogICAtIE9uIGV2ZXJ5IHJlc3RhcnQgY2FsbHMgYXNrX2Jvb3QgYW5kIHRyeV9mbG9wcHlfZmlyc3QuICBBbGxvd2luZyB5b3UKICAgICB0byBjaGFuZ2UgeW91ciBtaW5kIG9uIGhvdyB5b3Ugd2FudCB0byBib290IGFmdGVyIG5ldHdvcmsgYm9vdGluZwpzdGFydHMuCgo4KSBJbiBjbGVhbnVwIGNhbGxzIGJvdGggZXRoX2Rpc2FibGUgKHRvIGRpc2FibGUgdGhlIGludGVyZmFjZSkgJgpldGhfcmVzZXQgdG8gbWFrZSBjZXJ0YWluIHRoZSBpbnRlcmZhY2UgY2FuIGJlIGluaXRpYWxpemVkIGZyb20gbGludXguCihJZiBub3RoaW5nIGVsc2UgdGhpcyBzaG91bGQgY2F1c2UgbW9yZSBoaWRkZW4gYnVncyB0byBzaG93IHVwKS4KCjkpIFJlc3RhcnQgZXRoZXJib290IHdoZW4gZG93bmxvYWRpbmcgYSBib290ZmlsZSBmYWlscywgaW5zdGVhZCBvZiBqdXN0Cmxvb3BpbmcgdHJ5aW5nIHRvIGdldCB0aGF0IGZpbGUuICBBbGxvd2luZyB0eXBvcyBpbiBkaGNwZC5jb25mIHRvIGJlCmNvcnJlY3RlZCB3aXRob3V0IGhhdmluZyB0byByZWJvb3QgdGhlIGNsaWVudCBtYWNoaW5lIHJ1bm5pbmcgZXRoZXJib290LgoKUmVsZWFzZWQgYXMgRXRoZXJib290IDUuMS4wIChkZXZlbG9wbWVudCkKCisgQWxsIHRoZSBjaGFuZ2VzIGZyb20gNS4xLjAgY2FycmllZCBvdmVyIGV4Y2VwdCBjYWxsaW5nIGV0aF9yZXNldCgpCmZyb20gY2xlYW51cCgpLgoKKyBNYXJ0eSBDb25ub3IsIGZ1bmRlZCBieSBTaWNvbSBTeXN0ZW0gKGh0dHA6Ly93d3cuc2ljb21wb3MuY29tLyksIHdyb3RlCmEgZHJpdmVyIGZvciBOSUNzIGJhc2VkIG9uIHRoZSBOYXRpb25hbCBTZW1pY29uZHVjdG9yIERQODM4MTUsIGUuZy4KTmV0Z2VhciBGQTMxMS9GQTMxMi4gQWxzbyBpbmRlcGVuZGVudGx5IGNyZWF0ZWQgYnkgSmFzb24gTWNNdWxsYW4ganVzdAphdCB0aGUgdGltZSBNYXJ0eSByZWxlYXNlZCBoaXMgZHJpdmVyLiBUaGFua3MgZm9yIHRoZSBlZmZvcnQgSmFzb247CmdyZWF0IG1pbmRzIHRoaW5rIGFsaWtlLiBCb3RoIGFyZSBiYXNlZCBvbiBEb25hbGQgQmVja2VyJ3MgTGludXggZHJpdmVyLApvZiBjb3Vyc2UuCgorIERvdWcgQW1icmlza28gY29udHJpYnV0ZWQgYSBwYXRjaCB0byB0YWtlIGVudmlyb25tZW50IGJpbmRpbmdzIGZvcgpGcmVlQlNEIGtlcm5lbHMgZnJvbSBhIEJPT1RQL0RIQ1Agb3B0aW9uIG9yIGNvbmZpZyB2YXJpYWJsZS4KCisgRGF4IEtlbHNvbiBjb250cmlidXRlZCBhbiBleGFtcGxlIG9mIGFuIElTQyBESENQIGNvbmZpZyBmaWxlIHRoYXQgdXNlcwpWZW5kb3IgQ2xhc3MgSWRlbnRpZmllciB0byB0YWlsb3IgdGhlIHJlc3BvbnNlIHRvIEV0aGVyYm9vdCBjbGllbnRzLgpBbHNvIGRpc2NvdmVyZWQgdGhhdCB0aGUgRXRoZXJib290IFZDSSBzaG91bGQgYWxzbyBiZSBzZW50IGluIHRoZQpESENQUkVRVUVTVCBtZXNzYWdlLCBpbiBhZGRpdGlvbiB0byB0aGUgREhDUERJU0NPVkVSIG1lc3NhZ2UuICBOb3RlIHRoYXQKdGhlIERIQ1Agc2VydmVyIG11c3QgYmUgc2V0IHRvIG5vbiBhdXRob3JpdGl0YXRpdmUgaWYgeW91IGhhdmUgYW4KYXV0aG9yaXRhdGl2ZSBzZXJ2ZXIgcnVubmluZyBhbHJlYWR5IG9yIGl0IHdpbGwgaW50ZXJmZXJlIHdpdGggdGhhdApvbmUncyBvcGVyYXRpb24uCgorIFBldGVyIExpc3RlciBhbmQgVmFzaWwgVmFzaWxldiBjb250cmlidXRlZCBjaGFuZ2VzIHRvIGdlbmVyYXRlIC5weGUKaW1hZ2VzIGJvb3RhYmxlIHZpYSBQWEUuCgorIEVyaWMgQmllZGVybWFuIGFkZGVkIGNvZGUgdG8gM2M5MHguYyB0byBlbmFibGUgdGhlIE5JQzogc2V0IHVwCmJ1c21hc3RlcmluZyBhbmQgc2V0IHRoZSBsYXRlbmN5IHRpbWVyIGluIGNhc2UgdGhlIE5JQyBpcyBub3QgYWxyZWFkeQpzZXQgY29ycmVjdGx5LCBhbmQgZml4ZWQgYSBjb3VwbGUgb2YgcmVsYXRlZCBidWdzIGluIGVlcHJvMTAwLmMuClZlcmlmaWVkIHRoYXQgdGhlIDNjOTB4IGRyaXZlciB3b3JrcyBmb3IgdGhlIDNjOTgwLgoKKyBNb3ZlZCBzdHJuY21wIGZyb20gb3NkZXAuaCB0byBsaW51eC1hc20tc3RyaW5nLmguIFVzZSB0aGUgZ2VuZXJhbAp2ZXJzaW9uIHVzaW5nIHN0cmluZyBvcHMsIG5vdCB0aGUgZGVwcmVjYXRlZCA0ODYgdmVyc2lvbiAod2hhdCB3YXMgSQp0aGlua2luZykuICBBbHNvIGFkZGVkIHN0cmxlbiwgbmVlZGVkIGZvciBGcmVlQlNEIHBhdGNoIGFib3ZlLgoKKyBUaGFua3MgdG8gZ2NjIDMuMCwgZm91bmQgYW5kIGNvcnJlY3RlZCBhIGNvdXBsZSBvZiBDIGNvbnN0cnVjdHMgb2YKdW5kZWZpbmVkIHNlbWFudGljcyBpbiBydGw4MTM5LmMgYW5kIGxhbmNlLmMgb2YgdGhlIGZvcm06IGkgPSArK2kgJgpNQVNLOwoKKyBJbiBDb25maWcvQ0ZMQUdTMzI6IGNoYW5nZWQgLW0zODYgdG8gcHJlZmVyZWQgZm9ybSwgLW1jcHU9aTM4NiwKY2hhbmdlZCAtTzIgdG8gLU9zLCBhbmQgYWRkZWQgLWZmcmVlc3RhbmRpbmcuIFRoZXNlIGNoYW5nZXMgYWxsb3cKd2FybmluZy1mcmVlIGNvbXBpbGF0aW9uIHVuZGVyIGdjYyAzLjAuIE9ubHkgbWltaW1hbCB0ZXN0aW5nIGhhcyBiZWVuCmRvbmUgd2l0aCBnY2MgMy4wIGNvbXBpbGVkIGJpbmFyaWVzLCB3ZSBob3BlIHRoZXJlIGFyZSBubyBwcm9ibGVtcyBidXQKZG9uJ3QgdGhyb3cgYXdheSB5b3VyIGdjYyAyLjkuNSB5ZXQuCgorIEFkZGVkIGFuIC5vcmcgMCB0byBsb2FkZXIuUyBqdXN0IGJlZm9yZSBfc3RhcnQuIE1heSBvciBtYXkgbm90IGZpeAphbGxlZ2VkIGFzc2VtYmx5IHByb2JsZW0gd2l0aCBnYXMgMi4xMS4KCisgQ29zbWV0aWMgY2hhbmdlOiBpbiBib290MWEucyByZXBsYWNlZCAibG9hZGVkIiB3aXRoICJkb25lXHJcbiIgc28gdGhhdApFdGhlcmJvb3QgbWVzc2FnZXMgc3RhcnQgYXQgYmVnaW5uaW5nIG9mIGxpbmUuCgorIE1vcmUgaW1wcm92ZW1lbnRzIHRvIGNvbnRyaWIvbWtmZnduYi4KClJlbGVhc2VkIGFzIEV0aGVyYm9vdCA1LjAuMiAocHJvZHVjdGlvbikKCisgQWRkZWQgbWlzc2luZyBydWxlcyBpbiBnZW5ydWxlcy5wbCBmb3IgLnB4ZSBhbmQgLmx6cHhlIGltYWdlcy4KCisgUGV0ZXIgTGlzdGVyIHVuaWZpZWQgcHhlbG9hZGVyLlMgaW50byBsb2FkZXIuUy4gcHhlbG9hZGVyLlMgbm90CnJlcXVpcmVkIG5vdy4gQWxzbyBmaXhlZCAubHpweGUuCgorIEFkZGVkIG1pc3NpbmcgaW50IGk7IGRlY2xhcmF0aW9uIGluIHRyeV9mbG9wcHlfZmlyc3QoKS4KCisgTG9hZCAlZWR4IHdpdGggZGV2IGp1c3QgYmVmb3JlIGNhbGxpbmcgeHN0YXJ0IGluIGZsb3BweS5jOmJvb3RkaXNrKCkKc28gdGhhdCAlZGwgd2lsbCBoYXZlIGRldmljZSBudW1iZXIsIGp1c3QgbGlrZSBlbnRyeSBmcm9tIEJJT1MuCgorIE1lcmdlZCBpbiBFcmljIEJpZWRlcm1hbidzIHBhdGNoZXMgdG8gYnVpbGQgLmViaSBpbWFnZXMgdGhhdCBydW4gdW5kZXIKTGludXhCSU9TLiBUbyBtYWtlIGFuIGltYWdlLCBlZGl0IENvbmZpZyB0byBlbmFibGUgdGhlIEVCSSBvcHRpb25zIChhbmQKZGlzYWJsZSBUQUdHRURfSU1BR0UpLCB0aGVuIG1ha2UgYmluMzIvZHJpdmVyLmViaSwgd2hlcmUgZHJpdmVyIGlzIHRoZQpuYW1lIG9mIGEgc3VwcG9ydGVkIFBDSSBOSUMuCgpSZWxlYXNlZCBhcyBFdGhlcmJvb3QgNS4xLjEgKGRldmVsb3BtZW50KQoKKyBUaGUgcm90YXRpbmcgYmFyIHByb2dyZXNzIGRpc3BsYXkgaGFzIGJlZW4gcmVwbGFjZWQgYnkgYSBzZXF1ZW5jZSBvZgpkb3RzLCBvbmUgZm9yIGVhY2ggdHJhbnNtaXR0ZWQgcGFja2V0LiBUaGlzIGlzIGtpbmRlciB0byBkdW1iIGRpc3BsYXlzLAplLmcuIHNlcmlhbCB0ZXJtaW5hbHMsIGFuZCBnaXZlcyBhIGJldHRlciBmZWVsIGZvciBob3cgdGhlIGxvYWRpbmcgaXMKZ29pbmcuIElmIHlvdSB3YW50IHRoZSByb3RhdGluZyBiYXIsIHVzZSAtREJBUl9QUk9HUkVTUy4KCisgSW4gbG9hZGVyLlMgY2hhbmdlIC5maWxsIDB4MTgtKC4tX3N0YXJ0KSB0byAub3JnIDB4MTguIE1pZ2h0IGhlbHAKcGVvcGxlIGhhdmluZyBlcnJvcnMgYXNzZW1ibGluZyBpdC4KCisgRG8gSm9uZyBHd2FuIGZvdW5kIGEgM0NvbSA5ODAgd2l0aCBQQ0kgSUQgMHg5ODA1LiBBZGRlZCB0byBjb25maWcuYwphbmQgTklDLiBBZGRlZCBmb3IgZ29vZCBtZWFzdXJlIDB4NzY0NiB3aGljaCBpcyBsaXN0ZWQgYXMgM0NTT0hPMTAwLVRYCmluIExpbnV4IGtlcm5lbCAzYzU5eC5jLgoKKyBBZGQgYSBydWxlIHRvIHRoZSBNYWtlZmlsZSB0byBjaGVjayBmb3IgZ2NjIDIuOTYsIHdoaWNoIGlzIGJ1Z2d5LCBhbmQKdGVsbCB0aGUgdXNlciB0byB1c2Uga2djYyBpbnN0ZWFkIGlmIGZvdW5kLgoKKyBUaWxsIFN0cmF1bWFubiBhZGRlZCBsb25nLW5lZWRlZCBjb2RlIHRvIHdhcm4gd2hlbiBmcmFnbWVudGVkIHBhY2tldHMKc2VlbiAoZW5jb3VudGVyZWQgb24gYSB3aXJlbGVzcyBsaW5rKSBhbmQgdG8gZG8gVURQIHBhY2tldCBjaGVja3N1bW1pbmcuCgorIEEgdHJpbyBvZiBwYXRjaGVzIGZyb20gS2xhdXMgRXNwZW5sYXViLCB0byBmaXggYSBsYW5jZSByaW5nIHBvaW50ZXIKZXJyb3IgaW4gbGFuY2UuYywgdG8gZml4IGEgZm9ybWF0IGVycm9yIGluIHRoZSBtdWx0aWJvb3QgY2FsbCBpbgpvc2xvYWRlci5jIGFuZCBhIHBhdGNoIHRvIGVuYWJsZSBwb3dlcnNhdmluZyB3aGlsZSB3YWl0aW5nIChnb29kIGZvcgpjb21wdXRlIGNsdXN0ZXJzIGFuZCBWTXdhcmUpLCB0aGlzIG9uZSByZXF1aXJpbmcgdGhlIG5ldyBvcHRpb24KLURQT1dFUlNBVkUgaW4gY29tcGlsZXMuCgorIFdoaWxlIHdlIGFyZSBhZGRpbmcgY29tcGlsZSBvcHRpb25zLCAtREZMT1BQWSBoYXMgYmVlbiByZW5hbWVkIHRvCi1EQ0FOX0JPT1RfRElTSyBhcyBGTE9QUFkgaGFzIGJlZW4gYSBtaXNub21lciBldmVyIHNpbmNlIHRoZSBhYmlsaXR5IHRvCmJvb3QgL2Rldi9oZFggYW5kIC9kZXYvc2RYIHdhcyBhZGRlZC4KCisgU3B1cnJlZCBieSBjb3JyZXNwb25kZW5jZSBmcm9tIFRpbGwgU3RyYXVtYW5uIGFuZCBLbGF1cyBFc3BlbmxhdWIsCmhhY2tlZCBwcmludGYgdG8gbm90IHJlcXVpcmUgYSBidWZmZXIuIE5vdyBwcmludGYgb3V0cHV0IGNhbiBiZQphcmJpdHJhcmlseSBsb25nIGFzIGl0IG5vIGxvbmdlciBuZWVkcyBhIGJ1ZmZlciB0byBhc3NlbWJsZSB0aGUKY2hhcmFjdGVycyBiZWZvcmUgc2VuZGluZyB0byBwdXRjaGFyOyBpdCBvdXRwdXRzIG9uIHRoZSBzcG90IGZvcgpub24tZm9ybWF0IGNoYXJzIGFuZCAlcyBpdGVtcywgYW5kIGF0IHRoZSBlbmQgb2YgdGhlIGl0ZW0gZm9yIG5vbi0lcwppdGVtcy4KCisgRFJJVkVSIEFORCBFWFRFTlNJT04gV1JJVEVSUyBOT1RFISAocylwcmludGYgZm9ybWF0cyBoYXZlIGJlZW4gY2hhbmdlZAp0byBiZSBhIHN1YnNldCBvZiB0aG9zZSBpbiBnbGliYyB0byByZWR1Y2UgY29uZnVzaW9uLiBUaGUgY2hhbmdlcyBhcmUgJXgKLT4gJWhYLCAlYiAtPiAlaGhYLCBhbmQgJUkgLT4gJUAuIExvd2VyIGNhc2UgeCBmb3JtYXRzIGFyZSBhbHNvCmF2YWlsYWJsZSBub3cuIFRoZSBvbmx5IHZhcmlhbmNlcyBmcm9tIGdsaWJjIGFyZSAlQCBmb3IgZG90dGVkIHF1YWQgSVAKYWRkcmVzc2VzIChmb3JtZXJseSAlSTsgJUkgaXMgbm93IHVzZWQpLCAlISBmb3IgNiBieXRlIEV0aGVybmV0CmFkZHJlc3NlcywgYW5kIHRoYXQgcHJpbnRmIHJldHVybnMgdm9pZC4gVGhhbmtzIHRvIEtsYXVzIEVzcGVubGF1YiBmb3IKYXNzaXN0YW5jZSBvbiB0aGlzLCBhZnRlciBhZGRpbmcgdGhlICUhIGZvcm1hdCwgaGUgY2xlYW5lZCB1cCBhbGwgb2YgdGhlCkV0aGVybmV0IGFkZHJlc3MgZGlzcGxheSBjb2RlIGluIHRoZSBkcml2ZXJzLgoKKyBNb3JlIGNsZWFudXAgcGF0Y2hlcyBmcm9tIEtsYXVzIEVzcGVubGF1YiAoaGUncyBiZXR0ZXIgdGhhbiBsaW50OwpwZW9wbGUgd2hvIGhhdmUgdXNlZCBCZWxsIExhYnMgVW5peCB3aWxsIGtub3cgd2hhdCBsaW50IGlzKS4gQ2hhbmdlcwpub3RlZCBoZXJlIGZvciBwb3N0ZXJpdHkuCgozYzUwOS5jOiBjb25zaXN0ZW50IG5vbi11c2Ugb2YgIyBtb2RpZmllciBmb3IgZGVidWdnaW5nIG91dHB1dAozYzU5NS5jOiBjb25zaXN0ZW50IG5vbi11c2Ugb2YgIyBtb2RpZmllciBmb3IgZGVidWdnaW5nIG91dHB1dAozYzkweC5jOiB1c2Ugb3B0aW1hbCAleCB2YXJpYW50LCBQQ0kgYnVzL2Z1bmN0aW9uIG51bWJlcnMgYXJlIGFsd2F5cyBzbWFsbApDb25maWc6IFJlcGxhY2UgYSBUQUIgYnkgdHdvIHNwYWNlcyBpbnNpZGUgdGhlIGRlc2NyaXB0aW9ucwplZXBybzEwMC5jOiA2LT5FVEhfQUxFTiwgUENJIGJ1cy9mdW5jdGlvbiBudW1iZXJzIGFyZSBhbHdheXMgc21hbGwKZmxvcHB5LmM6IG9wdGltYWwgJXggdmFyaWFudApnZW5ydWxlcy5wbDogY29uc2lzdGVudCB1c2Ugb2YgVEFCIGNoYXJhY3RlcnMKaTgyNTg2LmM6IHRoZSBFTkVUIGFkZHJlc3MgcHJpbnRpbmcgcGF0Y2ggZm9yIHRoZSBFWE9TMjA1IGdvdCBsb3N0IHNvbWVob3cuLi4uCm1haW4uYzogY2xlYW51cCBvZiB0aGUgVURQX0NIRUNLU1VNIGNvbW1lbnQgc29tZSBlZGl0b3IgbWVzc2VkIHVwLCBtYWtlIHRoZQogICAgYXNzZW1ibHkgZnJhZ21lbnQgdXNlIHRoZSBub3JtYWwgZm9ybWF0dGluZywgZml4IHRoZSByZWdpc3RlciBhc3NpZ25tZW50CiAgICBzcGVjaWZpY2F0aW9uIGZvciB0aGUgJWJ4IHJlZ2lzdGVyIHRvIHVzZSB0aGUgImIiIGNvbnN0cmFpbnQgaW5zdGVhZCBvZgogICAgImJ4IiAtIHRoZSB4IG1ha2VzIG5vIHNlbnNlLi4uCm5hdHNlbWkuYzogJVggY2FzZSBmaXguLi4KbnM4MzkwLmM6IG9wdGltYWwgJXggdmFyaWFudApwY2kuYzogZml4IGJhZCBMaW51eCBwb3J0IChtb3N0IG1lc3NhZ2VzIHRydW5jYXRlZCB0aGUgaGV4IHZhbHVlcykKc2lzOTAwLmM6IGEgdmFsdWUgcmVhZCB3aXRoIGlubCgpIHNob3VsZCBwcm9iYWJseSghKSBiZSBwcmludGVkIHdpdGggJVgKc3RhcnQzMi5TOiBtb3ZlIGFyb3VuZCB0aGUgI2VuZGlmcyBhIGxpdHRsZQp0aW1lci5jOiBmaXggc3BhY2UvdGFiIGNoYXJhY3RlcnMKdmlhLXJoaW5lLmM6IGFsbCB2YWx1ZXMgInByaW50ZWQiIGluc2lkZSB0aGUgY29tbWVudHMgYXJlIDMyIGJpdCBpbnRlZ2Vycwp3ZDg5Yzg0MC5jOiBQQ0kgYnVzL2Z1bmN0aW9uIG51bWJlcnMgYXJlIGFsd2F5cyBzbWFsbAoKUmVsZWFzZWQgYXMgRXRoZXJib290IDUuMC4zIChwcm9kdWN0aW9uKQoKKyBOZXcgdmVyc2lvbiBvZiBjb250cmliL0Rpc2tsZXNzLUZyb20tTlQvZnVydG1heWVyLmh0bWwuIEkgbWFuZ2xlZCB0aGUKcHJldmlvdXMgdmVyc2lvbiBieSBmb3JnZXR0aW5nIHRvIGV4dHJhY3Qgd2l0aCBtZXRhbWFpbCBzbyBpdCB3YXMgc3RpbGwKcXVvdGFibGUtcHJpbnRhYmxlIGVuY29kZWQuCgorIFJlbmFtZWQgZG9fcHJpbnRmIHRvIHZzcHJpbnRmIGJlY2F1c2UgdGhhdCdzIHRoZSBzdGFuZGFyZCBmdW5jdGlvbiBpdApoYXMgdGhlIHNhbWUgc2lnbmF0dXJlIGFzLgoKKyBNb3JlIHBhdGNoZXMgZnJvbSBLbGF1cyBFc3BlbmxhdWIuIEluIGhpcyBvd24gd29yZHM6CgpUaGUgcGF0Y2ggdG8gYWRkIFVEUCBjaGVja3N1bXMgZm9yIHRyYW5zbWl0dGVkIHBhY2tldHMgaXMgYXR0YWNoZWQuCkp1c3QgZG9uJ3QgYmUgc3VycHJpc2VkIGlmIHNvbWUgcGFja2V0IHNuaWZmZXIgdGVsbHMgeW91IHRoYXQgdGhlCmNoZWNrc3VtIGZvciB0aGUgTkZTX0xPT0tVUCBwYWNrZXRzIGFyZSB3cm9uZyBhbmQgdGhhdCB0aGUgZmlsZW5hbWUgaXMKdHJ1bmNhdGVkLiAgSXQncyBhIGJ1ZyBpbiB0aGUgc25pZmZlciwgbm90IGluIEV0aGVyYm9vdC4KCk9oLCBhbmQgdGhlIHNtYWxsIGNoYW5nZSBpbiB1ZHBjaGtzdW0oKSBhbG1vc3QgbWFrZXMgdXAgZm9yIHRoZQppbmNyZWFzZWQgY29kZSBzaXplLgoKSSBhbHNvIHJld3JvdGUgdGhlIE5GUyBjb2RlIHRvIHVzZSBwb2ludGVycyBpbnN0ZWFkIG9mIGFycmF5IGFjY2Vzc2VzLgpUaGlzIHJlZHVjZWQgdGhlIGNvZGUgc2l6ZSBieSAxMjQgYnl0ZXMuICBQYXRjaCBhdHRhY2hlZC4KClRoZSBsYXN0IHBhdGNoIGluIHRoaXMgbWFpbCBmaXhlcyBtaXNjIHRoaW5nczogYSB0eXBvIGluIG1pc2MuYwooRE9UX1BST0dSRVNTIGluc3RlYWQgb2YgQkFSX1BST0dSRVNTKSwgYW5kIHR3aWRkbGUoKSBpcyBvbmx5IGNhbGxlZCBpZgp0aGUgcGFja2V0IHR5cGUgaXMgSVAuICBUaGlzIG1ha2VzIHRoZSBvdXRwdXQgbmljZXIgLSB0aGUgZG90cyBhcmUgYWxzbwpwcmludGVkIGluIHNvbWUgbm9uLWFwcHJvcmlhdGUgcGxhY2VzIGZvciBBUlAgcmVwbHkgcGFja2V0cy4gIFRoZQppbXBvcnRhbnQgcGFja2V0cyBhcmUgSVAgYW55d2F5LgoKKyBUaGUgb3B0aW9uIEJPT1RQX0RBVEFfQVRfMHg5M0MwMCBpcyBkZXByZWNhdGVkLCBpbiBwcmVwYXJhdGlvbiBmb3IKZXhwYW5kaW5nIHRoZSBwYXJhbWV0ZXIgYXJlYSBhbmQgdGhlIGZpcnN0MzIuYyBhcmVhLgoKKyBNYXJ0eSBDb25ub3IgZm91bmQgYSB0eXBvIGluIGluZGV4Lmh0bWwsIHNob3VsZCBiZTogRXRoZXJib290IGNhbiB3b3JrCndpdGguLi4sIG5vdCBFdGhlcm5ldCBjYW4gd29yayB3aXRoLi4uIE9vb3BzLgoKKyBFcmljIEJpZWRlcm1hbiB0cmllZCBhIHBhdGNoIG9mIFByZXN0b24gV2lsc29uJ3MgYW5kIGRpc2NvdmVyZWQgdGhhdApESSBzaG91bGQgYmUgcHJlZml4ZWQgYnkgRVMgaW4gdGhlIHRlc3QgZm9yIGEgUG5QIEJJT1MgaW4gbG9hZGVyLlMgdG8gYmUKc3VyZS4gIEZ1cnRoZXJtb3JlIHNvbWUgQklPU2VzIGFyZSBub3QgZnVsbHkgY29tcGxpYW50IGFuZCB3ZSBuZWVkIGFuCiNpZm5kZWYgUE5QX0JVVF9OT1RfQkJTX0NPTVBMSUFOVCB0byB3b3JrIGFyb3VuZCB0aGF0LgoKKyBPb3BzLCB0aGVyZSdzIG5vIGVudHJ5IGluIGNvbmZpZy5jIGZvciB0aGUgREZFNTMwVFgrIGV2ZW4gdGhvdWdoCnRoZXJlJ3Mgb25lIGluIE5JQy4KClJlbGVhc2VkIGFzIEV0aGVyYm9vdCA1LjAuNCAocHJvZHVjdGlvbikKCisgRml4ZWQgYSBzdHJ1Y3QgYWxpZ25tZW50ICg4LWJ5dGUgY29uc3RyYWludCkgcHJvYmxlbSBpbiBsYW5jZS5jIGNhdXNlZApieSB0aGUgaW50cm9kdWN0aW9uIG9mIHRoZSByeF9pZHggZmllbGQgYnkgbW92aW5nIHJ4X2lkeCB0byB0aGUgZW5kIG9mCnRoZSBzdHJ1Y3QuIEZvdW5kIGJ5IFJpenNhbnlpIFpzb2x0LiBLbGF1cyBFc3BlbmxhdWIgYWxzbyBzdWdnZXN0ZWQKaW5jcmVhc2luZyBhbGwgdGhlIFJ4IGJ1ZmZlcnMgYnkgNCBieXRlcyBiZWNhdXNlIG9mIHRoZSBjaGVja3N1bSBzdG9yZWQKYXQgdGhlIGVuZC4KCisgRnJlZCBHcmF5IGNvbnRyaWJ1dGVkIGNoYW5nZXMgaW4gdHVsaXAuYyB0byBjaGVjayBmb3IgYSBkdXBsZXgKY29ubmVjdGlvbiBhbmQgdG8gbW9kaWZ5IHRoZSBjb250cm9sbGVyIHJlZ2lzdGVyIGlmIHNvLiBNYXJ0eSBmaXhlZCBhbgp1bmFzc2lnbmVkIHRvICJuZWdvdGlhdGVkIiB2YXJpYWJsZS4KCisgTWFyayBHIG9mIElucHJpbWlzIFRlY2hub2xvZ2llcyBjb250cmlidXRlZCBhbm90aGVyIEZBMzExIChOYXRpb25hbApTZW1pY29uZHVjdG9yIERQODM4MTUpIGRyaXZlciwgYWxzbyBiYXNlZCBvbiB0aGUgRG9uYWxkIEJlY2tlciBMaW51eApkcml2ZXIuCgorIEFybWluIFNjaGluZGxlciBjb250cmlidXRlZCBhIHBhdGNoIHRvIGFsbG93IGJvb3RpbmcgTHlueE9TIEtESQppbWFnZXMuCgorIE1vdmVkIGNvZGUgdG8gc2V0IFBDSSBidXNtYXN0ZXJpbmcgYW5kIHJlYXNvbmFibGUgbGF0ZW5jeSB0byBhIHJvdXRpbmUKaW4gcGNpLmMgYW5kIGFkZGVkIGNhbGxzIHRvIHRoaXMgcm91dGluZSBmcm9tIGFsbCBQQ0kgZHJpdmVycy4KCisgTmV3IGZpbGVzIGZvciBjb250cmliL21rZmZ3bmIgZm9yIHZlcnNpb24gMS45LjExIGFuZCAxLjkuMTYuCgorIFJlbW92ZWQgQk9PVFBfREFUQV9BVF8weDkzQ3h4IG9wdGlvbi4KCisgQ29udmVydCBlcGljMTAwIGRyaXZlciB0byB1c2UgaGFyZHdhcmUgdGltZXIgZm9yIHRyYW5zbWl0IHRpbWVvdXQgYW5kCnJlbW92ZSBwb2xsaW5nIGxvb3AgZnJvbSByZWNlaXZlIHJvdXRpbmUuCgorIFN0ZXZlIFRpbGRlbiBwb2ludGVkIG91dCB0aGF0IEJPT1RfSU5UMThIIGlzIGEgTENPTkZJRyBvcHRpb24sIG5vdCBhCkNGTEFHUzMyIG9wdGlvbi4gUHV0IG5vdGUgdW5kZXIgb3B0aW9uIGRvY3VtZW50YXRpb24gYW5kIGFsc28gYWRkZWQgYQpjb21tZW50ZWQtb3V0IGV4YW1wbGUgaW4gQ29uZmlnLiBTdGV2ZSBhbHNvIGNvbnRyaWJ1dGVkIGEgcGF0Y2i4IGluCmNvbnRyaWIvYXV0by1kZWZhdWx0LCB3aGljaCBhdXRvYm9vdHMgZnJvbSB0aGUgbmV4dCBkZXZpY2UgaWYgYSBkaXNrIGlzCmRldGVjdGVkLgoKKyBQTlBfQlVUX05PVF9CQlNfQ09NUExJQU5UIG9wdGlvbiByZW5hbWVkIHRvIEJCU19CVVRfTk9UX1BOUF9DT01QTElBTlQuCgorIE1lcmdlZCBpbiBWYXNpbCBWYXNpbGV2J3MgY2hhbmdlcyB0byBsb2FkZXIuUyB0byByZWxlYXNlIG1lbW9yeSB0YWtlbgpieSBQWEUgcHJvcGVybHkuCgorIEU4MjAgbWVtb3J5IGRldGVjdGlvbiByb3V0aW5lcyBhZGRlZCBieSBFcmljIEJpZWRlcm1hbi4gTWF5IGluY3JlYXNlCnNpemUgb2YgYnNzIHNlZ21lbnQgYW5kIHB1c2ggbGFyZ2UgZHJpdmVycywgZS5nLiBUdWxpcCwgbmVhcmVyIHRvIGxpbWl0LApwbGVhc2UgcmVwb3J0LgoKKyBEZWZhdWx0IHRvIC1EQ09OR0VTVEVEIGluIENvbmZpZywgbWF5IGhlbHAgb24gYnVzeSBuZXR3b3Jrcy4KCisgQWRkIEhvbHRlayBIVDgwMjMyIHRvIGxpc3Qgb2YgTkUyMDAwIFBDSSBjbG9uZXMuCgorIFJlbW92ZSBwcm9oaWJpdGlvbiBvbiBsb2FkaW5nIDwgMHgxMDAwMCBpbiBFTEYgaW1hZ2VzIHNpbmNlIGJ5IGRlZmF1bHQKZHJpdmVycyBkb24ndCB1c2UgbWVtb3J5IDwgMHgxMDAwMCBhbnkgbW9yZSwgd2l0aCA0OGtCIHRvIHJ1biBpbi4KCisgUHV0IGRlZmluZSBvZiBFVEhfTUFYX01UVSBpbiBldGhlcmJvb3QuaCBpbnNpZGUgI2lmbmRlZiBzbyB0aGF0IGl0IGNhbgpiZSBvdmVycmlkZW4gZnJvbSBNYWtlZmlsZS4KCisgR3VzdGF2byBKdW5pb3IgQWx2ZXMgYWRkZWQgLmN2c2lnbm9yZSBmaWxlcyBmb3Igc3JjL2JpbiBhbmQgc3JjL2JpbjMyLgoKKyBTaG9ydCBub3RlIG9uIGhvdyB0byBtYWtlIHRvbXNydGJ0IG5ldGJvb3RhYmxlIGluIGNvbnRyaWIvdG9tc3J0YnQuCgpUaGlzIHJlbGVhc2UgaXMgZGVkaWNhdGVkIHRvIHRoZSBtZW1vcnkgb2YgbXkgbW90aGVyIChKdWx5IDE5MTcgLQpOb3ZlbWJlciAyMDAxKSBbS2VuIFlhcF0uCgpSZWxlYXNlZCBhcyBFdGhlcmJvb3QgNS4wLjUgKHByb2R1Y3Rpb24pCgorIENoYW5nZXMgdG8gZW5hYmxlIGZhMzExdG9vIGRyaXZlciB3aGljaCB3ZXJlIG92ZXJsb29rZWQgaW4gNS4wLjUuCgorIENoaWVuLVl1IENoZW4gc2VudCBpbiBwYXRjaGVzIHRvIHN1cHBvcnQgdGhlIFNpUzYzMEVULiBJbmRlcGVuZGVudGx5LApEb3VnIEFtYnJpc2tvIG1hZGUgdGhlIHNhbWUgY2hhbmdlcy4gTWFydHkgQ29ubm9yIHRpZGllZCB0aGUgcGF0Y2hlcy4KCisgSW4gbWlzYy5jLCB3aGVuIGVuYWJsaW5nL2Rpc2FibGluZyBHYXRlIEEyMCwgY2FsbCBpbnQgMHgxNSB3aXRoCmF4PTB4MjQweCB0byBkbyBoYW5kbGluZyBmaXJzdCwgYW5kIGlmIHRoYXQgaXMgbm90IHN1cHBvcnRlZCwgZmFsbCBiYWNrCnRvIHVzaW5nIHRoZSBrZXlib2FyZCBjb250cm9sbGVyLiBIb3BlZnVsbHkgdGhpcyB3aWxsIHNvbHZlIEdhdGUgQTIwCnByb2JsZW1zIGZvciByZWNlbnQgQklPU2VzLgoKKyBBZGQgbWlzc2luZyBlbnRyeSB0byBjb25maWcuYyBmb3IgdGhlIE1hY3Jvbml4IDk4NzEzIChkZXZpY2UgSUQKMHg1MTIpLiBCdXQgbGF0ZXN0IHJlcG9ydCBpcyB0aGF0IGl0IGRvZXNuJ3QgdHJhbnNtaXQuIEFueWJvZHkgd2FubmEKZGVidWc/CgorIE9taXQgdGVzdCBmb3IgcG9pbnRlciB0byAkUG5QIHN0cmluZyBmb3IgSVNBIE5JQyBpbWFnZXMsIGl0IG1heQp0cmlnZ2VyIGZhbHNlIHJlY29nbml0aW9uIG9mIGEgUG5QIFJPTS4gSnVzdCB1c2UgbGVnYWN5IG1vZGUuCgorIE1lcmdlZCBpbiBDaHJpc3RvcGhlciBMaSdzIEludGVsIEUxMDAwIGdpZ2FiaXQgRXRoZXJuZXQgZHJpdmVyLgoKKyBSSVNLTyBHZXJnZWx5IGZvdW5kIHRoYXQgdGhlIEFETVRlayBDb21ldCA5ODMgd29ya3Mgd2l0aCB0aGUgdHVsaXAKZHJpdmVyIGlmIHlvdSBwcm92aWRlIHRoZSByaWdodCBQQ0kgSURzLgoKKyBSb2hpdCBKYWxhbiBjb250cmlidXRlZCBwYXRjaGVzIHRvIHN1cHBvcnQgRnJlZUJTRCBib290aW5nIHZpYSBQWEUuCihnZW5ydWxlcy5wbCBuZWVkZWQgaGFja2luZyB0byBtYWtlIGl0IGlnbm9yZSB0aGUgc3lzdGVtIGluY2x1ZGVzIGluCm9zZGVwLmguKSAgQW55Ym9keSB3YW50IHRvIHNlZSBpZiBpdCBjYW4gYmUgbWFkZSB0byBzdXBwb3J0IHB4ZWxpbnV4PwpbR2xhbmNlZCBhdCBpdCBhbmQgSSB0aGluayBnZW5lcmFsIFBYRSBzdXBwb3J0IG1heSBiZSBoYXJkLCB5b3UgbWF5IG5lZWQKYW4gRXRoZXJib290IHNwZWNpZmljIHNlY29uZGFyeSBsb2FkZXIuIC0gS2VuXQoKKyBNZXJnZWQgaW4gRXJpYyBCaWVkZXJtYW4ncyBwYXRjaGVzIHRvIGFsbG93IHRyeWluZyBhbGwgUENJIGRldmljZXMuCgorIEZyb20gRXJpYyBCaWVkZXJtYW46IEEgc21hbGwgcGF0Y2ggdG8gYWxsb3cgdGhlIHNlcmlhbCBwb3J0IHBhcmFtZXRlcnMKdG8gYmUgdW5jaGFuZ2VkIGF0IGFjdGl2YXRpb24uICBNYWpvciBjaGFuZ2VzIHRvIHN0YXJ0MzIuUyB0byBtZXJnZQpMaW51eEJJT1Mgc3VwcG9ydC4gIE5ldyBmaWxlcyBmb3IgTGludXhCSU9TIHN1cHBvcnQuICBQQ0JJT1Mgc3BlY2lmaWMKZnVuY3Rpb25zIHNwbGl0IG91dCBpbnRvIHBjYmlvcy5TLiBNYXNzaXZlIGNsZWFuIHVwIG9mIFBDSSBzdWJzeXN0ZW0KbG9naWMuCgorIEplYW4tSmFjcXVlcyBNaWNoZWwgc2VudCBpbiBhIGZpeCBmb3IgdmlhLXJoaW5lLmMgdG8gbWFrZSBzdXJlIHRoZQp0cmFuc21pdCBpcyBmaW5pc2hlZCBiZWZvcmUgcmV0dXJuaW5nIGZyb20gdGhlIF90cmFuc21pdCByb3V0aW5lLgpBbHNvIGZvdW5kIGEgYnVnIGluIGdjYyAzLjAuMyB0aGF0IGFmZmVjdGVkIHJ0bDgxMzkuYy4gTW92aW5nIHRoZQphc3NpZ25tZW50IHRvIG5zdHlwZSBpbiBfdHJhbnNtaXQgdHdvIGxpbmVzIHVwIGF2b2lkcyBpdC4KCisgQmFzZWQgb24gdGhlIGV4cGVyaWVuY2Ugb2YgWWVkaWR5YWggQmFyLURhdmlkLCBpbiBlZXBybzEwMC5jLAppbmNyZWFzZWQgdWRlbGF5IGFyb3VuZCBsaW5lIDUzMyBhZnRlciBnZXR0aW5nIE1BQyBhZGRyZXNzIHRvCnVkZWxheSgxMDAwMCkuCgorIEFkZGVkIFBDSSBJRHMgZm9yIFJUTDgxMjksIHdoaWNoIGNhbiB1c2UgdGhlIHJ0bDgxMzkgZHJpdmVyLgoKKyBBZGRlZCBQQ0kgSURzIGZvciAzQ29tOTA1IHdpdGggZGV2aWNlIElEIDB4OTA1OC4gQ29uZmlybWVkIHdvcmtpbmcgYnkKRmFiaW8gUGFwYS4KCisgQWRkZWQgUENJIElEcyBmb3IgRC1MaW5rIDUyOCwgd2hpY2ggaXMgYSBQQ0kgTkUyMDAwIGNsb25lLgoKKyBQaGlsaXAgUi4gQXVsZCBmb3VuZCBhIGJsb2NrIG51bWJlciByb2xsb3ZlciBidWcgZHVlIHRvIHByb21vdGlvbiB0bwpzaWduZWQgaW4gbWFpbi5jLgoKKyBMdWlnaSBSaXp6byBzZW50IGluIGEgcGF0Y2ggdG8gbmZzLmMgdG8gaW1wbGVtZW50IGFuIGFkYXB0aXZlIHRpbWVvdXQuCgorIE5ldyBjb25maWcgZmlsZXMgZm9yIGZsb3BweWZ3LTEuOS4xOSBpbiBjb250cmliL21rZmZ3bmIvLgoKKyBHbGVubiBNY0tlY2huaWUgY29udHJpYnV0ZWQgYSBQZXJsIHNjcmlwdCBmb3IgbWFraW5nIGEgbmV0Ym9vdGFibGUKaW1hZ2UgZnJvbSB0aGUgRGFjaHN0ZWluIExSUCBmaXJld2FsbCBkaXN0cmlidXRpb24gZmxvcHB5LiBJdCdzIGluCmNvbnRyaWIvbWtscnBuYi8KCisgQXQgdGhlIHJlcXVlc3Qgb2YgR3JlZyBCZWVsZXksIHdobyBnb3QgaXJhdGUgbWFpbCBmcm9tIGtlcm5lbCBOSUMKZGV2ZWxvcGVycywgcHV0IGluIGEgd2FybmluZyBpbiB0aGUgTWFrZWZpbGUgYWJvdXQgdGhlIDNjOTB4IFhDVlIKb3B0aW9ucyB3aGljaCBtYXkgYWZmZWN0IGxhdGVyIG9wZXJhdGlvbiB3aXRoIHRoZSBMaW51eCBkcml2ZXIuIEZvciB5b3UKdGlua2VyZXJzIG91dCB0aGVyZSwgaWYgeW91IGRvbid0IGtub3cgd2hhdCB5b3UncmUgZG9pbmcsIHBsZWFzZSByZWFkCjNjOTB4LnR4dCBvdmVyIGFuZCBvdmVyIGFnYWluIHVudGlsIHlvdSB1bmRlcnN0YW5kIHdoYXQgdGhvc2Ugb3B0aW9ucwpkby4gSWYgeW91IGRvbid0IHVuZGVyc3RhbmQsIHBsZWFzZSBhc2sgb24gdGhlIEV0aGVyYm9vdCBtYWlsaW5nIGxpc3QuCkFuZCBkb24ndCBjb21wbGFpbiB0byB0aGUga2VybmVsIGRldmVsb3BlcnMsIGl0J3Mgbm90aGluZyB0byBkbyB3aXRoCnRoZW0uIElmIHlvdSBtdXN0IGNoYW5nZSB0aGUgWENWUiBvcHRpb25zIG9uIGEgYm9hcmQsIHBsZWFzZSBkb2N1bWVudCBpdApwcm9taW5lbnRseSBvbiB0aGUgYm9hcmQgc28gdGhhdCB0aG9zZSB3aG8gY29tZSBhZnRlciB5b3Ugd29uJ3QKZW5jb3VudGVyIHN0cmFuZ2UgYmVoYXZpb3VyIGFuZCBjb21wbGFpbiB0byB0aGUga2VybmVsIGRldmVsb3BlcnMuCkdyZWcgYWxzbyBzdXBwbGllZCBhIHBhdGNoIHRvIDNjOTB4LmMgdG8gcHJpbnQgYSB3YXJuaW5nIG1lc3NhZ2UuCgpSZWxlYXNlZCBhcyBFdGhlcmJvb3QgNS4wLjYgKHByb2R1Y3Rpb24pCgorIEFuZHJldyBCZXR0aXNvbiBzZW50IGluIGEgcGF0Y2ggYW5kIHRoZSBleHBsYW5hdGlvbjogSGVyZSdzIGEgcGF0Y2gKZm9yIHNvbWUgY2hhbmdlcyBJIG1hZGUgdG8gRXRoZXJib290LTUuMC42IGJlY2F1c2UgaXQgZGlkbid0IHdvcmsgd2l0aCBhClNNQyBFdGhlckVaIGluIGFuIG9sZCBQQ0kvSVNBIGJ5YnJpZCBidXMgc3lzdGVtLiAgVGhlIElTQSBzaGFyZWQgbWVtb3J5Cmlzbid0IGFjY2Vzc2libGUgb24gbWFueSBzdWNoIHN5c3RlbXMsIHNvIHRoZSBvbmx5IHdheSB0byBkbyBJL08gdG8gdGhlCmNhcmQgaXMgaW4gUHJvZ3JhbW1lZCBJL08gbW9kZS4gIEkgc3R1ZGllZCB0aGUgTGludXggMi4yLjE5IGRyaXZlcgooZHJpdmVycy9uZXQvc21jLXVsdHJhLmMpIGFuZCBoYWNrZWQgd2hhdCBJIGZpZ3VyZWQgd2FzIGVxdWl2YWxlbnQgY29kZQppbnRvIHNyYy9uczgzOTAuYywgYW5kIGl0IGV2ZW50dWFsbHkgd29ya2VkLiAgQWxsIG15IG5ldyBjb2RlIGlzIGVuYWJsZWQKd2l0aCAtRFdELTc5MF9QSU8uCgorIFNtYWxsIGVycm9yIGluIHRoZSBBRE1URUsgQ29tZXQgOTgzIElEcyBmaXhlZC4KCisgTWljaGFlbCBSZW5kZWxsIHNlbnQgaW4gcGF0Y2hlcyBmb3IgM2M5MHguYyB0byBnZXQgdGhlIE1BQyBhZGRyZXNzCmZyb20gbG9jYXRpb24gMTAgb2YgdGhlIEVFUFJPTSBvbndhcmRzLCBsaWtlIHRoZSBMaW51eCBkcml2ZXIgZG9lcy4gU29tZQo5MDVzIGhhdmUgdGhlIE1BQyBhZGRyZXNzIGF0IGJvdGggMCBhbmQgMTAgd2hpY2ggaXMgd2h5IGl0IHdvcmtlZCBmb3IKc29tZSBib2FyZHMuCgorIE1pY2hhZWwgQnJvd24gc2VudCBpbiBkcml2ZXJzIGZvciAzIHdpcmVsZXNzIE5JQ3MgYmFzZWQgaW4gdGhlIHByaXNtMgpjaGlwc2V0LCBhbmQgYSBzbWFsbCBwYXRjaCB0byBydGw4MTM5LmMgdG8gYWJvcnQgZGV0ZWN0aW9uIG9uIG5vIGxpbmsuCgorIFJld3JvdGUgbWFrZXJvbS5jIGluIFBlcmwgdG8gZ2l2ZSBtYWtlcm9tLnBsLgoKKyBSZXdyaXRlIGdlbnJ1bGVzLnBsIHRvIHBhcnNlIGEgbmV3IE5JQyBmb3JtYXQuCgorIFRpbW90aHkgTGVnZ2UgY29udHJpYnV0ZWQgYSAzYzUxNSBkcml2ZXIuIFJlcXVpcmVzIGEgSVNBIFBuUCBCSU9TLgoKKyBNb2RpZmllZCBjYWxsIHRvIGludDE1aC9lODAxIGluIHBjYmlvcy5TIHRvIGNoZWNrIGZvciByZXR1cm4gdmFsdWVzIGluCkNYLCBEWCBpbiBjYXNlIEJJT1MgZG9lc24ndCByZXR1cm4gdGhlbSBpbiBBWCwgQlguCgorIFJpY2hhcmQgQ2hhbiBzZW50IGluIFBDSSBJRHMgZm9yIGFub3RoZXIgSW50ZWwgRUVQUk8xMDAgcHJvZHVjdC4KT21pZ2F3ZCB3aWxsIHRoZXkgZXZlciBydW4gb3V0IG9mIEVFUFJPMTAwIG1vZGVsIG51bWJlcnMuIDotKQoKKyBDaGFuZ2VkIGxvY2F0aW9uIG9mIHNldHVwIGhlYWRlciBmcm9tIDB4OTdlMDAwIHRvIDB4OTNlMDAwIGluCm1rUU5YbmJpLmMgZm9yIHJlY2VudCBFdGhlcmJvb3QgdmVyc2lvbnMuCgorIFJlbmFtZWQgbWVtYmFzZSB0byBhZGRyMSB0byByZWZsZWN0IGl0cyBsYWNrIG9mIHByZWRlZmluZWQgbWVhbmluZyBpbgpQQ0kgY29uZmlnIHNwYWNlLiBTaG91bGQgZG8gc2ltaWxhciB0byBpb2FkZHIsIGJ1dCB0b28gbXVjaCB3b3JrLgoKKyBTYW11ZWwgQ2xlbWVtdHMgZm91bmQgYW5vdGhlciBJbnRlbCBFRVBSTzEwMCBkZXZpY2UgSUQsIDB4MTAzOS4KCisgVXBkYXRlZCBpbnN0cnVjdGlvbnMgaW4gY29udHJpYi90b21zcnRidCBmb3IgbGF0ZXN0IDIuMC4xMDMgcmVsZWFzZS4KCisgRm9sZGVkIGluIGNoYW5nZXMgYnkgTWljaGFlbCBCcm93biB0byBzZW5kIFBDSSBhbmQgSVNBIElEcyB0byB0aGUKc2VydmVyIGFuZCB0byBlbmNhcHN1bGF0ZSBFdGhlcmJvb3Qgc3BlY2lmaWMgb3B0aW9ucy4gQ2hhbmdlZCBzY2hlbWUgdG8Kc2VuZCBmaXhlZCBiaW5hcnkgc3RydWN0dXJlIGluc3RlYWQgb2YgdmFyaWFibGUgbGVuZ3RoIHN0cmluZy4KCisgQnVnIGluIHNpczkwMC5jLCB3cm9uZ2x5IGNsYXNzaWZpZXMgcmV2aXNpb25zIDB4ODEgYW5kIDB4ODIgYmVjYXVzZQpmaXJzdCB0ZXN0IGNhdGNoZXMgdG9vIG1hbnkgcmV2aXNpb25zLiBDaGFuZ2VkIHRvIG1hdGNoIHRoZSBMaW51eApkcml2ZXIuCgorIEZvdGlzIEFuZHJpdHNvcG91bG9zIGZvdW5kIGEgc21hbGwgYnVnIGluIGNzODl4MC5oLCBUWF9BRlRFUl9BTEwKc2hvdWxkIGJlIDB4MEMwLgoKKyBHcmVhdCBpZGVhIGJ5IEVyaWMgQmllZGVybWFuLiBJZ25vcmUgREhDUCBvZmZlcnMgd2l0aCB6ZXJvIHNlcnZlcgpJUCwgb3IgbnVsbCBmaWxlbmFtZSB1bmxlc3MgREVGQVVMVF9CT09URklMRSBpcyBkZWZpbmVkLiBUaGlzIHdpbGwKaWdub3JlIG1vc3QgV2luZG93cyBESENQIHNlcnZlcnMuCgorIFBhdHJpayBXZWlza2lyY2hlciBzZW50IGluIGEgcGF0Y2ggZm9yIHJ0bDgxMzkuYyB0byBicmluZyBpdCB1cCB0bwpkYXRlIHdpdGggdGhlIExpbnV4IGRyaXZlci4KClJlbGVhc2VkIGFzIEV0aGVyYm9vdCA1LjAuNyAocHJvZHVjdGlvbikKCisgTXVsdGljYXN0IHN1cHBvcnQgYW5kIExPVFMgb2Ygb3RoZXIgY2hhbmdlcyBieSBFcmljIEJpZWRlcm1hbi4KCisgQnVpbHRpbiBtZW51aW5nIGhhcyBiZWVuIHJlbW92ZWQuCgorIFBhdGNoZXMgZm9yIEZyZWVCU0QgYnkgRG91ZyBBbWJyaXNrby4KClJlbGVhc2VkIGFzIEV0aGVyYm9vdCA1LjEuMiAoZGV2ZWxvcG1lbnQpCgorIEZpeCBzeW50YXggZXJyb3JzIGluIG5mcy5jLgoKKyBQYXRjaCBmb3IgdGFnZ2VkIGltYWdlIGxvYWRpbmcgYnkgTWlsZXMgTm9yZGluLgoKKyBQYXRjaGVzIGZvciBuZXcgZWVwcjEwMCB2YXJpYW50IGJ5IEdlb3JnIEJhdW0uCgorIEZpeGVzIGZvciB0eXBvcyBieSBBZGFtIFN1bG1pY2tpLgoKKyBGaXhlcyBieSBFcmljLgoKUmVsZWFzZWQgYXMgRXRoZXJib290IDUuMS4zIChkZXZlbG9wbWVudCkKCisgRXJpYyByZWFycmFuZ2VkIGZpbGVzIGZvciBtdWx0aXBsZSBwbGF0Zm9ybXMsIGluY2x1ZGluZyBJdGFuaXVtLgoKUmVsZWFzZWQgYXMgRXRoZXJib290IDUuMS40IChkZXZlbG9wbWVudCkKCisgTG90cyBvZiBmaXhlcyB0byBkcml2ZXJzLCBzZWUgQ1ZTIGZvciBkZXRhaWxzLgoKUmVsZWFzZWQgYXMgRXRoZXJib290IDUuMS41IChkZXZlbG9wbWVudCkKCisgRXJpYyBhZGRlZCBzdXBwb3J0IGZvciB0aGUgQU1EIEhhbW1lci4KCisgR2VlcnQgU3RhcHBlcnMgZm91bmQgYSBWSUE2MTA1ICh2aWEtcmhpbmUuYykgd2l0aCBpZCAweDMxMDYuCgpSZWxlYXNlZCBhcyBFdGhlcmJvb3QgNS4xLjYgKGRldmVsb3BtZW50KQoKKyBCcm9hZGNvbW0gVEczIHN1cHBvcnQgYnkgRXJpYyBCaWVkZXJtYW4uCgorIEdlb3JnIEJhdW0gZm91bmQgdGhhdCB0aGUgc3RhcnQxNi5TIHByZWZpeCB3YXMgbWlzc2luZyBmcm9tIHRoZSBMSUxPCmFuZCBQWEUgaW1hZ2VzLCB0aG9zZSBmb3JtYXRzIHdlcmUgYnJva2VuLiBIZSBhbHNvIG1pZ3JhdGVkIHRoZSBQQ0kgSURzCmludG8gdGhlIGRyaXZlciBmaWxlcy4gVGhvc2UgZm9ybWF0cyBzaG91bGQgd29yayBhZ2Fpbi4KCisgUmV3b3JrZWQgZ2VucnVsZXMucGwuIEZhbWlseSBkZWNsYXJhdGlvbnMgbm93IGluIGhlcmUgZG9jdW1lbnQgaW5zaWRlCmdlbnJ1bGVzLnBsLiBOSUMgaXMgbm93IGFuIG91dHB1dCBmaWxlLCBmb3IgdXNlIGJ5IHJvbS1vLW1hdGljLgoKUmVsZWFzZWQgYXMgRXRoZXJib290IDUuMS43IChkZXZlbG9wbWVudCkKCisgRml4ZWQgdmFyaW91cyBzeW50YXggZXJyb3JzIHRoYXQgbWFkZSB0aGUgc291cmNlIG5vdCBjb21waWxlIHdpdGggc29tZQpjb25maWd1cmF0aW9ucy4KCisgSGFja2VkIGJvb3QxYS5zIHRvIHRha2UgY291bnQgb2YgbnVtYmVyIG9mIGJsb2NrcyB0byBib290IGZyb20gYm9vawpibG9jayBpdHNlbGYgaW4gbmV3IHNjaGVtZS4KCisgRGF2ZSBBaXJsaWUgZm91bmQgYSBwYXRjaCBmb3IgYW4gb2xkIGJ1ZyBpbiBlZXBybzEwMCBkcml2ZXIgb24gTGludXgKdGhhdCBhcHBsaWVzIHRvIEV0aGVyYm9vdCBkcml2ZXIgdG9vLgoKKyBBZGQgdXNlIGJ5dGVzOyBwcmFnbWEgdG8gUGVybCBzY3JpcHRzIHRvIGF2b2lkIHByb2JsZW1zIHdpdGggVVRGLTgKaGFuZGxpbmcgb2YgaW5wdXQgZGF0YS4KCisgUmVwbGFjZSBib290MWEucyB3aXRoIGZsb3BweWxvYWQuUyB3aGljaCBoYXMgbm8gcHJvYmxlbXMgbG9hZGluZyBsYXJnZQpiaW5hcmllcy4gTG9zZSB0aGUgYWJpbGl0eSB0byBib290IGZyb20gZGlzayBwYXJ0aXRpb24uIFVzZSBMSUxPIG9yCnNvbWV0aGluZyBzaW1pbGFyLgoKKyBNb3J0ZW4gS3Jpc3RpYW5zZW4gc2VudCBpbiBhIHBhdGNoIHRvIGhhbmRsZSBhbm90aGVyIHZhcmlhbnQgb2YgdGhlClNpUyA5MDAuCgorIEZpeCBmb3IgZWVwcm8xMDAgdGltaW5nIHByb2JsZW0gYnkgR2VvcmcgQmF1bS4KCisgQWRkIHVzZSBieXRlczsgdG8gRXJpYydzIFBlcmwgc2NyaXB0cyB0b28uCgorIEFkZGl0aW9uYWwgZml4IHRvIG1hc2sgaW50ZXJydXB0cyBhZnRlciBQb3J0UGFydGlhbFJlc2V0IGJ5IEdlb3JnCkJhdW0gdGhhdCBtaWdodCBoZWxwIHdpdGggYm9vdGluZyBET1MuCgorIFN1bmRhbmNlIGRyaXZlciBjb250cmlidXRlZCBieSBUaW1vdGh5IExlZ2dlLgoKUmVsZWFzZWQgYXMgRXRoZXJib290IDUuMS44IChkZXZlbG9wbWVudCkKCisgRml4IGZvciBjb3JyZWN0IFNNQzg0MTYgZGV0ZWN0aW9uLgoKKyBBbGlnbm1lbnQgYnVnIGZpeCBmb3IgdGhlIDNjOTB4IGRyaXZlciBjb250cmlidXRlZCBieSBOZWlsIE5ld2VsbC4KCisgUm9iYiBNYWluIGZvdW5kIGEgYnVnIGluIGFwcGVuZGluZyB0aGUgTUFDSElORV9JTkZPIHRvIHRoZSBESENQIHJlcXVlc3QuCgorIFNPTkUgVGFrZXNoaSBmaXhlZCB0aGUgTXVsdGlib290IHN0cnVjdHVyZS4KCisgUGF0Y2ggZnJvbSBBeGVsIERpdHRyaWNoIHRvIGFsbG93IHRpbWVvdXQgdG8gYmUgY2hhbmdlZCB0byBhIGZpeGVkCnZhbHVlIGZvciBwZWVyLXRvLXBlZXIgc2V0dXBzIHdoZXJlIHRoZSBleHBvbmVudGlhbCBiYWNrb2ZmIGlzIG5vdApzdWl0YWJsZS4KCisgVGxhbiBkcml2ZXIgY29udHJpYnV0ZWQgYnkgVGltb3RoeSBMZWdnZS4KCisgU3VwcG9ydCBmb3Igc3ltbGlua3Mgb24gTkZTIG1vdW50cyBieSBBbnNlbG0gTWFydGluIEhvZmZtZWlzdGVyLgoKKyBFeHBlcmltZW50YWwgc2FmZSBib290aW5nIGNvZGUgYnkgQW5zZWxtIE1hcnRpbiBIb2ZmbWVpc3Rlci4KCisgUnVuIEV0aGVyYm9vdCBpbiBhbiBldmVuIG1lZ2FieXRlIHNvIHRoYXQgdW5zZXR0aW5nIEEyMCB3b24ndCBraWxsIGl0LgpFeHBlcmltZW50YWwgVU5ESSBkcml2ZXIgYnkgTWljaGFlbCBCcm93bi4KClJlbGVhc2VkIGFzIEV0aGVyYm9vdCA1LjEuOSAoNS4yIHJlbGVhc2UgY2FuZGlkYXRlIDEpCgorIDgyNTYyRVogSUQgcHJvdmlkZWQgYnkgU2FtdWVsIENsZW1lbnRzLgoKKyBSZW5hbWUgTG9jYWwgb3B0aW9uIGFzIFF1aXQsIGJlY2F1c2UgdGhhdCdzIHdoYXQgaXQgcmVhbGx5IGlzLgoKKyBTaG91bGQgcHJlcGVuZCBzdGFydDE2LmJpbiB0byAuY29tIGltYWdlcywgdGhleSBkaWRuJ3Qgd29yayBhbmQgbm9ib2R5Cm5vdGljZWQuCgorIFBNIHN0YWNrIHdhcyBnZXR0aW5nIGNsb2JiZXJlZCBieSB6ZXJvaW5nIG9mIEJTUywgbW92ZSB0byBvd24gc2VnbWVudAppbiBldGhlcmJvb3QubGRzLiBNb3ZlICVzcyBvdXQgb2YgdGhlIHdheSBvZiBFdGhlcmJvb3QgaW4gY29tcHJlZml4LlMuCk5vdyBRIHdvcmtzIGZyb20gLnpyb20gYW5kIHNvcnQgb2YgZnJvbSAuY29tIChET1MgaXMgb2RkIGFmdGVyIHJldHVybikuCgorIE1ha2UgQVNLX1BST01QVCByZWZsZWN0IHRoZSBkZXZpY2Ugb3B0aW9ucyBhdmFpbGFibGUuCgorIFJlbW92ZWQgbWFueSBvdXRkYXRlZCBjb21tZW50cyBhbmQgdXBkYXRlZCBvdGhlcnMuCgpSZWxlYXNlZCBhcyBFdGhlcmJvb3QgNS4xLjEwICg1LjIgcmVsZWFzZSBjYW5kaWRhdGUgMikKCisgTWFrZSBmbG9wcHlsb2FkLlMgYW5kIGxpbG9wcmVmaXguUyBjYWxsIGluc3RlYWQgb2Ygam1wIHRvIHRoZSBpbWFnZSBzbwp0aGF0IHRoZSByZXR1cm4gY2FsbHMgaW50IDB4MTksIHdoaWNoIGlzIHNvbWV3aGF0IGJldHRlciB0aGFuCmh5cGVyc3BhY2UuCgorIFB1dCBodHRwOi8vZXRoZXJib290Lm9yZyBpbiBwcm9tcHQgYW5kIElEIHN0cmluZy4KClJlbGVhc2VkIGFzIEV0aGVyYm9vdCA1LjIuMCAocHJvZHVjdGlvbikKCisgUHJpbnQgRj8gaWYgbm8gZmlsZW5hbWUgaW4gREhDUCBvZmZlci4KCisgTWFrZSBsYW5jZS5jIHRocm93IGEgY29tcGlsZSBlcnJvciBpZiAtRFJFTE9DQVRFIGlzIHVzZWQuCgorIHBjbmV0MzIgZHJpdmVyIHBvcnRlZCBieSBUaW1vdGh5IExlZ2dlLgoKKyBSZWluc3RhdGUgYm9vdDFhLnMgaW4gYXJjaC9pMzg2L3ByZWZpeC4gVGhlIGJpbmFyeSBtYXkgaGF2ZSBzb21lIHVzZXM7Cml0IGJvb3RzIHdpdGggdm13YXJlIGFsdGhvdWdoIHRoZSBpbWFnZSBmYWlscyBsYXRlciBpbiB0aGUgZW11bGF0aW9uLgoKUmVsZWFzZWQgYXMgRXRoZXJib290IDUuMi4xIChwcm9kdWN0aW9uKQoKQ1ZTZWQgYXMgRXRoZXJib290IDUuMyAoZGV2ZWxvcG1lbnQpCgorIEJyZWFrIG91dCBldGhlcmJvb3QuaCBpbnRvIG11bHRpcGxlIGZpbGVzIGFsb25nIHByb3RvY29sIGxpbmVzLgoKKyBHZW9yZyBCYXVtJ3MgY29udmVyc2lvbiBvZiBhIG1vcmUgcmVjZW50IHZlcnNpb24gb2YgdGhlIExpbnV4IGUxMDAwCmRyaXZlci4KCisgQWRkIG1pbmktc2xhbWQgdG8gY29udHJpYi8sIGl0IHdhcyBtaXNzZWQgZHVyaW5nIDUuMiByZWxlYXNlLgoKKyBUaW1vdGh5IExlZ2dlIGVuYWJsZWQgbXVsdGljYXN0IGZvciBhIGJ1bmNoIG9mIGRyaXZlcnMuIFRlc3RlZCB3aXRoCm1pbmktc2xhbWQuCgpSZWxlYXNlZCBhcyBFdGhlcmJvb3QgNS4zLjAgKGRldmVsb3BtZW50KQoKKyBUaW1vdGh5IExlZ2dlIHJld3JpdGUgcHJvdG9fdGZ0bS5jLCBnb3QgbXVsdGljYXN0IHdvcmtpbmcgd2l0aCBhdGZ0cAphbmQgZW5hYmxlZCBtdWx0aWNhc3QgZm9yIHRoZSBUdWxpcC4KClJlbGVhc2VkIGFzIEV0aGVyYm9vdCA1LjMuMSAoZGV2ZWxvcG1lbnQpCgorIEf8bnRlciBLbmF1ZiBzZW50IGluIGEgbmV3IHZlcnNpb24gb2Ygcm9taWQgdGhhdCBoYW5kbGVzIHRoZSBuZXcKYW5kIG9sZCBJREVOVCBmb3JtYXQuCgorIENhaSBRaWFuZyBmaXhlZCB0aGUgV0lOQ0UgbG9hZGVyLiBJdCBuZWVkcyB0byBoYW5kbGUgPiA1MTIgYnl0ZSBwYWNrZXRzCmFuZCBhbHNvIHRoZSBidWZmZXIgaGFzIHRvIGJlIHN0YXRpYy4gQWxzbyBzdWJtaXR0ZWQgYSBkcml2ZXIgZm9yIFZHQQp3aGljaCBjYW4gYmUgYWN0aXZhdGVkIGJ5IENPTlNPTEVfRElSRUNUX1ZHQS4KCisgSW1wcm92ZWQgdGczIGRyaXZlciBieSBFcmljIEJpZWRlcm1hbi4gTmV3IGRlZmluZSBpbiBldGhlcmJvb3QuaDoKVkFMSURfTElOS19USU1FT1VULgoKKyBUaW1vdGh5IExlZ2dlIGFuZCBJIGZpeGVkIHVwIHZhcmlvdXMgSVNBIGRyaXZlcnMgdG8gYmUgbGVzcyBub2lzeQp3aGVuIHByb2JpbmcsIGZyb20gaW5mb3JtYXRpb24gcHJvdmlkZWQgYnkgUGFvbG8gU2FsdmFuLCBzbyB0aGF0IHRoZQpzdXBlciBldGhlcmJvb3QgaW1hZ2UgaXMgbW9yZSB1c2VmdWwuCgorIFByb29mIG9mIGNvbmNlcHQgb2YgYSBURlRQIHRvIEhUVFAgcHJveHkgaW4gY29udHJpYi90Mmhwcm94eS8uCgpSZWxlYXNlZCBhcyBFdGhlcmJvb3QgNS4zLjIgKGRldmVsb3BtZW50KQoKKyBNdWx0aWNhc3Qgc3VwcG9ydCBmb3IgdGhlIG5zODM5MCAoTkUsIFdELCBldGMpIGFkZGVkIGJ5IFRpbW90aHkgTGVnZ2UuCgorIFByb3ZpZGUgY29uZmlnIGFjY2VzcyB0byBhbHRlcm5hdGUgREhDUC9CT09UUCBwb3J0cy4gVGhlIG1hY3JvCkFMVEVSTkFURV9ESENQX1BPUlRTXzEwNjdfMTA2OCBzd2l0Y2hlcyB0byBwb3J0cyAxMDY3IGFuZCAxMDY4LgoKKyBVTkRJIGRyaXZlciBieSBNaWNoYWVsIEJyb3duLgoKUmVsZWFzZWQgYXMgRXRoZXJib290IDUuMy4zIChkZXZlbG9wbWVudCkKCisgTW9yZSBVTkRJIGltcHJvdmVtZW50cyBieSBNaWNoYWVsIEJyb3duLgoKKyBNaWNoYWVsIEJyb3duIHBvaW50ZWQgb3V0IGVycm9yIGluIEFTS19CT09UIGJlaGF2aW91ci4gTWFrZSBpdCBtYXRjaApkb2N1bWVudGF0aW9uLiA8IDAgb3IgdW5kZWZpbmVkIG1lYW5zIG5vIHByb21wdCwgID0gMCBtZWFucyB3YWl0CmZvcmV2ZXIsID4gMCBtZWFucyB3YWl0IHRoYXQgbWFueSBzZWNvbmRzLgoKKyBTdGFydCBvZiBQQ01DSUEgc3Vic3lzdGVtIGJ5IEFuc2VsbSBNYXJ0aW4gSG9mZm1laXN0ZXIuCgorIFBvcnQgdG8gSHlwZXJzdG9uZSBhcmNoaXRlY3R1cmUgKGJpZy1lbmRpYW4pIGJ5IFlhbm5pcyBNaXRzb3MgYW5kCkdlb3JnZSBUaGFub3MgYXQgTlRVQSwgR3JlZWNlLgoKKyBUaW1vdGh5IExlZ2dlIGdvdCB0aGUgZXBpYzEwMCBkcml2ZXIgd29ya2luZyBhZ2Fpbiwgd2FzIG5vdCB3b3JraW5nCndoZW4gNS4yIHJlbGVhc2VkLiBBbHNvIGltcGxlbWVudGVkIG11bHRpY2FzdGluZy4gQWxzbyB0ZW50YXRpdmVseQpmaXhlZCB0aGUgdGczIGRyaXZlci4KCisgVXNlIFBlcmwgc2NyaXB0IHRvIG1ha2UgLno/bGlsbyBpbWFnZXMuCgorIEFkZGVkIGFuIC5pc28gTWFrZWZpbGUgcnVsZS4gVGhpcyByZXF1aXJlcyBuZXdlciBCSU9TZXMgYXMgaXQKdXNlcyBubyBmbG9wcHkgZW11bGF0aW9uIG1vZGUuCgorIEd1YXJkIEt1byBzZW50IGluIGEgcGF0Y2ggZm9yIHRoZSB2aWEtcmhpbmUgZHJpdmVyIG5vdCBiZWluZwpyZXNldCBwcm9wZXJseSwgVGltb3RoeSBMZWdnZSBpbXByb3ZlZCBpdCBiYXNlZCBpbiB0aGUgTGludXggZHJpdmVyLgoKUmVsZWFzZWQgYXMgRXRoZXJib290IDUuMy40IChkZXZlbG9wbWVudCkKCisgRGF2aWQgRC4gU21pdGgsIHdpdGggaGVscCBmcm9tIEdlb3JnIEJhdW0sIHNlbnQgaW4gYSBwYXRjaCBmb3IgdGhlCmVlcHJvMTAwIGRyaXZlciB3aGljaCBtaWdodCBoZWxwIHVuamFtIHRoZSBOSUMgd2hlbiB0aGUgcmVjZWl2ZXIgaGFzCnN1c3BlbmRlZCByZWNlcHRpb24uCgorIFRpbW90aHkgTGVnZ2UgYW5kIEVyaWMgQmllZGVybWFuIGZpeGVkIGEgYnVnIGluIHRoZSB0ZzMgZHJpdmVyIHdoaWNoCmNhdXNlZCBzb21lIG1vZGVscyB0byBub3QgcmVjZWl2ZSBESENQIHJlcGxpZXMuCgpSZWxlYXNlZCBhcyBFdGhlcmJvb3QgNS4zLjUgKGRldmVsb3BtZW50KQoKKyBUaW1vdGh5IExlZ2dlIHBvcnRlZCB0aGUgTGludXggUmVhbHRlayA4MTY5IGRyaXZlci4KCisgTWljaGFlbCBCcm93biByZW1vdmVkIGlycml0YXRpbmcgQTIwIHN0YXR1cyBjaGFuZ2UgbWVzc2FnZXMuCgorIFNpczkwMCwgdzg5Yzg0MCBhbmQgdGczIGRyaXZlcnMgZml4ZWQgYnkgVGltb3RoeSBMZWdnZS4gUjgxNjkgZHJpdmVyCm5lZWRzIGZhbWlseSBlbnRyeSBpbiBnZW5ydWxlcy5wbC4KCisgUmV2ZXJ0IHRvIG5vcm1hbCB3YXkgb2YgYXNzaWduaW5nIHN0cmluZyB0byBERUZBVUxUX0JPT1RGSUxFIGFzCnRyaWNreSBzdHJpbmdpZnkgbWFjcm8gZmFsbHMgZm91bCBvZiBDKysgLy8gY29tbWVudHMgaW4gZ2NjIDMueC4KClJlbGVhc2VkIGFzIEV0aGVyYm9vdCA1LjMuNiAoZGV2ZWxvcG1lbnQpCgorIERvbid0IGluY2x1ZGUgSVNBIC5vIGZpbGVzIGZvciBldGhlcmJvb3QtcGNpLgoKKyBEb3VnIEFtYnJpc2tvIGZpeGVkIGJ1Z3MgaW4gdGhlIEZyZWVCU0QgbG9hZGVyLgoKKyBBbmRlcnMgTnlzdHJvbSBwcm92aWRlZCBhIHRpbnkgdmlhLXJoaW5lIHBhdGNoCgorIEludHJvZHVjZSBuZXcgZGVmaW5lIERFRkFVTFRfUFJPVE9fTkZTIGZvciB0aG9zZSB3aG8gd2VyZSB1c2VkIHRvCnVzaW5nIERPV05MT0FEX1BST1RPX05GUyBpbiA1LjAgZm9yIE5GUyBib290aW5nLgoKKyBSZXZlcnNlIHNvcnQgUENJIGRyaXZlcnMgc28gdGhhdCAzYzkweCBpcyB0cmllZCBhaGVhZCBvZiAzYzU5NS4KCisgVXBkYXRlZCBlMTAwMCBkcml2ZXIgYnkgR2VvcmcgQmF1bS4KCisgTmV3IFBDSSBJRHMgZm9yIDNjOTB4IGFuZCB0dWxpcCBkcml2ZXJzLiBUeXBvcyBpbiAzYzkweCBhbmQgdGczCmRyaXZlcnMgY29ycmVjdGVkLgoKKyBHZW9yZyBCYXVtIGZpeGVkIHRoZSAzYzUwMyAKCisgRml4ZWQgVHlwb3Mgd2hpY2ggY2F1c2VkIGNvbXBpbGluZyB3aXRoIFJBUlBfTk9UX0JPT1RQIHRvIGZhaWwKCisgRml4ZWQgSU1BR0VfRlJFRUJTRCBidWdzCgorIENsZWFudXAgb2YgZHJpdmVyIG91dHB1dCAocGNuZXQzMiwgcjgxNjksIHN1bmRhbmNlLCB0bGFuKQoKKyBNaW5vciB1cGRhdGVzIHRvIHRoZSBDb25maWcgZmlsZSBjb21tZW50cwoKKyBhcmNoL2kzODYvcHJlZml4L2Jvb3QxYS5TIGlzIG5vIGxvbmdlciBtYWludGFpbmVkCgorIEFkZGVkIG1ha2UgcnVsZSBmb3IgYSBmbG9wcHkgZW11bGF0aW9uIElTTyBib290IGltYWdlCgorIFRpbW90aHkgTGVnZ2UgdXBkYXRlZCBwcm90b190ZnRtIHRvIG1ha2UgaXQgZWFzaWVyIHRvIG1haW50YWluIGFuZAogIGZpeCBzb21lIGlzc3VlcwoKKyBUaW1vdGh5IExlZ2dlIGNvbnRyaWJ1dGVkIGEgZm9yY2VkZXRoIGRyaXZlciBmb3IgdGhlIE5WaWRpYSBGb3JjZQogIE5JQy4KCisgVGltb3RoeSBMZWdnZSBjb250cmlidXRlZCBhIG5zODM4MjAgZHJpdmVyIGZvciBOYXRpb25hbAogIFNlbWljb25kdWN0b3IgODM4MjAgYmFzZWQgTklDUwoKKyBLZW4gWWFwIGFkZGVkIHN1cHBvcnQgZm9yIGNyZWF0aW5nIC5saXNvIG91dHB1dCB0eXBlIHdoaWNoIGlzIGFuIGlzbwogIGltYWdlIHdpdGggbGVnYWN5IGZsb3BweSBzdXBwb3J0CgorIE1pY2hhZWwgQnJvd24gaW1wcm92ZWQgbWVtb3J5IGFsbG9jYXRpb24sIDE2LzMyIG1vZGUgc3dhcHBpbmcsIGFuZAogIGRpZCB2YXJpb3VzIGNvZGUgY2xlYW51cHMKCisgTWljaGFlbCBCcm93biBhZGRlZCBIaWdoLUxldmVsIFBYRSBBUEkgc3VwcG9ydCAocHhlbGludXgpIHRvIEV0aGVyYm9vdAoKUmVsZWFzZWQgYXMgRXRoZXJib290IDUuMy43IChkZXZlbG9wbWVudCkKCisgVGltb3RoeSBMZWdnZSBGaXhlZCBhbiBpc3N1ZSBpbiB0aGUgZTEwMDAgZHJpdmVyIHdpdGggODI1NDQgYW5kCiAgbmV3ZXIgZGV2aWNlcyB0aGF0IHN1cHBvcnQgcG9ydCBJL08uICBFbmFibGVkIHBvcnQgaW8gZm9yIHRoZSByZXNldC4KICBXaXRob3V0IHRoZSBwYXRjaCB0aGUgZTEwMDAgY291bGQgbm90IHJlbGlhYmx5IGJvb3QgTGludXggb24gc29tZQogIGNhcmRzLiAgVGhhbmtzIHRvIEphbWVzIFBlYXJzb24sIEdlb3JnIEJhdW0gYW5kIE1hcnR5IENvbm5vciBmb3IKICBoZWxwIHJlc29sdmluZyB0aGlzIGlzc3VlLgoKKyBNaWNoYWVsIEJyb3duIGFkZGVkIGxvdHMgb2YgUFhFIGNvZGUgdG8gY29tcGxldGUgaW1wbGVtZW50YXRpb24uIEhlCiAgYWxzbyBkaWQgYSB3YXJuaW5ncyBwdXJnZSBvZiB0aGUgY29yZS4KCisgTWFydHkgQ29ubm9yIGRpZCB3YXJuaW5ncyBwdXJnZSBvZiB0aGUgbmV0d29yayBkcml2ZXJzLgoKKyBBbnNlbG0gTWFydGluIEhvZmZtZWlzdGVyIGNvbnRyaWJ1dGVkIEROUyByZXNvbHV0aW9uIGNvZGUuCgorIExvdHMgb2YgZHJpdmVyIFBYRWlmaWNhdGlvbnMgYW5kIGNsZWFudXBzIGZyb20gVGltb3RoeSBMZWdnZSBhbmQKICBNYXJ0eSBDb25ub3IKCisgTWFrZWZpbGUgYW5kIGdlbnJ1bGVzIGZpeGVzIGZyb20gTWljaGFlbCBCcm93biBhbmQgTWFydHkgQ29ubm9yCgorIEJQQkFUQ0ggd29ya2Fyb3VuZCBmcm9tIFRpbW90aHkgTGVnZ2UgYW5kIE1pY2hhZWwgQnJvd24KCisgVGltb3RoeSBMZWdnZSBpbXByb3ZlZCBpbWFnZSBmb3JtYXQgZGV0ZWN0aW9uIGxvZ2ljLgoKUmVsZWFzZWQgYXMgRXRoZXJib290IDUuMy44IChkZXZlbG9wbWVudCkKCisgVXBkYXRlIHRvIGxhbmNlLmMgY2hpcF90YWJsZSBmcm9tIEhlbGdlIFdhZ25lcgoKKyBGaXhlcyB0byBhdHRyaWJ1dGVzIHRvIHByZXZlbnQgZ2NjIGZyb20gb3B0aW1pc2luZyBhd2F5IHNlZW1pbmdseQp1bnVzZWQgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMgdGhhdCBhcmUgYWN0dWFsbHkgcmVmZXJlbmNlZCBmcm9tIGFzbQpvciBpbiB0aGUgbGlua2luZyBzdGFnZS4gKEtlbiBZYXApCgorIFJlbW92ZWQgbm9uLXJlbG9jYXRpb24gc3VwcG9ydCwgcmVsb2NhdGlvbiBpcyBub3cgYWx3YXlzIGFjdGl2ZS4KUmVtb3ZlZCBsYW5jZS5jIGRyaXZlciBhcyB0aGlzIHdpbGwgbm90IHdvcmsgd2l0aCByZWxvY2F0aW9uLiAzMi1iaXQKTGFuY2UgTklDIHVzZXJzIHNob3VsZCB1c2UgcGNuZXQzMi4gKEtlbiBZYXApCgorIE1pZ3JhdGVkIFNBRkVCT09UIHRvIGEgcGF0Y2ggc2V0LiBUaGlzIHByb29mLW9mLWNvbmNlcHQgY29kZSBpcwppbmNvbXBsZXRlIGFuZCBuZWVkcyBtb3JlIHdvcmsgYmVmb3JlIGJlY29taW5nIG1haW5zdHJlYW0uIChLZW4gWWFwKQoKUmVsZWFzZWQgYXMgRXRoZXJib290IDUuMy45IChkZXZlbG9wbWVudCkKCisgUGF0Y2ggZnJvbSBUaW0gRmxldGNoZXIgZm9yIGFub3RoZXIgZWVwcm8xMDAgbW9kZWwuCgorIFBhdGNoIGZyb20gSmVyZW15IEphY2tzb24gdG8gbWFrZSBETlMgcXVlcnkgcmVjdXJzaXZlIGFuZCBmaXggc2lnbiBhbmQKY2FzdGluZyBpc3N1ZXMgaW4gZG5zX3Jlc292ZXIuYy4KCisgUGFvbG8gU2FsdmFuIGV4cGVyaW1lbnRlZCB3aXRoIHVzaW5nIGlzb2xpbnV4IGZvciBub24tZW11bGF0aW9uCmltYWdlcyBhbmQgY29udHJpYnV0ZWQgdGhlIGZpcnN0IGN1dCBhdCB0aGUgY29kZSBmb3IgZ2VuaXNvLgoKKyBGaXggZm9yIHJlbG9jYXRpb24gaXNzdWUgd2l0aCBwcmlzbTJfcGNpIGRyaXZlcgoKKyBTbWFsbCBwYXRjaCB0byBzdXBwb3J0IDNDb20gdHVsaXAgdmVyc2lvbiBmcm9tIEphY2VrIEthbGluc2tpCgorIERhZyBMZW0gcHJvdmlkZWQgYSBuZXcgcGNpX2lkIGZvciB0aGUgZWVwcm8xMDAgSW50ZWwgIjgyODAxRUIvRVIgCihJQ0g1L0lDSDVSKSIKCisgU21hbGwgcGF0Y2ggdG8gc3VwcG9ydCAzQ29tIHR1bGlwIHZlcnNpb24gZnJvbSBKYWNlayBLYWxpbnNraQoKKyBZaW5naGFpIEx1IGNvbnRyaWJ1dGVkIGEgbGFyZ2UgcGF0Y2ggdG8gYWRkIGZpbG8sIGJUZXh0IGFuZCB1c2IgCnN1cHBvcnQ6CglidGV4dCBjb25zb2xlOiBJbiBMaW51eEJJT1MsIGZvciB0aGUgVkdBLCB3ZSBvbmx5IGNhbiAKCWVuYWJsZSBkaXNwbGF5IGNoaXBmcmFtZSBidWZmZXIgYW5kIHdyaXRlIGNoYXIgdG8gZnJhbWVidWZmZXIgCgl0byBnZXQgb3V0cHV0IGluIENSVC4KCQoJRklMTzogb3JpZ2luYWxseSBpdCBpcyBzdGFuZGFsb25lIGJvb3QgcHJvZ3JhbSBhbmQgCglhdXRob3IgaXMgVGFrZXNoaVNvbmUuCgoJQm9vdCBmcm9tIFNBVEEgZGlzay4KCglCb290IGZyb20gVVNCIGRpc2sgKE9IQ0kgYW5kIFVIQ0kpLiAgVVNCIGJvb3QgaXMgZnJvbSBTdGV2ZW4gCglKYW1lcyAncyBiYXJlbWV0YWwgaW4gTGludXhCSU9TLCBtb3ZlZCB0byBGSUxPIGFuZCBhZGRlZCB0aGUgCglPSENJIHN1cHBvcnQgdG8gaXQgCgorIGFybW5vbW11IGFyY2ggc3VwcG9ydCBieSBUb2JpYXMgTG9yZW56LgoKKyBEcml2ZXIgdXBkYXRlcy9jbGVhbnVwOiBydGw4MTM5LCBzaXM5MDAsIHRsYW4gCgorIFVwZGF0ZXMgdG8gdmlhLXJoaW5lIGJhc2VkIG9uIGlucHV0IGZyb20gR3VhcmQgS3VvIGZyb20gVmlhIE5ldHdvcmtpbmcgClRlY2hub2xvZ2llcywgSW5jCgorIFVwZGF0ZSBwOTEwbmQgKHBvcnQgOTEwMCtuIHByaW50ZXIgZGFlbW9uKSB0byBsYXRlc3QgdmVyc2lvbgoKKyBGaXhlZCBzb21lIGJ1Z3MgdG8gZW5hYmxlIGNvbXBpbGF0aW9uIGZvciBnY2MgMy40LnguCgpSZWxlYXNlZCBhcyBFdGhlcmJvb3QgNS4zLjEwIGFrYSA1LjRSQzEgKGRldmVsb3BtZW50KQoKKyBDaGFuZ2VzIHRvIHNlZ21lbnQgc2NoZW1lIHRvIG1ha2UgbGFyZ2UgY29tcHJlc3NlZCBpbWFnZXMgd29yay4KCisgLnplbGYgaW1hZ2VzIGNhbiBiZSBidWlsdCBub3cgYnV0IHN0aWxsIGRvbid0IHJ1biBwcm9wZXJseS4gLnpyb20KaW1hZ2VzIG1heSBiZSBicm9rZW4uCgorIFN0YXJ0IG9mIGEgLmV4ZSBwcmVmaXggd2hpY2ggc2hvdWxkIGFsbG93IHBheWxvYWRzID4gNjRrQi4KClJlbGVhc2VkIGFzIEV0aGVyYm9vdCA1LjMuMTEgYWthIDUuNFJDMiAoZGV2ZWxvcG1lbnQpCgorIExlZnQgb3V0IGluIGxhc3QgcmVsZWFzZSdzIExPRzogYWNjZXB0ZWQgcGF0Y2ggZnJvbSBKYW4gS2lzemthCmZpeGluZyBkZWZhdWx0IFRGVFAgYmxvY2tzaXplLgoKKyBGaXhlZCAuej9yb20gaW1hZ2UgZ2VuZXJhdGlvbiwgdGhleSB3b3JrIG5vdy4KCisgUGF0Y2ggZnJvbSBKYW4gS2lzemthIGZvciBmb3IgbXVsdGlwbGUgcmVjZWl2ZSBidWZmZXJzIGluIGVlcHJvMTAwCmRyaXZlci4KCisgRml4ZWQgOTYxNTA3IE5vdCBzbyBuaWNlICdGPycgbWVzc2FnZSB3aGVuIG5vIGZpbGUgbmFtZSByZWNlaXZlZAoKKyBTbWFsbCBmaXhlcyB0byBlMTAwMCBhbmQgdmlhLXJoaW5lIGRyaXZlcnMuCgorIE5ldyBtdGQ4MHguYyBkcml2ZXIgY29udHJpYnV0ZWQgYnkgRXJkZW0gR3V2ZW4KCisgTmV3IGRtZmUuYyBkcml2ZXIgZm9yIERhdmljb20gYmFzZWQgY2FyZHMgY29udHJpYnV0ZWQgYnkgVGltb3RoeSBMZWdnZQoKKyBBZGRlZCBuZXcgZGVmaW5pdGlvbnMgb2Ygc2l0ZSBESENQIG9wdGlvbnMgaW4gcHJlcGFyYXRpb24gZm9yIDUuNC4KCisgUmVtb3ZlZCBldGhlcmJvb3QoLXBjaSk/LiogcnVsZSBiZWNhdXNlIHRoZXJlIGFyZSB0b28gbWFueSBkcml2ZXJzIGFuZAp0aGUgaW1hZ2Ugd2lsbCBubyBsb25nZXIgZml0IGluIG1lbW9yeS4gSSBkb24ndCB3YW50IHRvIGNob29zZSBhIHN1YnNldApvZiBkcml2ZXJzIGFzIGV2ZXJ5Ym9keSB3aWxsIGhhdmUgZGlmZmVyZW50IHByZWZlcmVuY2VzLiBTbyBJJ20gZ29pbmcgdG8KcGlzcyBvZmYgZXZlcnlib2R5IGVxdWFsbHkgYnkgZGVsZXRpbmcgdGhlIHJ1bGUuIFVzZSB0aGUgbXVsdGlwbGUgZHJpdmVyCnJ1bGUgKGRyaXZlcjEtLWRyaXZlcjItLS4uLikgYW5kIHNlbGVjdCB5b3VyIG93biBzdWJzZXQgb2YgZHJpdmVycy4KClJlbGVhc2VkIGFzIEV0aGVyYm9vdCA1LjMuMTIgYWthIDUuNFJDMyAoZGV2ZWxvcG1lbnQpCgorIENoYW5nZXMgdG8gTWFrZWZpbGUubWFpbiBhbmQgQ29uZmlnIHRvIGNvbGxlY3QgRklMTyBvYmplY3RzIGluCmZpbG9saWIuYS4gIFRoaXMgYWxsb3dzIEZJTE8gdG8gYmUgZXhjbHVkZWQgZnJvbSBjb21waWxhdGlvbiBhbmQgbGlua2luZwp3aXRoIG9uZSBNYWtlZmlsZSBkZWZpbmUuCgorIFJldmVyc2Ugc2l0ZSBESENQIG9wdGlvbiBjaGFuZ2VzLCBzaG91bGQgYXBwbHkgZm9yIG9mZmljaWFsCmFzc2lnbm1lbnQuCgorIFJJUyBmaWxlbmFtZSBwYXRjaCB3aGljaCBzZWVtcyB0byB3b3JrIGZvciBtYW55IHBlb3BsZS4KCisgVGhhbmtzIHRvIHRoZSBoZWxwIG9mIERhbmllbCBOaWxzc29uLCB0cmFja2VkIGRvd24gYW5kIGZpeGVkIGEgYnVnCndoZXJlIHRoZSB0ZnRwIGNvZGUgZGlkIG5vdCBmYWxsIGJhY2sgdG8gNTEyIGJ5dGUgYmxvY2tzIHdoZW4gYW4gT0FDSwp3YXMgTk9UIHJlY2VpdmVkLgoKKyBSZW1vdmVkIGRlYWQgY29kZSByZWxhdGVkIHRvIENBTl9CT09UX0RJU0suCgorIENsYXJpZmllZCB0aGF0IEJPT1RfRElTSyBhbmQgQk9PVF9GTE9QUFkgb3B0aW9ucyBvbmx5IHdvcmsgd2l0aApMaW51eEJJT1MgYW5kIGFyZSBub3QgcmVwbGFjZW1lbnRzIGZvciBQQ0JJT1MgZnVuY3Rpb25zLgoKKyBSZW5hbWVkIEVNRVJHRU5DWURJU0tCT09UIHRvIEVYSVRfSUZfTk9fT0ZGRVIuCgorIEJ1aWx0aW4gbWVudWluZyBESENQIG9wdGlvbnMgYXJlIGdvbmUuCgorIFBhb2xvIFNhbHZhbiBzdWJtaXR0ZWQgY2hhbmdlcyB0byBhcmNoL2kzODYvTWFrZWZpbGUgdG8gbWFrZSAuY29tCmltYWdlcyBjb21wcmVzc2VkLgoKKyBFcmljIEJpZWRlcm1hbm4gbWFkZSAuKmVsZiBpbWFnZXMgd29yayBhZ2FpbiBhbmQgY2xlYW5lZCB1cCB0aGUgYnVpbGQKcHJvY2VkdXJlIGluIHRoZSBwcm9jZXNzLiBUaGUgaGFyZHdpcmVkIHZpcnR1YWwgUkVMT0NBRERSIGlzIG5vIG1vcmUsCnRoZSB2aXJ0dWFsIGJhc2UgaXMgMC4gSGUgYWxzbyBhZGRlZCBjb2RlIHRvIGRpc3BsYXkgd2hpY2ggcHJvdG9jb2xzIGFyZQpjb21waWxlZCBpbnRvIHRoZSBpbWFnZS4KClJlbGVhc2VkIGFzIEV0aGVyYm9vdCA1LjMuMTMgYWthIDUuNFJDNCAoZGV2ZWxvcG1lbnQpCgorIExvdHMgb2YgZml4ZXMgYnkgRXJpYyBCaWVkZXJtYW4uICBTeW1ib2xzIGZvciBwcm90ZWN0ZWQgbW9kZSBzZWdtZW50CmFuZCBwcmVmaXggc2VnbWVudHMgc2VwYXJhdGVkLiAgTXVsdGlwbGUgQVNNIHN0YXRlbWVudHMgY29tYmluZWQgdG8KZW5zdXJlIGNvbXBpbGVyIGtlZXBzIHRoZW0gaW50YWN0LiAgQWxsb2NhdGUgcmVhbCBtb2RlIHN0YWNrIGlmIG5vbmUgaW4KdXNlLiAgUHJvdGVjdCBsb3cgbWVtb3J5IGludGVycnVwdCB2ZWN0b3JzLiBNYWtlZmlsZSBydWxlcyBmb3IgdmFyaW91cwpwcmVmaXhlcyBmYWN0b3JlZC4gRHluYW1pYyByZWxvY2F0YWJsZSBpbWFnZSBzdXBwb3J0LgoKKyBGaXhlcyBieSBNaWNoYWVsIEJyb3duLiBDbGVhbnVwIG9mIFBYRSBhbmQgVU5ESSBjb2RlLgoKKyBQYXRjaCB0byBUdWxpcCBkcml2ZXIgZm9yIG1pc3NpbmcgUENJIElELgoKKyBGaXhlcyB0byBnZW5ydWxlcy5wbCBieSBLZW5uZXRoIFN1bXJhbGwuCgpSZWxlYXNlZCBhcyBFdGhlcmJvb3QgNS4zLjE0IGFrYSA1LjRSQzUgKGRldmVsb3BtZW50KQoKKyBTbWFsbCBBUk1OT01NVSBhcmNoaXRlY3R1cmUgZml4ZXMgYnkgVG9ieSBMb3JlbnouCgorIFBhdGNoIHRvIFR1bGlwIGRyaXZlciBmb3IgYWRkaXRpb25hbCBQQ0kgSUQgYnkgUmFtZXNoIENoYW5kZXIuCgorIFByb3h5IERIQ1Agc3VwcG9ydCwgY2F0cm9tLnBsIHNjcmlwdCwgZmxhdCByZWFsIG1vZGUgc3VwcG9ydCwgYW5kCmUxMDAwIGZpeGVzIGJ5IE1pY2hhZWwgQnJvd24uCgorIE5ldyBQSFkgc3VwcG9ydCBmb3IgdGczLmMgYnkgVGltb3RoeSBMZWdnZS4KCisgRlMgUHJvdG9jb2wgc3VwcG9ydCBieSBSYWRpbSBLb2xhci4KCisgRklMTyBjb25maWcgY2hhbmdlcyBieSBZSEx1LgoKKyBTdXBwb3J0IGZvciBjb21waWxhdGlvbiBvbiBBTUQ2NCBmb3IgaTM4Ni4gbWFrZXJvbS5wbCBmaXhlZCBub3QgdG8KY2hhbmdlIHByb2R1Y3Qgc3RyaW5nIHBvaW50ZXIgaWYgb25lIGFscmVhZHkgZXhpc3RzLgoKUmVsZWFzZWQgYXMgRXRoZXJib290IDUuMy4xNSBha2EgNS40UkM2IChkZXZlbG9wbWVudCkKCisgTWlub3IgYWRkaXRpb25zIGFuZCBhbWVuZG1lbnRzIHRvIGFja25vd2xlZGdlbWVudHMuCgorIEFkZGVkIERvdWcgQW1icmlza28ncyBGcmVlQlNEIHBhdGNoIHRvIGZyZWVic2RfbG9hZGVyLmMuIERvZXNuJ3QKaHVydCBGcmVlQlNEIDQgYW5kIHNlZW1zIHRvIGhlbHAgRnJlZUJTRCA1IGdldCBmdXJ0aGVyIGluIGJvb3RpbmcuClNob3VsZCBub3QgYWZmZWN0IG90aGVyIGltYWdlIHR5cGVzIHNpbmNlIGl0IG1vZGlmaWVzIG9ubHkgb25lIGZpbGUuClRoZSBwYXJ0IG9mIHRoZSBwYXRjaCByZWxhdGluZyB0byBvc2xvYWRlci5jIHdhcyBhbHJlYWR5IHByZXNlbnQuCgpSZWxlYXNlZCBhcyBFdGhlcmJvb3QgNS40LjAgKHByb2R1Y3Rpb24pCgorIEFkZGVkIFBDSSBJRCBmb3IgRnVqaXN0dSBTaWVtZW5zIEZ1dHJvIEMyMDAgYnkgTWFydGluIFZvZ3QKCisgTGl1IFRhbyBjb250cmlidXRlZCBhIGRyaXZlciBmb3IgdGhlIEFNRDgxMTEgYmFzZWQgb24gdGhlIExpbnV4IApkcml2ZXIKCisgVGlsbCBTdHJhdW1hbm4gcGF0Y2ggZm9yIFNwb3JhZGljIGVlcHJvKDEwKSAgUlggcHJvYmxlbXMgYWZ0ZXIgcmVib290CgorIEhlcm1hbm4gR2F1c3RlcmVyIHNlbnQgYSBwYXRjaCB0byBzdXBwb3J0IGFkZGl0aW9uYWwgQnJvYWRjb20gUEhZcwoKKyBUaW1vdGh5IExlZ2dlIHVwZGF0ZWQgdGhlIGZvcmNlZGV0aCBkcml2ZXIgdG8gdGhlIGxhdGVzdCBMaW51eCB2ZXJzaW9uCjIuNi4xMCAodW50ZXN0ZWQgYW5kIGJyb2tlbikKCisgWWhMdSBmaXhlZCB0aGUgdXBkYXRlZCBmb3JjZWRldGggZHJpdmVyIHNvIHRoYXQgaXQgd29ya2VkIGFuZCBjb25maXJtZWQgCnRoYXQgaXQgc3VwcG9ydHMgdGhlIEdpZ2FiaXQgblZpZGlhIE5JQ3MKCisgVGltb3RoeSBMZWdnZSBmaXhlZCByZWxvY2F0aW9uIGlzc3VlcyB3aXRoIHRoZSBlZXBybyBkcml2ZXIK