Km1sYW5nLnR4dCogICAgIEZvciBWaW0gdmVyc2lvbiA3LjQuICBMYXN0IGNoYW5nZTogMjAxNiBKYW4gMTYKCgoJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQnJhbSBNb29sZW5hYXIKCgpNdWx0aS1sYW5ndWFnZSBmZWF0dXJlcwkJCQkqbXVsdGlsYW5nKiAqbXVsdGktbGFuZyoKClRoaXMgaXMgYWJvdXQgdXNpbmcgbWVzc2FnZXMgYW5kIG1lbnVzIGluIHZhcmlvdXMgbGFuZ3VhZ2VzLiAgRm9yIGVkaXRpbmcKbXVsdGktYnl0ZSB0ZXh0IHNlZSB8bXVsdGlieXRlfC4KClRoZSBiYXNpY3MgYXJlIGV4cGxhaW5lZCBpbiB0aGUgdXNlciBtYW51YWw6IHx1c3JfNDUudHh0fC4KCjEuIE1lc3NhZ2VzCQkJfG11bHRpbGFuZy1tZXNzYWdlc3wKMi4gTWVudXMJCQl8bXVsdGlsYW5nLW1lbnVzfAozLiBTY3JpcHRzCQkJfG11bHRpbGFuZy1zY3JpcHRzfAoKQWxzbyBzZWUgfGhlbHAtdHJhbnNsYXRlZHwgZm9yIG11bHRpLWxhbmd1YWdlIGhlbHAuCgp7VmkgZG9lcyBub3QgaGF2ZSBhbnkgb2YgdGhlc2UgZmVhdHVyZXN9Cntub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCttdWx0aV9sYW5nfCBmZWF0dXJlfQoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIE1lc3NhZ2VzCQkJCQkJKm11bHRpbGFuZy1tZXNzYWdlcyoKClZpbSBwaWNrcyB1cCB0aGUgbG9jYWxlIGZyb20gdGhlIGVudmlyb25tZW50LiAgSW4gbW9zdCBjYXNlcyB0aGlzIG1lYW5zIFZpbQp3aWxsIHVzZSB0aGUgbGFuZ3VhZ2UgdGhhdCB5b3UgcHJlZmVyLCB1bmxlc3MgaXQncyBub3QgYXZhaWxhYmxlLgoKVG8gc2VlIGEgbGlzdCBvZiBzdXBwb3J0ZWQgbG9jYWxlIG5hbWVzIG9uIHlvdXIgc3lzdGVtLCBsb29rIGluIG9uZSBvZiB0aGVzZQpkaXJlY3RvcmllcyAoZm9yIFVuaXgpOgoJL3Vzci9saWIvbG9jYWxlIH4KCS91c3Ivc2hhcmUvbG9jYWxlIH4KVW5mb3J0dW5hdGVseSwgdXBwZXIvbG93ZXJjYXNlIGRpZmZlcmVuY2VzIG1hdHRlci4gIEFsc28gd2F0Y2ggb3V0IGZvciB0aGUKdXNlIG9mICItIiBhbmQgIl8iLgoKCQkJCQkgICAgKjpsYW4qICo6bGFuZyogKjpsYW5ndWFnZSogKkUxOTcqCjpsYW5bZ3VhZ2VdCjpsYW5bZ3VhZ2VdIG1lc1tzYWdlc10KOmxhbltndWFnZV0gY3R5W3BlXQo6bGFuW2d1YWdlXSB0aW1bZV0KCQkJUHJpbnQgdGhlIGN1cnJlbnQgbGFuZ3VhZ2UgKGFrYSBsb2NhbGUpLgoJCQlXaXRoIHRoZSAibWVzc2FnZXMiIGFyZ3VtZW50IHRoZSBsYW5ndWFnZSB1c2VkIGZvcgoJCQltZXNzYWdlcyBpcyBwcmludGVkLiAgVGVjaG5pY2FsOiBMQ19NRVNTQUdFUy4KCQkJV2l0aCB0aGUgImN0eXBlIiBhcmd1bWVudCB0aGUgbGFuZ3VhZ2UgdXNlZCBmb3IKCQkJY2hhcmFjdGVyIGVuY29kaW5nIGlzIHByaW50ZWQuICBUZWNobmljYWw6IExDX0NUWVBFLgoJCQlXaXRoIHRoZSAidGltZSIgYXJndW1lbnQgdGhlIGxhbmd1YWdlIHVzZWQgZm9yCgkJCXN0cmZ0aW1lKCkgaXMgcHJpbnRlZC4gIFRlY2huaWNhbDogTENfVElNRS4KCQkJV2l0aG91dCBhcmd1bWVudCBhbGwgcGFydHMgb2YgdGhlIGxvY2FsZSBhcmUgcHJpbnRlZAoJCQkodGhpcyBpcyBzeXN0ZW0gZGVwZW5kZW50KS4KCQkJVGhlIGN1cnJlbnQgbGFuZ3VhZ2UgY2FuIGFsc28gYmUgb2J0YWluZWQgd2l0aCB0aGUKCQkJfHY6bGFuZ3wsIHx2OmN0eXBlfCBhbmQgfHY6bGNfdGltZXwgdmFyaWFibGVzLgoKOmxhbltndWFnZV0ge25hbWV9CjpsYW5bZ3VhZ2VdIG1lc1tzYWdlc10ge25hbWV9CjpsYW5bZ3VhZ2VdIGN0eVtwZV0ge25hbWV9CjpsYW5bZ3VhZ2VdIHRpbVtlXSB7bmFtZX0KCQkJU2V0IHRoZSBjdXJyZW50IGxhbmd1YWdlIChha2EgbG9jYWxlKSB0byB7bmFtZX0uCgkJCVRoZSBsb2NhbGUge25hbWV9IG11c3QgYmUgYSB2YWxpZCBsb2NhbGUgb24geW91cgoJCQlzeXN0ZW0uICBTb21lIHN5c3RlbXMgYWNjZXB0IGFsaWFzZXMgbGlrZSAiZW4iIG9yCgkJCSJlbl9VUyIsIGJ1dCBzb21lIG9ubHkgYWNjZXB0IHRoZSBmdWxsIHNwZWNpZmljYXRpb24KCQkJbGlrZSAiZW5fVVMuSVNPXzg4NTktMSIuICBPbiBVbml4IHN5c3RlbXMgeW91IGNhbiB1c2UKCQkJdGhpcyBjb21tYW5kIHRvIHNlZSB3aGF0IGxvY2FsZXMgYXJlIHN1cHBvcnRlZDogPgoJCQkJOiFsb2NhbGUgLWEKPAkJCVdpdGggdGhlICJtZXNzYWdlcyIgYXJndW1lbnQgdGhlIGxhbmd1YWdlIHVzZWQgZm9yCgkJCW1lc3NhZ2VzIGlzIHNldC4gIFRoaXMgY2FuIGJlIGRpZmZlcmVudCB3aGVuIHlvdSB3YW50LAoJCQlmb3IgZXhhbXBsZSwgRW5nbGlzaCBtZXNzYWdlcyB3aGlsZSBlZGl0aW5nIEphcGFuZXNlCgkJCXRleHQuICBUaGlzIHNldHMgJExDX01FU1NBR0VTLgoJCQlXaXRoIHRoZSAiY3R5cGUiIGFyZ3VtZW50IHRoZSBsYW5ndWFnZSB1c2VkIGZvcgoJCQljaGFyYWN0ZXIgZW5jb2RpbmcgaXMgc2V0LiAgVGhpcyBhZmZlY3RzIHRoZSBsaWJyYXJpZXMKCQkJdGhhdCBWaW0gd2FzIGxpbmtlZCB3aXRoLiAgSXQncyB1bnVzdWFsIHRvIHNldCB0aGlzIHRvCgkJCWEgZGlmZmVyZW50IHZhbHVlIGZyb20gJ2VuY29kaW5nJyBvciAiQyIuICBUaGlzIHNldHMKCQkJJExDX0NUWVBFLgoJCQlXaXRoIHRoZSAidGltZSIgYXJndW1lbnQgdGhlIGxhbmd1YWdlIHVzZWQgZm9yIHRpbWUKCQkJYW5kIGRhdGUgbWVzc2FnZXMgaXMgc2V0LiAgVGhpcyBhZmZlY3RzIHN0cmZ0aW1lKCkuCgkJCVRoaXMgc2V0cyAkTENfVElNRS4KCQkJV2l0aG91dCBhbiBhcmd1bWVudCBib3RoIGFyZSBzZXQsIGFuZCBhZGRpdGlvbmFsbHkKCQkJJExBTkcgaXMgc2V0LgoJCQlXaGVuIGNvbXBpbGVkIHdpdGggdGhlIHwrZmxvYXR8IGZlYXR1cmUgdGhlIExDX05VTUVSSUMKCQkJdmFsdWUgd2lsbCBhbHdheXMgYmUgc2V0IHRvICJDIiwgc28gdGhhdCBmbG9hdGluZwoJCQlwb2ludCBudW1iZXJzIHVzZSAnLicgYXMgdGhlIGRlY2ltYWwgcG9pbnQuCgkJCVRoaXMgd2lsbCBtYWtlIGEgZGlmZmVyZW5jZSBmb3IgaXRlbXMgdGhhdCBkZXBlbmQgb24KCQkJdGhlIGxhbmd1YWdlIChzb21lIG1lc3NhZ2VzLCB0aW1lIGFuZCBkYXRlIGZvcm1hdCkuCgkJCU5vdCBmdWxseSBzdXBwb3J0ZWQgb24gYWxsIHN5c3RlbXMKCQkJSWYgdGhpcyBmYWlscyB0aGVyZSB3aWxsIGJlIGFuIGVycm9yIG1lc3NhZ2UuICBJZiBpdAoJCQlzdWNjZWVkcyB0aGVyZSBpcyBubyBtZXNzYWdlLiAgRXhhbXBsZTogPgoJCQkJOmxhbmd1YWdlCgkJCQlDdXJyZW50IGxhbmd1YWdlOiBDCgkJCQk6bGFuZ3VhZ2UgZGVfREUuSVNPXzg4NTktMQoJCQkJOmxhbmd1YWdlIG1lcwoJCQkJQ3VycmVudCBtZXNzYWdlcyBsYW5ndWFnZTogZGVfREUuSVNPXzg4NTktMQoJCQkJOmxhbmcgbWVzIGVuCjwKCk1TLVdJTkRPV1MgTUVTU0FHRSBUUkFOU0xBVElPTlMJCQkJKndpbjMyLWdldHRleHQqCgpJZiB5b3UgdXNlZCB0aGUgc2VsZi1pbnN0YWxsaW5nIC5leGUgZmlsZSwgbWVzc2FnZSB0cmFuc2xhdGlvbnMgc2hvdWxkIHdvcmsKYWxyZWFkeS4gIE90aGVyd2lzZSBnZXQgdGhlIGxpYmludGwuZGxsIGZpbGUgaWYgeW91IGRvbid0IGhhdmUgaXQgeWV0OgoKCWh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZ2V0dGV4dApPcjoKCWh0dHBzOi8vbWxvY2F0aS5naXRodWIuaW8vZ2V0dGV4dC1pY29udi13aW5kb3dzLwoKVGhpcyBhbHNvIGNvbnRhaW5zIHRvb2xzIHhnZXR0ZXh0LCBtc2dmb3JtYXQgYW5kIG90aGVycy4KCmxpYmludGwuZGxsIHNob3VsZCBiZSBwbGFjZWQgaW4gc2FtZSBkaXJlY3Rvcnkgd2l0aCAoZyl2aW0uZXhlLCBvciBzb21lCnBsYWNlIHdoZXJlIFBBVEggZW52aXJvbm1lbnQgdmFsdWUgZGVzY3JpYmUuICBWaW0gYWxzbyBmaW5kcyBsaWJpbnRsLTguZGxsLgpNZXNzYWdlIGZpbGVzICh2aW0ubW8pIGhhdmUgdG8gYmUgcGxhY2VkIGluICIkVklNUlVOVElNRS9sYW5nL3h4L0xDX01FU1NBR0VTIiwKd2hlcmUgInh4IiBpcyB0aGUgYWJicmV2aWF0aW9uIG9mIHRoZSBsYW5ndWFnZSAobW9zdGx5IHR3byBsZXR0ZXJzKS4KCklmIHlvdSB3cml0ZSB5b3VyIG93biB0cmFuc2xhdGlvbnMgeW91IG5lZWQgdG8gZ2VuZXJhdGUgdGhlIC5wbyBmaWxlIGFuZApjb252ZXJ0IGl0IHRvIGEgLm1vIGZpbGUuICBZb3UgbmVlZCB0byBnZXQgdGhlIHNvdXJjZSBkaXN0cmlidXRpb24gYW5kIHJlYWQKdGhlIGZpbGUgInNyYy9wby9SRUFETUUudHh0Ii4KClRvIG92ZXJydWxlIHRoZSBhdXRvbWF0aWMgY2hvaWNlIG9mIHRoZSBsYW5ndWFnZSwgc2V0IHRoZSAkTEFORyB2YXJpYWJsZSB0bwp0aGUgbGFuZ3VhZ2Ugb2YgeW91ciBjaG9pY2UuICB1c2UgImVuIiB0byBkaXNhYmxlIHRyYW5zbGF0aW9ucy4gPgoKICA6bGV0ICRMQU5HID0gJ2phJwoKKHRleHQgZm9yIFdpbmRvd3MgYnkgTXVyYW9rYSBUYXJvKQoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIE1lbnVzCQkJCQkJKm11bHRpbGFuZy1tZW51cyoKClNlZSB8NDUuMnwgZm9yIHRoZSBiYXNpY3MsIGVzcC4gdXNpbmcgJ2xhbmdtZW51Jy4KCk5vdGUgdGhhdCBpZiBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRlIHRvIHRoZSBtZW51cyBhZnRlciB0aGUgdHJhbnNsYXRpb24gd2FzCmRvbmUsIHNvbWUgb2YgdGhlIG1lbnVzIG1heSBiZSBzaG93biBpbiBFbmdsaXNoLiAgUGxlYXNlIHRyeSBjb250YWN0aW5nIHRoZQptYWludGFpbmVyIG9mIHRoZSB0cmFuc2xhdGlvbiBhbmQgYXNrIGhpbSB0byB1cGRhdGUgaXQuICBZb3UgY2FuIGZpbmQgdGhlCm5hbWUgYW5kIGUtbWFpbCBhZGRyZXNzIG9mIHRoZSB0cmFuc2xhdG9yIGluCiIkVklNUlVOVElNRS9sYW5nL21lbnVfPGxhbmc+LnZpbSIuCgpUbyBzZXQgdGhlIGZvbnQgKG9yIGZvbnRzZXQpIHRvIHVzZSBmb3IgdGhlIG1lbnVzLCB1c2UgdGhlIHw6aGlnaGxpZ2h0fApjb21tYW5kLiAgRXhhbXBsZTogPgoKCTpoaWdobGlnaHQgTWVudSBmb250PWsxMixyMTIKCgpBTElBUyBMT0NBTEUgTkFNRVMKClVuZm9ydHVuYXRlbHksIHRoZSBsb2NhbGUgbmFtZXMgYXJlIGRpZmZlcmVudCBvbiB2YXJpb3VzIHN5c3RlbXMsIGV2ZW4gdGhvdWdoCnRoZXkgYXJlIGZvciB0aGUgc2FtZSBsYW5ndWFnZSBhbmQgZW5jb2RpbmcuICBJZiB5b3UgZG8gbm90IGdldCB0aGUgbWVudQp0cmFuc2xhdGlvbnMgeW91IGV4cGVjdGVkLCBjaGVjayB0aGUgb3V0cHV0IG9mIHRoaXMgY29tbWFuZDogPgoKCWVjaG8gdjpsYW5nCgpOb3cgY2hlY2sgdGhlICIkVklNUlVOVElNRS9sYW5nIiBkaXJlY3RvcnkgZm9yIG1lbnUgdHJhbnNsYXRpb24gZmlsZXMgdGhhdCB1c2UKYSBzaW1pbGFyIGxhbmd1YWdlLiAgQSBkaWZmZXJlbmNlIGluIGEgIi0iIGJlaW5nIGEgIl8iIGFscmVhZHkgY2F1c2VzIGEgZmlsZQpub3QgdG8gYmUgZm91bmQhICBBbm90aGVyIGNvbW1vbiBkaWZmZXJlbmNlIHRvIHdhdGNoIG91dCBmb3IgaXMgImlzbzg4NTktMSIKdmVyc3VzICJpc29fODg1OS0xIi4gIEZvcnR1bmF0ZWx5IFZpbSBtYWtlcyBhbGwgbmFtZXMgbG93ZXJjYXNlLCB0aHVzIHlvdQpkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IGNhc2UgZGlmZmVyZW5jZXMuICBTcGFjZXMgYXJlIGNoYW5nZWQgdG8KdW5kZXJzY29yZXMsIHRvIGF2b2lkIGhhdmluZyB0byBlc2NhcGUgdGhlbS4KCklmIHlvdSBmaW5kIGEgbWVudSB0cmFuc2xhdGlvbiBmaWxlIGZvciB5b3VyIGxhbmd1YWdlIHdpdGggYSBkaWZmZXJlbnQgbmFtZSwKY3JlYXRlIGEgZmlsZSBpbiB5b3VyIG93biBydW50aW1lIGRpcmVjdG9yeSB0byBsb2FkIHRoYXQgb25lLiAgVGhlIG5hbWUgb2YKdGhhdCBmaWxlIGNvdWxkIGJlOiA+CgoJfi8udmltL2xhbmcvbWVudV88djpsYW5nPi52aW0KCkNoZWNrIHRoZSAncnVudGltZXBhdGgnIG9wdGlvbiBmb3IgZGlyZWN0b3JpZXMgd2hpY2ggYXJlIHNlYXJjaGVkLiAgSW4gdGhhdApmaWxlIHB1dCBhIGNvbW1hbmQgdG8gbG9hZCB0aGUgbWVudSBmaWxlIHdpdGggdGhlIG90aGVyIG5hbWU6ID4KCglydW50aW1lIGxhbmcvbWVudV88b3RoZXJfbGFuZz4udmltCgoKVFJBTlNMQVRJTkcgTUVOVVMKCklmIHlvdSB3YW50IHRvIGRvIHlvdXIgb3duIHRyYW5zbGF0aW9ucywgeW91IGNhbiB1c2UgdGhlIHw6bWVudXRyYW5zfCBjb21tYW5kLApleHBsYWluZWQgYmVsb3cuICBJdCBpcyByZWNvbW1lbmRlZCB0byBwdXQgdGhlIHRyYW5zbGF0aW9ucyBmb3Igb25lIGxhbmd1YWdlCmluIGEgVmltIHNjcmlwdC4gIEZvciBhIGxhbmd1YWdlIHRoYXQgaGFzIG5vIHRyYW5zbGF0aW9uIHlldCwgcGxlYXNlIGNvbnNpZGVyCmJlY29taW5nIHRoZSBtYWludGFpbmVyIGFuZCBtYWtlIHlvdXIgdHJhbnNsYXRpb25zIGF2YWlsYWJsZSB0byBhbGwgVmltIHVzZXJzLgpTZW5kIGFuIGUtbWFpbCB0byB0aGUgVmltIG1haW50YWluZXIgPG1haW50YWluZXJAdmltLm9yZz4uCgoJCQkJCSo6bWVudXQqICo6bWVudXRyYW5zKiAqOm1lbnV0cmFuc2xhdGUqCjptZW51dFtyYW5zbGF0ZV0gY2xlYXIKCQkJQ2xlYXIgYWxsIG1lbnUgdHJhbnNsYXRpb25zLgoKOm1lbnV0W3JhbnNsYXRlXSB7ZW5nbGlzaH0ge215bGFuZ30KCQkJVHJhbnNsYXRlIG1lbnUgbmFtZSB7ZW5nbGlzaH0gdG8ge215bGFuZ30uICBBbGwKCQkJc3BlY2lhbCBjaGFyYWN0ZXJzIGxpa2UgIiYiIGFuZCAiPFRhYj4iIG5lZWQgdG8gYmUKCQkJaW5jbHVkZWQuICBTcGFjZXMgYW5kIGRvdHMgbmVlZCB0byBiZSBlc2NhcGVkIHdpdGggYQoJCQliYWNrc2xhc2gsIGp1c3QgbGlrZSBpbiBvdGhlciB8Om1lbnV8IGNvbW1hbmRzLgoKU2VlIHRoZSAkVklNUlVOVElNRS9sYW5nIGRpcmVjdG9yeSBmb3IgZXhhbXBsZXMuCgpUbyB0cnkgb3V0IHlvdXIgdHJhbnNsYXRpb25zIHlvdSBmaXJzdCBoYXZlIHRvIHJlbW92ZSBhbGwgbWVudXMuICBUaGlzIGlzIGhvdwp5b3UgY2FuIGRvIGl0IHdpdGhvdXQgcmVzdGFydGluZyBWaW06ID4KCTpzb3VyY2UgJFZJTVJVTlRJTUUvZGVsbWVudS52aW0KCTpzb3VyY2UgPHlvdXItbmV3LW1lbnUtZmlsZT4KCTpzb3VyY2UgJFZJTVJVTlRJTUUvbWVudS52aW0KCkVhY2ggcGFydCBvZiBhIG1lbnUgcGF0aCBpcyB0cmFuc2xhdGVkIHNlcGFyYXRlbHkuICBUaGUgcmVzdWx0IGlzIHRoYXQgd2hlbgoiSGVscCIgaXMgdHJhbnNsYXRlZCB0byAiSGlsZmUiIGFuZCAiT3ZlcnZpZXciIHRvICLcYmVyYmxpY2siIHRoZW4KIkhlbHAuT3ZlcnZpZXciIHdpbGwgYmUgdHJhbnNsYXRlZCB0byAiSGlsZmUu3GJlcmJsaWNrIi4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBTY3JpcHRzCQkJCQkJKm11bHRpbGFuZy1zY3JpcHRzKgoKSW4gVmltIHNjcmlwdHMgeW91IGNhbiB1c2UgdGhlIHx2Omxhbmd8IHZhcmlhYmxlIHRvIGdldCB0aGUgY3VycmVudCBsYW5ndWFnZQoobG9jYWxlKS4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzICJDIiBvciBjb21lcyBmcm9tIHRoZSAkTEFORyBlbnZpcm9ubWVudAp2YXJpYWJsZS4KClRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzaG93cyBob3cgdGhpcyB2YXJpYWJsZSBpcyB1c2VkIGluIGEgc2ltcGxlIHdheSwgdG8gbWFrZQphIG1lc3NhZ2UgYWRhcHQgdG8gbGFuZ3VhZ2UgcHJlZmVyZW5jZXMgb2YgdGhlIHVzZXIsID4KCgk6aWYgdjpsYW5nID1+ICJkZV9ERSIKCTogIGVjaG8gIkd1dGVuIE1vcmdlbiIKCTplbHNlCgk6ICBlY2hvICJHb29kIG1vcm5pbmciCgk6ZW5kaWYKPAoKIHZpbTp0dz03ODpzdz00OnRzPTg6ZnQ9aGVscDpub3JsOgo=