LyoKICogKEMpIENvcHlyaWdodCAyMDAyCiAqIERhbmllbCBFbmdzdHL2bSwgT21pY3JvbiBDZXRpIEFCIDxkYW5pZWxAb21pY3Jvbi5zZT4uCiAqCiAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCiAqIHByb2plY3QuCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCiAqIE1BIDAyMTExLTEzMDcgVVNBCiAqLwoKLyogVGhpcyBmaWxlIGlzIGxhcmdlbHkgYmFzZWQgb24gY29kZSBvYnRuZWQgZnJvbSBBTUQuIEFNRCdzIG9yaWdpbmFsCiAqIGNvcHlyaWdodCBpcyBpbmNsdWRlZCBiZWxvdwogKi8KCi8qCiAqICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKgogKiAgIENvcHlyaWdodCAxOTk5IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KICoKICogIFRoaXMgc29mdHdhcmUgaXMgdGhlIHByb3BlcnR5IG9mIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYyAgKEFNRCkgIHdoaWNoCiAqICBzcGVjaWZpY2FsbHkgZ3JhbnRzIHRoZSB1c2VyIHRoZSByaWdodCB0byBtb2RpZnksIHVzZSBhbmQgZGlzdHJpYnV0ZSB0aGlzCiAqICBzb2Z0d2FyZSBwcm92aWRlZCB0aGlzIENPUFlSSUdIVCBOT1RJQ0UgaXMgbm90IHJlbW92ZWQgb3IgYWx0ZXJlZC4gIEFsbAogKiAgb3RoZXIgcmlnaHRzIGFyZSByZXNlcnZlZCBieSBBTUQuCiAqCiAqICBUSEUgTUFURVJJQUxTIEFSRSBQUk9WSURFRCAiQVMgSVMiIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5UWQogKiAgT0YgQU5ZIEtJTkQgSU5DTFVESU5HIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBOT05JTkZSSU5HRU1FTlQgT0YKICogIFRISVJELVBBUlRZIElOVEVMTEVDVFVBTCBQUk9QRVJUWSwgT1IgRklUTkVTUyBGT1IgQU5ZIFBBUlRJQ1VMQVIgUFVSUE9TRS4KICogIElOIE5PIEVWRU5UIFNIQUxMIEFNRCBPUiBJVFMgU1VQUExJRVJTIEJFIExJQUJMRSBGT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUgogKiAgKElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIFBST0ZJVFMsIEJVU0lORVNTCiAqICBJTlRFUlJVUFRJT04sIExPU1MgT0YgSU5GT1JNQUlUT04pIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT0YgT1IgSU5BQklMSVRZCiAqICBUTyBVU0UgVEhFIE1BVEVSSUFMUywgRVZFTiBJRiBBTUQgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKICogIFNVQ0ggREFNQUdFUy4gIEJFQ0FVU0UgU09NRSBKVVJTSURJQ1RJT05TIFBST0hJQklUIFRIRSBFWENMVVNJT04gT1IKICogIExJTUlUQVRJT04gT0YgTElBQklMSVRZIEZPUiBDT05TRVFVRU5USUFMIE9SIElOQ0lERU5UQUwgREFNQUdFUywgVEhFIEFCT1ZFCiAqICBMSU1JVEFUSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgogKgogKiAgQU1EIGRvZXMgbm90IGFzc3VtZSBhbnkgcmVzcG9uc2liaWxpdHkgZm9yIGFueSBlcnJvcnMgdGhhdCBtYXkgYXBwZWFyIGluCiAqICB0aGUgTWF0ZXJpYWxzIG5vciBhbnkgcmVzcG9uc2liaWxpdHkgdG8gc3VwcG9ydCBvciB1cGRhdGUgdGhlIE1hdGVyaWFscy4KICogIEFNRCByZXRhaW5zIHRoZSByaWdodCB0byBtYWtlIGNoYW5nZXMgdG8gaXRzIHRlc3Qgc3BlY2lmaWNhdGlvbnMgYXQgYW55CiAqICB0aW1lLCB3aXRob3V0IG5vdGljZS4KICoKICogIFNvIHRoYXQgYWxsIG1heSBiZW5lZml0IGZyb20geW91ciBleHBlcmllbmNlLCBwbGVhc2UgcmVwb3J0ICBhbnkgIHByb2JsZW1zCiAqICBvciBzdWdnZXN0aW9ucyBhYm91dCB0aGlzIHNvZnR3YXJlIGJhY2sgdG8gQU1ELiAgUGxlYXNlIGluY2x1ZGUgeW91ciBuYW1lLAogKiAgY29tcGFueSwgIHRlbGVwaG9uZSBudW1iZXIsICBBTUQgcHJvZHVjdCByZXF1aXJpbmcgc3VwcG9ydCBhbmQgcXVlc3Rpb24gb3IKICogIHByb2JsZW0gZW5jb3VudGVyZWQuCiAqCiAqICBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuICAgICAgICAgV29ybGR3aWRlIHN1cHBvcnQgYW5kIGNvbnRhY3QKICogIEVtYmVkZGVkIFByb2Nlc3NvciBEaXZpc2lvbiAgICAgICAgICAgIGluZm9ybWF0aW9uIGF2YWlsYWJsZSBhdDoKICogIFN5c3RlbXMgRW5naW5lZXJpbmcgICAgICAgICAgICAgICAgICAgICAgIGVwZC5zdXBwb3J0QGFtZC5jb20KICogIDUyMDQgRS4gQmVuIFdoaXRlIEJsdmQuICAgICAgICAgICAgICAgICAgICAgICAgICAtb3ItCiAqICBBdXN0aW4sIFRYIDc4NzQxICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuYW1kLmNvbS9odG1sL3N1cHBvcnQvdGVjaHN1cC5odG1sCiAqICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqLwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCSBBVVRIT1IgICAgICA6IEJ1ZGR5IEZleSAtIE9yaWdpbmFsLgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKi8KCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICBGVU5DVElPTkFMIERFU0NSSVBUSU9OOgogKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHRvIGF1dG9kZXRlY3QgdGhlIGdlb21ldHJ5IG9mIHRoZSBEUkFNLgogKgogKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHRvIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIGNvbHVtbiBiaXRzIGZvciB0aGUgRFJBTQogKiBkZXZpY2VzIGluIHRoaXMgZXh0ZXJuYWwgYmFuay4gVGhpcyByb3V0aW5lIGFzc3VtZXMgdGhhdCB0aGUgZXh0ZXJuYWwgYmFuawogKiBoYXMgYmVlbiBjb25maWd1cmVkIGZvciBhbiAxMS1iaXQgY29sdW1uIGFuZCBmb3IgNCBpbnRlcm5hbCBiYW5rcy4gVGhpcyBnaXZlcwogKiB1cyB0aGUgbWF4aW11bSBhZGRyZXNzIHJlYWNoIGluIG1lbW9yeS4gQnkgd3JpdGluZyBhIHRlc3QgdmFsdWUgdG8gdGhlIG1heAogKiBhZGRyZXNzIGFuZCBsb2NhdGluZyB3aGVyZSBpdCBhbGlhc2VzIHRvLCB3ZSBjYW4gZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgdmFsaWQKICogY29sdW1uIGJpdHMuCiAqCiAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgdG8gZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgaW50ZXJuYWwgYmFua3MgZWFjaCBEUkFNCiAqIGRldmljZSBoYXMuIFRoZSBleHRlcm5hbCBiYW5rICh1bmRlciB0ZXN0KSBpcyBjb25maWd1cmVkIGZvciBtYXhpbXVtIHJlYWNoCiAqIHdpdGggMTEtYml0IGNvbHVtbnMgYW5kIDQgaW50ZXJuYWwgYmFua3MuIFRoaXMgcm91dGluZSB3aWxsIHdyaXRlIHRvIGEgbWF4CiAqIGFkZHJlc3MgKEJBMSBhbmQgQkEwID0gMSkgYW5kIHRoZW4gcmVhZCBmcm9tIGFuIGFkZHJlc3Mgd2l0aCBCQTE9MCB0byBzZWUgaWYKICogdGhhdCBjb2x1bW4gaXMgYSAiZG9uJ3QgY2FyZSIuIElmIEJBMSBkb2VzIG5vdCBhZmZlY3Qgd3JpdGUvcmVhZCBvZiBkYXRhLAogKiB0aGVuIHRoaXMgZGV2aWNlIGhhcyBvbmx5IDIgaW50ZXJuYWwgYmFua3MuCiAqCiAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgdG8gZGV0ZXJtaW5lIHRoZSBlbmRpbmcgYWRkcmVzcyBmb3IgdGhpcyBleHRlcm5hbAogKiBiYW5rIG9mIFNEUkFNLiBXZSB3cml0ZSB0byBhIG1heCBhZGRyZXNzIHdpdGggYSBkYXRhIHZhbHVlIGFuZCB0aGVuIGRpc2FibGUKICogcm93IGFkZHJlc3MgYml0cyBsb29raW5nIGZvciAiZG9uJ3QgY2FyZSIgbG9jYXRpb25zLiBFYWNoICJkb24ndCBjYXJlIiBiaXQKICogcmVwcmVzZW50cyBhIGRpdmlkaW5nIG9mIHRoZSBtYXhpbXVtIGRlbnNpdHkgKDEyOE0pIGJ5IDIuIEJ5IGRpdmlkaW5nIHRoZQogKiBtYXhpbXVtIG9mIDMyIDRNIGNodW5rcyBpbiBhbiBleHRlcm5hbCBiYW5rIGRvd24gYnkgYWxsIHRoZSAiZG9uJ3QgY2FyZSIgYml0cwogKiBkZXRlcm1pbmVkIGR1cmluZyBzaXppbmcsIHdlIHNldCB0aGUgcHJvcGVyIGRlbnNpdHkuCiAqCiAqIFdBUk5JTkdTLgogKiBicCBtdXN0IGJlIHByZXNlcnZlZCBiZWNhdXNlIGl0IGlzIHVzZWQgZm9yIHJldHVybiBsaW5rYWdlLgogKgogKiBFWElUCiAqIG5vdGhpbmcgcmV0dXJuZWQgLSBidXQgdGhlIG1lbW9yeSBzdWJzeXN0ZW0gaXMgZW5hYmxlZAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKi8KCiNpbmNsdWRlIDxjb25maWcuaD4KCi5zZWN0aW9uIC50ZXh0Ci5lcXUgICAgICAgICAgICBEUkNDVEwsICAgICAweDBmZmZlZjAxMCAgIC8qIERSQU0gY29udHJvbCByZWdpc3RlciAqLwouZXF1ICAgICAgICAgICAgRFJDVE1DVEwsICAgMHgwZmZmZWYwMTIgICAvKiBEUkFNIHRpbWluZyBjb250cm9sIHJlZ2lzdGVyICovCi5lcXUgICAgICAgICAgICBEUkNDRkcsICAgICAweDBmZmZlZjAxNCAgIC8qIERSQU0gYmFuayBjb25maWd1cmF0aW9uIHJlZ2lzdGVyICovCi5lcXUgICAgICAgICAgICBEUkNCRU5EQURSLCAweDBmZmZlZjAxOCAgIC8qIERSQU0gYmFuayBlbmRpbmcgYWRkcmVzcyByZWdpc3RlciAqLwouZXF1ICAgICAgICAgICAgRUNDQ1RMLCAgICAgMHgwZmZmZWYwMjAgICAvKiBEUkFNIEVDQyBjb250cm9sIHJlZ2lzdGVyICovCi5lcXUgICAgICAgICAgICBFQ0NJTlQsICAgICAweDBmZmZlZmQxOCAgIC8qIERSQU0gRUNDIG5taS1JTlQgbWFwcGluZyAqLwouZXF1ICAgICAgICAgICAgREJDVEwsICAgICAgMHgwZmZmZWYwNDAgICAvKiBEUkFNIGJ1ZmZlciBjb250cm9sIHJlZ2lzdGVyICovCgouZXF1ICAgICAgICAgICAgQ0FDSEVMSU5FU1osIDB4MDAwMDAwMTAgICAvKiBzaXplIG9mIG91ciBjYWNoZSBsaW5lIChyZWFkIGJ1ZmZlcikgKi8KLmVxdSAgICAgICAgICAgIENPTDExX0FEUiwgIDB4MGUwMDFlMDAgICAgLyogMTEgY29sIGFkZHJzICovCi5lcXUgICAgICAgICAgICBDT0wxMF9BRFIsICAweDBlMDAwZTAwICAgIC8qIDEwIGNvbCBhZGRycyAqLwouZXF1ICAgICAgICAgICAgQ09MMDlfQURSLCAgMHgwZTAwMDYwMCAgICAvKiAgOSBjb2wgYWRkcnMgKi8KLmVxdSAgICAgICAgICAgIENPTDA4X0FEUiwgIDB4MGUwMDAyMDAgICAgLyogIDggY29sIGFkZHJzICovCi5lcXUgICAgICAgICAgICBST1cxNF9BRFIsICAweDBmMDAwMDAwICAgIC8qIDE0IHJvdyBhZGRycyAqLwouZXF1ICAgICAgICAgICAgUk9XMTNfQURSLCAgMHgwNzAwMDAwMCAgICAvKiAxMyByb3cgYWRkcnMgKi8KLmVxdSAgICAgICAgICAgIFJPVzEyX0FEUiwgIDB4MDMwMDAwMDAgICAgLyogMTIgcm93IGFkZHJzICovCi5lcXUgICAgICAgICAgICBST1cxMV9BRFIsICAweDAxMDAwMDAwICAgIC8qIDExIHJvdyBhZGRycy9hbHNvIGJhbmsgc3dpdGNoICovCi5lcXUgICAgICAgICAgICBST1cxMF9BRFIsICAweDAwMDAwMDAwICAgIC8qIDEwIHJvdyBhZGRycy9hbHNvIGJhbmsgc3dpdGNoICovCi5lcXUgICAgICAgICAgICBDT0wxMV9EQVRBLCAweDBiMGIwYjBiICAgIC8qIDExIGNvbCBhZGRycyAqLwouZXF1ICAgICAgICAgICAgQ09MMTBfREFUQSwgMHgwYTBhMGEwYSAgICAvKiAxMCBjb2wgZGF0YSAqLwouZXF1ICAgICAgICAgICAgQ09MMDlfREFUQSwgMHgwOTA5MDkwOSAgICAvKiAgOSBjb2wgZGF0YSAqLwouZXF1ICAgICAgICAgICAgQ09MMDhfREFUQSwgMHgwODA4MDgwOCAgICAvKiAgOCBjb2wgZGF0YSAqLwouZXF1ICAgICAgICAgICAgUk9XMTRfREFUQSwgMHgzZjNmM2YzZiAgICAvKiAxNCByb3cgZGF0YSAoTUFTSykgKi8KLmVxdSAgICAgICAgICAgIFJPVzEzX0RBVEEsIDB4MWYxZjFmMWYgICAgLyogMTMgcm93IGRhdGEgKE1BU0spICovCi5lcXUgICAgICAgICAgICBST1cxMl9EQVRBLCAweDBmMGYwZjBmICAgIC8qIDEyIHJvdyBkYXRhIChNQVNLKSAqLwouZXF1ICAgICAgICAgICAgUk9XMTFfREFUQSwgMHgwNzA3MDcwNyAgICAvKiAxMSByb3cgZGF0YS9hbHNvIGJhbmsgc3dpdGNoIChNQVNLKSAqLwouZXF1ICAgICAgICAgICAgUk9XMTBfREFUQSwgMHhhYWFhYWFhYSAgICAvKiAxMCByb3cgZGF0YS9hbHNvIGJhbmsgc3dpdGNoIChNQVNLKSAqLwoKCiAvKgogICogaW5pdGlhbGl6ZSBkcmFtIGNvbnRyb2xsZXIgcmVnaXN0ZXJzCiAgKi8KLmdsb2JsIG1lbV9pbml0Cm1lbV9pbml0OgoJeG9ydyAgICAlYXgsJWF4Cgltb3ZsICAgICREQkNUTCwgJWVkaQoJbW92YiAgICAgJWFsLCAoJWVkaSkgICAgICAgICAgICAgLyogZGlzYWJsZSB3cml0ZSBidWZmZXIgKi8KCgltb3ZsICAgICRFQ0NDVEwsICVlZGkKCW1vdmIgICAgICVhbCwgKCVlZGkpICAgICAgICAgICAgIC8qIGRpc2FibGUgRUNDICovCgoJbW92bCAgICAkRFJDVE1DVEwsICVlZGkKCW1vdmIgICAgJDB4MUUsJWFsICAgICAgICAgICAgICAgIC8qIFNldCBTRFJBTSB0aW1pbmcgZm9yIHNsb3dlc3QgKi8KCW1vdmIgICAgICVhbCwgKCVlZGkpCgogLyoKICAqIHNldHVwIGxvb3AgdG8gZG8gNCBleHRlcm5hbCBiYW5rcyBzdGFydGluZyB3aXRoIGJhbmsgMwogICovCgltb3ZsICAgICQweGZmMDAwMDAwLCVlYXggICAgICAgICAvKiBlbmFibGUgbGFzdCBiYW5rIGFuZCBzZXR1cCAqLwoJbW92bCAgICAkRFJDQkVOREFEUiwgJWVkaSAgICAgICAgLyogZW5kaW5nIGFkZHJlc3MgcmVnaXN0ZXIgKi8KCW1vdmwgICAgICVlYXgsICglZWRpKQoKCW1vdmwgICAgJERSQ0NGRywgJWVkaSAgICAgICAgICAgIC8qIHNldHVwICovCgltb3Z3ICAgICQweGJiYmIsJWF4ICAgICAgICAgICAgICAvKiBkcmFtIGNvbmZpZyByZWdpc3RlciBmb3IgICovCgltb3Z3ICAgICVheCwgKCVlZGkpCgogLyoKICAqIGlzc3VlIGEgTk9QIHRvIGFsbCBEUkFNcwogICovCgltb3ZsICAgICREUkNDVEwsICVlZGkgICAgICAgICAgICAvKiBzZXR1cCBEUkFNIGNvbnRyb2wgcmVnaXN0ZXIgd2l0aCAqLwoJbW92YiAgICAkMHgxLCVhbCAgICAgICAgICAgICAgICAgLyogRGlzYWJsZSByZWZyZXNoLGRpc2FibGUgd3JpdGUgYnVmZmVyICovCgltb3ZiICAgICAlYWwsICglZWRpKQoJbW92bCAgICAkQ0FDSEVMSU5FU1osICVlc2kgICAgICAgLyoganVzdCBhIGR1bW15IGFkZHJlc3MgdG8gd3JpdGUgZm9yICovCgltb3Z3ICAgICAlYXgsICglZXNpKQogLyoKICAqIGRlbGF5IGZvciAxMDAgdXNlYz8gMjAwPwogICogKioqKioqdGhpcyBpcyBhIGNsdWRnZSBmb3Igbm93ICoqKioqKioqKioqKioKICAqLwoJbW92dyAgICAkMTAwLCVjeApzaXpkZWxheToKCWxvb3AgICAgc2l6ZGVsYXkgICAgICAgICAgICAgICAgIC8qIHdlIG5lZWQgMTAwIHVzZWMgaGVyZSAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKIC8qCiAgKiBpc3N1ZSBhbGwgYmFua3MgcHJlY2hhcmdlCiAgKi8KCW1vdmIgICAgJDB4MiwlYWwgICAgICAgICAgICAgICAgIC8qIEFsbCBiYW5rcyBwcmVjaGFyZ2UgKi8KCW1vdmIgICAgICVhbCwgKCVlZGkpCgltb3Z3ICAgICAlYXgsICglZXNpKQoKIC8qCiAgKiBpc3N1ZSAyIGF1dG8gcmVmcmVzaGVzIHRvIGFsbCBiYW5rcwogICovCgltb3ZiICAgICQweDQsJWFsICAgICAgICAgICAgICAgICAvKiBBdXRvIHJlZnJlc2ggY21kICovCgltb3ZiICAgICAlYWwsICglZWRpKQoJbW92dyAgICAkMiwlY3gKcmVmcmVzaDE6Cgltb3Z3ICAgICAlYXgsICglZXNpKQoJbG9vcCAgICByZWZyZXNoMQoKIC8qCiAgKiBpc3N1ZSBMT0FEIE1PREUgUkVHSVNURVIgY29tbWFuZAogICovCgltb3ZiICAgICQweDMsJWFsICAgICAgICAgICAgICAgICAvKiBMb2FkIG1vZGUgcmVnaXN0ZXIgY21kICovCgltb3ZiICAgICAlYWwsICglZWRpKQoJbW92dyAgICAgJWF4LCAoJWVzaSkKCiAvKgogICogaXNzdWUgOCBtb3JlIGF1dG8gcmVmcmVzaGVzIHRvIGFsbCBiYW5rcwogICovCgltb3ZiICAgICQweDQsJWFsICAgICAgICAgICAgICAgICAvKiBBdXRvIHJlZnJlc2ggY21kICovCgltb3ZiICAgICAlYWwsICglZWRpKQoJbW92dyAgICAkOCwlY3gKcmVmcmVzaDI6Cgltb3Z3ICAgICAlYXgsICglZXNpKQoJbG9vcCAgICByZWZyZXNoMgoKIC8qCiAgKiBzZXQgY29udHJvbCByZWdpc3RlciB0byBOT1JNQUwgbW9kZQogICovCgltb3ZiICAgICQweDAsJWFsICAgICAgICAgICAgICAgICAvKiBOb3JtYWwgbW9kZSB2YWx1ZSAqLwoJbW92YiAgICAgJWFsLCAoJWVkaSkKCiAvKgogICogc2l6ZSBkcmFtIHN0YXJ0aW5nIHdpdGggZXh0ZXJuYWwgYmFuayAzIG1vdmluZyB0byBleHRlcm5hbCBiYW5rIDAKICAqLwoJbW92bCAgICAkMHgzLCVlY3ggICAgICAgICAgICAgICAgLyogc3RhcnQgd2l0aCBleHRlcm5hbCBiYW5rIDMgKi8KCm5leHRiYW5rOgoKIC8qCiAgKiB3cml0ZSBjb2wgMTEgd3JhcCBhZHIKICAqLwoJbW92bCAgICAkQ09MMTFfQURSLCAlZXNpICAgICAgICAgLyogc2V0IGFkZHJlc3MgdG8gbWF4IGNvbCAoMTEpIHdyYXAgYWRkciAqLwoJbW92bCAgICAkQ09MMTFfREFUQSwgJWVheCAgICAgICAgLyogcGF0dGVybiBmb3IgbWF4IHN1cHBvcnRlZCBjb2x1bW5zKDExKSAqLwoJbW92bCAgICAlZWF4LCAoJWVzaSkgICAgICAgICAgICAgLyogd3JpdGUgbWF4IGNvbCBwYXR0ZXJuIGF0IG1heCBjb2wgYWRyICovCgltb3ZsICAgICglZXNpKSwgJWVieCAgICAgICAgICAgICAvKiBvcHRpb25hbCByZWFkICovCgljbXBsICAgICVlYngsJWVheCAgICAgICAgICAgICAgICAvKiB0byB2ZXJpZnkgd3JpdGUgKi8KCWpueiAgICAgYmFkX3JhbSAgICAgICAgICAgICAgICAgIC8qIHRoaXMgcmFtIGlzIGJhZCAqLwogLyoKICAqIHdyaXRlIGNvbCAxMCB3cmFwIGFkcgogICovCgoJbW92bCAgICAkQ09MMTBfQURSLCAlZXNpICAgICAgICAgLyogc2V0IGFkZHJlc3MgdG8gMTAgY29sIHdyYXAgYWRkcmVzcyAqLwoJbW92bCAgICAkQ09MMTBfREFUQSwgJWVheCAgICAgICAgLyogcGF0dGVybiBmb3IgMTAgY29sIHdyYXAgKi8KCW1vdmwgICAgJWVheCwgKCVlc2kpICAgICAgICAgICAgIC8qIHdyaXRlIDEwIGNvbCBwYXR0ZXJuIEAgMTAgY29sIHdyYXAgYWRyICovCgltb3ZsICAgICglZXNpKSwgJWVieCAgICAgICAgICAgICAvKiBvcHRpb25hbCByZWFkICovCgljbXBsICAgICVlYngsJWVheCAgICAgICAgICAgICAgICAvKiB0byB2ZXJpZnkgd3JpdGUgKi8KCWpueiAgICAgYmFkX3JhbSAgICAgICAgICAgICAgICAgIC8qIHRoaXMgcmFtIGlzIGJhZCAqLwogLyoKICAqIHdyaXRlIGNvbCA5IHdyYXAgYWRyCiAgKi8KCW1vdmwgICAgJENPTDA5X0FEUiwgJWVzaSAgICAgICAgIC8qIHNldCBhZGRyZXNzIHRvIDkgY29sIHdyYXAgYWRkcmVzcyAqLwoJbW92bCAgICAkQ09MMDlfREFUQSwgJWVheCAgICAgICAgLyogcGF0dGVybiBmb3IgOSBjb2wgd3JhcCAqLwoJbW92bCAgICAlZWF4LCAoJWVzaSkgICAgICAgICAgICAgLyogd3JpdGUgOSBjb2wgcGF0dGVybiBAIDkgY29sIHdyYXAgYWRyICovCgltb3ZsICAgICglZXNpKSwgJWVieCAgICAgICAgICAgICAvKiBvcHRpb25hbCByZWFkICovCgljbXBsICAgICVlYngsJWVheCAgICAgICAgICAgICAgICAvKiB0byB2ZXJpZnkgd3JpdGUgKi8KCWpueiAgICAgYmFkX3JhbSAgICAgICAgICAgICAgICAgIC8qIHRoaXMgcmFtIGlzIGJhZCAqLwogLyoKICAqIHdyaXRlIGNvbCA4IHdyYXAgYWRyCiAgKi8KCW1vdmwgICAgJENPTDA4X0FEUiwgJWVzaSAgICAgICAgIC8qIHNldCBhZGRyZXNzIHRvIG1pbig4KSBjb2wgd3JhcCBhZGRyZXNzICovCgltb3ZsICAgICRDT0wwOF9EQVRBLCAlZWF4ICAgICAgICAvKiBwYXR0ZXJuIGZvciBtaW4gKDgpIGNvbCB3cmFwICovCgltb3ZsICAgICVlYXgsICglZXNpKSAgICAgICAgICAgICAvKiB3cml0ZSBtaW4gY29sIHBhdHRlcm4gQCBtaW4gY29sIGFkciAqLwoJbW92bCAgICAoJWVzaSksICVlYnggICAgICAgICAgICAgLyogb3B0aW9uYWwgcmVhZCAqLwoJY21wbCAgICAlZWJ4LCVlYXggICAgICAgICAgICAgICAgLyogdG8gdmVyaWZ5IHdyaXRlICovCglqbnogICAgIGJhZF9yYW0gICAgICAgICAgICAgICAgICAvKiB0aGlzIHJhbSBpcyBiYWQgKi8KIC8qCiAgKiB3cml0ZSByb3cgMTQgd3JhcCBhZHIKICAqLwoJbW92bCAgICAkUk9XMTRfQURSLCAlZXNpICAgICAgICAgLyogc2V0IGFkZHJlc3MgdG8gbWF4IHJvdyAoMTQpIHdyYXAgYWRkciAqLwoJbW92bCAgICAkUk9XMTRfREFUQSwgJWVheCAgICAgICAgLyogcGF0dGVybiBmb3IgbWF4IHN1cHBvcnRlZCByb3dzKDE0KSAqLwoJbW92bCAgICAlZWF4LCAoJWVzaSkgICAgICAgICAgICAgLyogd3JpdGUgbWF4IHJvdyBwYXR0ZXJuIGF0IG1heCByb3cgYWRyICovCgltb3ZsICAgICglZXNpKSwgJWVieCAgICAgICAgICAgICAvKiBvcHRpb25hbCByZWFkICovCgljbXBsICAgICVlYngsJWVheCAgICAgICAgICAgICAgICAvKiB0byB2ZXJpZnkgd3JpdGUgKi8KCWpueiAgICAgYmFkX3JhbSAgICAgICAgICAgICAgICAgIC8qIHRoaXMgcmFtIGlzIGJhZCAqLwogLyoKICAqIHdyaXRlIHJvdyAxMyB3cmFwIGFkcgogICovCgltb3ZsICAgICRST1cxM19BRFIsICVlc2kgICAgICAgICAvKiBzZXQgYWRkcmVzcyB0byAxMyByb3cgd3JhcCBhZGRyZXNzICovCgltb3ZsICAgICRST1cxM19EQVRBLCAlZWF4ICAgICAgICAvKiBwYXR0ZXJuIGZvciAxMyByb3cgd3JhcCAqLwoJbW92bCAgICAlZWF4LCAoJWVzaSkgICAgICAgICAgICAgLyogd3JpdGUgMTMgcm93IHBhdHRlcm4gQCAxMyByb3cgd3JhcCBhZHIgKi8KCW1vdmwgICAgKCVlc2kpLCAlZWJ4ICAgICAgICAgICAgIC8qIG9wdGlvbmFsIHJlYWQgKi8KCWNtcGwgICAgJWVieCwlZWF4ICAgICAgICAgICAgICAgIC8qIHRvIHZlcmlmeSB3cml0ZSAqLwoJam56ICAgICBiYWRfcmFtICAgICAgICAgICAgICAgICAgLyogdGhpcyByYW0gaXMgYmFkICovCiAvKgogICogd3JpdGUgcm93IDEyIHdyYXAgYWRyCiAgKi8KCW1vdmwgICAgJFJPVzEyX0FEUiwgJWVzaSAgICAgICAgIC8qIHNldCBhZGRyZXNzIHRvIDEyIHJvdyB3cmFwIGFkZHJlc3MgKi8KCW1vdmwgICAgJFJPVzEyX0RBVEEsICVlYXggICAgICAgIC8qIHBhdHRlcm4gZm9yIDEyIHJvdyB3cmFwICovCgltb3ZsICAgICVlYXgsICglZXNpKSAgICAgICAgICAgICAvKiB3cml0ZSAxMiByb3cgcGF0dGVybiBAIDEyIHJvdyB3cmFwIGFkciAqLwoJbW92bCAgICAoJWVzaSksICVlYnggICAgICAgICAgICAgLyogb3B0aW9uYWwgcmVhZCAqLwoJY21wbCAgICAlZWJ4LCVlYXggICAgICAgICAgICAgICAgLyogdG8gdmVyaWZ5IHdyaXRlICovCglqbnogICAgIGJhZF9yYW0gICAgICAgICAgICAgICAgICAvKiB0aGlzIHJhbSBpcyBiYWQgKi8KIC8qCiAgKiB3cml0ZSByb3cgMTEgd3JhcCBhZHIKICAqLwoJbW92bCAgICAkUk9XMTFfQURSLCAlZWRpICAgICAgICAgLyogc2V0IGFkZHJlc3MgdG8gMTEgcm93IHdyYXAgYWRkcmVzcyAqLwoJbW92bCAgICAkUk9XMTFfREFUQSwgJWVheCAgICAgICAgLyogcGF0dGVybiBmb3IgMTEgcm93IHdyYXAgKi8KCW1vdmwgICAgJWVheCwgKCVlZGkpICAgICAgICAgICAgIC8qIHdyaXRlIDExIHJvdyBwYXR0ZXJuIEAgMTEgcm93IHdyYXAgYWRyICovCgltb3ZsICAgICglZWRpKSwgJWVieCAgICAgICAgICAgICAvKiBvcHRpb25hbCByZWFkICovCgljbXBsICAgICVlYngsJWVheCAgICAgICAgICAgICAgICAvKiB0byB2ZXJpZnkgd3JpdGUgKi8KCWpueiAgICAgYmFkX3JhbSAgICAgICAgICAgICAgICAgIC8qIHRoaXMgcmFtIGlzIGJhZCAqLwogLyoKICAqIHdyaXRlIHJvdyAxMCB3cmFwIGFkciAtLS0gdGhpcyB3cml0ZSBpcyByZWFsbHkgdG8gZGV0ZXJtaW5lIG51bWJlciBvZiBiYW5rcwogICovCgltb3ZsICAgICRST1cxMF9BRFIsICVlZGkgICAgICAgICAvKiBzZXQgYWRkcmVzcyB0byAxMCByb3cgd3JhcCBhZGRyZXNzICovCgltb3ZsICAgICRST1cxMF9EQVRBLCAlZWF4ICAgICAgICAvKiBwYXR0ZXJuIGZvciAxMCByb3cgd3JhcCAoQUEpICovCgltb3ZsICAgICVlYXgsICglZWRpKSAgICAgICAgICAgICAvKiB3cml0ZSAxMCByb3cgcGF0dGVybiBAIDEwIHJvdyB3cmFwIGFkciAqLwoJbW92bCAgICAoJWVkaSksICVlYnggICAgICAgICAgICAgLyogb3B0aW9uYWwgcmVhZCAqLwoJY21wbCAgICAlZWJ4LCVlYXggICAgICAgICAgICAgICAgLyogdG8gdmVyaWZ5IHdyaXRlICovCglqbnogICAgIGJhZF9yYW0gICAgICAgICAgICAgICAgICAvKiB0aGlzIHJhbSBpcyBiYWQgKi8KIC8qCiAgKiByZWFkIGRhdGEgQCByb3cgMTIgd3JhcCBhZHIgdG8gZGV0ZXJtaW5lICAqIGJhbmtzLAogICogYW5kIHJlYWQgZGF0YSBAIHJvdyAxNCB3cmFwIGFkciB0byBkZXRlcm1pbmUgICogcm93cy4KICAqIGlmIGRhdGEgQCByb3cgMTIgd3JhcCBhZHIgaXMgbm90IEFBLCAxMSBvciAxMiB3ZSBoYXZlIGJhZCBSQU0uCiAgKiBpZiBkYXRhIEAgcm93IDEyIHdyYXAgPT0gQUEsIHdlIG9ubHkgaGF2ZSAyIGJhbmtzLCBOT1QgNAogICogaWYgZGF0YSBAIHJvdyAxMiB3cmFwID09IDExIG9yIDEyLCB3ZSBoYXZlIDQgYmFua3MsCiAgKi8KCXhvcncgICAgJWRpLCVkaSAgICAgICAgICAgICAgICAgIC8qIHZhbHVlIGZvciAyIGJhbmtzIGluIERJICovCgltb3ZsICAgICglZXNpKSwgJWVieCAgICAgICAgICAgICAvKiByZWFkIGZyb20gMTIgcm93IHdyYXAgdG8gY2hlY2sgYmFua3MKCQkJCQkgICogKGVzaSBpcyBzZXR1cCBmcm9tIHRoZSB3cml0ZSB0byByb3cgMTIgd3JhcCkgKi8KCWNtcGwgICAgJWVieCwlZWF4ICAgICAgICAgICAgICAgIC8qIGNoZWNrIGZvciBBQSBwYXR0ZXJuICAoZWF4IGhvbGRzIHRoZSBhYSBwYXR0ZXJuKSAqLwoJanogICAgICBvbmx5MiAgICAgICAgICAgICAgICAgICAgLyogaWYgcGF0dGVybiA9PSBBQSwgd2Ugb25seSBoYXZlIDIgYmFua3MgKi8KCgkvKiA0IGJhbmtzICovCgoJbW92dyAgICAkOCwlZGkgICAgICAgICAgICAgICAgICAgLyogdmFsdWUgZm9yIDQgYmFua3MgaW4gREkgKEJOS19DTlQgYml0KSAqLwoJY21wbCAgICAkUk9XMTFfREFUQSwgJWVieCAgICAgICAgLyogb25seSBvdGhlciBsZWdpdGltYXRlIHZhbHVlcyBhcmUgMTEgKi8KCWp6ICAgICAgb25seTIKCWNtcGwgICAgJFJPVzEyX0RBVEEsICVlYnggICAgICAgIC8qIGFuZCAxMiAqLwoJam56ICAgICBiYWRfcmFtICAgICAgICAgICAgICAgICAgLyogaXRzIGJhZCBpZiBub3QgMTEgb3IgMTIhICovCgoJLyogZmFsbCB0aHJvdWdoICovCm9ubHkyOgogLyoKICAqIHZhbGlkYXRlIHJvdyBtYXNrCiAgKi8KCW1vdmwgICAgJFJPVzE0X0FEUiwgJWVzaSAgICAgICAgIC8qIHNldCBhZGRyZXNzIGJhY2sgdG8gbWF4IHJvdyB3cmFwIGFkZHIgKi8KCW1vdmwgICAgKCVlc2kpLCAlZWF4ICAgICAgICAgICAgIC8qIHJlYWQgYWN0dWFsIG51bWJlciBvZiByb3dzIEAgcm93MTQgYWRyICovCgoJY21wbCAgICAkUk9XMTFfREFUQSwgJWVheCAgICAgICAgLyogcm93IG11c3QgYmUgZ3JlYXRlciB0aGFuIDExIHBhdHRlcm4gKi8KCWpiICAgICAgYmFkX3JhbQoKCWNtcGwgICAgJFJPVzE0X0RBVEEsICVlYXggICAgICAgIC8qIGFuZCByb3cgbXVzdCBiZSBsZXNzIHRoYW4gMTQgcGF0dGVybiAqLwoJamEgICAgICBiYWRfcmFtCgoJY21wYiAgICAlYWgsJWFsICAgICAgICAgICAgICAgICAgLyogdmVyaWZ5IGFsbCA0IGJ5dGVzIG9mIGR3b3JkIHNhbWUgKi8KCWpueiAgICAgYmFkX3JhbQoJbW92bCAgICAlZWF4LCVlYngKCXNocmwgICAgJDE2LCVlYngKCWNtcHcgICAgJWJ4LCVheAoJam56ICAgICBiYWRfcmFtCiAvKgogICogcmVhZCBjb2wgMTEgd3JhcCBhZHIgZm9yIHJlYWwgY29sdW1uIGRhdGEgdmFsdWUKICAqLwoJbW92bCAgICAkQ09MMTFfQURSLCAlZXNpICAgICAgICAgLyogc2V0IGFkZHJlc3MgdG8gbWF4IGNvbCAoMTEpIHdyYXAgYWRkciAqLwoJbW92bCAgICAoJWVzaSksICVlYXggICAgICAgICAgICAgLyogcmVhZCByZWFsIGNvbCBudW1iZXIgYXQgbWF4IGNvbCBhZHIgKi8KIC8qCiAgKiB2YWxpZGF0ZSBjb2x1bW4gZGF0YQogICovCgljbXBsICAgICRDT0wwOF9EQVRBLCAlZWF4ICAgICAgICAvKiBjb2wgbXVzdCBiZSBncmVhdGVyIHRoYW4gOCBwYXR0ZXJuICovCglqYiAgICAgIGJhZF9yYW0KCgljbXBsICAgICRDT0wxMV9EQVRBLCAlZWF4ICAgICAgICAvKiBhbmQgcm93IG11c3QgYmUgbGVzcyB0aGFuIDExIHBhdHRlcm4gKi8KCWphICAgICAgYmFkX3JhbQoKCXN1YmwgICAgJENPTDA4X0RBVEEsICVlYXggICAgICAgIC8qIG5vcm1hbGl6ZSBjb2x1bW4gZGF0YSB0byB6ZXJvICovCglqYyAgICAgIGJhZF9yYW0KCWNtcGIgICAgJWFoLCVhbCAgICAgICAgICAgICAgICAgIC8qIHZlcmlmeSBhbGwgNCBieXRlcyBvZiBkd29yZCBlcXVhbCAqLwoJam56ICAgICBiYWRfcmFtCgltb3ZsICAgICVlYXgsJWVkeAoJc2hybCAgICAkMTYsJWVkeAoJY21wdyAgICAlZHgsJWF4CglqbnogICAgIGJhZF9yYW0KIC8qCiAgKiBtZXJnZSBiYW5rIGFuZCBjb2wgZGF0YSB0b2dldGhlcgogICovCglhZGR3ICAgICVkaSwlZHggICAgICAgICAgICAgICAgICAvKiBtZXJnZSBvZiBiYW5rIGFuZCBjb2wgaW5mbyBpbiBkbCAqLwogLyoKICAqIGZpeCBlbmRpbmcgYWRkciBtYXNrIGJhc2VkIHVwb24gY29sIGluZm8KICAqLwoJbW92YiAgICAkMywlYWwKCXN1YmIgICAgJWRoLCVhbCAgICAgICAgICAgICAgICAgIC8qIGRoIGNvbnRhaW5zIHRoZSBvdmVyZmxvdyBmcm9tIHRoZSBiYW5rL2NvbCBtZXJnZSAgKi8KCW1vdmIgICAgJWJsLCVkaCAgICAgICAgICAgICAgICAgIC8qIGJsIGNvbnRhaW5zIHRoZSByb3cgbWFzayAoYWEsIDA3LCAwZiwgMWYgb3IgM2YpICovCgl4Y2hndyAgICVjeCwlYXggICAgICAgICAgICAgICAgICAvKiBjeCA9IGF4ID0gMyBvciAyIGRlcGVuZGluZyBvbiAyIG9yIDQgYmFuayBkZXZpY2UgKi8KCXNocmIgICAgJWNsLCVkaAkgICAgICAgICAgICAgICAgIC8qICAqLwoJaW5jYiAgICAlZGggICAgICAgICAgICAgICAgICAgICAgLyogZW5kaW5nIGFkZHIgaXMgMSBncmVhdGVyIHRoYW4gcmVhbCBlbmQgKi8KCXhjaGd3ICAgJWN4LCVheCAgICAgICAgICAgICAgICAgIC8qIGN4IGlzIGJhbmsgbnVtYmVyIGFnYWluICovCiAvKgogICogaXNzdWUgYWxsIGJhbmtzIHByZWNoYXJnZQogICovCmJhZF9yZWludDoKCW1vdmwgICAgJERSQ0NUTCwgJWVzaSAgICAgICAgICAgIC8qIHNldHVwIERSQU0gY29udHJvbCByZWdpc3RlciB3aXRoICovCgltb3ZiICAgICQweDIsJWFsICAgICAgICAgICAgICAgICAvKiBBbGwgYmFua3MgcHJlY2hhcmdlICovCgltb3ZiICAgICAlYWwsICglZXNpKQoJbW92bCAgICAkQ0FDSEVMSU5FU1osICVlc2kgICAgICAgLyogYWRkcmVzcyB0byBpbml0IHJlYWQgYnVmZmVyICovCgltb3Z3ICAgICAlYXgsICglZXNpKQoKIC8qCiAgKiB1cGRhdGUgRU5ESU5HIEFERFJFU1MgUkVHSVNURVIKICAqLwoJbW92bCAgICAkRFJDQkVOREFEUiwgJWVkaSAgICAgICAgLyogRFJBTSBlbmRpbmcgYWRkcmVzcyByZWdpc3RlciAqLwoJbW92bCAgICAlZWN4LCVlYngKCWFkZGwJJWVieCwgJWVkaQoJbW92YiAgICAlZGgsICglZWRpKQogLyoKICAqIHVwZGF0ZSBDT05GSUcgUkVHSVNURVIKICAqLwoJeG9yYiAgICAlZGgsJWRoCgltb3Z3ICAgICQweDAwZiwlYngKCW1vdncgICAgJWN4LCVheAoJc2hsdyAgICAkMiwlYXgKCXhjaGd3ICAgJWN4LCVheAoJc2hsdyAgICAlY2wsJWR4CglzaGx3ICAgICVjbCwlYngKCW5vdHcgICAgJWJ4Cgl4Y2hndyAgICVjeCwlYXgKCW1vdmwgICAgJERSQ0NGRywgJWVkaQoJbW92ICAgICAoJWVkaSksICVheAoJYW5kdyAgICAlYngsJWF4CglvcncgICAgICVkeCwlYXgKCW1vdncgICAgJWF4LCAoJWVkaSkKCWpjeHogICAgY2xlYW51cAoKCWRlY3cgICAgJWN4Cgltb3ZsICAgICVlY3gsJWVieAoJbW92bCAgICAkRFJDQkVOREFEUiwgJWVkaSAgICAgICAgLyogRFJBTSBlbmRpbmcgYWRkcmVzcyByZWdpc3RlciAqLwoJbW92YiAgICAkMHhmZiwlYWwKCWFkZGwJJWVieCwgJWVkaQoJbW92YiAgICAlYWwsICglZWRpKQogLyoKICAqIHNldCBjb250cm9sIHJlZ2lzdGVyIHRvIE5PUk1BTCBtb2RlCiAgKi8KCW1vdmwgICAgJERSQ0NUTCwgJWVzaSAgICAgICAgICAgIC8qIHNldHVwIERSQU0gY29udHJvbCByZWdpc3RlciB3aXRoICovCgltb3ZiICAgICQweDAsJWFsICAgICAgICAgICAgICAgICAvKiBOb3JtYWwgbW9kZSB2YWx1ZSAqLwoJbW92YiAgICAlYWwsICglZXNpKQoJbW92bCAgICAkQ0FDSEVMSU5FU1osICVlc2kgICAgICAgLyogYWRkcmVzcyB0byBpbml0IHJlYWQgYnVmZmVyICovCgltb3Z3ICAgICVheCwgKCVlc2kpCglqbXAgICAgIG5leHRiYW5rCgpjbGVhbnVwOgoJbW92bCAgICAkRFJDQkVOREFEUiwgJWVkaSAgICAgICAgLyogRFJBTSBlbmRpbmcgYWRkcmVzcyByZWdpc3RlciAgKi8KCW1vdncgICAgJDQsJWN4Cgl4b3J3ICAgICVheCwlYXgKY2xlYW51cGxwOgoJbW92YiAgICglZWRpKSwgJWFsCglvcmIgICAgICVhbCwlYWwKCWp6ICAgICAgZW1wdHliYW5rCgoJYWRkYiAgICAlYWgsJWFsCglqbnMgICAgIG5vdHRvb211Y2gKCgltb3ZiICAgICQweDdmLCVhbApub3R0b29tdWNoOgoJbW92YiAgICAlYWwsJWFoCglvcmIgICAgICQweDgwLCVhbAoJbW92YiAgICAlYWwsICglZWRpKQplbXB0eWJhbms6CglpbmNsICAgICVlZGkKCWxvb3AgICAgY2xlYW51cGxwCgojaWYgZGVmaW5lZCBDT05GSUdfU1lTX1NEUkFNX0RSQ1RNQ1RMCgkvKiBqdXN0IGhhdmUgeW91ciBoYXJkd2FyZSBkZXNpbmdlciBfR0lWRV8geW91IHdoYXQgeW91IG5lZWQgaGVyZSEgKi8KCW1vdmwgICAgJERSQ1RNQ1RMLCAlZWRpCgltb3ZiICAgICRDT05GSUdfU1lTX1NEUkFNX0RSQ1RNQ1RMLCVhbAoJbW92YiAgICAoJWVkaSksICVhbAojZWxzZQojaWYgZGVmaW5lZChDT05GSUdfU1lTX1NEUkFNX0NBU19MQVRFTkNZXzJUKSB8fCBkZWZpbmVkKENPTkZJR19TWVNfU0RSQU1fQ0FTX0xBVEVOQ1lfM1QpCgkvKiBzZXQgdGhlIENBUyBsYXRlbmN5IG5vdyBzaW5jZSBpdCBpcyBoYXJkIHRvIGRvCgkgKiB3aGVuIHdlIHJ1biBmcm9tIHRoZSBSQU0gKi8KCW1vdmwgICAgJERSQ1RNQ1RMLCAlZWRpICAgICAgICAgIC8qIERSQU0gdGltaW5nIHJlZ2lzdGVyICovCgltb3ZiICAgICglZWRpKSwgJWFsCiNpZmRlZiBDT05GSUdfU1lTX1NEUkFNX0NBU19MQVRFTkNZXzJUCglhbmRiICAgICQweGVmLCAlYWwKI2VuZGlmCiNpZmRlZiBDT05GSUdfU1lTX1NEUkFNX0NBU19MQVRFTkNZXzNUCglvcmIgICAgICQweDEwLCAlYWwKI2VuZGlmCgltb3ZiICAgICVhbCwgKCVlZGkpCiNlbmRpZgojZW5kaWYKCW1vdmwgICAgJERSQ0NUTCwgJWVkaSAgICAgICAgICAgIC8qIERSQU0gQ29udHJvbCByZWdpc3RlciAqLwoJbW92YiAgICAkMHgzLCVhbCAgICAgICAgICAgICAgICAgLyogTG9hZCBtb2RlIHJlZ2lzdGVyIGNtZCAqLwoJbW92YiAgICAgJWFsLCAoJWVkaSkKCW1vdncgICAgICVheCwgKCVlc2kpCgoKCW1vdmwgICAgJERSQ0NUTCwgJWVkaSAgICAgICAgICAgIC8qIERSQU0gQ29udHJvbCByZWdpc3RlciAqLwoJbW92YiAgICAkMHgxOCwlYWwgICAgICAgICAgICAgICAgLyogIEVuYWJsZSByZWZyZXNoIGFuZCBOT1JNQUwgbW9kZSAqLwoJbW92YiAgICAlYWwsICglZWRpKQoKCWptcCAgICAgZHJhbV9kb25lCgpiYWRfcmFtOgoJeG9ybCAgICAlZWR4LCVlZHgKCXhvcmwgICAgJWVkaSwlZWRpCglqbXAgICAgIGJhZF9yZWludAoKZHJhbV9kb25lOgoKCS8qIHJlYWRiYWNrIERSQ0JFTkRBRFIgYW5kIHJldHVybiB0aGUgbnVtYmVyCgkgKiBvZiBhdmFpbGFibGUgcmFtIGJ5dGVzIGluICVlYXggKi8KCgltb3ZsICAgICREUkNCRU5EQURSLCAlZWRpICAgICAgICAvKiBEUkFNIGVuZGluZyBhZGRyZXNzIHJlZ2lzdGVyICAqLwoKCW1vdmwJKCVlZGkpLCAlZWF4Cgltb3ZsCSVlYXgsICVlY3gKCWFuZGwJJDB4ODAwMDAwMDAsICVlY3gKCWp6CWJhbmsyCglhbmRsCSQweDdmMDAwMDAwLCAlZWF4CglzaHJsCSQyLCAlZWF4Cgltb3ZsCSVlYXgsICVlYngKCmJhbmsyOgltb3ZsCSglZWRpKSwgJWVheAoJbW92bAklZWF4LCAlZWN4CglhbmRsCSQweDAwODAwMDAwLCAlZWN4CglqegliYW5rMQoJYW5kbAkkMHgwMDdmMDAwMCwgJWVheAoJc2hsbAkkNiwgJWVheAoJbW92bAklZWF4LCAlZWJ4CgpiYW5rMToJbW92bAkoJWVkaSksICVlYXgKCW1vdmwJJWVheCwgJWVjeAoJYW5kbAkkMHgwMDAwODAwMCwgJWVjeAoJanoJYmFuazAKCWFuZGwJJDB4MDAwMDdmMDAsICVlYXgKCXNobGwJJDE0LCAlZWF4Cgltb3ZsCSVlYXgsICVlYngKCmJhbmswOgltb3ZsCSglZWRpKSwgJWVheAoJbW92bAklZWF4LCAlZWN4CglhbmRsCSQweDAwMDAwMDgwLCAlZWN4Cglqeglkb25lCglhbmRsCSQweDAwMDAwMDdmLCAlZWF4CglzaGxsCSQyMiwgJWVheAoJbW92bAklZWF4LCAlZWJ4CgoKZG9uZToKCW1vdmwJJWVieCwgJWVheAoKI2lmIENPTkZJR19TWVNfU0RSQU1fRUNDX0VOQUJMRQoJLyogQSBub21pbmFsIG1lbW9yeSB0ZXN0OiBqdXN0IGEgYnl0ZSBhdCBlYWNoIGFkZHJlc3MgbGluZSAqLwoJbW92bCAgICAlZWF4LCAlZWN4CglzaHJsICAgICQweDEsICVlY3gKCW1vdmwJJDB4MSwgJWVkaQptZW10ZXN0MDoKCW1vdmIJJDB4YTUsICglZWRpKQoJY21wYiAgICAkMHhhNSwgKCVlZGkpCglqbmUJb3V0CglzaHJsCSQxLCAlZWN4CglhbmRsCSVlY3gsJWVjeAoJanoJc2V0X2VjYwoJc2hsbAkkMSwgJWVkaQoJam1wCW1lbXRlc3QwCgpzZXRfZWNjOgoJLyogY2xlYXIgYWxsIHJhbSB3aXRoIGEgbWVtc2V0ICovCgltb3ZsCSVlYXgsICVlY3gKCXhvcmwJJWVzaSwgJWVzaQoJeG9ybAklZWRpLCAlZWRpCgl4b3JsCSVlYXgsICVlYXgKCXNocmwJJDIsICVlY3gKCWNsZAoJcmVwCXN0b3NsCgkJCS8qIGVuYWJsZSByZWFkLCB3cml0ZSBidWZmZXJzICovCgltb3ZiICAgICQweDExLCAlYWwKCW1vdmwgICAgJERCQ1RMLCAlZWRpCgltb3ZiICAgICVhbCwgKCVlZGkpCgkJCS8qIGVuYWJsZSBOTUkgbWFwcGluZyBmb3IgRUNDICovCgltb3ZsICAgICRFQ0NJTlQsICVlZGkKCW1vdgkkMHgxMCwgJWFsCgltb3ZiICAgICVhbCwgKCVlZGkpCgkJCS8qIFR1cm4gb24gRUNDICovCgltb3ZsICAgICRFQ0NDVEwsICVlZGkKCW1vdgkkMHgwNSwgJWFsCgltb3ZiICAgICVhbCwgKCVlZGkpCiNlbmRpZgpvdXQ6Cgltb3ZsCSVlYngsICVlYXgKCWptcAkqJWVicAo=