LyoKICogV2luZU1pbmUKICogU3BhbmlzaCBMYW5ndWFnZSBTdXBwb3J0CiAqCiAqIENvcHlyaWdodCAyMDAzIEpvc+kgTWFudWVsIEZlcnJlciBPcnRpeiA8am1mbzE5ODJAeWFob28uZXM+CiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfU1BBTklTSCwgU1VCTEFOR19ERUZBVUxUCgpTVFJJTkdUQUJMRSB7CiAgICAgSURTX0FQUE5BTUUsICJXaW5lTWluZSIKCn0KCk1FTlVfV0lORU1JTkUgTUVOVSBESVNDQVJEQUJMRQp7CiAgICBQT1BVUCAiJk9wY2lvbmVzIiB7CiAgICAgICAgTUVOVUlURU0gIiZOdWV2b1x0RjIiLCAgICAgSURNX05FVwogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImSW50ZXJyb2dhY2nzbiIsIElETV9NQVJLUQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImUHJpbmNpcGlhbnRlIiwgIElETV9CRUdJTk5FUgogICAgICAgIE1FTlVJVEVNICImQXZhbnphZG8iLCAgICAgIElETV9BRFZBTkNFRAogICAgICAgIE1FTlVJVEVNICImRXhwZXJ0byIsICAgICAgIElETV9FWFBFUlQKICAgICAgICBNRU5VSVRFTSAiUCZlcnNvbmFsaXphZG8iLCBJRE1fQ1VTVE9NCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZTYWxpclx0QWx0K1giLCAgSURNX0VYSVQKICAgIH0KICAgIFBPUFVQICImQXl1ZGEiIHsKICAgICAgICBNRU5VSVRFTSAiJk1lam9yZXMgdGllbXBvcyIsIElETV9USU1FUwogICAgICAgIE1FTlVJVEVNICImQWNlcmNhIGRlIiwgICAgICAgSURNX0FCT1VUCiAgICB9Cn0KCkRMR19USU1FUyBESUFMT0cgRElTQ0FSREFCTEUgMCwgMCwgMTYwLCA4MApTVFlMRSAgRFNfTU9EQUxGUkFNRSB8IERTXzNETE9PSyB8CiAgICBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUgfCBXU19QT1BVUApDQVBUSU9OICJNZWpvcmVzIHRpZW1wb3MiCnsKICAgIEdST1VQQk9YICAgICAgICAiTWVqb3JlcyB0aWVtcG9zIiwgSURJR05PUkUsICAxMCwgIDEwLCAxNDAsICA0NQogICAgTFRFWFQgICAgICAgICAgICJQcmluY2lwaWFudGUiLCAgICBJRElHTk9SRSwgIDIwLCAgMjAsICA0MCwgICA4CiAgICBMVEVYVCAgICAgICAgICAgIkF2YW56YWRvIiwgICAgICAgIElESUdOT1JFLCAgMjAsICAzMCwgIDQwLCAgIDgKICAgIExURVhUICAgICAgICAgICAiRXhwZXJ0byIsICAgICAgICAgSURJR05PUkUsICAyMCwgIDQwLCAgNDAsICAgOAogICAgTFRFWFQgICAgICAgICAgICI5OTkiLCAgICAgICAgICAgICBJRENfVElNRTEsICA3MCwgIDIwLCAgMTUsICAgOAogICAgTFRFWFQgICAgICAgICAgICI5OTkiLCAgICAgICAgICAgICBJRENfVElNRTIsICA3MCwgIDMwLCAgMTUsICAgOAogICAgTFRFWFQgICAgICAgICAgICI5OTkiLCAgICAgICAgICAgICBJRENfVElNRTMsICA3MCwgIDQwLCAgMTUsICAgOAogICAgTFRFWFQgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICBJRENfTkFNRTEsICA5MCwgIDIwLCAgNTUsICAgOAogICAgTFRFWFQgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICBJRENfTkFNRTIsICA5MCwgIDMwLCAgNTUsICAgOAogICAgTFRFWFQgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICBJRENfTkFNRTMsICA5MCwgIDQwLCAgNTUsICAgOAogICAgREVGUFVTSEJVVFRPTiAgICJBY2VwdGFyIiwgICAgICAgICBJRE9LLCAgNTUsICA2MCwgIDUwLCAgMTUKfQoKRExHX0NPTkdSQVRTIERJQUxPRyBESVNDQVJEQUJMRSAgMCwgMCwgMTYwLCA2MApTVFlMRSAgRFNfTU9EQUxGUkFNRSB8IERTXzNETE9PSyB8CiAgICBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUgfCBXU19QT1BVUApDQVBUSU9OICKhRW5ob3JhYnVlbmEhIgp7CiAgICBMVEVYVCAgICAgICAgICAgIlBvciBmYXZvciwgaW50cm9kdXpjYSBzdSBub21icmUiLCBJRElHTk9SRSwgMTAsIDEwLCAxNTAsIDEwCiAgICBFRElUVEVYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElEQ19FRElUTkFNRSwgIDI1LCAgMjAsIDExMCwgIDEyCiAgICBERUZQVVNIQlVUVE9OICAgIkFjZXB0YXIiLCAgICAgICAgICAgICAgICAgICAgSURPSywgIDYwLCAgNDAsICA0MCwgIDE1Cn0KCkRMR19DVVNUT00gRElBTE9HIERJU0NBUkRBQkxFICAwLCAwLCAxMDAsIDEwMApTVFlMRSAgRFNfTU9EQUxGUkFNRSB8IERTXzNETE9PSyB8CiAgICBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUgfCBXU19QT1BVUApDQVBUSU9OICJKdWVnbyBwZXJzb25hbGl6YWRvIgp7CiAgICBMVEVYVCAgICAgICAgICAgIkZpbGFzIiwgICAgSURJR05PUkUsICAgNSwgICA1LCAgMzAsICAxMAogICAgTFRFWFQgICAgICAgICAgICJDb2x1bW5hcyIsIElESUdOT1JFLCAgIDUsICAzNSwgIDMwLCAgMTAKICAgIExURVhUICAgICAgICAgICAiTWluYXMiLCAgICBJRElHTk9SRSwgICA1LCAgNjUsICAzMCwgIDEwCiAgICBFRElUVEVYVCAgICAgICAgICAgICAgSURDX0VESVRST1dTLCAgIDUsICAxNSwgIDIwLCAgMTIsIEVTX05VTUJFUgogICAgRURJVFRFWFQgICAgICAgICAgICAgIElEQ19FRElUQ09MUywgICA1LCAgNDUsICAyMCwgIDEyLCBFU19OVU1CRVIKICAgIEVESVRURVhUICAgICAgICAgICAgIElEQ19FRElUTUlORVMsICAgNSwgIDc1LCAgMjAsICAxMiwgRVNfTlVNQkVSCiAgICBERUZQVVNIQlVUVE9OICAgIkFjZXB0YXIiLCAgICBJRE9LLCAgNDAsICAzMCwgIDUwLCAgMTUKICAgIFBVU0hCVVRUT04gICAgICAiQ2FuY2VsYXIiLCBJRENBTkNFTCwgIDQwLCAgNTAsICA1MCwgIDE1Cn0KCkRMR19BQk9VVCBESUFMT0cgRElTQ0FSREFCTEUgIDAsIDAsIDE2MCwgODAKU1RZTEUgIERTX01PREFMRlJBTUUgfCBEU18zRExPT0sgfAogICAgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VIHwgV1NfUE9QVVAKQ0FQVElPTiAiQWNlcmNhIGRlIgp7CiAgICBMVEVYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiV2luZW1pbmUiLCBJRElHTk9SRSwgIDEwLCAgMTAsICA1MCwgIDEwCiAgICBMVEVYVCAgICAgICAgICJDb3B5cmlnaHQgMjAwMCwgSm9zaHVhIFRoaWVsZW4iLCBJRElHTk9SRSwgIDM1LCAgMjUsIDExNSwgIDEwCiAgICBMVEVYVCAgICAgICAgICAgICAgICJiYWpvIGxhIGxpY2VuY2lhIGRlIFdpbmUiLCBJRElHTk9SRSwgIDM1LCAgMzUsIDExNSwgIDEwCiAgICBJQ09OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiV0lORU1JTkUiLCBJRElHTk9SRSwgIDEwLCAgMjUsICAyMCwgIDIwCiAgICBERUZQVVNIQlVUVE9OICAgICAgICAgICAgICAgICAgICAgICAgIkFjZXB0YXIiLCBJRE9LLCAgICAgIDUwLCAgNjAsICA2MCwgIDE1Cn0K