RExMIG92ZXJyaWRlcwotLS0tLS0tLS0tLS0tCiAgIAogICBUaGUgd2luZS5jb25mIGRpcmVjdGl2ZXMgW0RsbERlZmF1bHRzXSBhbmQgW0RsbE92ZXJyaWRlc10gYXJlIHRoZQogICBzdWJqZWN0IG9mIHNvbWUgY29uZnVzaW9uLiBUaGUgb3ZlcmFsbCBwdXJwb3NlIG9mIG1vc3Qgb2YgdGhlc2UKICAgZGlyZWN0aXZlcyBhcmUgY2xlYXIgZW5vdWdoLCB0aG91Z2ggLSBnaXZlbiBhIGNob2ljZSwgc2hvdWxkIFdpbmUgdXNlCiAgIGl0cyBvd24gYnVpbHQtaW4gRExMcywgb3Igc2hvdWxkIGl0IHVzZSAuRExMIGZpbGVzIGZvdW5kIGluIGFuCiAgIGV4aXN0aW5nIFdpbmRvd3MgaW5zdGFsbGF0aW9uPyBUaGlzIGRvY3VtZW50IGV4cGxhaW5zIGhvdyB0aGlzIGZlYXR1cmUKICAgd29ya3MuCiAgIApETEwgdHlwZXMKCiAgIG5hdGl2ZQogICAgICAgICAgQSAibmF0aXZlIiBETEwgaXMgYSAuRExMIGZpbGUgd3JpdHRlbiBmb3IgdGhlIHJlYWwgTWljcm9zb2Z0CiAgICAgICAgICBXaW5kb3dzLgogICAgICAgICAgCiAgIGJ1aWx0aW4KICAgICAgICAgIEEgImJ1aWx0aW4iIERMTCBpcyBhIFdpbmUgRExMLiBUaGVzZSBjYW4gZWl0aGVyIGJlIGEgcGFydCBvZgogICAgICAgICAgbGlid2luZS5zbywgb3IgbW9yZSByZWNlbnRseSwgaW4gYSBzcGVjaWFsIC5zbyBmaWxlIHRoYXQgV2luZQogICAgICAgICAgaXMgYWJsZSB0byBsb2FkIG9uIGRlbWFuZC4KICAgICAgICAgIAogICBlbGZkbGwKICAgICAgICAgIEFuICJlbGZkbGwiIGlzIGEgV2luZSAuc28gZmlsZSB3aXRoIGEgc3BlY2lhbCBXaW5kb3dzLWxpa2UgZmlsZQogICAgICAgICAgc3RydWN0dXJlIHRoYXQgaXMgYXMgY2xvc2UgdG8gV2luZG93cyBhcyBwb3NzaWJsZSwgYW5kIHRoYXQgY2FuCiAgICAgICAgICBhbHNvIHNlYW1sZXNzbHkgbGluayBkeW5hbWljYWxseSB3aXRoICJuYXRpdmUiIERMTHMsIGJ5IHVzaW5nCiAgICAgICAgICBzcGVjaWFsIEVMRiBsb2FkZXIgYW5kIGxpbmtlciB0cmlja3MuIEJlcnRobyBTdHVsdGllbnMgZGlkIHNvbWUKICAgICAgICAgIHdvcmsgb24gdGhpcywgYnV0IHRoaXMgZmVhdHVyZSBoYXMgbm90IHlldCBiZWVuIG1lcmdlZCBiYWNrCiAgICAgICAgICBpbnRvIFdpbmUgKGJlY2F1c2Ugb2YgcG9saXRpY2FsIHJlYXNvbnMgYW5kIGxhY2sgb2YgdGltZSksIHNvCiAgICAgICAgICB0aGlzIERMTCB0eXBlIGRvZXMgbm90IGV4aXN0IGluIHRoZSBvZmZpY2lhbCBXaW5lIGF0IHRoaXMgdGltZS4KICAgICAgICAgIEluIHRoZSBtZWFudGltZSwgdGhlICJidWlsdGluIiBETEwgdHlwZSBnYWluZWQgc29tZSBvZiB0aGUKICAgICAgICAgIGZlYXR1cmVzIG9mIGVsZmRsbHMgKHN1Y2ggYXMgZHluYW1pYyBsb2FkaW5nKSwgc28gaXQncyBwb3NzaWJsZQogICAgICAgICAgdGhhdCAiZWxmZGxsIiBmdW5jdGlvbmFsaXR5IHdpbGwgYmUgZm9sZGVkIGludG8gImJ1aWx0aW4iIGF0CiAgICAgICAgICBzb21lIHBvaW50LgogICAgICAgICAgCiAgIHNvCiAgICAgICAgICBBIG5hdGl2ZSBVbml4IC5zbyBmaWxlLCB3aXRoIGNhbGxpbmcgY29udmVudGlvbiBjb252ZXJzaW9uCiAgICAgICAgICB0aHVua3MgZ2VuZXJhdGVkIG9uIHRoZSBmbHkgYXMgdGhlIGxpYnJhcnkgaXMgbG9hZGVkLiBUaGlzIGlzCiAgICAgICAgICBtb3N0bHkgdXNlZnVsIGZvciBsaWJyYXJpZXMgc3VjaCBhcyAiZ2xpZGUiIHRoYXQgaGFzIGV4YWN0bHkKICAgICAgICAgIHRoZSBzYW1lIEFQSSBvbiBib3RoIFdpbmRvd3MgYW5kIFVuaXguCiAgICAgICAgICAKVGhlIFtEbGxEZWZhdWx0c10gc2VjdGlvbgoKICAgRVhUUkFfTERfTElCUkFSWV9QQVRICiAgICAgICAgICBUaGlzIHNwZWNpZmllcyB0aGUgbG9jYXRpb24gb2YgdGhlIFdpbmUncyBETEwgLnNvIGZpbGVzLiBXaW5lCiAgICAgICAgICB3aWxsIHNlYXJjaCB0aGlzIHBhdGggd2hlbiB0cnlpbmcgdG8gbG9jYXRlIGEgRExMIG9mIHRoZSB0eXBlCiAgICAgICAgICAiYnVpbHRpbiIgb3IgImVsZmRsbCIuIChUaGlzIGRvZXMgbm90IGFwcGx5IHRvIGxpYndpbmUuc28sCiAgICAgICAgICBzaW5jZSBsaWJ3aW5lLnNvIGlzIG5vdCBhIERMTCBpbiB0aGlzIHNlbnNlLikKICAgICAgICAgIAogICBEZWZhdWx0TG9hZE9yZGVyCiAgICAgICAgICBUaGlzIHNwZWNpZmllcyBpbiB3aGF0IG9yZGVyIFdpbmUgc2hvdWxkIHNlYXJjaCBmb3IgYXZhaWxhYmxlCiAgICAgICAgICBETEwgdHlwZXMsIGlmIHRoZSBETEwgaW4gcXVlc3Rpb24gd2FzIG5vdCBmb3VuZCBpbiB0aGUKICAgICAgICAgIFtEbGxPdmVycmlkZXNdIHNlY3Rpb24uCiAgICAgICAgICAKVGhlIFtEbGxQYWlyc10gc2VjdGlvbgoKICAgQXQgb25lIHRpbWUsIHRoZXJlIHdhcyBhIHNlY3Rpb24gY2FsbGVkIFtEbGxQYWlyc10gaW4gdGhlIGRlZmF1bHQKICAgY29uZmlndXJhdGlvbiBmaWxlLCBidXQgdGhpcyBoYXMgYmVlbiBvYnNvbGV0ZWQgYmVjYXVzZSB0aGUgcGFpcmluZwogICBpbmZvcm1hdGlvbiBoYXMgbm93IGJlZW4gZW1iZWRkZWQgaW50byBXaW5lIGl0c2VsZi4gKFRoZSBwdXJwb3NlIG9mCiAgIHRoaXMgc2VjdGlvbiB3YXMgbWVyZWx5IHRvIGJlIGFibGUgdG8gaXNzdWUgd2FybmluZ3MgaWYgdGhlIHVzZXIKICAgYXR0ZW1wdGVkIHRvIHBhaXIgY29kZXBlbmRlbnQgMTYtYml0LzMyLWJpdCBETExzIG9mIGRpZmZlcmVudCB0eXBlcy4pCiAgIElmIHlvdSBzdGlsbCBoYXZlIHRoaXMgaW4geW91ciB3aW5lLmNvbmYgb3IgLndpbmVyYywgeW91IG1heSBzYWZlbHkKICAgZGVsZXRlIGl0LgogICAKVGhlIFtEbGxPdmVycmlkZXNdIHNlY3Rpb24KCiAgIFRoaXMgc2VjdGlvbiBzcGVjaWZpZXMgaG93IHlvdSB3YW50IHNwZWNpZmljIERMTHMgdG8gYmUgaGFuZGxlZCwgaW4KICAgcGFydGljdWxhciB3aGV0aGVyIHlvdSB3YW50IHRvIHVzZSAibmF0aXZlIiBETExzIG9yIG5vdCwgaWYgeW91IGhhdmUKICAgc29tZSBmcm9tIGEgcmVhbCBXaW5kb3dzIGNvbmZpZ3VyYXRpb24uIEJlY2F1c2UgYnVpbHRpbnMgZG8gbm90IG1peAogICBzZWFtbGVzc2x5IHdpdGggbmF0aXZlIERMTHMgeWV0LCBjZXJ0YWluIERMTCBkZXBlbmRlbmNpZXMgbWF5IGJlCiAgIHByb2JsZW1hdGljLCBidXQgd29ya2Fyb3VuZHMgZXhpc3QgaW4gV2luZSBmb3IgbWFueSBwb3B1bGFyIERMTAogICBjb25maWd1cmF0aW9ucy4gQWxzbyBzZWUgV1dOJ3MgWzE2XVN0YXR1cyBQYWdlIHRvIGZpZ3VyZSBvdXQgaG93IHdlbGwKICAgeW91ciBmYXZvcml0ZSBETEwgaXMgaW1wbGVtZW50ZWQgaW4gV2luZS4KICAgCiAgIEl0IGlzIG9mIGNvdXJzZSBhbHNvIHBvc3NpYmxlIHRvIG92ZXJyaWRlIHRoZXNlIHNldHRpbmdzIGJ5IGV4cGxpY3RseQogICB1c2luZyBXaW5lJ3MgLS1kbGwgY29tbWFuZC1saW5lIG9wdGlvbiAoc2VlIHRoZSBtYW4gcGFnZSBmb3IgZGV0YWlscykuCiAgIAogICBTb21lIGhpbnRzIGZvciBjaG9vc2luZyB5b3VyIG9wdGltYWwgY29uZmlndXJhdGlvbiAobGlzdGVkIGJ5CiAgIDE2LzMyLWJpdCBETEwgcGFpcik6CiAgIAogICBrcm5sMzg2LCBrZXJuZWwzMgogICAgICAgICAgTmF0aXZlIHZlcnNpb25zIG9mIHRoZXNlIHdpbGwgbmV2ZXIgd29yaywgc28gZG9uJ3QgdHJ5LiBMZWF2ZQogICAgICAgICAgYXQgYnVpbHRpbi4KICAgICAgICAgIAogICBnZGksIGdkaTMyCiAgICAgICAgICBHcmFwaGljcyBEZXZpY2UgSW50ZXJmYWNlLiBObyBlZmZvcnQgaGFzIGJlZW4gbWFkZSBhdCB0cnlpbmcgdG8KICAgICAgICAgIHJ1biBuYXRpdmUgR0RJLiBMZWF2ZSBhdCBidWlsdGluLgogICAgICAgICAgCiAgIHVzZXIsIHVzZXIzMgogICAgICAgICAgV2luZG93IG1hbmFnZW1lbnQgYW5kIHN0YW5kYXJkIGNvbnRyb2xzLiBJdCB3YXMgcG9zc2libGUgdG8gdXNlCiAgICAgICAgICBXaW45NSdzIG5hdGl2ZSB2ZXJzaW9ucyBhdCBzb21lIHBvaW50IChpZiBhbGwgb3RoZXIgRExMcyB0aGF0CiAgICAgICAgICBkZXBlbmQgb24gaXQsIHN1Y2ggYXMgY29tY3RsMzIgYW5kIGNvbWRsZzMyLCB3ZXJlIGFsc28gcnVuCiAgICAgICAgICBuYXRpdmUpLiBIb3dldmVyLCB0aGlzIGlzIG5vIGxvbmdlciBwb3NzaWJsZSBhZnRlciB0aGUgQWRkcmVzcwogICAgICAgICAgU3BhY2UgU2VwYXJhdGlvbiwgc28gbGVhdmUgYXQgYnVpbHRpbi4KICAgICAgICAgIAogICBudGRsbAogICAgICAgICAgTlQga2VybmVsIEFQSS4gQWx0aG91Z2ggYmFkbHkgZG9jdW1lbnRlZCwgdGhlIG5hdGl2ZSB2ZXJzaW9uIG9mCiAgICAgICAgICB0aGlzIHdpbGwgbmV2ZXIgd29yay4gTGVhdmUgYXQgYnVpbHRpbi4KICAgICAgICAgIAogICB3MzJza3JubAogICAgICAgICAgV2luMzJzIChmb3IgV2luMy54KS4gTmF0aXZlIHZlcnNpb24gd2lsbCBwcm9iYWJseSBuZXZlciB3b3JrLgogICAgICAgICAgTGVhdmUgYXQgYnVpbHRpbi4KICAgICAgICAgIAogICB3b3czMgogICAgICAgICAgV2luMTYgc3VwcG9ydCBsaWJyYXJ5IGZvciBOVC4gTmF0aXZlIHZlcnNpb24gd2lsbCBwcm9iYWJseQogICAgICAgICAgbmV2ZXIgd29yay4gTGVhdmUgYXQgYnVpbHRpbi4KICAgICAgICAgIAogICBzeXN0ZW0KICAgICAgICAgIFdpbjE2IGtlcm5lbCBzdHVmZi4gV2lsbCBuZXZlciB3b3JrIG5hdGl2ZS4gTGVhdmUgYXQgYnVpbHRpbi4KICAgICAgICAgIAogICBkaXNwbGF5CiAgICAgICAgICBEaXNwbGF5IGRyaXZlci4gRGVmaW5pdGVseSBsZWF2ZSBhdCBidWlsdGluLgogICAgICAgICAgCiAgIHRvb2xoZWxwCiAgICAgICAgICBUb29sIGhlbHBlciByb3V0aW5lcy4gVGhpcyBpcyByYXJlbHkgYSBzb3VyY2Ugb2YgcHJvYmxlbXMuCiAgICAgICAgICBMZWF2ZSBhdCBidWlsdGluLgogICAgICAgICAgCiAgIHZlciwgdmVyc2lvbgogICAgICAgICAgVmVyc2lvbmluZy4gU2VsZG9tIHVzZWZ1bCB0byBtZXNzIHdpdGguCiAgICAgICAgICAKICAgYWR2YXBpMzIKICAgICAgICAgIFJlZ2lzdHJ5IGFuZCBzZWN1cml0eSBmZWF0dXJlcy4gVHJ5aW5nIHRoZSBuYXRpdmUgdmVyc2lvbiBvZgogICAgICAgICAgdGhpcyBtYXkgb3IgbWF5IG5vdCB3b3JrLgogICAgICAgICAgCiAgIGNvbW1kbGcsIGNvbWRsZzMyCiAgICAgICAgICBDb21tb24gRGlhbG9ncywgc3VjaCBhcyBjb2xvciBwaWNrZXIsIGZvbnQgZGlhbG9nLCBwcmludAogICAgICAgICAgZGlhbG9nLCBvcGVuL3NhdmUgZGlhbG9nLCBldGMuIEl0IGlzIHNhZmUgdG8gdHJ5IG5hdGl2ZS4KICAgICAgICAgIAogICBjb21tY3RybCwgY29tY3RsMzIKICAgICAgICAgIENvbW1vbiBDb250cm9scy4gVGhpcyBpcyB0b29sYmFycywgc3RhdHVzIGJhcnMsIGxpc3QgY29udHJvbHMsCiAgICAgICAgICB0aGUgd29ya3MuIEl0IGlzIHNhZmUgdG8gdHJ5IG5hdGl2ZS4KICAgICAgICAgIAogICBzaGVsbCwgc2hlbGwzMgogICAgICAgICAgU2hlbGwgaW50ZXJmYWNlIChkZXNrdG9wLCBmaWxlc3lzdGVtLCBldGMpLiBCZWluZyBvbmUgb2YgdGhlCiAgICAgICAgICBtb3N0IHVuZG9jdW1lbnRlZCBwaWVjZXMgb2YgV2luZG93cywgeW91IG1heSBoYXZlIGx1Y2sgd2l0aCB0aGUKICAgICAgICAgIG5hdGl2ZSB2ZXJzaW9uLCBzaG91bGQgeW91IG5lZWQgaXQuCiAgICAgICAgICAKICAgd2luc29jaywgd3NvY2szMgogICAgICAgICAgV2luZG93cyBTb2NrZXRzLiBUaGUgbmF0aXZlIHZlcnNpb24gd2lsbCBub3Qgd29yayB1bmRlciBXaW5lLAogICAgICAgICAgc28gbGVhdmUgYXQgYnVpbHRpbi4KICAgICAgICAgIAogICBpY21wCiAgICAgICAgICBJQ01QIHJvdXRpbmVzIGZvciB3c29jazMyLiBBcyB3aXRoIHdzb2NrMzIsIGxlYXZlIGF0IGJ1aWx0aW4uCiAgICAgICAgICAKICAgbXByCiAgICAgICAgICBUaGUgbmF0aXZlIHZlcnNpb24gbWF5IG5vdCB3b3JrIGR1ZSB0byB0aHVua2luZyBpc3N1ZXMuIExlYXZlCiAgICAgICAgICBhdCBidWlsdGluLgogICAgICAgICAgCiAgIGx6ZXhwYW5kLCBsejMyCiAgICAgICAgICBMZW1wZWwtWml2IGRlY29tcHJlc3Npb24uIFdpbmUncyBidWlsdGluIHZlcnNpb24gb3VnaHQgdG8gd29yawogICAgICAgICAgZmluZS4KICAgICAgICAgIAogICB3aW5hc3BpLCB3bmFzcGkzMgogICAgICAgICAgQWR2YW5jZWQgU0NTSSBQZXJpcGhlcmFsIEludGVyZmFjZS4gVGhlIG5hdGl2ZSB2ZXJzaW9uIHdpbGwKICAgICAgICAgIHByb2JhYmx5IG5ldmVyIHdvcmsuIExlYXZlIGF0IGJ1aWx0aW4uCiAgICAgICAgICAKICAgY3J0ZGxsCiAgICAgICAgICBDIFJ1bnRpbWUgbGlicmFyeS4gVGhlIG5hdGl2ZSB2ZXJzaW9uIHdpbGwgZWFzaWx5IHdvcmsgYmV0dGVyCiAgICAgICAgICB0aGFuIFdpbmUncyBvbiB0aGlzIG9uZS4KICAgICAgICAgIAogICB3aW5zcG9vbC5kcnYKICAgICAgICAgIFByaW50ZXIgc3Bvb2xlci4gWW91IGFyZSBub3QgbGlrZWx5IHRvIGhhdmUgbW9yZSBsdWNrIHdpdGggdGhlCiAgICAgICAgICBuYXRpdmUgdmVyc2lvbi4KICAgICAgICAgIAogICBkZHJhdwogICAgICAgICAgRGlyZWN0RHJhdy9EaXJlY3QzRC4gU2luY2UgV2luZSBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIERpcmVjdFgKICAgICAgICAgIEhBTCwgdGhlIG5hdGl2ZSB2ZXJzaW9uIHdpbGwgbm90IHdvcmsgYXQgdGhpcyB0aW1lLgogICAgICAgICAgCiAgIGRpbnB1dAogICAgICAgICAgRGlyZWN0SW5wdXQuIFJ1bm5pbmcgdGhpcyBuYXRpdmUgbWF5IG9yIG1heSBub3Qgd29yay4KICAgICAgICAgIAogICBkc291bmQKICAgICAgICAgIERpcmVjdFNvdW5kLiBJdCBtYXkgYmUgcG9zc2libGUgdG8gcnVuIHRoaXMgbmF0aXZlLCBidXQgZG9uJ3QKICAgICAgICAgIGNvdW50IG9uIGl0LgogICAgICAgICAgCiAgIGRwbGF5L2RwbGF5eAogICAgICAgICAgRGlyZWN0UGxheS4gTmF0aXZlIG91Z2h0IHRvIHdvcmsgYmVzdCBvbiB0aGlzLCBpZiBhdCBhbGwuCiAgICAgICAgICAKICAgbW1zeXN0ZW0sIHdpbm1tCiAgICAgICAgICBNdWx0aW1lZGlhIHN5c3RlbS4gVGhlIG5hdGl2ZSB2ZXJzaW9uIGlzIG5vdCBsaWtlbHkgdG8gd29yay4KICAgICAgICAgIExlYXZlIGF0IGJ1aWx0aW4uCiAgICAgICAgICAKICAgbXNhY20sIG1zYWNtMzIKICAgICAgICAgIEF1ZGlvIENvbXByZXNzaW9uIE1hbmFnZXIuIEJ1aWx0aW4gd29ya3MgYmVzdCwgaWYgeW91IHNldAogICAgICAgICAgbXNhY20uZHJ2IHRvIHRoZSBzYW1lLgogICAgICAgICAgCiAgIG1zdmlkZW8sIG1zdmZ3MzIKICAgICAgICAgIFZpZGVvIGZvciBXaW5kb3dzLiBJdCBpcyBzYWZlIChhbmQgcmVjb21tZW5kZWQpIHRvIHRyeSBuYXRpdmUuCiAgICAgICAgICAKICAgbWNpY2RhLmRydgogICAgICAgICAgQ0QgQXVkaW8gTUNJIGRyaXZlci4KICAgICAgICAgIAogICBtY2lzZXEuZHJ2CiAgICAgICAgICBNSURJIFNlcXVlbmNlciBNQ0kgZHJpdmVyICguTUlEIHBsYXliYWNrKS4KICAgICAgICAgIAogICBtY2l3YXZlLmRydgogICAgICAgICAgV2F2ZSBhdWRpbyBNQ0kgZHJpdmVyICguV0FWIHBsYXliYWNrKS4KICAgICAgICAgIAogICBtY2lhdmkuZHJ2CiAgICAgICAgICBBVkkgTUNJIGRyaXZlciAoLkFWSSB2aWRlbyBwbGF5YmFjaykuIEJlc3QgdG8gdXNlIG5hdGl2ZS4KICAgICAgICAgIAogICBtY2lhbmltLmRydgogICAgICAgICAgQW5pbWF0aW9uIE1DSSBkcml2ZXIuCiAgICAgICAgICAKICAgbXNhY20uZHJ2CiAgICAgICAgICBBdWRpbyBDb21wcmVzc2lvbiBNYW5hZ2VyLiBTZXQgdG8gc2FtZSBhcyBtc2FjbTMyLgogICAgICAgICAgCiAgIG1pZGltYXAuZHJ2CiAgICAgICAgICBNSURJIE1hcHBlci4KICAgICAgICAgIAogICB3cHJvY3MKICAgICAgICAgIFRoaXMgaXMgYSBwc2V1ZG8tRExMIHVzZWQgYnkgV2luZSBmb3IgdGh1bmtpbmcgcHVycG9zZXMuIEEKICAgICAgICAgIG5hdGl2ZSB2ZXJzaW9uIG9mIHRoaXMgZG9lc24ndCBleGlzdC4KICAgICAgICAgIAogICBIYXZlIGZ1bi4uLgogICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIE92ZSBL5XZlbgo=