ZGlmZiAtLWdpdCBhL21ha2UvQVNTRU1CTFlfRVhDRVBUSU9OIGIvbWFrZS9BU1NFTUJMWV9FWENFUFRJT04KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiN2FjMWQuLjAwMDAwMDAKLS0tIGEvbWFrZS9BU1NFTUJMWV9FWENFUFRJT04KKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0KLU9QRU5KREsgQVNTRU1CTFkgRVhDRVBUSU9OCi0KLVRoZSBPcGVuSkRLIHNvdXJjZSBjb2RlIG1hZGUgYXZhaWxhYmxlIGJ5IFN1biBhdCBvcGVuamRrLmphdmEubmV0IGFuZAotb3Blbmpkay5kZXYuamF2YS5uZXQgKCJPcGVuSkRLIENvZGUiKSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCi1HTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSA8aHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sPiB2ZXJzaW9uIDIKLW9ubHkgKCJHUEwyIiksIHdpdGggdGhlIGZvbGxvd2luZyBjbGFyaWZpY2F0aW9uIGFuZCBzcGVjaWFsIGV4Y2VwdGlvbi4KLQotICAgIExpbmtpbmcgdGhpcyBPcGVuSkRLIENvZGUgc3RhdGljYWxseSBvciBkeW5hbWljYWxseSB3aXRoIG90aGVyIGNvZGUKLSAgICBpcyBtYWtpbmcgYSBjb21iaW5lZCB3b3JrIGJhc2VkIG9uIHRoaXMgbGlicmFyeS4gIFRodXMsIHRoZSB0ZXJtcwotICAgIGFuZCBjb25kaXRpb25zIG9mIEdQTDIgY292ZXIgdGhlIHdob2xlIGNvbWJpbmF0aW9uLgotCi0gICAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgU3VuIGdpdmVzIHlvdSBwZXJtaXNzaW9uIHRvIGxpbmsgdGhpcwotICAgIE9wZW5KREsgQ29kZSB3aXRoIGNlcnRhaW4gY29kZSBsaWNlbnNlZCBieSBTdW4gYXMgaW5kaWNhdGVkIGF0Ci0gICAgaHR0cDovL29wZW5qZGsuamF2YS5uZXQvbGVnYWwvZXhjZXB0aW9uLW1vZHVsZXMtMjAwNy0wNS0wOC5odG1sCi0gICAgKCJEZXNpZ25hdGVkIEV4Y2VwdGlvbiBNb2R1bGVzIikgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLAotICAgIHJlZ2FyZGxlc3Mgb2YgdGhlIGxpY2Vuc2UgdGVybXMgb2YgdGhlIERlc2lnbmF0ZWQgRXhjZXB0aW9uIE1vZHVsZXMsCi0gICAgYW5kIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHVuZGVyIEdQTDIsCi0gICAgcHJvdmlkZWQgdGhhdCB0aGUgRGVzaWduYXRlZCBFeGNlcHRpb24gTW9kdWxlcyBjb250aW51ZSB0byBiZQotICAgIGdvdmVybmVkIGJ5IHRoZSBsaWNlbnNlcyB1bmRlciB3aGljaCB0aGV5IHdlcmUgb2ZmZXJlZCBieSBTdW4uCi0KLUFzIHN1Y2gsIGl0IGFsbG93cyBsaWNlbnNlZXMgYW5kIHN1YmxpY2Vuc2VlcyBvZiBTdW4ncyBHUEwyIE9wZW5KREsgQ29kZSB0bwotYnVpbGQgYW4gZXhlY3V0YWJsZSB0aGF0IGluY2x1ZGVzIHRob3NlIHBvcnRpb25zIG9mIG5lY2Vzc2FyeSBjb2RlIHRoYXQgU3VuCi1jb3VsZCBub3QgcHJvdmlkZSB1bmRlciBHUEwyIChvciB0aGF0IFN1biBoYXMgcHJvdmlkZWQgdW5kZXIgR1BMMiB3aXRoIHRoZQotQ2xhc3NwYXRoIGV4Y2VwdGlvbikuICBJZiB5b3UgbW9kaWZ5IG9yIGFkZCB0byB0aGUgT3BlbkpESyBjb2RlLCB0aGF0IG5ldwotR1BMMiBjb2RlIG1heSBzdGlsbCBiZSBjb21iaW5lZCB3aXRoIERlc2lnbmF0ZWQgRXhjZXB0aW9uIE1vZHVsZXMgaWYgdGhlCi1uZXcgY29kZSBpcyBtYWRlIHN1YmplY3QgdG8gdGhpcyBleGNlcHRpb24gYnkgaXRzIGNvcHlyaWdodCBob2xkZXIuCmRpZmYgLS1naXQgYS9tYWtlL0xJQ0VOU0UgYi9tYWtlL0xJQ0VOU0UKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlYWI1OGMuLjAwMDAwMDAKLS0tIGEvbWFrZS9MSUNFTlNFCisrKyAvZGV2L251bGwKQEAgLTEsMzQ3ICswLDAgQEAKLVRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKQotCi1WZXJzaW9uIDIsIEp1bmUgMTk5MQotCi1Db3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi01OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQotCi1FdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhpcyBsaWNlbnNlCi1kb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgotCi1QcmVhbWJsZQotCi1UaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyIGZyZWVkb20gdG8gc2hhcmUKLWFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGludGVuZGVkIHRvCi1ndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZSBzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZQotc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvCi1tb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24ncyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UKLWF1dGhvcnMgY29tbWl0IHRvIHVzaW5nIGl0LiAgKFNvbWUgb3RoZXIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlIGlzCi1jb3ZlcmVkIGJ5IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSBZb3UgY2FuIGFwcGx5IGl0IHRvCi15b3VyIHByb2dyYW1zLCB0b28uCi0KLVdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QgcHJpY2UuICBPdXIKLUdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UgaGF2ZSB0aGUgZnJlZWRvbSB0bwotZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IgdGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwKLXRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdCBpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZQotdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQgaW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdQotY2FuIGRvIHRoZXNlIHRoaW5ncy4KLQotVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZCBhbnlvbmUgdG8gZGVueQoteW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLiAgVGhlc2UgcmVzdHJpY3Rpb25zCi10cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZQotc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCi0KLUZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIgZ3JhdGlzIG9yIGZvcgotYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdCB5b3UgaGF2ZS4gIFlvdSBtdXN0Ci1tYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUgc291cmNlIGNvZGUuICBBbmQgeW91IG11c3QKLXNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIgcmlnaHRzLgotCi1XZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kICgyKQotb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlCi1hbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KLQotQWxzbywgZm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4gdGhhdAotZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlIHNvZnR3YXJlLiAgSWYgdGhlCi1zb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2Ugd2FudCBpdHMgcmVjaXBpZW50cyB0bwota25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvIHRoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQKLWJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbCBhdXRob3JzJyByZXB1dGF0aW9ucy4KLQotRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUgcGF0ZW50cy4gIFdlCi13aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUgcHJvZ3JhbSB3aWxsCi1pbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUgcHJvZ3JhbSBwcm9wcmlldGFyeS4KLVRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55IHBhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvcgotZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgotCi1UaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24KLWZvbGxvdy4KLQotVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCi0KLTAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMgYSBub3RpY2UKLXBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZgotdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhlICJQcm9ncmFtIiwgYmVsb3csIHJlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtCi1vciB3b3JrLCBhbmQgYSAid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSIgbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueQotZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6IHRoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUKLVByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LCBlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vcgotdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkCi13aXRob3V0IGxpbWl0YXRpb24gaW4gdGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcwotInlvdSIuCi0KLUFjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90IGNvdmVyZWQgYnkKLXRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mIHJ1bm5pbmcgdGhlIFByb2dyYW0gaXMKLW5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtIGlzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMKLWNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIChpbmRlcGVuZGVudCBvZiBoYXZpbmcgYmVlbiBtYWRlIGJ5Ci1ydW5uaW5nIHRoZSBQcm9ncmFtKS4gIFdoZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgotCi0xLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3Mgc291cmNlIGNvZGUgYXMKLXlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdSBjb25zcGljdW91c2x5IGFuZAotYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZAotZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlCi1hbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OyBhbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUKLVByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgotCi1Zb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQgeW91IG1heQotYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCi0KLTIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24gb2YgaXQsIHRodXMKLWZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQgZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMKLW9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMSBhYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZgotdGhlc2UgY29uZGl0aW9uczoKLQotICAgIGEpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nCi0gICAgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCi0KLSAgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4gd2hvbGUgb3IKLSAgICBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkgcGFydCB0aGVyZW9mLCB0byBiZQotICAgIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZCBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZgotICAgIHRoaXMgTGljZW5zZS4KLQotICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkgd2hlbiBydW4sCi0gICAgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoIGludGVyYWN0aXZlIHVzZSBpbiB0aGUKLSAgICBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbiBhbm5vdW5jZW1lbnQgaW5jbHVkaW5nIGFuCi0gICAgYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYSBub3RpY2UgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSAob3IKLSAgICBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZSBhIHdhcnJhbnR5KSBhbmQgdGhhdCB1c2VycyBtYXkgcmVkaXN0cmlidXRlCi0gICAgdGhlIHByb2dyYW0gdW5kZXIgdGhlc2UgY29uZGl0aW9ucywgYW5kIHRlbGxpbmcgdGhlIHVzZXIgaG93IHRvIHZpZXcgYSBjb3B5Ci0gICAgb2YgdGhpcyBMaWNlbnNlLiAgKEV4Y2VwdGlvbjogaWYgdGhlIFByb2dyYW0gaXRzZWxmIGlzIGludGVyYWN0aXZlIGJ1dCBkb2VzCi0gICAgbm90IG5vcm1hbGx5IHByaW50IHN1Y2ggYW4gYW5ub3VuY2VtZW50LCB5b3VyIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0gaXMKLSAgICBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50LikKLQotVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZiBpZGVudGlmaWFibGUKLXNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSwgYW5kIGNhbiBiZSByZWFzb25hYmx5Ci1jb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbiB0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kCi1pdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZSBzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUKLXdvcmtzLiAgQnV0IHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEKLXdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zCi1vZiB0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZSBlbnRpcmUKLXdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgotCi1UaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QgeW91cgotcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0byBleGVyY2lzZSB0aGUKLXJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yIGNvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24KLXRoZSBQcm9ncmFtLgotCi1JbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtIHdpdGggdGhlCi1Qcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YgYSBzdG9yYWdlIG9yCi1kaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyIHRoZSBzY29wZSBvZiB0aGlzCi1MaWNlbnNlLgotCi0zLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGEgd29yayBiYXNlZCBvbiBpdCwgdW5kZXIKLVNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZAotMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgotCi0gICAgYSkgQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UKLSAgICBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlCi0gICAgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAotCi0gICAgYikgQWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUgeWVhcnMsIHRvCi0gICAgZ2l2ZSBhbnkgdGhpcmQgcGFydHksIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4geW91ciBjb3N0IG9mIHBoeXNpY2FsbHkKLSAgICBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZQotICAgIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxCi0gICAgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAotCi0gICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIgdG8KLSAgICBkaXN0cmlidXRlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUuICAoVGhpcyBhbHRlcm5hdGl2ZSBpcyBhbGxvd2VkIG9ubHkKLSAgICBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91IHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluCi0gICAgb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaCBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGgKLSAgICBTdWJzZWN0aW9uIGIgYWJvdmUuKQotCi1UaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yIG1ha2luZwotbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhbiBleGVjdXRhYmxlIHdvcmssIGNvbXBsZXRlIHNvdXJjZSBjb2RlIG1lYW5zIGFsbAotdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UKLWRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24KLW9mIHRoZSBleGVjdXRhYmxlLiAgSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHNvdXJjZSBjb2RlCi1kaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlIGFueXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlcgotc291cmNlIG9yIGJpbmFyeSBmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pCi1vZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQKLWl0c2VsZiBhY2NvbXBhbmllcyB0aGUgZXhlY3V0YWJsZS4KLQotSWYgZGlzdHJpYnV0aW9uIG9mIGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZyBhY2Nlc3MgdG8gY29weQotZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSB0aGUgc291cmNlCi1jb2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoCi10aGlyZCBwYXJ0aWVzIGFyZSBub3QgY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KLQotNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGV4Y2VwdCBhcwotZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0IG90aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksCi1zdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUKLXlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gIEhvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvcgotcmlnaHRzLCBmcm9tIHlvdSB1bmRlciB0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvCi1sb25nIGFzIHN1Y2ggcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgotCi01LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3Qgc2lnbmVkIGl0LgotSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQotb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZSBwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90Ci1hY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieSBtb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvcgotYW55IHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0bwotZG8gc28sIGFuZCBhbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCi10aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KLQotNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSwKLXRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUgb3JpZ2luYWwgbGljZW5zb3IgdG8KLWNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8gdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuCi1Zb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIgcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUKLXJpZ2h0cyBncmFudGVkIGhlcmVpbi4gIFlvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieQotdGhpcmQgcGFydGllcyB0byB0aGlzIExpY2Vuc2UuCi0KLTcuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQKLWluZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksIGNvbmRpdGlvbnMKLWFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yIG90aGVyd2lzZSkgdGhhdAotY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90IGV4Y3VzZSB5b3UgZnJvbSB0aGUKLWNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdCBkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkKLXNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50Ci1vYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdSBtYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLgotRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50IGxpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24KLW9mIHRoZSBQcm9ncmFtIGJ5IGFsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoCi15b3UsIHRoZW4gdGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bwotcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KLQotSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFueQotcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvIGFwcGx5IGFuZAotdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlciBjaXJjdW1zdGFuY2VzLgotCi1JdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55IHBhdGVudHMgb3IKLW90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueSBzdWNoIGNsYWltczsgdGhpcwotc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUKLWRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzIGltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gIE1hbnkKLXBlb3BsZSBoYXZlIG1hZGUgZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZQotZGlzdHJpYnV0ZWQgdGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKLXN5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcgdG8KLWRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdCBpbXBvc2UgdGhhdAotY2hvaWNlLgotCi1UaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8gYmUgYQotY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgotCi04LiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIFByb2dyYW0gaXMgcmVzdHJpY3RlZCBpbiBjZXJ0YWluCi1jb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlIG9yaWdpbmFsCi1jb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlIG1heSBhZGQgYW4gZXhwbGljaXQKLWdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcgdGhvc2UgY291bnRyaWVzLCBzbyB0aGF0Ci1kaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcgY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4KLXN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcyB0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5Ci1vZiB0aGlzIExpY2Vuc2UuCi0KLTkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZQotR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbgotc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcwotb3IgY29uY2VybnMuCi0KLUVhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KLXNwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55IGxhdGVyCi12ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGVpdGhlciBvZgotdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSwgeW91IG1heQotY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0KLTEwLiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUgcHJvZ3JhbXMKLXdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBkaWZmZXJlbnQsIHdyaXRlIHRvIHRoZSBhdXRob3IgdG8gYXNrIGZvcgotcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzIG1ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4KLU91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzIG9mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mCi1hbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kIG9mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2YKLXNvZnR3YXJlIGdlbmVyYWxseS4KLQotTk8gV0FSUkFOVFkKLQotMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZIEZPUgotVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4gT1RIRVJXSVNFCi1TVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMgUFJPVklERSBUSEUKLVBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsCi1JTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5ECi1GSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQKLVBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRSBQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwKLVlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgotCi0xMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HIFdJTEwKLUFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SIFJFRElTVFJJQlVURSBUSEUKLVBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLCBJTkNMVURJTkcgQU5ZCi1HRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9SCi1JTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIExPU1MgT0YgREFUQSBPUiBEQVRBCi1CRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkgWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQQotRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFBST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUgotT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgotCi1FTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKLQotSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCi0KLUlmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QgcG9zc2libGUKLXVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQgZnJlZSBzb2Z0d2FyZQotd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgotCi1UbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gIEl0IGlzIHNhZmVzdCB0byBhdHRhY2gKLXRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseSBjb252ZXkgdGhlIGV4Y2x1c2lvbgotb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QgdGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEKLXBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgotCi0gICAgT25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuCi0KLSAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiA8bmFtZSBvZiBhdXRob3I+Ci0KLSAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCi0gICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAgIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCi0gICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCi0gICAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgotICAgIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gICAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKLSAgICBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQotCi1BbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KLQotSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcyB3aGVuIGl0Ci1zdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKLQotICAgIEdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgeWVhciBuYW1lIG9mIGF1dGhvciBHbm9tb3Zpc2lvbiBjb21lcwotICAgIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSAnc2hvdyB3Jy4gIFRoaXMgaXMgZnJlZQotICAgIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdCB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7Ci0gICAgdHlwZSAnc2hvdyBjJyBmb3IgZGV0YWlscy4KLQotVGhlIGh5cG90aGV0aWNhbCBjb21tYW5kcyAnc2hvdyB3JyBhbmQgJ3Nob3cgYycgc2hvdWxkIHNob3cgdGhlIGFwcHJvcHJpYXRlCi1wYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgdGhlIGNvbW1hbmRzIHlvdSB1c2UgbWF5IGJlCi1jYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gJ3Nob3cgdycgYW5kICdzaG93IGMnOyB0aGV5IGNvdWxkIGV2ZW4gYmUKLW1vdXNlLWNsaWNrcyBvciBtZW51IGl0ZW1zLS13aGF0ZXZlciBzdWl0cyB5b3VyIHByb2dyYW0uCi0KLVlvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyIHNjaG9vbCwKLWlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBwcm9ncmFtLCBpZiBuZWNlc3NhcnkuICBIZXJlCi1pcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgotCi0gICAgWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbiB0aGUgcHJvZ3JhbQotICAgICdHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgotCi0gICAgc2lnbmF0dXJlIG9mIFR5IENvb24sIDEgQXByaWwgMTk4OQotCi0gICAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKLQotVGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IHBlcm1pdCBpbmNvcnBvcmF0aW5nIHlvdXIgcHJvZ3JhbSBpbnRvCi1wcm9wcmlldGFyeSBwcm9ncmFtcy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91IG1heQotY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGggdGhlCi1saWJyYXJ5LiAgSWYgdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi1MaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLgotCi0KLSJDTEFTU1BBVEgiIEVYQ0VQVElPTiBUTyBUSEUgR1BMCi0KLUNlcnRhaW4gc291cmNlIGZpbGVzIGRpc3RyaWJ1dGVkIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gIGFyZSBzdWJqZWN0IHRvCi10aGUgZm9sbG93aW5nIGNsYXJpZmljYXRpb24gYW5kIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIGJ1dCBvbmx5IHdoZXJlCi1TdW4gaGFzIGV4cHJlc3NseSBpbmNsdWRlZCBpbiB0aGUgcGFydGljdWxhciBzb3VyY2UgZmlsZSdzIGhlYWRlciB0aGUgd29yZHMKLSJTdW4gZGVzaWduYXRlcyB0aGlzIHBhcnRpY3VsYXIgZmlsZSBhcyBzdWJqZWN0IHRvIHRoZSAiQ2xhc3NwYXRoIiBleGNlcHRpb24KLWFzIHByb3ZpZGVkIGJ5IFN1biBpbiB0aGUgTElDRU5TRSBmaWxlIHRoYXQgYWNjb21wYW5pZWQgdGhpcyBjb2RlLiIKLQotICAgIExpbmtpbmcgdGhpcyBsaWJyYXJ5IHN0YXRpY2FsbHkgb3IgZHluYW1pY2FsbHkgd2l0aCBvdGhlciBtb2R1bGVzIGlzIG1ha2luZwotICAgIGEgY29tYmluZWQgd29yayBiYXNlZCBvbiB0aGlzIGxpYnJhcnkuICBUaHVzLCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKLSAgICB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgY292ZXIgdGhlIHdob2xlIGNvbWJpbmF0aW9uLgotCi0gICAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIGNvcHlyaWdodCBob2xkZXJzIG9mIHRoaXMgbGlicmFyeSBnaXZlIHlvdQotICAgIHBlcm1pc3Npb24gdG8gbGluayB0aGlzIGxpYnJhcnkgd2l0aCBpbmRlcGVuZGVudCBtb2R1bGVzIHRvIHByb2R1Y2UgYW4KLSAgICBleGVjdXRhYmxlLCByZWdhcmRsZXNzIG9mIHRoZSBsaWNlbnNlIHRlcm1zIG9mIHRoZXNlIGluZGVwZW5kZW50IG1vZHVsZXMsCi0gICAgYW5kIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHVuZGVyIHRlcm1zIG9mIHlvdXIKLSAgICBjaG9pY2UsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCwgZm9yIGVhY2ggbGlua2VkIGluZGVwZW5kZW50IG1vZHVsZSwKLSAgICB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIGxpY2Vuc2Ugb2YgdGhhdCBtb2R1bGUuICBBbiBpbmRlcGVuZGVudAotICAgIG1vZHVsZSBpcyBhIG1vZHVsZSB3aGljaCBpcyBub3QgZGVyaXZlZCBmcm9tIG9yIGJhc2VkIG9uIHRoaXMgbGlicmFyeS4gIElmCi0gICAgeW91IG1vZGlmeSB0aGlzIGxpYnJhcnksIHlvdSBtYXkgZXh0ZW5kIHRoaXMgZXhjZXB0aW9uIHRvIHlvdXIgdmVyc2lvbiBvZgotICAgIHRoZSBsaWJyYXJ5LCBidXQgeW91IGFyZSBub3Qgb2JsaWdhdGVkIHRvIGRvIHNvLiAgSWYgeW91IGRvIG5vdCB3aXNoIHRvIGRvCi0gICAgc28sIGRlbGV0ZSB0aGlzIGV4Y2VwdGlvbiBzdGF0ZW1lbnQgZnJvbSB5b3VyIHZlcnNpb24uCmRpZmYgLS1naXQgYS9tYWtlL1JFQURNRSBiL21ha2UvUkVBRE1FCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNzc0YWI4Li4wMDAwMDAwCi0tLSBhL21ha2UvUkVBRE1FCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotUkVBRE1FOgotICBUaGlzIGZpbGUgc2hvdWxkIGJlIGxvY2F0ZWQgYXQgdGhlIHRvcCBvZiB0aGUgamRrIE1lcmN1cmlhbCByZXBvc2l0b3J5LgotCi0gIFNlZSBodHRwOi8vb3Blbmpkay5qYXZhLm5ldC8gZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIE9wZW5KREsuCi0KLVNpbXBsZSBCdWlsZCBJbnN0cnVjdGlvbnM6Ci0KLSAgMS4gRG93bmxvYWQgYW5kIGluc3RhbGwgYSBKREsgNiBmcm9tCi0gICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20vamF2YXNlL2Rvd25sb2Fkcy9pbmRleC5qc3AKLSAgICAgU2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBBTFRfQk9PVERJUiB0byB0aGUgbG9jYXRpb24gb2YgdGhpcyBKREsgNi4KLQotICAyLiBEb3dubG9hZCBhbmQgaW5zdGFsbCB0aGUgQmluYXJ5IFBsdWdzIGZvciB0aGUgbW9zdCByZWNlbnQgSkRLNyBmcm9tCi0gICAgIGh0dHA6Ly9kb3dubG9hZC5qYXZhLm5ldC9vcGVuamRrL2pkazcvCi0gICAgIFNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgQUxUX0JJTkFSWV9QTFVHU19QQVRIIHRvIHRoZSBsb2NhdGlvbiBvZgotICAgICB0aGVzZSBiaW5hcnkgcGx1Z3MuCi0gICAgIAotICAzLiBFaXRoZXIgZG93bmxvYWQgYW5kIGluc3RhbGwgdGhlIGxhdGVzdCBKREs3IGZyb20KLSAgICAgaHR0cDovL2Rvd25sb2FkLmphdmEubmV0L29wZW5qZGsvamRrNy8sIG9yIGJ1aWxkIHlvdXIgb3duIGNvbXBsZXRlCi0gICAgIE9wZW5KREs3IGJ5IHVzaW5nIHRoZSB0b3AgbGV2ZWwgTWFrZWZpbGUgaW4gdGhlIE9wZW5KREsgTWVyY3VyaWFsIGZvcmVzdC4KLSAgICAgU2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBBTFRfSkRLX0lNUE9SVF9QQVRIIHRvIHRoZSBsb2NhdGlvbiBvZgotICAgICB0aGlzIGxhdGVzdCBKREs3IG9yIE9wZW5KREs3IGJ1aWxkLgotICAgICAKLSAgNC4gQ2hlY2sgdGhlIHNhbml0eSBvZiBkb2luZyBhIGJ1aWxkIHdpdGggdGhlIGN1cnJlbnQgbWFjaGluZToKLSAgICAgICBjZCBtYWtlICYmIGdudW1ha2Ugc2FuaXR5Ci0gICAgIFNlZSBSRUFETUUtYnVpbGRzLmh0bWwgaWYgeW91IHJ1biBpbnRvIHByb2JsZW1zLgotICAKLSAgNS4gRG8gYSBwYXJ0aWFsIGJ1aWxkIG9mIHRoZSBqZGs6Ci0gICAgICAgY2QgbWFrZSAmJiBnbnVtYWtlIGFsbAotICAKLSAgNi4gQ29uc3RydWN0IHRoZSBpbWFnZXM6Ci0gICAgICAgY2QgbWFrZSAmJiBnbnVtYWtlIGltYWdlcwotICAgICBUaGUgcmVzdWx0aW5nIEpESyBpbWFnZSBzaG91bGQgYmUgZm91bmQgaW4gYnVpbGQvKi9qMnNkay1pbWFnZQotCi0KZGlmZiAtLWdpdCBhL21ha2UvUkVBRE1FLWJ1aWxkcy5odG1sIGIvbWFrZS9SRUFETUUtYnVpbGRzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1MzA4NjUuLjAwMDAwMDAKLS0tIGEvbWFrZS9SRUFETUUtYnVpbGRzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUyICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotCi08aHRtbD4KLTxoZWFkPjx0aXRsZT5PcGVuSkRLIEJ1aWxkIFJFQURNRTwvdGl0bGU+PC9oZWFkPgotCi08IS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLT4KLTxociBub3NoYWRlPSJub3NoYWRlIiBzaXplPSIzIj4KLQotPGNlbnRlcj4KLSAgICA8aDE+T3BlbkpESyBCdWlsZCBSRUFETUU8L2gxPgotPC9jZW50ZXI+Ci0KLTwhLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tPiAKLTxociBub3NoYWRlPSJub3NoYWRlIiBzaXplPSIzIj4KLQotPGgyPjxhIG5hbWU9ImludHJvZHVjdGlvbiI+SW50cm9kdWN0aW9uPC9hPjwvaDI+Ci0KLTxibG9ja3F1b3RlPgotICAgIDxwPgotICAgIFRoaXMgUkVBRE1FIGZpbGUgY29udGFpbnMgYnVpbGQgaW5zdHJ1Y3Rpb25zIGZvciB0aGUgCi0gICAgPGEgaHJlZj0iaHR0cDovL29wZW5qZGsuamF2YS5uZXQiPk9wZW5KREs8L2E+LgotICAgIEJ1aWxkaW5nIHRoZSBzb3VyY2UgY29kZSBmb3IgdGhlIAotICAgIE9wZW5KREsKLSAgICByZXF1aXJlcwotICAgIGEgY2VydGFpbiBkZWdyZWUgb2YgdGVjaG5pY2FsIGV4cGVydGlzZS4KLTwvYmxvY2txdW90ZT4KLQotPCEtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0+Ci08aHIgbm9zaGFkZT0ibm9zaGFkZSIgc2l6ZT0iMyI+Ci0KLTxoMj48YSBuYW1lPSJjb250ZW50cyI+Q29udGVudHM8L2E+PC9oMj4KLQotPGJsb2NrcXVvdGU+Ci0gICAgPHVsPgotICAgICAgICA8bGk+PGEgaHJlZj0iI2ludHJvZHVjdGlvbiI+SW50cm9kdWN0aW9uPC9hPjwvbGk+Ci0gICAgICAgIDxsaT48YSBocmVmPSIjTUJFIj5NaW5pbXVtIEJ1aWxkIEVudmlyb25tZW50czwvYT48L2xpPgotICAgICAgICA8bGk+PGEgaHJlZj0iI1NEQkUiPlNwZWNpZmljIERldmVsb3BlciBCdWlsZCBFbnZpcm9ubWVudHM8L2E+PC9saT4KLSAgICAgICAgPGxpPjxhIGhyZWY9IiNkaXJlY3RvcmllcyI+U291cmNlIERpcmVjdG9yeSBTdHJ1Y3R1cmU8L2E+IDwvbGk+Ci0gICAgICAgIDxsaT48YSBocmVmPSIjYnVpbGRpbmciPkJ1aWxkIEluZm9ybWF0aW9uPC9hPgotICAgICAgICAgICAgPHVsIHR5cGU9ImRpc2MiPgotICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIjZ21ha2UiPkdOVSBNYWtlICg8dHQ+PGk+Z21ha2U8L2k+PC90dD4pPC9hPiA8L2xpPgotICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIjbGludXgiPkJhc2ljIExpbnV4IFN5c3RlbSBTZXR1cDwvYT4gPC9saT4KLSAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iI3NvbGFyaXMiPkJhc2ljIFNvbGFyaXMgU3lzdGVtIFNldHVwPC9hPiA8L2xpPgotICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIjd2luZG93cyI+QmFzaWMgV2luZG93cyBTeXN0ZW0gU2V0dXA8L2E+IDwvbGk+Ci0gICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9IiNkZXBlbmRlbmNpZXMiPkJ1aWxkIERlcGVuZGVuY2llczwvYT4gPC9saT4KLSAgICAgICAgICAgICAgICA8dWwgdHlwZT0iZGlzYyI+Ci0gICAgICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIjYm9vdGpkayI+Qm9vdHN0cmFwIEpESzwvYT4gPC9saT4KLSAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9IiNiaW5hcnlwbHVncyI+QmluYXJ5IFBsdWdzPC9hPiA8L2xpPgotICAgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iI2NhY2VydHMiPkNlcnRpZmljYXRlIEF1dGhvcml0eSBGaWxlIChjYWNlcnQpPC9hPiA8L2xpPgotICAgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iI2NvbXBpbGVycyI+Q29tcGlsZXJzPC9hPiAKLSAgICAgICAgICAgICAgICAgICAgICAgIDx1bD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iI21zdmMiPk1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvPC9hPiA8L2xpPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIjbXNzZGsiPk1pY3Jvc29mdCBQbGF0Zm9ybSBTREs8L2E+IDwvbGk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9IiNnY2MiPkxpbnV4IGdjYy9iaW51dGlsczwvYT4gPC9saT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iI3N0dWRpbyI+U3VuIFN0dWRpbzwvYT4gPC9saT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+Ci0gICAgICAgICAgICAgICAgICAgIDwvbGk+Ci0gICAgICAgICAgICAgICAgICAgIDxsaT5MaW51eCBhbmQgU29sYXJpczoKLSAgICAgICAgICAgICAgICAgICAgICAgIDx1bD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iI2N1cHMiPkNVUFMgSW5jbHVkZSBmaWxlczwvYT4gPC9saT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+Ci0gICAgICAgICAgICAgICAgICAgIDwvbGk+Ci0gICAgICAgICAgICAgICAgICAgIDxsaT5XaW5kb3dzIG9ubHk6Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dWw+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPlVuaXggQ29tbWFuZCBUb29scyAoPGEgaHJlZj0iI2N5Z3dpbiI+Q1lHV0lOPC9hPik8L2xpPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIjZHhzZGsiPkRpcmVjdFggOS4wIFNESzwvYT4gPC9saT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+Ci0gICAgICAgICAgICAgICAgICAgIDwvbGk+Ci0gICAgICAgICAgICAgICAgPC91bD4KLSAgICAgICAgICAgIDwvdWw+Ci0gICAgICAgIDwvbGk+Ci0gICAgICAgIDxsaT48YSBocmVmPSIjY3JlYXRpbmciPkNyZWF0aW5nIHRoZSBCdWlsZDwvYT4gPC9saT4KLSAgICAgICAgPGxpPjxhIGhyZWY9IiN0ZXN0aW5nIj5UZXN0aW5nIHRoZSBCdWlsZDwvYT4gPC9saT4KLSAgICAgICAgPGxpPjxhIGhyZWY9IiN2YXJpYWJsZXMiPkVudmlyb25tZW50L01ha2UgVmFyaWFibGVzPC9hPjwvbGk+Ci0gICAgICAgIDxsaT48YSBocmVmPSIjdHJvdWJsZXNob290aW5nIj5Ucm91Ymxlc2hvb3Rpbmc8L2E+PC9saT4KLSAgICA8L3VsPgotPC9ibG9ja3F1b3RlPgotCi08IS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLT4KLTxociBub3NoYWRlPSJub3NoYWRlIiBzaXplPSIzIj4KLQotPGgyPjxhIG5hbWU9Ik1CRSI+TWluaW11bSBCdWlsZCBFbnZpcm9ubWVudHM8L2E+PC9oMj4KLQotPGJsb2NrcXVvdGU+Ci0gICAgPHA+Ci0gICAgVGhpcyBmaWxlIG9mdGVuIGRlc2NyaWJlcyBzcGVjaWZpYyByZXF1aXJlbWVudHMgZm9yIHdoYXQgd2UgY2FsbCB0aGUKLSAgICAibWluaW11bSBidWlsZCBlbnZpcm9ubWVudHMiIChNQkUpIGZvciB0aGUgSkRLLgotICAgIEJ1aWxkaW5nIHdpdGggdGhlIE1CRSB3aWxsIGdlbmVyYXRlIHRoZSBtb3N0IGNvbXBhdGlibGUKLSAgICBiaXRzIHRoYXQgaW5zdGFsbCBvbiwgYW5kIHJ1biBjb3JyZWN0bHkgb24sIHRoZSBtb3N0IHZhcmlhdGlvbnMKLSAgICBvZiB0aGUgc2FtZSBiYXNlIE9TIGFuZCBoYXJkd2FyZSBhcmNoaXRlY3R1cmUuCi0gICAgVGhlc2UgdXN1YWxseSByZXByZXNlbnQgd2hhdCBpcyBvZnRlbiBjYWxsZWQgdGhlCi0gICAgbGVhc3QgY29tbW9uIGRlbm9taW5hdG9yIHBsYXRmb3Jtcy4KLSAgICBJdCBpcyB1bmRlcnN0b29kIHRoYXQgbW9zdCBkZXZlbG9wZXJzIHdpbGwgTk9UIGJlIHVzaW5nIHRoZXNlIAotICAgIHNwZWNpZmljIHBsYXRmb3JtcywgYW5kIGluIGZhY3QgY3JlYXRpbmcgdGhlc2Ugc3BlY2lmaWMgcGxhdGZvcm1zCi0gICAgbWF5IGJlIGRpZmZpY3VsdCBkdWUgdG8gdGhlIGFnZSBvZiBzb21lIG9mIHRoaXMgc29mdHdhcmUuCi0gICAgPHA+Ci0gICAgCi0gICAgPHA+Ci0gICAgVGhlIG1pbmltdW0gT1MgYW5kIEMvQysrIGNvbXBpbGVyIHZlcnNpb25zIG5lZWRlZCBmb3IgYnVpbGRpbmcgdGhlCi0gICAgT3BlbkpESzoKLSAgICA8cD4KLSAgICA8Y2VudGVyPgotICAgICAgICA8dGFibGUgYm9yZGVyPSIxIj4KLSAgICAgICAgICAgIDx0aGVhZD4KLSAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgIDx0aD5CYXNlIE9TIGFuZCBBcmNoaXRlY3R1cmU8L3RoPgotICAgICAgICAgICAgICAgICAgICA8dGg+T1M8L3RoPgotICAgICAgICAgICAgICAgICAgICA8dGg+Q29tcGlsZXI8L3RoPgotICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8L3RoZWFkPgotICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgPHRkPkxpbnV4IFg4NiAoMzJiaXQpPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgPHRkPlJlZCBIYXQgRW50ZXJwcmlzZSBMaW51eCA0IDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZD5nY2MgNCA8L3RkPgotICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICA8dGQ+TGludXggWDY0ICg2NGJpdCk8L3RkPgotICAgICAgICAgICAgICAgICAgICA8dGQ+UmVkIEhhdCBFbnRlcnByaXNlIExpbnV4IDQgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgPHRkPmdjYyA0IDwvdGQ+Ci0gICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZD5Tb2xhcmlzIFNQQVJDICgzMmJpdCk8L3RkPgotICAgICAgICAgICAgICAgICAgICA8dGQ+U29sYXJpcyAxMCArIHBhdGNoZXMgCi0gICAgICAgICAgICAgICAgICAgICAgICA8YnI+Ci0gICAgICAgICAgICAgICAgICAgICAgICBTZWUgPGEgaHJlZj0iaHR0cDovL3N1bnNvbHZlLnN1bi5jb20vcHViLWNnaS9zaG93LnBsP3RhcmdldD1wYXRjaGVzL0phdmFTRSI+U3VuU29sdmU8L2E+IGZvciBwYXRjaCBkb3dubG9hZHMuCi0gICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZD5TdW4gU3R1ZGlvIDExIDwvdGQ+Ci0gICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZD5Tb2xhcmlzIFNQQVJDVjkgKDY0Yml0KTwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZD5Tb2xhcmlzIDEwICsgcGF0Y2hlcwotICAgICAgICAgICAgICAgICAgICAgICAgPGJyPgotICAgICAgICAgICAgICAgICAgICAgICAgU2VlIDxhIGhyZWY9Imh0dHA6Ly9zdW5zb2x2ZS5zdW4uY29tL3B1Yi1jZ2kvc2hvdy5wbD90YXJnZXQ9cGF0Y2hlcy9KYXZhU0UiPlN1blNvbHZlPC9hPiBmb3IgcGF0Y2ggZG93bmxvYWRzLgotICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICA8dGQ+U3VuIFN0dWRpbyAxMTwvdGQ+Ci0gICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZD5Tb2xhcmlzIFg4NiAoMzJiaXQpPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgPHRkPlNvbGFyaXMgMTAgKyBwYXRjaGVzCi0gICAgICAgICAgICAgICAgICAgICAgICA8YnI+Ci0gICAgICAgICAgICAgICAgICAgICAgICBTZWUgPGEgaHJlZj0iaHR0cDovL3N1bnNvbHZlLnN1bi5jb20vcHViLWNnaS9zaG93LnBsP3RhcmdldD1wYXRjaGVzL0phdmFTRSI+U3VuU29sdmU8L2E+IGZvciBwYXRjaCBkb3dubG9hZHMuCi0gICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZD5TdW4gU3R1ZGlvIDExPC90ZD4KLSAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgPHRkPlNvbGFyaXMgWDY0ICg2NGJpdCk8L3RkPgotICAgICAgICAgICAgICAgICAgICA8dGQ+U29sYXJpcyAxMCArIHBhdGNoZXMKLSAgICAgICAgICAgICAgICAgICAgICAgIDxicj4KLSAgICAgICAgICAgICAgICAgICAgICAgIFNlZSA8YSBocmVmPSJodHRwOi8vc3Vuc29sdmUuc3VuLmNvbS9wdWItY2dpL3Nob3cucGw/dGFyZ2V0PXBhdGNoZXMvSmF2YVNFIj5TdW5Tb2x2ZTwvYT4gZm9yIHBhdGNoIGRvd25sb2Fkcy4KLSAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgPHRkPlN1biBTdHVkaW8gMTE8L3RkPgotICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICA8dGQ+V2luZG93cyBYODYgKDMyYml0KTwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZD5XaW5kb3dzIFhQPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgPHRkPk1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIC5ORVQgMjAwMyBQcm9mZXNzaW9uYWw8L3RkPgotICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICA8dGQ+V2luZG93cyBYNjQgKDY0Yml0KTwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZD5XaW5kb3dzIFNlcnZlciAyMDAzIC0gRW50ZXJwcmlzZSB4NjQgRWRpdGlvbjwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZD5NaWNyb3NvZnQgUGxhdGZvcm0gU0RLIC0gQXByaWwgMjAwNTwvdGQ+Ci0gICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgIDwvdGFibGU+Ci0gICAgPC9jZW50ZXI+Ci08L2Jsb2NrcXVvdGU+Ci0KLTwhLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tPgotPGhyIG5vc2hhZGU9Im5vc2hhZGUiIHNpemU9IjMiPgotCi08aDI+PGEgbmFtZT0iU0RCRSI+U3BlY2lmaWMgRGV2ZWxvcGVyIEJ1aWxkIEVudmlyb25tZW50czwvYT48L2gyPgotCi08YmxvY2txdW90ZT4KLSAgICA8cD4KLSAgICBXZSB3b24ndCBiZSBsaXN0aW5nIGFsbCB0aGUgcG9zc2libGUgZW52aXJvbm1lbnRzLCBidXQKLSAgICB3ZSB3aWxsIHRyeSB0byBwcm92aWRlIHdoYXQgaW5mb3JtYXRpb24gd2UgaGF2ZSBhdmFpbGFibGUgdG8gdXMuCi08L2Jsb2NrcXVvdGU+Ci0KLTxoMz48YSBuYW1lPSJmZWRvcmEiPkZlZG9yYTwvYT48L2gzPgotCi08YmxvY2txdW90ZT4KLSAgICBUQkQKLTwvYmxvY2txdW90ZT4KLQotPGgzPjxhIG5hbWU9ImRlYmlhbiI+RGViaWFuPC9hPjwvaDM+Ci0KLTxibG9ja3F1b3RlPgotICAgIFRCRAotPC9ibG9ja3F1b3RlPgotCi08aDM+PGEgbmFtZT0idWJ1bnR1Ij5VYnVudHU8L2E+PC9oMz4KLQotPGJsb2NrcXVvdGU+Ci0gICAgPHA+Ci0gICAgSW4gYWRkaXRpb24gdG8gbmVlZGluZyB0aGUgQm9vdHN0cmFwIEpESyBhbmQgdGhlIEJpbmFyeSBQbHVncywgCi0gICAgd2hlbiBidWlsZGluZyBvbiBVYnVudHUgeW91IHdpbGwgbmVlZCB0bwotICAgIG1ha2Ugc3VyZSBjZXJ0YWluIHBhY2thZ2VzIGFyZSBpbnN0YWxsZWQuCi0gICAgSW4gcGFydGljdWxhciwgY2VydGFpbiBYMTEgcGFja2FnZXMsIG1ha2UsIG00LCBnYXdrLCBnY2MgNCwgCi0gICAgYmludXRpbHMsIGN1cHMsIGZyZWV0eXBlCi0gICAgYW5kIGFsc2EuCi0gICAgCi0gICAgPGg0PlVidW50dSA2LjA2PC9oND4KLSAgICAKLSAgICA8cD4KLSAgICBUaGUgZm9sbG93aW5nIGxpc3Qgb2YgcGFja2FnZXMgZm9yIFVidW50dSA2LjA2IGlzIGEgd29ya2luZyBzZXQgdGhhdAotICAgIGRvZXMgYXBwZWFyIHRvIHdvcmsuIAotICAgIAotICAgIDxwPgotICAgIDxiPk5vdGUgdGhhdCBpdCdzIHF1aXRlIHBvc3NpYmxlIHRoYXQgc29tZSBvZiB0aGVzZQotICAgICAgICBwYWNrYWdlcyBhcmUgbm90IHJlcXVpcmVkLCBzbyBhbnlvbmUgZGlzY292ZXJpbmcgdGhhdCBzb21lIG9mIHRoZQotICAgICAgICBwYWNrYWdlcyBsaXN0ZWQgYmVsb3cgYXJlIE5PVCByZXF1aXJlZCwKLSAgICAgICAgcGxlYXNlIGxldCB0aGUKLSAgICAgICAgT3BlbkpESwotICAgIHRlYW0ga25vdy48L2I+Ci0gICAgPHA+Ci0gICAgQWxsIHRoZSBwYWNrYWdlcyBiZWxvdyBjYW4gYmUgaW5zdGFsbGVkIHdpdGggdGhlCi0gICAgU3luYXB0aWMgUGFja2FnZSBtYW5hZ2VyIHByb3ZpZGVkIHdpdGggdGhlIGJhc2UgVWJ1bnR1IDYuMDYgcmVsZWFzZS4KLSAgICAKLSAgICA8YmxvY2txdW90ZT4KLSAgICAgICAgPHVsPgotICAgICAgICAgICAgPGxpPmJpbnV0aWxzICgyLjE2LjFjdnMyMDA2MDExNy0xdWJ1bnR1Mi4xKTwvbGk+Ci0gICAgICAgICAgICA8bGk+Y3BwICg0OjQuMC4zLTEpPC9saT4KLSAgICAgICAgICAgIDxsaT5jcHAtNC4wICg0LjAuMy0xdWJ1bnR1NSk8L2xpPgotICAgICAgICAgICAgPGxpPmxpYmZyZWV0eXBlNi1kZXY8L2xpPgotICAgICAgICAgICAgPGxpPmcrKyAoNDo0LjAuMy0xKTwvbGk+Ci0gICAgICAgICAgICA8bGk+ZysrLTQuMCAoNC4wLjMtMXVidW50dTUpPC9saT4KLSAgICAgICAgICAgIDxsaT5nYXdrICgxOjMuMS41LTJidWlsZDEpPC9saT4KLSAgICAgICAgICAgIDxsaT5nY2MgKDQ6NC4wLjMtMSk8L2xpPgotICAgICAgICAgICAgPGxpPmdjYy00LjAgKDQuMC4zLTF1YnVudHU1KTwvbGk+Ci0gICAgICAgICAgICA8bGk+bGliYXNvdW5kMi1kZXYgKDEuMC4xMC0ydWJ1bnR1NCk8L2xpPgotICAgICAgICAgICAgPGxpPmxpYmM2ICgyLjMuNi0wdWJ1bnR1MjApIHRvIDIuMy42LTB1YnVudHUyMC40PC9saT4KLSAgICAgICAgICAgIDxsaT5saWJjNi1kZXYgKDIuMy42LTB1YnVudHUyMC40KTwvbGk+Ci0gICAgICAgICAgICA8bGk+bGliYzYtaTY4NiAoMi4zLjYtMHVidW50dTIwKSB0byAyLjMuNi0wdWJ1bnR1MjAuNDwvbGk+Ci0gICAgICAgICAgICA8bGk+bGliY3Vwc3lzMi1kZXYgKDEuMi4yLTB1YnVudHUwLjYuMDYpPC9saT4KLSAgICAgICAgICAgIDxsaT5saWJnY3J5cHQxMS1kZXYgKDEuMi4yLTEpPC9saT4KLSAgICAgICAgICAgIDxsaT5saWJnbnV0bHMtZGV2ICgxLjIuOS0ydWJ1bnR1MS4xKTwvbGk+Ci0gICAgICAgICAgICA8bGk+bGliZ251dGxzMTIgKDEuMi45LTJ1YnVudHUxKSB0byAxLjIuOS0ydWJ1bnR1MS4xPC9saT4KLSAgICAgICAgICAgIDxsaT5saWJncGctZXJyb3ItZGV2ICgxLjEtNCk8L2xpPgotICAgICAgICAgICAgPGxpPmxpYmljZS1kZXYgKDI6MS4wLjAtMHVidW50dTIpPC9saT4KLSAgICAgICAgICAgIDxsaT5saWJsb2NrZmlsZTEgKDEuMDYuMSk8L2xpPgotICAgICAgICAgICAgPGxpPmxpYm9wZW5jZGs4LWRldiAoMC41LjctMik8L2xpPgotICAgICAgICAgICAgPGxpPmxpYnBvcHQtZGV2ICgxLjctNSk8L2xpPgotICAgICAgICAgICAgPGxpPmxpYnNtLWRldiAoMjoxLjAuMC0wdWJ1bnR1Mik8L2xpPgotICAgICAgICAgICAgPGxpPmxpYnN0ZGMrKzYtNC4wLWRldiAoNC4wLjMtMXVidW50dTUpPC9saT4KLSAgICAgICAgICAgIDxsaT5saWJ0YXNuMS0yLWRldiAoMC4yLjE3LTF1YnVudHUxKTwvbGk+Ci0gICAgICAgICAgICA8bGk+bGlieDExLWRldiAoMjoxLjAuMC0wdWJ1bnR1OSk8L2xpPgotICAgICAgICAgICAgPGxpPmxpYnhhdS1kZXYgKDE6MS4wLjAtMHVidW50dTQpPC9saT4KLSAgICAgICAgICAgIDxsaT5saWJ4YXctaGVhZGVycyAoMjoxLjAuMS0wdWJ1bnR1Myk8L2xpPgotICAgICAgICAgICAgPGxpPmxpYnhhdzctZGV2ICgyOjEuMC4xLTB1YnVudHUzKTwvbGk+Ci0gICAgICAgICAgICA8bGk+bGlieGRtY3AtZGV2ICgxOjEuMC4wLTB1YnVudHUyKTwvbGk+Ci0gICAgICAgICAgICA8bGk+bGlieGV4dC1kZXYgKDI6MS4wLjAtMHVidW50dTQpPC9saT4KLSAgICAgICAgICAgIDxsaT5saWJ4aS1kZXYgKDI6MS4wLjAtMHVidW50dTMpIDwvbGk+Ci0gICAgICAgICAgICA8bGk+bGlieG11LWRldiAoMjoxLjAuMC0wdWJ1bnR1Myk8L2xpPgotICAgICAgICAgICAgPGxpPmxpYnhtdS1oZWFkZXJzICgyOjEuMC4wLTB1YnVudHUzKTwvbGk+Ci0gICAgICAgICAgICA8bGk+bGlieG11dS1kZXYgKDI6MS4wLjAtMHVidW50dTMpPC9saT4KLSAgICAgICAgICAgIDxsaT5saWJ4cC1kZXYgKDYuOC4yLTExdWJ1bnR1Mik8L2xpPgotICAgICAgICAgICAgPGxpPmxpYnhwbS1kZXYgKDE6My41LjQuMi0wdWJ1bnR1Myk8L2xpPgotICAgICAgICAgICAgPGxpPmxpYnhyYW5kci1kZXYgKDE6MS4xLjAuMi0wdWJ1bnR1NCk8L2xpPgotICAgICAgICAgICAgPGxpPmxpYnh0LWRldiAoMToxLjAuMC0wdWJ1bnR1Myk8L2xpPgotICAgICAgICAgICAgPGxpPmxpYnh0cmFwLWRldiAoMjoxLjAuMC0wdWJ1bnR1Mik8L2xpPgotICAgICAgICAgICAgPGxpPmxpYnh0c3QtZGV2ICgyOjEuMC4xLTB1YnVudHUyKTwvbGk+Ci0gICAgICAgICAgICA8bGk+bGlieHYtZGV2ICgyOjEuMC4xLTB1YnVudHUzKTwvbGk+Ci0gICAgICAgICAgICA8bGk+bGludXgta2VybmVsLWhlYWRlcnMgKDIuNi4xMS4yLTB1YnVudHUxOCk8L2xpPgotICAgICAgICAgICAgPGxpPm00ICgxLjQuNC0xKTwvbGk+Ci0gICAgICAgICAgICA8bGk+bWFrZSAoMy44MCszLjgxLmI0LTEpPC9saT4KLSAgICAgICAgICAgIDxsaT5zc2wtY2VydCAoMS4wLjEzKTwvbGk+Ci0gICAgICAgICAgICA8bGk+eC1kZXYgKDcuMC40LTB1YnVudHUyKTwvbGk+Ci0gICAgICAgICAgICA8bGk+eDExcHJvdG8tY29yZS1kZXYgKDcuMC40LTB1YnVudHUyKTwvbGk+Ci0gICAgICAgICAgICA8bGk+eDExcHJvdG8taW5wdXQtZGV2ICgxLjMuMi0wdWJ1bnR1Mik8L2xpPgotICAgICAgICAgICAgPGxpPngxMXByb3RvLWtiLWRldiAoMS4wLjItMHVidW50dTIpPC9saT4KLSAgICAgICAgICAgIDxsaT54MTFwcm90by1yYW5kci1kZXYgKDEuMS4yLTB1YnVudHUyKTwvbGk+Ci0gICAgICAgICAgICA8bGk+eDExcHJvdG8tcmVjb3JkLWRldiAoMS4xMy4yLTB1YnVudHUyKTwvbGk+Ci0gICAgICAgICAgICA8bGk+eDExcHJvdG8tdHJhcC1kZXYgKDMuNC4zLTB1YnVudHUyKTwvbGk+Ci0gICAgICAgICAgICA8bGk+eDExcHJvdG8tdmlkZW8tZGV2ICgyLjIuMi0wdWJ1bnR1Mik8L2xpPgotICAgICAgICAgICAgPGxpPngxMXByb3RvLXhleHQtZGV2ICg3LjAuMi0wdWJ1bnR1Mik8L2xpPgotICAgICAgICAgICAgPGxpPnhsaWJzLWRldiAoNy4wLjAtMHVidW50dTQ1KTwvbGk+Ci0gICAgICAgICAgICA8bGk+emxpYjFnLWRldiAoMToxLjIuMy02dWJ1bnR1NCk8L2xpPgotICAgICAgICA8L3VsPgotICAgIDwvYmxvY2txdW90ZT4KLSAgICAKLSAgICA8aDQ+VWJ1bnR1IDcuMDQ8L2g0PgotICAgIAotICAgIDxwPgotICAgIFVzaW5nIHRoZSBTeW5hcHRpYyBQYWNrYWdlIE1hbmFnZXIsIGRvd25sb2FkIHRoZSBmb2xsb3dpbmcKLSAgICBwYWNrYWdlcyAoZG91YmxlIGluZGVudGVkIHBhY2thZ2VzIGFyZSBhdXRvbWF0aWNhbGx5IGFxdWlyZWQKLSAgICBkdWUgdG8gcGFja2FnZSBkZXBlbmRlbmNpZXMpOgotICAgIAotICAgIDxibG9ja3F1b3RlPgotICAgICAgICA8dWw+Ci0gICAgICAgICAgICA8bGk+YnVpbGQtZXNzZW50aWFsPC9saT4KLSAgICAgICAgICAgIDx1bD4KLSAgICAgICAgICAgICAgICA8bGk+ZHBrZy1kZXY8L2xpPgotICAgICAgICAgICAgICAgIDxsaT5nKys8L2xpPgotICAgICAgICAgICAgICAgIDxsaT5nKystNC4xPC9saT4KLSAgICAgICAgICAgICAgICA8bGk+bGliYzYtZGV2PC9saT4KLSAgICAgICAgICAgICAgICA8bGk+bGlic3RkYysrNi40LjEtZGV2PC9saT4KLSAgICAgICAgICAgICAgICA8bGk+bGludXgtbGliYy1kZXY8L2xpPgotICAgICAgICAgICAgPC91bD4KLSAgICAgICAgICAgIDxsaT5nYXdrPC9saT4KLSAgICAgICAgICAgIDxsaT5tNDwvbGk+Ci0gICAgICAgICAgICA8bGk+bGliYXNvdW5kMi1kZXY8L2xpPgotICAgICAgICAgICAgPGxpPmxpYmN1cHN5czItZGV2PC9saT4KLSAgICAgICAgICAgIDx1bD4KLSAgICAgICAgICAgICAgICA8bGk+bGliZ2NyeXB0MTEtZGV2PC9saT4KLSAgICAgICAgICAgICAgICA8bGk+bGdudXRscy1kZXY8L2xpPgotICAgICAgICAgICAgICAgIDxsaT5saWJncGctZXJyb3ItZGV2PC9saT4KLSAgICAgICAgICAgICAgICA8bGk+bGlibHpvLWRldjwvbGk+Ci0gICAgICAgICAgICAgICAgPGxpPmxpYm9wZW5jZGs4LWRldjwvbGk+Ci0gICAgICAgICAgICAgICAgPGxpPmxpYnBvcHQtZGV2PC9saT4KLSAgICAgICAgICAgICAgICA8bGk+bGlidGFzbjEtMy1kZXY8L2xpPgotICAgICAgICAgICAgICAgIDxsaT56bGliMWctZGV2PC9saT4KLSAgICAgICAgICAgIDwvdWw+Ci0gICAgICAgICAgICA8bGk+c3VuLWphdmE2LWpkazwvbGk+Ci0gICAgICAgICAgICA8dWw+Ci0gICAgICAgICAgICAgICAgPGxpPmphdmEtY29tbW9uPC9saT4KLSAgICAgICAgICAgICAgICA8bGk+bGlibHRkbDM8L2xpPgotICAgICAgICAgICAgICAgIDxsaT5vZGJjaW5zdDFkZWJpYW4xPC9saT4KLSAgICAgICAgICAgICAgICA8bGk+c3VuLWphdmE2LWJpbjwvbGk+Ci0gICAgICAgICAgICAgICAgPGxpPnN1bi1qYXZhNi1qcmU8L2xpPgotICAgICAgICAgICAgICAgIDxsaT51bml4b2RiYzwvbGk+Ci0gICAgICAgICAgICA8L3VsPgotICAgICAgICAgICAgPGxpPnhsaWJzLWRldjwvbGk+Ci0gICAgICAgICAgICA8dWw+Ci0gICAgICAgICAgICAgICAgPGxpPihtYW55KTwvbGk+Ci0gICAgICAgICAgICA8L3VsPgotICAgICAgICAgICAgPGxpPngxMXByb3RvLXByaW50LWRldjwvbGk+Ci0gICAgICAgICAgICA8bGk+bGlieGF3Ny1kZXY8L2xpPgotICAgICAgICAgICAgPHVsPgotICAgICAgICAgICAgICAgIDxsaT5saWJ4YXctaGVhZGVyczwvbGk+Ci0gICAgICAgICAgICA8L3VsPgotICAgICAgICAgICAgPGxpPmxpYnhwLWRldjwvbGk+Ci0gICAgICAgICAgICA8bGk+bGliZnJlZXR5cGU2LWRldjwvbGk+Ci0gICAgICAgIDwvdWw+Ci0gICAgPC9ibG9ja3F1b3RlPgotPC9ibG9ja3F1b3RlPgotCi08IS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLT4KLTxociBub3NoYWRlPSJub3NoYWRlIiBzaXplPSIzIj4KLQotPGgyPjxhIG5hbWU9ImRpcmVjdG9yaWVzIj5Tb3VyY2UgRGlyZWN0b3J5IFN0cnVjdHVyZTwvYT48L2gyPgotCi08YmxvY2txdW90ZT4KLSAgICA8cD4KLSAgICBUaGUgc291cmNlIGNvZGUgZm9yIHRoZSAKLSAgICBPcGVuSkRLIGlzCi0gICAgZGVsaXZlcmVkIGluIDxpPjM8L2k+IHNpYmxpbmcgZGlyZWN0b3JpZXM6Ci0gICAgPHR0PmhvdHNwb3Q8L3R0PiwgCi0gICAgPHR0Pmxhbmd0b29sczwvdHQ+LCAKLSAgICA8dHQ+Y29yYmE8L3R0PiwgCi0gICAgPHR0PmpheHdzPC90dD4sIAotICAgIDx0dD5qYXhwPC90dD4sIAotICAgIDx0dD5qZGs8L3R0PgotICAgIGFuZAotICAgIFRoZSA8dHQ+aG90c3BvdDwvdHQ+IGRpcmVjdG9yeSBjb250YWlucyB0aGUgc291cmNlIGNvZGUgYW5kIG1ha2UKLSAgICBmaWxlcyBmb3IKLSAgICBidWlsZGluZyB0aGUgCi0gICAgT3BlbkpESwotICAgIEhvdHNwb3QgVmlydHVhbCBNYWNoaW5lLiAKLSAgICBUaGUgPHR0PmpkazwvdHQ+Ci0gICAgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSBzb3VyY2UgY29kZSBhbmQgbWFrZSBmaWxlcyBmb3IKLSAgICBidWlsZGluZyB0aGUgCi0gICAgT3BlbkpESwotICAgIHJ1bnRpbWUgbGlicmFyaWVzLCB0b29scyBhbmQgZGVtb3MuIAotICAgIFRoZSB0b3AgbGV2ZWwgTWFrZWZpbGUgaXMgdXNlZCB0byBidWlsZCB0aGUgY29tcGxldGUgT3BlbkpESyAKLSAgICByZWxlYXNlIGluY2x1ZGluZyBidWlsZGluZyB0aGUgaG90c3BvdAotICAgIFZNLCBzdGFnaW5nIHRoZSBWTSBiaW5hcmllcywgYW5kIGJ1aWxkaW5nIHRoZSAKLSAgICBPcGVuSkRLIAotICAgIHJ1bnRpbWUgbGlicmFyaWVzLAotICAgIHRvb2xzIGFuZCBkZW1vcy4KLTwvYmxvY2txdW90ZT4KLQotPCEtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0+Ci08aHIgbm9zaGFkZT0ibm9zaGFkZSIgc2l6ZT0iMyI+Ci0KLTxoMj48YSBuYW1lPSJidWlsZGluZyI+QnVpbGQgSW5mb3JtYXRpb248L2E+PC9oMj4KLQotPGJsb2NrcXVvdGU+Ci0gICAgPHA+Ci0gICAgQnVpbGRpbmcgdGhlIAotICAgIE9wZW5KREsKLSAgICBpcyBkb25lIHdpdGggYSA8dHQ+PGk+Z21ha2U8L2k+PC90dD4KLSAgICBjb21tYW5kIGxpbmUgYW5kIHZhcmlvdXMKLSAgICBlbnZpcm9ubWVudCBvciBtYWtlIHZhcmlhYmxlIHNldHRpbmdzIHRoYXQgZGlyZWN0IHRoZSBtYWtlIHJ1bGVzCi0gICAgdG8gd2hlcmUgdmFyaW91cyBjb21wb25lbnRzIGhhdmUgYmVlbiBpbnN0YWxsZWQuCi0gICAgV2hlcmUgcG9zc2libGUgdGhlIG1ha2VmaWxlcyB3aWxsIGF0dGVtcHQgdG8gbG9jYXRlZCB0aGUgdmFyaW91cwotICAgIGNvbXBvbmVudHMgaW4gdGhlIGRlZmF1bHQgbG9jYXRpb25zIG9yIGFueSBjb21wb25lbnQgc3BlY2lmaWMgCi0gICAgdmFyaWFibGUgc2V0dGluZ3MuCi0gICAgV2hlbiB0aGUgbm9ybWFsIGRlZmF1bHRzIGZhaWwgb3IgY29tcG9uZW50cyBjYW5ub3QgYmUgZm91bmQsCi0gICAgdGhlIHZhcmlvdXMKLSAgICA8dHQ+QUxUXyo8L3R0PiB2YXJpYWJsZXMgKGFsdGVybmF0ZXMpCi0gICAgY2FuIGJlIHVzZWQgdG8gaGVscCB0aGUgbWFrZWZpbGVzIGxvY2F0ZSBjb21wb25lbnRzLgotICAgIDxwPgotICAgIFJlZmVyIHRvIHRoZSBiYXNoL3NoL2tzaCBzZXR1cCBmaWxlCi0gICAgPHR0Pmpkay9tYWtlL2pka19nZW5lcmljX3Byb2ZpbGUuc2g8L3R0PgotICAgIGlmIHlvdSBuZWVkIGhlbHAgaW4gc2V0dGluZyB1cCB5b3VyIGVudmlyb25tZW50IHZhcmlhYmxlcy4KLSAgICBBIGJ1aWxkIGNvdWxkIGJlIGFzIHNpbXBsZSBhczoKLSAgICA8YmxvY2txdW90ZT4KLSAgICAgICAgPHByZT48dHQ+Ci0gICAgICAgICAgICAgICAgYmFzaAotICAgICAgICAgICAgICAgIC4gamRrL21ha2UvamRrX2dlbmVyaWNfcHJvZmlsZS5zaAotICAgICAgICAgICAgICAgIDxpPmdtYWtlPC9pPiBzYW5pdHkgJmFtcDsmYW1wOyA8aT5nbWFrZTwvaT4KLSAgICAgICAgPC90dD48L3ByZT4KLSAgICA8L2Jsb2NrcXVvdGU+Ci0gICAgPHA+Ci0gICAgT2YgY291cnNlIGtzaCBvciBzaCB3b3VsZCB3b3JrIHRvby4KLSAgICBCdXQgc29tZSBjdXN0b21pemF0aW9uIHdpbGwgcHJvYmFibHkgYmUgbmVjZXNzYXJ5LgotICAgIFRoZSA8dHQ+c2FuaXR5PC90dD4gcnVsZSB3aWxsIG1ha2Ugc29tZSBiYXNpYyBjaGVja3Mgb24gYnVpbGQKLSAgICBkZXBlbmRlbmNpZXMgYW5kIGdlbmVyYXRlIGFwcHJvcHJpYXRlIHdhcm5pbmcgbWVzc2FnZXMKLSAgICByZWdhcmRpbmcgbWlzc2luZywgb3V0IG9mIGRhdGUsIG9yIG5ld2VyIHRoYW4gZXhwZWN0ZWQgY29tcG9uZW50cwotICAgIGZvdW5kIG9uIHlvdXIgc3lzdGVtLgotPC9ibG9ja3F1b3RlPgotCi08IS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLT4KLTxociBub3NoYWRlPSJub3NoYWRlIiBzaXplPSIzIj4KLQotPGgzPjxhIG5hbWU9ImdtYWtlIj5HTlUgbWFrZSAoPHR0PjxpPmdtYWtlPC9pPjwvdHQ+KTwvYT48L2gzPgotCi08YmxvY2txdW90ZT4KLSAgICA8cD4KLSAgICBUaGUgTWFrZWZpbGVzIGluIHRoZSAKLSAgICBPcGVuSkRLIAotICAgIGFyZSBvbmx5IHZhbGlkIHdoZW4gdXNlZCB3aXRoIHRoZSAKLSAgICBHTlUgdmVyc2lvbiBvZiB0aGUgdXRpbGl0eSBjb21tYW5kIDx0dD5tYWtlPC90dD4KLSAgICAoPHR0PjxpPmdtYWtlPC9pPjwvdHQ+KS4KLSAgICBBIGZldyBub3RlcyBhYm91dCB1c2luZyBHTlUgbWFrZToKLSAgICA8dWw+Ci0gICAgICAgIDxsaT4KLSAgICAgICAgICAgIEluIGdlbmVyYWwsIHlvdSBuZWVkIEdOVSBtYWtlIHZlcnNpb24gMy43OC4xIG9yIG5ld2VyLgotICAgICAgICA8L2xpPgotICAgICAgICA8bGk+Ci0gICAgICAgICAgICBQbGFjZSB0aGUgbG9jYXRpb24gb2YgdGhlIEdOVSBtYWtlIGJpbmFyeSBpbiB0aGUgPHR0PlBBVEg8L3R0Pi4gCi0gICAgICAgIDwvbGk+Ci0gICAgICAgIDxsaT4KLSAgICAgICAgICAgIDxzdHJvbmc+TGludXg6PC9zdHJvbmc+Ci0gICAgICAgICAgICBUaGUgPHR0Pi91c3IvYmluL21ha2U8L3R0PiBjb21tYW5kIHNob3VsZCB3b3JrIGZpbmUgZm9yIHlvdS4KLSAgICAgICAgPC9saT4KLSAgICAgICAgPGxpPgotICAgICAgICAgICAgPHN0cm9uZz5Tb2xhcmlzOjwvc3Ryb25nPgotICAgICAgICAgICAgRG8gTk9UIHVzZSA8dHQ+L3Vzci9iaW4vbWFrZTwvdHQ+IG9uIFNvbGFyaXMuCi0gICAgICAgICAgICBJZiB5b3VyIFNvbGFyaXMgc3lzdGVtIGhhcyB0aGUgc29mdHdhcmUKLSAgICAgICAgICAgIGZyb20gdGhlIFNvbGFyaXMgQ29tcGFuaW9uIENEIGluc3RhbGxlZCwgCi0gICAgICAgICAgICB5b3Ugc2hvdWxkIHVzZSA8dHQ+Z21ha2U8L3R0PgotICAgICAgICAgICAgd2hpY2ggd2lsbCBiZSBsb2NhdGVkIGluIGVpdGhlciB0aGUgPHR0Pi9vcHQvc2Z3L2JpbjwvdHQ+IG9yIAotICAgICAgICAgICAgPHR0Pi91c3Ivc2Z3L2JpbjwvdHQ+IGRpcmVjdG9yeS4KLSAgICAgICAgPC9saT4KLSAgICAgICAgPGxpPgotICAgICAgICAgICAgPHN0cm9uZz5XaW5kb3dzOjwvc3Ryb25nPgotICAgICAgICAgICAgTWFrZSBzdXJlIHlvdSBzdGFydCB5b3VyIGJ1aWxkIGluc2lkZSBhIGJhc2gvc2gva3NoIHNoZWxsLgotICAgICAgICAgICAgPGJyPgotICAgICAgICAgICAgPGI+V0FSTklORzo8L2I+IFdhdGNoIG91dCBmb3IgbWFrZSB2ZXJzaW9uIDMuODEsIGl0IG1heQotICAgICAgICAgICAgbm90IHdvcmsgZHVlIHRvIGEgbGFjayBvZiBzdXBwb3J0IGZvciBkcml2ZSBsZXR0ZXIgcGF0aHMKLSAgICAgICAgICAgIGxpa2UgPHR0PkM6LzwvdHQ+LiBVc2UgYSAzLjgwIHZlcnNpb24sIG9yIGZpbmQgYSBuZXdlcgotICAgICAgICAgICAgdmVyc2lvbiB0aGF0IGhhcyB0aGlzIHByb2JsZW0gZml4ZWQuCi0gICAgICAgIDwvbGk+Ci0gICAgPC91bD4KLSAgICA8cD4KLSAgICBJbmZvcm1hdGlvbiBvbiBHTlUgbWFrZSwgYW5kIGFjY2VzcyB0byBmdHAgZG93bmxvYWQgc2l0ZXMsIGFyZQotICAgIGF2YWlsYWJsZSBvbiB0aGUKLSAgICA8YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvbWFrZS9tYWtlLmh0bWwiPgotICAgICAgICBHTlUgbWFrZSB3ZWIgc2l0ZQotICAgIDwvYT4uCi0gICAgVGhlIGxhdGVzdCBzb3VyY2UgdG8gR05VIG1ha2UgaXMgYXZhaWxhYmxlIGF0Ci0gICAgPGEgaHJlZj0iaHR0cDovL2Z0cC5nbnUub3JnL3B1Yi9nbnUvbWFrZS8iPmZ0cC5nbnUub3JnL3B1Yi9nbnUvbWFrZS88L2E+LgotPC9ibG9ja3F1b3RlPgotCi08IS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLT4KLTxociBub3NoYWRlPSJub3NoYWRlIiBzaXplPSIzIj4KLQotPGgzPjxhIG5hbWU9ImxpbnV4Ij5CYXNpYyBMaW51eCBTeXN0ZW0gU2V0dXA8L2E+PC9oMz4KLQotPGJsb2NrcXVvdGU+Ci0gICAgPHA+Ci0gICAgPHN0cm9uZz5pNTg2IG9ubHk6PC9zdHJvbmc+Ci0gICAgVGhlIG1pbmltdW0gcmVjb21tZW5kZWQgaGFyZHdhcmUgZm9yIGJ1aWxkaW5nIHRoZSBMaW51eCB2ZXJzaW9uCi0gICAgaXMgYSBQZW50aXVtIGNsYXNzIHByb2Nlc3NvciBvciBiZXR0ZXIsIGF0IGxlYXN0IDI1NiBNQiBvZiBSQU0sIGFuZAotICAgIGFwcHJveGltYXRlbHkgMS41IEdCIG9mIGZyZWUgZGlzayBzcGFjZS4KLSAgICA8cD4gCi0gICAgPHN0cm9uZz5YNjQgb25seTo8L3N0cm9uZz4KLSAgICBUaGUgbWluaW11bSByZWNvbW1lbmRlZCBoYXJkd2FyZSBmb3IgYnVpbGRpbmcgdGhlIExpbnV4Ci0gICAgdmVyc2lvbiBpcyBhbiBBTUQgT3B0ZXJvbiBjbGFzcyBwcm9jZXNzb3IsIGF0IGxlYXN0IDUxMiBNQiBvZiBSQU0sIGFuZAotICAgIGFwcHJveGltYXRlbHkgNCBHQiBvZiBmcmVlIGRpc2sgc3BhY2UuCi0gICAgPHA+IAotICAgIFRoZSBidWlsZCB3aWxsIHVzZSB0aGUgdG9vbHMgY29udGFpbmVkIGluIAotICAgIDx0dD4vYmluPC90dD4gYW5kIAotICAgIDx0dD4vdXNyL2JpbjwvdHQ+Ci0gICAgb2YgYSBzdGFuZGFyZCBpbnN0YWxsYXRpb24gb2YgdGhlIExpbnV4IG9wZXJhdGluZyBlbnZpcm9ubWVudC4gCi0gICAgWW91IHNob3VsZCBlbnN1cmUgdGhhdCB0aGVzZSBkaXJlY3RvcmllcyBhcmUgaW4geW91ciAKLSAgICA8dHQ+UEFUSDwvdHQ+LgotICAgIDxwPgotICAgIE5vdGUgdGhhdCBzb21lIExpbnV4IHN5c3RlbXMgaGF2ZSBhIGhhYml0IG9mIHByZS1wb3B1bGF0aW5nCi0gICAgeW91ciBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIHlvdSwgZm9yIGV4YW1wbGUgPHR0PkpBVkFfSE9NRTwvdHQ+Ci0gICAgbWlnaHQgZ2V0IHByZS1kZWZpbmVkIGZvciB5b3UgdG8gcmVmZXIgdG8gdGhlIEpESyBpbnN0YWxsZWQgb24KLSAgICB5b3VyIExpbnV4IHN5c3RlbS4gCi0gICAgWW91IHdpbGwgbmVlZCB0byB1bnNldCA8dHQ+SkFWQV9IT01FPC90dD4uCi0gICAgSXQncyBhIGdvb2QgaWRlYSB0byBydW4gPHR0PmVudjwvdHQ+IGFuZCB2ZXJpZnkgdGhlCi0gICAgZW52aXJvbm1lbnQgdmFyaWFibGVzIHlvdSBhcmUgZ2V0dGluZyBmcm9tIHRoZSBkZWZhdWx0IHN5c3RlbQotICAgIHNldHRpbmdzIG1ha2Ugc2Vuc2UgZm9yIGJ1aWxkaW5nIHRoZSAKLSAgICBPcGVuSkRLLgotPC9ibG9ja3F1b3RlPgotCi08IS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLT4KLQotPGg0PjxhIG5hbWU9ImxpbnV4X2NoZWNrbGlzdCI+QmFzaWMgTGludXggQ2hlY2sgTGlzdDwvYT48L2g0PgotCi08YmxvY2txdW90ZT4KLSAgICA8b2w+Ci0gICAgICAgIDxsaT4KLSAgICAgICAgICAgIEluc3RhbGwgdGhlCi0gICAgICAgICAgICA8YSBocmVmPSIjYm9vdGpkayI+Qm9vdHN0cmFwIEpESzwvYT4sIHNldAotICAgICAgICAgICAgPHR0PjxhIGhyZWY9IiNBTFRfQk9PVERJUiI+QUxUX0JPT1RESVI8L2E+PC90dD4uCi0gICAgICAgIDwvbGk+Ci0gICAgICAgIDxsaT4KLSAgICAgICAgICAgIEluc3RhbGwgdGhlCi0gICAgICAgICAgICA8YSBocmVmPSIjYmluYXJ5cGx1Z3MiPkJpbmFyeSBQbHVnczwvYT4sIHNldAotICAgICAgICAgICAgPHR0PjxhIGhyZWY9IiNBTFRfQklOQVJZX1BMVUdTX1BBVEgiPkFMVF9CSU5BUllfUExVR1NfUEFUSDwvYT48L3R0Pi4KLSAgICAgICAgPC9saT4KLSAgICAgICAgPGxpPgotICAgICAgICAgICAgSW5zdGFsbCBvciB1cGdyYWRlIHRoZSA8YSBocmVmPSIjZnJlZXR5cGUiPkZyZWVUeXBlIGRldmVsb3BtZW50Ci0gICAgICAgICAgICBwYWNrYWdlPC9hPi4KLSAgICAgICAgPC9saT4KLSAgICA8L29sPgotPC9ibG9ja3F1b3RlPgotCi08IS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLT4KLTxociBub3NoYWRlPSJub3NoYWRlIiBzaXplPSIzIj4KLQotPGgzPjxhIG5hbWU9InNvbGFyaXMiPkJhc2ljIFNvbGFyaXMgU3lzdGVtIFNldHVwPC9hPjwvaDM+Ci0KLTxibG9ja3F1b3RlPgotICAgIDxwPgotICAgIFRoZSBtaW5pbXVtIHJlY29tbWVuZGVkIGhhcmR3YXJlIGZvciBidWlsZGluZyB0aGUKLSAgICBTb2xhcmlzIFNQQVJDIHZlcnNpb24gaXMgYW4gVWx0cmFTUEFSQyB3aXRoIDUxMiBNQiBvZiBSQU0uIAotICAgIEZvciBidWlsZGluZwotICAgIHRoZSBTb2xhcmlzIHg4NiB2ZXJzaW9uLCBhIFBlbnRpdW0gY2xhc3MgcHJvY2Vzc29yIG9yIGJldHRlciBhbmQgYXQKLSAgICBsZWFzdCAxMjggTUIgb2YgUkFNIGFyZSByZWNvbW1lbmRlZC4gCi0gICAgQXBwcm94aW1hdGVseSAxLjQgR0Igb2YgZnJlZSBkaXNrCi0gICAgc3BhY2UgaXMgbmVlZGVkIGZvciBhIDMyLWJpdCBidWlsZC4KLSAgICA8cD4KLSAgICBJZiB5b3UgYXJlIGJ1aWxkaW5nIHRoZSA2NGJpdCB2ZXJzaW9uLCB5b3Ugc2hvdWxkCi0gICAgcnVuIHRoZSBjb21tYW5kICJpc2FpbmZvIC12IiB0byB2ZXJpZnkgdGhhdCB5b3UgaGF2ZSBhCi0gICAgNjQtYml0IGluc3RhbGxhdGlvbi4gCi0gICAgQW4gYWRkaXRpb25hbCA3IEdCIG9mIGZyZWUgZGlzayBzcGFjZSBpcyBuZWVkZWQKLSAgICBmb3IgYSA2NC1iaXQgYnVpbGQuCi0gICAgPHA+IAotICAgIFRoZSBidWlsZCB1c2VzIHRoZSB0b29scyBjb250YWluZWQgaW4gPHR0Pi91c3IvY2NzL2JpbjwvdHQ+Ci0gICAgYW5kIDx0dD4vdXNyL2JpbjwvdHQ+IG9mIGEgc3RhbmRhcmQgZGV2ZWxvcGVyIG9yIGZ1bGwgaW5zdGFsbGF0aW9uIG9mCi0gICAgdGhlIFNvbGFyaXMgb3BlcmF0aW5nIGVudmlyb25tZW50LgotPC9ibG9ja3F1b3RlPgotCi08IS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLT4KLQotPGg0PjxhIG5hbWU9InNvbGFyaXNfY2hlY2tsaXN0Ij5CYXNpYyBTb2xhcmlzIENoZWNrIExpc3Q8L2E+PC9oND4KLQotPGJsb2NrcXVvdGU+Ci0gICAgPG9sPgotICAgICAgICA8bGk+Ci0gICAgICAgICAgICBJbnN0YWxsIHRoZQotICAgICAgICAgICAgPGEgaHJlZj0iI2Jvb3RqZGsiPkJvb3RzdHJhcCBKREs8L2E+LCBzZXQKLSAgICAgICAgICAgIDx0dD48YSBocmVmPSIjQUxUX0JPT1RESVIiPkFMVF9CT09URElSPC9hPjwvdHQ+LgotICAgICAgICA8L2xpPgotICAgICAgICA8bGk+Ci0gICAgICAgICAgICBJbnN0YWxsIHRoZQotICAgICAgICAgICAgPGEgaHJlZj0iI2JpbmFyeXBsdWdzIj5CaW5hcnkgUGx1Z3M8L2E+LCBzZXQKLSAgICAgICAgICAgIDx0dD48YSBocmVmPSIjQUxUX0JJTkFSWV9QTFVHU19QQVRIIj5BTFRfQklOQVJZX1BMVUdTX1BBVEg8L2E+PC90dD4uCi0gICAgICAgIDwvbGk+Ci0gICAgICAgIDxsaT4KLSAgICAgICAgICAgIEluc3RhbGwgdGhlCi0gICAgICAgICAgICA8YSBocmVmPSIjc3R1ZGlvIj5TdW4gU3R1ZGlvIENvbXBpbGVyczwvYT4sIHNldAotICAgICAgICAgICAgPGEgaHJlZj0iI0FMVF9DT01QSUxFUl9QQVRIIj48dHQ+QUxUX0NPTVBJTEVSX1BBVEg8L3R0PjwvYT4uCi0gICAgICAgIDwvbGk+Ci0gICAgICAgIDxsaT4KLSAgICAgICAgICAgIEluc3RhbGwgdGhlCi0gICAgICAgICAgICA8YSBocmVmPSIjY3VwcyI+Q1VQUyBJbmNsdWRlIGZpbGVzPC9hPiwgc2V0Ci0gICAgICAgICAgICA8dHQ+PGEgaHJlZj0iI0FMVF9DVVBTX0hFQURFUlNfUEFUSCI+QUxUX0NVUFNfSEVBREVSU19QQVRIPC9hPjwvdHQ+LgotICAgICAgICA8L2xpPgotICAgIDwvb2w+Ci08L2Jsb2NrcXVvdGU+Ci0KLTwhLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tPgotPGhyIG5vc2hhZGU9Im5vc2hhZGUiIHNpemU9IjMiPgotCi08aDM+PGEgbmFtZT0id2luZG93cyI+QmFzaWMgV2luZG93cyBTeXN0ZW0gU2V0dXA8L2E+PC9oMz4KLQotPGJsb2NrcXVvdGU+IAotICAgIDxwPgotICAgIDxzdHJvbmc+aTU4NiBvbmx5Ojwvc3Ryb25nPgotICAgIFRoZSBtaW5pbXVtIHJlY29tbWVuZGVkIGhhcmR3YXJlIGZvciBidWlsZGluZyB0aGUgMzJiaXQgb3IgWDg2Ci0gICAgV2luZG93cyB2ZXJzaW9uIGlzIGFuIFBlbnRpdW0gY2xhc3MgcHJvY2Vzc29yIG9yIGJldHRlciwgYXQgbGVhc3QKLSAgICA1MTIgTUIgb2YgUkFNLCBhbmQgYXBwcm94aW1hdGVseSA2MDAgTUIgb2YgZnJlZSBkaXNrIHNwYWNlLgotICAgIDxzdHJvbmc+Ci0gICAgICAgIE5PVEU6IFRoZSBXaW5kb3dzIDIwMDAgYnVpbGQgbWFjaGluZXMgbmVlZCB0byB1c2UgdGhlCi0gICAgICAgIGZpbGUgc3lzdGVtIE5URlMuIAotICAgICAgICBCdWlsZCBtYWNoaW5lcyBmb3JtYXR0ZWQgdG8gRkFUMzIgd2lsbCBub3Qgd29yayAKLSAgICAgICAgYmVjYXVzZSBGQVQzMiBkb2Vzbid0IHN1cHBvcnQgY2FzZS1zZW5zaXRpdml0eSBpbiBmaWxlIG5hbWVzLgotICAgIDwvc3Ryb25nPgotICAgIDxwPiAKLSAgICA8c3Ryb25nPlg2NCBvbmx5Ojwvc3Ryb25nPgotICAgIFRoZSBtaW5pbXVtIHJlY29tbWVuZGVkIGhhcmR3YXJlIGZvciBidWlsZGluZwotICAgIHRoZSBXaW5kb3dzIFg2NCB2ZXJzaW9uIGlzIGFuIEFNRCBPcHRlcm9uIGNsYXNzIHByb2Nlc3NvciwgYXQgbGVhc3QgMQotICAgIEdCIG9mIFJBTSwgYW5kIGFwcHJveGltYXRlbHkgMTAgR0Igb2YgZnJlZSBkaXNrIHNwYWNlLgotPC9ibG9ja3F1b3RlPgotCi08IS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLT4KLQotPGg0PjxhIG5hbWU9InBhdGhzIj5XaW5kb3dzIFBhdGhzPC9hPjwvaDQ+Ci0KLTxibG9ja3F1b3RlPgotICAgIDxwPgotICAgIDxzdHJvbmc+V2luZG93czo8L3N0cm9uZz4KLSAgICBOb3RlIHRoYXQgR05VIG1ha2UgaXMgYSBoaXN0b3JpYyB1dGlsaXR5IGFuZCBpcyBiYXNlZCB2ZXJ5Ci0gICAgaGVhdmlseSBvbiBzaGVsbCBzY3JpcHRpbmcsIHNvIGl0IGRvZXMgbm90IHRvbGVyYXRlIHRoZSBXaW5kb3dzIGhhYml0Ci0gICAgb2YgaGF2aW5nIHNwYWNlcyBpbiBwYXRobmFtZXMgb3IgdGhlIHVzZSBvZiB0aGUgPHR0Plw8L3R0PmNoYXJhY3RlcnMgaW4gcGF0aG5hbWVzLgotICAgIEx1Y2tpbHkgb24gbW9zdCBXaW5kb3dzIHN5c3RlbXMsIHlvdSBjYW4gdXNlIDx0dD4vPC90dD5pbnN0ZWFkIG9mIFwsIGFuZAotICAgIHRoZXJlIGlzIGFsd2F5cyBhICdzaG9ydCcgcGF0aG5hbWUgd2l0aG91dCBzcGFjZXMgZm9yIGFueSBwYXRoIHRoYXQgCi0gICAgY29udGFpbnMgc3BhY2VzLgotICAgIFVuZm9ydHVuYXRlbHksIHRoaXMgc2hvcnQgcGF0aG5hbWUgY2FuIGJlIHNvbWV3aGF0IGR5bmFtaWMgYW5kIHRoZQotICAgIGZvcm11bGEgaXMgZGlmZmljdWx0IHRvIGV4cGxhaW4uCi0gICAgWW91IGNhbiB1c2UgPHR0PmN5Z3BhdGg8L3R0PiB1dGlsaXR5IHRvIG1hcCBwYXRobmFtZXMgd2l0aCBzcGFjZXMKLSAgICBvciB0aGUgPHR0Plw8L3R0PmNoYXJhY3RlciBpbnRvIHRoZSA8dHQ+QzovPC90dD4gc3R5bGUgb2YgcGF0aG5hbWUKLSAgICAoY2FsbGVkICdtaXhlZCcpLCBlLmcuCi0gICAgPHR0PmN5Z3BhdGggLXMgLW0gIjxpPnBhdGg8L2k+IjwvdHQ+LgotICAgIDxwPgotICAgIFRoZSBtYWtlZmlsZXMgd2lsbCB0cnkgdG8gdHJhbnNsYXRlIGFueSBwYXRobmFtZXMgc3VwcGxpZWQKLSAgICB0byBpdCBpbnRvIHRoZSA8dHQ+QzovPC90dD4gc3R5bGUgYXV0b21hdGljYWxseS4KLSAgICA8cD4KLSAgICBOb3RlIHRoYXQgdXNlIG9mIENZR1dJTiBjcmVhdGVzIGEgdW5pcXVlIHByb2JsZW0gd2l0aCByZWdhcmRzIHRvCi0gICAgc2V0dGluZyA8YSBocmVmPSIjcGF0aCI+PHR0PlBBVEg8L3R0PjwvYT4uIE5vcm1hbGx5IG9uIFdpbmRvd3MKLSAgICB0aGUgPHR0PlBBVEg8L3R0PiB2YXJpYWJsZSBjb250YWlucyBkaXJlY3RvcmllcwotICAgIHNlcGFyYXRlZCB3aXRoIHRoZSAiOyIgY2hhcmFjdGVyIChTb2xhcmlzIGFuZCBMaW51eCB1c2VzICI6IikuCi0gICAgV2l0aCBDWUdXSU4sIGl0IHVzZXMgIjoiLCBidXQgdGhhdCBtZWFucyB0aGF0IHBhdGhzIGxpa2UgIkM6L3BhdGgiCi0gICAgY2Fubm90IGJlIHBsYWNlZCBpbiB0aGUgQ1lHV0lOIHZlcnNpb24gIG9mIDx0dD5QQVRIPC90dD4gYW5kCi0gICAgaW5zdGVhZCBDWUdXSU4gdXNlcyBzb21ldGhpbmcgbGlrZSA8dHQ+L2N5Z2RyaXZlL2MvcGF0aDwvdHQ+Ci0gICAgd2hpY2ggQ1lHV0lOIHVuZGVyc3RhbmRzLCBidXQgb25seSBDWUdXSU4gdW5kZXJzdGFuZHMuCi0gICAgU28gYmUgY2FyZWZ1bCB3aXRoIHBhdGhzIG9uIFdpbmRvd3MuCi08L2Jsb2NrcXVvdGU+Ci0KLTwhLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tPgotCi08aDQ+PGEgbmFtZT0id2luZG93c19jaGVja2xpc3QiPkJhc2ljIFdpbmRvd3MgQ2hlY2sgTGlzdDwvYT48L2g0PgotCi08YmxvY2txdW90ZT4KLSAgICA8b2w+Ci0gICAgICAgIDxsaT4KLSAgICAgICAgICAgIEluc3RhbGwgdGhlCi0gICAgICAgICAgICA8YSBocmVmPSIjY3lnd2luIj5DWUdXSU4gcHJvZHVjdDwvYT4uIAotICAgICAgICA8L2xpPgotICAgICAgICA8bGk+Ci0gICAgICAgICAgICBJbnN0YWxsIHRoZSAKLSAgICAgICAgICAgIDxhIGhyZWY9IiNib290amRrIj5Cb290c3RyYXAgSkRLPC9hPiwgc2V0Ci0gICAgICAgICAgICA8dHQ+PGEgaHJlZj0iI0FMVF9CT09URElSIj5BTFRfQk9PVERJUjwvYT48L3R0Pi4KLSAgICAgICAgPC9saT4KLSAgICAgICAgPGxpPgotICAgICAgICAgICAgSW5zdGFsbCB0aGUKLSAgICAgICAgICAgIDxhIGhyZWY9IiNiaW5hcnlwbHVncyI+QmluYXJ5IFBsdWdzPC9hPiwgc2V0Ci0gICAgICAgICAgICA8dHQ+PGEgaHJlZj0iI0FMVF9CSU5BUllfUExVR1NfUEFUSCI+QUxUX0JJTkFSWV9QTFVHU19QQVRIPC9hPjwvdHQ+Li4KLSAgICAgICAgPC9saT4KLSAgICAgICAgPGxpPgotICAgICAgICAgICAgSW5zdGFsbCB0aGUKLSAgICAgICAgICAgIDxhIGhyZWY9IiNtc3ZjIj5NaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyAuTkVUIDIwMDMgUHJvZmVzc2lvbmFsPC9hPiBvciB0aGUgCi0gICAgICAgICAgICA8YSBocmVmPSIjbXNzZGsiPk1pY3Jvc29mdCBQbGF0Zm9ybSBTREs8L2E+LgotICAgICAgICA8L2xpPgotICAgICAgICA8bGk+Ci0gICAgICAgICAgICBTZXR1cCBhbGwgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciBjb21waWxlcnMgCi0gICAgICAgICAgICAoc2VlIDxhIGhyZWY9IiNtc3ZjIj5jb21waWxlcnM8L2E+KS4KLSAgICAgICAgPC9saT4KLSAgICAgICAgPGxpPgotICAgICAgICAgICAgSW5zdGFsbCAKLSAgICAgICAgICAgIDxhIGhyZWY9IiNkeHNkayI+TWljcm9zb2Z0IERpcmVjdFggU0RLPC9hPi4KLSAgICAgICAgPC9saT4KLSAgICA8L29sPgotPC9ibG9ja3F1b3RlPgotCi08IS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLT4KLTxociBub3NoYWRlPSJub3NoYWRlIiBzaXplPSIzIj4KLQotPGgzPjxhIG5hbWU9ImRlcGVuZGVuY2llcyI+QnVpbGQgRGVwZW5kZW5jaWVzPC9hPjwvaDM+Ci0KLTxibG9ja3F1b3RlPgotICAgIDxwPgotICAgIERlcGVuZGluZyBvbiB0aGUgcGxhdGZvcm0sIHRoZSAKLSAgICBPcGVuSkRLIAotICAgIGJ1aWxkIHByb2Nlc3MgaGFzIHNvbWUgYmFzaWMKLSAgICBkZXBlbmRlbmNpZXMgb24gY29tcG9uZW50cyBub3QgcGFydCBvZiB0aGUgCi0gICAgT3BlbkpESyAKLSAgICBzb3VyY2VzLgotICAgIFNvbWUgb2YgdGhlc2UgYXJlIHNwZWNpZmljIHRvIGEgcGxhdGZvcm0sIHNvbWUgZXZlbiBzcGVjaWZpYyB0bwotICAgIGFuIGFyY2hpdGVjdHVyZS4KLSAgICBFYWNoIGRlcGVuZGVuY3kgd2lsbCBoYXZlIGEgc2V0IG9mIEFMVCB2YXJpYWJsZXMgdGhhdCBjYW4gYmUgc2V0Ci0gICAgdG8gdGVsbCB0aGUgbWFrZWZpbGVzIHdoZXJlIHRvIGxvY2F0ZSB0aGUgY29tcG9uZW50LgotICAgIEluIG1vc3QgY2FzZXMgc2V0dGluZyB0aGVzZSBBTFQgdmFyaWFibGVzIG1heSBub3QgYmUgbmVjZXNzYXJ5Ci0gICAgYW5kIHRoZSBtYWtlZmlsZXMgd2lsbCBmaW5kIGRlZmF1bHRzIG9uIHRoZSBzeXN0ZW0gaW4gc3RhbmRhcmQKLSAgICBpbnN0YWxsIGxvY2F0aW9ucyBvciB0aHJvdWdoIGNvbXBvbmVudCBzcGVjaWZpYyB2YXJpYWJsZXMuCi0gICAgCi0gICAgPGg0PjxhIG5hbWU9ImJvb3RqZGsiPkJvb3RzdHJhcCBKREs8L2E+PC9oND4KLSAgICAKLSAgICA8YmxvY2txdW90ZT4KLSAgICAgICAgPHA+Ci0gICAgICAgIEFsbCAKLSAgICAgICAgT3BlbkpESyAKLSAgICAgICAgYnVpbGRzIHJlcXVpcmUgYWNjZXNzIHRvIHRoZSBwcmV2aW91c2x5IHJlbGVhc2VkIAotICAgICAgICBKREsgNiwgdGhpcyBpcyBvZnRlbiBjYWxsZWQgYSBib290c3RyYXAgSkRLLgotICAgICAgICBUaGUgSkRLIDYgYmluYXJpZXMgY2FuIGJlIGRvd25sb2FkZWQgZnJvbSBTdW4ncyAKLSAgICAgICAgPGEgaHJlZj0iaHR0cDovL2phdmEuc3VuLmNvbS9qYXZhc2UvMS42LjAvZG93bmxvYWQuaHRtbCI+SkRLIDYgZG93bmxvYWQgc2l0ZTwvYT4uCi0gICAgICAgIEZvciBidWlsZCBwZXJmb3JtYW5jZSByZWFzb25zCi0gICAgICAgIGlzIHZlcnkgaW1wb3J0YW50IHRoYXQgdGhpcyBib290c3RyYXAgSkRLIGJlIG1hZGUgYXZhaWxhYmxlIG9uIHRoZQotICAgICAgICBsb2NhbCBkaXNrIG9mIHRoZSBtYWNoaW5lIGRvaW5nIHRoZSBidWlsZC4KLSAgICAgICAgWW91IHNob3VsZCBhbHdheXMgc2V0IAotICAgICAgICA8dHQ+PGEgaHJlZj0iI0FMVF9CT09URElSIj5BTFRfQk9PVERJUjwvYT48L3R0PgotICAgICAgICB0byBwb2ludCB0byB0aGUgbG9jYXRpb24gb2YKLSAgICAgICAgdGhlIGJvb3RzdHJhcCBKREsgaW5zdGFsbGF0aW9uLCB0aGlzIGlzIHRoZSBkaXJlY3RvcnkgcGF0aG5hbWUKLSAgICAgICAgdGhhdCBjb250YWlucyBhIDx0dD5iaW4sIGxpYiwgYW5kIGluY2x1ZGU8L3R0PgotICAgICAgICBJdCdzIGFsc28gYSBnb29kIGlkZWEgdG8gYWxzbyBwbGFjZSBpdHMgPHR0PmJpbjwvdHQ+IGRpcmVjdG9yeQotICAgICAgICBpbiB0aGUgPHR0PlBBVEg8L3R0PiBlbnZpcm9ubWVudCB2YXJpYWJsZSwgYWx0aG91Z2ggaXQncwotICAgICAgICBub3QgcmVxdWlyZWQuCi0gICAgICAgIDxwPgotICAgICAgICA8c3Ryb25nPlNvbGFyaXM6PC9zdHJvbmc+Ci0gICAgICAgIFNvbWUgcHJlLWluc3RhbGxlZCBKREsgaW1hZ2VzIG1heSBiZSBhdmFpbGFibGUgdG8geW91IGluIHRoZQotICAgICAgICBkaXJlY3RvcnkgPHR0Pi91c3IvamRrL2luc3RhbmNlczwvdHQ+LgotICAgICAgICBJZiB5b3UgZG9uJ3Qgc2V0Ci0gICAgICAgIDx0dD48YSBocmVmPSIjQUxUX0JPT1RESVIiPkFMVF9CT09URElSPC9hPjwvdHQ+Ci0gICAgICAgIHRoZSBtYWtlZmlsZXMgd2lsbCBsb29rIGluIHRoYXQgbG9jYXRpb24gZm9yIGEgSkRLIGl0IGNhbiB1c2UuCi0gICAgPC9ibG9ja3F1b3RlPgotICAgIAotICAgIDxoND48YSBuYW1lPSJiaW5hcnlwbHVncyI+QmluYXJ5IFBsdWdzPC9hPjwvaDQ+Ci0gICAgCi0gICAgPGJsb2NrcXVvdGU+Ci0gICAgICAgIDxwPgotICAgICAgICBOb3QgYWxsIG9mIHRoZSBzb3VyY2UgY29kZSB0aGF0IG1ha2VzIHVwIHRoZSBKREsgaXMgYXZhaWxhYmxlCi0gICAgICAgIHVuZGVyIGFuIG9wZW4tc291cmNlIGxpY2Vuc2UuCi0gICAgICAgIEluIG9yZGVyIHRvIGJ1aWxkIGFuIE9wZW5KREsgYmluYXJ5IGZyb20gc291cmNlIGNvZGUsCi0gICAgICAgIHlvdSBtdXN0IGZpcnN0IGRvd25sb2FkIGFuZCBpbnN0YWxsIHRoZSBhcHByb3ByaWF0ZQotICAgICAgICBiaW5hcnkgcGx1ZyBidW5kbGVzIGZyb20gdGhlIE9wZW5KREsgRG93bmxvYWQgYXJlYS4KLSAgICAgICAgRHVyaW5nIHRoZSBPcGVuSkRLIGJ1aWxkIHByb2Nlc3MgdGhlc2UgImJpbmFyeSBwbHVncyIKLSAgICAgICAgZm9yIHRoZSBlbmN1bWJlcmVkIGNvbXBvbmVudHMgd2lsbCBiZSBjb3BpZWQgaW50byB5b3VyCi0gICAgICAgIHJlc3VsdGluZyBPcGVuSkRLIGJpbmFyeSBidWlsZCBpbWFnZS4KLSAgICAgICAgVGhlc2UgYmluYXJ5IHBsdWcgZmlsZXMgYXJlIG9ubHkgZm9yIHRoZSBwdXJwb3NlIG9mCi0gICAgICAgIGJ1aWxkaW5nIGFuIE9wZW5KREsgYmluYXJ5LgotICAgICAgICBEb3dubG9hZCB0aGUgQmluYXJ5IFBsdWdzIGJ5IHNlbGVjdGluZyB0aGUgPGI+RG93bmxvYWRzPC9iPgotICAgICAgICBsaW5rIGF0Ci0gICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9vcGVuamRrLmphdmEubmV0LyI+dGhlIE9wZW5KREsgc2l0ZTwvYT4sCi0gICAgICAgIGluc3RhbGwgdGhlIGJ1bmRsZSwKLSAgICAgICAgYW5kIG1ha2Ugc3VyZSB5b3Ugc2V0Ci0gICAgICAgIDx0dD48YSBocmVmPSIjQUxUX0JJTkFSWV9QTFVHU19QQVRIIj5BTFRfQklOQVJZX1BMVUdTX1BBVEg8L2E+PC90dD4KLSAgICAgICAgdG8gdGhlIHJvb3Qgb2YgdGhpcyBpbnN0YWxsYXRpb24uCi0gICAgPC9ibG9ja3F1b3RlPgotICAgIAotICAgIDxoND48YSBuYW1lPSJjYWNlcnRzIj5DZXJ0aWZpY2F0ZSBBdXRob3JpdHkgRmlsZSAoY2FjZXJ0KTwvYT48L2g0PgotICAgIAotICAgIDxibG9ja3F1b3RlPgotICAgICAgICA8cD4KLSAgICAgICAgU2VlIDxhIGhyZWY9Imh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ0FjZXJ0Ij4KLSAgICAgICAgd3d3Lndpa2lwZWRpYS5vcmcvd2lraS9DQWNlcnQ8L2E+Ci0gICAgICAgIGZvciBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgKENBKS4KLSAgICAgICAgQSBjZXJ0aWZpY2F0ZXMgZmlsZSBuYW1lZCAiY2FjZXJ0cyIKLSAgICAgICAgcmVwcmVzZW50cyBhIHN5c3RlbS13aWRlIGtleXN0b3JlIHdpdGggQ0EgY2VydGlmaWNhdGVzLiAKLSAgICAgICAgSW4gSkRLIGFuZCBKUkUKLSAgICAgICAgYmluYXJ5IGJ1bmRsZXMsIHRoZSAiY2FjZXJ0cyIgZmlsZSBjb250YWlucyByb290IENBIGNlcnRpZmljYXRlcyBmcm9tCi0gICAgICAgIHNldmVyYWwgcHVibGljIENBcyAoZS5nLiwgVmVyaVNpZ24sIFRoYXd0ZSwgYW5kIEJhbHRpbW9yZSkuCi0gICAgICAgIFRoZSBzb3VyY2UgY29udGFpbiBhIGNhY2VydHMgZmlsZQotICAgICAgICB3aXRob3V0IENBIHJvb3QgY2VydGlmaWNhdGVzLiAKLSAgICAgICAgRm9ybWFsIEpESyBidWlsZGVycyB3aWxsIG5lZWQgdG8gc2VjdXJlCi0gICAgICAgIHBlcm1pc3Npb24gZnJvbSBlYWNoIHB1YmxpYyBDQSBhbmQgaW5jbHVkZSB0aGUgY2VydGlmaWNhdGVzIGludG8gdGhlaXIKLSAgICAgICAgb3duIGN1c3RvbSBjYWNlcnRzIGZpbGUuIAotICAgICAgICBGYWlsdXJlIHRvIHByb3ZpZGUgYSBwb3B1bGF0ZWQgY2FjZXJ0cyBmaWxlCi0gICAgICAgIHdpbGwgcmVzdWx0IGluIHZlcmlmaWNhdGlvbiBlcnJvcnMgb2YgYSBjZXJ0aWZpY2F0ZSBjaGFpbiBkdXJpbmcgcnVudGltZS4KLSAgICAgICAgVGhlIHZhcmlhYmxlIAotICAgICAgICA8dHQ+PGEgaHJlZj0iI0FMVF9DQUNFUlRTX0ZJTEUiPkFMVF9DQUNFUlRTX0ZJTEU8L2E+PC90dD4KLSAgICAgICAgY2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlCi0gICAgICAgIGNhY2VydHMgZmlsZSB0aGF0IHdpbGwgZ2V0IHBsYWNlZCBpbiB5b3VyIGJ1aWxkLgotICAgICAgICBCeSBkZWZhdWx0IGFuIGVtcHR5IGNhY2VydHMgZmlsZSBpcyBwcm92aWRlZCBhbmQgdGhhdCBzaG91bGQgYmUKLSAgICAgICAgZmluZSBmb3IgbW9zdCBKREsgZGV2ZWxvcGVycy4KLSAgICA8L2Jsb2NrcXVvdGU+Ci0gICAgCi0gICAgPGg0PjxhIG5hbWU9ImNvbXBpbGVycyI+Q29tcGlsZXJzPC9hPjwvaDQ+Ci0gICAgCi0gICAgPGJsb2NrcXVvdGU+Ci0gICAgICAgIAotICAgICAgICA8YSBuYW1lPSJnY2MiPgotICAgICAgICAgICAgPHN0cm9uZz5MaW51eCBnY2MvYmludXRpbHM8L3N0cm9uZz4KLSAgICAgICAgPC9hPgotICAgICAgICAKLSAgICAgICAgPGJsb2NrcXVvdGU+Ci0gICAgICAgICAgICA8cD4KLSAgICAgICAgICAgIFRoZSBHTlUgZ2NjIGNvbXBpbGVyIHZlcnNpb24gc2hvdWxkIGJlIDMuMi4yIG9yIG5ld2VyLgotICAgICAgICAgICAgVGhlIGJpbnV0aWxzIHBhY2thZ2Ugc2hvdWxkIGJlIDIuMTEuOTMuMC4yLTExIG9yIG5ld2VyLgotICAgICAgICAgICAgVGhlIGNvbXBpbGVyIHVzZWQgc2hvdWxkIGJlIHRoZSBkZWZhdWx0IGNvbXBpbGVyIGluc3RhbGxlZAotICAgICAgICAgICAgaW4gPHR0Pi91c3IvYmluPC90dD4uCi0gICAgICAgIDwvYmxvY2txdW90ZT4KLSAgICAgICAgCi0gICAgICAgIDxzdHJvbmc+PGEgbmFtZT0ic3R1ZGlvIj5Tb2xhcmlzOiBTdW4gU3R1ZGlvPC9hPjwvc3Ryb25nPgotICAgICAgICAKLSAgICAgICAgPGJsb2NrcXVvdGU+Ci0gICAgICAgICAgICA8cD4KLSAgICAgICAgICAgIEF0IGEgbWluaW11bSwgdGhlCi0gICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vZGV2ZWxvcGVycy5zdW4uY29tL3N1bnN0dWRpby9pbmRleC5qc3AiPgotICAgICAgICAgICAgU3VuIFN0dWRpbyAxMSBDb21waWxlcnM8L2E+Ci0gICAgICAgICAgICAoY29udGFpbmluZyB2ZXJzaW9uIDUuOCBvZiB0aGUgQyBhbmQgQysrIGNvbXBpbGVycykgaXMgcmVxdWlyZWQsCi0gICAgICAgICAgICB3aXRoIHBhdGNoZXMgZnJvbSB0aGUKLSAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9zdW5zb2x2ZS5zdW4uY29tL3B1Yi1jZ2kvc2hvdy5wbD90YXJnZXQ9cGF0Y2hlcy9wYXRjaC1hY2Nlc3MiPgotICAgICAgICAgICAgU3VuU29sdmUgd2ViIHNpdGU8L2E+LgotICAgICAgICAgICAgPHA+IAotICAgICAgICAgICAgU2V0IAotICAgICAgICAgICAgPGEgaHJlZj0iI0FMVF9DT01QSUxFUl9QQVRIIj48dHQ+QUxUX0NPTVBJTEVSX1BBVEg8L3R0PjwvYT4KLSAgICAgICAgICAgIHRvIHBvaW50IHRvIHRoZSBsb2NhdGlvbiBvZgotICAgICAgICAgICAgdGhlIGNvbXBpbGVyIGJpbmFyaWVzLCBhbmQgcGxhY2UgdGhpcyBsb2NhdGlvbiBpbiB0aGUgPHR0PlBBVEg8L3R0Pi4KLSAgICAgICAgICAgIDxwPgotICAgICAgICAgICAgVGhlIFN1biBTdHVkaW8gRXhwcmVzcyBjb21waWxlcnMgYXQ6Ci0gICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vZGV2ZWxvcGVycy5zdW4uY29tL3N1bnN0dWRpby9kb3dubG9hZHMvZXhwcmVzcy5qc3AiPgotICAgICAgICAgICAgU3VuIFN0dWRpbyBFeHByZXNzIERvd25sb2FkIHNpdGU8L2E+Ci0gICAgICAgICAgICBhcmUgYWxzbyBhbiBvcHRpb24sIGFsdGhvdWdoIHRoZXNlIGNvbXBpbGVycyBoYXZlIG5vdAotICAgICAgICAgICAgYmVlbiBleHRlbnNpdmVseSB1c2VkIHlldC4KLSAgICAgICAgPC9ibG9ja3F1b3RlPgotICAgICAgICAKLSAgICAgICAgPGEgbmFtZT0ibXN2YyI+Ci0gICAgICAgICAgICA8c3Ryb25nPldpbmRvd3MgaTU4NjogTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gLk5FVCAyMDAzIFByb2Zlc3Npb25hbDwvc3Ryb25nPgotICAgICAgICA8L2E+Ci0gICAgICAgIAotICAgICAgICA8YmxvY2txdW90ZT4KLSAgICAgICAgICAgIDxwPgotICAgICAgICAgICAgVGhlIDMyLWJpdCAKLSAgICAgICAgICAgIE9wZW5KREsKLSAgICAgICAgICAgIFdpbmRvd3MgYnVpbGQKLSAgICAgICAgICAgIHJlcXVpcmVzIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIC5ORVQgMjAwMyAoVlMyMDAzKSBQcm9mZXNzaW9uYWwKLSAgICAgICAgICAgIEVkaXRpb24gY29tcGlsZXIuIAotICAgICAgICAgICAgVGhlIGNvbXBpbGVyIGFuZCBvdGhlciB0b29scyBhcmUgZXhwZWN0ZWQgdG8gcmVzaWRlCi0gICAgICAgICAgICBpbiB0aGUgbG9jYXRpb24gZGVmaW5lZCBieSB0aGUgdmFyaWFibGUgPHR0PlZTNzFDT01OVE9PTFM8L3R0PiB3aGljaAotICAgICAgICAgICAgaXMgc2V0IGJ5IHRoZSBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyAuTkVUIGluc3RhbGxlci4KLSAgICAgICAgICAgIDxwPiAKLSAgICAgICAgICAgIE9uY2UgdGhlIGNvbXBpbGVyIGlzIGluc3RhbGxlZCwgCi0gICAgICAgICAgICBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdSBydW4gPHR0PlZDVkFSUzMyLkJBVDwvdHQ+IAotICAgICAgICAgICAgdG8gc2V0IHRoZSBjb21waWxlciBlbnZpcm9ubWVudCB2YXJpYWJsZXMKLSAgICAgICAgICAgIDx0dD5NU1ZDRElSPC90dD4sIAotICAgICAgICAgICAgPHR0PklOQ0xVREU8L3R0PiwKLSAgICAgICAgICAgIDx0dD5MSUI8L3R0PiwgYW5kCi0gICAgICAgICAgICA8dHQ+UEFUSDwvdHQ+IAotICAgICAgICAgICAgcHJpb3IgdG8gYnVpbGRpbmcgdGhlIAotICAgICAgICAgICAgT3BlbkpESy4KLSAgICAgICAgICAgIFRoZSBhYm92ZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgPGI+TVVTVDwvYj4gYmUgc2V0LgotICAgICAgICAgICAgPHA+Ci0gICAgICAgICAgICBUaGUgTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gLk5FVCAyMDA1IChWUzIwMDUpIGNvbXBpbGVyCi0gICAgICAgICAgICB3aWxsIG5vdCB3b3JrIGF0IHRoaXMgdGltZSBkdWUgdG8gdGhlIG5ldyBydW50aW1lIGRsbAotICAgICAgICAgICAgYW5kIHRoZSBtYW5pZmVzdCByZXF1aXJlbWVudHMuCi0gICAgICAgIDwvYmxvY2txdW90ZT4KLSAgICAgICAgCi0gICAgICAgIDxhIG5hbWU9Im1zc2RrIj4KLSAgICAgICAgICAgIDxzdHJvbmc+V2luZG93cyBYNjQ6IE1pY3Jvc29mdCBQbGF0Zm9ybSBTREsgQXByaWwgMjAwNTwvc3Ryb25nPgotICAgICAgICA8L2E+Ci0gICAgICAgIAotICAgICAgICA8YmxvY2txdW90ZT4KLSAgICAgICAgICAgIDxwPgotICAgICAgICAgICAgT24gPGI+WDY0PC9iPiwKLSAgICAgICAgICAgIHRoZSBNaWNyb3NvZnQgUGxhdGZvcm0gU29mdHdhcmUKLSAgICAgICAgICAgIERldmVsb3BtZW50IEtpdCAoU0RLKSwgQXByaWwgMjAwNSBFZGl0aW9uIGNvbXBpbGVyLCBpcyByZXF1aXJlZCBmb3IKLSAgICAgICAgICAgIGJ1aWxkaW5nIHRoZSAKLSAgICAgICAgICAgIE9wZW5KREsKLSAgICAgICAgICAgIGJlY2F1c2UgaXQgY29udGFpbnMgdGhlIEMvQysrIGNvbXBpbGVyLiAKLSAgICAgICAgICAgIFlvdSB3aWxsIG5lZWQgdG8gbWluaW1hbGx5IGluc3RhbGwgdGhlIENvcmUgU0RLIGFuZAotICAgICAgICAgICAgdGhlIE1EQUMgU0RLIGZlYXR1cmVzIG9mIHRoaXMgY29tcGlsZXIuCi0gICAgICAgICAgICA8cD4KLSAgICAgICAgICAgIE9uY2UgdGhlIFBsYXRmb3JtIFNESyBpcyBpbnN0YWxsZWQsCi0gICAgICAgICAgICBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdSBydW4gPHR0PlNldEVudi5DbWQgL1g2NDwvdHQ+IAotICAgICAgICAgICAgdG8gc2V0IHRoZSBjb21waWxlciBlbnZpcm9ubWVudCB2YXJpYWJsZXMKLSAgICAgICAgICAgIDx0dD5NU1NESzwvdHQ+LCAKLSAgICAgICAgICAgIDx0dD5NU1RPT0xTPC90dD4sCi0gICAgICAgICAgICA8dHQ+SU5DTFVERTwvdHQ+LAotICAgICAgICAgICAgPHR0PkxJQjwvdHQ+LCBhbmQKLSAgICAgICAgICAgIDx0dD5QQVRIPC90dD4gCi0gICAgICAgICAgICBwcmlvciB0byBidWlsZGluZyB0aGUgCi0gICAgICAgICAgICBPcGVuSkRLLgotICAgICAgICAgICAgVGhlIGFib3ZlIGVudmlyb25tZW50IHZhcmlhYmxlcyA8Yj5NVVNUPC9iPiBiZSBzZXQuCi0gICAgICAgICAgICA8cD4KLSAgICAgICAgICAgIE5vdGUgdGhhdCB0aGlzIGNvbXBpbGVyIG1heSBzYXkgaXQncyB2ZXJzaW9uIGlzIGEKLSAgICAgICAgICAgIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIC5ORVQgMjAwNSAoVlMyMDA1KSwgYnV0IGJlIGNhcmVmdWwsCi0gICAgICAgICAgICBpdCB3aWxsIG5vdCBtYXRjaCB0aGUgb2ZmaWNpYWwgVlMyMDA1IHByb2R1Y3QuCi0gICAgICAgICAgICBUaGlzIFBsYXRmb3JtIFNESyBjb21waWxlciBpcyBvbmx5IHVzZWQgb24gWDY0IGJ1aWxkcy4KLSAgICAgICAgPC9ibG9ja3F1b3RlPgotICAgICAgICAKLSAgICA8L2Jsb2NrcXVvdGU+Ci0gICAgCi0gICAgPGg0PjxhIG5hbWU9ImN1cHMiPkNvbW1vbiBVTklYIFByaW50aW5nIFN5c3RlbSAoQ1VQUykgSGVhZGVycyAoU29sYXJpcyAmYW1wOyBMaW51eCk8L2E+PC9oND4KLSAgICAKLSAgICA8YmxvY2txdW90ZT4KLSAgICAgICAgPHA+Ci0gICAgICAgIDxzdHJvbmc+U29sYXJpczo8L3N0cm9uZz4KLSAgICAgICAgQ1VQUyBoZWFkZXIgZmlsZXMgYXJlIHJlcXVpcmVkIGZvciBidWlsZGluZyB0aGUgCi0gICAgICAgIE9wZW5KREsgb24gU29sYXJpcy4KLSAgICAgICAgVGhlIFNvbGFyaXMgaGVhZGVyIGZpbGVzIGNhbiBiZSBvYnRhaW5lZCBieSBpbnN0YWxsaW5nIAotICAgICAgICB0aGUgcGFja2FnZSA8c3Ryb25nPlNGV2N1cHM8L3N0cm9uZz4gZnJvbSB0aGUgU29sYXJpcyBTb2Z0d2FyZQotICAgICAgICBDb21wYW5pb24gQ0QvRFZELCB0aGVzZSBvZnRlbiB3aWxsIGJlIGluc3RhbGxlZCBpbnRvIAotICAgICAgICA8dHQ+L29wdC9zZncvY3VwczwvdHQ+LgotICAgICAgICA8cD4KLSAgICAgICAgPHN0cm9uZz5MaW51eDo8L3N0cm9uZz4KLSAgICAgICAgQ1VQUyBoZWFkZXIgZmlsZXMgYXJlIHJlcXVpcmVkIGZvciBidWlsZGluZyB0aGUgCi0gICAgICAgIE9wZW5KREsgb24gTGludXguCi0gICAgICAgIFRoZSBMaW51eCBoZWFkZXIgZmlsZXMgYXJlIHVzdWFsbHkgYXZhaWxhYmxlIGZyb20gYSAiY3VwcyIKLSAgICAgICAgZGV2ZWxvcG1lbnQgcGFja2FnZSwgaXQncyByZWNvbW1lbmRlZCB0aGF0IHlvdSB0cnkgYW5kIHVzZQotICAgICAgICB0aGUgcGFja2FnZSBwcm92aWRlZCBieSB0aGUgcGFydGljdWxhciB2ZXJzaW9uIG9mIExpbnV4IHRoYXQKLSAgICAgICAgeW91IGFyZSB1c2luZy4KLSAgICAgICAgPHA+Ci0gICAgICAgIFRoZSBDVVBTIGhlYWRlciBmaWxlcyBjYW4gYWx3YXlzIGJlIGRvd25sb2FkZWQgZnJvbSAKLSAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5jdXBzLm9yZyI+d3d3LmN1cHMub3JnPC9hPi4KLSAgICAgICAgVGhlIHZhcmlhYmxlIAotICAgICAgICA8dHQ+PGEgaHJlZj0iI0FMVF9DVVBTX0hFQURFUlNfUEFUSCI+QUxUX0NVUFNfSEVBREVSU19QQVRIPC9hPjwvdHQ+Ci0gICAgICAgIGNhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZQotICAgICAgICBDVVBTIEhlYWRlciBmaWxlcy4KLSAgICA8L2Jsb2NrcXVvdGU+Ci0gICAgCi0gICAgPGg0PjxhIG5hbWU9ImZyZWV0eXBlIj5GcmVlVHlwZSAyPC9hPjwvaDQ+Ci0KLSAgICA8YmxvY2txdW90ZT4KLSAgICAgICAgPHA+Ci0gICAgICAgIFZlcnNpb24gMi4zIG9yIG5ld2VyIG9mIEZyZWVUeXBlIGlzIHJlcXVpcmVkIGZvciBidWlsZGluZyB0aGUgT3BlbkpESy4KLSAgICAgICAgT24gVW5peCBzeXN0ZW1zIHJlcXVpcmVkIGZpbGVzIGNhbiBiZSBhdmFpbGFibGUgYXMgcGFydCBvZiB5b3VyCi0gICAgICAgIGRpc3RyaWJ1dGlvbiAod2hpbGUgeW91IHN0aWxsIG1heSBuZWVkIHRvIHVwZ3JhZGUgdGhlbSkuCi0gICAgICAgIE5vdGUgdGhhdCB5b3UgbmVlZCBkZXZlbG9wbWVudCB2ZXJzaW9uIG9mIHBhY2thZ2UgdGhhdCAKLSAgICAgICAgaW5jbHVkZXMgYm90aCBGcmVlVHlwZSBsaWJyYXJ5IGFuZCBoZWFkZXIgZmlsZXMuCi0gICAgICAgIDwvcD4KLSAgICAgICAgPHA+Ci0gICAgICAgIFlvdSBjYW4gYWx3YXlzIGRvd25sb2FkIGxhdGVzdCBGcmVlVHlwZSB2ZXJzaW9uIGZyb20gdGhlCi0gICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuZnJlZXR5cGUub3JnIj5GcmVlVHlwZSB3ZWJzaXRlPC9hPi4KLSAgICAgICAgPC9wPgotICAgICAgICA8cD4KLSAgICAgICAgTWFrZWZpbGVzIHdpbGwgdHJ5IHRvIHBpY2sgRnJlZVR5cGUgZnJvbSAvdXNyL2xpYiBhbmQgL3Vzci9pbmNsdWRlLgotICAgICAgICBJbiBjYXNlIGl0IGlzIGluc3RhbGxlZCBlbHNld2hlcmUgeW91IHdpbGwgbmVlZCB0byBzZXQgZW52aXJvbm1lbnQKLSAgICAgICAgdmFyaWFibGVzIAotICAgICAgICA8dHQ+PGEgaHJlZj0iI0FMVF9GUkVFVFlQRV9MSUJfUEFUSCI+QUxUX0ZSRUVUWVBFX0xJQl9QQVRIPC9hPjwvdHQ+Ci0gICAgICAgIGFuZCAKLSAgICAgICAgPHR0PjxhIGhyZWY9IiNBTFRfRlJFRVRZUEVfSEVBREVSU19QQVRIIj5BTFRfRlJFRVRZUEVfSEVBREVSU19QQVRIPC9hPjwvdHQ+Ci0gICAgICAgIHRvIHJlZmVyIHRvIHBsYWNlIHdoZXJlIGxpYnJhcnkgYW5kIGhlYWRlciBmaWxlcyBhcmUgaW5zdGFsbGVkLgotICAgICAgICA8L3A+Ci0gICAgPC9ibG9ja3F1b3RlPiAgICAKLQotICAgIDxoND48YSBuYW1lPSJhbHNhIj5BZHZhbmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmUgKEFMU0EpIChMaW51eCBvbmx5KTwvYT48L2g0PgotICAgIAotICAgIDxibG9ja3F1b3RlPgotICAgICAgICA8cD4KLSAgICAgICAgPHN0cm9uZz5MaW51eCBvbmx5Ojwvc3Ryb25nPgotICAgICAgICBWZXJzaW9uIDAuOS4xIG9yIG5ld2VyIG9mIHRoZSBBTFNBIGZpbGVzIGFyZQotICAgICAgICByZXF1aXJlZCBmb3IgYnVpbGRpbmcgdGhlIAotICAgICAgICBPcGVuSkRLIG9uIExpbnV4LgotICAgICAgICBUaGVzZSBMaW51eCBmaWxlcyBhcmUgdXN1YWxseSBhdmFpbGFibGUgZnJvbSBhbiAiYWxzYSIKLSAgICAgICAgb2YgImxpYmFzb3VuZCIKLSAgICAgICAgZGV2ZWxvcG1lbnQgcGFja2FnZSwgaXQncyByZWNvbW1lbmRlZCB0aGF0IHlvdSB0cnkgYW5kIHVzZQotICAgICAgICB0aGUgcGFja2FnZSBwcm92aWRlZCBieSB0aGUgcGFydGljdWxhciB2ZXJzaW9uIG9mIExpbnV4IHRoYXQKLSAgICAgICAgeW91IGFyZSB1c2luZy4KLSAgICAgICAgVGhlIG1ha2VmaWxlcyB3aWxsIGNoZWNrIHRoaXMgZW1pdCBhIHNhbml0eSBlcnJvciBpZiBpdCBpcwotICAgICAgICBtaXNzaW5nIG9yIHRoZSB3cm9uZyB2ZXJzaW9uLgotICAgICAgICBBcyBhIGxhc3QgcmVzb3J0IHlvdSBjYW4gZ28gdG8gdGhlCi0gICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYWxzYS1wcm9qZWN0Lm9yZyIgdGFyZ2V0PSJfYmxhbmsiPgotICAgICAgICBBZHZhbmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmUgU2l0ZTwvYT4uCi0gICAgPC9ibG9ja3F1b3RlPgotICAgIAotICAgIDxoND5XaW5kb3dzIFNwZWNpZmljIERlcGVuZGVuY2llczwvaDQ+Ci0gICAgCi0gICAgPGJsb2NrcXVvdGU+Ci0gICAgICAgIAotICAgICAgICA8c3Ryb25nPlVuaXggQ29tbWFuZCBUb29scyAoPGEgbmFtZT0iY3lnd2luIj5DWUdXSU48L2E+KTwvc3Ryb25nPgotICAgICAgICAKLSAgICAgICAgPGJsb2NrcXVvdGU+IAotICAgICAgICAgICAgPHA+Ci0gICAgICAgICAgICBUaGUgCi0gICAgICAgICAgICBPcGVuSkRLCi0gICAgICAgICAgICByZXF1aXJlcyBhY2Nlc3MgdG8gYSBzZXQgb2YgdW5peCBjb21tYW5kIHRvb2xzCi0gICAgICAgICAgICBvbiBXaW5kb3dzIHdoaWNoIGNhbiBiZSBzdXBwbGllZCBieSAKLSAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuY3lnd2luLmNvbSI+Q1lHV0lOPC9hPi4gCi0gICAgICAgICAgICA8cD4KLSAgICAgICAgICAgIFRoZSAKLSAgICAgICAgICAgIE9wZW5KREsgCi0gICAgICAgICAgICBidWlsZAotICAgICAgICAgICAgcmVxdWlyZXMgQ1lHV0lOIHZlcnNpb24gMS41LjEyIG9yIG5ld2VyLiAKLSAgICAgICAgICAgIEluZm9ybWF0aW9uIGFib3V0IENZR1dJTiBjYW4KLSAgICAgICAgICAgIGJlIG9idGFpbmVkIGZyb20gdGhlIENZR1dJTiB3ZWJzaXRlIGF0IAotICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5jeWd3aW4uY29tIj53d3cuY3lnd2luLmNvbTwvYT4uIAotICAgICAgICAgICAgPHA+Ci0gICAgICAgICAgICBCeSBkZWZhdWx0IENZR1dJTiBkb2Vzbid0IGluc3RhbGwgYWxsIHRoZSB0b29scyByZXF1aXJlZCBmb3IgYnVpbGRpbmcKLSAgICAgICAgICAgIHRoZSBPcGVuSkRLLgotICAgICAgICAgICAgQWxvbmcgd2l0aCB0aGUgZGVmYXVsdCBpbnN0YWxsYXRpb24sIHlvdSBuZWVkIHRvIGluc3RhbGwKLSAgICAgICAgICAgIHRoZSBmb2xsb3dpbmcgdG9vbHMuCi0gICAgICAgICAgICA8YmxvY2txdW90ZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgYm9yZGVyPSIxIj4KLSAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5CaW5hcnkgTmFtZTwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlBhY2thZ2U8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5EZXNjcmlwdGlvbjwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgotICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPmFyLmV4ZTwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPkRldmVsPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+YmludXRpbHM6IFRoZSBHTlUgYXNzZW1ibGVyLCBsaW5rZXIgYW5kIGJpbmFyeQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWxpdGllczwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5tYWtlLmV4ZTwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPkRldmVsPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+bWFrZTogVGhlIEdOVSB2ZXJzaW9uIG9mIHRoZSAnbWFrZScgdXRpbGl0eTwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5tNC5leGU8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5JbnRlcnByZXRlcnM8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5tNDogR05VIGltcGxlbWVudGF0aW9uIG9mIHRoZSB0cmFkaXRpb25hbCBVbml4IG1hY3JvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc29yPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPmNwaW8uZXhlPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+VXRpbHM8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5jcGlvOiBBIHByb2dyYW0gdG8gbWFuYWdlIGFyY2hpdmVzIG9mIGZpbGVzPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPmZpbGUuZXhlPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+VXRpbHM8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5maWxlOiBEZXRlcm1pbmVzIGZpbGUgdHlwZSB1c2luZyAnbWFnaWMnIG51bWJlcnM8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgPC9ibG9ja3F1b3RlPgotICAgICAgICA8L2Jsb2NrcXVvdGU+Ci0gICAgICAgIAotICAgICAgICA8YSBuYW1lPSJkeHNkayI+Ci0gICAgICAgICAgICA8c3Ryb25nPk1pY3Jvc29mdCBEaXJlY3RYIDkuMCBTREsgaGVhZGVyIGZpbGVzIGFuZCBsaWJyYXJpZXM8L3N0cm9uZz4KLSAgICAgICAgPC9hPgotICAgICAgICAKLSAgICAgICAgPGJsb2NrcXVvdGU+Ci0gICAgICAgICAgICA8cD4KLSAgICAgICAgICAgIE1pY3Jvc29mdCBEaXJlY3RYIDkuMCBTREsgKFN1bW1lciAyMDA0KQotICAgICAgICAgICAgaGVhZGVycyBhcmUgcmVxdWlyZWQgZm9yIGJ1aWxkaW5nCi0gICAgICAgICAgICBPcGVuSkRLLgotICAgICAgICAgICAgVGhpcyBTREsgY2FuIGJlIGRvd25sb2FkZWQgZnJvbSAKLSAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9kb3dubG9hZHMvZGV0YWlscy5hc3B4P0ZhbWlseUlkPUZEMDQ0QTQyLTk5MTItNDJBMy05QTlFLUQ4NTcxOTlGODg4RSZhbXA7ZGlzcGxheWxhbmc9ZW4iPgotICAgICAgICAgICAgTWljcm9zb2Z0IERpcmVjdFggOS4wIFNESyAoU3VtbWVyIDIwMDQpPC9hPi4KLSAgICAgICAgICAgIElmIHRoZSBsaW5rIGFib3ZlIGJlY29tZXMgb2Jzb2xldGUsIHRoZSBTREsgY2FuIGJlIGZvdW5kIGZyb20gCi0gICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vZG93bmxvYWQubWljcm9zb2Z0LmNvbSI+dGhlIE1pY3Jvc29mdCBEb3dubG9hZCBTaXRlPC9hPgotICAgICAgICAgICAgKHNlYXJjaCB3aXRoICJEaXJlY3RYIDkuMCBTREsgVXBkYXRlIFN1bW1lciAyMDA0IikuIAotICAgICAgICAgICAgVGhlIGxvY2F0aW9uIG9mIHRoaXMgU0RLIGNhbiBiZSBzZXQgd2l0aCAKLSAgICAgICAgICAgIDx0dD48YSBocmVmPSIjQUxUX0RYU0RLX1BBVEgiPkFMVF9EWFNES19QQVRIPC9hPjwvdHQ+Ci0gICAgICAgICAgICBidXQgaXQncyBub3JtYWxseSBmb3VuZCB2aWEgdGhlIERpcmVjdFggZW52aXJvbm1lbnQgdmFyaWFibGUKLSAgICAgICAgICAgIDx0dD5EWFNES19ESVI8L3R0Pi4KLSAgICAgICAgPC9ibG9ja3F1b3RlPgotICAgICAgICAKLSAgICAgICAgPGEgbmFtZT0ibXN2Y3J0Ij4KLSAgICAgICAgICAgIDxzdHJvbmc+PHR0Pk1TVkNSVC5ETEw8L3R0Pjwvc3Ryb25nPgotICAgICAgICA8L2E+Ci0gICAgICAgIAotICAgICAgICA8YmxvY2txdW90ZT4gCi0gICAgICAgICAgICA8cD4KLSAgICAgICAgICAgIDxzdHJvbmc+aTU4NiBvbmx5Ojwvc3Ryb25nPgotICAgICAgICAgICAgVGhlIAotICAgICAgICAgICAgT3BlbkpESwotICAgICAgICAgICAgMzJiaXQgYnVpbGQgcmVxdWlyZXMKLSAgICAgICAgICAgIGFjY2VzcyB0byA8dHQ+TVNWQ1JULkRMTDwvdHQ+IAotICAgICAgICAgICAgdmVyc2lvbiA2LjAwLjgzMzcuMCBvciBuZXdlci4KLSAgICAgICAgICAgIElmIHRoZSA8dHQ+TVNWQ1JULkRMTDwvdHQ+IGlzIG5vdCBpbnN0YWxsZWQgaW4gCi0gICAgICAgICAgICB0aGUgc3lzdGVtMzIgZGlyZWN0b3J5IHNldCB0aGUgCi0gICAgICAgICAgICA8YSBocmVmPSIjQUxUX01TVkNSVF9ETExfUEFUSCI+PHR0PkFMVF9NU1ZDUlRfRExMX1BBVEg8L3R0PjwvYT4KLSAgICAgICAgICAgIHZhcmlhYmxlIHRvIHRoZSBsb2NhdGlvbi4KLSAgICAgICAgICAgIDxwPiAKLSAgICAgICAgICAgIDxzdHJvbmc+WDY0IG9ubHk6PC9zdHJvbmc+Ci0gICAgICAgICAgICBUaGUgT3BlbkpESyA2NGJpdCBidWlsZCByZXF1aXJlcyBhY2Nlc3MgdG8KLSAgICAgICAgICAgIDx0dD5NU1ZDUlQuRExMPC90dD4gdmVyc2lvbiA3LjAuMzc5MC4wIG9yIG5ld2VyLCB3aGljaCBpcwotICAgICAgICAgICAgdXN1YWxseSBzdXBwbGllZCBieSB0aGUKLSAgICAgICAgICAgIDxhIGhyZWY9IiNtc3NkayI+UGxhdGZvcm0gU0RLPC9hPi4KLSAgICAgICAgICAgIElmIGl0IGlzIG5vdCBhdmFpbGFibGUgZnJvbSB0aGUgUGxhdGZvcm0gU0RLLAotICAgICAgICAgICAgc2V0IHRoZSAKLSAgICAgICAgICAgIDxhIGhyZWY9IiNBTFRfTVNWQ1JUX0RMTF9QQVRIIj48dHQ+QUxUX01TVkNSVF9ETExfUEFUSDwvdHQ+PC9hPgotICAgICAgICAgICAgdmFyaWFibGUgdG8gdGhlIGxvY2F0aW9uLgotICAgICAgICA8L2Jsb2NrcXVvdGU+Ci0gICAgICAgIAotICAgICAgICA8YSBuYW1lPSJtc3ZjcjcxIj4KLSAgICAgICAgICAgIDxzdHJvbmc+PHR0Pk1TVkNSNzEuRExMPC90dD48L3N0cm9uZz4KLSAgICAgICAgPC9hPgotICAgICAgICAKLSAgICAgICAgPGJsb2NrcXVvdGU+Ci0gICAgICAgICAgICA8cD4KLSAgICAgICAgICAgIDxzdHJvbmc+aTU4NiBvbmx5Ojwvc3Ryb25nPgotICAgICAgICAgICAgVGhlIAotICAgICAgICAgICAgT3BlbkpESwotICAgICAgICAgICAgYnVpbGQgcmVxdWlyZXMgYWNjZXNzIHRvIAotICAgICAgICAgICAgTVNWQ1I3MS5ETEwgdmVyc2lvbiA3LjEwLjMwNTIuNCBvciBuZXdlciB3aGljaCBzaG91bGQgYmUKLSAgICAgICAgICAgIHN1cHBsaWVkIGJ5IHRoZQotICAgICAgICAgICAgPGEgaHJlZj0iI21zdmMiPlZpc3VhbCBTdHVkaW8gcHJvZHVjdDwvYT4KLSAgICAgICAgICAgIElmIHRoZSA8dHQ+TVNWQ1I3MS5ETEw8L3R0PiBpcyBub3QgYXZhaWxhYmxlIGZyb20gdGhlCi0gICAgICAgICAgICBWaXN1YWwgU3R1ZGlvIHByb2R1Y3QKLSAgICAgICAgICAgIHNldCB0aGUgCi0gICAgICAgICAgICA8YSBocmVmPSIjQUxUX01TVkNSNzFfRExMX1BBVEgiPjx0dD5BTFRfTVNWQ1I3MV9ETExfUEFUSDwvdHQ+PC9hPgotICAgICAgICAgICAgdmFyaWFibGUgdG8gdGhlIGxvY2F0aW9uLgotICAgICAgICA8L2Jsb2NrcXVvdGU+Ci0gICAgICAgIAotICAgIDwvYmxvY2txdW90ZT4KLSAgICAKLSAgICAKLTwvYmxvY2txdW90ZT4KLQotCi08aHIgbm9zaGFkZT0ibm9zaGFkZSIgc2l6ZT0iMyI+Ci0KLTxoMj48YSBuYW1lPSJjcmVhdGluZyI+Q3JlYXRpbmcgdGhlIEJ1aWxkPC9hPjwvaDI+Ci0KLTxibG9ja3F1b3RlPgotICAgIDxwPgotICAgIE9uY2UgYSBtYWNoaW5lIGlzIHNldHVwIHRvIGJ1aWxkIHRoZSAKLSAgICBPcGVuSkRLLAotICAgIHRoZSBzdGVwcyB0byBjcmVhdGUgdGhlCi0gICAgYnVpbGQgYXJlIGZhaXJseSBzaW1wbGUuCi0gICAgVGhlIHZhcmlvdXMgQUxUIHNldHRpbmdzIGNhbiBlaXRoZXIgYmUgbWFkZSBpbnRvICB2YXJpYWJsZXMKLSAgICBvciBjYW4gYmUgc3VwcGxpZWQgb24gdGhlIAotICAgIDxhIGhyZWY9IiNnbWFrZSI+PHR0PjxpPmdtYWtlPC9pPjwvdHQ+PC9hPiAKLSAgICBjb21tYW5kLgotICAgIDxwPgotICAgIDxvbD4KLSAgICAgICAgPGxpPlVzZSB0aGUgc2FuaXR5IHJ1bGUgdG8gZG91YmxlIGNoZWNrIGFsbCB0aGUgQUxUIHNldHRpbmdzOgotICAgICAgICAgICAgPGJsb2NrcXVvdGU+Ci0gICAgICAgICAgICAgICAgPHR0PgotICAgICAgICAgICAgICAgICAgICA8aT5nbWFrZTwvaT4gCi0gICAgICAgICAgICAgICAgICAgIHNhbml0eQotICAgICAgICAgICAgICAgICAgICBbQVJDSF9EQVRBX01PREVMPTxpPjMyIG9yIDY0PC9pPl0KLSAgICAgICAgICAgICAgICAgICAgW290aGVyICJBTFRfIiBvdmVycmlkZXNdCi0gICAgICAgICAgICAgICAgPC90dD4KLSAgICAgICAgICAgIDwvYmxvY2txdW90ZT4KLSAgICAgICAgPC9saT4KLSAgICAgICAgPGxpPlN0YXJ0IHRoZSBidWlsZCB3aXRoIHRoZSBjb21tYW5kOgotICAgICAgICAgICAgPGJsb2NrcXVvdGU+Ci0gICAgICAgICAgICAgICAgPHR0PgotICAgICAgICAgICAgICAgICAgICA8aT5nbWFrZTwvaT4gCi0gICAgICAgICAgICAgICAgICAgIFtBUkNIX0RBVEFfTU9ERUw9PGk+MzIgb3IgNjQ8L2k+XQotICAgICAgICAgICAgICAgICAgICBbQUxUX09VVFBVVERJUj08aT5vdXRwdXRfZGlyZWN0b3J5PC9pPl0gCi0gICAgICAgICAgICAgICAgICAgIFtvdGhlciAiQUxUXyIgb3ZlcnJpZGVzXSAKLSAgICAgICAgICAgICAgICA8L3R0PgotICAgICAgICAgICAgPC9ibG9ja3F1b3RlPgotICAgICAgICA8L2xpPgotICAgIDwvb2w+Ci0gICAgPHA+Ci0gICAgPHN0cm9uZz5Tb2xhcmlzOjwvc3Ryb25nPgotICAgIE5vdGUgdGhhdCBBUkNIX0RBVEFfTU9ERUwgaXMgcmVhbGx5IG9ubHkgbmVlZGVkIG9uIFNvbGFyaXMgdG8KLSAgICBpbmRpY2F0ZSB5b3Ugd2FudCB0byBidWlsdCB0aGUgNjQtYml0IHZlcnNpb24uCi0gICAgQW5kIGJlZm9yZSB0aGUgU29sYXJpcyA2NC1iaXQgYmluYXJpZXMgY2FuIGJlIHVzZWQsIHRoZXkKLSAgICBtdXN0IGJlIG1lcmdlZCB3aXRoIHRoZSBiaW5hcmllcyBmcm9tIGEgc2VwYXJhdGUgMzItYml0IGJ1aWxkLiAKLSAgICBUaGUgbWVyZ2VkIGJpbmFyaWVzIG1heSB0aGVuIGJlIHVzZWQgaW4gZWl0aGVyIDMyLWJpdCBvciA2NC1iaXQgbW9kZSwgd2l0aAotICAgIHRoZSBzZWxlY3Rpb24gb2NjdXJyaW5nIGF0IHJ1bnRpbWUgCi0gICAgd2l0aCB0aGUgPHR0Pi1kMzI8L3R0PiBvciA8dHQ+LWQ2NDwvdHQ+IG9wdGlvbnMuIAotPC9ibG9ja3F1b3RlPgotCi08IS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLT4KLTxociBub3NoYWRlPSJub3NoYWRlIiBzaXplPSIzIj4KLQotPGgyPjxhIG5hbWU9InRlc3RpbmciPlRlc3RpbmcgdGhlIEJ1aWxkPC9hPjwvaDI+Ci0KLTxibG9ja3F1b3RlPgotICAgIDxwPgotICAgIFdoZW4gdGhlIGJ1aWxkIGlzIGNvbXBsZXRlZCwgeW91IHNob3VsZCBzZWUgdGhlIGdlbmVyYXRlZAotICAgIGJpbmFyaWVzIGFuZCBhc3NvY2lhdGVkIGZpbGVzIGluIHRoZSA8dHQ+ajJzZGstaW1hZ2U8L3R0PiAKLSAgICBkaXJlY3RvcnkgaW4gdGhlIG91dHB1dCBkaXJlY3RvcnkuIAotICAgIFRoZSBkZWZhdWx0IG91dHB1dCBkaXJlY3RvcnkgaXMKLSAgICA8dHQ+YnVpbGQvPGk+cGxhdGZvcm08L2k+PC90dD4sCi0gICAgd2hlcmUgPHR0PjxpPnBsYXRmb3JtPC9pPjwvdHQ+IGlzIG9uZSBvZgotICAgIDx0dD48dWw+Ci0gICAgICAgICAgICA8bGk+c29sYXJpcy1zcGFyYzwvbGk+Ci0gICAgICAgICAgICA8bGk+c29sYXJpcy1zcGFyY3Y5PC9saT4KLSAgICAgICAgICAgIDxsaT5zb2xhcmlzLWk1ODY8L2xpPgotICAgICAgICAgICAgPGxpPnNvbGFyaXMtYW1kNjQ8L2xpPgotICAgICAgICAgICAgPGxpPmxpbnV4LWk1ODY8L2xpPgotICAgICAgICAgICAgPGxpPmxpbnV4LWFtZDY0PC9saT4KLSAgICAgICAgICAgIDxsaT53aW5kb3dzLWk1ODY8L2xpPgotICAgICAgICAgICAgPGxpPndpbmRvd3MtYW1kNjQ8L2xpPgotICAgIDwvdWw+PC90dD4KLSAgICBJbiBwYXJ0aWN1bGFyLCB0aGUgCi0gICAgPHR0PmJ1aWxkLzxpPnBsYXRmb3JtPC9pPi9qMnNkay1pbWFnZS9iaW48L3R0PgotICAgIGRpcmVjdG9yeSBzaG91bGQgY29udGFpbiBleGVjdXRhYmxlcyBmb3IgdGhlIAotICAgIE9wZW5KREsKLSAgICB0b29scyBhbmQgdXRpbGl0aWVzLgotICAgIDxwPgotICAgIFlvdSBjYW4gdGVzdCB0aGF0IHRoZSBidWlsZCBjb21wbGV0ZWQgcHJvcGVybHkgYnkgdXNpbmcgdGhlIGJ1aWxkCi0gICAgdG8gcnVuIHRoZSB2YXJpb3VzIGRlbW9zIHRoYXQgeW91IHdpbGwgZmluZCBpbiB0aGUgCi0gICAgPHR0PmJ1aWxkLzxpPnBsYXRmb3JtPC9pPi9qMnNkay1pbWFnZS9kZW1vPC90dD4KLSAgICBkaXJlY3RvcnkuCi0gICAgPHA+Ci0gICAgVGhlIHByb3ZpZGVkIHJlZ3Jlc3Npb24gdGVzdHMgY2FuIGJlIHJ1biB3aXRoIHRoZSA8dHQ+anRyZWc8L3R0PgotICAgIHV0aWxpdHkgZnJvbSAKLSAgICA8YSBocmVmPSJodHRwOi8vb3Blbmpkay5qYXZhLm5ldC9qdHJlZy8iPnRoZSBqdHJlZyBzaXRlPC9hPi4KLTwvYmxvY2txdW90ZT4KLQotPCEtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0+Ci08aHIgbm9zaGFkZT0ibm9zaGFkZSIgc2l6ZT0iMyI+Ci0KLTxoMj48YSBuYW1lPSJ2YXJpYWJsZXMiPkVudmlyb25tZW50L01ha2UgVmFyaWFibGVzPC9hPjwvaDI+Ci0KLTxwPgotU29tZSBvZiB0aGUKLWVudmlyb25tZW50IG9yIG1ha2UgdmFyaWFibGVzIChqdXN0IGNhbGxlZCA8Yj52YXJpYWJsZXM8L2I+IGluIHRoaXMKLWRvY3VtZW50KSB0aGF0IGNhbiBpbXBhY3QgdGhlIGJ1aWxkIGFyZToKLQotPGJsb2NrcXVvdGU+Ci0gICAgCi0gICAgPGRsPgotICAgICAgICAKLSAgICAgICAgPGR0PjxhIG5hbWU9InBhdGgiPjx0dD5QQVRIPC90dD48L2E+IDwvZHQ+Ci0gICAgICAgIDxkZD5UeXBpY2FsbHkgeW91IHdhbnQgdG8gc2V0IHRoZSA8dHQ+UEFUSDwvdHQ+IHRvIGluY2x1ZGU6Ci0gICAgICAgICAgICA8dWw+Ci0gICAgICAgICAgICAgICAgPGxpPlRoZSBsb2NhdGlvbiBvZiB0aGUgR05VIG1ha2UgYmluYXJ5PC9saT4KLSAgICAgICAgICAgICAgICA8bGk+VGhlIGxvY2F0aW9uIG9mIHRoZSBKREsgNiA8dHQ+amF2YTwvdHQ+IAotICAgICAgICAgICAgICAgIChzZWUgPGEgaHJlZj0iI2Jvb3RqZGsiPkJvb3RzdHJhcCBKREs8L2E+KTwvbGk+Ci0gICAgICAgICAgICAgICAgPGxpPlRoZSBsb2NhdGlvbiBvZiB0aGUgQy9DKysgY29tcGlsZXJzIAotICAgICAgICAgICAgICAgIChzZWUgPGEgaHJlZj0iI2NvbXBpbGVycyI+PHR0PmNvbXBpbGVyczwvdHQ+PC9hPik8L2xpPgotICAgICAgICAgICAgICAgIDxsaT5UaGUgbG9jYXRpb24gb3IgbG9jYXRpb25zIGZvciB0aGUgVW5peCBjb21tYW5kIHV0aWxpdGllcwotICAgICAgICAgICAgICAgIChlLmcuIDx0dD4vdXNyL2JpbjwvdHQ+KTwvbGk+Ci0gICAgICAgICAgICA8L3VsPgotICAgICAgICA8L2RkPgotICAgICAgICAKLSAgICAgICAgPGR0PjxhIG5hbWU9ImFyY2hfZGF0YV9tb2RlbCI+PHR0PkFSQ0hfREFUQV9NT0RFTDwvdHQ+PC9hPjwvZHQ+Ci0gICAgICAgIDxkZD5UaGUgPHR0PkFSQ0hfREFUQV9NT0RFTDwvdHQ+IHZhcmlhYmxlCi0gICAgICAgICAgICBpcyB1c2VkIHRvIHNwZWNpZnkgd2hldGhlciB0aGUgYnVpbGQgaXMgdG8gZ2VuZXJhdGUgMzItYml0IG9yIDY0LWJpdAotICAgICAgICAgICAgYmluYXJpZXMuIAotICAgICAgICAgICAgVGhlIFNvbGFyaXMgYnVpbGQgc3VwcG9ydHMgZWl0aGVyIDMyLWJpdCBvciA2NC1iaXQgYnVpbGRzLCBidXQKLSAgICAgICAgICAgIFdpbmRvd3MgYW5kIExpbnV4IHdpbGwgc3VwcG9ydCBvbmx5IG9uZSwgZGVwZW5kaW5nIG9uIHRoZSBzcGVjaWZpYwotICAgICAgICAgICAgT1MgYmVpbmcgdXNlZC4KLSAgICAgICAgICAgIE5vcm1hbGx5LCBzZXR0aW5nIHRoaXMgdmFyaWFibGUgaXMgb25seSBuZWNlc3Nhcnkgb24gU29sYXJpcy4KLSAgICAgICAgICAgIFNldCA8dHQ+QVJDSF9EQVRBX01PREVMPC90dD4gdG8gPHR0PjMyPC90dD4gZm9yIGdlbmVyYXRpbmcgMzItYml0IGJpbmFyaWVzLCAKLSAgICAgICAgICAgIG9yIHRvIDx0dD42NDwvdHQ+IGZvciBnZW5lcmF0aW5nIDY0LWJpdCBiaW5hcmllcy4KLSAgICAgICAgPC9kZD4KLSAgICAgICAgCi0gICAgICAgIDxkdD48YSBuYW1lPSJBTFRfQk9PVERJUiI+PHR0PkFMVF9CT09URElSPC90dD48L2E+PC9kdD4KLSAgICAgICAgPGRkPgotICAgICAgICAgICAgVGhlIGxvY2F0aW9uIG9mIHRoZSBib290c3RyYXAgSkRLIGluc3RhbGxhdGlvbi4gCi0gICAgICAgICAgICBTZWUgPGEgaHJlZj0iI2Jvb3RqZGsiPkJvb3RzdHJhcCBKREs8L2E+IGZvciBtb3JlIGluZm9ybWF0aW9uLgotICAgICAgICAgICAgWW91IHNob3VsZCBhbHdheXMgaW5zdGFsbCB5b3VyIG93biBsb2NhbCBCb290c3RyYXAgSkRLIGFuZAotICAgICAgICAgICAgYWx3YXlzIHNldCA8dHQ+QUxUX0JPT1RESVI8L3R0PiBleHBsaWNpdGx5LgotICAgICAgICA8L2RkPgotICAgICAgICAKLSAgICAgICAgPGR0PjxhIG5hbWU9IkFMVF9PVVRQVVRESVIiPjx0dD5BTFRfT1VUUFVURElSPC90dD48L2E+IDwvZHQ+Ci0gICAgICAgIDxkZD4KLSAgICAgICAgICAgIEFuIG92ZXJyaWRlIGZvciBzcGVjaWZ5aW5nIHRoZSAoYWJzb2x1dGUpIHBhdGggb2Ygd2hlcmUgdGhlCi0gICAgICAgICAgICBidWlsZCBvdXRwdXQgaXMgdG8gZ28uCi0gICAgICAgICAgICBUaGUgZGVmYXVsdCBvdXRwdXQgZGlyZWN0b3J5IHdpbGwgYmUgYnVpbGQvPGk+cGxhdGZvcm08L2k+LgotICAgICAgICA8L2RkPgotICAgICAgICAKLSAgICAgICAgPGR0PjxhIG5hbWU9IkFMVF9DT01QSUxFUl9QQVRIIj48dHQ+QUxUX0NPTVBJTEVSX1BBVEg8L3R0PjwvYT4gPC9kdD4KLSAgICAgICAgPGRkPgotICAgICAgICAgICAgVGhlIGxvY2F0aW9uIG9mIHRoZSBDL0MrKyBjb21waWxlci4KLSAgICAgICAgICAgIFRoZSBkZWZhdWx0IHZhcmllcyBkZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtLiAKLSAgICAgICAgPC9kZD4KLSAgICAgICAgCi0gICAgICAgIDxkdD48dHQ+PGEgbmFtZT0iQUxUX0NBQ0VSVFNfRklMRSI+QUxUX0NBQ0VSVFNfRklMRTwvYT48L3R0PjwvZHQ+Ci0gICAgICAgIDxkZD4KLSAgICAgICAgICAgIFRoZSBsb2NhdGlvbiBvZiB0aGUgPGEgaHJlZj0iI2NhY2VydHMiPmNhY2VydHM8L2E+IGZpbGUuCi0gICAgICAgICAgICBUaGUgZGVmYXVsdCB3aWxsIHJlZmVyIHRvIAotICAgICAgICAgICAgPHR0Pmpkay9zcmMvc2hhcmUvbGliL3NlY3VyaXR5L2NhY2VydHM8L3R0Pi4KLSAgICAgICAgPC9kZD4KLSAgICAgICAgCi0gICAgICAgIDxkdD48YSBuYW1lPSJBTFRfQklOQVJZX1BMVUdTX1BBVEgiPjx0dD5BTFRfQklOQVJZX1BMVUdTX1BBVEg8L3R0PjwvYT48L2R0PgotICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICBUaGUgbG9jYXRpb24gb2YgdGhlIGJpbmFyeSBwbHVncyBpbnN0YWxsYXRpb24uCi0gICAgICAgICAgICBTZWUgPGEgaHJlZj0iI2JpbmFyeXBsdWdzIj5CaW5hcnkgUGx1Z3M8L2E+IGZvciBtb3JlIGluZm9ybWF0aW9uLgotICAgICAgICAgICAgWW91IHNob3VsZCBhbHdheXMgaGF2ZSBhIGxvY2FsIGNvcHkgb2YgYQotICAgICAgICAgICAgcmVjZW50IEJpbmFyeSBQbHVncyBpbnN0YWxsIGltYWdlCi0gICAgICAgICAgICBhbmQgc2V0IHRoaXMgdmFyaWFibGUgdG8gdGhhdCBsb2NhdGlvbi4KLSAgICAgICAgPC9kZD4KLSAgICAgICAgCi0gICAgICAgIDxkdD48YSBuYW1lPSJBTFRfQ1VQU19IRUFERVJTX1BBVEgiPjx0dD5BTFRfQ1VQU19IRUFERVJTX1BBVEg8L3R0PjwvYT4gPC9kdD4KLSAgICAgICAgPGRkPgotICAgICAgICAgICAgVGhlIGxvY2F0aW9uIG9mIHRoZSBDVVBTIGhlYWRlciBmaWxlcy4KLSAgICAgICAgICAgIFNlZSA8YSBocmVmPSIjY3VwcyI+Q1VQUyBpbmZvcm1hdGlvbjwvYT4gZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0gICAgICAgICAgICBJZiB0aGlzIHBhdGggZG9lcyBub3QgZXhpc3QgdGhlIGZhbGxiYWNrIHBhdGggaXMgCi0gICAgICAgICAgICA8dHQ+L3Vzci9pbmNsdWRlPC90dD4uCi0gICAgICAgIDwvZGQ+Ci0gICAgICAgIAotICAgICAgICAKLSAgICAgICAgPGR0PjxhIG5hbWU9IkFMVF9GUkVFVFlQRV9MSUJfUEFUSCI+PHR0PkFMVF9GUkVFVFlQRV9MSUJfUEFUSDwvdHQ+PC9hPjwvZHQ+Ci0gICAgICAgIDxkZD4KLSAgICAgICAgICAgIFRoZSBsb2NhdGlvbiBvZiB0aGUgRnJlZVR5cGUgc2hhcmVkIGxpYnJhcnkuIAotICAgICAgICAgICAgU2VlIDxhIGhyZWY9IiNmcmVldHlwZSI+RnJlZVR5cGUgaW5mb3JtYXRpb248L2E+IGZvciBkZXRhaWxzLiAKLSAgICAgICAgPC9kZD4KLSAgICAgICAgCi0gICAgICAgIDxkdD48YSBuYW1lPSJBTFRfRlJFRVRZUEVfSEVBREVSU19QQVRIIj48dHQ+QUxUX0ZSRUVUWVBFX0hFQURFUlNfUEFUSDwvdHQ+PC9hPjwvZHQ+Ci0gICAgICAgIDxkZD4KLSAgICAgICAgICAgIFRoZSBsb2NhdGlvbiBvZiB0aGUgRnJlZVR5cGUgaGVhZGVyIGZpbGVzLgotICAgICAgICAgICAgU2VlIDxhIGhyZWY9IiNmcmVldHlwZSI+RnJlZVR5cGUgaW5mb3JtYXRpb248L2E+IGZvciBkZXRhaWxzLiAKLSAgICAgICAgPC9kZD4KLSAgICAgICAgCi0gICAgICAgIDxkdD48c3Ryb25nPldpbmRvd3Mgc3BlY2lmaWM6PC9zdHJvbmc+PC9kdD4KLSAgICAgICAgPGRkPgotICAgICAgICAgICAgPGRsPgotICAgICAgICAgICAgICAgIDxkdD48YSBuYW1lPSJBTFRfTVNERVZUT09MU19QQVRIIj48dHQ+QUxUX01TREVWVE9PTFNfUEFUSDwvdHQ+PC9hPiA8L2R0PgotICAgICAgICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgICAgICAgICAgVGhlIGxvY2F0aW9uIG9mIHRoZSBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyAuTkVUIDIwMDMKLSAgICAgICAgICAgICAgICAgICAgdG9vbHMgJ2JpbicgZGlyZWN0b3J5LgotICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBpcyB1c3VhbGx5IGRlcml2ZWQgZnJvbQotICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjQUxUX0NPTVBJTEVSX1BBVEgiPjx0dD5BTFRfQ09NUElMRVJfUEFUSDwvdHQ+PC9hPi4KLSAgICAgICAgICAgICAgICA8L2RkPgotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIDxkdD48dHQ+PGEgbmFtZT0iQUxUX0RYU0RLX1BBVEgiPkFMVF9EWFNES19QQVRIPC9hPjwvdHQ+IDwvZHQ+Ci0gICAgICAgICAgICAgICAgPGRkPgotICAgICAgICAgICAgICAgICAgICBUaGUgbG9jYXRpb24gb2YgdGhlIAotICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZHhzZGsiPk1pY3Jvc29mdCBEaXJlY3RYIDkgU0RLPC9hPi4KLSAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgd2lsbCBiZSB0byB0cnkgYW5kIHVzZSB0aGUgRGlyZWN0WCBlbnZpcm9ubWVudAotICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSA8dHQ+RFhTREtfRElSPC90dD4sCi0gICAgICAgICAgICAgICAgICAgIGZhaWxpbmcgdGhhdCwgbG9vayBpbiA8dHQ+QzovRFhTREs8L3R0Pi4KLSAgICAgICAgICAgICAgICA8L2RkPgotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIDxkdD48dHQ+PGEgbmFtZT0iQUxUX01TVkNSVF9ETExfUEFUSCI+QUxUX01TVkNSVF9ETExfUEFUSDwvYT48L3R0PiA8L2R0PgotICAgICAgICAgICAgICAgIDxkZD4KLSAgICAgICAgICAgICAgICAgICAgVGhlIGxvY2F0aW9uIG9mIHRoZSAKLSAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI21zdmNydCI+PHR0Pk1TVkNSVC5ETEw8L3R0PjwvYT4uIAotICAgICAgICAgICAgICAgIDwvZGQ+Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgPGR0Pjx0dD48YSBuYW1lPSJBTFRfTVNWQ1I3MV9ETExfUEFUSCI+QUxUX01TVkNSNzFfRExMX1BBVEg8L2E+PC90dD4gPC9kdD4KLSAgICAgICAgICAgICAgICA8ZGQ+Ci0gICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+aTU4NiBvbmx5Ojwvc3Ryb25nPgotICAgICAgICAgICAgICAgICAgICBUaGUgbG9jYXRpb24gb2YgdGhlIAotICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjbXN2Y3I3MSI+PHR0Pk1TVkNSNzEuRExMPC90dD48L2E+LiAKLSAgICAgICAgICAgICAgICA8L2RkPgotICAgICAgICAgICAgPC9kbD4KLSAgICAgICAgPC9kZD4KLSAgICAgICAgCi0gICAgPC9kbD4KLTwvYmxvY2txdW90ZT4KLQotPCEtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0+Ci08aHIgbm9zaGFkZT0ibm9zaGFkZSIgc2l6ZT0iMyI+Ci0KLTxoMj48YSBuYW1lPSJ0cm91Ymxlc2hvb3RpbmciPlRyb3VibGVzaG9vdGluZzwvYT48L2gyPgotCi08YmxvY2txdW90ZT4KLSAgICA8cD4KLSAgICBBIGJ1aWxkIGNhbiBmYWlsIGZvciBhbnkgbnVtYmVyIG9mIHJlYXNvbnMuIAotICAgIE1vc3QgZmFpbHVyZXMKLSAgICBhcmUgYSByZXN1bHQgb2YgdHJ5aW5nIHRvIGJ1aWxkIGluIGFuIGVudmlyb25tZW50IGluIHdoaWNoIGFsbCB0aGUKLSAgICBwcmUtYnVpbGQgcmVxdWlyZW1lbnRzIGhhdmUgbm90IGJlZW4gbWV0LiAKLSAgICBUaGUgZmlyc3Qgc3RlcCBpbgotICAgIHRyb3VibGVzaG9vdGluZyBhIGJ1aWxkIGZhaWx1cmUgaXMgdG8gcmVjaGVjayB0aGF0IHlvdSBoYXZlIHNhdGlzZmllZAotICAgIGFsbCB0aGUgcHJlLWJ1aWxkIHJlcXVpcmVtZW50cyBmb3IgeW91ciBwbGF0Zm9ybS4KLSAgICBMb29rIGZvciB0aGUgY2hlY2sgbGlzdCBvZiB0aGUgcGxhdGZvcm0geW91IGFyZSBidWlsZGluZyBvbiBpbiB0aGUKLSAgICA8YSBocmVmPSIjY29udGVudHMiPlRhYmxlIG9mIENvbnRlbnRzPC9hPi4KLSAgICAKLSAgICA8cD4KLSAgICBZb3UgY2FuIHZhbGlkYXRlIHlvdXIgYnVpbGQgZW52aXJvbm1lbnQgYnkgdXNpbmcgdGhlIDx0dD5zYW5pdHk8L3R0PgotICAgIHRhcmdldC4KLSAgICBBbnkgZXJyb3JzIGxpc3RlZAotICAgIHdpbGwgc3RvcCB0aGUgYnVpbGQgZnJvbSBzdGFydGluZywgYW5kIGFueSB3YXJuaW5ncyBtYXkgcmVzdWx0IGluCi0gICAgYSBmbGF3ZWQgcHJvZHVjdCBidWlsZC4KLSAgICBXZSBzdHJvbmdseSBlbmNvdXJhZ2UgeW91IHRvIGV2YWx1YXRlIGV2ZXJ5Ci0gICAgc2FuaXR5IGNoZWNrIHdhcm5pbmcgYW5kIGZpeCBpdCBpZiByZXF1aXJlZCwgYmVmb3JlIHlvdSBwcm9jZWVkCi0gICAgZnVydGhlciB3aXRoIHlvdXIgYnVpbGQuCi0gICAgCi0gICAgPHA+Ci0gICAgU29tZSBvZiB0aGUgbW9yZSBjb21tb24gcHJvYmxlbXMgd2l0aCBidWlsZHMgYXJlIGJyaWVmbHkgZGVzY3JpYmVkCi0gICAgYmVsb3csIHdpdGggc3VnZ2VzdGlvbnMgZm9yIHJlbWVkaWVzLgotICAgIAotICAgIDx1bD4KLSAgICAgICAgPGxpPgotICAgICAgICAgICAgPGI+U2xvdyBCdWlsZHM6PC9iPgotICAgICAgICAgICAgPGJsb2NrcXVvdGU+Ci0gICAgICAgICAgICAgICAgPHA+Ci0gICAgICAgICAgICAgICAgSWYgeW91ciBidWlsZCBtYWNoaW5lIHNlZW1zIHRvIGJlIG92ZXJsb2FkZWQgZnJvbSB0b28gbWFueQotICAgICAgICAgICAgICAgIHNpbXVsdGFuZW91cyBDKysgY29tcGlsZXMsIHRyeSBzZXR0aW5nIHRoZSA8dHQ+SE9UU1BPVF9CVUlMRF9KT0JTPC90dD4KLSAgICAgICAgICAgICAgICB2YXJpYWJsZSB0byA8dHQ+MTwvdHQ+IChpZiB5b3UncmUgdXNpbmcgYSBtdWx0aXBsZSBDUFUKLSAgICAgICAgICAgICAgICBtYWNoaW5lLCBzZXR0aW5nIGl0IHRvIG1vcmUgdGhhbiB0aGUgdGhlIG51bWJlciBvZiBDUFVzIGlzIHByb2JhYmx5Ci0gICAgICAgICAgICAgICAgbm90IGEgZ29vZCBpZGVhKS4KLSAgICAgICAgICAgICAgICA8cD4KLSAgICAgICAgICAgICAgICBDcmVhdGluZyB0aGUgamF2YWRvY3MgY2FuIGJlIHZlcnkgc2xvdywgaWYgeW91IGFyZSBydW5uaW5nCi0gICAgICAgICAgICAgICAgamF2YWRvYywgY29uc2lkZXIgc2tpcHBpbmcgdGhhdCBzdGVwLgotICAgICAgICAgICAgICAgIDxwPgotICAgICAgICAgICAgICAgIEZhc3RlciBoYXJkd2FyZSBhbmQgbW9yZSBSQU0gYWx3YXlzIGhlbHBzIHRvby4KLSAgICAgICAgICAgICAgICBUaGUgVk0gYnVpbGQgdGVuZHMgdG8gYmUgQ1BVIGludGVuc2l2ZSAobWFueSBDKysgY29tcGlsZXMpLAotICAgICAgICAgICAgICAgIGFuZCB0aGUgcmVzdCBvZiB0aGUgSkRLIHdpbGwgb2Z0ZW4gYmUgZGlzayBpbnRlbnNpdmUuCi0gICAgICAgICAgICAgICAgPHA+Ci0gICAgICAgICAgICAgICAgRmFzdGVyIGNvbXBpbGVzIGFyZSBwb3NzaWJsZSB1c2luZyBhIHRvb2wgY2FsbGVkCi0gICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2NjYWNoZS5zYW1iYS5vcmcvIj5jY2FjaGU8L2E+LgotICAgICAgICAgICAgPC9ibG9ja3F1b3RlPgotICAgICAgICA8L2xpPgotICAgICAgICA8bGk+Ci0gICAgICAgICAgICA8Yj5GaWxlIHRpbWUgaXNzdWVzOjwvYj4KLSAgICAgICAgICAgIDxibG9ja3F1b3RlPgotICAgICAgICAgICAgICAgIDxwPgotICAgICAgICAgICAgICAgIElmIHlvdSBzZWUgd2FybmluZ3MgdGhhdCByZWZlciB0byBmaWxlIHRpbWUgc3RhbXBzLCBlLmcuCi0gICAgICAgICAgICAgICAgPGJsb2NrcXVvdGU+Ci0gICAgICAgICAgICAgICAgICAgIDxpPldhcm5pbmcgbWVzc2FnZTo8L2k+PHR0PiBGaWxlIGB4eHgnIGhhcyBtb2RpZmljYXRpb24gdGltZSBpbgotICAgICAgICAgICAgICAgICAgICB0aGUgZnV0dXJlLjwvdHQ+Ci0gICAgICAgICAgICAgICAgICAgIDxicj4KLSAgICAgICAgICAgICAgICAgICAgPGk+V2FybmluZyBtZXNzYWdlOjwvaT4gPHR0PiBDbG9jayBza2V3IGRldGVjdGVkLiBZb3VyIGJ1aWxkIG1heQotICAgICAgICAgICAgICAgICAgICBiZSBpbmNvbXBsZXRlLjwvdHQ+IAotICAgICAgICAgICAgICAgIDwvYmxvY2txdW90ZT4KLSAgICAgICAgICAgICAgICA8cD4KLSAgICAgICAgICAgICAgICBUaGVzZSB3YXJuaW5ncyBjYW4gb2NjdXIgd2hlbiB0aGUgY2xvY2sgb24gdGhlIGJ1aWxkIG1hY2hpbmUgaXMgb3V0IG9mCi0gICAgICAgICAgICAgICAgc3luYyB3aXRoIHRoZSB0aW1lc3RhbXBzIG9uIHRoZSBzb3VyY2UgZmlsZXMuIE90aGVyIGVycm9ycywgYXBwYXJlbnRseQotICAgICAgICAgICAgICAgIHVucmVsYXRlZCBidXQgaW4gZmFjdCBjYXVzZWQgYnkgdGhlIGNsb2NrIHNrZXcsIGNhbiBvY2N1ciBhbG9uZyB3aXRoCi0gICAgICAgICAgICAgICAgdGhlIGNsb2NrIHNrZXcgd2FybmluZ3MuIFRoZXNlIHNlY29uZGFyeSBlcnJvcnMgbWF5IHRlbmQgdG8gb2JzY3VyZSB0aGUKLSAgICAgICAgICAgICAgICBmYWN0IHRoYXQgdGhlIHRydWUgcm9vdCBjYXVzZSBvZiB0aGUgcHJvYmxlbSBpcyBhbiBvdXQtb2Ytc3luYyBjbG9jay4KLSAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgYW4gb3V0LW9mLXN5bmMgY2xvY2sgaGFzIGJlZW4ga25vd24gdG8gY2F1c2UgYW4gb2xkCi0gICAgICAgICAgICAgICAgdmVyc2lvbiBvZiBqYXZhYyB0byBiZSB1c2VkIHRvIGNvbXBpbGUgc29tZSBmaWxlcywgcmVzdWx0aW5nIGluIGVycm9ycwotICAgICAgICAgICAgICAgIHdoZW4gdGhlIHByZS0xLjQgY29tcGlsZXIgcmFuIGFjcm9zcyB0aGUgbmV3IDx0dD5hc3NlcnQ8L3R0PiBrZXl3b3JkCi0gICAgICAgICAgICAgICAgaW4gdGhlIDEuNCBzb3VyY2UgY29kZS4KLSAgICAgICAgICAgICAgICA8cD4KLSAgICAgICAgICAgICAgICBJZiB5b3Ugc2VlIHRoZXNlIHdhcm5pbmdzLCByZXNldCB0aGUgY2xvY2sgb24gdGhlIGJ1aWxkCi0gICAgICAgICAgICAgICAgbWFjaGluZSwgcnVuICI8dHQ+PGk+Z21ha2U8L2k+IGNsb2JiZXI8L3R0PiIgb3IgZGVsZXRlIHRoZSBkaXJlY3RvcnkKLSAgICAgICAgICAgICAgICBjb250YWluaW5nIHRoZSBidWlsZCBvdXRwdXQsIGFuZCByZXN0YXJ0IHRoZSBidWlsZCBmcm9tIHRoZSBiZWdpbm5pbmcuCi0gICAgICAgICAgICA8L2Jsb2NrcXVvdGU+Ci0gICAgICAgIDwvbGk+Ci0gICAgICAgIDxsaT4KLSAgICAgICAgICAgIDxiPkVycm9yIG1lc3NhZ2U6IDx0dD5Ucm91YmxlIHdyaXRpbmcgb3V0IHRhYmxlIHRvIGRpc2s8L3R0PjwvYj4KLSAgICAgICAgICAgIDxibG9ja3F1b3RlPgotICAgICAgICAgICAgICAgIDxwPgotICAgICAgICAgICAgICAgIEluY3JlYXNlIHRoZSBhbW91bnQgb2Ygc3dhcCBzcGFjZSBvbiB5b3VyIGJ1aWxkIG1hY2hpbmUuCi0gICAgICAgICAgICA8L2Jsb2NrcXVvdGU+Ci0gICAgICAgIDwvbGk+Ci0gICAgICAgIDxsaT4KLSAgICAgICAgICAgIDxiPkVycm9yIE1lc3NhZ2U6IDx0dD5saWJzdGRjKysgbm90IGZvdW5kOjwvdHQ+PC9iPgotICAgICAgICAgICAgPGJsb2NrcXVvdGU+Ci0gICAgICAgICAgICAgICAgVGhpcyBpcyBjYXVzZWQgYnkgYSBtaXNzaW5nIGxpYnN0ZGMrKy5hIGxpYnJhcnkuCi0gICAgICAgICAgICAgICAgVGhpcyBpcyBpbnN0YWxsZWQgYXMgcGFydCBvZiBhIHNwZWNpZmljIHBhY2thZ2UKLSAgICAgICAgICAgICAgICAoZS5nLiBsaWJzdGRjKysuc28uZGV2ZWwuMzg2KS4KLSAgICAgICAgICAgICAgICBCeSBkZWZhdWx0IHNvbWUgNjRiaXQgTGludXggdmVyc2lvbnMgKGUuZy4gRmVkb3JhKQotICAgICAgICAgICAgICAgIG9ubHkgaW5zdGFsbCB0aGUgNjRiaXQgdmVyc2lvbiBvZiB0aGUgbGlic3RkYysrIHBhY2thZ2UuCi0gICAgICAgICAgICAgICAgVmFyaW91cyBwYXJ0cyBvZiB0aGUgSkRLIGJ1aWxkIHJlcXVpcmUgYSBzdGF0aWMKLSAgICAgICAgICAgICAgICBsaW5rIG9mIHRoZSBDKysgcnVudGltZSBsaWJyYXJpZXMgdG8gYWxsb3cgZm9yIG1heGltdW0KLSAgICAgICAgICAgICAgICBwb3J0YWJpbGl0eSBvZiB0aGUgYnVpbHQgaW1hZ2VzLgotICAgICAgICAgICAgPC9ibG9ja3F1b3RlPgotICAgICAgICA8L2xpPgotICAgICAgICA8bGk+Ci0gICAgICAgICAgICA8Yj5FcnJvciBNZXNzYWdlOiA8dHQ+Y2Fubm90IHJlc3RvcmUgc2VnbWVudCBwcm90IGFmdGVyIHJlbG9jPC90dD48L2I+Ci0gICAgICAgICAgICA8YmxvY2txdW90ZT4KLSAgICAgICAgICAgICAgICBUaGlzIGlzIHByb2JhYmx5IGFuIGlzc3VlIHdpdGggU0VMaW51eCAoU2VlCi0gICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TRUxpbnV4Ij5odHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NFTGludXg8L2E+KS4KLSAgICAgICAgICAgICAgICBQYXJ0cyBvZiB0aGUgVk0gaXMgYnVpbHQgd2l0aG91dCB0aGUgPHR0Pi1mUElDPC90dD4gZm9yCi0gICAgICAgICAgICAgICAgcGVyZm9ybWFuY2UgcmVhc29ucy4KLSAgICAgICAgICAgICAgICA8cD4KLSAgICAgICAgICAgICAgICBUbyBjb21wbGV0ZWx5IGRpc2FibGUgU0VMaW51eDoKLSAgICAgICAgICAgICAgICA8b2w+PHR0PgotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgPGxpPiQgc3Ugcm9vdDwvbGk+Ci0gICAgICAgICAgICAgICAgICAgIDxsaT4jIHN5c3RlbS1jb25maWctc2VjdXJpdHlsZXZlbDwvbGk+Ci0gICAgICAgICAgICAgICAgICAgIDxsaT5JbiB0aGUgd2luZG93IHRoYXQgYXBwZWFycywgc2VsZWN0IHRoZSBTRUxpbnV4IHRhYjwvbGk+Ci0gICAgICAgICAgICAgICAgICAgIDxsaT5EaXNhYmxlIFNFTGludXg8L2xpPgotICAgICAgICAgICAgICAgIDwvb2w+PC90dD4KLSAgICAgICAgICAgICAgICA8cD4KLSAgICAgICAgICAgICAgICBBbHRlcm5hdGl2ZWx5LCBpbnN0ZWFkIG9mIGNvbXBsZXRlbHkgZGlzYWJsaW5nIGl0IHlvdSBjb3VsZAotICAgICAgICAgICAgICAgIGRpc2FibGUganVzdCB0aGlzIG9uZSBjaGVjay4KLSAgICAgICAgICAgICAgICA8b2w+PHR0PgotICAgICAgICAgICAgICAgICAgICA8bGk+U2VsZWN0IFN5c3RlbS0+QWRtaW5pc3RyYXRpb24tPlNFTGludXggTWFuYWdlbWVudDwvbGk+Ci0gICAgICAgICAgICAgICAgICAgIDxsaT5JbiB0aGUgU0VMaW51eCBNYW5hZ2VtZW50IFRvb2wgd2hpY2ggYXBwZWFycywgCi0gICAgICAgICAgICAgICAgICAgIHNlbGVjdCAiQm9vbGVhbiIgZnJvbSB0aGUgbWVudSBvbiB0aGUgbGVmdDwvbGk+Ci0gICAgICAgICAgICAgICAgICAgIDxsaT5FeHBhbmQgdGhlICJNZW1vcnkgUHJvdGVjdGlvbiIgZ3JvdXA8L2xpPgotICAgICAgICAgICAgICAgICAgICA8bGk+Q2hlY2sgdGhlIGZpcnN0IGl0ZW0sIGxhYmVsZWQKLSAgICAgICAgICAgICAgICAgICAgIkFsbG93IGFsbCB1bmNvbmZpbmVkIGV4ZWN1dGFibGVzIHRvIHVzZSBsaWJyYXJpZXMgcmVxdWlyaW5nIHRleHQgcmVsb2NhdGlvbiAuLi4iPC9saT4KLSAgICAgICAgICAgICAgICA8L29sPjwvdHQ+Ci0gICAgICAgICAgICA8L2Jsb2NrcXVvdGU+Ci0gICAgICAgIDwvbGk+Ci0gICAgPC91bD4KLTwvYmxvY2txdW90ZT4KLQotPGhyIG5vc2hhZGU9Im5vc2hhZGUiIHNpemU9IjMiPgpkaWZmIC0tZ2l0IGEvbWFrZS9SRUFETUUuaHRtbCBiL21ha2UvUkVBRE1FLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlNDE1YjEuLjAwMDAwMDAKLS0tIGEvbWFrZS9SRUFETUUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci0gICAgCi0gICAgPGhlYWQ+IDx0aXRsZT5PcGVuSkRLIFJFQURNRTwvdGl0bGU+IDwvaGVhZD4KLSAgICAKLSAgICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLSAgICA8aHIgbm9zaGFkZT0ibm9zaGFkZSIgc2l6ZT0iMyI+Ci0gICAgPGNlbnRlcj4KLSAgICAgICAgPGgxPk9wZW5KREsgUkVBRE1FPC9oMT4KLSAgICA8L2NlbnRlcj4KLSAgICAKLSAgICA8IS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLT4gCi0gICAgPGhyIG5vc2hhZGU9Im5vc2hhZGUiIHNpemU9IjMiPgotICAgIAotICAgIDxoMj5UQkQ8L2gyPgotICAgIAotICAgIDxoMj5CdWlsZGluZyB0aGUgT3BlbkpESzwvaDI+Ci0gICAgCi0gICAgPHA+Ci0gICAgUmVmZXIgdG8gPGEgaHJlZj0iUkVBRE1FLWJ1aWxkcy5odG1sIj50aGUgT3BlbkpESyBCdWlsZCBSRUFETUU8L2E+Ci0gICAgZm9yIGJ1aWxkIGluc3RydWN0aW9ucy4KLSAgICAKLSAgICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLSAgICAKLSAgICA8aHIgbm9zaGFkZT0ibm9zaGFkZSIgc2l6ZT0iMyI+Ci0gICAgCi0gICAgPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvbWFrZS9USElSRF9QQVJUWV9SRUFETUUgYi9tYWtlL1RISVJEX1BBUlRZX1JFQURNRQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWY0ZDdlNS4uMDAwMDAwMAotLS0gYS9tYWtlL1RISVJEX1BBUlRZX1JFQURNRQorKysgL2Rldi9udWxsCkBAIC0xLDE2MTYgKzAsMCBAQAotRE8gTk9UIFRSQU5TTEFURSBPUiBMT0NBTElaRS4KLQotJSUgVGhpcyBub3RpY2UgaXMgcHJvdmlkZWQgd2l0aCByZXNwZWN0IHRvIFRoYWkgZGljdGlvbmFyeSBmb3IgdGV4dCBicmVha2luZywgd2hpY2ggbWF5IGJlIGluY2x1ZGVkIHdpdGggdGhpcyBzb2Z0d2FyZTogCi0KLS0tLSBiZWdpbiBvZiBMSUNFTlNFIGZpbGUgLS0tCi0KLUNvcHlyaWdodCAoQykgMTk4MiBUaGUgUm95YWwgSW5zdGl0dXRlLCBUaGFpIFJveWFsIEdvdmVybm1lbnQuCi0KLUNvcHlyaWdodCAoQykgMTk5OCBOYXRpb25hbCBFbGVjdHJvbmljcyBhbmQgQ29tcHV0ZXIgVGVjaG5vbG9neSBDZW50ZXIsCi0gTmF0aW9uYWwgU2NpZW5jZSBhbmQgVGVjaG5vbG9neSBEZXZlbG9wbWVudCBBZ2VuY3ksCi0gTWluaXN0cnkgb2YgU2NpZW5jZSBUZWNobm9sb2d5IGFuZCBFbnZpcm9ubWVudCwKLSBUaGFpIFJveWFsIEdvdmVybm1lbnQuCi0KLVBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwotYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0bwotZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQKLWxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsCi1zdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8KLXdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCi1jb25kaXRpb25zOgotCi1UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAotaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0KLVRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTCi1PUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCi1NRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOCi1OTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwKLURBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUgotT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRQotVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KLQotLS0tIGVuZCBvZiBMSUNFTlNFIGZpbGUgLS0tCi0lJSBUaGlzIG5vdGljZSBpcyBwcm92aWRlZCB3aXRoIHJlc3BlY3QgdG8gQVNNLCB3aGljaCBtYXkgYmUgaW5jbHVkZWQgd2l0aCB0aGlzIHNvZnR3YXJlOiAKLUNvcHlyaWdodCAoYykgMjAwMC0yMDA1IElOUklBLCBGcmFuY2UgVGVsZWNvbQotQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci1tb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLWFyZSBtZXQ6Ci0KLTEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0KLTIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotCi0zLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVycyBub3IgdGhlIG5hbWVzIG9mIGl0cwotICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0KLVRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgotQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLUFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQotTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLVNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLUNPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi1BUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi1USEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0lJSBUaGlzIG5vdGljZSBpcyBwcm92aWRlZCB3aXRoIHJlc3BlY3QgdG8gemxpYiAxLjEuMywgd2hpY2ggbWF5IGJlIGluY2x1ZGVkIHdpdGggdGhpcyBzb2Z0d2FyZTogICAKLQotQWNrbm93bGVkZ21lbnRzOgotCi0gIFRoZSBkZWZsYXRlIGZvcm1hdCB1c2VkIGJ5IHpsaWIgd2FzIGRlZmluZWQgYnkgUGhpbCBLYXR6LiBUaGUgZGVmbGF0ZQotICBhbmQgemxpYiBzcGVjaWZpY2F0aW9ucyB3ZXJlIHdyaXR0ZW4gYnkgTC4gUGV0ZXIgRGV1dHNjaC4gVGhhbmtzIHRvIGFsbCB0aGUKLSAgcGVvcGxlIHdobyByZXBvcnRlZCBwcm9ibGVtcyBhbmQgc3VnZ2VzdGVkIHZhcmlvdXMgaW1wcm92ZW1lbnRzIGluIHpsaWI7Ci0gIHRoZXkgYXJlIHRvbyBudW1lcm91cyB0byBjaXRlIGhlcmUuCi0KLUNvcHlyaWdodCBub3RpY2U6Ci0KLSAoQykgMTk5NS0xOTk4IEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXIKLQotICBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZAotICB3YXJyYW50eS4gIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzCi0gIGFyaXNpbmcgZnJvbSB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUuCi0KLSAgUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGFueW9uZSB0byB1c2UgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UsCi0gIGluY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUgaXQKLSAgZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgotCi0gIDEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZDsgeW91IG11c3Qgbm90Ci0gICAgIGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlCi0gICAgIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZQotICAgICBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLgotICAyLiBBbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0IG5vdCBiZQotICAgICBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuCi0gIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uCi0KLSAgSmVhbi1sb3VwIEdhaWxseSAgICAgICAgTWFyayBBZGxlcgotICBqbG91cEBnemlwLm9yZyAgICAgICAgICBtYWRsZXJAYWx1bW5pLmNhbHRlY2guZWR1Ci0KLUlmIHlvdSB1c2UgdGhlIHpsaWIgbGlicmFyeSBpbiBhIHByb2R1Y3QsIHdlIHdvdWxkIGFwcHJlY2lhdGUgKm5vdCoKLXJlY2VpdmluZyBsZW5ndGh5IGxlZ2FsIGRvY3VtZW50cyB0byBzaWduLiBUaGUgc291cmNlcyBhcmUgcHJvdmlkZWQKLWZvciBmcmVlIGJ1dCB3aXRob3V0IHdhcnJhbnR5IG9mIGFueSBraW5kLiAgVGhlIGxpYnJhcnkgaGFzIGJlZW4KLWVudGlyZWx5IHdyaXR0ZW4gYnkgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlcjsgaXQgZG9lcyBub3QKLWluY2x1ZGUgdGhpcmQtcGFydHkgY29kZS4KLQotSWYgeW91IHJlZGlzdHJpYnV0ZSBtb2RpZmllZCBzb3VyY2VzLCB3ZSB3b3VsZCBhcHByZWNpYXRlIHRoYXQgeW91IGluY2x1ZGUKLWluIHRoZSBmaWxlIENoYW5nZUxvZyBoaXN0b3J5IGluZm9ybWF0aW9uIGRvY3VtZW50aW5nIHlvdXIgY2hhbmdlcy4KLQotJSUgVGhpcyBub3RpY2UgaXMgcHJvdmlkZWQgd2l0aCByZXNwZWN0IHRvIFczQyAoRFREIGZvciBYTUwgU2lnbmF0dXJlcyksIHdoaWNoIG1heSBiZSBpbmNsdWRlZCB3aXRoIHRoaXMgc29mdHdhcmU6IAotVzNDriBTT0ZUV0FSRSBOT1RJQ0UgQU5EIExJQ0VOU0UKLUNvcHlyaWdodCCpIDE5OTQtMjAwMiBXb3JsZCBXaWRlIFdlYiBDb25zb3J0aXVtLCAoTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCBlbiBBdXRvbWF0aXF1ZSwgS2VpbyBVbml2ZXJzaXR5KS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gaHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdhbC8KLVRoaXMgVzNDIHdvcmsgKGluY2x1ZGluZyBzb2Z0d2FyZSwgZG9jdW1lbnRzLCBvciBvdGhlciByZWxhdGVkIGl0ZW1zKSBpcyBiZWluZyBwcm92aWRlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlcnMgdW5kZXIgdGhlIGZvbGxvd2luZyBsaWNlbnNlLiBCeSBvYnRhaW5pbmcsIHVzaW5nIGFuZC9vciBjb3B5aW5nIHRoaXMgd29yaywgeW91ICh0aGUgbGljZW5zZWUpIGFncmVlIHRoYXQgeW91IGhhdmUgcmVhZCwgdW5kZXJzdG9vZCwgYW5kIHdpbGwgY29tcGx5IHdpdGggdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9uczoKLVBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLKAgZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBvciByb3lhbHR5IGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHlvdSBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgb24gQUxMIGNvcGllcyBvZiB0aGUgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24gb3IgcG9ydGlvbnMgdGhlcmVvZiwgaW5jbHVkaW5nIG1vZGlmaWNhdGlvbnMsIHRoYXQgeW91IG1ha2U6Ci0xLlRoZSBmdWxsIHRleHQgb2YgdGhpcyBOT1RJQ0UgaW4gYSBsb2NhdGlvbiB2aWV3YWJsZSB0byB1c2VycyBvZiB0aGUgcmVkaXN0cmlidXRlZCBvciBkZXJpdmF0aXZlIHdvcmsuIAotMi5BbnkgcHJlLWV4aXN0aW5nIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBkaXNjbGFpbWVycywgbm90aWNlcywgb3IgdGVybXMgYW5kIGNvbmRpdGlvbnMuIElmIG5vbmUgZXhpc3QsIGEgc2hvcnQgbm90aWNlIG9mIHRoZSBmb2xsb3dpbmcgZm9ybSAoaHlwZXJ0ZXh0IGlzIHByZWZlcnJlZCwgdGV4dCBpcyBwZXJtaXR0ZWQpIHNob3VsZCBiZSB1c2VkIHdpdGhpbiB0aGUgYm9keSBvZiBhbnkgcmVkaXN0cmlidXRlZCBvciBkZXJpdmF0aXZlIGNvZGU6ICJDb3B5cmlnaHQgqSBbJGRhdGUtb2Ytc29mdHdhcmVdIFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0sIChNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0IGVuIEF1dG9tYXRpcXVlLCBLZWlvIFVuaXZlcnNpdHkpLiBBbGwgUmlnaHRzIFJlc2VydmVkLiBodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsLyIgCi0zLk5vdGljZSBvZiBhbnkgY2hhbmdlcyBvciBtb2RpZmljYXRpb25zIHRvIHRoZSBXM0MgZmlsZXMsIGluY2x1ZGluZyB0aGUgZGF0ZSBjaGFuZ2VzIHdlcmUgbWFkZS4gKFdlIHJlY29tbWVuZCB5b3UgcHJvdmlkZSBVUklzIHRvIHRoZSBsb2NhdGlvbiBmcm9tIHdoaWNoIHRoZSBjb2RlIGlzIGRlcml2ZWQuKSAKLVRISVMgU09GVFdBUkUgQU5EIERPQ1VNRU5UQVRJT04gSVMgUFJPVklERUQgIkFTIElTLCIgQU5EIENPUFlSSUdIVCBIT0xERVJTIE1BS0UgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTywgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQU5ZIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBUSEFUIFRIRSBVU0UgT0YgVEhFIFNPRlRXQVJFIE9SIERPQ1VNRU5UQVRJT04gV0lMTCBOT1QgSU5GUklOR0UgQU5ZIFRISVJEIFBBUlRZIFBBVEVOVFMsIENPUFlSSUdIVFMsIFRSQURFTUFSS1MgT1IgT1RIRVIgUklHSFRTLgotQ09QWVJJR0hUIEhPTERFUlMgV0lMTCBOT1QgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgQU5ZIFVTRSBPRiBUSEUgU09GVFdBUkUgT1IgRE9DVU1FTlRBVElPTi4KLVRoZSBuYW1lIGFuZCB0cmFkZW1hcmtzIG9mIGNvcHlyaWdodCBob2xkZXJzIG1heSBOT1QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiBUaXRsZSB0byBjb3B5cmlnaHQgaW4gdGhpcyBzb2Z0d2FyZSBhbmQgYW55IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiB3aWxsIGF0IGFsbCB0aW1lcyByZW1haW4gd2l0aCBjb3B5cmlnaHQgaG9sZGVycy4KLV9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwotVGhpcyBmb3JtdWxhdGlvbiBvZiBXM0MncyBub3RpY2UgYW5kIGxpY2Vuc2UgYmVjYW1lIGFjdGl2ZSBvbiBBdWd1c3QgMTQgMTk5OCBzbyBhcyB0byBpbXByb3ZlIGNvbXBhdGliaWxpdHkgd2l0aCBHUEwuIFRoaXMgdmVyc2lvbiBlbnN1cmVzIHRoYXQgVzNDIHNvZnR3YXJlIGxpY2Vuc2luZyB0ZXJtcyBhcmUgbm8gbW9yZSByZXN0cmljdGl2ZSB0aGFuIEdQTCBhbmQgY29uc2VxdWVudGx5IFczQyBzb2Z0d2FyZSBtYXkgYmUgZGlzdHJpYnV0ZWQgaW4gR1BMIHBhY2thZ2VzLiBTZWUgdGhlIG9sZGVyIGZvcm11bGF0aW9uIGZvciB0aGUgcG9saWN5IHByaW9yIHRvIHRoaXMgZGF0ZS4gUGxlYXNlIHNlZSBvdXIgQ29weXJpZ2h0IEZBUSBmb3IgY29tbW9uIHF1ZXN0aW9ucyBhYm91dCB1c2luZyBtYXRlcmlhbHMgZnJvbSBvdXIgc2l0ZSwgaW5jbHVkaW5nIHNwZWNpZmljIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBwYWNrYWdlcyBsaWtlIGxpYnd3dywgQW1heWEsIGFuZCBKaWdzYXcuIE90aGVyIHF1ZXN0aW9ucyBhYm91dCB0aGlzIG5vdGljZSBjYW4gYmUgZGlyZWN0ZWQgdG8gc2l0ZS1wb2xpY3lAdzMub3JnLgotoAotJSUgVGhpcyBub3RpY2UgaXMgcHJvdmlkZWQgd2l0aCByZXNwZWN0IHRvIGpzY2hlbWUuamFyLCB3aGljaCBtYXkgYmUgaW5jbHVkZWQgd2l0aCB0aGlzIHNvZnR3YXJlOiAKLVNvZnR3YXJlIExpY2Vuc2UgQWdyZWVtZW50Ci1Db3B5cmlnaHQgqSAxOTk4LTIwMDIgYnkgUGV0ZXIgTm9ydmlnLiAKLVBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUsIGluIHNvdXJjZSBvciBvYmplY3QgY29kZSBmb3JtLCBvbiBhbnkgY29tcHV0ZXIgc3lzdGVtLCBhbmQgdG8gbW9kaWZ5LCBjb21waWxlLCBkZWNvbXBpbGUsIHJ1biwgYW5kIHJlZGlzdHJpYnV0ZSBpdCB0byBhbnlvbmUgZWxzZSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczogCi0xLlRoZSBhdXRob3IgbWFrZXMgbm8gd2FycmFudHkgb2YgYW55IGtpbmQsIGVpdGhlciBleHByZXNzZWQgb3IgaW1wbGllZCwgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLgotMi5UaGUgYXV0aG9yIGFjY2VwdHMgbm8gbGlhYmlsaXR5IG9mIGFueSBraW5kIGZvciBkYW1hZ2VzIG9yIG90aGVyIGNvbnNlcXVlbmNlcyBvZiB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUsIGV2ZW4gaWYgdGhleSBhcmlzZSBmcm9tIGRlZmVjdHMgaW4gdGhlIHNvZnR3YXJlLgotMy5UaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQsIGVpdGhlciBieSBleHBsaWNpdCBjbGFpbSBvciBieSBvbWlzc2lvbi4KLTQuQWx0ZXJlZCB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuIEFsdGVyZWQgdmVyc2lvbnMgbWF5IGJlIGRpc3RyaWJ1dGVkIGluIHBhY2thZ2VzIHVuZGVyIG90aGVyIGxpY2Vuc2VzIChzdWNoIGFzIHRoZSBHTlUgbGljZW5zZSkuIAotSWYgeW91IGZpbmQgdGhpcyBzb2Z0d2FyZSB1c2VmdWwsIGl0IHdvdWxkIGJlIG5pY2UgaWYgeW91IGxldCBtZSAocGV0ZXJAbm9ydmlnLmNvbSkga25vdyBhYm91dCBpdCwgYW5kIG5pY2VyIHN0aWxsIGlmIHlvdSBzZW5kIG1lIG1vZGlmaWNhdGlvbnMgdGhhdCB5b3UgYXJlIHdpbGxpbmcgdG8gc2hhcmUuIEhvd2V2ZXIsIHlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGRvIHNvLgotCi0KLSUlIFRoaXMgbm90aWNlIGlzIHByb3ZpZGVkIHdpdGggcmVzcGVjdCB0byBQQy9TQyBMaXRlIGZvciBTdXNlIExpbnV4IHYuIDEuMS4xLCB3aGljaCBtYXkgYmUgaW5jbHVkZWQgd2l0aCB0aGlzIHNvZnR3YXJlOiAKLQotQ29weXJpZ2h0IChjKSAxOTk5LTIwMDQgRGF2aWQgQ29yY29yYW4gCi1BbGwgcmlnaHRzIHJlc2VydmVkLgotCi1SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLW1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotYXJlIG1ldDoKLQotMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLTIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCi0gICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLQotQ2hhbmdlcyB0byB0aGlzIGxpY2Vuc2UgY2FuIGJlIG1hZGUgb25seSBieSB0aGUgY29weXJpZ2h0IGF1dGhvciB3aXRoIAotZXhwbGljaXQgd3JpdHRlbiBjb25zZW50LgotCi1USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgotSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KLUlOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLUlOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi1USEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLVRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLQotJSUgVGhpcyBub3RpY2UgaXMgcHJvdmlkZWQgd2l0aCByZXNwZWN0IHRvIElBSUsgUEtDUyBXcmFwcGVyLCB3aGljaCBtYXkgYmUgaW5jbHVkZWQgd2l0aCB0aGlzIHNvZnR3YXJlOiAKLQotQ29weXJpZ2h0IChjKSAyMDAyIEdyYXogVW5pdmVyc2l0eSBvZiBUZWNobm9sb2d5LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0KLQotMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0KLTIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0KLTMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLCBpZiBhbnksIG11c3QgICBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0KLSAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IElBSUsgb2YgR3JheiBVbml2ZXJzaXR5IG9mICAgIFRlY2hub2xvZ3kuIgotCi0gICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsIGlmIGFuZCAgIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLQotNC4gVGhlIG5hbWVzICJHcmF6IFVuaXZlcnNpdHkgb2YgVGVjaG5vbG9neSIgYW5kICJJQUlLIG9mIEdyYXogVW5pdmVyc2l0eSBvZiAgIFRlY2hub2xvZ3kiIG11c3Qgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0KLTUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJJQUlLIFBLQ1MgV3JhcHBlciIsICAgbm9yIG1heSAiSUFJSyIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIG9mICAgR3JheiBVbml2ZXJzaXR5IG9mIFRlY2hub2xvZ3kuCi0KLVRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi1XQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLVdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLVBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBMSUNFTlNPUiBCRQotTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAotT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLVBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLAotT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLUFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLU9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKLVBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0lJSBUaGlzIG5vdGljZSBpcyBwcm92aWRlZCB3aXRoIHJlc3BlY3QgdG8gRG9jdW1lbnQgT2JqZWN0IE1vZGVsIChET00pIHYuIExldmVsIDMsIHdoaWNoIG1heSBiZSBpbmNsdWRlZCB3aXRoIHRoaXMgc29mdHdhcmU6IAotCi1XM0PDvcO9IFNPRlRXQVJFIE5PVElDRSBBTkQgTElDRU5TRQotCi1odHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsLzIwMDIvY29weXJpZ2h0LXNvZnR3YXJlLTIwMDIxMjMxCi0KLVRoaXMgd29yayAoYW5kIGluY2x1ZGVkIHNvZnR3YXJlLCBkb2N1bWVudGF0aW9uIHN1Y2ggYXMgUkVBRE1Fcywgb3Igb3RoZXIgcmVsYXRlZCBpdGVtcykgaXMgYmVpbmcKLXByb3ZpZGVkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVycyB1bmRlciB0aGUgZm9sbG93aW5nIGxpY2Vuc2UuIEJ5IG9idGFpbmluZywgdXNpbmcgYW5kL29yIGNvcHlpbmcgdGhpcyB3b3JrLCB5b3UKLSh0aGUgbGljZW5zZWUpIGFncmVlIHRoYXQgeW91IGhhdmUgcmVhZCwgdW5kZXJzdG9vZCwgYW5kIHdpbGwgY29tcGx5IHdpdGggdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4KLQotUGVybWlzc2lvbiB0byBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBmb3IKLWFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBvciByb3lhbHR5IGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHlvdSBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgb24gQUxMIGNvcGllcwotb2YgdGhlIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uIG9yIHBvcnRpb25zIHRoZXJlb2YsIGluY2x1ZGluZyBtb2RpZmljYXRpb25zOgotICAgMS5UaGUgZnVsbCB0ZXh0IG9mIHRoaXMgTk9USUNFIGluIGEgbG9jYXRpb24gdmlld2FibGUgdG8gdXNlcnMgb2YgdGhlIHJlZGlzdHJpYnV0ZWQgb3IgZGVyaXZhdGl2ZSB3b3JrLiAKLSAgIDIuQW55IHByZS1leGlzdGluZyBpbnRlbGxlY3R1YWwgcHJvcGVydHkgZGlzY2xhaW1lcnMsIG5vdGljZXMsIG9yIHRlcm1zIGFuZCBjb25kaXRpb25zLiBJZiBub25lIGV4aXN0LCB0aGUKLSAgICAgVzNDIFNvZnR3YXJlIFNob3J0IE5vdGljZSBzaG91bGQgYmUgaW5jbHVkZWQgKGh5cGVydGV4dCBpcyBwcmVmZXJyZWQsIHRleHQgaXMgcGVybWl0dGVkKSB3aXRoaW4gdGhlIGJvZHkKLSAgICAgb2YgYW55IHJlZGlzdHJpYnV0ZWQgb3IgZGVyaXZhdGl2ZSBjb2RlLiAKLSAgIDMuTm90aWNlIG9mIGFueSBjaGFuZ2VzIG9yIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGZpbGVzLCBpbmNsdWRpbmcgdGhlIGRhdGUgY2hhbmdlcyB3ZXJlIG1hZGUuIChXZQotICAgICByZWNvbW1lbmQgeW91IHByb3ZpZGUgVVJJcyB0byB0aGUgbG9jYXRpb24gZnJvbSB3aGljaCB0aGUgY29kZSBpcyBkZXJpdmVkLikgCi1USElTIFNPRlRXQVJFIEFORCBET0NVTUVOVEFUSU9OIElTIFBST1ZJREVEICJBUyBJUywiIEFORCBDT1BZUklHSFQgSE9MREVSUyBNQUtFTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTywKLVdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEFOWSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgVEhBVCBUSEVVU0UgT0YgVEhFIFNPRlRXQVJFIE9SIERPQ1VNRU5UQVRJT04gV0lMTCBOT1QgSU5GUklOR0UgQU5ZIFRISVJEIFBBUlRZIFBBVEVOVFMsQ09QWVJJR0hUUywgVFJBREVNQVJLUyBPUiBPVEhFUiBSSUdIVFMuCi0KLUNPUFlSSUdIVCBIT0xERVJTIFdJTEwgTk9UIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIFNQRUNJQUwgT1JDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgQU5ZIFVTRSBPRiBUSEUgU09GVFdBUkUgT1IgRE9DVU1FTlRBVElPTi4KLVRoZSBuYW1lIGFuZCB0cmFkZW1hcmtzIG9mIGNvcHlyaWdodCBob2xkZXJzIG1heSBOT1QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byB0aGUKLXNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gVGl0bGUgdG8gY29weXJpZ2h0IGluIHRoaXMgc29mdHdhcmUgYW5kIGFueSBhc3NvY2lhdGVkCi1kb2N1bWVudGF0aW9uIHdpbGwgYXQgYWxsIHRpbWVzIHJlbWFpbiB3aXRoIGNvcHlyaWdodCBob2xkZXJzLgotCi1fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KLQotVGhpcyBmb3JtdWxhdGlvbiBvZiBXM0MncyBub3RpY2UgYW5kIGxpY2Vuc2UgYmVjYW1lIGFjdGl2ZSBvbiBEZWNlbWJlciAzMSAyMDAyLiBUaGlzIHZlcnNpb24gcmVtb3ZlcyB0aGUKLWNvcHlyaWdodCBvd25lcnNoaXAgbm90aWNlIHN1Y2ggdGhhdCB0aGlzIGxpY2Vuc2UgY2FuIGJlIHVzZWQgd2l0aCBtYXRlcmlhbHMgb3RoZXIgdGhhbiB0aG9zZSBvd25lZCBieSB0aGUKLVczQywgcmVmbGVjdHMgdGhhdCBFUkNJTSBpcyBub3cgYSBob3N0IG9mIHRoZSBXM0MsIGluY2x1ZGVzIHJlZmVyZW5jZXMgdG8gdGhpcyBzcGVjaWZpYyBkYXRlZCB2ZXJzaW9uIG9mIHRoZQotbGljZW5zZSwgYW5kIHJlbW92ZXMgdGhlIGFtYmlndW91cyBncmFudCBvZiAidXNlIi4gT3RoZXJ3aXNlLCB0aGlzIHZlcnNpb24gaXMgdGhlIHNhbWUgYXMgdGhlIHByZXZpb3VzCi12ZXJzaW9uIGFuZCBpcyB3cml0dGVuIHNvIGFzIHRvIHByZXNlcnZlIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24ncyBhc3Nlc3NtZW50IG9mIEdQTCBjb21wYXRpYmlsaXR5IGFuZAotT1NJJ3MgY2VydGlmaWNhdGlvbiB1bmRlciB0aGUgT3BlbiBTb3VyY2UgRGVmaW5pdGlvbi4gUGxlYXNlIHNlZSBvdXIgQ29weXJpZ2h0IEZBUSBmb3IgY29tbW9uIHF1ZXN0aW9ucwotYWJvdXQgdXNpbmcgbWF0ZXJpYWxzIGZyb20gb3VyIHNpdGUsIGluY2x1ZGluZyBzcGVjaWZpYyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgcGFja2FnZXMgbGlrZSBsaWJ3d3csIEFtYXlhLAotYW5kIEppZ3Nhdy4gT3RoZXIgcXVlc3Rpb25zIGFib3V0IHRoaXMgbm90aWNlIGNhbiBiZSBkaXJlY3RlZCB0byAKLXNpdGUtcG9saWN5QHczLm9yZy4KLQotJSUgVGhpcyBub3RpY2UgaXMgcHJvdmlkZWQgd2l0aCByZXNwZWN0IHRvIFhhbGFuLCBYZXJjZXMsIHdoaWNoIG1heSBiZSBpbmNsdWRlZCB3aXRoIHRoaXMgc29mdHdhcmU6IAotCi0vKgotICogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotICoKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzICAqIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuICAqCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotICogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotICogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0gKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSAqICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwgKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLiAqCi0gKiA0LiBUaGUgbmFtZXMgIlhlcmNlcyIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdAotICogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0gKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0gKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSAqCi0gKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIiwKLSAqICAgIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotICogICAgcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0gKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0gKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqCi0gKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotICogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0gKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMTk5OSwgSW50ZXJuYXRpb25hbAotICogQnVzaW5lc3MgTWFjaGluZXMsIEluYy4sIGh0dHA6Ly93d3cuaWJtLmNvbS4gIEZvciBtb3JlCi0gKiBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUKLSAqIAotCi0lJSBUaGlzIG5vdGljZSBpcyBwcm92aWRlZCB3aXRoIHJlc3BlY3QgdG8gSmF2YVNjcmlwdCwgd2hpY2ggbWF5IGJlIGluY2x1ZGVkIHdpdGggdGhpcyBzb2Z0d2FyZTogCi0KLUFNRU5ETUVOVFMgCi1UaGUgTmV0c2NhcGUgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKCJOUEwiKSBjb25zaXN0cyBvZiB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSB3aXRoIHRoZSBmb2xsb3dpbmcgQW1lbmRtZW50cywgaW5jbHVkaW5nIEV4aGliaXQgQS1OZXRzY2FwZSBQdWJsaWMgTGljZW5zZS6gIEZpbGVzIGlkZW50aWZpZWQgd2l0aCAiRXhoaWJpdCBBLU5ldHNjYXBlIFB1YmxpYyBMaWNlbnNlIiBhcmUgZ292ZXJuZWQgYnkgdGhlIE5ldHNjYXBlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xLiAKLUFkZGl0aW9uYWwgVGVybXMgYXBwbGljYWJsZSB0byB0aGUgTmV0c2NhcGUgUHVibGljIExpY2Vuc2UuIAotSS4gRWZmZWN0LiAKLVRoZXNlIGFkZGl0aW9uYWwgdGVybXMgZGVzY3JpYmVkIGluIHRoaXMgTmV0c2NhcGUgUHVibGljIExpY2Vuc2UgLS0gQW1lbmRtZW50cyBzaGFsbCBhcHBseSB0byB0aGUgTW96aWxsYSBDb21tdW5pY2F0b3IgY2xpZW50IGNvZGUgYW5kIHRvIGFsbCBDb3ZlcmVkIENvZGUgdW5kZXIgdGhpcyBMaWNlbnNlLiAKLUlJLiAnJ05ldHNjYXBlJ3MgQnJhbmRlZCBDb2RlJycgbWVhbnMgQ292ZXJlZCBDb2RlIHRoYXQgTmV0c2NhcGUgZGlzdHJpYnV0ZXMgYW5kL29yIHBlcm1pdHMgb3RoZXJzIHRvIGRpc3RyaWJ1dGUgdW5kZXIgb25lIG9yIG1vcmUgdHJhZGVtYXJrKHMpIHdoaWNoIGFyZSBjb250cm9sbGVkIGJ5IE5ldHNjYXBlIGJ1dCB3aGljaCBhcmUgbm90IGxpY2Vuc2VkIGZvciB1c2UgdW5kZXIgdGhpcyBMaWNlbnNlLiAKLUlJSS4gTmV0c2NhcGUgYW5kIGxvZ28uIAotVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IGFueSByaWdodHMgdG8gdXNlIHRoZSB0cmFkZW1hcmtzICJOZXRzY2FwZScnLCB0aGUgIk5ldHNjYXBlIE4gYW5kIGhvcml6b24nJyBsb2dvIG9yIHRoZSAiTmV0c2NhcGUgbGlnaHRob3VzZSIgbG9nbywgIk5ldGNlbnRlciIsICJHZWNrbyIsICJKYXZhIiBvciAiSmF2YVNjcmlwdCIsICJTbWFydCBCcm93c2luZyIgZXZlbiBpZiBzdWNoIG1hcmtzIGFyZSBpbmNsdWRlZCBpbiB0aGUgT3JpZ2luYWwgQ29kZSBvciBNb2RpZmljYXRpb25zLiAKLUlWLiBJbmFiaWxpdHkgdG8gQ29tcGx5IER1ZSB0byBDb250cmFjdHVhbCBPYmxpZ2F0aW9uLiAKLVByaW9yIHRvIGxpY2Vuc2luZyB0aGUgT3JpZ2luYWwgQ29kZSB1bmRlciB0aGlzIExpY2Vuc2UsIE5ldHNjYXBlIGhhcyBsaWNlbnNlZCB0aGlyZCBwYXJ0eSBjb2RlIGZvciB1c2UgaW4gTmV0c2NhcGUncyBCcmFuZGVkIENvZGUuIFRvIHRoZSBleHRlbnQgdGhhdCBOZXRzY2FwZSBpcyBsaW1pdGVkIGNvbnRyYWN0dWFsbHkgZnJvbSBtYWtpbmcgc3VjaCB0aGlyZCBwYXJ0eSBjb2RlIGF2YWlsYWJsZSB1bmRlciB0aGlzIExpY2Vuc2UsIE5ldHNjYXBlIG1heSBjaG9vc2UgdG8gcmVpbnRlZ3JhdGUgc3VjaCBjb2RlIGludG8gQ292ZXJlZCBDb2RlIHdpdGhvdXQgYmVpbmcgcmVxdWlyZWQgdG8gZGlzdHJpYnV0ZSBzdWNoIGNvZGUgaW4gU291cmNlIENvZGUgZm9ybSwgZXZlbiBpZiBzdWNoIGNvZGUgd291bGQgb3RoZXJ3aXNlIGJlIGNvbnNpZGVyZWQgJydNb2RpZmljYXRpb25zJycgdW5kZXIgdGhpcyBMaWNlbnNlLiAKLVYuIFVzZSBvZiBNb2RpZmljYXRpb25zIGFuZCBDb3ZlcmVkIENvZGUgYnkgSW5pdGlhbCBEZXZlbG9wZXIuIAotVi4xLiBJbiBHZW5lcmFsLiAKLVRoZSBvYmxpZ2F0aW9ucyBvZiBTZWN0aW9uIDMgYXBwbHkgdG8gTmV0c2NhcGUsIGV4Y2VwdCB0byB0aGUgZXh0ZW50IHNwZWNpZmllZCBpbiB0aGlzIEFtZW5kbWVudCwgU2VjdGlvbiBWLjIgYW5kIFYuMy4gCi1WLjIuIE90aGVyIFByb2R1Y3RzLiAKLU5ldHNjYXBlIG1heSBpbmNsdWRlIENvdmVyZWQgQ29kZSBpbiBwcm9kdWN0cyBvdGhlciB0aGFuIHRoZSBOZXRzY2FwZSdzIEJyYW5kZWQgQ29kZSB3aGljaCBhcmUgcmVsZWFzZWQgYnkgTmV0c2NhcGUgZHVyaW5nIHRoZSB0d28gKDIpIHllYXJzIGZvbGxvd2luZyB0aGUgcmVsZWFzZSBkYXRlIG9mIHRoZSBPcmlnaW5hbCBDb2RlLCB3aXRob3V0IHN1Y2ggYWRkaXRpb25hbCBwcm9kdWN0cyBiZWNvbWluZyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBtYXkgbGljZW5zZSBzdWNoIGFkZGl0aW9uYWwgcHJvZHVjdHMgb24gZGlmZmVyZW50IHRlcm1zIGZyb20gdGhvc2UgY29udGFpbmVkIGluIHRoaXMgTGljZW5zZS4gCi1WLjMuIEFsdGVybmF0aXZlIExpY2Vuc2luZy4gCi1OZXRzY2FwZSBtYXkgbGljZW5zZSB0aGUgU291cmNlIENvZGUgb2YgTmV0c2NhcGUncyBCcmFuZGVkIENvZGUsIGluY2x1ZGluZyBNb2RpZmljYXRpb25zIGluY29ycG9yYXRlZCB0aGVyZWluLCB3aXRob3V0IHN1Y2ggTmV0c2NhcGUgQnJhbmRlZCBDb2RlIGJlY29taW5nIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIG1heSBsaWNlbnNlIHN1Y2ggTmV0c2NhcGUgQnJhbmRlZCBDb2RlIG9uIGRpZmZlcmVudCB0ZXJtcyBmcm9tIHRob3NlIGNvbnRhaW5lZCBpbiB0aGlzIExpY2Vuc2UuIAotoAotVkkuIExpdGlnYXRpb24uIAotTm90d2l0aHN0YW5kaW5nIHRoZSBsaW1pdGF0aW9ucyBvZiBTZWN0aW9uIDExIGFib3ZlLCB0aGUgcHJvdmlzaW9ucyByZWdhcmRpbmcgbGl0aWdhdGlvbiBpbiBTZWN0aW9uIDExKGEpLCAoYikgYW5kIChjKSBvZiB0aGUgTGljZW5zZSBzaGFsbCBhcHBseSB0byBhbGwgZGlzcHV0ZXMgcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlLgotCi1FWEhJQklUIEEtTmV0c2NhcGUgUHVibGljIExpY2Vuc2UuIAotoCAKLScnVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTmV0c2NhcGUgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL05QTC8gCi1Tb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4gCi1UaGUgT3JpZ2luYWwgQ29kZSBpcyBNb3ppbGxhIENvbW11bmljYXRvciBjbGllbnQgY29kZSwgcmVsZWFzZWQgTWFyY2ggMzEsIDE5OTguIAotVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzIE5ldHNjYXBlIENvbW11bmljYXRpb25zIENvcnBvcmF0aW9uLiBQb3J0aW9ucyBjcmVhdGVkIGJ5IE5ldHNjYXBlIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTgtMTk5OSBOZXRzY2FwZSBDb21tdW5pY2F0aW9ucyBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gCi1Db250cmlidXRvcihzKTogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18uCi2gIAotQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIF9fX19fIGxpY2Vuc2UgKHRoZaAgIltfX19dIExpY2Vuc2UiKSwgaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiBbX19fX19fXSBMaWNlbnNlIGFyZSBhcHBsaWNhYmxloCBpbnN0ZWFkIG9mIHRob3NlIGFib3ZlLqAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIFtfX19fXSBMaWNlbnNlIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBOUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24gYnkgZGVsZXRpbmegIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNloCB0aGVtIHdpdGggdGhlIG5vdGljZSBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgW19fX10gTGljZW5zZS6gIElmIHlvdSBkbyBub3QgZGVsZXRlIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgZWl0aGVyIHRoZSBOUEwgb3IgdGhlIFtfX19dIExpY2Vuc2UuIgotCi1NT1pJTExBIFBVQkxJQyBMSUNFTlNFIAotVmVyc2lvbiAxLjEgCi0KLTEuIERlZmluaXRpb25zLiAKLTEuMC4xLiAiQ29tbWVyY2lhbCBVc2UiIG1lYW5zIGRpc3RyaWJ1dGlvbiBvciBvdGhlcndpc2UgbWFraW5nIHRoZSBDb3ZlcmVkIENvZGUgYXZhaWxhYmxlIHRvIGEgdGhpcmQgcGFydHkuIAotMS4xLiAnJ0NvbnRyaWJ1dG9yJycgbWVhbnMgZWFjaCBlbnRpdHkgdGhhdCBjcmVhdGVzIG9yIGNvbnRyaWJ1dGVzIHRvIHRoZSBjcmVhdGlvbiBvZiBNb2RpZmljYXRpb25zLiAKLTEuMi4gJydDb250cmlidXRvciBWZXJzaW9uJycgbWVhbnMgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlLCBwcmlvciBNb2RpZmljYXRpb25zIHVzZWQgYnkgYSBDb250cmlidXRvciwgYW5kIHRoZSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiAKLTEuMy4gJydDb3ZlcmVkIENvZGUnJyBtZWFucyB0aGUgT3JpZ2luYWwgQ29kZSBvciBNb2RpZmljYXRpb25zIG9yIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSBhbmQgTW9kaWZpY2F0aW9ucywgaW4gZWFjaCBjYXNlIGluY2x1ZGluZyBwb3J0aW9ucyB0aGVyZW9mLiAKLTEuNC4gJydFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20nJyBtZWFucyBhIG1lY2hhbmlzbSBnZW5lcmFsbHkgYWNjZXB0ZWQgaW4gdGhlIHNvZnR3YXJlIGRldmVsb3BtZW50IGNvbW11bml0eSBmb3IgdGhlIGVsZWN0cm9uaWMgdHJhbnNmZXIgb2YgZGF0YS4gCi0xLjUuICcnRXhlY3V0YWJsZScnIG1lYW5zIENvdmVyZWQgQ29kZSBpbiBhbnkgZm9ybSBvdGhlciB0aGFuIFNvdXJjZSBDb2RlLiAKLTEuNi4gJydJbml0aWFsIERldmVsb3BlcicnIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSBpZGVudGlmaWVkIGFzIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQS4gCi0xLjcuICcnTGFyZ2VyIFdvcmsnJyBtZWFucyBhIHdvcmsgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBDb2RlIG9yIHBvcnRpb25zIHRoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiAKLTEuOC4gJydMaWNlbnNlJycgbWVhbnMgdGhpcyBkb2N1bWVudC4gCi0xLjguMS4gIkxpY2Vuc2FibGUiIG1lYW5zIGhhdmluZyB0aGUgcmlnaHQgdG8gZ3JhbnQsIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZSwgd2hldGhlciBhdCB0aGUgdGltZSBvZiB0aGUgaW5pdGlhbCBncmFudCBvciBzdWJzZXF1ZW50bHkgYWNxdWlyZWQsIGFueSBhbmQgYWxsIG9mIHRoZSByaWdodHMgY29udmV5ZWQgaGVyZWluLiAKLTEuOS4gJydNb2RpZmljYXRpb25zJycgbWVhbnMgYW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIHN1YnN0YW5jZSBvciBzdHJ1Y3R1cmUgb2YgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFueSBwcmV2aW91cyBNb2RpZmljYXRpb25zLiBXaGVuIENvdmVyZWQgQ29kZSBpcyByZWxlYXNlZCBhcyBhIHNlcmllcyBvZiBmaWxlcywgYSBNb2RpZmljYXRpb24gaXM6IAotQS4gQW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBjb250YWluaW5nIE9yaWdpbmFsIENvZGUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4gCi1CLiBBbnkgbmV3IGZpbGUgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiB0aGUgT3JpZ2luYWwgQ29kZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zLiAKLaAKLTEuMTAuICcnT3JpZ2luYWwgQ29kZScnIG1lYW5zIFNvdXJjZSBDb2RlIG9mIGNvbXB1dGVyIHNvZnR3YXJlIGNvZGUgd2hpY2ggaXMgZGVzY3JpYmVkIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdCBBIGFzIE9yaWdpbmFsIENvZGUsIGFuZCB3aGljaCwgYXQgdGhlIHRpbWUgb2YgaXRzIHJlbGVhc2UgdW5kZXIgdGhpcyBMaWNlbnNlIGlzIG5vdCBhbHJlYWR5IENvdmVyZWQgQ29kZSBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UuIAotMS4xMC4xLiAiUGF0ZW50IENsYWltcyIgbWVhbnMgYW55IHBhdGVudCBjbGFpbShzKSwgbm93IG93bmVkIG9yIGhlcmVhZnRlciBhY3F1aXJlZCwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiygIG1ldGhvZCwgcHJvY2VzcywgYW5kIGFwcGFyYXR1cyBjbGFpbXMsIGluIGFueSBwYXRlbnQgTGljZW5zYWJsZSBieSBncmFudG9yLiAKLTEuMTEuICcnU291cmNlIENvZGUnJyBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIENvdmVyZWQgQ29kZSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiBhbiBFeGVjdXRhYmxlLCBvciBzb3VyY2UgY29kZSBkaWZmZXJlbnRpYWwgY29tcGFyaXNvbnMgYWdhaW5zdCBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW5vdGhlciB3ZWxsIGtub3duLCBhdmFpbGFibGUgQ292ZXJlZCBDb2RlIG9mIHRoZSBDb250cmlidXRvcidzIGNob2ljZS4gVGhlIFNvdXJjZSBDb2RlIGNhbiBiZSBpbiBhIGNvbXByZXNzZWQgb3IgYXJjaGl2YWwgZm9ybSwgcHJvdmlkZWQgdGhlIGFwcHJvcHJpYXRlIGRlY29tcHJlc3Npb24gb3IgZGUtYXJjaGl2aW5nIHNvZnR3YXJlIGlzIHdpZGVseSBhdmFpbGFibGUgZm9yIG5vIGNoYXJnZS4gCi0xLjEyLiAiWW91JycgKG9yICJZb3VyIimgIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXNzdWVkIHVuZGVyIFNlY3Rpb24gNi4xLiBGb3IgbGVnYWwgZW50aXRpZXMsICJZb3UnJyBpbmNsdWRlcyBhbnkgZW50aXR5IHdoaWNoIGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIFlvdS4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wnJyBtZWFucyAoYSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgbW9yZSB0aGFuIGZpZnR5IHBlcmNlbnQgKDUwJSkgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KLTIuIFNvdXJjZSBDb2RlIExpY2Vuc2UuIAotMi4xLiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgR3JhbnQuIAotVGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltczogCi0oYSmgIHVuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yIHRyYWRlbWFyaykgTGljZW5zYWJsZSBieSBJbml0aWFsIERldmVsb3BlciB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSB3aXRoIG9yIHdpdGhvdXQgTW9kaWZpY2F0aW9ucywgYW5kL29yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kIAotKGIpIHVuZGVyIFBhdGVudHMgQ2xhaW1zIGluZnJpbmdlZCBieSB0aGUgbWFraW5nLCB1c2luZyBvciBzZWxsaW5nIG9mIE9yaWdpbmFsIENvZGUsIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBwcmFjdGljZSwgc2VsbCwgYW5kIG9mZmVyIGZvciBzYWxlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2YgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpLiAKLaAKLShjKSB0aGUgbGljZW5zZXMgZ3JhbnRlZCBpbiB0aGlzIFNlY3Rpb24gMi4xKGEpIGFuZCAoYikgYXJlIGVmZmVjdGl2ZSBvbiB0aGUgZGF0ZSBJbml0aWFsIERldmVsb3BlciBmaXJzdCBkaXN0cmlidXRlcyBPcmlnaW5hbCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIAotKGQpIE5vdHdpdGhzdGFuZGluZyBTZWN0aW9uIDIuMShiKSBhYm92ZSwgbm8gcGF0ZW50IGxpY2Vuc2UgaXMgZ3JhbnRlZDogMSkgZm9yIGNvZGUgdGhhdCBZb3UgZGVsZXRlIGZyb20gdGhlIE9yaWdpbmFsIENvZGU7IDIpIHNlcGFyYXRlIGZyb20gdGhlIE9yaWdpbmFsIENvZGU7oCBvciAzKSBmb3IgaW5mcmluZ2VtZW50cyBjYXVzZWQgYnk6IGkpIHRoZSBtb2RpZmljYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgb3IgaWkpIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGRldmljZXMuIAotoAotMi4yLiBDb250cmlidXRvciBHcmFudC4gCi1TdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSAKLaAgCi0oYSmgIHVuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yIHRyYWRlbWFyaykgTGljZW5zYWJsZSBieSBDb250cmlidXRvciwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTW9kaWZpY2F0aW9ucyBjcmVhdGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpIGVpdGhlciBvbiBhbiB1bm1vZGlmaWVkIGJhc2lzLCB3aXRoIG90aGVyIE1vZGlmaWNhdGlvbnMsIGFzIENvdmVyZWQgQ29kZSBhbmQvb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQgCi0oYikgdW5kZXIgUGF0ZW50IENsYWltcyBpbmZyaW5nZWQgYnkgdGhlIG1ha2luZywgdXNpbmcsIG9yIHNlbGxpbmcgb2agIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIGVpdGhlciBhbG9uZSBhbmQvb3IgaW4gY29tYmluYXRpb24gd2l0aCBpdHMgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgb2Ygc3VjaCBjb21iaW5hdGlvbiksIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGhhdmUgbWFkZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mOiAxKSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciAob3IgcG9ydGlvbnMgdGhlcmVvZik7IGFuZCAyKSB0aGUgY29tYmluYXRpb24gb2agIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIHdpdGggaXRzIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIG9mIHN1Y2ggY29tYmluYXRpb24pLiAKLShjKSB0aGUgbGljZW5zZXMgZ3JhbnRlZCBpbiBTZWN0aW9ucyAyLjIoYSkgYW5kIDIuMihiKSBhcmUgZWZmZWN0aXZlIG9uIHRoZSBkYXRlIENvbnRyaWJ1dG9yIGZpcnN0IG1ha2VzIENvbW1lcmNpYWwgVXNlIG9mIHRoZSBDb3ZlcmVkIENvZGUuIAotKGQpoKCgIE5vdHdpdGhzdGFuZGluZyBTZWN0aW9uIDIuMihiKSBhYm92ZSwgbm8gcGF0ZW50IGxpY2Vuc2UgaXMgZ3JhbnRlZDogMSkgZm9yIGFueSBjb2RlIHRoYXQgQ29udHJpYnV0b3IgaGFzIGRlbGV0ZWQgZnJvbSB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbjsgMimgIHNlcGFyYXRlIGZyb20gdGhlIENvbnRyaWJ1dG9yIFZlcnNpb247oCAzKaAgZm9yIGluZnJpbmdlbWVudHMgY2F1c2VkIGJ5OiBpKSB0aGlyZCBwYXJ0eSBtb2RpZmljYXRpb25zIG9mIENvbnRyaWJ1dG9yIFZlcnNpb24gb3IgaWkpoCB0aGUgY29tYmluYXRpb24gb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3Igd2l0aCBvdGhlciBzb2Z0d2FyZaAgKGV4Y2VwdCBhcyBwYXJ0IG9mIHRoZSBDb250cmlidXRvciBWZXJzaW9uKSBvciBvdGhlciBkZXZpY2VzOyBvciA0KSB1bmRlciBQYXRlbnQgQ2xhaW1zIGluZnJpbmdlZCBieSBDb3ZlcmVkIENvZGUgaW4gdGhlIGFic2VuY2Ugb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IuCi0KLTMuIERpc3RyaWJ1dGlvbiBPYmxpZ2F0aW9ucy4gCi0zLjEuIEFwcGxpY2F0aW9uIG9mIExpY2Vuc2UuIAotVGhlIE1vZGlmaWNhdGlvbnMgd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBhcmUgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBTZWN0aW9uIDIuMi4gVGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIG1heSBiZSBkaXN0cmlidXRlZCBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgcmVsZWFzZWQgdW5kZXIgU2VjdGlvbiA2LjEsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBZb3UgZGlzdHJpYnV0ZS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBhbnkgU291cmNlIENvZGUgdmVyc2lvbiB0aGF0IGFsdGVycyBvciByZXN0cmljdHMgdGhlIGFwcGxpY2FibGUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHMnIHJpZ2h0cyBoZXJldW5kZXIuIEhvd2V2ZXIsIFlvdSBtYXkgaW5jbHVkZSBhbiBhZGRpdGlvbmFsIGRvY3VtZW50IG9mZmVyaW5nIHRoZSBhZGRpdGlvbmFsIHJpZ2h0cyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjUuIAotMy4yLiBBdmFpbGFiaWxpdHkgb2YgU291cmNlIENvZGUuIAotQW55IE1vZGlmaWNhdGlvbiB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIG11c3QgYmUgbWFkZSBhdmFpbGFibGUgaW4gU291cmNlIENvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGVpdGhlciBvbiB0aGUgc2FtZSBtZWRpYSBhcyBhbiBFeGVjdXRhYmxlIHZlcnNpb24gb3IgdmlhIGFuIGFjY2VwdGVkIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSB0byBhbnlvbmUgdG8gd2hvbSB5b3UgbWFkZSBhbiBFeGVjdXRhYmxlIHZlcnNpb24gYXZhaWxhYmxlOyBhbmQgaWYgbWFkZSBhdmFpbGFibGUgdmlhIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSwgbXVzdCByZW1haW4gYXZhaWxhYmxlIGZvciBhdCBsZWFzdCB0d2VsdmUgKDEyKSBtb250aHMgYWZ0ZXIgdGhlIGRhdGUgaXQgaW5pdGlhbGx5IGJlY2FtZSBhdmFpbGFibGUsIG9yIGF0IGxlYXN0IHNpeCAoNikgbW9udGhzIGFmdGVyIGEgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoYXQgcGFydGljdWxhciBNb2RpZmljYXRpb24gaGFzIGJlZW4gbWFkZSBhdmFpbGFibGUgdG8gc3VjaCByZWNpcGllbnRzLiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIHJlbWFpbnMgYXZhaWxhYmxlIGV2ZW4gaWYgdGhlIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSBpcyBtYWludGFpbmVkIGJ5IGEgdGhpcmQgcGFydHkuIAotMy4zLiBEZXNjcmlwdGlvbiBvZiBNb2RpZmljYXRpb25zLiAKLVlvdSBtdXN0IGNhdXNlIGFsbCBDb3ZlcmVkIENvZGUgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgdG8gY29udGFpbiBhIGZpbGUgZG9jdW1lbnRpbmcgdGhlIGNoYW5nZXMgWW91IG1hZGUgdG8gY3JlYXRlIHRoYXQgQ292ZXJlZCBDb2RlIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLiBZb3UgbXVzdCBpbmNsdWRlIGEgcHJvbWluZW50IHN0YXRlbWVudCB0aGF0IHRoZSBNb2RpZmljYXRpb24gaXMgZGVyaXZlZCwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgZnJvbSBPcmlnaW5hbCBDb2RlIHByb3ZpZGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgaW5jbHVkaW5nIHRoZSBuYW1lIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiAoYSkgdGhlIFNvdXJjZSBDb2RlLCBhbmQgKGIpIGluIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBpbiB3aGljaCBZb3UgZGVzY3JpYmUgdGhlIG9yaWdpbiBvciBvd25lcnNoaXAgb2YgdGhlIENvdmVyZWQgQ29kZS4gCi0zLjQuIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBNYXR0ZXJzIAotKGEpIFRoaXJkIFBhcnR5IENsYWltcy4gCi1JZiBDb250cmlidXRvciBoYXMga25vd2xlZGdlIHRoYXQgYSBsaWNlbnNlIHVuZGVyIGEgdGhpcmQgcGFydHkncyBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGlzIHJlcXVpcmVkIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIHVuZGVyIFNlY3Rpb25zIDIuMSBvciAyLjIsIENvbnRyaWJ1dG9yIG11c3QgaW5jbHVkZSBhIHRleHQgZmlsZSB3aXRoIHRoZSBTb3VyY2UgQ29kZSBkaXN0cmlidXRpb24gdGl0bGVkICJMRUdBTCcnIHdoaWNoIGRlc2NyaWJlcyB0aGUgY2xhaW0gYW5kIHRoZSBwYXJ0eSBtYWtpbmcgdGhlIGNsYWltIGluIHN1ZmZpY2llbnQgZGV0YWlsIHRoYXQgYSByZWNpcGllbnQgd2lsbCBrbm93IHdob20gdG8gY29udGFjdC4gSWYgQ29udHJpYnV0b3Igb2J0YWlucyBzdWNoIGtub3dsZWRnZSBhZnRlciB0aGUgTW9kaWZpY2F0aW9uIGlzIG1hZGUgYXZhaWxhYmxlIGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuMiwgQ29udHJpYnV0b3Igc2hhbGwgcHJvbXB0bHkgbW9kaWZ5IHRoZSBMRUdBTCBmaWxlIGluIGFsbCBjb3BpZXMgQ29udHJpYnV0b3IgbWFrZXMgYXZhaWxhYmxlIHRoZXJlYWZ0ZXIgYW5kIHNoYWxsIHRha2Ugb3RoZXIgc3RlcHMgKHN1Y2ggYXMgbm90aWZ5aW5nIGFwcHJvcHJpYXRlIG1haWxpbmcgbGlzdHMgb3IgbmV3c2dyb3VwcykgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIGluZm9ybSB0aG9zZSB3aG8gcmVjZWl2ZWQgdGhlIENvdmVyZWQgQ29kZSB0aGF0IG5ldyBrbm93bGVkZ2UgaGFzIGJlZW4gb2J0YWluZWQuIAotKGIpIENvbnRyaWJ1dG9yIEFQSXMuIAotSWYgQ29udHJpYnV0b3IncyBNb2RpZmljYXRpb25zIGluY2x1ZGUgYW4gYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIGFuZCBDb250cmlidXRvciBoYXMga25vd2xlZGdlIG9mIHBhdGVudCBsaWNlbnNlcyB3aGljaCBhcmUgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gaW1wbGVtZW50IHRoYXQgQVBJLCBDb250cmlidXRvciBtdXN0IGFsc28gaW5jbHVkZSB0aGlzIGluZm9ybWF0aW9uIGluIHRoZSBMRUdBTCBmaWxlLiAKLaAKLaCgoKCgoKCgoCAoYymgoKAgUmVwcmVzZW50YXRpb25zLiAKLUNvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCwgZXhjZXB0IGFzIGRpc2Nsb3NlZCBwdXJzdWFudCB0byBTZWN0aW9uIDMuNChhKSBhYm92ZSwgQ29udHJpYnV0b3IgYmVsaWV2ZXMgdGhhdCBDb250cmlidXRvcidzIE1vZGlmaWNhdGlvbnMgYXJlIENvbnRyaWJ1dG9yJ3Mgb3JpZ2luYWwgY3JlYXRpb24ocykgYW5kL29yIENvbnRyaWJ1dG9yIGhhcyBzdWZmaWNpZW50IHJpZ2h0cyB0byBncmFudCB0aGUgcmlnaHRzIGNvbnZleWVkIGJ5IHRoaXMgTGljZW5zZS4KLQotMy41LiBSZXF1aXJlZCBOb3RpY2VzLiAKLVlvdSBtdXN0IGR1cGxpY2F0ZSB0aGUgbm90aWNlIGluIEV4aGliaXQgQSBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZSBDb2RlLqAgSWYgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHB1dCBzdWNoIG5vdGljZSBpbiBhIHBhcnRpY3VsYXIgU291cmNlIENvZGUgZmlsZSBkdWUgdG8gaXRzIHN0cnVjdHVyZSwgdGhlbiBZb3UgbXVzdCBpbmNsdWRlIHN1Y2ggbm90aWNlIGluIGEgbG9jYXRpb24gKHN1Y2ggYXMgYSByZWxldmFudCBkaXJlY3RvcnkpIHdoZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3Igc3VjaCBhIG5vdGljZS6gIElmIFlvdSBjcmVhdGVkIG9uZSBvciBtb3JlIE1vZGlmaWNhdGlvbihzKSBZb3UgbWF5IGFkZCB5b3VyIG5hbWUgYXMgYSBDb250cmlidXRvciB0byB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEuoCBZb3UgbXVzdCBhbHNvIGR1cGxpY2F0ZSB0aGlzIExpY2Vuc2UgaW4gYW55IGRvY3VtZW50YXRpb24gZm9yIHRoZSBTb3VyY2UgQ29kZSB3aGVyZSBZb3UgZGVzY3JpYmUgcmVjaXBpZW50cycgcmlnaHRzIG9yIG93bmVyc2hpcCByaWdodHMgcmVsYXRpbmcgdG8gQ292ZXJlZCBDb2RlLqAgWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mIENvdmVyZWQgQ29kZS4gSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci4gWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYW4gYW55IHN1Y2ggd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbiBpcyBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgYW5kIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2Ygd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgdGVybXMgWW91IG9mZmVyLiAKLTMuNi4gRGlzdHJpYnV0aW9uIG9mIEV4ZWN1dGFibGUgVmVyc2lvbnMuIAotWW91IG1heSBkaXN0cmlidXRlIENvdmVyZWQgQ29kZSBpbiBFeGVjdXRhYmxlIGZvcm0gb25seSBpZiB0aGUgcmVxdWlyZW1lbnRzIG9mIFNlY3Rpb24gMy4xLTMuNSBoYXZlIGJlZW4gbWV0IGZvciB0aGF0IENvdmVyZWQgQ29kZSwgYW5kIGlmIFlvdSBpbmNsdWRlIGEgbm90aWNlIHN0YXRpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBvZiB0aGUgQ292ZXJlZCBDb2RlIGlzIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgYSBkZXNjcmlwdGlvbiBvZiBob3cgYW5kIHdoZXJlIFlvdSBoYXZlIGZ1bGZpbGxlZCB0aGUgb2JsaWdhdGlvbnMgb2YgU2VjdGlvbiAzLjIuIFRoZSBub3RpY2UgbXVzdCBiZSBjb25zcGljdW91c2x5IGluY2x1ZGVkIGluIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSB2ZXJzaW9uLCByZWxhdGVkIGRvY3VtZW50YXRpb24gb3IgY29sbGF0ZXJhbCBpbiB3aGljaCBZb3UgZGVzY3JpYmUgcmVjaXBpZW50cycgcmlnaHRzIHJlbGF0aW5nIHRvIHRoZSBDb3ZlcmVkIENvZGUuIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSBvciBvd25lcnNoaXAgcmlnaHRzIHVuZGVyIGEgbGljZW5zZSBvZiBZb3VyIGNob2ljZSwgd2hpY2ggbWF5IGNvbnRhaW4gdGVybXMgZGlmZmVyZW50IGZyb20gdGhpcyBMaWNlbnNlLCBwcm92aWRlZCB0aGF0IFlvdSBhcmUgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIHRoYXQgdGhlIGxpY2Vuc2UgZm9yIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gZG9lcyBub3QgYXR0ZW1wdCB0byBsaW1pdCBvciBhbHRlciB0aGUgcmVjaXBpZW50J3MgcmlnaHRzIGluIHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIGZyb20gdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gdGhpcyBMaWNlbnNlLiBJZiBZb3UgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UgWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55IHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgTGljZW5zZSBhcmUgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIG5vdCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIGFueSBzdWNoIHRlcm1zIFlvdSBvZmZlci4gCi0zLjcuIExhcmdlciBXb3Jrcy4gCi1Zb3UgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBDb3ZlcmVkIENvZGUgd2l0aCBvdGhlciBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBMYXJnZXIgV29yayBhcyBhIHNpbmdsZSBwcm9kdWN0LiBJbiBzdWNoIGEgY2FzZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIENvZGUuCi00LiBJbmFiaWxpdHkgdG8gQ29tcGx5IER1ZSB0byBTdGF0dXRlIG9yIFJlZ3VsYXRpb24uIAotSWYgaXQgaXMgaW1wb3NzaWJsZSBmb3IgWW91IHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byBzb21lIG9yIGFsbCBvZiB0aGUgQ292ZXJlZCBDb2RlIGR1ZSB0byBzdGF0dXRlLCBqdWRpY2lhbCBvcmRlciwgb3IgcmVndWxhdGlvbiB0aGVuIFlvdSBtdXN0OiAoYSkgY29tcGx5IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGU7IGFuZCAoYikgZGVzY3JpYmUgdGhlIGxpbWl0YXRpb25zIGFuZCB0aGUgY29kZSB0aGV5IGFmZmVjdC4gU3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBMRUdBTCBmaWxlIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNCBhbmQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGFsbCBkaXN0cmlidXRpb25zIG9mIHRoZSBTb3VyY2UgQ29kZS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcHJvaGliaXRlZCBieSBzdGF0dXRlIG9yIHJlZ3VsYXRpb24sIHN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBzdWZmaWNpZW50bHkgZGV0YWlsZWQgZm9yIGEgcmVjaXBpZW50IG9mIG9yZGluYXJ5IHNraWxsIHRvIGJlIGFibGUgdG8gdW5kZXJzdGFuZCBpdC4KLTUuIEFwcGxpY2F0aW9uIG9mIHRoaXMgTGljZW5zZS4gCi1UaGlzIExpY2Vuc2UgYXBwbGllcyB0byBjb2RlIHRvIHdoaWNoIHRoZSBJbml0aWFsIERldmVsb3BlciBoYXMgYXR0YWNoZWQgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgYW5kIHRvIHJlbGF0ZWQgQ292ZXJlZCBDb2RlLgotNi4gVmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UuIAotNi4xLiBOZXcgVmVyc2lvbnMuIAotTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24gKCcnTmV0c2NhcGUnJykgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZSBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBFYWNoIHZlcnNpb24gd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAKLTYuMi4gRWZmZWN0IG9mIE5ldyBWZXJzaW9ucy4gCi1PbmNlIENvdmVyZWQgQ29kZSBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UsIFlvdSBtYXkgYWx3YXlzIGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdCB2ZXJzaW9uLiBZb3UgbWF5IGFsc28gY2hvb3NlIHRvIHVzZSBzdWNoIENvdmVyZWQgQ29kZSB1bmRlciB0aGUgdGVybXMgb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSBwdWJsaXNoZWQgYnkgTmV0c2NhcGUuIE5vIG9uZSBvdGhlciB0aGFuIE5ldHNjYXBlIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvIENvdmVyZWQgQ29kZSBjcmVhdGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gCi02LjMuIERlcml2YXRpdmUgV29ya3MuIAotSWYgWW91IGNyZWF0ZSBvciB1c2UgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSAod2hpY2ggeW91IG1heSBvbmx5IGRvIGluIG9yZGVyIHRvIGFwcGx5IGl0IHRvIGNvZGUgd2hpY2ggaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSksIFlvdSBtdXN0IChhKSByZW5hbWUgWW91ciBsaWNlbnNlIHNvIHRoYXQgdGhlIHBocmFzZXMgJydNb3ppbGxhJycsICcnTU9aSUxMQVBMJycsICcnTU9aUEwnJywgJydOZXRzY2FwZScnLCAiTVBMIiwgJydOUEwnJyBvciBhbnkgY29uZnVzaW5nbHkgc2ltaWxhciBwaHJhc2UgZG8gbm90IGFwcGVhciBpbiB5b3VyIGxpY2Vuc2UgKGV4Y2VwdCB0byBub3RlIHRoYXQgeW91ciBsaWNlbnNlIGRpZmZlcnMgZnJvbSB0aGlzIExpY2Vuc2UpIGFuZCAoYikgb3RoZXJ3aXNlIG1ha2UgaXQgY2xlYXIgdGhhdCBZb3VyIHZlcnNpb24gb2YgdGhlIGxpY2Vuc2UgY29udGFpbnMgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgYW5kIE5ldHNjYXBlIFB1YmxpYyBMaWNlbnNlLiAoRmlsbGluZyBpbiB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIsIE9yaWdpbmFsIENvZGUgb3IgQ29udHJpYnV0b3IgaW4gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBIHNoYWxsIG5vdCBvZiB0aGVtc2VsdmVzIGJlIGRlZW1lZCB0byBiZSBtb2RpZmljYXRpb25zIG9mIHRoaXMgTGljZW5zZS4pCi03LiBESVNDTEFJTUVSIE9GIFdBUlJBTlRZLiAKLUNPVkVSRUQgQ09ERSBJUyBQUk9WSURFRCBVTkRFUiBUSElTIExJQ0VOU0UgT04gQU4gIkFTIElTJycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgVEhBVCBUSEUgQ09WRVJFRCBDT0RFIElTIEZSRUUgT0YgREVGRUNUUywgTUVSQ0hBTlRBQkxFLCBGSVQgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTi1JTkZSSU5HSU5HLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBDT1ZFUkVEIENPREUgSVMgV0lUSCBZT1UuIFNIT1VMRCBBTlkgQ09WRVJFRCBDT0RFIFBST1ZFIERFRkVDVElWRSBJTiBBTlkgUkVTUEVDVCwgWU9VIChOT1QgVEhFIElOSVRJQUwgREVWRUxPUEVSIE9SIEFOWSBPVEhFUiBDT05UUklCVVRPUikgQVNTVU1FIFRIRSBDT1NUIE9GIEFOWSBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4gVEhJUyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIENPTlNUSVRVVEVTIEFOIEVTU0VOVElBTCBQQVJUIE9GIFRISVMgTElDRU5TRS4gTk8gVVNFIE9GIEFOWSBDT1ZFUkVEIENPREUgSVMgQVVUSE9SSVpFRCBIRVJFVU5ERVIgRVhDRVBUIFVOREVSIFRISVMgRElTQ0xBSU1FUi4KLTguIFRFUk1JTkFUSU9OLiAKLTguMS6gIFRoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IGlmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRlcm1zIGhlcmVpbiBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiAzMCBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHRoZSBicmVhY2guIEFsbCBzdWJsaWNlbnNlcyB0byB0aGUgQ292ZXJlZCBDb2RlIHdoaWNoIGFyZSBwcm9wZXJseSBncmFudGVkIHNoYWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4gUHJvdmlzaW9ucyB3aGljaCwgYnkgdGhlaXIgbmF0dXJlLCBtdXN0IHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgc3Vydml2ZS4gCi04LjIuoCBJZiBZb3UgaW5pdGlhdGUgbGl0aWdhdGlvbiBieSBhc3NlcnRpbmcgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltIChleGNsdWRpbmcgZGVjbGF0b3J5IGp1ZGdtZW50IGFjdGlvbnMpIGFnYWluc3QgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYSBDb250cmlidXRvciAodGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIENvbnRyaWJ1dG9yIGFnYWluc3Qgd2hvbSBZb3UgZmlsZSBzdWNoIGFjdGlvbiBpcyByZWZlcnJlZCB0byBhcyAiUGFydGljaXBhbnQiKaAgYWxsZWdpbmcgdGhhdDogCi0oYSmgIHN1Y2ggUGFydGljaXBhbnQncyBDb250cmlidXRvciBWZXJzaW9uIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQsIHRoZW4gYW55IGFuZCBhbGwgcmlnaHRzIGdyYW50ZWQgYnkgc3VjaCBQYXJ0aWNpcGFudCB0byBZb3UgdW5kZXIgU2VjdGlvbnMgMi4xIGFuZC9vciAyLjIgb2YgdGhpcyBMaWNlbnNlIHNoYWxsLCB1cG9uIDYwIGRheXMgbm90aWNlIGZyb20gUGFydGljaXBhbnQgdGVybWluYXRlIHByb3NwZWN0aXZlbHksIHVubGVzcyBpZiB3aXRoaW4gNjAgZGF5cyBhZnRlciByZWNlaXB0IG9mIG5vdGljZSBZb3UgZWl0aGVyOiAoaSmgIGFncmVlIGluIHdyaXRpbmcgdG8gcGF5IFBhcnRpY2lwYW50IGEgbXV0dWFsbHkgYWdyZWVhYmxlIHJlYXNvbmFibGUgcm95YWx0eSBmb3IgWW91ciBwYXN0IGFuZCBmdXR1cmUgdXNlIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSBzdWNoIFBhcnRpY2lwYW50LCBvciAoaWkpIHdpdGhkcmF3IFlvdXIgbGl0aWdhdGlvbiBjbGFpbSB3aXRoIHJlc3BlY3QgdG8gdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gYWdhaW5zdCBzdWNoIFBhcnRpY2lwYW50LqAgSWYgd2l0aGluIDYwIGRheXMgb2Ygbm90aWNlLCBhIHJlYXNvbmFibGUgcm95YWx0eSBhbmQgcGF5bWVudCBhcnJhbmdlbWVudCBhcmUgbm90IG11dHVhbGx5IGFncmVlZCB1cG9uIGluIHdyaXRpbmcgYnkgdGhlIHBhcnRpZXMgb3IgdGhlIGxpdGlnYXRpb24gY2xhaW0gaXMgbm90IHdpdGhkcmF3biwgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IFBhcnRpY2lwYW50IHRvIFlvdSB1bmRlciBTZWN0aW9ucyAyLjEgYW5kL29yIDIuMiBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSBhdCB0aGUgZXhwaXJhdGlvbiBvZiB0aGUgNjAgZGF5IG5vdGljZSBwZXJpb2Qgc3BlY2lmaWVkIGFib3ZlLiAKLShiKaAgYW55IHNvZnR3YXJlLCBoYXJkd2FyZSwgb3IgZGV2aWNlLCBvdGhlciB0aGFuIHN1Y2ggUGFydGljaXBhbnQncyBDb250cmlidXRvciBWZXJzaW9uLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50LCB0aGVuIGFueSByaWdodHMgZ3JhbnRlZCB0byBZb3UgYnkgc3VjaCBQYXJ0aWNpcGFudCB1bmRlciBTZWN0aW9ucyAyLjEoYikgYW5kIDIuMihiKSBhcmUgcmV2b2tlZCBlZmZlY3RpdmUgYXMgb2YgdGhlIGRhdGUgWW91IGZpcnN0IG1hZGUsIHVzZWQsIHNvbGQsIGRpc3RyaWJ1dGVkLCBvciBoYWQgbWFkZSwgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgUGFydGljaXBhbnQuIAotOC4zLqAgSWYgWW91IGFzc2VydCBhIHBhdGVudCBpbmZyaW5nZW1lbnQgY2xhaW0gYWdhaW5zdCBQYXJ0aWNpcGFudCBhbGxlZ2luZyB0aGF0IHN1Y2ggUGFydGljaXBhbnQncyBDb250cmlidXRvciBWZXJzaW9uIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQgd2hlcmUgc3VjaCBjbGFpbSBpcyByZXNvbHZlZCAoc3VjaCBhcyBieSBsaWNlbnNlIG9yIHNldHRsZW1lbnQpIHByaW9yIHRvIHRoZSBpbml0aWF0aW9uIG9mIHBhdGVudCBpbmZyaW5nZW1lbnQgbGl0aWdhdGlvbiwgdGhlbiB0aGUgcmVhc29uYWJsZSB2YWx1ZSBvZiB0aGUgbGljZW5zZXMgZ3JhbnRlZCBieSBzdWNoIFBhcnRpY2lwYW50IHVuZGVyIFNlY3Rpb25zIDIuMSBvciAyLjIgc2hhbGwgYmUgdGFrZW4gaW50byBhY2NvdW50IGluIGRldGVybWluaW5nIHRoZSBhbW91bnQgb3IgdmFsdWUgb2YgYW55IHBheW1lbnQgb3IgbGljZW5zZS4gCi04LjQuoCBJbiB0aGUgZXZlbnQgb2YgdGVybWluYXRpb24gdW5kZXIgU2VjdGlvbnMgOC4xIG9yIDguMiBhYm92ZSygIGFsbCBlbmQgdXNlciBsaWNlbnNlIGFncmVlbWVudHMgKGV4Y2x1ZGluZyBkaXN0cmlidXRvcnMgYW5kIHJlc2VsbGVycykgd2hpY2ggaGF2ZSBiZWVuIHZhbGlkbHkgZ3JhbnRlZCBieSBZb3Ugb3IgYW55IGRpc3RyaWJ1dG9yIGhlcmV1bmRlciBwcmlvciB0byB0ZXJtaW5hdGlvbiBzaGFsbCBzdXJ2aXZlIHRlcm1pbmF0aW9uLgotOS4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuIAotVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBBTkQgVU5ERVIgTk8gTEVHQUwgVEhFT1JZLCBXSEVUSEVSIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgQ09OVFJBQ1QsIE9SIE9USEVSV0lTRSwgU0hBTEwgWU9VLCBUSEUgSU5JVElBTCBERVZFTE9QRVIsIEFOWSBPVEhFUiBDT05UUklCVVRPUiwgT1IgQU5ZIERJU1RSSUJVVE9SIE9GIENPVkVSRUQgQ09ERSwgT1IgQU5ZIFNVUFBMSUVSIE9GIEFOWSBPRiBTVUNIIFBBUlRJRVMsIEJFIExJQUJMRSBUTyBBTlkgUEVSU09OIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEdPT0RXSUxMLCBXT1JLIFNUT1BQQUdFLCBDT01QVVRFUiBGQUlMVVJFIE9SIE1BTEZVTkNUSU9OLCBPUiBBTlkgQU5EIEFMTCBPVEhFUiBDT01NRVJDSUFMIERBTUFHRVMgT1IgTE9TU0VTLCBFVkVOIElGIFNVQ0ggUEFSVFkgU0hBTEwgSEFWRSBCRUVOIElORk9STUVEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRISVMgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgU0hBTEwgTk9UIEFQUExZIFRPIExJQUJJTElUWSBGT1IgREVBVEggT1IgUEVSU09OQUwgSU5KVVJZIFJFU1VMVElORyBGUk9NIFNVQ0ggUEFSVFknUyBORUdMSUdFTkNFIFRPIFRIRSBFWFRFTlQgQVBQTElDQUJMRSBMQVcgUFJPSElCSVRTIFNVQ0ggTElNSVRBVElPTi4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9SIExJTUlUQVRJT04gT0YgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFNPIFRISVMgRVhDTFVTSU9OIEFORCBMSU1JVEFUSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgotMTAuIFUuUy4gR09WRVJOTUVOVCBFTkQgVVNFUlMuIAotVGhlIENvdmVyZWQgQ29kZSBpcyBhICcnY29tbWVyY2lhbCBpdGVtLCcnIGFzIHRoYXQgdGVybSBpcyBkZWZpbmVkIGluIDQ4IEMuRi5SLiAyLjEwMSAoT2N0LiAxOTk1KSwgY29uc2lzdGluZyBvZiAnJ2NvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUnJyBhbmQgJydjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlIGRvY3VtZW50YXRpb24sJycgYXMgc3VjaCB0ZXJtcyBhcmUgdXNlZCBpbiA0OCBDLkYuUi4gMTIuMjEyIChTZXB0LiAxOTk1KS4gQ29uc2lzdGVudCB3aXRoIDQ4IEMuRi5SLiAxMi4yMTIgYW5kIDQ4IEMuRi5SLiAyMjcuNzIwMi0xIHRocm91Z2ggMjI3LjcyMDItNCAoSnVuZSAxOTk1KSwgYWxsIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMgYWNxdWlyZSBDb3ZlcmVkIENvZGUgd2l0aCBvbmx5IHRob3NlIHJpZ2h0cyBzZXQgZm9ydGggaGVyZWluLgotMTEuIE1JU0NFTExBTkVPVVMuIAotVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nIHN1YmplY3QgbWF0dGVyIGhlcmVvZi4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaGVsZCB0byBiZSB1bmVuZm9yY2VhYmxlLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2UgaXQgZW5mb3JjZWFibGUuIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSBDYWxpZm9ybmlhIGxhdyBwcm92aXNpb25zIChleGNlcHQgdG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlIGxhdywgaWYgYW55LCBwcm92aWRlcyBvdGhlcndpc2UpLCBleGNsdWRpbmcgaXRzIGNvbmZsaWN0LW9mLWxhdyBwcm92aXNpb25zLiBXaXRoIHJlc3BlY3QgdG8gZGlzcHV0ZXMgaW4gd2hpY2ggYXQgbGVhc3Qgb25lIHBhcnR5IGlzIGEgY2l0aXplbiBvZiwgb3IgYW4gZW50aXR5IGNoYXJ0ZXJlZCBvciByZWdpc3RlcmVkIHRvIGRvIGJ1c2luZXNzIGluIHRoZSBVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EsIGFueSBsaXRpZ2F0aW9uIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBzdWJqZWN0IHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgdGhlIEZlZGVyYWwgQ291cnRzIG9mIHRoZSBOb3J0aGVybiBEaXN0cmljdCBvZiBDYWxpZm9ybmlhLCB3aXRoIHZlbnVlIGx5aW5nIGluIFNhbnRhIENsYXJhIENvdW50eSwgQ2FsaWZvcm5pYSwgd2l0aCB0aGUgbG9zaW5nIHBhcnR5IHJlc3BvbnNpYmxlIGZvciBjb3N0cywgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgY291cnQgY29zdHMgYW5kIHJlYXNvbmFibGUgYXR0b3JuZXlzJyBmZWVzIGFuZCBleHBlbnNlcy4gVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuIEFueSBsYXcgb3IgcmVndWxhdGlvbiB3aGljaCBwcm92aWRlcyB0aGF0IHRoZSBsYW5ndWFnZSBvZiBhIGNvbnRyYWN0IHNoYWxsIGJlIGNvbnN0cnVlZCBhZ2FpbnN0IHRoZSBkcmFmdGVyIHNoYWxsIG5vdCBhcHBseSB0byB0aGlzIExpY2Vuc2UuCi0xMi4gUkVTUE9OU0lCSUxJVFkgRk9SIENMQUlNUy4gCi1BcyBiZXR3ZWVuIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCB0aGUgQ29udHJpYnV0b3JzLCBlYWNoIHBhcnR5IGlzIHJlc3BvbnNpYmxlIGZvciBjbGFpbXMgYW5kIGRhbWFnZXMgYXJpc2luZywgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgb3V0IG9mIGl0cyB1dGlsaXphdGlvbiBvZiByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBZb3UgYWdyZWUgdG8gd29yayB3aXRoIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBDb250cmlidXRvcnMgdG8gZGlzdHJpYnV0ZSBzdWNoIHJlc3BvbnNpYmlsaXR5IG9uIGFuIGVxdWl0YWJsZSBiYXNpcy4gTm90aGluZyBoZXJlaW4gaXMgaW50ZW5kZWQgb3Igc2hhbGwgYmUgZGVlbWVkIHRvIGNvbnN0aXR1dGUgYW55IGFkbWlzc2lvbiBvZiBsaWFiaWxpdHkuCi0xMy4gTVVMVElQTEUtTElDRU5TRUQgQ09ERS4gCi1Jbml0aWFsIERldmVsb3BlciBtYXkgZGVzaWduYXRlIHBvcnRpb25zIG9mIHRoZSBDb3ZlcmVkIENvZGUgYXMgIk11bHRpcGxlLUxpY2Vuc2VkIi6gICJNdWx0aXBsZS1MaWNlbnNlZCIgbWVhbnMgdGhhdCB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgcGVybWl0cyB5b3UgdG8gdXRpbGl6ZSBwb3J0aW9ucyBvZiB0aGUgQ292ZXJlZCBDb2RlIHVuZGVyIFlvdXIgY2hvaWNlIG9mIHRoZSBOUEwgb3IgdGhlIGFsdGVybmF0aXZlIGxpY2Vuc2VzLCBpZiBhbnksIHNwZWNpZmllZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gdGhlIGZpbGUgZGVzY3JpYmVkIGluIEV4aGliaXQgQS4KLQotRVhISUJJVCBBIC1Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlLiAKLWBgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IAotaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvIAotU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiAKLUFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCAKLWxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAKLVRoZSBPcmlnaW5hbCBDb2RlIGlzIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLiAKLVRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcyBfX19fX19fX19fX19fX19fX19fX19fX18uIFBvcnRpb25zIGNyZWF0ZWQgYnkgCi2gX19fX19fX19fX19fX19fX19fX19fXyBhcmUgQ29weXJpZ2h0IChDKSBfX19fX18gX19fX19fX19fX19fX19fX19fX19fX18uIEFsbCBSaWdodHMgCi1SZXNlcnZlZC4gCi1Db250cmlidXRvcihzKTogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18uIAotQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIF9fX19fIGxpY2Vuc2UgKHRoZaAgIltfX19dIExpY2Vuc2UiKSwgaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiBbX19fX19fXSBMaWNlbnNlIGFyZSBhcHBsaWNhYmxloCBpbnN0ZWFkIG9mIHRob3NlIGFib3ZlLqAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIFtfX19fXSBMaWNlbnNlIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24gYnkgZGVsZXRpbmegIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNloCB0aGVtIHdpdGggdGhlIG5vdGljZSBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgW19fX10gTGljZW5zZS6gIElmIHlvdSBkbyBub3QgZGVsZXRlIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgZWl0aGVyIHRoZSBNUEwgb3IgdGhlIFtfX19dIExpY2Vuc2UuIiAKLVtOT1RFOiBUaGUgdGV4dCBvZiB0aGlzIEV4aGliaXQgQSBtYXkgZGlmZmVyIHNsaWdodGx5IGZyb20gdGhlIHRleHQgb2YgdGhlIG5vdGljZXMgaW4gdGhlIFNvdXJjZSBDb2RlIGZpbGVzIG9mIHRoZSBPcmlnaW5hbCBDb2RlLiBZb3Ugc2hvdWxkIHVzZSB0aGUgdGV4dCBvZiB0aGlzIEV4aGliaXQgQSByYXRoZXIgdGhhbiB0aGUgdGV4dCBmb3VuZCBpbiB0aGUgT3JpZ2luYWwgQ29kZSBTb3VyY2UgQ29kZSBmb3IgWW91ciBNb2RpZmljYXRpb25zLl0gCi0KLSUlIFRoaXMgbm90aWNlIGlzIHByb3ZpZGVkIHdpdGggcmVzcGVjdCB0byBNZXNhIDMtRCBncmFwaGljcyBsaWJyYXJ5IHYuIDUsIHdoaWNoIG1heSBiZSBpbmNsdWRlZCB3aXRoIHRoaXMgc29mdHdhcmU6IAotCi1Db3B5cmlnaHQgKGMpIDIwMDcgVGhlIEtocm9ub3MgR3JvdXAgSW5jLiAKLQotUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgCi1jb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kL29yIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIAotIk1hdGVyaWFscyIpLCB0byBkZWFsIGluIHRoZSBNYXRlcmlhbHMgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIAotd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAKLWRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgTWF0ZXJpYWxzLCBhbmQgdG8gCi1wZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBNYXRlcmlhbHMgYXJlIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byAKLXRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogCi0KLVRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIAotaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgTWF0ZXJpYWxzLiAKLQotVEhFIE1BVEVSSUFMUyBBUkUgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgCi1FWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgCi1NRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIAotSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgCi1DTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCAKLVRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIAotTUFURVJJQUxTIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIE1BVEVSSUFMUy4gCi0KLSUlIFRoaXMgbm90aWNlIGlzIHByb3ZpZGVkIHdpdGggcmVzcGVjdCB0byBCeXRlIENvZGUgRW5naW5lZXJpbmcgTGlicmFyeSAoQkNFTCksIHdoaWNoIG1heSBiZSBpbmNsdWRlZCB3aXRoIHRoaXMgc29mdHdhcmU6IAotCi0gICAgICAgICAgICAgICAgICAgICBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAKLQotICAgICAgICAgICAgICAgICAgICAgLyoKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgICAgICogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotICAgICAgICAgICAgICAgICAgICAgICoKLSAgICAgICAgICAgICAgICAgICAgICAqIENvcHlyaWdodCAoYykgMjAwMSBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGxyaWdodHMKLSAgICAgICAgICAgICAgICAgICAgICAqIHJlc2VydmVkLgotICAgICAgICAgICAgICAgICAgICAgICoKLSAgICAgICAgICAgICAgICAgICAgICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGhvciB3aXRob3V0Ci0gICAgICAgICAgICAgICAgICAgICAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nY29uZGl0aW9ucwotICAgICAgICAgICAgICAgICAgICAgICogYXJlIG1ldDoKLSAgICAgICAgICAgICAgICAgICAgICAqCi0gICAgICAgICAgICAgICAgICAgICAgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlY29weXJpZ2h0Ci0gICAgICAgICAgICAgICAgICAgICAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nZGlzY2xhaW1lci4KLSAgICAgICAgICAgICAgICAgICAgICAqCi0gICAgICAgICAgICAgICAgICAgICAgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlYWJvdmUgY29weXJpZ2h0Ci0gICAgICAgICAgICAgICAgICAgICAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nZGlzY2xhaW1lciBpbgotICAgICAgICAgICAgICAgICAgICAgICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZHdpdGggdGhlCi0gICAgICAgICAgICAgICAgICAgICAgKiAgICBkaXN0cmlidXRpb24uCi0gICAgICAgICAgICAgICAgICAgICAgKgotICAgICAgICAgICAgICAgICAgICAgICogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGVyZWRpc3RyaWJ1dGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAqICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAgICAgICAgICAgICAgICAgICAgICogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlICAgICAgICAgICAgICAgICAgICAgICogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0oaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotICAgICAgICAgICAgICAgICAgICAgICogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGVzb2Z0d2FyZSBpdHNlbGYsCi0gICAgICAgICAgICAgICAgICAgICAgKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHNub3JtYWxseSBhcHBlYXIuCi0gICAgICAgICAgICAgICAgICAgICAgKgotICAgICAgICAgICAgICAgICAgICAgICogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iYW5kIAotICAgICAgICAgICAgICAgICAgICAgICogICAgIkFwYWNoZSBCQ0VMIiBtdXN0IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZXByb2R1Y3RzIAotICAgICAgICAgICAgICAgICAgICAgICogICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVucGVybWlzc2lvbi4gRm9yIAotICAgICAgICAgICAgICAgICAgICAgICogICAgd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4gICAgICAgICAgICAgICAgICAgICAgKgotICAgICAgICAgICAgICAgICAgICAgICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQiQXBhY2hlIiwKLSAgICAgICAgICAgICAgICAgICAgICAqICAgICJBcGFjaGUgQkNFTCIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsd2l0aG91dCAKLSAgICAgICAgICAgICAgICAgICAgICAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlRm91bmRhdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgICAqCi0gICAgICAgICAgICAgICAgICAgICAgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUklNUExJRUQKLSAgICAgICAgICAgICAgICAgICAgICAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFdBUlJBTlRJRVMKLSAgICAgICAgICAgICAgICAgICAgICAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0VBUkUKLSAgICAgICAgICAgICAgICAgICAgICAqIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFRk9VTkRBVElPTiBPUgotICAgICAgICAgICAgICAgICAgICAgICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULElOQ0lERU5UQUwsCi0gICAgICAgICAgICAgICAgICAgICAgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLEJVVCBOT1QKLSAgICAgICAgICAgICAgICAgICAgICAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7TE9TUyBPRgotICAgICAgICAgICAgICAgICAgICAgICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVJDQVVTRUQgQU5ECi0gICAgICAgICAgICAgICAgICAgICAgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUTElBQklMSVRZLAotICAgICAgICAgICAgICAgICAgICAgICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOQU5ZIFdBWSBPVVQKLSAgICAgICAgICAgICAgICAgICAgICAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRVBPU1NJQklMSVRZIE9GCi0gICAgICAgICAgICAgICAgICAgICAgKiBTVUNIIERBTUFHRS4KLSAgICAgICAgICAgICAgICAgICAgICAqCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgICAgICAqCi0gICAgICAgICAgICAgICAgICAgICAgKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGVieSBtYW55Ci0gICAgICAgICAgICAgICAgICAgICAgKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZQotRm91bmRhdGlvbi4gIEZvciBtb3JlCi0gICAgICAgICAgICAgICAgICAgICAgKiBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHBsZWFzZXNlZQotICAgICAgICAgICAgICAgICAgICAgICogLgotICAgICAgICAgICAgICAgICAgICAgICovCi0KLSUlIFRoaXMgbm90aWNlIGlzIHByb3ZpZGVkIHdpdGggcmVzcGVjdCB0byBSZWdleHAsIFJlZ3VsYXIgRXhwcmVzc2lvbiBQYWNrYWdlLCB3aGljaCBtYXkgYmUgaW5jbHVkZWQgd2l0aCB0aGlzIHNvZnR3YXJlOiAKLQotVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotQ29weXJpZ2h0IChjKSAyMDAxIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMKLXJlc2VydmVkLgotUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0KLTEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci1ub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0KLTIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci1ub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLXRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLWRpc3RyaWJ1dGlvbi4KLQotMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi1pZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi1BcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLQotNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIGFuZCAKLSJBcGFjaGUgVHVyYmluZSIgbXVzdCBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgCi1kZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIAotd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLQotNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSIsCi0iQXBhY2hlIFR1cmJpbmUiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IAotcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLQotVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLU9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi1ESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi1JVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi1TUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi1MSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi1VU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi1PTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLU9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi1TVUNIIERBTUFHRS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1UaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEZvciBtb3JlCi1pbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLWh0dHA6Ly93d3cuYXBhY2hlLm9yZy4KLQotJSUgVGhpcyBub3RpY2UgaXMgcHJvdmlkZWQgd2l0aCByZXNwZWN0IHRvIENVUCBQYXJzZXIgR2VuZXJhdG9yIGZvciBKYXZhLCB3aGljaCBtYXkgYmUgaW5jbHVkZWQgd2l0aCB0aGlzIHNvZnR3YXJlOiAKLQotQ1VQIFBhcnNlciBHZW5lcmF0b3IgQ29weXJpZ2h0IE5vdGljZSwgTGljZW5zZSwgYW5kIERpc2NsYWltZXIKLQotQ29weXJpZ2h0IDE5OTYtMTk5OSBieSBTY290dCBIdWRzb24sIEZyYW5rIEZsYW5uZXJ5LCBDLiBTY290dCBBbmFuaWFuIAotUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCi1kb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXR0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoZSBjb3B5cmlnaHRub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYW5kIHdhcnJhbnR5IGRpc2NsYWltZXIgYXBwZWFyIGluCi1zdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lcyBvZiB0aGUgYXV0aG9ycyBvciB0aGVpciBlbXBsb3llcnNub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YKLXRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uIAotCi1UaGUgYXV0aG9ycyBhbmQgdGhlaXIgZW1wbG95ZXJzIGRpc2NsYWltIGFsbCB3YXJyYW50aWVzIHdpdGggcmVnYXJkIHRvIHRoaXNzb2Z0d2FyZSwgaW5jbHVkaW5nIGFsbCBpbXBsaWVkIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRhYmlsaXR5IGFuZAotZml0bmVzcy4gSW4gbm8gZXZlbnQgc2hhbGwgdGhlIGF1dGhvcnMgb3IgdGhlaXIgZW1wbG95ZXJzIGJlIGxpYWJsZSBmb3IgYW55c3BlY2lhbCwgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIKLXJlc3VsdGluZyBmcm9tIGxvc3Mgb2YgdXNlLCBkYXRhIG9yIHByb2ZpdHMsIHdoZXRoZXIgaW4gYW4gYWN0aW9uIG9mIGNvbnRyYWN0LG5lZ2xpZ2VuY2Ugb3Igb3RoZXIgdG9ydGlvdXMgYWN0aW9uLCBhcmlzaW5nIG91dCBvZiBvciBpbiBjb25uZWN0aW9uIHdpdGh0aGUgdXNlIG9yIHBlcmZvcm1hbmNlIG9mIHRoaXMgc29mdHdhcmUuIAotCi0lJSBUaGlzIG5vdGljZSBpcyBwcm92aWRlZCB3aXRoIHJlc3BlY3QgdG8gU0FYIHYuIDIuMC4xLCB3aGljaCBtYXkgYmUgaW5jbHVkZWQgd2l0aCB0aGlzIHNvZnR3YXJlOiAKLQotQ29weXJpZ2h0IFN0YXR1cwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgU0FYIGlzIGZyZWUhCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICBJbiBmYWN0LCBpdCdzIG5vdCBwb3NzaWJsZSB0byBvd24gYSBsaWNlbnNlIHRvIFNBWCwgc2luY2UgaXQncyBiZWVuIHBsYWNlZCBpbiB0aGUgcHVibGljCi0gICAgICAgICAgICAgICAgICAgICAgICAgZG9tYWluLiAKLQotICAgICAgICAgICAgICAgICAgICAgICAgIE5vIFdhcnJhbnR5Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIFNBWCBpcyByZWxlYXNlZCB0byB0aGUgcHVibGljIGRvbWFpbiwgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoZSBkZXNpZ24gb3IgZm9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHNvZnR3YXJlIGltcGxlbWVudGF0aW9uLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdy4gRXhjZXB0IHdoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlcndpc2Ugc3RhdGVkIGluIHdyaXRpbmcgdGhlIGNvcHlyaWdodCBob2xkZXJzIGFuZC9vciBvdGhlciBwYXJ0aWVzIHByb3ZpZGUgU0FYICJhcyBpcyIKLSAgICAgICAgICAgICAgICAgICAgICAgICB3aXRob3V0IHdhcnJhbnR5IG9mIGFueSBraW5kLCBlaXRoZXIgZXhwcmVzc2VkIG9yIGltcGxpZWQsIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvLCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICBpbXBsaWVkIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRhYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4gVGhlIGVudGlyZSByaXNrIGFzCi0gICAgICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIHF1YWxpdHkgYW5kIHBlcmZvcm1hbmNlIG9mIFNBWCBpcyB3aXRoIHlvdS4gU2hvdWxkIFNBWCBwcm92ZSBkZWZlY3RpdmUsIHlvdQotICAgICAgICAgICAgICAgICAgICAgICAgIGFzc3VtZSB0aGUgY29zdCBvZiBhbGwgbmVjZXNzYXJ5IHNlcnZpY2luZywgcmVwYWlyIG9yIGNvcnJlY3Rpb24uCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICBJbiBubyBldmVudCB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcgd2lsbCBhbnkgY29weXJpZ2h0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgaG9sZGVyLCBvciBhbnkgb3RoZXIgcGFydHkgd2hvIG1heSBtb2RpZnkgYW5kL29yIHJlZGlzdHJpYnV0ZSBTQVgsIGJlIGxpYWJsZSB0byB5b3UgZm9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgZGFtYWdlcywgaW5jbHVkaW5nIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIG91dCBvZgotICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB1c2Ugb3IgaW5hYmlsaXR5IHRvIHVzZSBTQVggKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gbG9zcyBvZiBkYXRhIG9yIGRhdGEgYmVpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJlZCBpbmFjY3VyYXRlIG9yIGxvc3NlcyBzdXN0YWluZWQgYnkgeW91IG9yIHRoaXJkIHBhcnRpZXMgb3IgYSBmYWlsdXJlIG9mIHRoZSBTQVggdG8KLSAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRlIHdpdGggYW55IG90aGVyIHByb2dyYW1zKSwgZXZlbiBpZiBzdWNoIGhvbGRlciBvciBvdGhlciBwYXJ0eSBoYXMgYmVlbiBhZHZpc2VkIG9mCi0gICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KLQotICAgICAgICAgICAgICAgICAgICAgICAgIENvcHlyaWdodCBEaXNjbGFpbWVycyAKLQotICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFnZSBpbmNsdWRlcyBzdGF0ZW1lbnRzIHRvIHRoYXQgZWZmZWN0IGJ5IERhdmlkIE1lZ2dpbnNvbiwgd2hvIHdvdWxkIGhhdmUgYmVlbgotICAgICAgICAgICAgICAgICAgICAgICAgIGFibGUgdG8gY2xhaW0gY29weXJpZ2h0IGZvciB0aGUgb3JpZ2luYWwgd29yay4gCi0gICAgICAgICAgICAgICAgICAgICAgICAgU0FYIDEuMCAKLQotICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMS4wIG9mIHRoZSBTaW1wbGUgQVBJIGZvciBYTUwgKFNBWCksIGNyZWF0ZWQgY29sbGVjdGl2ZWx5IGJ5IHRoZSBtZW1iZXJzaGlwIG9mCi0gICAgICAgICAgICAgICAgICAgICAgICAgdGhlIFhNTC1ERVYgbWFpbGluZyBsaXN0LCBpcyBoZXJlYnkgcmVsZWFzZWQgaW50byB0aGUgcHVibGljIGRvbWFpbi4KLQotICAgICAgICAgICAgICAgICAgICAgICAgIE5vIG9uZSBvd25zIFNBWDogeW91IG1heSB1c2UgaXQgZnJlZWx5IGluIGJvdGggY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwKLSAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbnMsIGJ1bmRsZSBpdCB3aXRoIHlvdXIgc29mdHdhcmUgZGlzdHJpYnV0aW9uLCBpbmNsdWRlIGl0IG9uIGEgQ0QtUk9NLCBsaXN0IHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSBjb2RlIGluIGEgYm9vaywgbWlycm9yIHRoZSBkb2N1bWVudGF0aW9uIGF0IHlvdXIgb3duIHdlYiBzaXRlLCBvciB1c2UgaXQgaW4gYW55Ci0gICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXIgd2F5IHlvdSBzZWUgZml0LgotCi0gICAgICAgICAgICAgICAgICAgICAgICAgRGF2aWQgTWVnZ2luc29uLCBzYXhAbWVnZ2luc29uLmNvbQotICAgICAgICAgICAgICAgICAgICAgICAgIDE5OTgtMDUtMTEKLQotICAgICAgICAgICAgICAgICAgICAgICAgIFNBWCAyLjAgCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICBJIGhlcmVieSBhYmFuZG9uIGFueSBwcm9wZXJ0eSByaWdodHMgdG8gU0FYIDIuMCAodGhlIFNpbXBsZSBBUEkgZm9yIFhNTCksIGFuZCByZWxlYXNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgYWxsIG9mIHRoZSBTQVggMi4wIHNvdXJjZSBjb2RlLCBjb21waWxlZCBjb2RlLCBhbmQgZG9jdW1lbnRhdGlvbiBjb250YWluZWQgaW4gdGhpcwotICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RyaWJ1dGlvbiBpbnRvIHRoZSBQdWJsaWMgRG9tYWluLiBTQVggY29tZXMgd2l0aCBOTyBXQVJSQU5UWSBvciBndWFyYW50ZWUgb2YKLSAgICAgICAgICAgICAgICAgICAgICAgICBmaXRuZXNzIGZvciBhbnkgcHVycG9zZS4KLQotICAgICAgICAgICAgICAgICAgICAgICAgIERhdmlkIE1lZ2dpbnNvbiwgZGF2aWRAbWVnZ2luc29uLmNvbQotICAgICAgICAgICAgICAgICAgICAgICAgIDIwMDAtMDUtMDUKLQotJSUgVGhpcyBub3RpY2UgaXMgcHJvdmlkZWQgd2l0aCByZXNwZWN0IHRvIENyeXB0aXgsIHdoaWNoIG1heSBiZSBpbmNsdWRlZCB3aXRoIHRoaXMgc29mdHdhcmU6IAotCi1DcnlwdGl4IEdlbmVyYWwgTGljZW5zZQotCi1Db3B5cmlnaHQgwqkgMTk5NS0yMDAzIFRoZSBDcnlwdGl4IEZvdW5kYXRpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLVJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlbWV0OgotCi0gICAxLlJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gICAgMi5SZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLVRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENSWVBUSVggRk9VTkRBVElPTiBMSU1JVEVEIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUklNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUkEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ1JZUFRJWCBGT1VOREFUSU9OIExJTUlURUQgT1IgQ09OVFJJQlVUT1JTIEJFTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTU0lOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRlRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotJSUgVGhpcyBub3RpY2UgaXMgcHJvdmlkZWQgd2l0aCByZXNwZWN0IHRvIFggV2luZG93IFN5c3RlbSwgd2hpY2ggbWF5IGJlIGluY2x1ZGVkIHdpdGggdGhpcyBzb2Z0d2FyZTogCi0KLUNvcHlyaWdodCAgVGhlIE9wZW4gR3JvdXAKLQotUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSwgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZWFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uCi0KLVRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0KLVRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1NGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9QRU4gR1JPVVBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCi0KLUV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lIG9mIFRoZSBPcGVuIEdyb3VwIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gYXV0aG9yaXphdGlvbiBmcm9tIFRoZSBPcGVuIEdyb3VwLgotCi1Qb3J0aW9ucyBhbHNvIGNvdmVyZWQgYnkgb3RoZXIgbGljZW5zZXMgYXMgbm90ZWQgaW4gdGhlIGFib3ZlIFVSTC4KLQotJSUgVGhpcyBub3RpY2UgaXMgcHJvdmlkZWQgd2l0aCByZXNwZWN0IHRvIFJldHJvd2VhdmVyLCB3aGljaCBtYXkgYmUgaW5jbHVkZWQgd2l0aCB0aGlzIHNvZnR3YXJlOiAKLQotQ29weXJpZ2h0IChjKSBGZWJydWFyeSAyMDA0LCBUb2J5IFJleWVsdHMKLUFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLVJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLQotUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLVJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi1OZWl0aGVyIHRoZSBuYW1lIG9mIFRvYnkgUmV5ZWx0cyBub3IgdGhlIG5hbWVzIG9mIGhpcyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLQotVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1RMSUFCSUxJVFksIAotT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotJSUgVGhpcyBub3RpY2UgaXMgcHJvdmlkZWQgd2l0aCByZXNwZWN0IHRvIHN0cmlwcGVyLCB3aGljaCBtYXkgYmUgaW5jbHVkZWQgd2l0aCB0aGlzIHNvZnR3YXJlOiAKLQotU3RyaXBwZXIgOiBkZWJ1ZyBpbmZvcm1hdGlvbiBzdHJpcHBlcgotIENvcHlyaWdodCAoYykgMjAwMyBLb2hzdWtlIEthd2FndWNoaQotIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLSBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSBhcmUgbWV0OgotIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVycyBub3IgdGhlIG5hbWVzIG9mIGl0cwotICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0KLSBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0lJSBUaGlzIG5vdGljZSBpcyBwcm92aWRlZCB3aXRoIHJlc3BlY3QgdG8gbGlicG5nIG9mZmljaWFsIFBORyByZWZlcmVuY2UgbGlicmFyeSwgd2hpY2ggbWF5IGJlIGluY2x1ZGVkIHdpdGggdGhpcyBzb2Z0d2FyZTogCi0KLVRoaXMgY29weSBvZiB0aGUgbGlicG5nIG5vdGljZXMgaXMgcHJvdmlkZWQgZm9yIHlvdXIgY29udmVuaWVuY2UuICBJbiBjYXNlIG9mYW55IGRpc2NyZXBhbmN5IGJldHdlZW4gdGhpcyBjb3B5IGFuZCB0aGUgbm90aWNlcyBpbiB0aGUgZmlsZSBwbmcuaCB0aGF0IGlzaW5jbHVkZWQgaW4gdGhlIGxpYnBuZyBkaXN0cmlidXRpb24sIHRoZSBsYXR0ZXIgc2hhbGwgcHJldmFpbC4KLQotQ09QWVJJR0hUIE5PVElDRSwgRElTQ0xBSU1FUiwgYW5kIExJQ0VOU0U6Ci0KLUlmIHlvdSBtb2RpZnkgbGlicG5nIHlvdSBtYXkgaW5zZXJ0IGFkZGl0aW9uYWwgbm90aWNlcyBpbW1lZGlhdGVseSBmb2xsb3dpbmd0aGlzIHNlbnRlbmNlLgotCi1saWJwbmcgdmVyc2lvbiAxLjIuNiwgRGVjZW1iZXIgMywgMjAwNCwgaXMKLUNvcHlyaWdodCAoYykgMjAwNCBHbGVubiBSYW5kZXJzLVBlaHJzb24sIGFuZCBpcwotZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSBzYW1lIGRpc2NsYWltZXIgYW5kIGxpY2Vuc2UgYXMgbGlicG5nLTEuMi41d2l0aCB0aGUgZm9sbG93aW5nIGluZGl2aWR1YWwgYWRkZWQgdG8gdGhlIGxpc3Qgb2YgQ29udHJpYnV0aW5nIEF1dGhvcnMKLSAgIENvc21pbiBUcnV0YQotCi1saWJwbmcgdmVyc2lvbnMgMS4wLjcsIEp1bHkgMSwgMjAwMCwgdGhyb3VnaCAxLjIuNSAtIE9jdG9iZXIgMywgMjAwMiwgYXJlQ29weXJpZ2h0IChjKSAyMDAwLTIwMDIgR2xlbm4gUmFuZGVycy1QZWhyc29uLCBhbmQgYXJlCi1kaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHNhbWUgZGlzY2xhaW1lciBhbmQgbGljZW5zZSBhcyBsaWJwbmctMS4wLjZ3aXRoIHRoZSBmb2xsb3dpbmcgaW5kaXZpZHVhbHMgYWRkZWQgdG8gdGhlIGxpc3Qgb2YgQ29udHJpYnV0aW5nIEF1dGhvcnMKLSAgIFNpbW9uLVBpZXJyZSBDYWRpZXV4Ci0gICBFcmljIFMuIFJheW1vbmQKLSAgIEdpbGxlcyBWb2xsYW50Ci0KLWFuZCB3aXRoIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25zIHRvIHRoZSBkaXNjbGFpbWVyOgotCi0gICBUaGVyZSBpcyBubyB3YXJyYW50eSBhZ2FpbnN0IGludGVyZmVyZW5jZSB3aXRoIHlvdXIgZW5qb3ltZW50IG9mIHRoZSAgIGxpYnJhcnkgb3IgYWdhaW5zdCBpbmZyaW5nZW1lbnQuICBUaGVyZSBpcyBubyB3YXJyYW50eSB0aGF0IG91cgotICAgZWZmb3J0cyBvciB0aGUgbGlicmFyeSB3aWxsIGZ1bGZpbGwgYW55IG9mIHlvdXIgcGFydGljdWxhciBwdXJwb3NlcyAgIG9yIG5lZWRzLiAgVGhpcyBsaWJyYXJ5IGlzIHByb3ZpZGVkIHdpdGggYWxsIGZhdWx0cywgYW5kIHRoZSBlbnRpcmUgICByaXNrIG9mIHNhdGlzZmFjdG9yeSBxdWFsaXR5LCBwZXJmb3JtYW5jZSwgYWNjdXJhY3ksIGFuZCBlZmZvcnQgaXMgd2l0aCAgIHRoZSB1c2VyLgotCi1saWJwbmcgdmVyc2lvbnMgMC45NywgSmFudWFyeSAxOTk4LCB0aHJvdWdoIDEuMC42LCBNYXJjaCAyMCwgMjAwMCwgYXJlQ29weXJpZ2h0IChjKSAxOTk4LCAxOTk5IEdsZW5uIFJhbmRlcnMtUGVocnNvbiwgYW5kIGFyZQotZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSBzYW1lIGRpc2NsYWltZXIgYW5kIGxpY2Vuc2UgYXMgbGlicG5nLTAuOTYsd2l0aCB0aGUgZm9sbG93aW5nIGluZGl2aWR1YWxzIGFkZGVkIHRvIHRoZSBsaXN0IG9mIENvbnRyaWJ1dGluZyBBdXRob3JzOgotICAgVG9tIExhbmUKLSAgIEdsZW5uIFJhbmRlcnMtUGVocnNvbgotICAgV2lsbGVtIHZhbiBTY2hhaWsKLQotbGlicG5nIHZlcnNpb25zIDAuODksIEp1bmUgMTk5NiwgdGhyb3VnaCAwLjk2LCBNYXkgMTk5NywgYXJlCi1Db3B5cmlnaHQgKGMpIDE5OTYsIDE5OTcgQW5kcmVhcyBEaWxnZXIKLURpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgc2FtZSBkaXNjbGFpbWVyIGFuZCBsaWNlbnNlIGFzIGxpYnBuZy0wLjg4LHdpdGggdGhlIGZvbGxvd2luZyBpbmRpdmlkdWFscyBhZGRlZCB0byB0aGUgbGlzdCBvZiBDb250cmlidXRpbmcgQXV0aG9yczoKLSAgIEpvaG4gQm93bGVyCi0gICBLZXZpbiBCcmFjZXkKLSAgIFNhbSBCdXNoZWxsCi0gICBNYWdudXMgSG9sbWdyZW4KLSAgIEdyZWcgUm9lbG9mcwotICAgVG9tIFRhbm5lcgotCi1saWJwbmcgdmVyc2lvbnMgMC41LCBNYXkgMTk5NSwgdGhyb3VnaCAwLjg4LCBKYW51YXJ5IDE5OTYsIGFyZQotQ29weXJpZ2h0IChjKSAxOTk1LCAxOTk2IEd1eSBFcmljIFNjaGFsbmF0LCBHcm91cCA0MiwgSW5jLgotCi1Gb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgY29weXJpZ2h0IGFuZCBsaWNlbnNlLCAiQ29udHJpYnV0aW5nIEF1dGhvcnMiaXMgZGVmaW5lZCBhcyB0aGUgZm9sbG93aW5nIHNldCBvZiBpbmRpdmlkdWFsczoKLQotICAgQW5kcmVhcyBEaWxnZXIKLSAgIERhdmUgTWFydGluZGFsZQotICAgR3V5IEVyaWMgU2NoYWxuYXQKLSAgIFBhdWwgU2NobWlkdAotICAgVGltIFdlZ25lcgotCi1UaGUgUE5HIFJlZmVyZW5jZSBMaWJyYXJ5IGlzIHN1cHBsaWVkICJBUyBJUyIuICBUaGUgQ29udHJpYnV0aW5nIEF1dGhvcnNhbmQgR3JvdXAgNDIsIEluYy4gZGlzY2xhaW0gYWxsIHdhcnJhbnRpZXMsIGV4cHJlc3NlZCBvciBpbXBsaWVkLAotaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIHRoZSB3YXJyYW50aWVzIG9mIG1lcmNoYW50YWJpbGl0eSBhbmQgb2ZmaXRuZXNzIGZvciBhbnkgcHVycG9zZS4gIFRoZSBDb250cmlidXRpbmcgQXV0aG9ycyBhbmQgR3JvdXAgNDIsIEluYy4KLWFzc3VtZSBubyBsaWFiaWxpdHkgZm9yIGRpcmVjdCwgaW5kaXJlY3QsIGluY2lkZW50YWwsIHNwZWNpYWwsIGV4ZW1wbGFyeSxvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHdoaWNoIG1heSByZXN1bHQgZnJvbSB0aGUgdXNlIG9mIHRoZSBQTkcKLVJlZmVyZW5jZSBMaWJyYXJ5LCBldmVuIGlmIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlLgotCi1QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzc291cmNlIGNvZGUsIG9yIHBvcnRpb25zIGhlcmVvZiwgZm9yIGFueSBwdXJwb3NlLCB3aXRob3V0IGZlZSwgc3ViamVjdHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgotCi0xLiBUaGUgb3JpZ2luIG9mIHRoaXMgc291cmNlIGNvZGUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQuCi0KLTIuIEFsdGVyZWQgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoIGFuZCBtdXN0IG5vdAotICAgYmUgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvdXJjZS4KLQotMy4gVGhpcyBDb3B5cmlnaHQgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55Ci0gICBzb3VyY2Ugb3IgYWx0ZXJlZCBzb3VyY2UgZGlzdHJpYnV0aW9uLgotCi1UaGUgQ29udHJpYnV0aW5nIEF1dGhvcnMgYW5kIEdyb3VwIDQyLCBJbmMuIHNwZWNpZmljYWxseSBwZXJtaXQsIHdpdGhvdXRmZWUsIGFuZCBlbmNvdXJhZ2UgdGhlIHVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGFzIGEgY29tcG9uZW50IHRvCi1zdXBwb3J0aW5nIHRoZSBQTkcgZmlsZSBmb3JtYXQgaW4gY29tbWVyY2lhbCBwcm9kdWN0cy4gIElmIHlvdSB1c2UgdGhpc3NvdXJjZSBjb2RlIGluIGEgcHJvZHVjdCwgYWNrbm93bGVkZ21lbnQgaXMgbm90IHJlcXVpcmVkIGJ1dCB3b3VsZCBiZQotYXBwcmVjaWF0ZWQuCi0KLQotQSAicG5nX2dldF9jb3B5cmlnaHQiIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSwgZm9yIGNvbnZlbmllbnQgdXNlIGluICJhYm91dCJib3hlcyBhbmQgdGhlIGxpa2U6Ci0KLSAgIHByaW50ZigiJXMiLHBuZ19nZXRfY29weXJpZ2h0KE5VTEwpKTsKLQotQWxzbywgdGhlIFBORyBsb2dvIChpbiBQTkcgZm9ybWF0LCBvZiBjb3Vyc2UpIGlzIHN1cHBsaWVkIGluIHRoZQotZmlsZXMgInBuZ2Jhci5wbmciIGFuZCAicG5nYmFyLmpwZyAoODh4MzEpIGFuZCAicG5nbm93LnBuZyIgKDk4eDMxKS4KLQotTGlicG5nIGlzIE9TSSBDZXJ0aWZpZWQgT3BlbiBTb3VyY2UgU29mdHdhcmUuICBPU0kgQ2VydGlmaWVkIE9wZW4gU291cmNlIGlzIGFjZXJ0aWZpY2F0aW9uIG1hcmsgb2YgdGhlIE9wZW4gU291cmNlIEluaXRpYXRpdmUuCi0KLUdsZW5uIFJhbmRlcnMtUGVocnNvbgotZ2xlbm5ycCBhdCB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQKLURlY2VtYmVyIDMsIDIwMDQKLQotJSUgVGhpcyBub3RpY2UgaXMgcHJvdmlkZWQgd2l0aCByZXNwZWN0IHRvIExpYnVuZ2lmIC0gQW4gdW5jb21wcmVzc2VkIEdJRiBsaWJyYXJ5LCB3aGljaCBtYXkgYmUgaW5jbHVkZWQgd2l0aCB0aGlzIHNvZnR3YXJlOiAKLQotVGhlIEdJRkxJQiBkaXN0cmlidXRpb24gaXMgQ29weXJpZ2h0IChjKSAxOTk3ICBFcmljIFMuIFJheW1vbmQKLQotUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weW9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c3RvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKLWZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0KLVRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0KLVRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRUFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5USEUgU09GVFdBUkUuCi0KLSUlIFRoaXMgbm90aWNlIGlzIHByb3ZpZGVkIHdpdGggcmVzcGVjdCB0byBYTUwgUmVzb2x2ZXIgbGlicmFyeSwgWGFsYW4gSjIsIGFuZCBTdEFYIEFQSSwgd2hpY2ggbWF5IGJlIGluY2x1ZGVkIHdpdGggdGhpcyBzb2Z0d2FyZTogCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwYWNoZSBMaWNlbnNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDIuMCwgSmFudWFyeSAyMDA0Ci0gICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvCi0KLSAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBVU0UsIFJFUFJPRFVDVElPTiwgQU5EIERJU1RSSUJVVElPTgotCi0gICAxLiBEZWZpbml0aW9ucy4KLQotICAgICAgIkxpY2Vuc2UiIHNoYWxsIG1lYW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwgICAgICBhbmQgZGlzdHJpYnV0aW9uIGFzIGRlZmluZWQgYnkgU2VjdGlvbnMgMSB0aHJvdWdoIDkgb2YgdGhpcyBkb2N1bWVudC4KLSAgICAgICJMaWNlbnNvciIgc2hhbGwgbWVhbiB0aGUgY29weXJpZ2h0IG93bmVyIG9yIGVudGl0eSBhdXRob3JpemVkIGJ5ICAgICAgdGhlIGNvcHlyaWdodCBvd25lciB0aGF0IGlzIGdyYW50aW5nIHRoZSBMaWNlbnNlLgotCi0gICAgICAiTGVnYWwgRW50aXR5IiBzaGFsbCBtZWFuIHRoZSB1bmlvbiBvZiB0aGUgYWN0aW5nIGVudGl0eSBhbmQgYWxsICAgICAgb3RoZXIgZW50aXRpZXMgdGhhdCBjb250cm9sLCBhcmUgY29udHJvbGxlZCBieSwgb3IgYXJlIHVuZGVyIGNvbW1vbiAgICAgIGNvbnRyb2wgd2l0aCB0aGF0IGVudGl0eS4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sCi0gICAgICAiY29udHJvbCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUKLSAgICAgIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yCi0gICAgICBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUgICAgICBvdXRzdGFuZGluZyBzaGFyZXMsIG9yIChpaWkpIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgotICAgICAgIllvdSIgKG9yICJZb3VyIikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQotICAgICAgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZS4KLQotICAgICAgIlNvdXJjZSIgZm9ybSBzaGFsbCBtZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMsICAgICAgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBzb3VyY2UgY29kZSwgZG9jdW1lbnRhdGlvbiAgICAgIHNvdXJjZSwgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMuCi0KLSAgICAgICJPYmplY3QiIGZvcm0gc2hhbGwgbWVhbiBhbnkgZm9ybSByZXN1bHRpbmcgZnJvbSBtZWNoYW5pY2FsCi0gICAgICB0cmFuc2Zvcm1hdGlvbiBvciB0cmFuc2xhdGlvbiBvZiBhIFNvdXJjZSBmb3JtLCBpbmNsdWRpbmcgYnV0Ci0gICAgICBub3QgbGltaXRlZCB0byBjb21waWxlZCBvYmplY3QgY29kZSwgZ2VuZXJhdGVkIGRvY3VtZW50YXRpb24sCi0gICAgICBhbmQgY29udmVyc2lvbnMgdG8gb3RoZXIgbWVkaWEgdHlwZXMuCi0KLSAgICAgICJXb3JrIiBzaGFsbCBtZWFuIHRoZSB3b3JrIG9mIGF1dGhvcnNoaXAsIHdoZXRoZXIgaW4gU291cmNlIG9yCi0gICAgICBPYmplY3QgZm9ybSwgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIExpY2Vuc2UsIGFzIGluZGljYXRlZCBieSBhICAgICAgY29weXJpZ2h0IG5vdGljZSB0aGF0IGlzIGluY2x1ZGVkIGluIG9yIGF0dGFjaGVkIHRvIHRoZSB3b3JrCi0gICAgICAoYW4gZXhhbXBsZSBpcyBwcm92aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLgotCi0gICAgICAiRGVyaXZhdGl2ZSBXb3JrcyIgc2hhbGwgbWVhbiBhbnkgd29yaywgd2hldGhlciBpbiBTb3VyY2Ugb3IgT2JqZWN0ICAgICAgZm9ybSwgdGhhdCBpcyBiYXNlZCBvbiAob3IgZGVyaXZlZCBmcm9tKSB0aGUgV29yayBhbmQgZm9yIHdoaWNoIHRoZSAgICAgIGVkaXRvcmlhbCByZXZpc2lvbnMsIGFubm90YXRpb25zLCBlbGFib3JhdGlvbnMsIG9yIG90aGVyIG1vZGlmaWNhdGlvbnMgICAgICByZXByZXNlbnQsIGFzIGEgd2hvbGUsIGFuIG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcC4gRm9yIHRoZSBwdXJwb3NlcyAgICAgIG9mIHRoaXMgTGljZW5zZSwgRGVyaXZhdGl2ZSBXb3JrcyBzaGFsbCBub3QgaW5jbHVkZSB3b3JrcyB0aGF0IHJlbWFpbiAgICAgIHNlcGFyYWJsZSBmcm9tLCBvciBtZXJlbHkgbGluayAob3IgYmluZCBieSBuYW1lKSB0byB0aGUgaW50ZXJmYWNlcyBvZiwgICAgICB0aGUgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLgotCi0gICAgICAiQ29udHJpYnV0aW9uIiBzaGFsbCBtZWFuIGFueSB3b3JrIG9mIGF1dGhvcnNoaXAsIGluY2x1ZGluZwotICAgICAgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIFdvcmsgYW5kIGFueSBtb2RpZmljYXRpb25zIG9yIGFkZGl0aW9ucyAgICAgIHRvIHRoYXQgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIHRoYXQgaXMgaW50ZW50aW9uYWxseQotICAgICAgc3VibWl0dGVkIHRvIExpY2Vuc29yIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsgYnkgdGhlIGNvcHlyaWdodCBvd25lciAgICAgIG9yIGJ5IGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5IGF1dGhvcml6ZWQgdG8gc3VibWl0IG9uIGJlaGFsZiBvZiAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAic3VibWl0dGVkIiAgICAgIG1lYW5zIGFueSBmb3JtIG9mIGVsZWN0cm9uaWMsIHZlcmJhbCwgb3Igd3JpdHRlbiBjb21tdW5pY2F0aW9uIHNlbnQgICAgICB0byB0aGUgTGljZW5zb3Igb3IgaXRzIHJlcHJlc2VudGF0aXZlcywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byAgICAgIGNvbW11bmljYXRpb24gb24gZWxlY3Ryb25pYyBtYWlsaW5nIGxpc3RzLCBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbXMsICAgICAgYW5kIGlzc3VlIHRyYWNraW5nIHN5c3RlbXMgdGhhdCBhcmUgbWFuYWdlZCBieSwgb3Igb24gYmVoYWxmIG9mLCB0aGUgICAgICBMaWNlbnNvciBmb3IgdGhlIHB1cnBvc2Ugb2YgZGlzY3Vzc2luZyBhbmQgaW1wcm92aW5nIHRoZSBXb3JrLCBidXQgICAgICBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0aGF0IGlzIGNvbnNwaWN1b3VzbHkgbWFya2VkIG9yIG90aGVyd2lzZSAgICAgIGRlc2lnbmF0ZWQgaW4gd3JpdGluZyBieSB0aGUgY29weXJpZ2h0IG93bmVyIGFzICJOb3QgYSBDb250cmlidXRpb24uIgotICAgICAgIkNvbnRyaWJ1dG9yIiBzaGFsbCBtZWFuIExpY2Vuc29yIGFuZCBhbnkgaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkgICAgICBvbiBiZWhhbGYgb2Ygd2hvbSBhIENvbnRyaWJ1dGlvbiBoYXMgYmVlbiByZWNlaXZlZCBieSBMaWNlbnNvciBhbmQgICAgICBzdWJzZXF1ZW50bHkgaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yay4KLQotICAgMi4gR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLCAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCi0gICAgICBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2UsIHByZXBhcmUgRGVyaXZhdGl2ZSBXb3JrcyBvZiwKLSAgICAgIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIHN1YmxpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHRoZSAgICAgIFdvcmsgYW5kIHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0uCi0KLSAgIDMuIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgotICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLCAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCi0gICAgICAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwgICAgICB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywgICAgICB3aGVyZSBzdWNoIGxpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRob3NlIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZSAgICAgIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZWlyCi0gICAgICBDb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIgQ29udHJpYnV0aW9uKHMpICAgICAgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIENvbnRyaWJ1dGlvbihzKSB3YXMgc3VibWl0dGVkLiBJZiBZb3UgICAgICBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYQotICAgICAgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgV29yayAgICAgIG9yIGEgQ29udHJpYnV0aW9uIGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsgY29uc3RpdHV0ZXMgZGlyZWN0ICAgICAgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcwotICAgICAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlCi0gICAgICBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCi0KLSAgIDQuIFJlZGlzdHJpYnV0aW9uLiBZb3UgbWF5IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlCi0gICAgICBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiBpbiBhbnkgbWVkaXVtLCB3aXRoIG9yIHdpdGhvdXQKLSAgICAgIG1vZGlmaWNhdGlvbnMsIGFuZCBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0sIHByb3ZpZGVkIHRoYXQgWW91Ci0gICAgICBtZWV0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLQotICAgICAgKGEpIFlvdSBtdXN0IGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFdvcmsgb3IKLSAgICAgICAgICBEZXJpdmF0aXZlIFdvcmtzIGEgY29weSBvZiB0aGlzIExpY2Vuc2U7IGFuZAotCi0gICAgICAoYikgWW91IG11c3QgY2F1c2UgYW55IG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzICAgICAgICAgIHN0YXRpbmcgdGhhdCBZb3UgY2hhbmdlZCB0aGUgZmlsZXM7IGFuZAotCi0gICAgICAoYykgWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIGZvcm0gb2YgYW55IERlcml2YXRpdmUgV29ya3MKLSAgICAgICAgICB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIHRyYWRlbWFyaywgYW5kCi0gICAgICAgICAgYXR0cmlidXRpb24gbm90aWNlcyBmcm9tIHRoZSBTb3VyY2UgZm9ybSBvZiB0aGUgV29yaywKLSAgICAgICAgICBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdCBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mCi0gICAgICAgICAgdGhlIERlcml2YXRpdmUgV29ya3M7IGFuZAotCi0gICAgICAoZCkgSWYgdGhlIFdvcmsgaW5jbHVkZXMgYSAiTk9USUNFIiB0ZXh0IGZpbGUgYXMgcGFydCBvZiBpdHMKLSAgICAgICAgICBkaXN0cmlidXRpb24sIHRoZW4gYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSBtdXN0ICAgICAgICAgIGluY2x1ZGUgYSByZWFkYWJsZSBjb3B5IG9mIHRoZSBhdHRyaWJ1dGlvbiBub3RpY2VzIGNvbnRhaW5lZCAgICAgICAgICB3aXRoaW4gc3VjaCBOT1RJQ0UgZmlsZSwgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QgICAgICAgICAgcGVydGFpbiB0byBhbnkgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaW4gYXQgbGVhc3Qgb25lICAgICAgICAgIG9mIHRoZSBmb2xsb3dpbmcgcGxhY2VzOiB3aXRoaW4gYSBOT1RJQ0UgdGV4dCBmaWxlIGRpc3RyaWJ1dGVkICAgICAgICAgIGFzIHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3M7IHdpdGhpbiB0aGUgU291cmNlIGZvcm0gb3IKLSAgICAgICAgICBkb2N1bWVudGF0aW9uLCBpZiBwcm92aWRlZCBhbG9uZyB3aXRoIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBvciwgICAgICAgICAgd2l0aGluIGEgZGlzcGxheSBnZW5lcmF0ZWQgYnkgdGhlIERlcml2YXRpdmUgV29ya3MsIGlmIGFuZAotICAgICAgICAgIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgbm90aWNlcyBub3JtYWxseSBhcHBlYXIuIFRoZSBjb250ZW50cyAgICAgICAgICBvZiB0aGUgTk9USUNFIGZpbGUgYXJlIGZvciBpbmZvcm1hdGlvbmFsIHB1cnBvc2VzIG9ubHkgYW5kCi0gICAgICAgICAgZG8gbm90IG1vZGlmeSB0aGUgTGljZW5zZS4gWW91IG1heSBhZGQgWW91ciBvd24gYXR0cmlidXRpb24KLSAgICAgICAgICBub3RpY2VzIHdpdGhpbiBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsb25nc2lkZSAgICAgICAgICBvciBhcyBhbiBhZGRlbmR1bSB0byB0aGUgTk9USUNFIHRleHQgZnJvbSB0aGUgV29yaywgcHJvdmlkZWQgICAgICAgICAgdGhhdCBzdWNoIGFkZGl0aW9uYWwgYXR0cmlidXRpb24gbm90aWNlcyBjYW5ub3QgYmUgY29uc3RydWVkICAgICAgICAgIGFzIG1vZGlmeWluZyB0aGUgTGljZW5zZS4KLQotICAgICAgWW91IG1heSBhZGQgWW91ciBvd24gY29weXJpZ2h0IHN0YXRlbWVudCB0byBZb3VyIG1vZGlmaWNhdGlvbnMgYW5kICAgICAgbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyAgICAgIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwgb3IgZGlzdHJpYnV0aW9uIG9mIFlvdXIgbW9kaWZpY2F0aW9ucywgb3IgICAgICBmb3IgYW55IHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBhcyBhIHdob2xlLCBwcm92aWRlZCBZb3VyIHVzZSwKLSAgICAgIHJlcHJvZHVjdGlvbiwgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgV29yayBvdGhlcndpc2UgY29tcGxpZXMgd2l0aCAgICAgIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuCi0KLSAgIDUuIFN1Ym1pc3Npb24gb2YgQ29udHJpYnV0aW9ucy4gVW5sZXNzIFlvdSBleHBsaWNpdGx5IHN0YXRlIG90aGVyd2lzZSwgICAgICBhbnkgQ29udHJpYnV0aW9uIGludGVudGlvbmFsbHkgc3VibWl0dGVkIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsgICAgICBieSBZb3UgdG8gdGhlIExpY2Vuc29yIHNoYWxsIGJlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiAgICAgIHRoaXMgTGljZW5zZSwgd2l0aG91dCBhbnkgYWRkaXRpb25hbCB0ZXJtcyBvciBjb25kaXRpb25zLgotICAgICAgTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgbm90aGluZyBoZXJlaW4gc2hhbGwgc3VwZXJzZWRlIG9yIG1vZGlmeSAgICAgIHRoZSB0ZXJtcyBvZiBhbnkgc2VwYXJhdGUgbGljZW5zZSBhZ3JlZW1lbnQgeW91IG1heSBoYXZlIGV4ZWN1dGVkICAgICAgd2l0aCBMaWNlbnNvciByZWdhcmRpbmcgc3VjaCBDb250cmlidXRpb25zLgotCi0gICA2LiBUcmFkZW1hcmtzLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UgdGhlIHRyYWRlICAgICAgbmFtZXMsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIG9yIHByb2R1Y3QgbmFtZXMgb2YgdGhlIExpY2Vuc29yLCAgICAgIGV4Y2VwdCBhcyByZXF1aXJlZCBmb3IgcmVhc29uYWJsZSBhbmQgY3VzdG9tYXJ5IHVzZSBpbiBkZXNjcmliaW5nIHRoZSAgICAgIG9yaWdpbiBvZiB0aGUgV29yayBhbmQgcmVwcm9kdWNpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIE5PVElDRSBmaWxlLgotICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yCi0gICAgICBhZ3JlZWQgdG8gaW4gd3JpdGluZywgTGljZW5zb3IgcHJvdmlkZXMgdGhlIFdvcmsgKGFuZCBlYWNoCi0gICAgICBDb250cmlidXRvciBwcm92aWRlcyBpdHMgQ29udHJpYnV0aW9ucykgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgotICAgICAgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGFueSB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgICAgICBvZiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBvciBGSVRORVNTIEZPUiBBCi0gICAgICBQQVJUSUNVTEFSIFBVUlBPU0UuIFlvdSBhcmUgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgICAgICBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgb3IgcmVkaXN0cmlidXRpbmcgdGhlIFdvcmsgYW5kIGFzc3VtZSBhbnkgICAgICByaXNrcyBhc3NvY2lhdGVkIHdpdGggWW91ciBleGVyY2lzZSBvZiBwZXJtaXNzaW9ucyB1bmRlciB0aGlzIExpY2Vuc2UuCi0gICA4LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gSW4gbm8gZXZlbnQgYW5kIHVuZGVyIG5vIGxlZ2FsIHRoZW9yeSwKLSAgICAgIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLAotICAgICAgdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IChzdWNoIGFzIGRlbGliZXJhdGUgYW5kIGdyb3NzbHkgICAgICBuZWdsaWdlbnQgYWN0cykgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNoYWxsIGFueSBDb250cmlidXRvciBiZSAgICAgIGxpYWJsZSB0byBZb3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgICAgICBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGEgICAgICByZXN1bHQgb2YgdGhpcyBMaWNlbnNlIG9yIG91dCBvZiB0aGUgdXNlIG9yIGluYWJpbGl0eSB0byB1c2UgdGhlICAgICAgV29yayAoaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLCAgICAgIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIG9yIGFueSBhbmQgYWxsCi0gICAgICBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzKSwgZXZlbiBpZiBzdWNoIENvbnRyaWJ1dG9yCi0gICAgICBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCi0KLSAgIDkuIEFjY2VwdGluZyBXYXJyYW50eSBvciBBZGRpdGlvbmFsIExpYWJpbGl0eS4gV2hpbGUgcmVkaXN0cmlidXRpbmcgICAgICB0aGUgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLAotICAgICAgYW5kIGNoYXJnZSBhIGZlZSBmb3IsIGFjY2VwdGFuY2Ugb2Ygc3VwcG9ydCwgd2FycmFudHksIGluZGVtbml0eSwgICAgICBvciBvdGhlciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhpcyAgICAgIExpY2Vuc2UuIEhvd2V2ZXIsIGluIGFjY2VwdGluZyBzdWNoIG9ibGlnYXRpb25zLCBZb3UgbWF5IGFjdCBvbmx5ICAgICAgb24gWW91ciBvd24gYmVoYWxmIGFuZCBvbiBZb3VyIHNvbGUgcmVzcG9uc2liaWxpdHksIG5vdCBvbiBiZWhhbGYgICAgICBvZiBhbnkgb3RoZXIgQ29udHJpYnV0b3IsIGFuZCBvbmx5IGlmIFlvdSBhZ3JlZSB0byBpbmRlbW5pZnksCi0gICAgICBkZWZlbmQsIGFuZCBob2xkIGVhY2ggQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkKLSAgICAgIGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCwgc3VjaCBDb250cmlidXRvciBieSByZWFzb24gICAgICBvZiB5b3VyIGFjY2VwdGluZyBhbnkgc3VjaCB3YXJyYW50eSBvciBhZGRpdGlvbmFsIGxpYWJpbGl0eS4KLQotICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCi0KLSAgIEFQUEVORElYOiBIb3cgdG8gYXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yay4KLQotICAgICAgVG8gYXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yaywgYXR0YWNoIHRoZSBmb2xsb3dpbmcKLSAgICAgIGJvaWxlcnBsYXRlIG5vdGljZSwgd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5IGJyYWNrZXRzICJbXSIKLSAgICAgIHJlcGxhY2VkIHdpdGggeW91ciBvd24gaWRlbnRpZnlpbmcgaW5mb3JtYXRpb24uIChEb24ndCBpbmNsdWRlCi0gICAgICB0aGUgYnJhY2tldHMhKSAgVGhlIHRleHQgc2hvdWxkIGJlIGVuY2xvc2VkIGluIHRoZSBhcHByb3ByaWF0ZQotICAgICAgY29tbWVudCBzeW50YXggZm9yIHRoZSBmaWxlIGZvcm1hdC4gV2UgYWxzbyByZWNvbW1lbmQgdGhhdCBhCi0gICAgICBmaWxlIG9yIGNsYXNzIG5hbWUgYW5kIGRlc2NyaXB0aW9uIG9mIHB1cnBvc2UgYmUgaW5jbHVkZWQgb24gdGhlICAgICAgc2FtZSAicHJpbnRlZCBwYWdlIiBhcyB0aGUgY29weXJpZ2h0IG5vdGljZSBmb3IgZWFzaWVyCi0gICAgICBpZGVudGlmaWNhdGlvbiB3aXRoaW4gdGhpcmQtcGFydHkgYXJjaGl2ZXMuCi0KLSAgIENvcHlyaWdodCBbeXl5eV0gW25hbWUgb2YgY29weXJpZ2h0IG93bmVyXQotCi0gICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0lJSBTb21lIFBvcnRpb25zIGxpY2Vuc2VkIGZyb20gSUJNIGFyZSBhdmFpbGFibGUgYXQ6IAotaHR0cDovL3d3dy5pYm0uY29tL3NvZnR3YXJlL2dsb2JhbGl6YXRpb24vaWN1LwotCi0lJSBUaGlzIG5vdGljZSBpcyBwcm92aWRlZCB3aXRoIHJlc3BlY3QgdG8gSUNVNEosIElDVSAxLjguMSBhbmQgbGF0ZXIsIHdoaWNoIG1heSBiZSBpbmNsdWRlZCB3aXRoIHRoaXMgc29mdHdhcmU6IAotCi1JQ1UgTGljZW5zZSAtIElDVSAxLjguMSBhbmQgbGF0ZXIgQ09QWVJJR0hUIEFORCBQRVJNSVNTSU9OIE5PVElDRSBDb3AKLXlyaWdodCAoYykKLTE5OTUtMjAwMyBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMgQWxsIHJpZ2h0c3Jlc2VydmVkLiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmdhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGVyaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2Z0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28scHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZShzKSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW5hbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSBhbmQgdGhhdCBib3RoIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlKHMpIGFuZCB0aGlzcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRUFORCBOT05JTkZSSU5HRU1FTlQgT0YgVEhJUkQgUEFSVFkgUklHSFRTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUSE9MREVSIE9SIEhPTERFUlMgSU5DTFVERUQgSU4gVEhJUyBOT1RJQ0UgQkUgTElBQkxFIEZPUiBBTlkgQwotIExBSU0sIE9SIEFOWVNQRUNJQUwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElOR0ZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0VPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUgb2YgYWNvcHlyaWdodCBob2xkZXIgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIGF1dGhvcml6YXRpb25vZiB0aGUgY29weXJpZ2h0IGhvbGRlci4KLQotJSUgVGhpcyBub3RpY2UgaXMgcHJvdmlkZWQgd2l0aCByZXNwZWN0IHRvIEppbmcsIHdoaWNoIG1heSBiZSBpbmNsdWRlZCB3aXRoIHRoaXMgc29mdHdhcmU6IAotCi1KaW5nIENvcHlpbmcgQ29uZGl0aW9ucwotCi1Db3B5cmlnaHQgKGMpIDIwMDEtMjAwMyBUaGFpIE9wZW4gU291cmNlIFNvZnR3YXJlIENlbnRlciBMdGQKLUFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLVJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgotCi0gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSx0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vcm90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBUaGFpIE9wZW4gU291cmNlIFNvZnR3YXJlIENlbnRlciBMdGQgbm9yIHRoZSBuYW1lc29mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0KLVRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkRBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTllESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyhJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSUlIFRoaXMgbm90aWNlIGlzIHByb3ZpZGVkIHdpdGggcmVzcGVjdCB0byBSRUxBWCBORyBPYmplY3QgTW9kZWwvUGFyc2VyLCB3aGljaCBtYXkgYmUgaW5jbHVkZWQgd2l0aCB0aGlzIHNvZnR3YXJlOiAKLQotCi1UaGUgTUlUIExpY2Vuc2UKLQotQ29weXJpZ2h0IChjKSAgCi0KLVBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2Z0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbnRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG91c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZnRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbyxzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLQotVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLQotVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTU0ZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUkNPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUklOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KLQotJSUgVGhpcyBub3RpY2UgaXMgcHJvdmlkZWQgd2l0aCByZXNwZWN0IHRvIFhGcmVlODYtVmlkTW9kZSBFeHRlbnNpb24sIHdoaWNoIG1heSBiZSBpbmNsdWRlZCB3aXRoIHRoaXMgc29mdHdhcmU6IAotCi1WZXJzaW9uIDEuMSBvZiBYRnJlZTg2IFByb2plY3RMaWNlbmNlLgotCi0gICAgQ29weXJpZ2h0IChDKSAxOTk0LTIwMDQgVGhlIFhGcmVlODYgUHJvamVjdCwgSW5jLiAgICBBbGwgcmlnaHRzIHJlc2VydmVkLgotCi0gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weW9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGludGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0b3VzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5jZSwgYW5kL29yIHNlbGwgY29waWVzIG9mdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotCi0gICAgICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICAgICAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbiwgYW5kIGluIHRoZXNhbWUgcGxhY2UgYW5kIGZvcm0gYXMgb3RoZXIgY29weXJpZ2h0LCBsaWNlbnNlIGFuZCBkaXNjbGFpbWVyIGluZm9ybWF0aW9uLiAgICAgICAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwgaWYgYW55LG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlZGV2ZWxvcGVkIGJ5IFRoZSBYRnJlZTg2IFByb2plY3QsIEluYyAoaHR0cDovL3d3dy54ZnJlZTg2Lm9yZy8pIGFuZCBpdHNjb250cmlidXRvcnMiLCBpbiB0aGUgc2FtZSBwbGFjZSBhbmQgZm9ybSBhcyBvdGhlciB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMuQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLCBpbiB0aGUgc2FtZWZvcm0gYW5kIGxvY2F0aW9uIGFzIG90aGVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzLgotICAgICAgIDQuIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lIG9mIFRoZSBYRnJlZTg2IFByb2plY3QsSW5jIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCB1c2Ugb3JvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBhdXRob3JpemF0aW9uIGZyb20gVGhlWEZyZWU4NiBQcm9qZWN0LCBJbmMuCi0KLSAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFOREZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgWEZSRUU4NlBST0pFQ1QsIElOQyBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUkJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lOR0lOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWU9GIFNVQ0ggREFNQUdFLgotCi0lJSBUaGlzIG5vdGljZSBpcyBwcm92aWRlZCB3aXRoIHJlc3BlY3QgdG8gWE1MIFNlY3VyaXR5LCB3aGljaCBtYXkgYmUgaW5jbHVkZWQgd2l0aCB0aGlzIHNvZnR3YXJlOiAKLQotICBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDEuMQotCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBERgotCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcHlyaWdodCAoQykgMjAwMiBUaGUgQXBhY2hlIFNvZnR3YXJlRm91bmRhdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFJlZGlzdHJpYnV0aW9uIGFuZHVzZSBpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dG1vZGlmaWNhLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZWZvbGxvd2luZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9ucyBhcmUgbWV0OiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Zzb3VyY2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodG5vdGljZSwgdGhpcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nZGlzY2xhaW1lci4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0cmVwcm9kdWNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHNwcm92aWRlZCB3aXRoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZGlzdHJpYnV0aW9uLiAzLiBUaGUgZW5kLXVzZXJkb2N1bWVudGF0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwgaWYgYW55LG11c3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoiVGhpcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnl0aGUgQXBhY2hlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0oaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5YXBwZWFyIGluIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29mdHdhcmUgaXRzZWxmLCBpZiBhbmQgd2hlcmV2ZXIgc3VjaHRoaXJkLXBhcnR5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLiA0LiBUaGVuYW1lcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFwYWNoZSBGb3JyZXN0IiBhbmQgIkFwYWNoZSBTb2Z0d2FyZUZvdW5kYXRpb24iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXN0IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZXByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHByaW9yd3JpdHRlbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbixwbGVhc2UgY29udGFjdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBhY2hlQGFwYWNoZS5vcmcuIDUuIFByb2R1Y3RzIGRlcml2ZWRmcm9tIHRoaXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUiLCBub3JtYXkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0cHJpb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm91bmRhdGlvbi4gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRGBgQVMgSVMnJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVJTVBMSUVECi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTU0ZPUiBBCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PRVZFTlQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUklUUwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCxJTkRJUkVDVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1JDT05TRVFVRU5USUFMCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQU1BR0VTIChJTkNMVS0gRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1JTRVJWSUNFUzsgTE9TUwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWVRIRU9SWSBPRgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1RMSUFCSUxJVFksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUk9USEVSV0lTRSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEVQT1NTSUJJTElUWSBPRgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1VDSCBEQU1BR0UuIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Z2b2x1bnRhcnkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55IGluZGl2aWR1YWxzIG9uYmVoYWxmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uIEZvcm1vcmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmVGb3VuZGF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxlYXNlIHNlZSAuCi0KLSUlIFRoaXMgbm90aWNlIGlzIHByb3ZpZGVkIHdpdGggcmVzcGVjdCB0byBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUgKGxpYmpwZWcpLCB3aGljaCBtYXkgYmUgaW5jbHVkZWQgd2l0aCB0aGlzIHNvZnR3YXJlOiAKLQotSW4gcGxhaW4gRW5nbGlzaDoKLQotMS4gV2UgZG9uJ3QgcHJvbWlzZSB0aGF0IHRoaXMgc29mdHdhcmUgd29ya3MuICAoQnV0IGlmIHlvdSBmaW5kIGFueSBidWdzLAotICAgcGxlYXNlIGxldCB1cyBrbm93ISkKLTIuIFlvdSBjYW4gdXNlIHRoaXMgc29mdHdhcmUgZm9yIHdoYXRldmVyIHlvdSB3YW50LiAgWW91IGRvbid0IGhhdmUgdG8gcGF5IHVzLgotMy4gWW91IG1heSBub3QgcHJldGVuZCB0aGF0IHlvdSB3cm90ZSB0aGlzIHNvZnR3YXJlLiAgSWYgeW91IHVzZSBpdCBpbiBhIHByb2dyYW0sIHlvdSBtdXN0IGFja25vd2xlZGdlIHNvbWV3aGVyZSBpbiB5b3VyIGRvY3VtZW50YXRpb24gdGhhdCB5b3UndmUgdXNlZCB0aGUgSUpHIGNvZGUuCi0KLUluIGxlZ2FsZXNlOgotCi1UaGUgYXV0aG9ycyBtYWtlIE5PIFdBUlJBTlRZIG9yIHJlcHJlc2VudGF0aW9uLCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLCB3aXRoIHJlc3BlY3QgdG8gdGhpcyBzb2Z0d2FyZSwgaXRzIHF1YWxpdHksIGFjY3VyYWN5LCBtZXJjaGFudGFiaWxpdHksIG9yIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAiQVMgSVMiLCBhbmQgeW91LCBpdHMgdXNlciwgYXNzdW1lIHRoZSBlbnRpcmUgcmlzayBhcyB0byBpdHMgcXVhbGl0eSBhbmQgYWNjdXJhY3kuCi0KLVRoaXMgc29mdHdhcmUgaXMgY29weXJpZ2h0IChDKSAxOTkxLTE5OTgsIFRob21hcyBHLiBMYW5lLgotQWxsIFJpZ2h0cyBSZXNlcnZlZCBleGNlcHQgYXMgc3BlY2lmaWVkIGJlbG93LgotCi1QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIChvciBwb3J0aW9ucyB0aGVyZW9mKSBmb3IgYW55IHB1cnBvc2UsIHdpdGhvdXQgZmVlLCBzdWJqZWN0IHRvIHRoZXNlIGNvbmRpdGlvbnM6Ci0KLSgxKSBJZiBhbnkgcGFydCBvZiB0aGUgc291cmNlIGNvZGUgZm9yIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQsIHRoZW4gdGhpcwotUkVBRE1FIGZpbGUgbXVzdCBiZSBpbmNsdWRlZCwgd2l0aCB0aGlzIGNvcHlyaWdodCBhbmQgbm8td2FycmFudHkgbm90aWNlIHVuYWx0ZXJlZDsgYW5kIGFueSBhZGRpdGlvbnMsIGRlbGV0aW9ucywgb3IgY2hhbmdlcyB0byB0aGUgb3JpZ2luYWwgZmlsZXMgbXVzdCBiZSBjbGVhcmx5IGluZGljYXRlZCBpbiBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbi4KLQotKDIpIElmIG9ubHkgZXhlY3V0YWJsZSBjb2RlIGlzIGRpc3RyaWJ1dGVkLCB0aGVuIHRoZSBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbiBtdXN0IHN0YXRlIHRoYXQgInRoaXMgc29mdHdhcmUgaXMgYmFzZWQgaW4gcGFydCBvbiB0aGUgd29yayBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCIuCi0KLSgzKSBQZXJtaXNzaW9uIGZvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBpcyBncmFudGVkIG9ubHkgaWYgdGhlIHVzZXIgYWNjZXB0cyBmdWxsIHJlc3BvbnNpYmlsaXR5IGZvciBhbnkgdW5kZXNpcmFibGUgY29uc2VxdWVuY2VzOyB0aGUgYXV0aG9ycyBhY2NlcHQgTk8gTElBQklMSVRZIGZvciBkYW1hZ2VzIG9mIGFueSBraW5kLgotCi1UaGVzZSBjb25kaXRpb25zIGFwcGx5IHRvIGFueSBzb2Z0d2FyZSBkZXJpdmVkIGZyb20gb3IgYmFzZWQgb24gdGhlIElKRyBjb2RlLCBub3QganVzdCB0byB0aGUgdW5tb2RpZmllZCBsaWJyYXJ5LiAgSWYgeW91IHVzZSBvdXIgd29yaywgeW91IG91Z2h0IHRvIGFja25vd2xlZGdlIHVzLgotCi1QZXJtaXNzaW9uIGlzIE5PVCBncmFudGVkIGZvciB0aGUgdXNlIG9mIGFueSBJSkcgYXV0aG9yJ3MgbmFtZSBvciBjb21wYW55IG5hbWUgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHJlbGF0aW5nIHRvIHRoaXMgc29mdHdhcmUgb3IgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIGl0LiAgVGhpcyBzb2Z0d2FyZSBtYXkgYmUgcmVmZXJyZWQgdG8gb25seSBhcyAidGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZSIuCi0KLVdlIHNwZWNpZmljYWxseSBwZXJtaXQgYW5kIGVuY291cmFnZSB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUgYXMgdGhlIGJhc2lzIG9mIGNvbW1lcmNpYWwgcHJvZHVjdHMsIHByb3ZpZGVkIHRoYXQgYWxsIHdhcnJhbnR5IG9yIGxpYWJpbGl0eSBjbGFpbXMgYXJlIGFzc3VtZWQgYnkgdGhlIHByb2R1Y3QgdmVuZG9yLgotCi1hbnNpMmtuci5jIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGJ5IHBlcm1pc3Npb24gb2YgTC4gUGV0ZXIgRGV1dHNjaCwgc29sZSBwcm9wcmlldG9yIG9mIGl0cyBjb3B5cmlnaHQgaG9sZGVyLCBBbGFkZGluIEVudGVycHJpc2VzIG9mIE1lbmxvIFBhcmssIENBLiBhbnNpMmtuci5jIGlzIE5PVCBjb3ZlcmVkIGJ5IHRoZSBhYm92ZSBjb3B5cmlnaHQgYW5kIGNvbmRpdGlvbnMsIGJ1dCBpbnN0ZWFkIGJ5IHRoZSB1c3VhbCBkaXN0cmlidXRpb24gdGVybXMgb2YgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgcHJpbmNpcGFsbHksIHRoYXQgeW91IG11c3QgaW5jbHVkZSBzb3VyY2UgY29kZSBpZiB5b3UgcmVkaXN0cmlidXRlIGl0LiAgKFNlZSB0aGUgZmlsZSBhbnNpMmtuci5jIGZvciBmdWxsIGRldGFpbHMuKSAgSG93ZXZlciwgc2luY2UgYW5zaTJrbnIuYyBpcyBub3QgbmVlZGVkIGFzIHBhcnQgb2YgYW55IHByb2dyYW0gZ2VuZXJhdGVkIGZyb20gdGhlIElKRyBjb2RlLCB0aGlzIGRvZXMgbm90IGxpbWl0IHlvdSBtb3JlIHRoYW4gdGhlIGZvcmVnb2luZyBwYXJhZ3JhcGhzIGRvLgotCi1UaGUgVW5peCBjb25maWd1cmF0aW9uIHNjcmlwdCAiY29uZmlndXJlIiB3YXMgcHJvZHVjZWQgd2l0aCBHTlUgQXV0b2NvbmYuIEl0IGlzIGNvcHlyaWdodCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGJ1dCBpcyBmcmVlbHkgZGlzdHJpYnV0YWJsZS4gVGhlIHNhbWUgaG9sZHMgZm9yIGl0cyBzdXBwb3J0aW5nIHNjcmlwdHMgKGNvbmZpZy5ndWVzcywgY29uZmlnLnN1YiwgbHRjb25maWcsIGx0bWFpbi5zaCkuICBBbm90aGVyIHN1cHBvcnQgc2NyaXB0LCBpbnN0YWxsLXNoLCBpcyBjb3B5cmlnaHQgYnkgTS5JLlQuIGJ1dCBpcyBhbHNvIGZyZWVseSBkaXN0cmlidXRhYmxlLgotCi1JdCBhcHBlYXJzIHRoYXQgdGhlIGFyaXRobWV0aWMgY29kaW5nIG9wdGlvbiBvZiB0aGUgSlBFRyBzcGVjIGlzIGNvdmVyZWQgYnkgcGF0ZW50cyBvd25lZCBieSBJQk0sIEFUJlQsIGFuZCBNaXRzdWJpc2hpLiAgSGVuY2UgYXJpdGhtZXRpYyBjb2RpbmcgY2Fubm90IGxlZ2FsbHkgYmUgdXNlZCB3aXRob3V0IG9idGFpbmluZyBvbmUgb3IgbW9yZSBsaWNlbnNlcy4gIEZvciB0aGlzIHJlYXNvbiwgc3VwcG9ydCBmb3IgYXJpdGhtZXRpYyBjb2RpbmcgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBmcmVlIEpQRUcgc29mdHdhcmUuIChTaW5jZSBhcml0aG1ldGljIGNvZGluZyBwcm92aWRlcyBvbmx5IGEgbWFyZ2luYWwgZ2FpbiBvdmVyIHRoZSB1bnBhdGVudGVkIEh1ZmZtYW4gbW9kZSwgaXQgaXMgdW5saWtlbHkgdGhhdCB2ZXJ5IG1hbnkgaW1wbGVtZW50YXRpb25zIHdpbGwgc3VwcG9ydCBpdC4pIFNvIGZhciBhcyB3ZSBhcmUgYXdhcmUsIHRoZXJlIGFyZSBubyBwYXRlbnQgcmVzdHJpY3Rpb25zIG9uIHRoZSByZW1haW5pbmcgY29kZS4KLQotVGhlIElKRyBkaXN0cmlidXRpb24gZm9ybWVybHkgaW5jbHVkZWQgY29kZSB0byByZWFkIGFuZCB3cml0ZSBHSUYgZmlsZXMuIFRvIGF2b2lkIGVudGFuZ2xlbWVudCB3aXRoIHRoZSBVbmlzeXMgTFpXIHBhdGVudCwgR0lGIHJlYWRpbmcgc3VwcG9ydCBoYXMgYmVlbiByZW1vdmVkIGFsdG9nZXRoZXIsIGFuZCB0aGUgR0lGIHdyaXRlciBoYXMgYmVlbiBzaW1wbGlmaWVkIHRvIHByb2R1Y2UgInVuY29tcHJlc3NlZCBHSUZzIi4gIFRoaXMgdGVjaG5pcXVlIGRvZXMgbm90IHVzZSB0aGUgTFpXIGFsZ29yaXRobTsgdGhlIHJlc3VsdGluZyBHSUYgZmlsZXMgYXJlIGxhcmdlciB0aGFuIHVzdWFsLCBidXQgYXJlIHJlYWRhYmxlIGJ5IGFsbCBzdGFuZGFyZCBHSUYgZGVjb2RlcnMuCi0KLVdlIGFyZSByZXF1aXJlZCB0byBzdGF0ZSB0aGF0Ci0gICAgIlRoZSBHcmFwaGljcyBJbnRlcmNoYW5nZSBGb3JtYXQoYykgaXMgdGhlIENvcHlyaWdodCBwcm9wZXJ0eSBvZgotICAgIENvbXB1U2VydmUgSW5jb3Jwb3JhdGVkLiAgR0lGKHNtKSBpcyBhIFNlcnZpY2UgTWFyayBwcm9wZXJ0eSBvZgotICAgIENvbXB1U2VydmUgSW5jb3Jwb3JhdGVkLiIKLQotJSUgVGhpcyBub3RpY2UgaXMgcHJvdmlkZWQgd2l0aCByZXNwZWN0IHRvIFggUmVzaXplIGFuZCBSb3RhdGUgKFhyYW5kcikgRXh0ZW5zaW9uLCB3aGljaCBtYXkgYmUgaW5jbHVkZWQgd2l0aCB0aGlzIHNvZnR3YXJlOiAKLTIuIFhGcmVlODYgTGljZW5zZQotCi1YRnJlZTg2IGNvZGUgd2l0aG91dCBhbiBleHBsaWNpdCBjb3B5cmlnaHQgaXMgY292ZXJlZCBieSB0aGUgZm9sbG93aW5nCi1jb3B5cmlnaHQvbGljZW5zZToKLQotQ29weXJpZ2h0IChDKSAxOTk0LTIwMDMgVGhlIFhGcmVlODYgUHJvamVjdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotCi1QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mCi10aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbgotdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bwotdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YKLXRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywKLXN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotCi1UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKLWNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0KLVRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi1JTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUwotRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBYRlJFRTg2Ci1QUk9KRUNUIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgotQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgotV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCi0KLUV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lIG9mIHRoZSBYRnJlZTg2IFByb2plY3Qgc2hhbGwgbm90IGJlCi11c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4KLXRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIGF1dGhvcml6YXRpb24gZnJvbSB0aGUgWEZyZWU4NiBQcm9qZWN0LgotCi0lJSBUaGlzIG5vdGljZSBpcyBwcm92aWRlZCB3aXRoIHJlc3BlY3QgdG8gZm9udGNvbmZpZywgd2hpY2ggbWF5IGJlIGluY2x1ZGVkIHdpdGggdGhpcyBzb2Z0d2FyZTogCi1JZDogQ09QWUlORyx2IDEuMyAyMDAzLzA0LzA0IDIwOjE3OjQwIGtlaXRocCBFeHAgJAotQ29weXJpZ2h0IDIwMDEsMjAwMyBLZWl0aCBQYWNrYXJkCi0KLVBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUsIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUgYW5kIGl0cwotZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQKLXRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdAotY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZwotZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgS2VpdGggUGFja2FyZCBub3QgYmUgdXNlZCBpbgotYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0Ci1zcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgS2VpdGggUGFja2FyZCBtYWtlcyBubwotcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0Ci1pcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgotCi1LRUlUSCBQQUNLQVJEIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLAotSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLCBJTiBOTwotRVZFTlQgU0hBTEwgS0VJVEggUEFDS0FSRCBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCBPUgotQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsCi1EQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSCi1UT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SCi1QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotJSUgVGhpcyBub3RpY2UgaXMgcHJvdmlkZWQgd2l0aCByZXNwZWN0IHRvIFhGcmVlODYsIHdoaWNoIG1heSBiZSBpbmNsdWRlZCB3aXRoIHRoaXMgc29mdHdhcmU6IAotQ29weXJpZ2h0IChDKSAxOTk0LTIwMDIgVGhlIFhGcmVlODYgUHJvamVjdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotCi1QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mCi10aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkCi1kb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKLXJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCi10aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yCi1zZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwotcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZQotZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0KLVRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbAotY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQotU29mdHdhcmUuCi0KLVRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi1JTVBMSUVELCBJTkNMVURJTkcgQlVUCi1OT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotUFVSUE9TRSBBTkQKLU5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFhGUkVFODYgUFJPSkVDVCBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwKLURBTUFHRVMgT1IgT1RIRVIKLUxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCi1PVVQgT0YgT1IgSU4KLUNPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCi0KLUV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lIG9mIHRoZSBYRnJlZTg2IFByb2plY3Qgc2hhbGwgbm90IGJlCi11c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZQotdG8gcHJvbW90ZSB0aGUgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvcgotd3JpdHRlbiBhdXRob3JpemF0aW9uIGZyb20gdGhlIFhGcmVlODYKLVByb2plY3QuCi0lJSBUaGlzIG5vdGljZSBpcyBwcm92aWRlZCB3aXRoIHJlc3BlY3QgdG8gRmFzdCBJbmZvc2V0LCB3aGljaCBtYXkgYmUgaW5jbHVkZWQgd2l0aCB0aGlzIHNvZnR3YXJlOiAKLSogRmFzdCBJbmZvc2V0IHZlci4gMC4xIHNvZnR3YXJlICgiU29mdHdhcmUiKSAKLSogCi0qIENvcHlyaWdodCwgMjAwNC0yMDA1IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gCi0qIAotKiBTb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgCi0qIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSAKLSogb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdDogCi2gKiAKLaAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKLaAqIAotoCogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSAKLSogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCAKLSogV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIAotKiBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucy4gCi0qIAotKiBTdW4gc3VwcG9ydHMgYW5kIGJlbmVmaXRzIGZyb20gdGhlIGdsb2JhbCBjb21tdW5pdHkgb2Ygb3BlbiBzb3VyY2UgCi0qIGRldmVsb3BlcnMsIGFuZCB0aGFua3MgdGhlIGNvbW11bml0eSBmb3IgaXRzIGltcG9ydGFudCBjb250cmlidXRpb25zIGFuZCAKLSogb3BlbiBzdGFuZGFyZHMtYmFzZWQgdGVjaG5vbG9neSwgd2hpY2ggU3VuIGhhcyBhZG9wdGVkIGludG8gbWFueSBvZiBpdHMgCi0qIHByb2R1Y3RzLiAKLSogCi0qIFBsZWFzZSBub3RlIHRoYXQgcG9ydGlvbnMgb2YgU29mdHdhcmUgbWF5IGJlIHByb3ZpZGVkIHdpdGggbm90aWNlcyBhbmQgCi0qIG9wZW4gc291cmNlIGxpY2Vuc2VzIGZyb20gc3VjaCBjb21tdW5pdGllcyBhbmQgdGhpcmQgcGFydGllcyB0aGF0IGdvdmVybiB0aGUgCi0qIHVzZSBvZiB0aG9zZSBwb3J0aW9ucywgYW5kIGFueSBsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciBkbyBub3QgYWx0ZXIgYW55IAotKiByaWdodHMgYW5kIG9ibGlnYXRpb25zIHlvdSBtYXkgaGF2ZSB1bmRlciBzdWNoIG9wZW4gc291cmNlIGxpY2Vuc2VzLCAKLSogaG93ZXZlciwgdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudHkgYW5kIGxpbWl0YXRpb24gb2YgbGlhYmlsaXR5IHByb3Zpc2lvbnMgCi0qIGluIHRoaXMgTGljZW5zZSB3aWxsIGFwcGx5IHRvIGFsbCBTb2Z0d2FyZSBpbiB0aGlzIGRpc3RyaWJ1dGlvbi4gCi0qIAotKiBZb3UgYWNrbm93bGVkZ2UgdGhhdCB0aGUgU29mdHdhcmUgaXMgbm90IGRlc2lnbmVkLCBsaWNlbnNlZCBvciBpbnRlbmRlZCAKLSogZm9yIHVzZSBpbiB0aGUgZGVzaWduLCBjb25zdHJ1Y3Rpb24sIG9wZXJhdGlvbiBvciBtYWludGVuYW5jZSBvZiBhbnkgbnVjbGVhciAKLSogZmFjaWxpdHkuIAotKiAKLSogQXBhY2hlIExpY2Vuc2UgCi0qIFZlcnNpb24gMi4wLCBKYW51YXJ5IDIwMDQgCi0qIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy8gCi0qIAotKi8gCi0vKiAKLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gCi0qIAotKiBUaGlzIGNvZGUgaXMgc3ViamVjdCB0byB0aGUgZnJlZWJ4bWwgTGljZW5zZSwgVmVyc2lvbiAxLjEgCi0qIAotKiBDb3B5cmlnaHQgKGMpIDIwMDEgLSAyMDA1IGZyZWVieG1sLm9yZy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gCi0qIAotKiAkSGVhZGVyOiAvY3ZzL2ZpL0Zhc3RJbmZvc2V0L3NyYy9jb20vc3VuL3htbC9pbnRlcm5hbC9mYXN0aW5mb3NldC9BYnN0cmFjdFJlc291cmNlQnVuZGxlLmphdmEsdiAxLjIgCi0qoCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAKLSovIAotJSUgVGhpcyBub3RpY2UgaXMgcHJvdmlkZWQgd2l0aCByZXNwZWN0IHRvIEtlcmJlcm9zLCB3aGljaCBtYXkgYmUgaW5jbHVkZWQgd2l0aCB0aGlzIHNvZnR3YXJlOiAKLQotLyogCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggYnkgdGhlIEZ1bmRzWHByZXNzLCBJTkMuIAotICogCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAKLSAqIAotICogRXhwb3J0IG9mIHRoaXMgc29mdHdhcmUgZnJvbSB0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhIG1heSByZXF1aXJlIAotICogYSBzcGVjaWZpYyBsaWNlbnNlIGZyb20gdGhlIFVuaXRlZCBTdGF0ZXMgR292ZXJubWVudC6gIEl0IGlzIHRoZSAKLSAqIHJlc3BvbnNpYmlsaXR5IG9mIGFueSBwZXJzb24gb3Igb3JnYW5pemF0aW9uIGNvbnRlbXBsYXRpbmcgZXhwb3J0IHRvIAotICogb2J0YWluIHN1Y2ggYSBsaWNlbnNlIGJlZm9yZSBleHBvcnRpbmcuIAotICogCi0gKiBXSVRISU4gVEhBVCBDT05TVFJBSU5ULCBwZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgCi0gKiBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgCi0gKiB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IAotICogbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCAKLSAqIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgCi0gKiB0aGUgbmFtZSBvZiBGdW5kc1hwcmVzcy4gbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgCi0gKiB0byBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgCi0gKiBwZXJtaXNzaW9uLiBGdW5kc1hwcmVzcyBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIAotICogdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIAotICogb3IgaW1wbGllZCB3YXJyYW50eS4gCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SIAotICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQgCi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIAotICovIAotCi0lJSBUaGlzIG5vdGljZSBpcyBwcm92aWRlZCB3aXRoIHJlc3BlY3QgdG8gVW5pY29kZSdzIENMRFIgZGF0YSByZXBvc2l0b3J5LCB3aGljaCBtYXkgYmUgaW5jbHVkZWQgd2l0aCB0aGlzIHNvZnR3YXJlOiAKLQotIFVuaWNvZGUgQ29weXJpZ2h0Ci0KLSAgICBGb3IgdGhlIGdlbmVyYWwgcHJpdmFjeSBwb2xpY3kgZ292ZXJuaW5nIGFjY2VzcyB0byB0aGlzIHNpdGUsIHNlZSB0aGUgCi1Vbmljb2RlIFByaXZhY3kgUG9saWN5LiBGb3IgdHJhZGVtYXJrIHVzYWdlLCBzZWUgdGhlIHRoZSBVbmljb2RlIENvbnNvcnRpdW0KLVRyYWRlbWFya3MgYW5kIExvZ28gUG9saWN5LgotICAgIE5vdGljZSB0byBFbmQgVXNlcjogVGVybXMgb2YgVXNlCi0gICAgQ2FyZWZ1bGx5IHJlYWQgdGhlIGZvbGxvd2luZyBsZWdhbCBhZ3JlZW1lbnQgKCJBZ3JlZW1lbnQiKS4gVXNlIG9yIGNvcHlpbmcKLW9mIHRoZSBzb2Z0d2FyZSBhbmQvb3IgY29kZXMgcHJvdmlkZWQgd2l0aCB0aGlzIGFncmVlbWVudCAoVGhlICJTb2Z0d2FyZSIpCi1jb25zdGl0dXRlcyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMKLQotICAgICAgIDEuIFVuaWNvZGUgQ29weXJpZ2h0LgotICAgICAgICAgICAgIDEuIENvcHlyaWdodCCpIDE5OTEtMjAwNSBVbmljb2RlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gICAgICAgICAgICAgMi4gQ2VydGFpbiBkb2N1bWVudHMgYW5kIGZpbGVzIG9uIHRoaXMgd2Vic2l0ZSBjb250YWluIGEgbGVnZW5kCi1pbmRpY2F0aW5nIHRoYXQgIk1vZGlmaWNhdGlvbiBpcyBwZXJtaXR0ZWQuIiBBbnkgcGVyc29uIGlzIGhlcmVieSBhdXRob3JpemVkLAotd2l0aG91dCBmZWUsIHRvIG1vZGlmeSBzdWNoIGRvY3VtZW50cyBhbmQgZmlsZXMgdG8gY3JlYXRlIGRlcml2YXRpdmUgd29ya3MKLWNvbmZvcm1pbmcgdG8gdGhlIFVuaWNvZGWuIFN0YW5kYXJkLCBzdWJqZWN0IHRvIFRlcm1zIGFuZCBDb25kaXRpb25zIGhlcmVpbi4KLSAgICAgICAgICAgICAzLiBBbnkgcGVyc29uIGlzIGhlcmVieSBhdXRob3JpemVkLCB3aXRob3V0IGZlZSwgdG8gdmlldywgdXNlLAotcmVwcm9kdWNlLCBhbmQgZGlzdHJpYnV0ZSBhbGwgZG9jdW1lbnRzIGFuZCBmaWxlcyBzb2xlbHkgZm9yIGluZm9ybWF0aW9uYWwKLXB1cnBvc2VzIGluIHRoZSBjcmVhdGlvbiBvZiBwcm9kdWN0cyBzdXBwb3J0aW5nIHRoZSBVbmljb2RlIFN0YW5kYXJkLCBzdWJqZWN0IHRvCi10aGUgVGVybXMgYW5kIENvbmRpdGlvbnMgaGVyZWluLgotICAgICAgICAgICAgIDQuIEZ1cnRoZXIgc3BlY2lmaWNhdGlvbnMgb2YgcmlnaHRzIGFuZCByZXN0cmljdGlvbnMgcGVydGFpbmluZyB0bwotdGhlIHVzZSBvZiB0aGUgcGFydGljdWxhciBzZXQgb2YgZGF0YSBmaWxlcyBrbm93biBhcyB0aGUgIlVuaWNvZGUgQ2hhcmFjdGVyCi1EYXRhYmFzZSIgY2FuIGJlIGZvdW5kIGluIEV4aGliaXQgMS4KLSAgICAgICAgICAgICA1LiBGdXJ0aGVyIHNwZWNpZmljYXRpb25zIG9mIHJpZ2h0cyBhbmQgcmVzdHJpY3Rpb25zIHBlcnRhaW5pbmcgdG8KLXRoZSB1c2Ugb2YgdGhlIHBhcnRpY3VsYXIgc2V0IG9mIGZpbGVzIHRoYXQgY29uc3RpdHV0ZSB0aGUgb25saW5lIGVkaXRpb24gb2YgVGhlCi1Vbmljb2RlIFN0YW5kYXJkLCBWZXJzaW9uIDQuMCwgbWF5IGJlIGZvdW5kIGluIFY0LjAgb25saW5lIGVkaXRpb24uCi0gICAgICAgICAgICAgNi4gTm8gbGljZW5zZSBpcyBncmFudGVkIHRvICJtaXJyb3IiIHRoZSBVbmljb2RlIHdlYnNpdGUgd2hlcmUgYQotZmVlIGlzIGNoYXJnZWQgZm9yIGFjY2VzcyB0byB0aGUgIm1pcnJvciIgc2l0ZS4KLSAgICAgICAgICAgICA3LiBNb2RpZmljYXRpb24gaXMgbm90IHBlcm1pdHRlZCB3aXRoIHJlc3BlY3QgdG8gdGhpcyBkb2N1bWVudC4gQWxsCi1jb3BpZXMgb2YgdGhpcyBkb2N1bWVudCBtdXN0IGJlIHZlcmJhdGltLgotICAgICAgIDIuIFJlc3RyaWN0ZWQgUmlnaHRzIExlZ2VuZC4gQW55IHRlY2huaWNhbCBkYXRhIG9yIHNvZnR3YXJlIHdoaWNoIGlzCi1saWNlbnNlZCB0byB0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhLCBpdHMgYWdlbmNpZXMgYW5kL29yIGluc3RydW1lbnRhbGl0aWVzCi11bmRlciB0aGlzIEFncmVlbWVudCBpcyBjb21tZXJjaWFsIHRlY2huaWNhbCBkYXRhIG9yIGNvbW1lcmNpYWwgY29tcHV0ZXIKLXNvZnR3YXJlIGRldmVsb3BlZCBleGNsdXNpdmVseSBhdCBwcml2YXRlIGV4cGVuc2UgYXMgZGVmaW5lZCBpbiBGQVIgMi4xMDEsIG9yCi1ERkFSUyAyNTIuMjI3LTcwMTQgKEp1bmUgMTk5NSksIGFzIGFwcGxpY2FibGUuIEZvciB0ZWNobmljYWwgZGF0YSwgdXNlLAotZHVwbGljYXRpb24sIG9yIGRpc2Nsb3N1cmUgYnkgdGhlIEdvdmVybm1lbnQgaXMgc3ViamVjdCB0byByZXN0cmljdGlvbnMgYXMgc2V0Ci1mb3J0aCBpbiBERkFSUyAyMDIuMjI3LTcwMTUgVGVjaG5pY2FsIERhdGEsIENvbW1lcmNpYWwgYW5kIEl0ZW1zIChOb3YgMTk5NSkgYW5kCi10aGlzIEFncmVlbWVudC4gRm9yIFNvZnR3YXJlLCBpbiBhY2NvcmRhbmNlIHdpdGggRkFSIDEyLTIxMiBvciBERkFSUyAyMjctNzIwMiwKLWFzIGFwcGxpY2FibGUsIHVzZSwgZHVwbGljYXRpb24gb3IgZGlzY2xvc3VyZSBieSB0aGUgR292ZXJubWVudCBpcyBzdWJqZWN0IHRvCi10aGUgcmVzdHJpY3Rpb25zIHNldCBmb3J0aCBpbiB0aGlzIEFncmVlbWVudC4KLSAgICAgICAzLiBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVycy4KLSAgICAgICAgICAgICAxLiBUaGlzIHB1YmxpY2F0aW9uIGFuZC9vciB3ZWJzaXRlIG1heSBpbmNsdWRlIHRlY2huaWNhbCBvcgotdHlwb2dyYXBoaWNhbCBlcnJvcnMgb3Igb3RoZXIgaW5hY2N1cmFjaWVzIC4gQ2hhbmdlcyBhcmUgcGVyaW9kaWNhbGx5IGFkZGVkIHRvCi10aGUgaW5mb3JtYXRpb24gaGVyZWluOyB0aGVzZSBjaGFuZ2VzIHdpbGwgYmUgaW5jb3Jwb3JhdGVkIGluIG5ldyBlZGl0aW9ucyBvZgotdGhlIHB1YmxpY2F0aW9uIGFuZC9vciB3ZWJzaXRlLiBVbmljb2RlIG1heSBtYWtlIGltcHJvdmVtZW50cyBhbmQvb3IgY2hhbmdlcyBpbgotdGhlIHByb2R1Y3QocykgYW5kL29yIHByb2dyYW0ocykgZGVzY3JpYmVkIGluIHRoaXMgcHVibGljYXRpb24gYW5kL29yIHdlYnNpdGUgYXQKLWFueSB0aW1lLgotICAgICAgICAgICAgIDIuIElmIHRoaXMgZmlsZSBoYXMgYmVlbiBwdXJjaGFzZWQgb24gbWFnbmV0aWMgb3Igb3B0aWNhbCBtZWRpYQotZnJvbSBVbmljb2RlLCBJbmMuIHRoZSBzb2xlIGFuZCBleGNsdXNpdmUgcmVtZWR5IGZvciBhbnkgY2xhaW0gd2lsbCBiZSBleGNoYW5nZQotb2YgdGhlIGRlZmVjdGl2ZSBtZWRpYSB3aXRoaW4gbmluZXR5ICg5MCkgZGF5cyBvZiBvcmlnaW5hbCBwdXJjaGFzZS4KLSAgICAgICAgICAgICAzLiBFWENFUFQgQVMgUFJPVklERUQgSU4gU0VDVElPTiBDLjIsIFRISVMgUFVCTElDQVRJT04gQU5EL09SCi1TT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQgRUlUSEVSIEVYUFJFU1MsCi1JTVBMSUVELCBPUiBTVEFUVVRPUlksIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBBTlkgV0FSUkFOVElFUyBPRgotTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IgTk9OLUlORlJJTkdFTUVOVC4gVU5JQ09ERQotQU5EIElUUyBMSUNFTlNPUlMgQVNTVU1FIE5PIFJFU1BPTlNJQklMSVRZIEZPUiBFUlJPUlMgT1IgT01JU1NJT05TIElOIFRISVMKLVBVQkxJQ0FUSU9OIEFORC9PUiBTT0ZUV0FSRSBPUiBPVEhFUiBET0NVTUVOVFMgV0hJQ0ggQVJFIFJFRkVSRU5DRUQgQlkgT1IgTElOS0VECi1UTyBUSElTIFBVQkxJQ0FUSU9OIE9SIFRIRSBVTklDT0RFIFdFQlNJVEUuCi0gICAgICAgNC4gV2FpdmVyIG9mIERhbWFnZXMuIEluIG5vIGV2ZW50IHNoYWxsIFVuaWNvZGUgb3IgaXRzIGxpY2Vuc29ycyBiZQotbGlhYmxlIGZvciBhbnkgc3BlY2lhbCwgaW5jaWRlbnRhbCwgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9mIGFueQota2luZCwgb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgd2hldGhlciBvciBub3QgVW5pY29kZSB3YXMgYWR2aXNlZCBvZiB0aGUKLXBvc3NpYmlsaXR5IG9mIHRoZSBkYW1hZ2UsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCB0aG9zZSByZXN1bHRpbmcgZnJvbQotdGhlIGZvbGxvd2luZzogbG9zcyBvZiB1c2UsIGRhdGEgb3IgcHJvZml0cywgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSB1c2UsCi1tb2RpZmljYXRpb24gb3IgZGlzdHJpYnV0aW9uIG9mIHRoaXMgaW5mb3JtYXRpb24gb3IgaXRzIGRlcml2YXRpdmVzLgotICAgICAgIDUuIFRyYWRlbWFya3MuCi0gICAgICAgICAgICAgMS4gVW5pY29kZSBhbmQgdGhlIFVuaWNvZGUgbG9nbyBhcmUgcmVnaXN0ZXJlZCB0cmFkZW1hcmtzIG9mCi1Vbmljb2RlLCBJbmMuIAotICAgICAgICAgICAgIDIuIFRoaXMgc2l0ZSBjb250YWlucyBwcm9kdWN0IG5hbWVzIGFuZCBjb3Jwb3JhdGUgbmFtZXMgb2Ygb3RoZXIKLWNvbXBhbmllcy4gQWxsIHByb2R1Y3QgbmFtZXMgYW5kIGNvbXBhbnkgbmFtZXMgYW5kIGxvZ29zIG1lbnRpb25lZCBoZXJlaW4gYXJlCi10aGUgdHJhZGVtYXJrcyBvciByZWdpc3RlcmVkIHRyYWRlbWFya3Mgb2YgdGhlaXIgcmVzcGVjdGl2ZSBvd25lcnMuIE90aGVyCi1wcm9kdWN0cyBhbmQgY29ycG9yYXRlIG5hbWVzIG1lbnRpb25lZCBoZXJlaW4gd2hpY2ggYXJlIHRyYWRlbWFya3Mgb2YgYSB0aGlyZAotcGFydHkgYXJlIHVzZWQgb25seSBmb3IgZXhwbGFuYXRpb24gYW5kIGZvciB0aGUgb3duZXJzJyBiZW5lZml0IGFuZCB3aXRoIG5vCi1pbnRlbnQgdG8gaW5mcmluZ2UuCi0gICAgICAgICAgICAgMy4gVXNlIG9mIHRoaXJkIHBhcnR5IHByb2R1Y3RzIG9yIGluZm9ybWF0aW9uIHJlZmVycmVkIHRvIGhlcmVpbiBpcwotYXQgdGhlIHVzZXIncyByaXNrLgotICAgICAgIDYuIE1pc2NlbGxhbmVvdXMuCi0gICAgICAgICAgICAgMS4gSnVyaXNkaWN0aW9uIGFuZCBWZW51ZS4gVGhpcyBzZXJ2ZXIgaXMgb3BlcmF0ZWQgZnJvbSBhIGxvY2F0aW9uCi1pbiB0aGUgU3RhdGUgb2YgQ2FsaWZvcm5pYSwgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhLiBVbmljb2RlIG1ha2VzIG5vCi1yZXByZXNlbnRhdGlvbiB0aGF0IHRoZSBtYXRlcmlhbHMgYXJlIGFwcHJvcHJpYXRlIGZvciB1c2UgaW4gb3RoZXIgbG9jYXRpb25zLiBJZgoteW91IGFjY2VzcyB0aGlzIHNlcnZlciBmcm9tIG90aGVyIGxvY2F0aW9ucywgeW91IGFyZSByZXNwb25zaWJsZSBmb3IgY29tcGxpYW5jZQotd2l0aCBsb2NhbCBsYXdzLiBUaGlzIEFncmVlbWVudCwgYWxsIHVzZSBvZiB0aGlzIHNpdGUgYW5kIGFueSBjbGFpbXMgYW5kIGRhbWFnZXMKLXJlc3VsdGluZyBmcm9tIHVzZSBvZiB0aGlzIHNpdGUgYXJlIGdvdmVybmVkIHNvbGVseSBieSB0aGUgbGF3cyBvZiB0aGUgU3RhdGUgb2YKLUNhbGlmb3JuaWEgd2l0aG91dCByZWdhcmQgdG8gYW55IHByaW5jaXBsZXMgd2hpY2ggd291bGQgYXBwbHkgdGhlIGxhd3Mgb2YgYQotZGlmZmVyZW50IGp1cmlzZGljdGlvbi4gVGhlIHVzZXIgYWdyZWVzIHRoYXQgYW55IGRpc3B1dGVzIHJlZ2FyZGluZyB0aGlzIHNpdGUKLXNoYWxsIGJlIHJlc29sdmVkIHNvbGVseSBpbiB0aGUgY291cnRzIGxvY2F0ZWQgaW4gU2FudGEgQ2xhcmEgQ291bnR5LAotQ2FsaWZvcm5pYS4gVGhlIHVzZXIgYWdyZWVzIHNhaWQgY291cnRzIGhhdmUgcGVyc29uYWwganVyaXNkaWN0aW9uIGFuZCBhZ3JlZSB0bwotd2FpdmUgYW55IHJpZ2h0IHRvIHRyYW5zZmVyIHRoZSBkaXNwdXRlIHRvIGFueSBvdGhlciBmb3J1bS4KLSAgICAgICAgICAgICAyLiBNb2RpZmljYXRpb24gYnkgVW5pY29kZSBVbmljb2RlIHNoYWxsIGhhdmUgdGhlIHJpZ2h0IHRvIG1vZGlmeQotdGhpcyBBZ3JlZW1lbnQgYXQgYW55IHRpbWUgYnkgcG9zdGluZyBpdCB0byB0aGlzIHNpdGUuIFRoZSB1c2VyIG1heSBub3QgYXNzaWduCi1hbnkgcGFydCBvZiB0aGlzIEFncmVlbWVudCB3aXRob3V0IFVuaWNvZGUncyBwcmlvciB3cml0dGVuIGNvbnNlbnQuCi0gICAgICAgICAgICAgMy4gVGF4ZXMuIFRoZSB1c2VyIGFncmVlcyB0byBwYXkgYW55IHRheGVzIGFyaXNpbmcgZnJvbSBhY2Nlc3MgdG8KLXRoaXMgd2Vic2l0ZSBvciB1c2Ugb2YgdGhlIGluZm9ybWF0aW9uIGhlcmVpbiwgZXhjZXB0IGZvciB0aG9zZSBiYXNlZCBvbgotVW5pY29kZSdzIG5ldCBpbmNvbWUuCi0gICAgICAgICAgICAgNC4gU2V2ZXJhYmlsaXR5LiAgSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBkZWNsYXJlZAotaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlLCB0aGUgcmVtYWluaW5nIHByb3Zpc2lvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgc2hhbGwKLXJlbWFpbiBpbiBlZmZlY3QuCi0gICAgICAgICAgICAgNS4gRW50aXJlIEFncmVlbWVudC4gVGhpcyBBZ3JlZW1lbnQgY29uc3RpdHV0ZXMgdGhlIGVudGlyZQotYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMuIAotCi1FWEhJQklUIDEKLVVOSUNPREUsIElOQy4gTElDRU5TRSBBR1JFRU1FTlQgLSBEQVRBIEZJTEVTIEFORCBTT0ZUV0FSRQotCi0gICAgVW5pY29kZSBEYXRhIEZpbGVzIGluY2x1ZGUgYWxsIGRhdGEgZmlsZXMgdW5kZXIgdGhlIGRpcmVjdG9yaWVzCi1odHRwOi8vd3d3LnVuaWNvZGUub3JnL1B1YmxpYy8gYW5kIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvcmVwb3J0cy8uIFVuaWNvZGUKLVNvZnR3YXJlIGluY2x1ZGVzIGFueSBzb3VyY2UgY29kZSB1bmRlciB0aGUgZGlyZWN0b3JpZXMKLWh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljLyBhbmQgaHR0cDovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzLy4KLQotICAgIE5PVElDRSBUTyBVU0VSOiBDYXJlZnVsbHkgcmVhZCB0aGUgZm9sbG93aW5nIGxlZ2FsIGFncmVlbWVudC4gQlkKLURPV05MT0FESU5HLCBJTlNUQUxMSU5HLCBDT1BZSU5HIE9SIE9USEVSV0lTRSBVU0lORyBVTklDT0RFIElOQy4nUyBEQVRBIEZJTEVTCi0oIkRBVEEgRklMRVMiKSwgQU5EL09SIFNPRlRXQVJFICgiU09GVFdBUkUiKSwgWU9VIFVORVFVSVZPQ0FMTFkgQUNDRVBULCBBTkQKLUFHUkVFIFRPIEJFIEJPVU5EIEJZLCBBTEwgT0YgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5ULiBJRiBZT1UKLURPIE5PVCBBR1JFRSwgRE8gTk9UIERPV05MT0FELCBJTlNUQUxMLCBDT1BZLCBESVNUUklCVVRFIE9SIFVTRSBUSEUgREFUQSBGSUxFUwotT1IgU09GVFdBUkUuCi0KLSAgICBDT1BZUklHSFQgQU5EIFBFUk1JU1NJT04gTk9USUNFCi0KLSAgICBDb3B5cmlnaHQgwz/CLMMswqkgMTk5MS0yMDA0IFVuaWNvZGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gRGlzdHJpYnV0ZWQgdW5kZXIKLXRoZSBUZXJtcyBvZiBVc2UgaW4gaHR0cDovL3d3dy51bmljb2RlLm9yZy9jb3B5cmlnaHQuaHRtbC4KLQotICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKLW9mIHRoZSBVbmljb2RlIGRhdGEgZmlsZXMgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiAodGhlICJEYXRhIEZpbGVzIikgb3IKLVVuaWNvZGUgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiAodGhlICJTb2Z0d2FyZSIpIHRvIGRlYWwgaW4gdGhlCi1EYXRhIEZpbGVzIG9yIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlCi1yaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YKLXRoZSBEYXRhIEZpbGVzIG9yIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgRGF0YSBGaWxlcyBvcgotU29mdHdhcmUgYXJlIGZ1cm5pc2hlZCB0byBkbyBzbywgcHJvdmlkZWQgdGhhdCAoYSkgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UocykKLWFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciB3aXRoIGFsbCBjb3BpZXMgb2YgdGhlIERhdGEgRmlsZXMgb3IgU29mdHdhcmUsCi0oYikgYm90aCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZShzKSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4KLWFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiwgYW5kIChjKSB0aGVyZSBpcyBjbGVhciBub3RpY2UgaW4gZWFjaCBtb2RpZmllZCBEYXRhCi1GaWxlIG9yIGluIHRoZSBTb2Z0d2FyZSBhcyB3ZWxsIGFzIGluIHRoZSBkb2N1bWVudGF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgRGF0YQotRmlsZShzKSBvciBTb2Z0d2FyZSB0aGF0IHRoZSBkYXRhIG9yIHNvZnR3YXJlIGhhcyBiZWVuIG1vZGlmaWVkLgotCi0gICAgVEhFIERBVEEgRklMRVMgQU5EIFNPRlRXQVJFIEFSRSBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQotS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCi1NRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQgT0YgVEhJUkQKLVBBUlRZIFJJR0hUUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgSE9MREVSUyBJTkNMVURFRCBJTiBUSElTCi1OT1RJQ0UgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIE9SIEFOWSBTUEVDSUFMIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwKLURBTUFHRVMsIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywKLVdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORwotT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRIRSBEQVRBIEZJTEVTIE9SIFNPRlRXQVJFLgotCi0gICAgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUgb2YgYSBjb3B5cmlnaHQgaG9sZGVyIHNoYWxsIG5vdAotYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzCi1pbiB0aGVzZSBEYXRhIEZpbGVzIG9yIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBhdXRob3JpemF0aW9uIG9mIHRoZQotY29weXJpZ2h0IGhvbGRlci4KLQotICAgIFVuaWNvZGUgYW5kIHRoZSBVbmljb2RlIGxvZ28gYXJlIHRyYWRlbWFya3Mgb2YgVW5pY29kZSwgSW5jLiwgYW5kIG1heSBiZQotcmVnaXN0ZXJlZCBpbiBzb21lIGp1cmlzZGljdGlvbnMuIEFsbCBvdGhlciB0cmFkZW1hcmtzIGFuZCByZWdpc3RlcmVkIHRyYWRlbWFya3MKLW1lbnRpb25lZCBoZXJlaW4gYXJlIHRoZSBwcm9wZXJ0eSBvZiB0aGVpciByZXNwZWN0aXZlIG93bmVycy4KLSUlIFRoaXMgbm90aWNlIGlzIHByb3ZpZGVkIHdpdGggcmVzcGVjdCB0byBSU0EgUEtDUyMxMSBIZWFkZXIgRmlsZXMgJiBTcGVjaWZpY2F0aW9uLCB3aGljaCBtYXkgYmUgaW5jbHVkZWQgd2l0aCB0aGlzIHNvZnR3YXJlOiAKLQotLyogCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggYnkgdGhlIEZ1bmRzWHByZXNzLCBJTkMuIAotICogCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAKLSAqIAotICogRXhwb3J0IG9mIHRoaXMgc29mdHdhcmUgZnJvbSB0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhIG1heSByZXF1aXJlIAotICogYSBzcGVjaWZpYyBsaWNlbnNlIGZyb20gdGhlIFVuaXRlZCBTdGF0ZXMgR292ZXJubWVudC6gIEl0IGlzIHRoZSAKLSAqIHJlc3BvbnNpYmlsaXR5IG9mIGFueSBwZXJzb24gb3Igb3JnYW5pemF0aW9uIGNvbnRlbXBsYXRpbmcgZXhwb3J0IHRvIAotICogb2J0YWluIHN1Y2ggYSBsaWNlbnNlIGJlZm9yZSBleHBvcnRpbmcuIAotICogCi0gKiBXSVRISU4gVEhBVCBDT05TVFJBSU5ULCBwZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgCi0gKiBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgCi0gKiB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IAotICogbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCAKLSAqIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgCi0gKiB0aGUgbmFtZSBvZiBGdW5kc1hwcmVzcy4gbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgCi0gKiB0byBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgCi0gKiBwZXJtaXNzaW9uLqAgRnVuZHNYcHJlc3MgbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiAKLSAqIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLqAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3MgCi0gKiBvciBpbXBsaWVkIHdhcnJhbnR5LiAKLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IgCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRCAKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gCi0gKi8gCi0KLSUlIFRoaXMgbm90aWNlIGlzIHByb3ZpZGVkIHdpdGggcmVzcGVjdCB0byBjZXJ0YWluIGZpbGVzL2NvZGUgd2hpY2ggbWF5IGluY2x1ZGVkIGluIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBBV1Qgd2l0aGluIHRoZSBzb2Z0d2FyZTogCi0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKLUJFR0lOoCBzcmMvc29sYXJpcy9uYXRpdmUvc3VuL2F3dC9IUGtleXN5bS5oIAotQ29weXJpZ2h0IDE5ODcsIDE5OTigIFRoZSBPcGVuIEdyb3VwIAotCi1BbGwgUmlnaHRzIFJlc2VydmVkLiAKLQotVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgCi1pbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gCi0KLVRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIAotT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAKLU1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gCi1JTiBOTyBFVkVOVCBTSEFMTCBUSEUgT1BFTiBHUk9VUCBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiAKLU9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCAKLUFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiAKLU9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gCi0KLUV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lIG9mIFRoZSBPcGVuIEdyb3VwIHNoYWxsIAotbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsIHVzZSBvciAKLW90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIGF1dGhvcml6YXRpb24gCi1mcm9tIFRoZSBPcGVuIEdyb3VwLiAKLQotQ29weXJpZ2h0IDE5ODcgYnkgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24sIE1heW5hcmQsIE1hc3NhY2h1c2V0dHMsIAotCi1BbGwgUmlnaHRzIFJlc2VydmVkIAotCi1QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMgCi1kb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIAotcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCAKLWJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiAKLXN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWVzIG9mIEhld2xldHQgUGFja2FyZCAKLW9yIERpZ2l0YWwgbm90IGJlIAotdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIAotc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAKLQotRElHSVRBTCBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwgSU5DTFVESU5HIAotQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MsIElOIE5PIEVWRU5UIFNIQUxMIAotRElHSVRBTCBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgCi1BTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIAotV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCAKLUFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgCi1TT0ZUV0FSRS4gCi0KLUhFV0xFVFQtUEFDS0FSRCBNQUtFUyBOTyBXQVJSQU5UWSBPRiBBTlkgS0lORCBXSVRIIFJFR0FSRCAKLVRPIFRISVMgU09GV0FSRSwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIAotV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAKLVBVUlBPU0UuoCBIZXdsZXR0LVBhY2thcmQgc2hhbGwgbm90IGJlIGxpYWJsZSBmb3IgZXJyb3JzIAotY29udGFpbmVkIGhlcmVpbiBvciBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIAotY29uc2VxdWVudGlhbCBkYW1hZ2VzIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgZnVybmlzaGluZywgCi1wZXJmb3JtYW5jZSwgb3IgdXNlIG9mIHRoaXMgbWF0ZXJpYWwuIAotCi1FTkSgIHNyYy9zb2xhcmlzL25hdGl2ZS9zdW4vYXd0L0hQa2V5c3ltLmggCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCi1CRUdJTiBzcmMvc29sYXJpcy9uYXRpdmUvc3VuL2F3dC9YcmFuZHIuaCAKLS8qIAotoCogJFhGcmVlODY6IHhjL2xpYi9YcmFuZHIvWHJhbmRyLmgsdiAxLjkgMjAwMi8wOS8yOSAyMzozOTo0NCBrZWl0aHAgRXhwICQgCi2gKiAKLaAqIENvcHlyaWdodCCpIDIwMDAgQ29tcGFxIENvbXB1dGVyIENvcnBvcmF0aW9uLCBJbmMuIAotoCogQ29weXJpZ2h0IKkgMjAwMiBIZXdsZXR0LVBhY2thcmQgQ29tcGFueSwgSW5jLiAKLaAqIAotoCogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSwgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzIAotoCogZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgCi2gKiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgCi2gKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIAotoCogZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgQ29tcGFxIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIAotoCogcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCAKLaAqIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi6gIEhQIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgCi2gKiBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS6gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgCi2gKiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4gCi2gKiAKLaAqIEhQIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLCBJTkNMVURJTkcgQUxMIAotoCogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUywgSU4gTk8gRVZFTlQgU0hBTEwgQ09NUEFRIAotoCogQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIAotoCogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiAKLaAqIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gCi2gKiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLiAKLaAqIAotoCogQXV0aG9yOqAgSmltIEdldHR5cywgSFAgTGFicywgSFAuIAotoCovIAotCi0KLUVORCBzcmMvc29sYXJpcy9uYXRpdmUvc3VuL2F3dC9YcmFuZHIuaCAKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKLUJFR0lOIHNyYy9zb2xhcmlzL25hdGl2ZS9zdW4vYXd0L2V4dHV0aWwuaCAKLS8qIAotoCogJFhvcmc6IGV4dHV0aWwuaCx2IDEuMyAyMDAwLzA4LzE4IDA0OjA1OjQ1IGNvc2tyZXkgRXhwICQgCi2gKiAKLUNvcHlyaWdodCAxOTg5LCAxOTk4oCBUaGUgT3BlbiBHcm91cCAKLQotQWxsIFJpZ2h0cyBSZXNlcnZlZC4gCi0KLVRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAKLQotVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgCi1JTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgCi1GSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULqAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIAotT1BFTiBHUk9VUCBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gCi1BTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiAKLUNPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuIAotCi1FeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZSBvZiBUaGUgT3BlbiBHcm91cCBzaGFsbCBub3QgYmUgCi11c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgCi1pbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBhdXRob3JpemF0aW9uIGZyb20gVGhlIE9wZW4gR3JvdXAuIAotoCogCi2gKiBBdXRob3I6oCBKaW0gRnVsdG9uLCBNSVQgVGhlIE9wZW4gR3JvdXAgCi2gKiAKLaAqoKCgoKCgoKCgoKCgoKCgoKCgoKAgWGxpYiBFeHRlbnNpb24tV3JpdGluZyBVdGlsaXRpZXMgCi2gKiAKLaAqIFRoaXMgcGFja2FnZSBjb250YWlucyB1dGlsaXRpZXMgZm9yIHdyaXRpbmcgdGhlIGNsaWVudCBBUEkgZm9yIHZhcmlvdXMgCi2gKiBwcm90b2NvbCBleHRlbnNpb25zLqAgVEhFU0UgSU5URVJGQUNFUyBBUkUgTk9UIFBBUlQgT0YgVEhFIFggU1RBTkRBUkQgQU5EIAotoCogQVJFIFNVQkpFQ1QgVE8gQ0hBTkdFISAKLaAqLyAKLS8qICRYRnJlZTg2OiB4Yy9pbmNsdWRlL2V4dGVuc2lvbnMvZXh0dXRpbC5oLHYgMS41IDIwMDEvMDEvMTcgMTc6NTM6MjAgZGF3ZXMgRXhwICQgKi8gCi0KLUVORCBzcmMvc29sYXJpcy9uYXRpdmUvc3VuL2F3dC9leHR1dGlsLmggCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCi1CRUdJTqCgIHNyYy9zb2xhcmlzL25hdGl2ZS9zdW4vYXd0L2ZvbnRjb25maWcuaCAKLS8qIAotoCogJFJDU0lkOiB4Yy9saWIvZm9udGNvbmZpZy9mb250Y29uZmlnL2ZvbnRjb25maWcuaCx2IDEuMzAgMjAwMi8wOS8yNiAwMDoxNzoyNyAKLWtlaXRocCBFeHAgJCAKLaAqIAotoCogQ29weXJpZ2h0IKkgMjAwMSBLZWl0aCBQYWNrYXJkIAotoCogCi2gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlLCBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlIGFuZCBpdHMgCi2gKiBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCAKLaAqIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCAKLaAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgCi2gKiBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBLZWl0aCBQYWNrYXJkIG5vdCBiZSB1c2VkIGluIAotoCogYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IAotoCogc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi6gIEtlaXRoIFBhY2thcmQgbWFrZXMgbm8gCi2gKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLqAgSXQgCi2gKiBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LiAKLaAqIAotoCogS0VJVEggUEFDS0FSRCBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwgCi2gKiBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MsIElOIE5PIAotoCogRVZFTlQgU0hBTEwgS0VJVEggUEFDS0FSRCBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCBPUiAKLaAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCAKLaAqIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgCi2gKiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIAotoCogUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4gCi0KLUVORKCgIHNyYy9zb2xhcmlzL25hdGl2ZS9zdW4vYXd0L2ZvbnRjb25maWcuaCAKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKLUJFR0lOIHNyYy9zb2xhcmlzL25hdGl2ZS9zdW4vYXd0L2xpc3QuYyAKLUFORKAgc3JjL3NvbGFyaXMvbmF0aXZlL3N1bi9hd3QvbGlzdC5oIAotQU5EIHNyYy9zb2xhcmlzL25hdGl2ZS9zdW4vYXd0L211bHRpVmlzLmMgCi1BTkSgIHNyYy9zb2xhcmlzL25hdGl2ZS9zdW4vYXd0L211bHRpVmlzLmggCi1BTkSgIHNyYy9zb2xhcmlzL25hdGl2ZS9zdW4vYXd0L3dzdXRpbHMuaCAKLQotQ29weXJpZ2h0IChjKSAxOTk0IEhld2xldHQtUGFja2FyZCBDby4gCi1Db3B5cmlnaHQgKGMpIDE5OTagIFggQ29uc29ydGl1bSAKLQotUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIAotYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIAotIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAKLXdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgCi1kaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gCi1wZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gCi10aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6IAotCi1UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAKLWluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAKLQotVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgCi1PUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIAotTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAKLUlOIE5PIEVWRU5UIFNIQUxMIFRIRSBYIENPTlNPUlRJVU0gQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgCi1PVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgCi1BUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgCi1PVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuIAotCi1FeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZSBvZiB0aGUgWCBDb25zb3J0aXVtIHNoYWxsIAotbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsIHVzZSBvciAKLW90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIGF1dGhvcml6YXRpb24gCi1mcm9tIHRoZSBYIENvbnNvcnRpdW0uIAotCi1FTkQgc3JjL3NvbGFyaXMvbmF0aXZlL3N1bi9hd3QvbGlzdC5jIAotQU5EoCBzcmMvc29sYXJpcy9uYXRpdmUvc3VuL2F3dC9saXN0LmggCi1BTkQgc3JjL3NvbGFyaXMvbmF0aXZlL3N1bi9hd3QvbXVsdGlWaXMuYyAKLUFORKAgc3JjL3NvbGFyaXMvbmF0aXZlL3N1bi9hd3QvbXVsdGlWaXMuaCAKLUFORKAgc3JjL3NvbGFyaXMvbmF0aXZlL3N1bi9hd3Qvd3N1dGlscy5oIAotCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKLUJFR0lOIHNyYy9zb2xhcmlzL25hdGl2ZS9zdW4vYXd0L3JhbmRyLmggCi0KLaAqIAotoCogQ29weXJpZ2h0IKkgMjAwMCwgQ29tcGFxIENvbXB1dGVyIENvcnBvcmF0aW9uLCAKLaAqIENvcHlyaWdodCCpIDIwMDIsIEhld2xldHQgUGFja2FyZCwgSW5jLiAKLaAqIAotoCogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSwgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzIAotoCogZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgCi2gKiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgCi2gKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIAotoCogZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgQ29tcGFxIG9yIEhQIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIAotoCogb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCAKLaAqIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi6gIEhQIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgCi2gKiBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS6gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgCi2gKiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4gCi2gKiAKLaAqIEhQIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLCBJTkNMVURJTkcgQUxMIAotoCogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUywgSU4gTk8gRVZFTlQgU0hBTEwgSFAgCi2gKiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgCi2gKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIAotoCogT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiAKLaAqIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuIAotoCogCi2gKiBBdXRob3I6oCBKaW0gR2V0dHlzLCBIUCBMYWJzLCBIZXdsZXR0LVBhY2thcmQsIEluYy4gCi0KLUVORCBzcmMvc29sYXJpcy9uYXRpdmUvc3VuL2F3dC9yYW5kci5oIAotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCi0KLUJFR0lOIHNyYy9zb2xhcmlzL25hdGl2ZS9zdW4vamF2YTJkL29wZW5nbC9KMkRfR0wvZ2x4LmggCi2gKiBNZXNhIDMtRCBncmFwaGljcyBsaWJyYXJ5IAotoCogVmVyc2lvbjqgIDQuMSAKLaAqIAotoCogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDKgIEJyaWFuIFBhdWygoCBBbGwgUmlnaHRzIFJlc2VydmVkLiAKLaAqIAotoCogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgCi2gKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCAKLaAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gCi2gKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgCi2gKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgCi2gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAKLaAqIAotoCogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgCi2gKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gCi2gKiAKLaAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIAotoCogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIAotoCogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC6gIElOIE5PIEVWRU5UIFNIQUxMIAotoCogQlJJQU4gUEFVTCBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gCi2gKiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiAKLaAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuIAotCi1FTkQgc3JjL3NvbGFyaXMvbmF0aXZlL3N1bi9qYXZhMmQvb3BlbmdsL0oyRF9HTC9nbHguaCAKZGlmZiAtLWdpdCBhL21ha2UvY29tL3N1bi9jcnlwdG8vcHJvdmlkZXIvTWFrZWZpbGUgYi9tYWtlL2NvbS9zdW4vY3J5cHRvL3Byb3ZpZGVyL01ha2VmaWxlCmluZGV4IDY0ZTQzMjAuLmY4MTM0ZGUgMTAwNjQ0Ci0tLSBhL21ha2UvY29tL3N1bi9jcnlwdG8vcHJvdmlkZXIvTWFrZWZpbGUKKysrIGIvbWFrZS9jb20vc3VuL2NyeXB0by9wcm92aWRlci9NYWtlZmlsZQpAQCAtMTkzLDcgKzE5Myw3IEBACiAkKFVOU0lHTkVEX0RJUikvc3VuamNlX3Byb3ZpZGVyLmphcjogYnVpbGQgJChKQ0VfTUFOSUZFU1RfRklMRSkKIAkkKHByZXAtdGFyZ2V0KQogCSQoQk9PVF9KQVJfQ01EKSBjbWYgJChKQ0VfTUFOSUZFU1RfRklMRSkgJEAgJChKQVJfRElSUykgXAotCSAgICAkKEpBUl9KRkxBR1MpCisJICAgICQoQk9PVF9KQVJfSkZMQUdTKQogCUAkKGphdmEtdm0tY2xlYW51cCkKIAogCkBAIC0yNTMsNyArMjUzLDcgQEAKIAlAJChDRCkgJChPQkZVU19ESVIpOyAkKGphdmEtdm0tY2xlYW51cCkKIAkkKEJPT1RfSkFSX0NNRCkgY21mICQoSkNFX01BTklGRVNUX0ZJTEUpICRAIFwKIAkgICAgLUMgJChPQkZVU19ESVIpL2J1aWxkIGNvbSBcCi0JICAgICQoSkFSX0pGTEFHUykKKwkgICAgJChCT09UX0pBUl9KRkxBR1MpCiAJJChzaWduLXRhcmdldCkKIAlAJChqYXZhLXZtLWNsZWFudXApCiAKZGlmZiAtLWdpdCBhL21ha2UvY29tL3N1bi9pbnB1dG1ldGhvZHMvaW5kaWNpbS9NYWtlZmlsZSBiL21ha2UvY29tL3N1bi9pbnB1dG1ldGhvZHMvaW5kaWNpbS9NYWtlZmlsZQppbmRleCA2Mzg4NTRhLi40YzdkYzk3IDEwMDY0NAotLS0gYS9tYWtlL2NvbS9zdW4vaW5wdXRtZXRob2RzL2luZGljaW0vTWFrZWZpbGUKKysrIGIvbWFrZS9jb20vc3VuL2lucHV0bWV0aG9kcy9pbmRpY2ltL01ha2VmaWxlCkBAIC03MSw3ICs3MSw3IEBACiAJJChCT09UX0pBUl9DTUQpIC1jZiAkQCBcCiAJICAgICAtQyAkKENMQVNTREVTVERJUikgY29tIFwKIAkgICAgIC1DICQoQ0xBU1NERVNURElSKSAkKFNFUlZJQ0VTRElSKSBcCi0JICAgICAkKEpBUl9KRkxBR1MpCisJICAgICAkKEJPT1RfSkFSX0pGTEFHUykKIAlAJChqYXZhLXZtLWNsZWFudXApCiAKIGNsZWFuOjoKZGlmZiAtLWdpdCBhL21ha2UvY29tL3N1bi9pbnB1dG1ldGhvZHMvdGhhaWltL01ha2VmaWxlIGIvbWFrZS9jb20vc3VuL2lucHV0bWV0aG9kcy90aGFpaW0vTWFrZWZpbGUKaW5kZXggZTU2NTMxOS4uOWI3MDlkNyAxMDA2NDQKLS0tIGEvbWFrZS9jb20vc3VuL2lucHV0bWV0aG9kcy90aGFpaW0vTWFrZWZpbGUKKysrIGIvbWFrZS9jb20vc3VuL2lucHV0bWV0aG9kcy90aGFpaW0vTWFrZWZpbGUKQEAgLTcxLDcgKzcxLDcgQEAKIAkkKEJPT1RfSkFSX0NNRCkgLWNmICRAIFwKIAkgICAgIC1DICQoQ0xBU1NERVNURElSKSBjb20gXAogCSAgICAgLUMgJChDTEFTU0RFU1RESVIpICQoU0VSVklDRVNESVIpIFwKLQkgICAgICQoSkFSX0pGTEFHUykKKwkgICAgICQoQk9PVF9KQVJfSkZMQUdTKQogCUAkKGphdmEtdm0tY2xlYW51cCkKIAogY2xlYW46OgpkaWZmIC0tZ2l0IGEvbWFrZS9jb21tb24vQnVpbGRUb29sSmFyLmdtayBiL21ha2UvY29tbW9uL0J1aWxkVG9vbEphci5nbWsKaW5kZXggN2Q0YWQ0MS4uNjM4ZTU2YiAxMDA2NDQKLS0tIGEvbWFrZS9jb21tb24vQnVpbGRUb29sSmFyLmdtaworKysgYi9tYWtlL2NvbW1vbi9CdWlsZFRvb2xKYXIuZ21rCkBAIC00Niw3ICs0Niw3IEBACiAJICAgIC1zb3VyY2VwYXRoICQoQlVJTERUT09MX1NPVVJDRV9ST09UKSAkKEJVSUxEVE9PTF9NQUlOX1NPVVJDRV9GSUxFKQogCSQoQk9PVF9KQVJfQ01EKSBjZm0gJEAgJChCVUlMRFRPT0xfTUFOSUZFU1RfRklMRSkgXAogCSAgICAtQyAkKEJVSUxEVE9PTENMQVNTRElSKSAkKFBLR0RJUikgXAotCSAgICAkKEpBUl9KRkxBR1MpIHx8ICQoUk0pICRACisJICAgICQoQk9PVF9KQVJfSkZMQUdTKSB8fCAkKFJNKSAkQAogCUAkKGphdmEtdm0tY2xlYW51cCkKIAogIyBQcmludGluZyBvdXQgYSBidWlsZCB0b29sIGluZm9ybWF0aW9uIGxpbmUKZGlmZiAtLWdpdCBhL21ha2UvY29tbW9uL0RlZnMtbGludXguZ21rIGIvbWFrZS9jb21tb24vRGVmcy1saW51eC5nbWsKaW5kZXggNjU4MTRiYS4uMjhkNTgzNyAxMDA2NDQKLS0tIGEvbWFrZS9jb21tb24vRGVmcy1saW51eC5nbWsKKysrIGIvbWFrZS9jb21tb24vRGVmcy1saW51eC5nbWsKQEAgLTg2LDE4ICs4NiwyMiBAQAogIwogIyBEZWZhdWx0IG9wdGltaXphdGlvbgogIwotQ0NfSElHSEVTVF9PUFQgPSAtTzMKLUNDX0hJR0hFUl9PUFQgID0gLU8zCi1DQ19MT1dFUl9PUFQgICA9IC1PMgotQ0NfTk9fT1BUICAgICAgPQogCi1pZmVxICgkKFBST0RVQ1QpLCBqYXZhKQotICAgIF9PUFQgPSAkKENDX0hJR0hFUl9PUFQpCi1lbHNlCi0gICAgX09QVCA9ICQoQ0NfTE9XRVJfT1BUKQotICAgIENQUEZMQUdTX0RCRyAgICArPSAtRExPR0dJTkcgCitpZm5kZWYgT1BUSU1JWkFUSU9OX0xFVkVMCisgIGlmZXEgKCQoUFJPRFVDVCksIGphdmEpCisgICAgT1BUSU1JWkFUSU9OX0xFVkVMID0gSElHSEVSCisgIGVsc2UKKyAgICBPUFRJTUlaQVRJT05fTEVWRUwgPSBMT1dFUgorICBlbmRpZgogZW5kaWYKIAorQ0NfT1BUL05PTkUgICAgID0gCitDQ19PUFQvTE9XRVIgICAgPSAtTzIKK0NDX09QVC9ISUdIRVIgICA9IC1PMworQ0NfT1BUL0hJR0hFU1QgID0gLU8zCisKK0NDX09QVCAgICAgICAgICA9ICQoQ0NfT1BULyQoT1BUSU1JWkFUSU9OX0xFVkVMKSkKKwogIyBGb3IgYWxsIHBsYXRmb3JtcywgZG8gbm90IG9taXQgdGhlIGZyYW1lIHBvaW50ZXIgcmVnaXN0ZXIgdXNhZ2UuIAogIyAgICBXZSBuZWVkIHRoaXMgZnJhbWUgcG9pbnRlciB0byBtYWtlIGl0IGVhc3kgdG8gd2FsayB0aGUgc3RhY2tzLgogIyAgICBUaGlzIHNob3VsZCBiZSB0aGUgZGVmYXVsdCBvbiBYODYsIGJ1dCBpYTY0IGFuZCBhbWQ2NCBtYXkgbm90IGhhdmUgdGhpcwpAQCAtMTEyLDE4ICsxMTYsNiBAQAogQ0ZMQUdTX1JFUVVJUkVEICAgICAgICAgPSAgJChDRkxBR1NfUkVRVUlSRURfJChBUkNIKSkKIExERkxBR1NfQ09NTU9OICAgICAgICAgICs9ICQoTERGTEFHU19DT01NT05fJChBUkNIKSkKIAotIyBBZGQgaW4gcGxhdGZvcm0gc3BlY2lmaWMgb3B0aW1pemF0aW9ucyBmb3IgYWxsIG9wdCBsZXZlbHMKLUNDX0hJR0hFU1RfT1BUICs9ICQoX09QVF8kKEFSQ0gpKQotQ0NfSElHSEVSX09QVCAgKz0gJChfT1BUXyQoQVJDSCkpCi1DQ19MT1dFUl9PUFQgICArPSAkKF9PUFRfJChBUkNIKSkKLQotIyBJZiBOT19PUFRJTUlaQVRJT05TIGlzIGRlZmluZWQgaW4gdGhlIGVudmlyb25tZW50LCB0dXJuIGFsbCBvcHRpbXphdGlvbnMgb2ZmCi1pZmRlZiBOT19PUFRJTUlaQVRJT05TCi0gIENDX0hJR0hFU1RfT1BUID0gJChDQ19OT19PUFQpCi0gIENDX0hJR0hFUl9PUFQgID0gJChDQ19OT19PUFQpCi0gIENDX0xPV0VSX09QVCAgID0gJChDQ19OT19PUFQpCi1lbmRpZgotCiAjCiAjIFNlbGVjdGlvbiBvZiB3YXJuaW5nIG1lc3NhZ2VzCiAjCkBAIC0xNjIsMTkgKzE1NCwxOSBAQAogICBlbmRpZgogZW5kaWYKIAotQ0ZMQUdTX09QVCAgICAgID0gJChQT1BUKQorQ0ZMQUdTX09QVCAgICAgID0gJChDQ19PUFQpCiBDRkxBR1NfREJHICAgICAgPSAkKERFQlVHX0ZMQUcpCiBDRkxBR1NfQ09NTU9OICs9ICQoQ0ZMQUdTX1JFUVVJUkVEKQogCiBDWFhGTEFHU19DT01NT04gPSAkKEdMT0JBTF9LUElDKSAtRENDX05PRVggJChHQ0NfV0FSTklOR1MpCi1DWFhGTEFHU19PUFQJPSAkKFBPUFQpCitDWFhGTEFHU19PUFQJPSAkKENDX09QVCkKIENYWEZMQUdTX0RCRwk9ICQoREVCVUdfRkxBRykKIENYWEZMQUdTX0NPTU1PTiArPSAkKENGTEFHU19SRVFVSVJFRCkKIAogIyBGQVNUREVCVUc6IE9wdGltaXplIHRoZSBjb2RlIGluIHRoZSAtZyB2ZXJzaW9ucywgZ2l2ZXMgdXMgYSBmYXN0ZXIgZGVidWcgamF2YQogaWZlcSAoJChGQVNUREVCVUcpLCB0cnVlKQotICBDRkxBR1NfREJHICAgICs9ICQoQ0NfTE9XRVJfT1BUKQotICBDWFhGTEFHU19EQkcJKz0gJChDQ19MT1dFUl9PUFQpCisgIENGTEFHU19EQkcgICAgKz0gJChDQ19PUFQvTE9XRVIpCisgIENYWEZMQUdTX0RCRwkrPSAkKENDX09QVC9MT1dFUikKIGVuZGlmCiAKIENQUEZMQUdTX0NPTU1PTiA9IC1EJChBUkNIKSAtREFSQ0g9JyIkKEFSQ0gpIicgLURMSU5VWCAkKFZFUlNJT05fREVGSU5FUykgXApAQCAtMTg2LDYgKzE3OCw5IEBACiAKIENQUEZMQUdTX09QVCAgICA9IAogQ1BQRkxBR1NfREJHICAgID0gLURERUJVRworaWZuZXEgKCQoUFJPRFVDVCksIGphdmEpCisgIENQUEZMQUdTX0RCRyAgICArPSAtRExPR0dJTkcgCitlbmRpZgogCiBpZmRlZiBMSUJSQVJZCiAgICMgTGlicmFyaWVzIG5lZWQgdG8gbG9jYXRlIG90aGVyIGxpYnJhcmllcyBhdCBydW50aW1lLCBhbmQgeW91IGNhbiB0ZWxsCmRpZmYgLS1naXQgYS9tYWtlL2NvbW1vbi9EZWZzLXNvbGFyaXMuZ21rIGIvbWFrZS9jb21tb24vRGVmcy1zb2xhcmlzLmdtawppbmRleCBkMDg3NGU0Li45YjVjYzhiIDEwMDY0NAotLS0gYS9tYWtlL2NvbW1vbi9EZWZzLXNvbGFyaXMuZ21rCisrKyBiL21ha2UvY29tbW9uL0RlZnMtc29sYXJpcy5nbWsKQEAgLTg2LDE1ICs4NiwxNiBAQAogIwogIyBKYXZhIGRlZmF1bHQgb3B0aW1pemF0aW9uICgteDA0Ly1PMikgZXRjLiAgQXBwbGllcyB0byB0aGUgVk0uCiAjCi1pZmVxICgkKFBST0RVQ1QpLCBqYXZhKQotICAgIF9PUFQgPSAkKENDX0hJR0hFUl9PUFQpCi1lbHNlCi0gICAgX09QVCA9ICQoQ0NfTE9XRVJfT1BUKQotICAgIENQUEZMQUdTX0RCRyAgICArPSAtRExPR0dJTkcgLUREQklORk8KK2lmbmRlZiBPUFRJTUlaQVRJT05fTEVWRUwKKyAgaWZlcSAoJChQUk9EVUNUKSwgamF2YSkKKyAgICBPUFRJTUlaQVRJT05fTEVWRUwgPSBISUdIRVIKKyAgZWxzZQorICAgIE9QVElNSVpBVElPTl9MRVZFTCA9IExPV0VSCisgIGVuZGlmCiBlbmRpZgogCiAjCi0jIElmIC1YYSBpcyBpbiBDRkxBR1NfQ09NTU9OIGl0IHdpbGwgZW5kIHVwIGFoZWFkIG9mICQoUE9QVCkgZm9yIHRoZQorIyBJZiAtWGEgaXMgaW4gQ0ZMQUdTX0NPTU1PTiBpdCB3aWxsIGVuZCB1cCBhaGVhZCBvZiAkKENDX09QVCkgZm9yIHRoZQogIyBvcHRpbWl6ZWQgYnVpbGQsIGFuZCB0aGF0IG9yZGVyaW5nIG9mIHRoZSBmbGFncyBjb21wbGV0ZWx5IGZyZWFrcwogIyBvdXQgY2MuICBIZW5jZSwgLVhhIGlzIGluc3RlYWQgaW4gZWFjaCBDRkxBR1MgdmFyaWFudC4KICMKQEAgLTEyMyw4ICsxMjQsOCBAQAogIwogIyBEZWJ1ZyBmbGFnIGZvciBDIGFuZCBDKysgY29tcGlsZXIKICMKLUNGTEFHU19ERUJVR19PUFRJT049LWcKLUNYWEZMQUdTX0RFQlVHX09QVElPTj0tZworQ0ZMQUdTX0RFQlVHX09QVElPTiAgICA9IC1nICQoQ0NfT1BUL05PTkUpCitDWFhGTEFHU19ERUJVR19PUFRJT04gID0gLWcgJChDWFhfT1BUL05PTkUpCiAKICMgVHVybiBvZmYgLWcgaWYgd2UgYXJlIGRvaW5nIHRjb3YgYnVpbGQKIGlmZGVmIFRDT1ZfQlVJTEQKQEAgLTE0Miw5ICsxNDMsOCBAQAogIyAgICAgICAgUGVyZm9ybWFuY2Uvc2l6ZSBvZiBmaWxlcyBzaG91bGQgYmUgYWJvdXQgdGhlIHNhbWUsIG1heWJlIHNtYWxsZXIuCiAjCiBpZmVxICgkKEZBU1RERUJVRyksIHRydWUpCi0gIENDX0ZBU1RERUJVR19PUFQgICAgICAgPSAkKENDX0xPV0VSX09QVCkKLSAgQ0ZMQUdTX0RFQlVHX09QVElPTiAgICA9IC1nICAgJChDQ19GQVNUREVCVUdfT1BUKQotICBDWFhGTEFHU19ERUJVR19PUFRJT04gID0gLWcwICAkKENDX0ZBU1RERUJVR19PUFQpCisgIENGTEFHU19ERUJVR19PUFRJT04gICAgPSAtZyAgJChDQ19PUFQvTE9XRVIpCisgIENYWEZMQUdTX0RFQlVHX09QVElPTiAgPSAtZzAgJChDWFhfT1BUL0xPV0VSKQogZW5kaWYKIAogQ0ZMQUdTX0NPTU1PTiAgID0gLUwkKE9CSkRJUikKQEAgLTE2MCw3ICsxNjAsNyBAQAogQ1hYRkxBR1NfQ09NTU9OICs9IC1lcnJ0YWdzPXllcwogCiAjIE9wdGltaXphdGlvbiBmbGFncwotQ0ZMQUdTX09QVCAgICAgID0gJChQT1BUKQorQ0ZMQUdTX09QVCAgICAgID0gJChDQ19PUFQpCiAKICMgRGVidWcgdmVyc2lvbiBmbGFncwogQ0ZMQUdTX0RCRyAgICAgID0gJChDRkxBR1NfREVCVUdfT1BUSU9OKQpAQCAtMTk3LDcgKzE5Nyw3IEBACiAgIENYWEZMQUdTX0NPTU1PTiArPSAtZXJyd2Fybj0lYWxsCiBlbmRpZgogCi1DWFhGTEFHU19PUFQJPSAkKFBPUFQpCitDWFhGTEFHU19PUFQJPSAkKENYWF9PUFQpCiBDWFhGTEFHU19EQkcJPSAkKENYWEZMQUdTX0RFQlVHX09QVElPTikKIENYWEZMQUdTX0NPTU1PTiArPSAkKENGTEFHU19SRVFVSVJFRCkKIApAQCAtMjY3LDYgKzI2NywxMCBAQAogQ1BQRkxBR1NfT1BUICAgID0gLUROREVCVUcKIENQUEZMQUdTX0RCRyAgICA9IC1EREVCVUcKIAoraWZuZXEgKCQoUFJPRFVDVCksIGphdmEpCisgIENQUEZMQUdTX0RCRyAgICArPSAtRExPR0dJTkcgLUREQklORk8KK2VuZGlmCisKIGlmZXEgKCQoQVJDSF9GQU1JTFkpLCBpNTg2KQogICAjIFRoZSBtYWNybyBfTElUVExFX0VORElBTiBuZWVkcyB0byBiZSBkZWZpbmVkIHRoZSBzYW1lIHRvIGF2b2lkIHRoZQogICAjICAgU3VuIEMgY29tcGlsZXIgd2FybmluZyBtZXNzYWdlOiB3YXJuaW5nOiBtYWNybyByZWRlZmluZWQ6IF9MSVRUTEVfRU5ESUFOCkBAIC00MTAsNjMgKzQxNCwxNTEgQEAKICMgRGlmZmVyZW50ICJsZXZlbHMiIG9mIG9wdGltaXphdGlvbi4KICMKIGlmZXEgKCQoQ0NfVkVSU0lPTiksZ2NjKQotICBDQ19ISUdIRVNUX09QVCA9IC1PMwotICBDQ19ISUdIRVJfT1BUICA9IC1PMwotICBDQ19MT1dFUl9PUFQgICA9IC1PMgorICAKKyAgQ0NfT1BUL05PTkUgICAgID0KKyAgQ0NfT1BUL0xPV0VSICAgID0gLU8yCisgIENDX09QVC9ISUdIRVIgICA9IC1PMworICBDQ19PUFQvSElHSEVTVCAgPSAtTzMKKworICBDWFhfT1BUL05PTkUgICAgPQorICBDWFhfT1BUL0xPV0VSICAgPSAtTzIKKyAgQ1hYX09QVC9ISUdIRVIgID0gLU8zCisgIENYWF9PUFQvSElHSEVTVCA9IC1PMworCiAgIENGTEFHU19SRVFVSVJFRF9pNTg2ICArPSAtZm5vLW9taXQtZnJhbWUtcG9pbnRlcgogICBDRkxBR1NfUkVRVUlSRURfYW1kNjQgKz0gLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIKKyAgCiAgICMgQXV0b21hdGljIHByZWNvbXBpbGVkIGhlYWRlciBvcHRpb24gdG8gdXNlIChpZiBDT01QSUxFX0FQUFJPQUNIPWJhdGNoKQogICAjICAgKFNlZSBSdWxlcy5nbWspIE1heSBuZWVkIHRvIHdhaXQgZm9yIGdjYyA1PwogICBBVVRPTUFUSUNfUENIX09QVElPTiA9IAorCiBlbHNlCisgIAogICAjIEhpZ2hlc3QgY291bGQgYmUgLXhPNSwgYnV0IGluZGljYXRpb25zIGFyZSB0aGF0IC14TzUgc2hvdWxkIGJlIHJlc2VydmVkCiAgICMgICAgZm9yIGEgcGVyLWZpbGUgdXNlLCBvbiBzb3VyY2VzIHdpdGgga25vd24gcGVyZm9ybWFuY2UgaW1wYWN0cy4KLSAgQ0NfSElHSEVTVF9PUFQgPSAteE80Ci0gIENDX0hJR0hFUl9PUFQgID0gLXhPNAotICBDQ19MT1dFUl9PUFQgICA9IC14TzIKKyAgT1BUX0xFVkVML0xPV0VSICAgID0gMgorICBPUFRfTEVWRUwvSElHSEVSICAgPSA0CisgIE9QVF9MRVZFTC9ISUdIRVNUICA9IDQKKyAgCisgIENDX09QVC9OT05FICAgICA9CisgIENDX09QVC9MT1dFUiAgICA9ICQoT1BUX0xFVkVML0xPV0VSOiU9LXhPJSkKKyAgQ0NfT1BUL0hJR0hFUiAgID0gJChPUFRfTEVWRUwvSElHSEVSOiU9LXhPJSkKKyAgQ0NfT1BUL0hJR0hFU1QgID0gJChPUFRfTEVWRUwvSElHSEVTVDolPS14TyUpCisgIAorICBDWFhfT1BUL05PTkUgICAgPQorICBDWFhfT1BUL0xPV0VSICAgPSAkKE9QVF9MRVZFTC9MT1dFUjolPS14TyUpCisgIENYWF9PUFQvSElHSEVSICA9ICQoT1BUX0xFVkVML0hJR0hFUjolPS14TyUpCisgIENYWF9PUFQvSElHSEVTVCA9ICQoT1BUX0xFVkVML0hJR0hFU1Q6JT0teE8lKQorICAgIAorICAjIFdlIG5lZWQgc3RhY2sgZnJhbWVzIGF0IGFsbCB0aW1lcworICBVU0VfWEtFRVBGUkFNRV9PUFRJT04gPSBmYWxzZQorICBpZmVxICgkKFVTRV9YS0VFUEZSQU1FX09QVElPTiksdHJ1ZSkKKyAgICAKKyAgICAjIFVua25vd24gc3BlbGxpbmcgb24gdGhpcyBvcHRpb24gYXQgdGhpcyB0aW1lIChNYXliZSBpbiBTUzEzPykKKyAgICBDQ19YS0VFUEZSQU1FX09QVElPTlMgID0gLXhrZWVwZnJhbWUKKyAgICBDWFhfWEtFRVBGUkFNRV9PUFRJT05TID0gLXhrZWVwZnJhbWUKKyAgCisgIGVsc2UKKyAgCisgICAgIyBPbiBYODYsIG1ha2Ugc3VyZSB0YWlsIGNhbGwgb3B0aW1pemF0aW9uIGlzIG9mZgorICAgICMgICAgVGhlIHogYW5kIHkgYXJlIHRoZSB0YWlsIGNhbGwgb3B0aW1pemF0aW9ucy4KKyAgICBpZmVxICgkKEFSQ0hfRkFNSUxZKSwgaTU4NikKKyAgICAgIGlmZXEgKCQoc2hlbGwgJChFWFBSKSAkKENDX1ZFUikgXD4gNS44KSwgMSkKKyAgICAgICAgIyBTb21laG93LCB0YWlsIGNhbGwgb3B0aW1pemF0aW9uIGlzIGNyZWVwaW5nIGluLgorICAgICAgICAjICAgIE1ha2Ugc3VyZSBpdCBpcyBvZmYuCisJIyBXQVJOSU5HOiBUaGVzZSBtYXkgY2F1c2UgY29tcGlsZXIgd2FybmluZ3MgYWJvdXQgZHVwbGljYXRlIC1PIG9wdGlvbnMKKyAgICAgICAgQ0NfWEtFRVBGUkFNRV9PUFRJT05TICArPSAtV3UsLU8kKE9QVF9MRVZFTC8kKE9QVElNSVpBVElPTl9MRVZFTCkpfnl6CisgICAgICAgIENYWF9YS0VFUEZSQU1FX09QVElPTlMgKz0gLVFvcHRpb24gdWJlIC1PJChPUFRfTEVWRUwvJChPUFRJTUlaQVRJT05fTEVWRUwpKX55egorICAgICAgZW5kaWYKKyAgICBlbmRpZgorICAKKyAgICAjICBPbiBpNTg2IHdlIG5lZWQgdG8gdGVsbCB0aGUgY29kZSBnZW5lcmF0b3IgdG8gQUxXQVlTIHVzZSBhCisgICAgIyAgIGZyYW1lIHBvaW50ZXIuCisgICAgaWZlcSAoJChBUkNIX0ZBTUlMWSksIGk1ODYpCisgICAgICAjIE5vdGUgdGhhdCBpbiA1LjcsIHRoaXMgaXMgZG9uZSB3aXRoIC14cmVncz1ubyVmcmFtZXB0cgorICAgICAgaWZlcSAoJChDQ19WRVIpLCA1LjUpCisgICAgICAgICMgSXQncyBub3QgZXhhY3RseSBjbGVhciB3aGVuIHRoaXMgb3B0aW1pemF0aW9uIGtpY2tzIGluLCB0aGUKKyAgICAgICAgIyAgIGN1cnJlbnQgYXNzdW1wdGlvbiBpcyAteE80IG9yIGdyZWF0ZXIgYW5kIGZvciBDKysgd2l0aAorICAgICAgICAjICAgdGhlIC1mZWF0dXJlcz1ubyVleGNlcHQgb3B0aW9uIGFuZCAteE80IGFuZCBncmVhdGVyLgorICAgICAgICAjICAgQm90dG9tIGxpbmUgaXMsIHdlIEFMV0FZUyB3YW50IGEgZnJhbWUgcG9pbnRlciEKKyAgICAgICAgQ0NfWEtFRVBGUkFNRV9PUFRJT05TICArPSAtV3UsLVp+QgorICAgICAgICBDWFhfWEtFRVBGUkFNRV9PUFRJT05TICs9IC1Rb3B0aW9uIHViZSAtWn5CCisgICAgICBlbmRpZgorICAgICAgaWZlcSAoJChzaGVsbCAkKEVYUFIpICQoQ0NfVkVSKSBcPiA1LjYpLCAxKQorICAgICAgICAjIERvIE5PVCB1c2UgZnJhbWUgcG9pbnRlciByZWdpc3RlciBhcyBhIGdlbmVyYWwgcHVycG9zZSBvcHQgcmVnaXN0ZXIKKyAgICAgICAgQ0NfT1BUL05PTkUgICAgICAgICAgICArPSAteHJlZ3M9bm8lZnJhbWVwdHIKKyAgICAgICAgQ1hYX09QVC9OT05FICAgICAgICAgICArPSAteHJlZ3M9bm8lZnJhbWVwdHIKKyAgICAgICAgQ0NfWEtFRVBGUkFNRV9PUFRJT05TICArPSAteHJlZ3M9bm8lZnJhbWVwdHIKKyAgICAgICAgQ1hYX1hLRUVQRlJBTUVfT1BUSU9OUyArPSAteHJlZ3M9bm8lZnJhbWVwdHIKKyAgICAgIGVuZGlmCisgICAgZW5kaWYKKyAgCisgICAgIyAgT3B0aW1pemVyIGZvciBzcGFyYyBuZWVkcyB0byBiZSB0b2xkIG5vdCB0byBkbyBjZXJ0YWluIHRoaW5ncworICAgICMgICByZWxhdGVkIHRvIGZyYW1lcyBvciBzYXZlIGluc3RydWN0aW9ucy4KKyAgICBpZmVxICgkKEFSQ0hfRkFNSUxZKSwgc3BhcmMpCisgICAgICAjICBEbyBub3QgdXNlIHNhdmUgaW5zdHJ1Y3Rpb25zIGluc3RlYWQgb2YgYWRkIGluc3RydWN0aW9ucworICAgICAgIyAgVGhpcyB3YXMgYW4gb3B0aW1pemF0aW9uIHN0YXJ0aW5nIGluIFNDNS4wIHRoYXQgbWFkZSBpdCBoYXJkIGZvciB1cyB0bworICAgICAgIyAgICBmaW5kIHRoZSAic2F2ZSIgaW5zdHJ1Y3Rpb24gKHdoaWNoIGdvdCB0dXJuZWQgaW50byBhbiAiYWRkIikKKyAgICAgIENDX1hLRUVQRlJBTUVfT1BUSU9OUyAgKz0gLVdjLC1Rcm0tcworICAgICAgQ1hYX1hLRUVQRlJBTUVfT1BUSU9OUyArPSAtUW9wdGlvbiBjZyAtUXJtLXMKKyAgICAgICMgRG9uJ3QgYWxsb3cgdGFpbCBjYWxsIGNvZGUgb3B0aW1pemF0aW9uLiBTdGFydGVkIGluIFNDNS4wLgorICAgICAgIyAgICBXZSBkb24ndCBsaWtlIGNvZGUgb2YgdGhpcyBmb3JtOgorICAgICAgIwlzYXZlCisgICAgICAjCTxjb2RlPgorICAgICAgIwljYWxsIGZvbworICAgICAgIwkgICByZXN0b3JlCisgICAgICAjICAgYmVjYXVzZSB3ZSBjYW4ndCB0ZWxsIGlmIHRoZSBtZXRob2Qgd2lsbCBoYXZlIGEgc3RhY2sgZnJhbWUKKyAgICAgICMgICBhbmQgcmVnaXN0ZXIgd2luZG93cyBvciBub3QuCisgICAgICBDQ19YS0VFUEZSQU1FX09QVElPTlMgICs9IC1XYywtUWlzZWxlY3QtVDAKKyAgICAgIENYWF9YS0VFUEZSQU1FX09QVElPTlMgKz0gLVFvcHRpb24gY2cgLVFpc2VsZWN0LVQwCisgICAgZW5kaWYKKyAgCisgIGVuZGlmCisKKyAgIyBFeHRyYSBvcHRpb25zIHVzZWQgd2l0aCBISUdIRVNUCiAgICMKLSAgIyBXQVJOSU5HOiBVc2Ugb2YgX09QVD0kKENDX0hJR0hFU1RfT1BUKSBpbiB5b3VyIE1ha2VmaWxlIG5lZWRzIHRvIGJlCisgICMgV0FSTklORzogVXNlIG9mIE9QVElNSVpBVElPTl9MRVZFTD1ISUdIRVNUIGluIHlvdXIgTWFrZWZpbGUgbmVlZHMgdG8gYmUKICAgIyAgICAgICAgICBkb25lIHdpdGggY2FyZSwgdGhlcmUgYXJlIHNvbWUgYXNzdW1wdGlvbnMgYmVsb3cgdGhhdCBuZWVkIHRvCiAgICMgICAgICAgICAgYmUgdW5kZXJzdG9vZCBhYm91dCB0aGUgdXNlIG9mIHBvaW50ZXJzLCBhbmQgSUVFRSBiZWhhdmlvci4KICAgIwogICAjIFVzZSBub24tc3RhbmRhcmQgZmxvYXRpbmcgcG9pbnQgbW9kZSAobm90IElFRUUgNzU0KQotICBDQ19ISUdIRVNUX09QVCArPSAtZm5zCisgIENDX0hJR0hFU1RfRVhUUkFTICs9IC1mbnMKICAgIyBEbyBzb21lIHNpbXBsaWZpY2F0aW9uIG9mIGZsb2F0aW5nIHBvaW50IGFyaXRobWV0aWMgKG5vdCBJRUVFIDc1NCkKLSAgQ0NfSElHSEVTVF9PUFQgKz0gLWZzaW1wbGUKKyAgQ0NfSElHSEVTVF9FWFRSQVMgKz0gLWZzaW1wbGUKICAgIyBVc2Ugc2luZ2xlIHByZWNpc2lvbiBmbG9hdGluZyBwb2ludCB3aXRoICdmbG9hdCcKLSAgQ0NfSElHSEVTVF9PUFQgKz0gLWZzaW5nbGUKKyAgQ0NfSElHSEVTVF9FWFRSQVMgKz0gLWZzaW5nbGUKICAgIyBBc3N1bWUgbWVtb3J5IHJlZmVyZW5jZXMgdmlhIGJhc2ljIHBvaW50ZXIgdHlwZXMgZG8gbm90IGFsaWFzCiAgICMgICAoU291cmNlIHdpdGggZXhjZXNzaW5nIHBvaW50ZXIgY2FzdGluZyBhbmQgZGF0YSBhY2Nlc3Mgd2l0aCBtaXhlZCAKICAgIyAgICBwb2ludGVyIHR5cGVzIGFyZSBub3QgcmVjb21tZW5kZWQpCi0gIENDX0hJR0hFU1RfT1BUICs9IC14YWxpYXNfbGV2ZWw9YmFzaWMKKyAgQ0NfSElHSEVTVF9FWFRSQVMgKz0gLXhhbGlhc19sZXZlbD1iYXNpYwogICAjIFVzZSBpbnRyaW5zaWMgb3IgaW5saW5lIHZlcnNpb25zIGZvciBtYXRoL3N0ZCBmdW5jdGlvbnMKICAgIyAgIChJZiB5b3UgZXhwZWN0IHBlcmZlY3QgZXJybm8gYmVoYXZpb3IsIGRvIG5vdCB1c2UgdGhpcykKLSAgQ0NfSElHSEVTVF9PUFQgKz0gLXhidWlsdGluPSVhbGwKKyAgQ0NfSElHSEVTVF9FWFRSQVMgKz0gLXhidWlsdGluPSVhbGwKICAgIyBMb29wIGRhdGEgZGVwZW5kZW5jeSBvcHRpbWl6YXRpb25zIChuZWVkIC14TzMgb3IgaGlnaGVyKQotICBDQ19ISUdIRVNUX09QVCArPSAteGRlcGVuZAorICBDQ19ISUdIRVNUX0VYVFJBUyArPSAteGRlcGVuZAogICAjIFBvaW50ZXIgcGFyYW1ldGVycyB0byBmdW5jdGlvbnMgZG8gbm90IG92ZXJsYXAKICAgIyAgIChTaW1pbGFyIHRvIC14YWxpYXNfbGV2ZWw9YmFzaWMgdXNhZ2UsIGJ1dCBsZXNzIG9idmlvdXMgc29tZXRpbWVzLgogICAjICAgIElmIHlvdSBwYXNzIGluIG11bHRpcGxlIHBvaW50ZXJzIHRvIHRoZSBzYW1lIGRhdGEsIGRvIG5vdCB1c2UgdGhpcykKLSAgQ0NfSElHSEVTVF9PUFQgKz0gLXhyZXN0cmljdAorICBDQ19ISUdIRVNUX0VYVFJBUyArPSAteHJlc3RyaWN0CiAgICMgSW5saW5lIHNvbWUgbGlicmFyeSByb3V0aW5lcwogICAjICAgKElmIHlvdSBleHBlY3QgcGVyZmVjdCBlcnJubyBiZWhhdmlvciwgZG8gbm90IHVzZSB0aGlzKQotICBDQ19ISUdIRVNUX09QVCArPSAteGxpYm1pbAorICBDQ19ISUdIRVNUX0VYVFJBUyArPSAteGxpYm1pbAogICAjIFVzZSBvcHRpbWl6ZWQgbWF0aCByb3V0aW5lcwogICAjICAgKElmIHlvdSBleHBlY3QgcGVyZmVjdCBlcnJubyBiZWhhdmlvciwgZG8gbm90IHVzZSB0aGlzKQogICAjICBDYW4gY2F1c2UgdW5kZWZpbmVkIGV4dGVybmFsIG9uIFNvbGFyaXMgOCBYODYgb24gX19zaW5jb3MsIHJlbW92aW5nIGZvciBub3cKLSAgIyAgQ0NfSElHSEVTVF9PUFQgKz0gLXhsaWJtb3B0CisgICMgIENDX0hJR0hFU1RfRVhUUkFTICs9IC14bGlibW9wdAogICBpZmVxICgkKEFSQ0hfRkFNSUxZKSwgc3BhcmMpCiAgICAgIyBBc3N1bWUgYXQgbW9zdCA4Ynl0ZSBhbGlnbm1lbnQsIHJhaXNlIFNJR0JVUyBvbiBlcnJvcgogICAgICMjIyBQcmVzZW50cyBhbiBBQkkgaXNzdWUgd2l0aCBjdXN0b21lciBKTkkgbGlicz8KLSAgICAjIyMjQ0NfSElHSEVTVF9PUFQgICs9IC14bWVtYWxpZ249OHMKKyAgICAjIyMjQ0NfSElHSEVTVF9FWFRSQVMgICs9IC14bWVtYWxpZ249OHMKICAgICAjIEF1dG9tYXRpYyBwcmVmZXRjaCBpbnN0cnVjdGlvbnMsIGV4cGxpY2l0IHByZWZldGNoIG1hY3JvcwotICAgIENDX0hJR0hFU1RfT1BUICArPSAteHByZWZldGNoPWF1dG8sZXhwbGljaXQKKyAgICBDQ19ISUdIRVNUX0VYVFJBUyArPSAteHByZWZldGNoPWF1dG8sZXhwbGljaXQKICAgICAjIFBpY2sgdWx0cmEgYXMgdGhlIGNoaXAgdG8gb3B0aW1pemUgdG8KLSAgICBDQ19ISUdIRVNUX09QVCAgKz0gLXhjaGlwPXVsdHJhCisgICAgQ0NfSElHSEVTVF9FWFRSQVMgKz0gLXhjaGlwPXVsdHJhCiAgIGVuZGlmCiAgIGlmZXEgKCQoQVJDSCksIGk1ODYpCiAgICAgIyBQaWNrIHBlbnRpdW0gYXMgdGhlIGNoaXAgdG8gb3B0aW1pemUgdG8KLSAgICBDQ19ISUdIRVNUX09QVCAgKz0gLXhjaGlwPXBlbnRpdW0KKyAgICBDQ19ISUdIRVNUX0VYVFJBUyArPSAteGNoaXA9cGVudGl1bQogICBlbmRpZgogICBpZmRlZiBMSUJSQVJZCiAgICAgIyBUaGUgU29sYXJpcyBDQkUgKENvbW1vbiBCdWlsZCBFbnZpcm9ubWVudCkgcmVxdWlyZXMgdGhhdCB0aGUgdXNlCkBAIC00NzYsOSArNTY4LDYgQEAKICAgICBDRkxBR1NfUkVRVUlSRURfc3BhcmN2OSAgKz0gLXhyZWdzPW5vJWFwcGwKICAgZW5kaWYKICAgaWZlcSAoJChzaGVsbCAkKEVYUFIpICQoQ0NfVkVSKSBcPiA1LjYpLCAxKQotICAgICMgRG8gTk9UIHVzZSB0aGUgZnJhbWUgcG9pbnRlciByZWdpc3RlciBhcyBhIGdlbmVyYWwgcHVycG9zZSBvcHQgcmVnaXN0ZXIKLSAgICBDRkxBR1NfUkVRVUlSRURfaTU4NiAgKz0gLXhyZWdzPW5vJWZyYW1lcHRyCi0gICAgQ0ZMQUdTX1JFUVVJUkVEX2FtZDY0ICs9IC14cmVncz1ubyVmcmFtZXB0cgogICAgICMgV2UgTVVTVCBhbGxvdyBkYXRhIGFsaWdubWVudCBvZiA0IGZvciBzcGFyYyBWOCAoMzJiaXQpCiAgICAgIyAgICAgUHJlc2VudHMgYW4gQUJJIGlzc3VlIHdpdGggY3VzdG9tZXIgSk5JIGxpYnM/IFdlIG11c3QgYmUgYWJsZSB0bwogICAgICMgICAgIHRvIGhhbmRsZSA0Ynl0ZSBhbGlnbmVkIG9iamVjdHM/IChyYXJlIG9jY3VyYW5jZSwgYnV0IHBvc3NpYmxlPykKQEAgLTQ5Miw3NyArNTgxLDI4IEBACiAgICMgQXV0b21hdGljIHByZWNvbXBpbGVkIGhlYWRlciBvcHRpb24gdG8gdXNlIChpZiBDT01QSUxFX0FQUFJPQUNIPWJhdGNoKQogICAjICAgKFNlZSBSdWxlcy5nbWspIFRoZSBTUzExIC14cGNoPWF1dG8qIG9wdGlvbnMgYXBwZWFyIHRvIGJlIGJyb2tlbi4KICAgQVVUT01BVElDX1BDSF9PUFRJT04gPQorICAKKyAgIyBBZGQgaW4ga2VlcCBmcmFtZSBvcHRpb25zCisgIENDX09QVC9MT1dFUiAgICArPSAkKENDX1hLRUVQRlJBTUVfT1BUSU9OUykKKyAgQ0NfT1BUL0hJR0hFUiAgICs9ICQoQ0NfWEtFRVBGUkFNRV9PUFRJT05TKQorICBDQ19PUFQvSElHSEVTVCAgKz0gJChDQ19YS0VFUEZSQU1FX09QVElPTlMpCisgIENYWF9PUFQvTE9XRVIgICArPSAkKENYWF9YS0VFUEZSQU1FX09QVElPTlMpCisgIENYWF9PUFQvSElHSEVSICArPSAkKENYWF9YS0VFUEZSQU1FX09QVElPTlMpCisgIENYWF9PUFQvSElHSEVTVCArPSAkKENYWF9YS0VFUEZSQU1FX09QVElPTlMpCisgCisgICMgQWRkIGluIGhpZ2hlc3Qgb3B0aW1pemF0aW9uIHNldHRpbmdzCisgIENDX09QVC9ISUdIRVNUICArPSAkKENDX0hJR0hFU1RfRVhUUkFTKQorICBDWFhfT1BUL0hJR0hFU1QgKz0gJChDQ19ISUdIRVNUX0VYVFJBUykKKyAgCiBlbmRpZgotQ0NfTk9fT1BUICAgICAgPSAKIAotIyBJZiBOT19PUFRJTUlaQVRJT05TIGlzIGRlZmluZWQgaW4gdGhlIGVudmlyb25tZW50LCB0dXJuIGFsbCBvcHRpbXphdGlvbnMgb2ZmCi1pZmRlZiBOT19PUFRJTUlaQVRJT05TCi0gIENDX0hJR0hFU1RfT1BUID0gJChDQ19OT19PUFQpCi0gIENDX0hJR0hFUl9PUFQgID0gJChDQ19OT19PUFQpCi0gIENDX0xPV0VSX09QVCAgID0gJChDQ19OT19PUFQpCi1lbmRpZgorIyBEZWZhdWx0IG9wdGltaXphdGlvbiBzZXR0aW5ncyBiYXNlZCBvbiBsZXZlbC4KK0NDX09QVCAgPSAkKENDX09QVC8kKE9QVElNSVpBVElPTl9MRVZFTCkpCitDWFhfT1BUID0gJChDWFhfT1BULyQoT1BUSU1JWkFUSU9OX0xFVkVMKSkKIAogIyBGbGFncyByZXF1aXJlZCBhbGwgdGhlIHRpbWUKIENGTEFHU19SRVFVSVJFRCA9ICQoQ0ZMQUdTX1JFUVVJUkVEXyQoQVJDSCkpCiAKLSMgQWRkIHByb2Nlc3NvciBzcGVjaWZpYyBvcHRpb25zIGZvciBvcHRpbWl6YXRpb25zCi1DQ19ISUdIRVNUX09QVCArPSAkKF9PUFRfJChBUkNIKSkKLUNDX0hJR0hFUl9PUFQgICs9ICQoX09QVF8kKEFSQ0gpKQotQ0NfTE9XRVJfT1BUICAgKz0gJChfT1BUXyQoQVJDSCkpCi0KLSMgU2VjcmV0IGNvbXBpbGVyIG9wdGltaXphdGlvbiBvcHRpb25zIHRoYXQgc2hvdWxkIGJlIGluIHRoZSBhYm92ZSBtYWNyb3MKLSMgICAgYnV0IHNpbmNlIHRoZXkgZGlmZmVyIGluIGZvcm1hdCBmcm9tIEMgdG8gQysrLCBhcmUgYWRkZWQgaW50byB0aGUgQyBvcgotIyAgICBDKysgc3BlY2lmaWMgbWFjcm9zIGZvciBjb21waWxlciBmbGFncy4KLSMKLSMgIE9uIGk1ODYgd2UgbmVlZCB0byB0ZWxsIHRoZSBjb2RlIGdlbmVyYXRvciB0byBBTFdBWVMgdXNlIGEKLSMgICBmcmFtZSBwb2ludGVyLgotaWZlcSAoJChBUkNIX0ZBTUlMWSksIGk1ODYpCi0gICMgTm90ZSB0aGF0IGluIDUuNywgdGhpcyBpcyBkb25lIHdpdGggLXhyZWdzPW5vJWZyYW1lcHRyCi0gIGlmZXEgKCQoQ0NfVkVSKSwgNS41KQotICAgICMgICAgICAgSXQncyBub3QgZXhhY3RseSBjbGVhciB3aGVuIHRoaXMgb3B0aW1pemF0aW9uIGtpY2tzIGluLCB0aGUKLSAgICAjICAgICAgIGN1cnJlbnQgYXNzdW1wdGlvbiBpcyAteE80IG9yIGdyZWF0ZXIgYW5kIGZvciBDKysgd2l0aAotICAgICMgICAgICAgdGhlIC1mZWF0dXJlcz1ubyVleGNlcHQgb3B0aW9uIGFuZCAteE80IGFuZCBncmVhdGVyLgotICAgICMgICAgICAgQm90dG9tIGxpbmUgaXMsIHdlIEFMV0FZUyB3YW50IGEgZnJhbWUgcG9pbnRlciEKLSAgICBDWFhGTEFHU19PUFQgKz0gLVFvcHRpb24gdWJlIC1afkIKLSAgICBDRkxBR1NfT1BUICAgKz0gICAgICAgICAgLVd1LC1afkIKLSAgICBpZmVxICgkKEZBU1RERUJVRyksIHRydWUpCi0gICAgICAgIENYWEZMQUdTX0RCRyArPSAtUW9wdGlvbiB1YmUgLVp+QgotICAgICAgICBDRkxBR1NfREJHICAgKz0gICAgICAgICAgLVd1LC1afkIKLSAgICBlbmRpZgotICBlbmRpZgotZW5kaWYKLSMKLSMgIE9wdGltaXplciBmb3Igc3BhcmMgbmVlZHMgdG8gYmUgdG9sZCBub3QgdG8gZG8gY2VydGFpbiB0aGluZ3MKLSMgICByZWxhdGVkIHRvIGZyYW1lcyBvciBzYXZlIGluc3RydWN0aW9ucy4KLWlmZXEgKCQoQVJDSF9GQU1JTFkpLCBzcGFyYykKLSAgIyBOT1RFOiBTb21lZGF5IHRoZSBjb21waWxlcnMgd2lsbCBwcm92aWRlIGEgaGlnaC1sZXZlbCBvcHRpb24gZm9yIHRoaXMuCi0gICMgICBVc2Ugc2F2ZSBpbnN0cnVjdGlvbnMgaW5zdGVhZCBvZiBhZGQgaW5zdHJ1Y3Rpb25zCi0gICMgICAgVGhpcyB3YXMgYW4gb3B0aW1pemF0aW9uIHN0YXJ0aW5nIGluIFNDNS4wIHRoYXQgbWFkZSBpdCBoYXJkIGZvciB1cyB0bwotICAjICAgIGZpbmQgdGhlICJzYXZlIiBpbnN0cnVjdGlvbiAod2hpY2ggZ290IHR1cm5lZCBpbnRvIGFuICJhZGQiKQotICBDWFhGTEFHU19PUFQgKz0gLVFvcHRpb24gY2cgLVFybS1zCi0gIENGTEFHU19PUFQgICArPSAgICAgICAgIC1XYywtUXJtLXMKLSAgaWZlcSAoJChGQVNUREVCVUcpLCB0cnVlKQotICAgIENYWEZMQUdTX0RCRyArPSAtUW9wdGlvbiBjZyAtUXJtLXMKLSAgICBDRkxBR1NfREJHICAgKz0gICAgICAgICAtV2MsLVFybS1zCi0gIGVuZGlmCi0gICMKLSAgIyBOT1RFOiBTb21lZGF5IHRoZSBjb21waWxlcnMgd2lsbCBwcm92aWRlIGEgaGlnaC1sZXZlbCBvcHRpb24gZm9yIHRoaXMuCi0gICMgICBEb24ndCBhbGxvdyB0YWlsIGNhbGwgY29kZSBvcHRpbWl6YXRpb24uIFN0YXJ0ZWQgaW4gU0M1LjAuCi0gICMgICAgV2UgZG9uJ3QgbGlrZSBjb2RlIG9mIHRoaXMgZm9ybToKLSAgIwlzYXZlCi0gICMJPGNvZGU+Ci0gICMJY2FsbCBmb28KLSAgIwkgICByZXN0b3JlCi0gICMgICBiZWNhdXNlIHdlIGNhbid0IHRlbGwgaWYgdGhlIG1ldGhvZCB3aWxsIGhhdmUgYSBzdGFjayBmcmFtZQotICAjICAgYW5kIHJlZ2lzdGVyIHdpbmRvd3Mgb3Igbm90LgotICBDWFhGTEFHU19PUFQgKz0gLVFvcHRpb24gY2cgLVFpc2VsZWN0LVQwCi0gIENGTEFHU19PUFQgICArPSAgICAgICAgIC1XYywtUWlzZWxlY3QtVDAKLSAgaWZlcSAoJChGQVNUREVCVUcpLCB0cnVlKQotICAgIENYWEZMQUdTX0RCRyArPSAtUW9wdGlvbiBjZyAtUWlzZWxlY3QtVDAKLSAgICBDRkxBR1NfREJHICAgKz0gICAgICAgICAtV2MsLVFpc2VsZWN0LVQwCi0gIGVuZGlmCi1lbmRpZgotCiAjCiAjIFBhdGggYW5kIG9wdGlvbiB0byBsaW5rIGFnYWluc3QgdGhlIFZNLCBpZiB5b3UgaGF2ZSB0by4gIE5vdGUgdGhhdAogIyB0aGVyZSBhcmUgbGlicmFyaWVzIHRoYXQgbGluayBhZ2FpbnN0IG9ubHkgLWxqYXZhLCBidXQgdGhleSBkbyBnZXQKZGlmZiAtLWdpdCBhL21ha2UvY29tbW9uL0RlZnMtd2luZG93cy5nbWsgYi9tYWtlL2NvbW1vbi9EZWZzLXdpbmRvd3MuZ21rCmluZGV4IGQ3YzExODMuLjRlYzJhMDQgMTAwNjQ0Ci0tLSBhL21ha2UvY29tbW9uL0RlZnMtd2luZG93cy5nbWsKKysrIGIvbWFrZS9jb21tb24vRGVmcy13aW5kb3dzLmdtawpAQCAtODQsNiArODQsMTUgQEAKICMKICMgRGVmYXVsdCBvcHRpbWl6YXRpb24KICMKKworaWZuZGVmIE9QVElNSVpBVElPTl9MRVZFTAorICBpZmVxICgkKFBST0RVQ1QpLCBqYXZhKQorICAgIE9QVElNSVpBVElPTl9MRVZFTCA9IEhJR0hFUgorICBlbHNlCisgICAgT1BUSU1JWkFUSU9OX0xFVkVMID0gTE9XRVIKKyAgZW5kaWYKK2VuZGlmCisKIGlmZXEgKCQoQ0NfVkVSU0lPTiksbXN2YykKICAgIyBWaXN1YWwgU3R1ZGlvIC5ORVQgMjAwMyBvciBWUzIwMDMgY29tcGlsZXIgb3B0aW9uIGRlZmluaXRpb25zOgogICAjICAgLU8xICAgICAgRmF2b3JzIHJlZHVjZWQgc2l6ZSBvdmVyIHNwZWVkICgtT2cgICAgIC1PcyAtT3kgLU9iMiAtR3MgLUdGIC1HeSkKQEAgLTExMywyMSArMTIyLDI4IEBACiAgICMgTk9URTogV2l0aCBWQzYsIC1PeCwgLU8xLCBhbmQgLU8yIHVzZWQgLU9iMSwgbm90IC1PYjIuCiAgICMgTk9URTogV2l0aCBWQzYsIC1PMSBhbmQgLU8yIHVzZWQgLUdmLCBub3QgLUdGLgogICAjCisKKyAgQ0NfT1BUL05PTkUgICAgPSAtT2QKKyAgQ0NfT1BUL0xPV0VSICAgPSAtTzIKKyAgQ0NfT1BUL0hJR0hFUiAgPSAtTzMKKyAgQ0NfT1BUL0hJR0hFU1QgPSAtTzMKKyAgCiAgIGlmZXEgKCQoQ09NUElMRVJfVkVSU0lPTiksIFZDNikKICAgICAjIFZDNiAoNi4yKSBtc3ZjIGNvbXBpbGVyICh0aGUgd2F5IFRpZ2VyIGFuZCBlYXJseSBNdXN0YW5nIHdlcmUgYnVpbHQpCiAgICAgIyBBdXRvbWF0aWMgcHJlY29tcGlsZWQgaGVhZGVyIG9wdGlvbiB0byB1c2UgKGlmIENPTVBJTEVfQVBQUk9BQ0g9YmF0Y2gpCiAgICAgQVVUT01BVElDX1BDSF9PUFRJT04gPQogICAgIEdYX09QVElPTiA9IC1HWAogICAgIGlmZXEgKCQoQVJDSF9EQVRBX01PREVMKSwgMzIpCi0gICAgICBDQ19ISUdIRVNUX09QVCA9IC1PeCAtR3kgLU9zIC1HQgotICAgICAgQ0NfSElHSEVSX09QVCAgPSAtT3ggLUd5IC1PcyAtR0IKLSAgICAgIENDX0xPV0VSX09QVCAgID0gLU94IC1HeSAtT3MgLUdCCisgICAgICBDQ19PUFQvSElHSEVTVCA9IC1PeCAtR3kgLU9zIC1HQgorICAgICAgQ0NfT1BUL0hJR0hFUiAgPSAtT3ggLUd5IC1PcyAtR0IKKyAgICAgIENDX09QVC9MT1dFUiAgID0gLU94IC1HeSAtT3MgLUdCCiAgICAgZWxzZQotICAgICAgQ0NfSElHSEVTVF9PUFQgPSAtT3ggLUd5IC1PcAotICAgICAgQ0NfSElHSEVSX09QVCAgPSAtT3ggLUd5IC1PcAotICAgICAgQ0NfTE9XRVJfT1BUICAgPSAtT3ggLUd5IC1PcAorICAgICAgQ0NfT1BUL0hJR0hFU1QgPSAtT3ggLUd5IC1PcAorICAgICAgQ0NfT1BUL0hJR0hFUiAgPSAtT3ggLUd5IC1PcAorICAgICAgQ0NfT1BUL0xPV0VSICAgPSAtT3ggLUd5IC1PcAogICAgIGVuZGlmCiAgIGVuZGlmCisgIAogICBpZmVxICgkKENPTVBJTEVSX1ZFUlNJT04pLCBWUzIwMDMpCiAgICAgIyBBdXRvbWF0aWMgcHJlY29tcGlsZWQgaGVhZGVyIG9wdGlvbiB0byB1c2UgKGlmIENPTVBJTEVfQVBQUk9BQ0g9YmF0Y2gpCiAgICAgQVVUT01BVElDX1BDSF9PUFRJT04gPSAtWVgKQEAgLTEzNSw1MyArMTUxLDQ1IEBACiAgICAgR1hfT1BUSU9OID0gLUdYCiAgICAgaWZlcSAoJChBUkNIX0RBVEFfTU9ERUwpLCAzMikKICAgICAgICMgTG93ZXJlZCBvcHQgbGV2ZWwgdG8gdHJ5IGFuZCByZWR1Y2UgZm9vdHByaW50LCBkbGwgc2l6ZSBlc3BlY2lhbGx5LgotICAgICAgIyAgICAgV2FzOiBDQ19ISUdIRVNUX09QVCA9IC1PMiAtRzYKLSAgICAgICMgICAgIFdhczogQ0NfSElHSEVSX09QVCAgPSAtTzIKLSAgICAgIENDX0hJR0hFU1RfT1BUID0gLU8yCi0gICAgICBDQ19ISUdIRVJfT1BUICA9IC1PMQotICAgICAgQ0NfTE9XRVJfT1BUICAgPSAtTzEKKyAgICAgICMgICAgIFdhczogQ0NfT1BUL0hJR0hFU1QgPSAtTzIgLUc2CisgICAgICAjICAgICBXYXM6IENDX09QVC9ISUdIRVIgID0gLU8yCisgICAgICBDQ19PUFQvSElHSEVTVCA9IC1PMgorICAgICAgQ0NfT1BUL0hJR0hFUiAgPSAtTzEKKyAgICAgIENDX09QVC9MT1dFUiAgID0gLU8xCiAgICAgZWxzZQotICAgICAgQ0NfSElHSEVTVF9PUFQgPSAtTzIgLU9wCi0gICAgICBDQ19ISUdIRVJfT1BUICA9IC1PMiAtT3AKLSAgICAgIENDX0xPV0VSX09QVCAgID0gLU8xIC1PcAorICAgICAgQ0NfT1BUL0hJR0hFU1QgPSAtTzIgLU9wCisgICAgICBDQ19PUFQvSElHSEVSICA9IC1PMiAtT3AKKyAgICAgIENDX09QVC9MT1dFUiAgID0gLU8xIC1PcAogICAgIGVuZGlmCiAgIGVuZGlmCisgIAogICBpZmVxICgkKENPTVBJTEVSX1ZFUlNJT04pLCBWUzIwMDUpCiAgICAgIyBBdXRvbWF0aWMgcHJlY29tcGlsZWQgaGVhZGVyIG9wdGlvbiB0byB1c2UgKGlmIENPTVBJTEVfQVBQUk9BQ0g9YmF0Y2gpCiAgICAgQVVUT01BVElDX1BDSF9PUFRJT04gPQogICAgICMgVlMyMDA1IGNvbXBpbGVyLCBvbmx5IHdpdGggUGxhdGZvcm0gU0RLIHJpZ2h0IG5vdz8KICAgICBHWF9PUFRJT04gPSAtRUhzYwogICAgIGlmZXEgKCQoQVJDSF9EQVRBX01PREVMKSwgMzIpCi0gICAgICBDQ19ISUdIRVNUX09QVCA9IC1PMgotICAgICAgQ0NfSElHSEVSX09QVCAgPSAtTzEKLSAgICAgIENDX0xPV0VSX09QVCAgID0gLU8xCisgICAgICBDQ19PUFQvSElHSEVTVCA9IC1PMgorICAgICAgQ0NfT1BUL0hJR0hFUiAgPSAtTzEKKyAgICAgIENDX09QVC9MT1dFUiAgID0gLU8xCiAgICAgZWxzZQotICAgICAgQ0NfSElHSEVTVF9PUFQgPSAtTzIKLSAgICAgIENDX0hJR0hFUl9PUFQgID0gLU8xCi0gICAgICBDQ19MT1dFUl9PUFQgICA9IC1PMQorICAgICAgQ0NfT1BUL0hJR0hFU1QgPSAtTzIKKyAgICAgIENDX09QVC9ISUdIRVIgID0gLU8xCisgICAgICBDQ19PUFQvTE9XRVIgICA9IC1PMQogICAgIGVuZGlmCiAgIGVuZGlmCi0gIENDX05PX09QVCAgICAgID0gLU9kCisKIGVsc2UgIyBDQ19WRVJTSU9OCisgIAogICAjIEdDQyBub3Qgc3VwcG9ydGVkLCBidXQgbGVmdCBmb3IgaGlzdG9yaWNhbCByZWZlcmVuY2UuLi4KLSAgQ0NfSElHSEVTVF9PUFQgPSAtTzMKLSAgQ0NfSElHSEVSX09QVCAgPSAtTzIKLSAgQ0NfTE9XRVJfT1BUICAgPSAtTzIKLSAgQ0NfTk9fT1BUICAgICAgPSAKKyAgQ0NfT1BUL05PTkUgICAgID0KKyAgQ0NfT1BUL0xPV0VSICAgID0gLU8yCisgIENDX09QVC9ISUdIRVIgICA9IC1PMgorICBDQ19PUFQvSElHSEVTVCAgPSAtTzMKKwogZW5kaWYKIAotIyBJZiBOT19PUFRJTUlaQVRJT05TIGlzIGRlZmluZWQgaW4gdGhlIGVudmlyb25tZW50LCB0dXJuIGFsbCBvcHRpbXphdGlvbnMgb2ZmCi1pZmRlZiBOT19PUFRJTUlaQVRJT05TCi0gIENDX0hJR0hFU1RfT1BUID0gJChDQ19OT19PUFQpCi0gIENDX0hJR0hFUl9PUFQgID0gJChDQ19OT19PUFQpCi0gIENDX0xPV0VSX09QVCAgID0gJChDQ19OT19PUFQpCi1lbmRpZgotCi1pZmVxICgkKFBST0RVQ1QpLCBqYXZhKQotICAgIF9PUFQgPSAkKENDX0hJR0hFUl9PUFQpCi1lbHNlCi0gICAgX09QVCA9ICQoQ0NfTE9XRVJfT1BUKQotZW5kaWYKK0NDX09QVCA9ICQoQ0NfT1BULyQoT1BUSU1JWkFUSU9OX0xFVkVMKSkKIAogIyBTZWxlY3QgdGhlIHJ1bnRpbWUgc3VwcG9ydCBsaWJyYXJ5IGNhcmVmdWxseSwgbmVlZCB0byBiZSBjb25zaXN0ZW50CiAjCkBAIC0yMzMsNyArMjQxLDcgQEAKICAgIyAgICAgICAgICAgIFVzZSBzdGF0aWMgbGluayBmb3IgdGhlIEMrKyBydW50aW1lIChzbyBtc3ZjcDcxLmRsbCBub3QgbmVlZGVkKQogICAjICAgCiAgIENGTEFHU19DT01NT04gICs9IC1aaSAtbm9sb2dvCi0gIENGTEFHU19PUFQgICAgICA9ICQoUE9QVCkKKyAgQ0ZMQUdTX09QVCAgICAgID0gJChDQ19PUFQpCiAgIENGTEFHU19EQkcgICAgICA9IC1PZCAkKE1TX1JVTlRJTUVfREVCVUdfT1BUSU9OKQogCiAgICMgU3RhcnRpbmcgZnJvbSBWUzIwMDUgdGhlIHdjaGFyX3QgaXMgaGFuZGxlZCBhcyBhIGJ1aWx0LWluIEMvQysrIGRhdGEgdHlwZQpkaWZmIC0tZ2l0IGEvbWFrZS9jb21tb24vRGVmcy5nbWsgYi9tYWtlL2NvbW1vbi9EZWZzLmdtawppbmRleCAxNmViMWUyLi5hMGNiOTQ4IDEwMDY0NAotLS0gYS9tYWtlL2NvbW1vbi9EZWZzLmdtaworKysgYi9tYWtlL2NvbW1vbi9EZWZzLmdtawpAQCAtNDgzLDExICs0ODMsNiBAQAogaW5jbHVkZSAkKEpES19NQUtFX1NIQVJFRF9ESVIpL0RlZnMtamF2YS5nbWsKIAogIwotIyBTZXQgb3B0IGxldmVsIHRvIEFMVF9PUFQgaWYgc2V0IG90aGVyd2lzZSBfT1BUCi0jCi1QT1BUID0gJChfT1BUJChBTFRfT1BUKSkkKEFMVF9PUFQpCi0KLSMKICMgQ29udmVuaWVudCBtYWNyb3MKICMKIApkaWZmIC0tZ2l0IGEvbWFrZS9jb21tb24vRGVtby5nbWsgYi9tYWtlL2NvbW1vbi9EZW1vLmdtawppbmRleCAwODZhMWRhLi4yMjFiZWUxIDEwMDY0NAotLS0gYS9tYWtlL2NvbW1vbi9EZW1vLmdtaworKysgYi9tYWtlL2NvbW1vbi9EZW1vLmdtawpAQCAtMjUxLDcgKzI1MSw3IEBACiAJICAgIEAkKERFTU9fSkFWQUNfSU5QVVQpCiAJJChCT09UX0pBUl9DTUQpIC1jZm0gJEAgJChERU1PX01BTklGRVNUKSBcCiAJICAgICAtQyAkKERFTU9fSkFSX0lNQUdFKSAuIFwKLQkgICAgICQoSkFSX0pGTEFHUykKKwkgICAgICQoQk9PVF9KQVJfSkZMQUdTKQogCUAkKGphdmEtdm0tY2xlYW51cCkKIAogZW5kaWYKQEAgLTMxNyw3ICszMTcsMTEgQEAKICMgQXBwbGV0cyBhcmUgc3BlY2lhbCwgbm8gamFyIGZpbGUsIG5vIHNyYy56aXAsIGV2ZXJ5dGhpbmcgZXhwYW5kZWQuCiBpZmRlZiBERU1PX0lTX0FQUExFVAogCUAkKEVDSE8pICJFeHBhbmRpbmcgamFyIGZpbGUgaW50byBkZW1vcyBhcmVhIGF0ICQoREVNT19ERVNURElSKSIKLQkoICQoQ0QpICQoREVNT19ERVNURElSKSAmJiAkKEJPT1RfSkFSX0NNRCkgLXhmdiAkKERFTU9OQU1FKS5qYXIgJiYgJChSTSkgLXIgTUVUQS1JTkYgJChERU1PTkFNRSkuamFyICkKKwkoICQoQ0QpICQoREVNT19ERVNURElSKSAmJiBcCisJICAkKEJPT1RfSkFSX0NNRCkgLXhmdiAkKERFTU9OQU1FKS5qYXIgXAorCSAgICAgJChCT09UX0pBUl9KRkxBR1MpICYmIFwKKwkgICQoUk0pIC1yIE1FVEEtSU5GICQoREVNT05BTUUpLmphciAgJiYgXAorCSAgJChqYXZhLXZtLWNsZWFudXApICkKIAlAKCAkKENEKSAkKERFTU9fREVTVERJUikgJiYgJChqYXZhLXZtLWNsZWFudXApICkKIAlAJChFQ0hPKSAiRXhwYW5kaW5nIHNvdXJjZSBpbnRvIGRlbW9zIGFyZWEgYXQgJChERU1PX0RFU1RESVIpIgogCSggJChDRCkgJChERU1PX0RFU1RESVIpICYmICQoVU5aSVApIC1vIHNyYy56aXAgJiYgJChSTSkgc3JjLnppcCApCmRpZmYgLS1naXQgYS9tYWtlL2NvbW1vbi9MaWJyYXJ5LmdtayBiL21ha2UvY29tbW9uL0xpYnJhcnkuZ21rCmluZGV4IDJiOWZlNWQuLjJhYTI0N2YgMTAwNjQ0Ci0tLSBhL21ha2UvY29tbW9uL0xpYnJhcnkuZ21rCisrKyBiL21ha2UvY29tbW9uL0xpYnJhcnkuZ21rCkBAIC0yMzgsNyArMjM4LDcgQEAKICMKICQoQUNUVUFMX0xJQlJBUlkpOjogJChDT01QSUxFX0ZJTEVTX28pICQoRklMRVNfbSkgJChGSUxFU19yZW9yZGVyKQogCUAkKHByZXAtdGFyZ2V0KQotCUAkKEVDSE8pICJTVEFUUzogTElCUkFSWT0kKExJQlJBUlkpLCBQUk9EVUNUPSQoUFJPRFVDVCksIF9PUFQ9JChfT1BUKSIKKwlAJChFQ0hPKSAiU1RBVFM6IExJQlJBUlk9JChMSUJSQVJZKSwgUFJPRFVDVD0kKFBST0RVQ1QpLCBPUFRJTUlaQVRJT05fTEVWRUw9JChPUFRJTUlaQVRJT05fTEVWRUwpIgogCUAkKEVDSE8pICJSZWJ1aWxkaW5nICRAIGJlY2F1c2Ugb2YgJD8iCiBpZmVxICgkKExJQlJBUlkpLCBmZGxpYm0pCiAJJChBUikgLXIgJEAgJChGSUxFU19vKQpkaWZmIC0tZ2l0IGEvbWFrZS9jb21tb24vUmVsZWFzZS5nbWsgYi9tYWtlL2NvbW1vbi9SZWxlYXNlLmdtawppbmRleCA0MmRlNzlmLi43NmExYmM0IDEwMDY0NAotLS0gYS9tYWtlL2NvbW1vbi9SZWxlYXNlLmdtaworKysgYi9tYWtlL2NvbW1vbi9SZWxlYXNlLmdtawpAQCAtNjMsMTUgKzYzLDYgQEAKIAogSlRHX0RPQ1MgICAgICAgICAgICA9ICQoSkRLX1RPUERJUikvc3JjL3NvbGFyaXMvZG9jCiAKLSMgQ2hvb3NlIHRoZSByaWdodCBzZXQgb2YgZG9jdW1lbnRzIGZvciB0aGUgaW1hZ2VzCi1pZmRlZiBPUEVOSkRLCi0gIFNIQVJFX0pES19ET0NfU1JDID0gJChKREtfVE9QRElSKS9tYWtlCi0gIFNIQVJFX0pSRV9ET0NfU1JDID0gJChKREtfVE9QRElSKS9tYWtlCi1lbHNlCi0gIFNIQVJFX0pES19ET0NfU1JDID0gJChDTE9TRURfU0hBUkVfU1JDKS9kb2MvamRrCi0gIFNIQVJFX0pSRV9ET0NfU1JDID0gJChDTE9TRURfU0hBUkVfU1JDKS9kb2MvanJlCi1lbmRpZgotCiAjV2UgdXNlIHRoaXMgZm9yIG1hbiBwYWdlIGhlYWRlcgogamRrdmVyc2lvbiA6PSAkKEpES19NQUpPUl9WRVJTSU9OKS4kKEpES19NSU5PUl9WRVJTSU9OKS4kKEpES19NSUNST19WRVJTSU9OKQogCkBAIC04MSwxMyArNzIsMjAgQEAKIGVuZGlmCiAKICMgVGhlIGJhc2UgbmFtZXMgb2YgYWxsIHRoZSBsaWNlbnNlIGFuZCBkb2N1bWVudCBmaWxlcyBmb3IgdGhlIGpkayBhbmQganJlCisjICAgKFRoZXNlIGZpbGVzIGdldCBwbGFjZWQgaW4gdGhlIGpkayBhbmQganJlIGluc3RhbGwgaW1hZ2VzKQogaWZkZWYgT1BFTkpESworICAjIFdoZXJlIHRvIGZpbmQgdGhlc2UgZmlsZXMKKyAgU0hBUkVfSkRLX0RPQ19TUkMgPSAkKEpES19UT1BESVIpCisgIFNIQVJFX0pSRV9ET0NfU1JDID0gJChKREtfVE9QRElSKQogICAjIFNhbWUgZmlsZXMgZm9yIGpkayBhbmQganJlLCBubyBuYW1lIGNoYW5nZXMKICAgTElDRU5TRV9ET0NMSVNUX0pESyA9IExJQ0VOU0UgICAgIEFTU0VNQkxZX0VYQ0VQVElPTgogICBMSUNFTlNFX0RPQ0xJU1RfSlJFID0gTElDRU5TRSAgICAgQVNTRU1CTFlfRVhDRVBUSU9OCi0gIE9USEVSX0RPQ0xJU1RfSkRLICAgPSBSRUFETUUuaHRtbCBUSElSRF9QQVJUWV9SRUFETUUKLSAgT1RIRVJfRE9DTElTVF9KUkUgICA9IFJFQURNRS5odG1sIFRISVJEX1BBUlRZX1JFQURNRQorICBPVEhFUl9ET0NMSVNUX0pESyAgID0gVEhJUkRfUEFSVFlfUkVBRE1FCisgIE9USEVSX0RPQ0xJU1RfSlJFICAgPSBUSElSRF9QQVJUWV9SRUFETUUKIGVsc2UKKyAgIyBXaGVyZSB0byBmaW5kIHRoZXNlIGZpbGVzCisgIFNIQVJFX0pES19ET0NfU1JDID0gJChDTE9TRURfU0hBUkVfU1JDKS9kb2MvamRrCisgIFNIQVJFX0pSRV9ET0NfU1JDID0gJChDTE9TRURfU0hBUkVfU1JDKS9kb2MvanJlCiAgICMgU2VsZWN0IHRoZSBwcmUtcmVsZWFzZSBvciBGQ1MgbGljZW5zZSB2ZXJzaW9uIGJhc2VkIG9uIHRoZSBidWlsZCBtaWxlc3RvbmUuCiAgIExJQ0VOU0VfVkVSU0lPTj0ucHJlCiAgIGlmZXEgKCQoTUlMRVNUT05FKSwgZmNzKQpAQCAtNjYyLDcgKzY2MCw3IEBACiAkKFJFU09VUkNFU19KQVIpOiAkKFJFU19KQVJfQVJHTElTVCkgJChKQVJfTUFOSUZFU1RfRklMRSkKIAkkKHByZXAtdGFyZ2V0KQogCSQoQk9PVF9KQVJfQ01EKSBjMG1mICQoSkFSX01BTklGRVNUX0ZJTEUpICRAIFwKLQkgICAgQCQoUkVTX0pBUl9BUkdMSVNUKSAkKEpBUl9KRkxBR1MpCisJICAgIEAkKFJFU19KQVJfQVJHTElTVCkgJChCT09UX0pBUl9KRkxBR1MpCiAJQCQoamF2YS12bS1jbGVhbnVwKQogCiAjIENyZWF0ZSBqc3NlLmphciBjb250YWluaW5nIFN1bkpTU0UgaW1wbGVtZW50YXRpb24gY2xhc3NlcwpAQCAtNjcxLDcgKzY2OSw3IEBACiAJJChwcmVwLXRhcmdldCkKIAkkKEJPT1RfSkFSX0NNRCkgYzBtZiAkKEpBUl9NQU5JRkVTVF9GSUxFKSAkQCBcCiAJCSQoSlNTRV9DTEFTU0VTX0RJUlM6JT0tQyAkKENMQVNTQklORElSKSAlKSBcCi0JCSQoSkFSX0pGTEFHUykKKwkJJChCT09UX0pBUl9KRkxBR1MpCiAJQCQoamF2YS12bS1jbGVhbnVwKQogCiAjIENyZWF0ZSBzZWMtYmluLnppcApAQCAtNzIxLDcgKzcxOSw3IEBACiAkKFJUX0pBUik6ICQoUlRfSkFSX0FSR0xJU1QpICQoSkFSX01BTklGRVNUX0ZJTEUpCiAJJChwcmVwLXRhcmdldCkKIAkkKEJPT1RfSkFSX0NNRCkgYzBtZiAkKEpBUl9NQU5JRkVTVF9GSUxFKSAkQCBcCi0JICAgIEAkKFJUX0pBUl9BUkdMSVNUKSAkKEpBUl9KRkxBR1MpCisJICAgIEAkKFJUX0pBUl9BUkdMSVNUKSAkKEJPT1RfSkFSX0pGTEFHUykKIAlAJChqYXZhLXZtLWNsZWFudXApCiAKICMgTWV0YS1pbmRleCBjb25zdHJ1Y3Rpb24gdG8gbWFrZSBjb3JlIGNsYXNzIGxvYWRlcnMgbGF6aWVyCkBAIC05NTUsNyArOTUzLDcgQEAKIAlAIwogCSQoQk9PVF9KQVJfQ01EKSBjMGYgJChMSUJESVIpL3Rvb2xzLmphciAkKGFkZHByZWZpeCBcCiAJCS1DICQoQ0xBU1NCSU5ESVIpICwgJChUT09MUykpIFwKLQkgICAgICAgICQoSkFSX0pGTEFHUykKKwkgICAgICAgICQoQk9PVF9KQVJfSkZMQUdTKQogCUAkKGphdmEtdm0tY2xlYW51cCkKIAkkKENQKSAkKExJQkRJUikvdG9vbHMuamFyICQoSkRLX0lNQUdFX0RJUikvbGliL3Rvb2xzLmphcgogCUAjCkBAIC05NjgsNyArOTY2LDcgQEAKIAkgICAgLUFjb20uc3VuLnRvb2xzLmphdmFjLnN5bS5EZXN0PSQoT1VUUFVURElSKS9zeW1ib2xzL01FVEEtSU5GL3N5bS9ydC5qYXIgXAogCSAgICAkKENPUkVfUEtHUykgJChOT05fQ09SRV9QS0dTKSAkKEVYQ0xVREVfUFJPUFdBUk5fUEtHUykKIAkkKEJPT1RfSkFSX0NNRCkgYzBmICQoTElCRElSKS9jdC5zeW0gXAotCSAgICAtQyAkKE9VVFBVVERJUikvc3ltYm9scyBNRVRBLUlORiAkKEpBUl9KRkxBR1MpCisJICAgIC1DICQoT1VUUFVURElSKS9zeW1ib2xzIE1FVEEtSU5GICQoQk9PVF9KQVJfSkZMQUdTKQogCUAkKGphdmEtdm0tY2xlYW51cCkKIAkkKENQKSAkKExJQkRJUikvY3Quc3ltICQoSkRLX0lNQUdFX0RJUikvbGliL2N0LnN5bQogCUAjCkBAIC0xMTMyLDExICsxMTMwLDExIEBACiBDT01QQVJFX0ZJTFRFUiA9IHwgJChFR1JFUCkgLXYgL2Zhc3RkZWJ1Zy8gfCAkKEVHUkVQKSAtdiAvZGVtby8gfCAkKEVHUkVQKSAtdiAvc2FtcGxlLwogCiAjIElmIGEgcHJldml1b3VzIGltYWdlIGlzIHByb3ZpZGVkLCBubyBuZWVkIHRvIGluc3RhbGwgaXQuCi1pZmRlZiBQUkVWSU9VU19KREtfSU1BR0UKK2lmZGVmIFBSRVZJT1VTX1JFTEVBU0VfSU1BR0UKIAogICAjIEp1c3QgdXNlIHRoZSBwcmUtaW5zdGFsbGVkIGltYWdlcwotICBQUkVWX0pSRV9JTUFHRV9ESVI9JChQUkVWSU9VU19KREtfSU1BR0UpL2pyZQotICBQUkVWX0pES19JTUFHRV9ESVI9JChQUkVWSU9VU19KREtfSU1BR0UpCisgIFBSRVZfSlJFX0lNQUdFX0RJUj0kKFBSRVZJT1VTX1JFTEVBU0VfSU1BR0UpL2pyZQorICBQUkVWX0pES19JTUFHRV9ESVI9JChQUkVWSU9VU19SRUxFQVNFX0lNQUdFKQogCiBlbHNlCiAKZGlmZiAtLWdpdCBhL21ha2UvY29tbW9uL2ludGVybmFsL0JpbmFyeVBsdWdzLmdtayBiL21ha2UvY29tbW9uL2ludGVybmFsL0JpbmFyeVBsdWdzLmdtawppbmRleCBhNTJiNjE3Li5iYjJkNjQyIDEwMDY0NAotLS0gYS9tYWtlL2NvbW1vbi9pbnRlcm5hbC9CaW5hcnlQbHVncy5nbWsKKysrIGIvbWFrZS9jb21tb24vaW50ZXJuYWwvQmluYXJ5UGx1Z3MuZ21rCkBAIC0xODUsNyArMTg1LDggQEAKIGRlZmluZSBpbXBvcnQtYmluYXJ5LXBsdWctY2xhc3NlcwogQCQoTUtESVIpIC1wICQoQ0xBU1NERVNURElSKQogQCQoQ0FUKSAkMSB8ICQoU0VEKSAtZSAncy9eL1BMVUcgSU1QT1JUOiAvJwotKCQoQ0QpICQoQ0xBU1NERVNURElSKSAmJiAkKEJPT1RfSkFSX0NNRCkgeGYgJChQTFVHX0lNUE9SVF9KQVJGSUxFKSBAJDEpCisoJChDRCkgJChDTEFTU0RFU1RESVIpICYmICQoQk9PVF9KQVJfQ01EKSB4ZiAkKFBMVUdfSU1QT1JUX0pBUkZJTEUpIEAkMSAkKEJPT1RfSkFSX0pGTEFHUykgKQorKCQoQ0QpICQoQ0xBU1NERVNURElSKSAmJiAkKGphdmEtdm0tY2xlYW51cCkgKQogZW5kZWYgIyBpbXBvcnQtYmluYXJ5LXBsdWctY2xhc3NlcwogCiAjIEltcG9ydCBzcGVjaWZpYyBhcmVhIGNsYXNzZXMgKHRoZSBjbGFzc2VzIGFyZSBhbHdheXMgY3JlYXRlZCkKQEAgLTI3NSw3ICsyNzYsOCBAQAogCUAkKHByZXAtdGFyZ2V0KQogCUAkKEVDSE8pICJQTFVHIEVYUE9SVDogJChARikiCiAJQCQoQ0FUKSAkKFBMVUdfVEVNUERJUikvYWxsLmNsaXN0IHwgJChTRUQpIC1lICdzL14vUExVRyBFWFBPUlQ6IC8nCi0JJChCT09UX0pBUl9DTUQpIGNmICRAIEAkKFBMVUdfVEVNUERJUikvYWxsLmphcmdzCisJJChCT09UX0pBUl9DTUQpIGNmICRAIEAkKFBMVUdfVEVNUERJUikvYWxsLmphcmdzICQoQk9PVF9KQVJfSkZMQUdTKQorCUAkKGphdmEtdm0tY2xlYW51cCkKIGV4cG9ydC1iaW5hcnktcGx1Z3MtamFyOiAkKFBMVUdfRVhQT1JUX0pBUkZJTEUpCiAKICMgRXhwb3J0IG5hdGl2ZSBsaWJyYXJpZXMKZGlmZiAtLWdpdCBhL21ha2UvY29tbW9uL2ludGVybmFsL0ltcG9ydENvbXBvbmVudHMuZ21rIGIvbWFrZS9jb21tb24vaW50ZXJuYWwvSW1wb3J0Q29tcG9uZW50cy5nbWsKaW5kZXggZDA4OWYyMy4uZDIyNzgzZCAxMDA2NDQKLS0tIGEvbWFrZS9jb21tb24vaW50ZXJuYWwvSW1wb3J0Q29tcG9uZW50cy5nbWsKKysrIGIvbWFrZS9jb21tb24vaW50ZXJuYWwvSW1wb3J0Q29tcG9uZW50cy5nbWsKQEAgLTEwNyw4ICsxMDcsOSBAQAogZGVmaW5lIFVuamFyCiAoIFwKICAgJChNS0RJUikgLXAgJDE7IFwKLSAgJChFQ0hPKSAiKCAkKENEKSAkMSAmJiAkKEJPT1RfSkFSX0NNRCkgeGZ2ICQyICQzICkiIDsgXAotICAoICQoQ0QpICQxICYmICQoQk9PVF9KQVJfQ01EKSB4ZnYgJDIgJDMgKSBcCisgICQoRUNITykgIiggJChDRCkgJDEgJiYgJChCT09UX0pBUl9DTUQpIHhmdiAkMiAkMyAkKEJPT1RfSkFSX0pGTEFHUykgKSIgOyBcCisgICggJChDRCkgJDEgJiYgJChCT09UX0pBUl9DTUQpIHhmdiAkMiAkMyAkKEJPT1RfSkFSX0pGTEFHUykgKSAmJiBcCisgICggJChDRCkgJDEgJiYgJChqYXZhLXZtLWNsZWFudXApICkgXAogKQogZW5kZWYKIApkaWZmIC0tZ2l0IGEvbWFrZS9jb21tb24vc2hhcmVkL0NvbXBpbGVyLXN1bi5nbWsgYi9tYWtlL2NvbW1vbi9zaGFyZWQvQ29tcGlsZXItc3VuLmdtawppbmRleCBiNDgwNmJiLi5iM2M0ZTJhIDEwMDY0NAotLS0gYS9tYWtlL2NvbW1vbi9zaGFyZWQvQ29tcGlsZXItc3VuLmdtaworKysgYi9tYWtlL2NvbW1vbi9zaGFyZWQvQ29tcGlsZXItc3VuLmdtawpAQCAtMzEsMTEgKzMxLDggQEAKIAogIyBTdW4gU3R1ZGlvIENvbXBpbGVyIHNldHRpbmdzIHNwZWNpZmljIHRvIFNvbGFyaXMKIGlmZXEgKCQoUExBVEZPUk0pLCBzb2xhcmlzKQotICAjIEZJWFVQOiBDaGFuZ2UgdG8gU1MxMiB3aGVuIHZhbGlkYXRlZAotICAjQ09NUElMRVJfVkVSU0lPTj1TUzEyCi0gICNSRVFVSVJFRF9DQ19WRVI9NS45Ci0gIENPTVBJTEVSX1ZFUlNJT049U1MxMQotICBSRVFVSVJFRF9DQ19WRVI9NS44CisgIENPTVBJTEVSX1ZFUlNJT049U1MxMgorICBSRVFVSVJFRF9DQ19WRVI9NS45CiAgIENDICAgICAgICAgICAgID0gJChDT01QSUxFUl9QQVRIKWNjCiAgIENQUCAgICAgICAgICAgID0gJChDT01QSUxFUl9QQVRIKWNjIC1FCiAgIENYWCAgICAgICAgICAgID0gJChDT01QSUxFUl9QQVRIKUNDCmRpZmYgLS1naXQgYS9tYWtlL2NvbW1vbi9zaGFyZWQvRGVmcy1qYXZhLmdtayBiL21ha2UvY29tbW9uL3NoYXJlZC9EZWZzLWphdmEuZ21rCmluZGV4IDE3OWU1M2EuLmY2NDg0ZjQgMTAwNjQ0Ci0tLSBhL21ha2UvY29tbW9uL3NoYXJlZC9EZWZzLWphdmEuZ21rCisrKyBiL21ha2UvY29tbW9uL3NoYXJlZC9EZWZzLWphdmEuZ21rCkBAIC0xOTAsNiArMTkwLDcgQEAKICAgQk9PVF9KQVZBQ0ZMQUdTICArPSAtV2Vycm9yCiBlbmRpZgogQk9PVF9KQVZBQ0ZMQUdTICArPSAtZW5jb2RpbmcgYXNjaWkKK0JPT1RfSkFSX0pGTEFHUyArPSAkKEpBUl9KRkxBR1MpCiAKIEJPT1RfSkFWQV9DTUQgICAgICA9ICQoQk9PVERJUikvYmluL2phdmEgJChKQVZBX1RPT0xTX0ZMQUdTKQogQk9PVF9KQVZBQ19DTUQgICAgID0gJChCT09URElSKS9iaW4vamF2YWMgJChKQVZBQ19KVk1fRkxBR1MpICQoQk9PVF9KQVZBQ0ZMQUdTKQpkaWZmIC0tZ2l0IGEvbWFrZS9jb21tb24vc2hhcmVkL0RlZnMuZ21rIGIvbWFrZS9jb21tb24vc2hhcmVkL0RlZnMuZ21rCmluZGV4IGFmODZiZTguLmIyNWRiOWUgMTAwNjQ0Ci0tLSBhL21ha2UvY29tbW9uL3NoYXJlZC9EZWZzLmdtaworKysgYi9tYWtlL2NvbW1vbi9zaGFyZWQvRGVmcy5nbWsKQEAgLTI3OSw5ICsyNzksNiBAQAogUFJPTU9URURfQlVJTERfQkFTRURJUiA9ICQoUFJPTU9URURfUkVfQVJFQSkvJChQUk9NT1RFRF9CVUlMRF9MQVRFU1QpCiBQUk9NT1RFRF9CVUlMRF9CSU5BUklFUyA9ICQoUFJPTU9URURfQlVJTERfQkFTRURJUikvYmluYXJpZXMKIAotIyBPUFQ6IENoYW5nZXMgd2hhdCB0aGUgb3B0aW1pemF0aW9ucyBzZXR0aW5ncyAoaW4gX09QVCkKLVBPUFQgPSAkKF9PUFQkKEFMVF9PUFQpKSQoQUxUX09QVCkKLQogIyBQQVJBTExFTF9DT01QSUxFX0pPQlM6IGlzIHRoZSBudW1iZXIgb2YgY29tcGlsZXMgZG9uZSBpbiBwYXJhbGxlbC4KICMgIElmIHRoZSB1c2VyIHNldHMgQUxUX1BBUkFMTEVMX0NPTVBJTEVfSk9CUywgdGhlbiBDT01QSUxFX0FQUFJPQUNIIGlzIHNldAogIyAgdG8gcGFyYWxsZWwuCmRpZmYgLS1naXQgYS9tYWtlL2phdmEvZmRsaWJtL01ha2VmaWxlIGIvbWFrZS9qYXZhL2ZkbGlibS9NYWtlZmlsZQppbmRleCBhYjdhNDExLi5iMmQ5MGVjIDEwMDY0NAotLS0gYS9tYWtlL2phdmEvZmRsaWJtL01ha2VmaWxlCisrKyBiL21ha2UvamF2YS9mZGxpYm0vTWFrZWZpbGUKQEAgLTMzLDYgKzMzLDcgQEAKIEJVSUxERElSICAgICA9IC4uLy4uCiBMSUJSQVJZICAgICAgPSBmZGxpYm0KIFBST0RVQ1QgICAgICA9IGphdmEKKwogaW5jbHVkZSAkKEJVSUxERElSKS9jb21tb24vRGVmcy5nbWsKIAogIwpAQCAtNDAsMTUgKzQxLDI0IEBACiAjCiBGRExJQk1fU1JDID0gJChTSEFSRV9TUkMpL25hdGl2ZS9qYXZhL2xhbmcvZmRsaWJtCiAKLSMgd2luZG93cyBjb21waWxlciBmbGFncworIyBXaW5kb3dzOiBjb21waWxlciBmbGFncwogaWZlcSAoJChQTEFURk9STSksd2luZG93cykKICAgIyBUdXJuIGFsbCBvcHRpbWl6YXRpb25zIG9mZgotICBfT1BUID0gJChDQ19OT19PUFQpCisgIE9QVElNSVpBVElPTl9MRVZFTCA9IE5PTkUKICAgT1RIRVJfQ0ZMQUdTID0KICAgQ1BQRkxBR1NfREJHICs9IC1ETE9HR0lORwogZW5kaWYKIAogIworIyBMaW51eDogRGlzYWJsZSBvcHRpbWl6YXRpb24gdG8gZ2V0IGNvcnJlY3RseSByZXByb2R1Y2libGUKKyMgZmxvYXRpbmctcG9pbnQgcmVzdWx0cy4KKyMKK2lmZXEgKCQoUExBVEZPUk0pLGxpbnV4KQorICAjIFR1cm4gYWxsIG9wdGltaXphdGlvbnMgb2ZmCisgIE9QVElNSVpBVElPTl9MRVZFTCA9IE5PTkUKK2VuZGlmCisKKyMKICMgSW5jbHVkZSBwYXRoLgogIwogT1RIRVJfSU5DTFVERVMgPSAtSSQoRkRMSUJNX1NSQykvaW5jbHVkZQpAQCAtNjksMTUgKzc5LDYgQEAKIGluY2x1ZGUgJChCVUlMRERJUikvY29tbW9uL0xpYnJhcnkuZ21rCiAKICMKLSMgRGlzYWJsZSBvcHRpbWl6YXRpb24gdG8gZ2V0IGNvcnJlY3RseSByZXByb2R1Y2libGUgCi0jIGZsb2F0aW5nLXBvaW50IHJlc3VsdHMuCi0jCi1pZmVxICgkKFBMQVRGT1JNKSxsaW51eCkKLSAgIyBUdXJuIGFsbCBvcHRpbWl6YXRpb25zIG9mZgotICBfT1BUID0gJChDQ19OT19PUFQpCi1lbmRpZgotCi0jCiAjIEZpbmQgZmRsaWJtIHNvdXJjZSBmaWxlcy4KICMKIHZwYXRoICUuYwpkaWZmIC0tZ2l0IGEvbWFrZS9qYXZhL2phdmFfaHByb2ZfZGVtby9NYWtlZmlsZSBiL21ha2UvamF2YS9qYXZhX2hwcm9mX2RlbW8vTWFrZWZpbGUKaW5kZXggOWM5N2E2YS4uNTg4MDVlZSAxMDA2NDQKLS0tIGEvbWFrZS9qYXZhL2phdmFfaHByb2ZfZGVtby9NYWtlZmlsZQorKysgYi9tYWtlL2phdmEvamF2YV9ocHJvZl9kZW1vL01ha2VmaWxlCkBAIC0yOCwxNCArMjgsMTQgQEAKIFBST0RVQ1QgPSBzdW4KIExJQlJBUllfT1VUUFVUID0gaHByb2ZfanZtdGkKIAotIyBDb25maWd1cmUgdGhlIENGTEFHUyBmb3IgdGhpcyBsaWJyYXJ5LgorIyBVc2UgaGlnaGVzdCBvcHRpbWl6YXRpb24KK09QVElNSVpBVElPTl9MRVZFTCA9IEhJR0hFU1QKIAorIyBDb25maWd1cmUgdGhlIENGTEFHUyBmb3IgdGhpcyBsaWJyYXJ5LgogRklMRVNfbSA9IG1hcGZpbGUtdmVycwogCiBpbmNsdWRlICQoQlVJTERESVIpL2NvbW1vbi9EZWZzLmdtawogCi1fT1BUPSQoQ0NfSElHSEVTVF9PUFQpCi0KIFNSQ0RJUj0kKFNIQVJFX1NSQykvZGVtby9qdm10aS9ocHJvZgogUFNSQ0RJUj0kKFBMQVRGT1JNX1NSQykvZGVtby9qdm10aS9ocHJvZgogCmRpZmYgLS1naXQgYS9tYWtlL2phdmEvbWFuYWdlbWVudC9NYWtlZmlsZSBiL21ha2UvamF2YS9tYW5hZ2VtZW50L01ha2VmaWxlCmluZGV4IDRkMzlkNTEuLmMxYzRlZGIgMTAwNjQ0Ci0tLSBhL21ha2UvamF2YS9tYW5hZ2VtZW50L01ha2VmaWxlCisrKyBiL21ha2UvamF2YS9tYW5hZ2VtZW50L01ha2VmaWxlCkBAIC05Myw3ICs5Myw4IEBACiBpbmNsdWRlICQoQlVJTERESVIpL2NvbW1vbi9MaWJyYXJ5LmdtawogCiAkKEFHRU5USkFSKTogJChMSUJESVIpICQoVEVNUERJUikvbWFuaWZlc3QKLQkkKEJPT1RfSkFSX0NNRCkgLWNmbSAkKEFHRU5USkFSKSAkKFRFTVBESVIpL21hbmlmZXN0CisJJChCT09UX0pBUl9DTUQpIC1jZm0gJChBR0VOVEpBUikgJChURU1QRElSKS9tYW5pZmVzdCAkKEJPT1RfSkFSX0pGTEFHUykKKwlAJChqYXZhLXZtLWNsZWFudXApCiAKICQoVEVNUERJUikvbWFuaWZlc3Q6ICQoTUFOSUZFU1QpCiAJJChpbnN0YWxsLWZpbGUpCmRpZmYgLS1naXQgYS9tYWtlL2phdmF4L2NyeXB0by9NYWtlZmlsZSBiL21ha2UvamF2YXgvY3J5cHRvL01ha2VmaWxlCmluZGV4IDg2NTg4ZTguLjIxNmZmNmUgMTAwNjQ0Ci0tLSBhL21ha2UvamF2YXgvY3J5cHRvL01ha2VmaWxlCisrKyBiL21ha2UvamF2YXgvY3J5cHRvL01ha2VmaWxlCkBAIC0yMzAsNyArMjMwLDcgQEAKICQoVU5TSUdORURfRElSKS9qY2UuamFyOiBwcmVidWlsZCBidWlsZCAkKEpDRV9NQU5JRkVTVF9GSUxFKQogCSQocHJlcC10YXJnZXQpCiAJJChCT09UX0pBUl9DTUQpIGNtZiAkKEpDRV9NQU5JRkVTVF9GSUxFKSAkQCAkKEpBUl9ESVJTKSBcCi0JICAgICQoSkFSX0pGTEFHUykKKwkgICAgJChCT09UX0pBUl9KRkxBR1MpCiAJJChDUCkgLXIgJChDTEFTU0RFU1RESVIpLyogJChDTEFTU0JJTkRJUikKIAlAJChqYXZhLXZtLWNsZWFudXApCiAKQEAgLTI2OCw3ICsyNjgsNyBAQAogCSQocHJlcC10YXJnZXQpCiAJJChCT09UX0pBUl9DTUQpIGNtZiBwb2xpY3kvdW5saW1pdGVkL1VOTElNSVRFRCAkQAkJXAogCSAgICAtQyBwb2xpY3kvdW5saW1pdGVkIGRlZmF1bHRfVVNfZXhwb3J0LnBvbGljeQkJXAotCSAgICAkKEpBUl9KRkxBR1MpCisJICAgICQoQk9PVF9KQVJfSkZMQUdTKQogCUAkKGphdmEtdm0tY2xlYW51cCkKIAogJChVTlNJR05FRF9QT0xJQ1lfQlVJTERESVIpL3VubGltaXRlZC9sb2NhbF9wb2xpY3kuamFyOgkJCVwKQEAgLTI3Nyw3ICsyNzcsNyBAQAogCSQocHJlcC10YXJnZXQpCiAJJChCT09UX0pBUl9DTUQpIGNtZiBwb2xpY3kvdW5saW1pdGVkL1VOTElNSVRFRCAkQAkJXAogCSAgICAtQyBwb2xpY3kvdW5saW1pdGVkIGRlZmF1bHRfbG9jYWwucG9saWN5CQkJXAotCSAgICAkKEpBUl9KRkxBR1MpCisJICAgICQoQk9PVF9KQVJfSkZMQUdTKQogCUAkKGphdmEtdm0tY2xlYW51cCkKIAogIwpAQCAtMzAyLDcgKzMwMiw3IEBACiAJJChCT09UX0pBUl9DTUQpIGNtZiBwb2xpY3kvbGltaXRlZC9MSU1JVEVEICRACQkJXAogCSAgICAtQyBwb2xpY3kvbGltaXRlZCBkZWZhdWx0X2xvY2FsLnBvbGljeQkJCVwKIAkgICAgLUMgcG9saWN5L2xpbWl0ZWQgZXhlbXB0X2xvY2FsLnBvbGljeQkJCVwKLQkgICAgJChKQVJfSkZMQUdTKQorCSAgICAkKEJPT1RfSkFSX0pGTEFHUykKIAlAJChqYXZhLXZtLWNsZWFudXApCiAKIFVOU0lHTkVEX1BPTElDWV9GSUxFUyA9IFwKQEAgLTQwMiw3ICs0MDIsNyBAQAogCSQoQk9PVF9KQVJfQ01EKSBjbWYgJChKQ0VfTUFOSUZFU1RfRklMRSkgJEAJXAogCSAgICAtQyAkKE9CRlVTX0RJUikvYnVpbGQgamF2YXgJCQlcCiAJICAgIC1DICQoT0JGVVNfRElSKS9idWlsZCBzdW4JCQlcCi0JICAgICQoSkFSX0pGTEFHUykKKwkgICAgJChCT09UX0pBUl9KRkxBR1MpCiAJJChzaWduLXRhcmdldCkKIAlAJChqYXZhLXZtLWNsZWFudXApCiAKZGlmZiAtLWdpdCBhL21ha2UvamF2YXgvc3dpbmcvYmVhbmluZm8vU3dpbmdCZWFucy5nbWsgYi9tYWtlL2phdmF4L3N3aW5nL2JlYW5pbmZvL1N3aW5nQmVhbnMuZ21rCmluZGV4IGRhZWFkODYuLjQ2MmMyNTAgMTAwNjQ0Ci0tLSBhL21ha2UvamF2YXgvc3dpbmcvYmVhbmluZm8vU3dpbmdCZWFucy5nbWsKKysrIGIvbWFrZS9qYXZheC9zd2luZy9iZWFuaW5mby9Td2luZ0JlYW5zLmdtawpAQCAtMTcwLDcgKzE3MCw3IEBACiAJJChCT09UX0pBUl9DTUQpIGNmICQoVEVNUERJUikvdG1wLmphciBcCiAJICAgICAtQyAkKEJFQU5DTEFTU0RJUikgamF2YXggXAogCSAgICAgLUMgJChCRUFOQ0xBU1NESVIpIHN1biBcCi0JICAgICAkKEpBUl9KRkxBR1MpCisJICAgICAkKEJPT1RfSkFSX0pGTEFHUykKIAkkKE1WKSAkKFRFTVBESVIpL3RtcC5qYXIgJChKREtfSU1BR0VfRElSKS9saWIvZHQuamFyCiAJQCQoamF2YS12bS1jbGVhbnVwKQogCmRpZmYgLS1naXQgYS9tYWtlL2pwcnQuY29uZmlnIGIvbWFrZS9qcHJ0LmNvbmZpZwppbmRleCA5OWVlNGM0Li5lZTgzZWU1IDEwMDY0NAotLS0gYS9tYWtlL2pwcnQuY29uZmlnCisrKyBiL21ha2UvanBydC5jb25maWcKQEAgLTEzNyw5ICsxMzcsNyBAQAogICAgIGlmIFsgIiR7SlBSVF9TT0xBUklTX0NPTVBJTEVSX05BTUV9IiAhPSAiIiBdIDsgdGhlbgogICAgICAgICBjb21waWxlcl9uYW1lPSR7SlBSVF9TT0xBUklTX0NPTVBJTEVSX05BTUV9CiAgICAgZWxzZQotICAgICAgICAjIEZJWFVQOiBDaGFuZ2UgdG8gU1MxMiB3aGVuIHZhbGlkYXRlZAotCSNjb21waWxlcl9uYW1lPVNTMTIKLQljb21waWxlcl9uYW1lPVNTMTEKKwljb21waWxlcl9uYW1lPVNTMTIKICAgICBmaQogICAgIGNvbXBpbGVyX3BhdGg9JHtqZGtfZGV2dG9vbHN9LyR7c29sYXJpc19hcmNofS9TVU5Xc3Byby8ke2NvbXBpbGVyX25hbWV9L2JpbgogICAgIEFMVF9DT01QSUxFUl9QQVRIPSIke2NvbXBpbGVyX3BhdGh9IgpkaWZmIC0tZ2l0IGEvbWFrZS9zdW4vYXd0L01ha2VmaWxlIGIvbWFrZS9zdW4vYXd0L01ha2VmaWxlCmluZGV4IGUzNGQyZjAuLmVkMzVkY2QgMTAwNjQ0Ci0tLSBhL21ha2Uvc3VuL2F3dC9NYWtlZmlsZQorKysgYi9tYWtlL3N1bi9hd3QvTWFrZWZpbGUKQEAgLTI4LDE3ICsyOCwxMyBAQAogTElCUkFSWSA9IGF3dAogUFJPRFVDVCA9IHN1bgogCi0jCiAjIFRlbGwgRGVmcy5nbWsgdGhhdCBWSVMgaXMgbmVlZGVkCi0jCiBWSVNfTkVFREVEPXRydWUKIAotaW5jbHVkZSAkKEJVSUxERElSKS9jb21tb24vRGVmcy5nbWsKLQotIwogIyBVc2UgaGlnaGVzdCBvcHRpbWl6YXRpb24gbGV2ZWwKLSMKLV9PUFQgPSAkKENDX0hJR0hFU1RfT1BUKQorT1BUTUlaQVRJT05fTEVWRUwgPSBISUdIRVNUCisKK2luY2x1ZGUgJChCVUlMRERJUikvY29tbW9uL0RlZnMuZ21rCiAKIE9USEVSX0NGTEFHUyArPSAtRF9fTUVESUFMSUJfT0xEX05BTUVTIC1EX19VU0VfSjJEX05BTUVTCiAKZGlmZiAtLWdpdCBhL21ha2Uvc3VuL2ZvbnQvTWFrZWZpbGUgYi9tYWtlL3N1bi9mb250L01ha2VmaWxlCmluZGV4IGFlMDZiYmUuLjI2NjMxNDQgMTAwNjQ0Ci0tLSBhL21ha2Uvc3VuL2ZvbnQvTWFrZWZpbGUKKysrIGIvbWFrZS9zdW4vZm9udC9NYWtlZmlsZQpAQCAtMzUsNiArMzUsOSBAQAogIyBJbmRpY2F0ZSB3ZSB3YW50IHRoZSBDKysgY29tcGlsZXIgdG8gZG8gdGhlIGxpbmtpbmcuCiBDUExVU1BMVVNMSUJSQVJZPXRydWUKIAorIyBVc2UgaGlnaGVyIG9wdGltaXphdGlvbiBsZXZlbAorT1BUSU1JWkFUSU9OX0xFVkVMID0gSElHSEVSCisKIGluY2x1ZGUgJChCVUlMRERJUikvY29tbW9uL0RlZnMuZ21rCiAKICMKQEAgLTQ4LDExICs1MSw2IEBACiAjIEZpbGVzCiAjCiAKLSMKLSMgVXNlIGhpZ2hlciBvcHRpbWl6YXRpb24gbGV2ZWwKLSMKLV9PUFQgPSAkKENDX0hJR0hFUl9PUFQpCi0KIGluY2x1ZGUgRklMRVNfYy5nbWsKIAogQVVUT19GSUxFU19KQVZBX0RJUlMgPSBzdW4vZm9udApkaWZmIC0tZ2l0IGEvbWFrZS9zdW4vZm9udC90MmsvTWFrZWZpbGUgYi9tYWtlL3N1bi9mb250L3Qyay9NYWtlZmlsZQppbmRleCA2NWY3Zjk5Li43MGRkMTE3IDEwMDY0NAotLS0gYS9tYWtlL3N1bi9mb250L3Qyay9NYWtlZmlsZQorKysgYi9tYWtlL3N1bi9mb250L3Qyay9NYWtlZmlsZQpAQCAtNDEsMTIgKzQxLDEwIEBACiAjIGZvciBhIGZldyBvbmVzIHdpdGggbmF0aXZlIG1ldGhvZHMpIHNvIHNob3VsZG4ndCBjbG9iYmVyIHRoZW0uCiBET05UX0NMT0JCRVJfQ0xBU1NFUz10cnVlCiAKLWluY2x1ZGUgJChCVUlMRERJUikvY29tbW9uL0RlZnMuZ21rCi0KLSMKICMgVXNlIGhpZ2hlciBvcHRpbWl6YXRpb24gbGV2ZWwKLSMKLV9PUFQgPSAkKENDX0hJR0hFUl9PUFQpCitPUFRJTUlaQVRJT05fTEVWRUwgPSBISUdIRVIKKworaW5jbHVkZSAkKEJVSUxERElSKS9jb21tb24vRGVmcy5nbWsKIAogIwogIyBGaWxlcwpkaWZmIC0tZ2l0IGEvbWFrZS9zdW4vaW1hZ2UvZ2VuZXJpYy9NYWtlZmlsZSBiL21ha2Uvc3VuL2ltYWdlL2dlbmVyaWMvTWFrZWZpbGUKaW5kZXggNjE1N2M3OS4uNjY1NzU1MyAxMDA2NDQKLS0tIGEvbWFrZS9zdW4vaW1hZ2UvZ2VuZXJpYy9NYWtlZmlsZQorKysgYi9tYWtlL3N1bi9pbWFnZS9nZW5lcmljL01ha2VmaWxlCkBAIC0zMSwxMiArMzEsMTEgQEAKIFBBQ0tBR0UgPSBzdW4uYXd0Lm1lZGlhbGliCiBMSUJSQVJZID0gbWxpYl9pbWFnZQogUFJPRFVDVCA9IHN1bgotaW5jbHVkZSAkKEJVSUxERElSKS9jb21tb24vRGVmcy5nbWsKIAotIwogIyBVc2UgaGlnaGVzdCBsZXZlbCBvZiBvcHRpbWl6YXRpb24gb24gdGhpcyBsaWJyYXJ5Ci0jCi1fT1BUID0gJChDQ19ISUdIRVNUX09QVCkKK09QVElNSVpBVElPTl9MRVZFTCA9IEhJR0hFU1QKKworaW5jbHVkZSAkKEJVSUxERElSKS9jb21tb24vRGVmcy5nbWsKIAogIwogIyBVc2UgbWFwZmlsZQpkaWZmIC0tZ2l0IGEvbWFrZS9zdW4vaW1hZ2UvdmlzL01ha2VmaWxlIGIvbWFrZS9zdW4vaW1hZ2UvdmlzL01ha2VmaWxlCmluZGV4IDAwYzExYzMuLmJiMjNkNmEgMTAwNjQ0Ci0tLSBhL21ha2Uvc3VuL2ltYWdlL3Zpcy9NYWtlZmlsZQorKysgYi9tYWtlL3N1bi9pbWFnZS92aXMvTWFrZWZpbGUKQEAgLTMxLDE3ICszMSwxMyBAQAogTElCUkFSWSA9IG1saWJfaW1hZ2VfdgogUFJPRFVDVCA9IHN1bgogCi0jCiAjIFRlbGwgRGVmcy5nbWsgd2UgbmVlZCBWSVMgaW5zdHJ1Y3Rpb25zCi0jCiBWSVNfTkVFREVEPXRydWUKIAotaW5jbHVkZSAkKEJVSUxERElSKS9jb21tb24vRGVmcy5nbWsKLQotIwogIyBTZWxlY3QgaGlnaGVzdCBsZXZlbCBvZiBvcHRpbWl6YXRpb24gZm9yIHRoaXMgbGlicmFyeQotIwotX09QVCA9ICQoQ0NfSElHSEVTVF9PUFQpCitPUFRJTUlaQVRJT05fTEVWRUwgPSBISUdIRVNUCisKK2luY2x1ZGUgJChCVUlMRERJUikvY29tbW9uL0RlZnMuZ21rCiAKICMKICMgVXNlIGdlbmVyaWMgbWFwZmlsZQpkaWZmIC0tZ2l0IGEvbWFrZS9zdW4vamNvbnNvbGUvTWFrZWZpbGUgYi9tYWtlL3N1bi9qY29uc29sZS9NYWtlZmlsZQppbmRleCBiZmJkY2NiLi4xNGQxNjYwIDEwMDY0NAotLS0gYS9tYWtlL3N1bi9qY29uc29sZS9NYWtlZmlsZQorKysgYi9tYWtlL3N1bi9qY29uc29sZS9NYWtlZmlsZQpAQCAtODIsNyArODIsNyBAQAogCSQoQk9PVF9KQVJfQ01EKSAtY2ZtICQoSkFSRklMRSkgJChURU1QRElSKS9tYW5pZmVzdCBcCiAgICAgICAgICAgICAgICAtQyAkKENMQVNTQklORElSKSBzdW4vdG9vbHMvamNvbnNvbGUgXAogICAgICAgICAgICAgICAgLUMgJChDTEFTU0JJTkRJUikgY29tL3N1bi90b29scy9qY29uc29sZSBcCi0JCSAgICAkKEpBUl9KRkxBR1MpCisJCSAgICAkKEJPT1RfSkFSX0pGTEFHUykKIAlAJChqYXZhLXZtLWNsZWFudXApCiAKIGNsZWFuIGNsb2JiZXI6OgpkaWZmIC0tZ2l0IGEvbWFrZS9zdW4vanBlZy9NYWtlZmlsZSBiL21ha2Uvc3VuL2pwZWcvTWFrZWZpbGUKaW5kZXggZTM1MTM3Ni4uNmVhZWY4YSAxMDA2NDQKLS0tIGEvbWFrZS9zdW4vanBlZy9NYWtlZmlsZQorKysgYi9tYWtlL3N1bi9qcGVnL01ha2VmaWxlCkBAIC0yNywxMiArMjcsMTEgQEAKIFBBQ0tBR0UgPSBzdW4uYXd0CiBMSUJSQVJZID0ganBlZwogUFJPRFVDVCA9IHN1bgotaW5jbHVkZSAkKEJVSUxERElSKS9jb21tb24vRGVmcy5nbWsKIAotIwogIyBVc2UgaGlnaGVzdCBvcHRpbWl6YXRpb24gbGV2ZWwKLSMKLV9PUFQgPSAkKENDX0hJR0hFU1RfT1BUKQorT1BUSU1JWkFUSU9OX0xFVkVMID0gSElHSEVTVAorCitpbmNsdWRlICQoQlVJTERESVIpL2NvbW1vbi9EZWZzLmdtawogCiAjCiAjIEZpbGVzCmRpZmYgLS1naXQgYS9tYWtlL3N1bi9uZXQvc3BpL25hbWVzZXJ2aWNlL2Rucy9NYWtlZmlsZSBiL21ha2Uvc3VuL25ldC9zcGkvbmFtZXNlcnZpY2UvZG5zL01ha2VmaWxlCmluZGV4IDBhNzY4M2YuLmE4ODJlYWQgMTAwNjQ0Ci0tLSBhL21ha2Uvc3VuL25ldC9zcGkvbmFtZXNlcnZpY2UvZG5zL01ha2VmaWxlCisrKyBiL21ha2Uvc3VuL25ldC9zcGkvbmFtZXNlcnZpY2UvZG5zL01ha2VmaWxlCkBAIC02Nyw3ICs2Nyw3IEBACiAJJChCT09UX0pBUl9DTUQpIC1jZiAkKEpBUkZJTEUpIFwKIAkgICAgIC1DICQoQ0xBU1NERVNURElSKSBzdW4gXAogCSAgICAgLUMgJChDTEFTU0RFU1RESVIpIE1FVEEtSU5GIFwKLQkgICAgICQoSkFSX0pGTEFHUykKKwkgICAgICQoQk9PVF9KQVJfSkZMQUdTKQogCUAkKGphdmEtdm0tY2xlYW51cCkKIAogaW5jbHVkZSAkKEJVSUxERElSKS9jb21tb24vQ2xhc3Nlcy5nbWsKZGlmZiAtLWdpdCBhL21ha2Uvc3VuL25pby9NYWtlZmlsZSBiL21ha2Uvc3VuL25pby9NYWtlZmlsZQppbmRleCBjOGU4ZTM3Li44ZGQxZjk4IDEwMDY0NAotLS0gYS9tYWtlL3N1bi9uaW8vTWFrZWZpbGUKKysrIGIvbWFrZS9zdW4vbmlvL01ha2VmaWxlCkBAIC05MSw3ICs5MSw3IEBACiAJJChCT09UX0pBUl9DTUQpIGNmICQoQ0hBUlNFVFNfSkFSKSBcCiAJICAgICAgLUMgJChDTEFTU0RFU1RESVIpIHN1biBcCiAJICAgICAgLUMgJChDTEFTU0RFU1RESVIpICQoU0VSVklDRV9ERVNDUklQVElPTl9QQVRIKSAgXAotCSAgICAgICQoSkFSX0pGTEFHUykKKwkgICAgICAkKEJPT1RfSkFSX0pGTEFHUykKIAlAJChqYXZhLXZtLWNsZWFudXApCiAKIGNsZWFuOjoKZGlmZiAtLWdpdCBhL21ha2Uvc3VuL3NlY3VyaXR5L21zY2FwaS9NYWtlZmlsZSBiL21ha2Uvc3VuL3NlY3VyaXR5L21zY2FwaS9NYWtlZmlsZQppbmRleCA4MjIzYjUzLi4wOGQ2NjA5IDEwMDY0NAotLS0gYS9tYWtlL3N1bi9zZWN1cml0eS9tc2NhcGkvTWFrZWZpbGUKKysrIGIvbWFrZS9zdW4vc2VjdXJpdHkvbXNjYXBpL01ha2VmaWxlCkBAIC0yMTAsNyArMjEwLDcgQEAKICQoVU5TSUdORURfRElSKS9zdW5tc2NhcGkuamFyOiBidWlsZAogCSQocHJlcC10YXJnZXQpCiAJJChCT09UX0pBUl9DTUQpIGNmICRAICQoSkFSX0RJUlMpIFwKLQkgICAgJChKQVJfSkZMQUdTKQorCSAgICAkKEJPT1RfSkFSX0pGTEFHUykKIAlAJChqYXZhLXZtLWNsZWFudXApCiAKIApkaWZmIC0tZ2l0IGEvbWFrZS9zdW4vc2VjdXJpdHkvcGtjczExL01ha2VmaWxlIGIvbWFrZS9zdW4vc2VjdXJpdHkvcGtjczExL01ha2VmaWxlCmluZGV4IDQ1MDhiMjAuLmYyMDkxMGIgMTAwNjQ0Ci0tLSBhL21ha2Uvc3VuL3NlY3VyaXR5L3BrY3MxMS9NYWtlZmlsZQorKysgYi9tYWtlL3N1bi9zZWN1cml0eS9wa2NzMTEvTWFrZWZpbGUKQEAgLTIxMCw3ICsyMTAsNyBAQAogJChVTlNJR05FRF9ESVIpL3N1bnBrY3MxMS5qYXI6IGJ1aWxkCiAJJChwcmVwLXRhcmdldCkKIAkkKEJPT1RfSkFSX0NNRCkgY2YgJEAgJChKQVJfRElSUykgXAotCSAgICAkKEpBUl9KRkxBR1MpCisJICAgICQoQk9PVF9KQVJfSkZMQUdTKQogCUAkKGphdmEtdm0tY2xlYW51cCkKIAogCmRpZmYgLS1naXQgYS9tYWtlL3N1bi90ZXh0L01ha2VmaWxlIGIvbWFrZS9zdW4vdGV4dC9NYWtlZmlsZQppbmRleCBkM2Q0OTM1Li5mMGZiNDI2IDEwMDY0NAotLS0gYS9tYWtlL3N1bi90ZXh0L01ha2VmaWxlCisrKyBiL21ha2Uvc3VuL3RleHQvTWFrZWZpbGUKQEAgLTExMiw3ICsxMTIsNyBAQAogJChMT0NBTEVEQVRBX0pBUik6ICQoRVhURElSKSAkKEZJTEVTX2NsYXNzKSAkKEJJRklMRVMpICQoU1BFQ0lBTEZJTEVTKQogCSQocHJlcC10YXJnZXQpCiAJJChCT09UX0pBUl9DTUQpIC1jZiAkQCAtQyAkKENMQVNTREVTVERJUikgc3VuIFwKLQkgICAgICQoSkFSX0pGTEFHUykKKwkgICAgICQoQk9PVF9KQVJfSkZMQUdTKQogCUAkKGphdmEtdm0tY2xlYW51cCkKIAogYnVpbGQ6ICQoTE9DQUxFREFUQV9KQVIpCg==