LyoKICogSGVscCBWaWV3ZXIgKFNsb3ZlbmlhbiBSZXNvdXJjZXMpCiAqCiAqIENvcHlyaWdodCAyMDAyLTIwMDMgUm9rIE1hbmRlbGpjIDxyb2subWFuZGVsamNAZ2ltYi5vcmc+CiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogKi8KCi8qIE1lbnUgKi8KCk1BSU5fTUVOVSBNRU5VIExBTkdVQUdFIExBTkdfU0xPVkVOSUFOLCBTVUJMQU5HX0RFRkFVTFQKewogUE9QVVAgIiZEYXRvdGVrYSIgewogIE1FTlVJVEVNICImT2RwcmkgLi4uIiwgTU5JRF9GSUxFX09QRU4KICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiTmEmdGlzbmkgdGVtbyAuLi4iLCBNTklEX0ZJTEVfUFJJTlQKICBNRU5VSVRFTSAiJlByaXByYXZhIHRpc2thbG5pa2EiLCBNTklEX0ZJTEVfU0VUVVAKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiSXomaG9kIiwgTU5JRF9GSUxFX0VYSVQKIH0KIFBPUFVQICImVXJlamFuamUiIHsKICAgTUVOVUlURU0gIiZLb3BpcmFqIiwgTU5JRF9FRElUX0NPUFlETEcKICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgIE1FTlVJVEVNICImUHJpcG9tYmUgLi4uIiwgTU5JRF9FRElUX0FOTk9UQVRFCiB9CiBQT1BVUCAiJlphem5hbWVrIiB7CiAgIE1FTlVJVEVNICImRG9sb+hpIC4uLiIsIE1OSURfQktNS19ERUZJTkUKIH0KIFBPUFVQICImUG9tb+giIHsKICAgTUVOVUlURU0gIiZPIHBvbW/oaSIsIE1OSURfSEVMUF9IRUxQT04KICAgTUVOVUlURU0gIlZlZG5vIG5hICZ2cmh1IiwgTU5JRF9IRUxQX0hFTFBUT1AKICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgIE1FTlVJVEVNICImSW5mb3JtYWNpamUgLi4uIiwgTU5JRF9IRUxQX0FCT1VUCiNpZmRlZiBXSU5FTElCCiAgIE1FTlVJVEVNICImTyBXSU5FIiwgTU5JRF9IRUxQX1dJTkUKI2VuZGlmCiB9Cn0KCi8qIFN0cmluZ3MgKi8KU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUgTEFOR1VBR0UgTEFOR19TTE9WRU5JQU4sIFNVQkxBTkdfREVGQVVMVAp7ClNUSURfV0lORV9IRUxQLCAJCSJXSU5FIFBvbW/oIgpTVElEX1dIRVJST1IsIAkJIk5BUEFLQSIKU1RJRF9XQVJOSU5HLCAgCQkiT1BPWk9SSUxPIgpTVElEX0lORk8sICAJCQkiSW5mb3JtYWNpamEiClNUSURfTk9UX0lNUExFTUVOVEVELCAJIk5pICiaZSkgbmEgdm9sam8iClNUSURfSExQRklMRV9FUlJPUl9zLCAJIk5hcGFrYSBwcmkgYnJhbmp1IGRhdG90ZWtlIGAlcyciClNUSURfQ09OVEVOVFMsIAkJIiZUZW1lIHBvbW/oaSIKU1RJRF9TRUFSQ0gsIAkJIiZJc2thbmplIgpTVElEX0JBQ0ssIAkJCSImTmF6YWoiClNUSURfSElTVE9SWSwgCQkiJlpnb2RvdmluYSIKU1RJRF9UT1BJQ1MsCQkiJlZzZWJpbmEiClNUSURfQUxMX0ZJTEVTLCAJCSJWc2UgZGF0aXRla2UgKCouKikiClNUSURfSEVMUF9GSUxFU19ITFAsIAkiRGF0b3Rla2UgcyBwb21v6GpvICgqLmhscCkiCn0K