LyoKICogUmVnZWRpdCByZXNvdXJjZXMKICoKICogQ29weXJpZ2h0IDIwMDMgUm9rIE1hbmRlbGpjIDxyb2subWFuZGVsamNAZ2ltYi5vcmc+CiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfU0xPVkVOSUFOLCBTVUJMQU5HX05FVVRSQUwKCi8qCiAqIE1lbnUKICovCgpJRENfUkVHRURJVCBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCiAgICBQT1BVUCAiJkRhdG90ZWthIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiSXomaG9kIiwgICAgICAgICAgICAgICAgICAgICAgIElEX1JFR0lTVFJZX0VYSVQKICAgIEVORAogICAgUE9QVVAgIiZQb21v6CIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIiZPIC4uLiIsICAgICAgICAgICAgICAgICAgSURfSEVMUF9BQk9VVAogICAgRU5ECkVORAoKSURSX1JFR0VESVRfTUVOVSBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCiAgICBQT1BVUCAiJlJlZ2lzdGVyIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiJlV2b3ppIHJlZ2lzdHJza28gZGF0b3Rla28gLi4uIiwgICAgSURfUkVHSVNUUllfSU1QT1JUUkVHSVNUUllGSUxFCiAgICAgICAgTUVOVUlURU0gIiZJenZvemkgcmVnaXN0cnNrbyBkYXRvdGVrbyAuLi4iLCAgICBJRF9SRUdJU1RSWV9FWFBPUlRSRUdJU1RSWUZJTEUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiUCZvdmWeaSBzZSB6IG9tcmWebmltIHJlZ2lzdHJvbSAuLi4iLCBJRF9SRUdJU1RSWV9DT05ORUNUTkVUV09SS1JFR0lTVFJZLCBHUkFZRUQKICAgICAgICBNRU5VSVRFTSAiUCZyZWtpbmkgcG92ZXphdm8geiBvbXJlnm5pbSByZWdpc3Ryb20gLi4uIiwgSURfUkVHSVNUUllfRElTQ09OTkVDVE5FVFdPUktSRUdJU1RSWSwgR1JBWUVECiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIk5hJnRpc25pXHRDdHJsK1AiLCAgICAgICAgICAgICAgSURfUkVHSVNUUllfUFJJTlQsIEdSQVlFRAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICJJeiZob2QiLCAgICAgICAgICAgICAgICAgICAgICAgSURfUkVHSVNUUllfRVhJVAogICAgRU5ECiAgICBQT1BVUCAiJlVyZWphbmplIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiJlNwcmVtZW5pIiwgICAgICAgICAgICAgICAgICAgICBJRF9FRElUX01PRElGWQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIFBPUFVQICImTm92YSIKICAgICAgICBCRUdJTgogICAgICAgICAgICBNRU5VSVRFTSAiJktsanXoIiwgICAgICAgICAgICAgICAgICAgICAgICBJRF9FRElUX05FV19LRVkKICAgICAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgICAgIE1FTlVJVEVNICImTml6IiwgICAgICAgICAgICAgICBJRF9FRElUX05FV19TVFJJTkdWQUxVRQogICAgICAgICAgICBNRU5VSVRFTSAiJkJpbmFybmEgdnJlZG5vc3QiLCAgICAgICAgICAgICAgIElEX0VESVRfTkVXX0JJTkFSWVZBTFVFCiAgICAgICAgICAgIE1FTlVJVEVNICImRFdPUkQgdnJlZG5vc3QiLCAgICAgICAgICAgICAgICBJRF9FRElUX05FV19EV09SRFZBTFVFCiAgICAgICAgRU5ECiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIkl6YnJpJpppXHREZWwiLCAgICAgICAgICAgICAgICBJRF9FRElUX0RFTEVURQogICAgICAgIE1FTlVJVEVNICJQcmVpJm1lbnVqXHRGMiIsICAgICAgICAgICAgICAgICAgICAgSURfRURJVF9SRU5BTUUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJktvcGlyYWogaW1lIGtsanXoYSIsICAgICAgICAgICAgICBJRF9FRElUX0NPUFlLRVlOQU1FCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZOYWpkaVx0Q3RybCtGIiwgICAgICAgICAgICAgICBJRF9FRElUX0ZJTkQsIEdSQVlFRAogICAgICAgIE1FTlVJVEVNICJOYSZkYWxqdWogaXNrYW5qZVx0RjMiLCAgICAgICAgICAgICAgSURfRURJVF9GSU5ETkVYVCwgR1JBWUVECiAgICBFTkQKICAgIFBPUFVQICJQb2dsJmVkIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiJlZyc3RpY2Egc3RhbmphIiwgICAgICAgICAgICAgICAgIElEX1ZJRVdfU1RBVFVTQkFSCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZEZWxpbG5hIOhydGEiLCAgICAgICAgICAgICAgICAgICAgICBJRF9WSUVXX1NQTElUCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZPc3ZlnmlcdEY1IiwgICAgICAgICAgICAgICAgSURfVklFV19SRUZSRVNICiAgICBFTkQKICAgIFBPUFVQICImUHJpbGp1YmxqZW5lIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiJkRvZGFqIG1lZCBQcmlsanVibGplbmUiLCAgICAgICAgICBJRF9GQVZPUklURVNfQUREVE9GQVZPUklURVMKICAgICAgICBNRU5VSVRFTSAiJk9kc3RyYW5pIGl6IFByaWxqdWJsamVuaWgiLCAgICAgICAgICAgSURfRkFWT1JJVEVTX1JFTU9WRUZBVk9SSVRFCiAgICBFTkQKICAgIFBPUFVQICImUG9tb+giCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICImVGVtZSBwb21v6GkiLCAgICAgICAgICAgICAgICBJRF9IRUxQX0hFTFBUT1BJQ1MKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJk8gVXJlamV2YWxuaWt1IHJlZ2lzdHJhIiwgICAgICBJRF9IRUxQX0FCT1VUCiAgICBFTkQKRU5ECgoKLyoKICogRGlhbG9nCiAqLwoKSUREX0FCT1VUQk9YIERJQUxPRyBESVNDQVJEQUJMRSAgMjIsIDE3LCAyMzAsIDc1ClNUWUxFIERTX01PREFMRlJBTUUgfCBEU19OT0lETEVNU0cgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJPIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCkJFR0lOCiAgICBJQ09OICAgICAgICAgICAgSURJX1JFR0VESVQsSURJX1JFR0VESVQsMTQsOSwxNiwxNgogICAgTFRFWFQgICAgICAgICAgICJSZWFjdE9Tb3YgVXJlamV2YWxuaWsgcmVnaXN0cmEsIHZlcnppamEgMS4wIixJRENfU1RBVElDLDQ5LDEwLDExOSw4LAogICAgICAgICAgICAgICAgICAgIFNTX05PUFJFRklYCiAgICBMVEVYVCAgICAgICAgICAgIkNvcHlyaWdodCAoQykgMjAwMiBla2lwYSBSZWFjdE9TIixJRENfU1RBVElDLDQ5LDIwLDExOSw4CiAgICBERUZQVVNIQlVUVE9OICAgIlYgcmVkdSIsSURPSywxOTUsNiwzMCwxMSxXU19HUk9VUApFTkQKCi8qCiAqIFN0cmluZyBUYWJsZQogKi8KClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCkJFR0lOCiAgICBJRFNfTElTVF9DT0xVTU5fTkFNRSAgICAiSW1lIgogICAgSURTX0xJU1RfQ09MVU1OX1RZUEUgICAgIlZyc3RhIgogICAgSURTX0xJU1RfQ09MVU1OX0RBVEEgICAgIlBvZGF0a2kiCkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIElEU19BUFBfVElUTEUgICAgICAgICAgICJVcmVqZXZhbG5payByZWdpc3RyYSIKICAgIElEQ19SRUdFRElUICAgICAgICAgICAgICJSRUdFRElUIgogICAgSURDX1JFR0VESVRfRlJBTUUgICAgICAgIlJFR0VESVRfRlJBTUUiCkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIElEX1JFR0lTVFJZX01FTlUgICAgICAgICJVa2F6aSB6YSBkZWxvIHMgY2Vsb3RuaW0gcmVnaXN0cm9tIgogICAgSURfRURJVF9NRU5VICAgICAgICAgICAgIlVrYXppIHphIHVyZWphbmplIHZyZWRub3N0aSBpbiBrbGp16GV2IgogICAgSURfVklFV19NRU5VICAgICAgICAgICAgIlVrYXppIHphIHByaWxhZ2FqYW5qZSByZWdpc3Ryc2tlZ2Egb2tuYSIKICAgIElEX0ZBVk9SSVRFU19NRU5VICAgICAgICJVa2F6aSB6YSBkb3N0b3AgZG8gbmVkYXZubyBvZHBydGloIGtsanXoZXYiCiAgICBJRF9IRUxQX01FTlUgICAgICAgICAgICAiVWthemkgemEgcHJpa2F6b3ZhbmplIHBvbW/oaSBpbiBpbmZvcm1hY2lqIG8gcHJvZ3JhbXUiCiAgICBJRF9FRElUX05FV19NRU5VICAgICAgICAiVWthemkgemEgdXN0dmFyamFuamUgbm92aWgga2xqdehldiBpbiB2cmVkbm9zdGkiCkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIElEX0VESVRfTU9ESUZZICAgICAgICAgICJTcHJlbWVuaSBwb2RhdGtlIHZyZWRub3N0aSIKICAgIElEX0VESVRfTkVXX0tFWSAgICAgICAgICJEb2RhIG5vdiBrbGp16CIKICAgIElEX0VESVRfTkVXX1NUUklOR1ZBTFVFICJEb2RhIG5vdiBuaXoiCiAgICBJRF9FRElUX05FV19CSU5BUllWQUxVRSAiRG9kYSBub3ZvIGJpbmFybm8gdnJlZG5vc3QiCiAgICBJRF9FRElUX05FV19EV09SRFZBTFVFICAiRG9kYSBub3ZvIERXT1JEIHZyZWRub3N0IgogICAgSURfUkVHSVNUUllfSU1QT1JUUkVHSVNUUllGSUxFICJWIHJlZ2lzdGVyIHV2b3ppIGRhdG90ZWtvIHogYmVzZWRpbG9tIgogICAgSURfUkVHSVNUUllfRVhQT1JUUkVHSVNUUllGSUxFCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUmVnaXN0cnNrbyBkYXRvdGVrbyBhbGkgbmplbiBkZWwgaXp2b3ppIHYgYmVzZWRpbG5vIGRhdG90ZWtvIgogICAgSURfUkVHSVNUUllfQ09OTkVDVE5FVFdPUktSRUdJU1RSWQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIlZ6cG9zdGF2aSBwb3ZlemF2byB6IHJlZ2lzdHJvbSBvZGRhbGplbmVnYSByYeh1bmFsbmlrYSIKICAgIElEX1JFR0lTVFJZX0RJU0NPTk5FQ1RORVRXT1JLUkVHSVNUUlkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmVraW5lIHBvdmV6YXZvIHogcmVnaXN0cm9tIG9kZGFsamVuZWdhIHJh6HVuYWxuaWthIgogICAgSURfUkVHSVNUUllfUFJJTlQgICAgICAgIk5hdGlzbmUgcmVnaXN0cnNrbyBkYXRvdGVrbyBhbGkgbmplbiBkZWwiCi8qICAgIElEX0hFTFBfSEVMUFRPUElDUyAgICAgICJPZHByZSBwb21vQyIgKi8KICAgIElEX0hFTFBfQUJPVVQgICAgICAgICAgICJJbmZvcm1hY2lqZSBvIHByb2dyYW11LCCadGV2aWxraSByYXpsaehpY2UgaW4gYXZ0b3Jza2loIHByYXZpY2FoIgpFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCkJFR0lOCiAgICBJRF9SRUdJU1RSWV9FWElUICAgICAgICAiS29u6GEgcHJvZ3JhbSIKICAgIElEX0ZBVk9SSVRFU19BRERUT0ZBVk9SSVRFUyAiRG9kYSBrbGp16CBtZWQgUHJpbGp1YmxqZW5lIgogICAgSURfRkFWT1JJVEVTX1JFTU9WRUZBVk9SSVRFICJPZHN0cmFuaSBrbGp16CBpeiBQcmlsanVibGplbmloIgogICAgSURfVklFV19TVEFUVVNCQVIgICAgICAgIlByaWthnmUgYWxpIHNrcmlqZSB2cnN0aWNvIHN0YW5qYSIKICAgIElEX1ZJRVdfU1BMSVQgICAgICAgICAgICJTcHJlbWVuaSBwb2xvnmFqIG1lZCBkZWxpbG5lIOhydGUgbWVkIHBvZG9rbmkiCiAgICBJRF9WSUVXX1JFRlJFU0ggICAgICAgICAiT3N2ZZ5pIG9rbm8iCiAgICBJRF9FRElUX0RFTEVURSAgICAgICAgICAiSXpicmmaZSBpemJvciIKICAgIElEX0VESVRfUkVOQU1FICAgICAgICAgICJQcmVpbWVudWplIGl6Ym9yIgogICAgSURfRURJVF9DT1BZS0VZTkFNRSAgICAgIlByZWtvcGlyYSBpbWUgaXpicmFuZWdhIGtsanXoYSB2IG9kbG+eaZroZSIKICAgIElEX0VESVRfRklORCAgICAgICAgICAgICJJmuhlIG5peiB2IGtsanXodSwgdnJlZG5vc3RpIGFsaSBwb2RhdGtpaCIKICAgIElEX0VESVRfRklORE5FWFQgICAgICAgICJJmuhlIG5hc2xlZG5qbyBwb25vdml0ZXYgaXNrYW5lZ2EgYmVzZWRpbGEiCkVORAoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKLyoKICogVEVYVElOQ0xVREUKICovCgoxIFRFWFRJTkNMVURFIERJU0NBUkRBQkxFCkJFR0lOCiAgICAicmVzb3VyY2UuaFwwIgpFTkQKCgoKLyoKICogU3RyaW5nIFRhYmxlCiAqLwoKLyoKICpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQogKkJFR0lOCiAqICAgIElEX0hFTFBfSEVMUFRPUElDUyAgICAgICJPZHByZSBwb21v6C4iCiAqICAgIElEX0hFTFBfQUJPVVQgICAgICAgICAgICJJbmZvcm1hY2lqZSBvIHByb2dyYW11LCCadGV2aWxraSByYXpsaehpY2UgaW4gYXZ0b3Jza2loIHByYXZpY2FoLiIKICpFTkQKICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCg==