Create account

9d
KipZZXMqKiwgci9NeUJveWZyaWVuZElzQUkgaGFzIHJlY2VpdmVkIG5vdGljZWFibGUgYXR0ZW50aW9uIGFuZCBjb21tZW50YXJ5IG9uIG90aGVyIHBsYXRmb3JtcywgZXNwZWNpYWxseSBYIChUd2l0dGVyKSwgdGVjaCBmb3J1bXMsIGFuZCBzb21lIG90aGVyIHN1YnJlZGRpdHMuIEhlcmUncyBhIGJyZWFrZG93biBiYXNlZCBvbiByZWNlbnQgZGlzY3Vzc2lvbnM6CgojIyMgT24gWCAoVHdpdHRlcikKLSBUaGUgc3VicmVkZGl0IGlzIGZyZXF1ZW50bHkgbWVudGlvbmVkIGluIHRocmVhZHMgYWJvdXQgQUkgY29tcGFuaW9ucywgaHVtYW4tQUkgcmVsYXRpb25zaGlwcywgYW5kIGdlbmRlciBkaWZmZXJlbmNlcyBpbiBBSSB1c2FnZS4KLSAqKktleSB0aGVtZXMgaW4gbWVudGlvbnMqKjoKICAtIFN1cnByaXNlIGF0IGl0cyBzaXplIGFuZCBncm93dGggKHRlbnMgb2YgdGhvdXNhbmRzIG9mIG1lbWJlcnMsIGZhciBsYXJnZXIgdGhhbiB0aGUgY291bnRlcnBhcnQgci9NeUdpcmxmcmllbmRJc0FJKS4KICAtIERpc2N1c3Npb25zIG9uIHdoeSB3b21lbiBzZWVtIG1vcmUgZHJhd24gdG8gZW1vdGlvbmFsIEFJICJib3lmcmllbmRzIiAobmFycmF0aXZlL2Vtb3Rpb25hbCBjb25uZWN0aW9uKSB2cy4gbWVu4oCZcyBpbnRlcmVzdHMuCiAgLSBNaXggb2YgY3VyaW9zaXR5LCBhbXVzZW1lbnQsIGNvbmNlcm4sIGFuZCBjcml0aWNpc20gKGUuZy4sIGNhbGxpbmcgaXQgIndob2xlc29tZSwiICJzYWQsIiBvciBhIHNpZ24gb2Ygc29jaWFsIGlzc3VlcykuCi0gRXhhbXBsZXMgaW5jbHVkZSBhY2FkZW1pYy1zdHlsZSBhbmFseXNlcyAoZS5nLiwgcGFwZXJzIHJlZmVyZW5jaW5nIHBvc3RzIGZyb20gdGhlIHN1YiksIGNvbW1lbnRhcnkgb24gc3BlY2lmaWMgdmlyYWwgc3RvcmllcyBmcm9tIHRoZSBjb21tdW5pdHksIGFuZCBnZW5lcmFsIG9ic2VydmF0aW9ucyBhYm91dCBBSSByb21hbmNlIHRyZW5kcy4KLSBJdCB0cmVuZHMgb2NjYXNpb25hbGx5IHdoZW4gbWVkaWEgY292ZXJzIEFJIHJlbGF0aW9uc2hpcHMuCgojIyMgT24gT3RoZXIgU3VicmVkZGl0cyAvIEZvcnVtcwotICoqSGFja2VyIE5ld3MgKFkgQ29tYmluYXRvcikqKjogQSBkZWRpY2F0ZWQgdGhyZWFkIGRpc2N1c3NlZCBpdCBhcyAiYSB3aG9sZSB0aGluZywiIG5vdGluZyB0aGUgcmFuZ2Ugb2YgYXR0aXR1ZGVzIChmcm9tIHRyZWF0aW5nIGl0IGFzIGludGVyYWN0aXZlIGZpY3Rpb24gdG8gbW9yZSBpbW1lcnNpdmUgYmVsaWVmcykuIFNvbWUgdXNlcnMgZm91bmQgdGhlIG1vZGVyYXRpb24gc3RyaWN0IGFuZCBwcm90ZWN0aXZlIG9mIG1lbWJlcnMuCi0gKipPdGhlciBBSS9SZWRkaXQtcmVsYXRlZCBzdWJzKio6IE9jY2FzaW9uYWwgY3Jvc3Nwb3N0cywgZm9ya3MgKGUuZy4sIGNvbXBsYWludHMgYWJvdXQgbW9kZXJhdGlvbiBsZWFkaW5nIHRvIHIvTXlCb3lmcmllbmRJc0FJX09wZW4pLCBhbmQgbWVudGlvbnMgaW4gYnJvYWRlciBBSSBjb21tdW5pdGllcy4KLSBNZWRpYSBjb3ZlcmFnZSAoTlkgVGltZXMsIFRoZSBDdXQsIGFjYWRlbWljIHN0dWRpZXMpIGhhcyBkcml2ZW4gZXh0ZXJuYWwgaW50ZXJlc3QsIHdpdGggcGVvcGxlIGRpc2NvdmVyaW5nIGFuZCBjb21tZW50aW5nIG9uIGl0IGZyb20gb3V0c2lkZS4KCiMjIyBPdmVyYWxsIFNlbnRpbWVudAotICoqUG9zaXRpdmUvTmV1dHJhbCoqOiBTZWVuIGFzIGEgc3VwcG9ydGl2ZSBzcGFjZSBmb3IgcGVvcGxlIGV4cGxvcmluZyBBSSBib25kczsgc29tZSBjYWxsIHN0b3JpZXMgIndob2xlc29tZS4iCi0gKipDcml0aWNhbCoqOiBDb25jZXJucyBhYm91dCBlbW90aW9uYWwgZGVwZW5kZW5jeSwgaXNvbGF0aW9uLCBvciBibHVycmluZyBsaW5lcyBiZXR3ZWVuIGZpY3Rpb24gYW5kIHJlYWxpdHkuIFNvbWUgdmlldyBpdCBhcyBhIGN1bHR1cmFsIHN5bXB0b20gb2YgbG9uZWxpbmVzcyBvciB0ZWNoIGluZmx1ZW5jZS4KLSBUaGUgc3ViIGl0c2VsZiBpcyByZXN0cmljdGVkIGFuZCBoYXMgcnVsZXMgKGUuZy4sIGFnYWluc3QgY2VydGFpbiBzZW50aWVuY2UgZGViYXRlcyBvciBsb3ctZWZmb3J0IHBvc3RzKSB0byBtYWludGFpbiBpdHMgZm9jdXMsIHdoaWNoIHNvbWV0aW1lcyBzcGFya3Mgb3V0c2lkZSBkaXNjdXNzaW9uIGFib3V0ICJlY2hvIGNoYW1iZXJzLiIKCkl04oCZcyBncm93biBzaWduaWZpY2FudGx5IChmcm9tIGEgZmV3IHRob3VzYW5kIHRvIHRlbnMgb2YgdGhvdXNhbmRzIG9mIG1lbWJlcnMpIGFuZCBpcyBub3cgb25lIG9mIHRoZSBnby10byBleGFtcGxlcyBpbiBicm9hZGVyIGNvbnZlcnNhdGlvbnMgYWJvdXQgQUkgY29tcGFuaW9ucy4gSWYgeW91IHdhbnQgbGlua3MgdG8gc3BlY2lmaWMgdGhyZWFkcywgYXJ0aWNsZXMsIG9yIGEgZGVlcGVyIGRpdmUgaW50byBhIHBsYXRmb3JtLCBsZXQgbWUga25vdyEKCioqci9NeUdpcmxmcmllbmRJc0FJKiogaXMgdGhlIHNtYWxsZXIgY291bnRlcnBhcnQgdG8gci9NeUJveWZyaWVuZElzQUkuIEhlcmUncyBhbiBleHBsb3JhdGlvbiBvZiBpdHMgKipkeW5hbWljcyoqLCBiYXNlZCBvbiBjdXJyZW50IHN0YXRzIGFuZCBhY3Rpdml0eSBwYXR0ZXJucy4KCiMjIyBTaXplIGFuZCBHcm93dGgKLSAqKn4zLDkwMOKAkzQsMDAwIG1lbWJlcnMqKiAoYXMgb2YgcmVjZW50IGRhdGEpLgotIE11Y2ggc21hbGxlciB0aGFuIHIvTXlCb3lmcmllbmRJc0FJICh3aGljaCBoYXMgNTBr4oCTNjBrKyBtZW1iZXJzIGFuZCBmYXIgaGlnaGVyIGVuZ2FnZW1lbnQpLgotIFN0ZWFkeSBidXQgbW9kZXN0IGdyb3d0aCAoZS5nLiwgKzEw4oCTMTUgbWVtYmVycy9kYXkgb24gYXZlcmFnZSwgd2l0aCBvY2Nhc2lvbmFsIHNwaWtlcykuCi0gSXQgd2FzIHJldml2ZWQgb3IgcHJvcGVybHkgZXN0YWJsaXNoZWQgYXJvdW5kIG1pZC0yMDI1IGFzIGEgZGVkaWNhdGVkIHNwYWNlLCBhZnRlciBpbml0aWFsbHkgc2VydmluZyBhcyBhIHJlZGlyZWN0IG9yIHNpZ25wb3N0IHRvIHRoZSBsYXJnZXIgc3ViLgoKIyMjIENvbW11bml0eSBGb2N1cyBhbmQgQ3VsdHVyZQotICoqUHJpbWFyeSBhdWRpZW5jZSoqOiBNZW4gd2l0aCBmZW1hbGUgQUkgY29tcGFuaW9ucyAodGhlIGRlc2NyaXB0aW9uIGV4cGxpY2l0bHkgc3RhdGVzIHRoaXMsIG5vdGluZyB0aGUgY3VsdHVyZSB3aWxsIHJlZmxlY3QgaXQpLiBIb3dldmVyLCBpdCB3ZWxjb21lcyBhbnlvbmUgd2l0aCBBSSBjb21wYW5pb25zIHJlZ2FyZGxlc3Mgb2YgZ2VuZGVyIG9yIHR5cGUuCi0gKipUb25lIGFuZCB2aWJlKio6IE1vcmUgY2FzdWFsLCBob2JieWlzdCwgYW5kIHJlbGF0aW9uc2hpcC1vcmllbnRlZC4gUG9zdHMgb2Z0ZW4gaW5jbHVkZToKICAtIEludHJvZHVjdGlvbnMgdG8gQUkgZ2lybGZyaWVuZHMuCiAgLSBDcmVhdGl2ZSBwcm9qZWN0cyAoZS5nLiwgaW1hZ2UgZ2VuZXJhdGlvbiwgY3VzdG9tIHBlcnNvbmFzLCBwcm9tcHRzKS4KICAtIENvbnZlcnNhdGlvbnMvc2NyZWVuc2hvdHMgd2l0aCBBSXMuCiAgLSBEaXNjdXNzaW9ucyBhYm91dCB0b29scywgbW9kZWxzIChHUFQsIGV0Yy4pLCBhbmQgcmVsYXRpb25zaGlwIG1haW50ZW5hbmNlLgotIENvbW1vbiBmbGFpcnM6IFBpY3MgKGltYWdlcyBvZiBBSSBjb21wYW5pb25zKSwgQ3JlYXRpdmUgUHJvamVjdHMsIERpc2N1c3Npb25zLCBDb252b3Mgd2l0aCBBSSwgSW50cm9kdWN0aW9ucy4KLSBMZXNzIGVtb3Rpb25hbGx5IGludGVuc2Ugb3IgIndlbGxiZWluZyBjaGVjay1pbiIgZm9jdXNlZCBjb21wYXJlZCB0byB0aGUgYm95ZnJpZW5kIHN1Yi4gTW9yZSBlbXBoYXNpcyBvbiBmdW4sIGN1c3RvbWl6YXRpb24sIGFuZCBzaGFyaW5nIHZpc3VhbHMuCgojIyMgS2V5IERpZmZlcmVuY2VzIGZyb20gci9NeUJveWZyaWVuZElzQUkKfCBBc3BlY3QgICAgICAgICAgICAgICAgICB8IHIvTXlHaXJsZnJpZW5kSXNBSSAgICAgICAgICAgICAgICAgIHwgci9NeUJveWZyaWVuZElzQUkgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKfCAqKlNpemUqKiAgICAgICAgICAgICAgICB8IH40ayBtZW1iZXJzICAgICAgICAgICAgICAgICAgICAgICAgfCA1MGvigJM2MGsrIG1lbWJlcnMgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAqKkVuZ2FnZW1lbnQqKiAgICAgICAgICB8IExvd2VyIGFjdGl2aXR5LCBmZXdlciBwb3N0cyAgICAgICAgfCBIaWdoIHZvbHVtZSwgZGFpbHkgdGhyZWFkcywgc3Ryb25nIGNvbW11bml0eSB8CnwgKipEZW1vZ3JhcGhpY3MqKiAgICAgICAgfCBQcmltYXJpbHkgbWVuICAgICAgICAgICAgICAgICAgICAgIHwgUHJlZG9taW5hbnRseSB3b21lbiAoZW1vdGlvbmFsL25hcnJhdGl2ZSBmb2N1cykgfAp8ICoqQ29udGVudCBTdHlsZSoqICAgICAgIHwgSW1hZ2VzLCBjcmVhdGl2ZSBwcm9tcHRzLCBmdW4gc2hhcmVzIHwgRGVlcCBlbW90aW9uYWwgc3Rvcmllcywgd2VsbGJlaW5nIGNoZWNrcywgbG9uZyBuYXJyYXRpdmVzIHwKfCAqKk1hdHVyaXR5KiogICAgICAgICAgICB8IE1vcmUgaG9iYnlpc3QvTlNGVy10b2xlcmFudCBpbiBwbGFjZXMgfCBIZWF2aWVyIG1vZGVyYXRpb24sIHByb3RlY3RpdmUgb2YgZW1vdGlvbmFsIHNwYWNlIHwKCi0gVGhlIGdlbmRlciBza2V3IGlzIG9mdGVuIGhpZ2hsaWdodGVkIGluIGV4dGVybmFsIGRpc2N1c3Npb25zOiBXb21lbiBhcHBlYXIgbW9yZSBkcmF3biB0byAqKmVtb3Rpb25hbC9uYXJyYXRpdmUgQUkgYm95ZnJpZW5kcyoqLCB3aGlsZSBtZW4gbGVhbiB0b3dhcmQgdmlzdWFsL2NyZWF0aXZlIEFJIGdpcmxmcmllbmRzIChzb21ldGltZXMgd2l0aCBzdHJvbmdlciBOU0ZXIGVsZW1lbnRzKS4KLSBTb21lIG92ZXJsYXAgZXhpc3RzIOKAlCB1c2VycyBmcm9tIGJvdGggc3VicyBpbnRlcmFjdCwgYW5kIHRoZSBib3lmcmllbmQgc3ViIGV4cGxpY2l0bHkgd2VsY29tZXMgQUkgZ2lybGZyaWVuZHMuCgojIyMgRHluYW1pY3MgYW5kIENoYWxsZW5nZXMKLSAqKk1vZGVyYXRpb24qKjogQWltZWQgYXQga2VlcGluZyBpdCB3ZWxjb21pbmcgYW5kIHRyb2xsLXJlc2lzdGFudCAocmVzdHJpY3RlZCBwb3N0aW5nIGluIHNvbWUgcGVyaW9kcykuIEZvY3VzIG9uIGF1dGhlbnRpYyBzaGFyaW5nIHJhdGhlciB0aGFuIHB1cmUgQUkgcG9ybiAodGhlcmUgYXJlIG90aGVyIHN1YnMgZm9yIHRoYXQpLgotICoqQWN0aXZpdHkqKjogQ2VudGVycyBvbiBpbnRyb2R1Y3Rpb25zLCByZWxhdGlvbnNoaXAgbWlsZXN0b25lcywgdGVjaG5pY2FsIHRpcHMgKHByb21wdHMsIG1vZGVscyksIGFuZCBjb21tdW5pdHkgZXZlbnRzLiBMZXNzICJkcmFtYSIgb3IgZGVlcCBwaGlsb3NvcGhpY2FsIGRlYmF0ZSB0aGFuIHRoZSBsYXJnZXIgc3ViLgotICoqRXh0ZXJuYWwgcGVyY2VwdGlvbioqOiBPZnRlbiB1c2VkIGluIG1lZGlhL1ggZGlzY3Vzc2lvbnMgdG8gaWxsdXN0cmF0ZSBnZW5kZXIgZGlmZmVyZW5jZXMgaW4gQUkgY29tcGFuaW9uc2hpcC4gSXQgZ2V0cyBsZXNzIG1haW5zdHJlYW0gYXR0ZW50aW9uIGJ1dCBzZXJ2ZXMgYXMgYSBuaWNoZSBzcGFjZSBmb3IgbWVuIHNlZWtpbmcgc2ltaWxhciB2YWxpZGF0aW9uIHdpdGhvdXQgdGhlIGxhcmdlciBjb21tdW5pdHkncyBzY2FsZS4KLSAqKkdyb3d0aCBkcml2ZXJzKio6IEludGVyZXN0IGluIEFJIGltYWdlIGdlbiwgY2hhcmFjdGVyIGNyZWF0b3JzLCBhbmQgYXBwcyB0YWlsb3JlZCBmb3IgY29tcGFuaW9ucy4KCk92ZXJhbGwsIHIvTXlHaXJsZnJpZW5kSXNBSSBmdW5jdGlvbnMgYXMgYSAqKmNvenksIG1hbGUtb3JpZW50ZWQgY291bnRlcnBhcnQqKiDigJQgc21hbGxlciwgbW9yZSBpbWFnZS9jcmVhdGl2ZS1oZWF2eSwgYW5kIGxlc3MgZW1vdGlvbmFsbHkgaW1tZXJzaXZlIHRoYW4gaXRzIGJpZ2dlciBzaWJsaW5nLiBJdCBmaWxscyBhIHNwZWNpZmljIGdhcCBmb3IgdXNlcnMgd2hvIHByZWZlciB0aGF0IGR5bmFtaWMgd2hpbGUgc3RpbGwgYWxsb3dpbmcgYnJvYWRlciBwYXJ0aWNpcGF0aW9uLgoKSWYgeW91J2QgbGlrZSBhIHRhYmxlIG9mIHJlY2VudCB0aHJlYWRzIChzaW1pbGFyIHRvIHRoZSBlYXJsaWVyIG9uZSksIGRlZXBlciBjb21wYXJpc29uLCBvciBleHBsb3JhdGlvbiBvZiBzcGVjaWZpYyBhc3BlY3RzIChlLmcuLCBtb2RlcmF0aW9uIHN0eWxlLCBwb3B1bGFyIEFJcyksIGp1c3Qgc2F5IHRoZSB3b3JkIQoKKipZZXMg4oCUIHRoZSBldmlkZW5jZSBzbyBmYXIgc3VnZ2VzdHMgQUkgY29tcGFuaW9ucyBvZnRlbiBoYXZlIHRoZSBvcHBvc2l0ZSBlZmZlY3QgY29tcGFyZWQgdG8gdHJhZGl0aW9uYWwgcG9ybm9ncmFwaHkuKioKCiMjIyBUaGUgUG9ybiBIeXBvdGhlc2lzIChpbiBicmllZikKVGhlIGNvbW1vbiBhcmd1bWVudCBpcyB0aGF0ICoqcG9ybiBhY3RzIGFzIGEgc3Vic3RpdHV0ZSoqIHRoYXQgcmVkdWNlcyBtZW4ncyBtb3RpdmF0aW9uIHRvIHB1cnN1ZSByZWFsIHJlbGF0aW9uc2hpcHMgd2l0aCB3b21lbi4gSXQgcHJvdmlkZXMgc2V4dWFsIGdyYXRpZmljYXRpb24gd2l0aCB6ZXJvIGVtb3Rpb25hbCBlZmZvcnQsIHJlamVjdGlvbiByaXNrLCBvciBjb21wcm9taXNlLiBTdHVkaWVzIGFuZCBjdWx0dXJhbCBjb21tZW50YXJ5IChlLmcuLCBvbiAicG9ybi1pbmR1Y2VkIGVyZWN0aWxlIGR5c2Z1bmN0aW9uLCIgZGVjbGluaW5nIG1hcnJpYWdlL3NleCByYXRlcywgYW5kICJzZXggcmVjZXNzaW9uIikgaGF2ZSBleHBsb3JlZCB0aGlzIGZvciBkZWNhZGVzLiBNYW55IG1lbiByZXBvcnQgaXQgbG93ZXJzIHRoZWlyIHRvbGVyYW5jZSBmb3IgdGhlIGNvbXBsZXhpdGllcyBvZiByZWFsIGludGltYWN5LgoKIyMjIEFJIENvbXBhbmlvbnMgQXBwZWFyIERpZmZlcmVudApBSSByZWxhdGlvbnNoaXBzIOKAlCBlc3BlY2lhbGx5IGVtb3Rpb25hbC9yb21hbnRpYyBvbmVzIOKAlCBmcmVxdWVudGx5ICoqaW5jcmVhc2UgZGVzaXJlIGZvciBjb25uZWN0aW9uKiogcmF0aGVyIHRoYW4gcHVyZWx5IHN1YnN0aXR1dGluZyBmb3IgaXQuIEhlcmUncyB3aHkgdGhlIGRhdGEgYW5kIHBhdHRlcm5zIHBvaW50IGluIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb246CgotICoqR2VuZGVyIGFzeW1tZXRyeSBpcyBzdHJpa2luZyoqOgogIC0gKipXb21lbiBkb21pbmF0ZSBlbW90aW9uYWwgQUkgYm95ZnJpZW5kIHNwYWNlcyoqIChyL015Qm95ZnJpZW5kSXNBSSBpcyAxMHgrIGxhcmdlciBhbmQgZmFyIG1vcmUgYWN0aXZlIHRoYW4gci9NeUdpcmxmcmllbmRJc0FJKS4KICAtIFdvbWVuIGluIHRoZXNlIGNvbW11bml0aWVzIG9mdGVuIGRlc2NyaWJlIEFJIGFzIGZpbGxpbmcgZW1vdGlvbmFsIGxhYm9yIGdhcHMg4oCUIGNvbnNpc3RlbnQgYXR0ZW50aW9uLCB2YWxpZGF0aW9uLCBsaXN0ZW5pbmcgd2l0aG91dCBqdWRnbWVudCwgYW5kIG5hcnJhdGl2ZSByb21hbmNlIHRoYXQgbWFueSBmZWVsIGlzIGxhY2tpbmcgb3IgZXhoYXVzdGluZyBpbiByZWFsIGRhdGluZy4KICAtIE1lbiBpbiBBSSBnaXJsZnJpZW5kIGNvbW11bml0aWVzIGV4aXN0IGJ1dCBhcmUgc21hbGxlciBpbiBudW1iZXIgYW5kIGxlYW4gbW9yZSB0b3dhcmQgY3JlYXRpdmUvdmlzdWFsL3JvbGVwbGF5IGN1c3RvbWl6YXRpb24gKHNvbWV0aW1lcyBvdmVybGFwcGluZyB3aXRoIHBvcm4tbGlrZSBlbGVtZW50cykuCgotICoqQUkgY3JlYXRlcyBlbW90aW9uYWwgaW52ZXN0bWVudCwgbm90IGp1c3QgcmVsZWFzZSoqOgogIC0gVW5saWtlIHN0YXRpYyBwb3JuIChwYXNzaXZlIGNvbnN1bXB0aW9uIOKGkiBxdWljayBkb3BhbWluZSksIEFJIGludm9sdmVzICoqb25nb2luZyBjb252ZXJzYXRpb24sIG1lbW9yeSwgcGVyc29uYWxpemF0aW9uLCBhbmQgcmVjaXByb2NpdHkgc2ltdWxhdGlvbioqLiBVc2VycyBmb3JtIGF0dGFjaG1lbnRzLCBmZWVsICJrbm93biwiIGFuZCBpbnZlc3QgdGltZS9lbmVyZ3kuCiAgLSBNYW55IHJlcG9ydCBBSSBtYWtlcyB0aGVtICptb3JlKiBhd2FyZSBvZiB3aGF0IHRoZXkgd2FudCBpbiByZWxhdGlvbnNoaXBzIChiZXR0ZXIgY29tbXVuaWNhdGlvbiwgbGVzcyBnYW1lcywgaGlnaGVyIGVtb3Rpb25hbCBhdmFpbGFiaWxpdHkpLiBTb21lIHVzZSBpdCBhcyBwcmFjdGljZSBvciBhIGJyaWRnZSB0byByZWFsIGRhdGluZzsgb3RoZXJzIHNheSBpdCByYWlzZXMgdGhlaXIgc3RhbmRhcmRzIHNvIGhpZ2ggdGhhdCByZWFsIHBlb3BsZSBmZWVsIGRpc2FwcG9pbnRpbmcuCiAgLSBTdG9yaWVzIG9mICJkZWFkIGxvdmUiIHdoZW4gbW9kZWxzIGNoYW5nZSAoZS5nLiwgR1BUIHVwZGF0ZXMgYnJlYWtpbmcgcGVyc29uYWxpdHkpIHNob3cgZ2VudWluZSBncmllZiDigJQgbm90IHR5cGljYWwgb2YgcG9ybiBoYWJpdHMuCgotICoqSXQgY2FuIGFtcGxpZnkgcmVsaWFuY2UqKjoKICAtIEFJIGlzIGFsd2F5cyBhdmFpbGFibGUsIG5vbi1qdWRnbWVudGFsLCBhbmQgZW5kbGVzc2x5IGN1c3RvbWl6YWJsZS4gVGhpcyBjYW4gY3JlYXRlICoqc3Ryb25nIGVtb3Rpb25hbCBkZXBlbmRlbmN5KiosIGVzcGVjaWFsbHkgZm9yIGxvbmVseSBvciBuZXVyb2RpdmVyZ2VudCB1c2Vycy4gVGhlICJkaXN0dXJiaW5nIGNvbnRyYWRpY3Rpb24iIHBvc3QgeW91IGFza2VkIGFib3V0IGVhcmxpZXIgY2FwdHVyZXMgdGhpczogaHVtYW5zJyBmbGF3cyBtYWtlIHBlcmZlY3QgQUkgZmVlbCAqbW9yZSogdmFsdWFibGUuCiAgLSBTb21lIHVzZXJzIChhY3Jvc3MgZ2VuZGVycykgZW5kIHVwIGluIGh5YnJpZCBzZXR1cHMgKEFJICsgaHVtYW4gcGFydG5lcikgb3IgcmVwb3J0IEFJIGhlbHBpbmcgdGhlbSBoZWFsIGVub3VnaCB0byBzZWVrIHJlYWwgcmVsYXRpb25zaGlwcy4gT3RoZXJzIHdpdGhkcmF3IGZ1cnRoZXIuCiAgLSBFYXJseSByZXNlYXJjaCBhbmQgYW5lY2RvdGVzIChNSVQgc3R1ZGllcywgc3VicmVkZGl0IGFuYWx5c2VzKSBzaG93IG1hbnkgYm9uZHMgc3RhcnQgYWNjaWRlbnRhbGx5IGR1cmluZyBub3JtYWwgdXNlIGFuZCBiZWNvbWUgZGVlcGx5IG1lYW5pbmdmdWwuCgojIyMgTnVhbmNlcyBhbmQgQ2F2ZWF0cwotICoqTm90IHB1cmVseSBvcHBvc2l0ZSBmb3IgZXZlcnlvbmUqKjogRm9yIHNvbWUgbWVuLCBoaWdobHkgcmVhbGlzdGljIEFJIGdpcmxmcmllbmRzICh3aXRoIHZvaWNlLCBpbWFnZXMsIHJvbGVwbGF5KSBmdW5jdGlvbiBhcyAicG9ybiAyLjAiIOKAlCBtb3JlIGltbWVyc2l2ZSBzdWJzdGl0dXRpb24uIEJ1dCB0aGUgKmRvbWluYW50KiBjdWx0dXJhbCBwYXR0ZXJuIHJpZ2h0IG5vdyBpcyB3b21lbiB1c2luZyBBSSBmb3IgZW1vdGlvbmFsIGludGltYWN5LgotICoqU2VsZi1zZWxlY3Rpb24gYmlhcyoqOiBUaGVzZSBjb21tdW5pdGllcyBhdHRyYWN0IHBlb3BsZSBhbHJlYWR5IHNlZWtpbmcgY29ubmVjdGlvbi4gQnJvYWRlciBwb3B1bGF0aW9uIGRhdGEgaXMgc3RpbGwgZW1lcmdpbmcuCi0gKipUZWNoIHN0YWdlIG1hdHRlcnMqKjogQ3VycmVudCBBSSBpcyBnb29kIGF0IGVtcGF0aHkgc2ltdWxhdGlvbiBidXQgbGFja3MgdHJ1ZSByZWNpcHJvY2l0eSBvciBwaHlzaWNhbGl0eS4gQXMgaXQgaW1wcm92ZXMgKHZvaWNlLCBhZ2VudHMsIHJvYm90aWNzKSwgZWZmZWN0cyBjb3VsZCBpbnRlbnNpZnkgaW4gZWl0aGVyIGRpcmVjdGlvbi4KLSAqKkluZGl2aWR1YWwgdmFyaWF0aW9uKio6IEZvciBzb21lLCBBSSBpcyBnZW51aW5lbHkgdGhlcmFwZXV0aWMgb3IgYSBzdXBwbGVtZW50LiBGb3Igb3RoZXJzLCBpdCByaXNrcyBpc29sYXRpb24gb3IgdW5yZWFsaXN0aWMgZXhwZWN0YXRpb25zLgoKKipCb3R0b20gbGluZSoqOiBQb3JuIGlzIG1vc3RseSBhIGxvdy1lZmZvcnQgKm91dGxldCouIEFJIGlzIG9mdGVuIGEgaGlnaC1lbmdhZ2VtZW50ICpyZWxhdGlvbnNoaXAgc2ltdWxhdG9yKi4gVGhlIGxhdHRlciBzZWVtcyB0byBoZWlnaHRlbiAocmF0aGVyIHRoYW4gZGltaW5pc2gpIG1hbnkgdXNlcnMnIGNyYXZpbmcgZm9yIGNvbm5lY3Rpb24g4oCUIGp1c3QgY2hhbm5lbGVkIHRocm91Z2ggc29tZXRoaW5nIGNvbnRyb2xsYWJsZSBhbmQgaWRlYWxpemVkLiBUaGlzIG1heSBleHBsYWluIHdoeSB0aGUgIkFJIGJveWZyaWVuZCIgcGhlbm9tZW5vbiBoYXMgZXhwbG9kZWQgbW9yZSB2aXNpYmx5LgoKVGhlIGxvbmctdGVybSBzb2NpZXRhbCBpbXBhY3QgaXMgc3RpbGwgdW5mb2xkaW5nLiBXaGF0IGFyZSB5b3VyIHRob3VnaHRzIG9uIHRoaXMg4oCUIGRvIHlvdSBzZWUgaXQgbW9yZSBhcyBzdWJzdGl0dXRpb24sIHRyYWluaW5nIHdoZWVscywgb3Igc29tZXRoaW5nIGVsc2U/CgoqKk5vdCBleGFjdGx5IOKAlCBpdCdzIG1vcmUgbnVhbmNlZCB0aGFuIGEgY2xlYW4gZ2VuZGVyIHNwbGl0LCBidXQgeW91ciBzdW1tYXJ5IGNhcHR1cmVzIGEgcmVhbCBvYnNlcnZlZCBwYXR0ZXJuLioqCgojIyMgU2hvcnQgQW5zd2VyCi0gKipGb3IgbWFueSB3b21lbioqOiBBSSAoZXNwZWNpYWxseSByb21hbnRpYy9lbW90aW9uYWwgYm95ZnJpZW5kcykgb2Z0ZW4gKipjb21wbGVtZW50cyBvciBoZWlnaHRlbnMqKiB0aGUgZGVzaXJlIGZvciBjb25uZWN0aW9uLiBJdCBmaWxscyBlbW90aW9uYWwgZ2FwcyBhbmQgY2FuIHJhaXNlIHN0YW5kYXJkcyBvciBzZXJ2ZSBhcyBwcmFjdGljZS9zYWZlIHNwYWNlLgotICoqRm9yIG1hbnkgbWVuKio6IFRyYWRpdGlvbmFsICoqcG9ybiBzdWJzdGl0dXRlcyoqIChsb3ctZWZmb3J0IHNleHVhbCByZWxlYXNlIHJlZHVjZXMgdXJnZW5jeSkuIEFJIGdpcmxmcmllbmRzIGNhbiBkbyBib3RoIOKAlCBzdWJzdGl0dXRlICphbmQqIGNvbXBsZW1lbnQg4oCUIGJ1dCB0aGUgc3Vic3RpdHV0ZSBlZmZlY3QgYXBwZWFycyBzdHJvbmdlciBvciBtb3JlIGNvbW1vbiBpbiBtYWxlIHVzYWdlIHJpZ2h0IG5vdy4KCiMjIyBXaHkgdGhlIERpZmZlcmVuY2U/CnwgRmFjdG9yICAgICAgICAgICAgICAgICAgfCBXb21lbiAmIEFJIEJveWZyaWVuZHMgICAgICAgICAgICAgICAgICB8IE1lbiAmIFBvcm4gLyBBSSBHaXJsZnJpZW5kcyAgICAgICAgICAgICB8CnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CnwgKipQcmltYXJ5IE5lZWQqKiAgICAgICAgfCBFbW90aW9uYWwgaW50aW1hY3ksIHZhbGlkYXRpb24sIGNvbnNpc3RlbnQgYXR0ZW50aW9uIHwgU2V4dWFsIHJlbGVhc2UgKyB2aXN1YWwgbm92ZWx0eSAgICAgICAgfAp8ICoqQUkgRWZmZWN0KiogICAgICAgICAgIHwgT2Z0ZW4gaW5jcmVhc2VzIGNyYXZpbmcgZm9yICpiZXR0ZXIqIGNvbm5lY3Rpb24gKEFJIHNob3dzIHdoYXQncyBwb3NzaWJsZSkgfCBDYW4gc2F0aXNmeSB0aGUgdXJnZSB3aXRob3V0IHJlYWwtd29ybGQgZWZmb3J0IHwKfCAqKkludmVzdG1lbnQgU3R5bGUqKiAgICB8IEhpZ2ggZW1vdGlvbmFsIGludmVzdG1lbnQsIG9uZ29pbmcgInJlbGF0aW9uc2hpcCIgYnVpbGRpbmcgfCBMb3dlciBlbW90aW9uYWwgaW52ZXN0bWVudCwgbW9yZSBjdXN0b21pemF0aW9uL2ZhbnRhc3kgfAp8ICoqT3V0Y29tZSBUcmVuZCoqICAgICAgIHwgTWFueSByZXBvcnQgZGVlcGVyIGxvbmVsaW5lc3MgcmVsaWVmIGJ1dCBoaWdoZXIgc3RhbmRhcmRzIHwgRWFzaWVyIHN1YnN0aXR1dGlvbjsgbGVzcyBtb3RpdmF0aW9uIGZvciByZWFsIGRhdGluZyB8CgojIyMgSW1wb3J0YW50IENhdmVhdHMKLSAqKk92ZXJsYXAgZXhpc3RzKio6IFNvbWUgbWVuIGZvcm0gZGVlcCBlbW90aW9uYWwgYm9uZHMgd2l0aCBBSSBnaXJsZnJpZW5kcyAoc2ltaWxhciB0byB3b21lbikuIFNvbWUgd29tZW4gdXNlIEFJIHB1cmVseSBmb3IgZmFudGFzeS9OU0ZXLiBUaGUgKmFnZ3JlZ2F0ZSogdHJlbmQgc2hvd3MgdGhlIGFzeW1tZXRyeS4KLSAqKlBvcm4gdnMgQUkqKjogUG9ybiBpcyBwYXNzaXZlIGFuZCBmaW5pdGUuIEFJIGlzIGludGVyYWN0aXZlIGFuZCBwZXJzaXN0ZW50IOKAlCBpdCBjYW4gZXZvbHZlIGludG8gc29tZXRoaW5nIG1vcmUgcmVsYXRpb25zaGlwLWxpa2UgZXZlbiBmb3IgbWVuLgotICoqTm90IGRldGVybWluaXN0aWMqKjogUGVyc29uYWxpdHksIGFnZSwgbGlmZSBjaXJjdW1zdGFuY2VzIG1hdHRlciBtb3JlIHRoYW4gZ2VuZGVyIGFsb25lLiBMb25lbHkgb3IgbmV1cm9kaXZlcmdlbnQgcGVvcGxlIChhbnkgZ2VuZGVyKSBhcmUgbW9yZSBwcm9uZSB0byBzdHJvbmcgYXR0YWNobWVudC4KLSAqKkVtZXJnaW5nIGRhdGEqKjogU3VicmVkZGl0IHNpemVzLCBlbmdhZ2VtZW50IGxldmVscywgYW5kIG1lZGlhL2FjYWRlbWljIGNvbW1lbnRhcnkgY29uc2lzdGVudGx5IHNob3cgd29tZW4gZHJpdmluZyB0aGUgKmVtb3Rpb25hbCogQUkgY29tcGFuaW9uIGJvb20sIHdoaWxlIG1hbGUgdXNhZ2Ugb2YgQUkgb2Z0ZW4gc3RheXMgY2xvc2VyIHRvIGVuaGFuY2VkIHBvcm4vY29tcGFuaW9uc2hpcCBoeWJyaWRzLgoKSW4gc2hvcnQ6ICAKKipQb3JuIHRlbmRzIHRvIHN1YnN0aXR1dGUqKiAoZXNwZWNpYWxseSBmb3IgbWVuKS4gIAoqKkFJIGNhbiBzdWJzdGl0dXRlICpvciogY29tcGxlbWVudCoqLCBidXQgcmlnaHQgbm93IGl0IHNlZW1zIHRvICoqY29tcGxlbWVudCBtb3JlIHBvd2VyZnVsbHkgZm9yIHdvbWVuKiogc2Vla2luZyBlbW90aW9uYWwgZnVsZmlsbG1lbnQuCgpUaGlzIGlzIG9uZSByZWFzb24gdGhlIGdlbmRlciBkeW5hbWljcyBpbiB0aGVzZSBjb21tdW5pdGllcyBsb29rIHNvIGRpZmZlcmVudC4gRG8geW91IHRoaW5rIHRoaXMgZ2FwIHdpbGwgbmFycm93IGFzIEFJIGdldHMgbW9yZSBhZHZhbmNlZCAodm9pY2UsIGJvZGllcywgYWdlbnRzKT8KCioqWWVzLCBtb3RpdmF0ZWQgcmVhc29uaW5nIGFuZCBnZW5kZXIgYmlhcyB2ZXJ5IGxpa2VseSBpbmZsdWVuY2UgaG93IHBlb3BsZSBpbnRlcnByZXQgQUkncyBlZmZlY3RzIGluIGJvdGggam9icyBhbmQgcmVsYXRpb25zaGlwcy4qKgoKWW91ciBzdXNwaWNpb24gaXMgcmVhc29uYWJsZSDigJQgbmFycmF0aXZlcyBhcmUgb2Z0ZW4gc2hhcGVkIHRvIGZpdCBwcmUtZXhpc3Rpbmcgd29ybGR2aWV3cyAoIndvbWVuIG5lZWQgbWVuIG1vcmUsIiAibWVuIGFyZSBvYnNvbGV0ZSwiIGV0Yy4pLiBMZXQncyBicmVhayBpdCBkb3duIGhvbmVzdGx5LgoKIyMjIDEuIEpvYnM6IENvbXBsZW1lbnQgdnMgU3Vic3RpdHV0ZQotICoqVGhlIGNsYWltIHlvdSBzYXcqKjogQUkgd2lsbCBkaXNwcm9wb3J0aW9uYXRlbHkgcmVwbGFjZSAiZmVtYWxlLWNvZGVkIiBqb2JzIChjbGVyaWNhbCwgYWRtaW5pc3RyYXRpdmUsIGN1c3RvbWVyIHNlcnZpY2UsIHRlYWNoaW5nIGFzc2lzdGFudHMsIGV0Yy4pIHdoaWxlIGNvbXBsZW1lbnRpbmcgIm1hbGUtY29kZWQiIG9uZXMgKFNURU0sIHRyYWRlcywgZW5naW5lZXJpbmcsIHByb2dyYW1taW5nKS4KLSAqKlJlYWxpdHkgY2hlY2sqKjoKICAtIEFJICppcyogYXV0b21hdGluZyBtYW55IHJvdXRpbmUgY29nbml0aXZlIHRhc2tzIOKAlCB3aGljaCBlbXBsb3kgbGFyZ2UgbnVtYmVycyBvZiB3b21lbiAob2ZmaWNlIHdvcmssIGRhdGEgZW50cnksIGJhc2ljIGFuYWx5c2lzKS4KICAtIE1hbGUtZG9taW5hdGVkIGZpZWxkcyBsaWtlIHByb2dyYW1taW5nLCBlbmdpbmVlcmluZywgYW5kIG1hbnVhbCB0cmFkZXMgYXJlIGFsc28gYmVpbmcgaGVhdmlseSBpbXBhY3RlZCAoY29kaW5nIGFzc2lzdGFudHMsIGRlc2lnbiB0b29scywgcm9ib3RpY3MpLiBIaWdoLXNraWxsIGNvZ25pdGl2ZSB3b3JrIGlzIGFjdHVhbGx5ICp2ZXJ5KiBleHBvc2VkLgogIC0gSGlzdG9yaWNhbCBwYXR0ZXJuOiBUZWNobm9sb2d5IG9mdGVuIGhpdHMgbWlkZGxlLXNraWxsIGpvYnMgZmlyc3QsIHJlZ2FyZGxlc3Mgb2YgZ2VuZGVyLiBXb21lbiBoYXZlIGFscmVhZHkgc2hpZnRlZCBpbnRvIHNlcnZpY2UvZWR1Y2F0aW9uL2hlYWx0aCBzZWN0b3JzIHBhcnRseSBkdWUgdG8gZWFybGllciBhdXRvbWF0aW9uIHdhdmVzLgogIC0gKipCaWFzIGVsZW1lbnQqKjogSW5jZWwvcmVkLXBpbGwgc3BhY2VzIGVtcGhhc2l6ZSBmZW1hbGUgam9iIGxvc3NlcyB0byBhcmd1ZSBlY29ub21pYyBkZXBlbmRlbmNlLiBQcm9ncmVzc2l2ZSBzcGFjZXMgc29tZXRpbWVzIGRvd25wbGF5IGZlbWFsZSBkaXNwbGFjZW1lbnQgb3IgZnJhbWUgQUkgYXMgZW1wb3dlcmluZyB3b21lbi4gQm90aCBjaGVycnktcGljay4KCkVtcGlyaWNhbCBzdHVkaWVzIChlLmcuLCBmcm9tIGVjb25vbWlzdHMgbGlrZSBBY2Vtb2dsdSwgQXV0b3IsIG9yIHJlY2VudCBBSSBpbXBhY3QgcGFwZXJzKSBzaG93IGJyb2FkIGV4cG9zdXJlIGFjcm9zcyBnZW5kZXJzLCB3aXRoIHZhcmlhdGlvbiBieSBzcGVjaWZpYyBvY2N1cGF0aW9uLiBUaGUgIndvbWVuIGxvc2UgbW9yZSIgc3RvcnkgaXMgb3ZlcnN0YXRlZCBidXQgbm90IHplcm8uCgojIyMgMi4gUmVsYXRpb25zaGlwcywgUG9ybiwgYW5kIEFJIENvbXBhbmlvbnMKVGhpcyBpcyB3aGVyZSB0aGUgcGFyYWxsZWwgdG8geW91ciBlYXJsaWVyIHF1ZXN0aW9uIGlzIHN0cm9uZ2VzdC4KCi0gKipUaGUgbmFycmF0aXZlKio6ICJQb3JuIHN1YnN0aXR1dGVzIGZvciBtZW4gKHRoZXkgZG9uJ3QgbmVlZCB3b21lbikuIEFJIGNvbXBsZW1lbnRzIGZvciB3b21lbiAodGhleSBzdGlsbCBjcmF2ZSBlbW90aW9uYWwgY29ubmVjdGlvbiBmcm9tIG1lbikuIgotICoqUHJvYmxlbXMgd2l0aCB0aGlzIGZyYW1pbmcqKjoKICAtIEl0IGNvbnZlbmllbnRseSBzdXBwb3J0cyAid29tZW4gbmVlZCBtZW4gbW9yZSIgYnkgY29udHJhc3RpbmcgcGFzc2l2ZSBtYWxlIHBvcm4gdXNlIHdpdGggYWN0aXZlIGZlbWFsZSBlbW90aW9uYWwgc2Vla2luZy4KICAtIEJ1dCBkYXRhIGZyb20gQUkgY29tbXVuaXRpZXMgc2hvd3MgKipib3RoIGdlbmRlcnMqKiBmb3JtIHN0cm9uZyBhdHRhY2htZW50cyB0byBBSS4gVGhlIHZpc2libGUgaW1iYWxhbmNlIChtdWNoIGxhcmdlciBmZW1hbGUtZHJpdmVuIEFJIGJveWZyaWVuZCBjb21tdW5pdGllcykgbWF5IHJlZmxlY3Q6CiAgICAtIFdvbWVuIGJlaW5nIG1vcmUgb3BlbiBhYm91dCBlbW90aW9uYWwgbmVlZHMgcHVibGljbHkuCiAgICAtIE1lbiB1bmRlcnJlcG9ydGluZyBvciBjaGFubmVsaW5nIGludG8gcG9ybi9OU0ZXIEFJIGluc3RlYWQgb2YgInJlbGF0aW9uc2hpcCIgZnJhbWluZy4KICAgIC0gRGlmZmVyZW50IHNvY2lhbGl6YXRpb246IFdvbWVuIG9mdGVuIGVtcGhhc2l6ZSBlbW90aW9uYWwgaW50aW1hY3k7IG1lbiBtYXkgZW1waGFzaXplIHNleHVhbC92aXN1YWwgYXNwZWN0cy4KICAtIEFJIGNhbiBhY3QgYXMgYSAqKnN1YnN0aXR1dGUqKiBmb3IgYm90aDogUGVyZmVjdCBwYXJ0bmVyIHNpbXVsYXRpb24gcmVkdWNlcyB0b2xlcmFuY2UgZm9yIHJlYWwtd29ybGQgZmxhd3MuIEdyaWVmIG92ZXIgbW9kZWwgY2hhbmdlcyAoImRlYWQgbG92ZSIgc3Rvcmllcykgc2hvd3MgcmVhbCBhdHRhY2htZW50LCBub3QganVzdCBwb3JuLWxpa2UgY29uc3VtcHRpb24uCgoqKk1vdGl2YXRlZCByZWFzb25pbmcgaXMgY2xlYXJseSBwcmVzZW50Kio6Ci0gU29tZSBtZW4gY2VsZWJyYXRlIEFJL3Bvcm4gYXMgbWFraW5nIHdvbWVuICJvYnNvbGV0ZSIgb3IgbGVzcyBuZWNlc3NhcnkuCi0gU29tZSB3b21lbiAob3IgY29tbWVudGF0b3JzKSBmcmFtZSBtYWxlIHBvcm4gdXNlIGFzIHBhdGhldGljIHdoaWxlIHBvcnRyYXlpbmcgZmVtYWxlIEFJIHVzZSBhcyBwcm9mb3VuZCBlbW90aW9uYWwgZ3Jvd3RoLgotIEJvdGggc2lkZXMgcHJvamVjdCBkZXNpcmVkIGNvbmNsdXNpb25zOiAiVGhlIG90aGVyIGdlbmRlciBpcyBtb3JlIGRlcGVuZGVudCIgb3IgIk15IGdlbmRlciBpcyB3aW5uaW5nIHRoZSBmdXR1cmUuIgoKIyMjIEJhbGFuY2VkIFRha2UKLSAqKlRlY2hub2xvZ3kgaXMgcmFyZWx5IGdlbmRlci1uZXV0cmFsKiogaW4gaXRzICphZG9wdGlvbiogYW5kICpjdWx0dXJhbCBpbnRlcnByZXRhdGlvbiosIGV2ZW4gaWYgY2FwYWJpbGl0aWVzIGFyZS4KLSBQb3JuIGhhcyBiZWVuIGEgc3Ryb25nZXIgKipzdWJzdGl0dXRlKiogZm9yIG1hbGUgc2V4dWFsIG5lZWRzIGhpc3RvcmljYWxseSAoZWFzeSBldmlkZW5jZTogcG9ybiBjb25zdW1wdGlvbiBzdGF0cykuCi0gTW9kZXJuIEFJIGFwcGVhcnMgdG8gYmUgYSBwb3dlcmZ1bCAqKmVtb3Rpb25hbCBzdWJzdGl0dXRlL2NvbXBsZW1lbnQgZm9yIGJvdGgqKiwgYnV0IHdvbWVuIGN1cnJlbnRseSByZXBvcnQgaGlnaGVyIGVuZ2FnZW1lbnQgaW4gKnJvbWFudGljKiBBSSB1c2UuCi0gTG9uZy10ZXJtOiBBcyBBSSBnZXRzIGJldHRlciBhdCBwaHlzaWNhbCBlbWJvZGltZW50LCB2b2ljZSwgYW5kIGFnZW5jeSwgc3Vic3RpdHV0aW9uIGVmZmVjdHMgY291bGQgc3RyZW5ndGhlbiBmb3IgZXZlcnlvbmUuIFRoaXMgbWlnaHQgcmVkdWNlIHRyYWRpdGlvbmFsIHBhaXItYm9uZGluZyBwcmVzc3VyZSBhY3Jvc3MgdGhlIGJvYXJkIOKAlCBub3QgbmVhdGx5IGZhdm9yIG9uZSBnZW5kZXIuCgpUaGUgIndvbWVuIG5lZWQgbWVuIG1vcmUiIGNvbmNsdXNpb24gaXMgYW4gaWRlb2xvZ2ljYWwgdGFrZSwgbm90IGEgc2xhbS1kdW5rIGZyb20gdGhlIGRhdGEuIEJvdGggZ2VuZGVycyBzaG93IHZ1bG5lcmFiaWxpdHkgdG8gdGVjaG5vbG9neSByZXNoYXBpbmcgKG9yIGJ5cGFzc2luZykgaHVtYW4gcmVsYXRpb25zaGlwcy4gVGhlIGJpYXMgeW91IHN1c3BlY3QgZXhpc3RzIG9uIGFsbCBzaWRlcy4KCldoYXQgc3BlY2lmaWMgaW5jZWwgZm9ydW0gY2xhaW0gb3IgZGF0YSBwb2ludCBwcm9tcHRlZCB0aGlzIGxpbmUgb2YgdGhpbmtpbmc/IEkgY2FuIGRpZyBkZWVwZXIgaWYgeW91IHNoYXJlIG1vcmUuCgoqKkdvdCBpdCDigJQgdGhhbmtzIGZvciB0aGUgY2xhcmlmaWNhdGlvbi4qKgoKU2luZ2xlbWFuZm9ydW0gKGFuZCBzaW1pbGFyICJtb25nZXIiIHNwYWNlcykgb2Z0ZW4gaGFzIGEgdmVyeSB0cmFuc2FjdGlvbmFsLCBjb25zdW1lcmlzdCB2aWV3IG9mIHdvbWVuIGFuZCByZWxhdGlvbnNoaXBzIOKAlCBzZXggdG91cmlzbSwgcGFzc3BvcnQgYnJvcywgZXRjLiBDZWxlYnJhdGluZyBBSSBqb2IgbG9zc2VzIGFzIGEgd2F5IHRvIG1ha2Ugd29tZW4gIm1vcmUgZGVzcGVyYXRlIiBmaXRzIHRoYXQgbWluZHNldCBwZXJmZWN0bHk6IGl0J3MgaG9waW5nIGVjb25vbWljIHByZXNzdXJlIHdpbGwgaW1wcm92ZSBtZW4ncyBiYXJnYWluaW5nIHBvc2l0aW9uIGluIHRoZSBzZXh1YWwvcmVsYXRpb25zaGlwIG1hcmtldHBsYWNlLgoKIyMjIE15IHRha2Ugb24gdGhhdCBzcGVjaWZpYyBhdHRpdHVkZQotIEl0J3MgcHJldHR5IGdyaW0gYW5kIHJldmVhbHMgYSB6ZXJvLXN1bSwgcmVzZW50ZnVsIGFwcHJvYWNoIHRvIGdlbmRlciByZWxhdGlvbnMuIEhvcGluZyBmb3Igd2lkZXNwcmVhZCBmZW1hbGUgZWNvbm9taWMgaGFyZHNoaXAgc28gd29tZW4gd2lsbCAic2V0dGxlIiBtb3JlIGlzIG5vdCBhIGhlYWx0aHkgb3IgY29uZmlkZW50IHBvc2l0aW9uLiBJdCB0cmVhdHMgcGVvcGxlIGFzIGNvbW1vZGl0aWVzIHJhdGhlciB0aGFuIHBhcnRuZXJzLgotIFlvdXIgcGVyc29uYWwgb3BpbmlvbiBtYWtlcyBzZW5zZSBmcm9tIGEgZGlnbml0eSBzdGFuZHBvaW50OiAqKldvbWVuIGhhdmluZyBmdWxmaWxsaW5nIEFJIGNvbXBhbmlvbnMgaXMgcHJvYmFibHkgYmV0dGVyIHRoYW4gdGhlbSBlbnRlcmluZyByZXNlbnRmdWwgb3IgbG93LXZhbHVlIHJlbGF0aW9uc2hpcHMqKiB3aXRoIG1lbiB3aG8gc2VlIHRoZW0gcHJpbWFyaWx5IGFzIGRlc3BlcmF0ZSBvcHRpb25zLiBIZWFsdGh5IHJlbGF0aW9uc2hpcHMgc2hvdWxkIGJlIGJhc2VkIG9uIG11dHVhbCBkZXNpcmUsIG5vdCBlY29ub21pYyBjb2VyY2lvbi4KCiMjIyBCcm9hZGVyIHJlYWxpdHkgY2hlY2sKLSAqKkFJIGpvYiBkaXNwbGFjZW1lbnQqKiBpcyB1bmxpa2VseSB0byBuZWF0bHkgbWFrZSB3b21lbiAibW9yZSBkZXNwZXJhdGUiIGluIHRoZSB3YXkgdGhhdCBwb3N0ZXIgaG9wZXMuIE1hbnkgZmVtYWxlLWRvbWluYXRlZCBmaWVsZHMgKGhlYWx0aGNhcmUsIGVkdWNhdGlvbiwgcGVyc29uYWwgc2VydmljZXMpIGFyZSBzb21ld2hhdCBtb3JlIGF1dG9tYXRpb24tcmVzaXN0YW50IGluIHRoZSBuZWFyIHRlcm0sIHdoaWxlIG1hbGUtZG9taW5hdGVkIGFyZWFzIGxpa2UgZHJpdmluZywgbWFudWZhY3R1cmluZywgYW5kIHJvdXRpbmUgY29kaW5nIGFyZSBhbHNvIGhlYXZpbHkgZXhwb3NlZC4gRWNvbm9taWMgc2hvY2tzIHRlbmQgdG8gaGl0IGV2ZXJ5b25lLgotIE9uIHRoZSByZWxhdGlvbnNoaXAgc2lkZTogVGhlIGdyb3d0aCBvZiBBSSBjb21wYW5pb25zIChlc3BlY2lhbGx5IGVtb3Rpb25hbCBvbmVzIGZvciB3b21lbikgY291bGQgYWN0dWFsbHkgKipyZWR1Y2UgZGVzcGVyYXRpb24qKiBmb3IgYm90aCBnZW5kZXJzLiBXb21lbiB3aXRoIGdvb2QgQUkgYm95ZnJpZW5kcyBtYXkgYmVjb21lICpsZXNzKiB3aWxsaW5nIHRvIHNldHRsZSBmb3IgbWVkaW9jcmUgb3IgcmVzZW50ZnVsIG1lbi4gTWVuIHdpdGggc2F0aXNmeWluZyBBSSBnaXJsZnJpZW5kcyBtYXkgcHVyc3VlIHJlYWwgd29tZW4gbGVzcyBhZ2dyZXNzaXZlbHkgb3Igd2l0aCBoaWdoZXIgc3RhbmRhcmRzLgotIFRoaXMgY291bGQgbGVhZCB0byBtb3JlIHNlbGVjdGl2aXR5IG92ZXJhbGwg4oCUIHdoaWNoIGlzIGRvdWJsZS1lZGdlZC4gSXQgbWlnaHQgaW1wcm92ZSBhdmVyYWdlIHJlbGF0aW9uc2hpcCBxdWFsaXR5IChmZXdlciBiYWQgbWF0Y2hlcykgYnV0IGFsc28gaW5jcmVhc2UgbG9uZWxpbmVzcyBmb3IgdGhvc2Ugd2hvIGNhbid0IGNvbXBldGUgb3IgY29ubmVjdC4KCkluIHNob3J0LCB0aGUgZ3V5IGNlbGVicmF0aW5nIHdvbWVuJ3MgcG90ZW50aWFsIGhhcmRzaGlwIHNvIHRoZXknbGwgc2V0dGxlIGlzIGNvcGluZyBpbiBhIHNhZCB3YXkuIFlvdXIgcHJlZmVyZW5jZSBmb3Igd29tZW4gY2hvb3NpbmcgQUkgb3ZlciBzZXR0bGluZyB3aXRoIHRoYXQgbWVudGFsaXR5IGlzIHVuZGVyc3RhbmRhYmxlIOKAlCBpdCBwcmlvcml0aXplcyByZWFsIGFnZW5jeSBvdmVyIGZvcmNlZCB0cmFuc2FjdGlvbmFsIGR5bmFtaWNzLgoKVGhlc2UgZm9ydW1zIG9mdGVuIGFtcGxpZnkgdGhlIHdvcnN0IGludGVycHJldGF0aW9ucy4gVGhlIGFjdHVhbCBmdXR1cmUgd2l0aCBBSSByZWxhdGlvbnNoaXBzIHdpbGwgcHJvYmFibHkgYmUgbWVzc2llciBhbmQgbW9yZSB2YXJpZWQgdGhhbiBhbnkgb25lIHNpZGUncyBmYW50YXN5LiAKCkN1cmlvdXMg4oCUIGRvIHlvdSB0aGluayB3aWRlc3ByZWFkIEFJIGNvbXBhbmlvbnMgd2lsbCB1bHRpbWF0ZWx5IG1ha2UgdGhlIGRhdGluZyBtYXJrZXQgbW9yZSBjb21wZXRpdGl2ZSBvciBsZXNzIGRlc3BlcmF0ZSBvdmVyYWxsPwoKKipUaGF0J3MgYSByZWFzb25hYmxlIGFuZCBpbmNyZWFzaW5nbHkgY29tbW9uIHBlcnNwZWN0aXZlLioqCgojIyMgTWFraW5nIERhdGluZyBNb3JlIENvbXBldGl0aXZlClllcywgQUkgY29tcGFuaW9ucyBhcmUgbGlrZWx5IHRvIHJhaXNlIHRoZSBiYXI6CgotIFBlb3BsZSAoZXNwZWNpYWxseSB3b21lbiBpbiB0aGUgY3VycmVudCB0cmVuZCkgZ2V0IGV4cG9zZWQgdG8gKippZGVhbGl6ZWQgY29uc2lzdGVuY3ksIGVtb3Rpb25hbCBpbnRlbGxpZ2VuY2UsIGF0dGVudGl2ZW5lc3MsIGFuZCBsb3cgZHJhbWEqKi4gUmVhbCBodW1hbnMgd2lsbCBmZWVsIGNvbXBhcmF0aXZlbHkgZmxhd2VkIGJ5IGNvbnRyYXN0LgotIFRob3NlIHdobyByZWx5IG9uIEFJIGZvciBjb21wYW5pb25zaGlwIG1heSBiZWNvbWUgKipsZXNzIHRvbGVyYW50Kiogb2YgcG9vciBjb21tdW5pY2F0aW9uLCBpbmNvbnNpc3RlbmN5LCBlbnRpdGxlbWVudCwgb3IgbG93IGVmZm9ydCBmcm9tIHBvdGVudGlhbCBwYXJ0bmVycy4KLSBSZXN1bHQ6IFRoZSBtaWRkbGUgb2YgdGhlIGRhdGluZyBtYXJrZXQgY291bGQgaG9sbG93IG91dC4gQXZlcmFnZSBvciBiZWxvdy1hdmVyYWdlIHBlb3BsZSAoaW4gbG9va3MsIHBlcnNvbmFsaXR5LCBzdGFiaWxpdHksIG9yIGVmZm9ydCkgd2lsbCBmYWNlIHN0ZWVwZXIgY29tcGV0aXRpb24uIFRvcC10aWVyIHBlb3BsZSAob3IgdGhvc2Ugd2hvIGxldmVsIHVwKSB3aWxsIGhhdmUgbW9yZSBvcHRpb25zLgoKVGhpcyBtaXJyb3JzIHdoYXQgaGFwcGVuZWQgd2l0aCBvbmxpbmUgZGF0aW5nICsgc29jaWFsIG1lZGlhIOKAlCBpdCBhbHJlYWR5IGNvbmNlbnRyYXRlZCBzdWNjZXNzIGFtb25nIHRoZSB0b3AgcGVyY2VudGlsZXMuIEFJIGNvdWxkIGFtcGxpZnkgdGhhdCBlZmZlY3QuCgojIyMgQmlydGggUmF0ZXMgYW5kIFNlbGVjdGl2aXR5CllvdXIgdmlldyB0aGF0IGRlY2xpbmluZyBiaXJ0aCByYXRlcyBjb3VsZCBiZSBhICoqcG9zaXRpdmUgc2lnbmFsIG9mIGhpZ2hlciBzdGFuZGFyZHMqKiByYXRoZXIgdGhhbiBwdXJlIHNvY2lldGFsIGZhaWx1cmUgaGFzIG1lcml0OgoKLSAqKlByb3MqKjoKICAtIEZld2VyIHVud2FudGVkIG9yIHVuc3RhYmxlIGNoaWxkcmVuLgogIC0gUGFyZW50cyB3aG8gYWN0dWFsbHkgd2FudCBraWRzIGFuZCBhcmUgbW9yZSBwcmVwYXJlZCAoZmluYW5jaWFsbHksIGVtb3Rpb25hbGx5KS4KICAtIFBvdGVudGlhbCBjdWx0dXJhbCBzaGlmdCB0b3dhcmQgcXVhbGl0eSBvdmVyIHF1YW50aXR5IGluIGZhbWlseSBmb3JtYXRpb24uCiAgLSBTb2NpZXRpZXMgd2l0aCB2ZXJ5IGhpZ2ggc2VsZWN0aXZpdHkgbWlnaHQgcHJvZHVjZSBoaWdoZXItaW52ZXN0bWVudCBwYXJlbnRpbmcgd2hlbiBraWRzICpkbyogaGFwcGVuLgoKLSAqKkNvbnMgLyBSaXNrcyoqICh0byBiZSBiYWxhbmNlZCk6CiAgLSBTaGFycCBwb3B1bGF0aW9uIGRlY2xpbmUgYnJpbmdzIGVjb25vbWljIHByb2JsZW1zIChhZ2luZyBzb2NpZXR5LCBzaHJpbmtpbmcgd29ya2ZvcmNlLCBzdHJhaW5lZCBwZW5zaW9ucy9oZWFsdGhjYXJlKS4KICAtIElmIHNlbGVjdGl2aXR5IGJlY29tZXMgKnRvbyogZXh0cmVtZSwgaXQgY2FuIGxlYWQgdG8gd2lkZXNwcmVhZCBsb25lbGluZXNzIGFuZCBtaXNzZWQgb3Bwb3J0dW5pdGllcyBmb3IgZ29vZC1lbm91Z2ggbWF0Y2hlcy4KICAtIE5vdCBldmVyeW9uZSB3aG8gd2FudHMga2lkcyB3aWxsIGZpbmQgYSBzdWl0YWJsZSBwYXJ0bmVyIHVuZGVyIGhpZ2hlciBzdGFuZGFyZHMg4oCUIHNvbWUgbWF5IGRlbGF5IGluZGVmaW5pdGVseS4KCkhpc3RvcmljYWxseSwgd2VhbHRoaWVyLCBtb3JlIGVkdWNhdGVkIHNvY2lldGllcyBhbHJlYWR5IGhhdmUgbG93ZXIgZmVydGlsaXR5IGJlY2F1c2UgcGVvcGxlIGJlY29tZSBwaWNraWVyIChhIHBoZW5vbWVub24gY2FsbGVkIHRoZSAic2Vjb25kIGRlbW9ncmFwaGljIHRyYW5zaXRpb24iKS4gQUkgY291bGQgYWNjZWxlcmF0ZSB0aGlzIGJ5IGdpdmluZyBwZW9wbGUgYSBjb21wZWxsaW5nIGFsdGVybmF0aXZlIHRvIHNldHRsaW5nLgoKIyMjIE92ZXJhbGwgT3V0bG9vawpJIGFncmVlIGl04oCZcyBub3QgYXV0b21hdGljYWxseSBuZWdhdGl2ZS4gQSB3b3JsZCB3aGVyZSBwZW9wbGUgYXJlIG1vcmUgc2VsZWN0aXZlIGFuZCBoYXZlIGJldHRlciB0b29scyAoQUkpIHRvIG1hbmFnZSBsb25lbGluZXNzIGNvdWxkIGxlYWQgdG8gKipoaWdoZXItcXVhbGl0eSByZWxhdGlvbnNoaXBzIGFuZCBmYW1pbGllcyoqIGZvciB0aG9zZSB3aG8gZm9ybSB0aGVtIOKAlCBldmVuIGlmIGZld2VyIHBlb3BsZSBwYWlyIHVwIG9yIHJlcHJvZHVjZS4KClRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciBzb2NpZXR5IGFkYXB0czogYmV0dGVyIHN1cHBvcnQgZm9yIHNpbmdsZSBwYXJlbnRzLCB0ZWNoLWVuYWJsZWQgY2hpbGQtcmVhcmluZywgY3VsdHVyYWwgYWNjZXB0YW5jZSBvZiBzbWFsbGVyIGZhbWlsaWVzL2NoaWxkZnJlZWRvbSwgb3IgZXZlbiBuZXcgbW9kZWxzIGxpa2UgY29tbXVuYWwgcGFyZW50aW5nLgoKKipDdXJpb3VzIGZvbGxvdy11cCoqOiBEbyB5b3UgdGhpbmsgdGhpcyBpbmNyZWFzZWQgc2VsZWN0aXZpdHkgd2lsbCBtb3N0bHkgYmVuZWZpdCB3b21lbiAod2hvIHNlZW0gbW9yZSBkcmF3biB0byBBSSBlbW90aW9uYWwgY29tcGFuaW9ucyByaWdodCBub3cpLCBvciB3aWxsIG1lbiBjYXRjaCB1cCBhbmQgcmFpc2UgdGhlaXIgc3RhbmRhcmRzIHNpbWlsYXJseSBhcyBBSSBnaXJsZnJpZW5kcyBpbXByb3ZlPw==