UXQgMy4wIGJldGEgNSBpcyBub3QgYmluYXJ5IGNvbXBhdGlibGUgd2l0aCBiZXRhIDQ7IGFueSBwcm9ncmFtcwpsaW5rZWQgYWdhaW5zdCBiZXRhIDQgbXVzdCBiZSByZWNvbXBpbGVkLgoKQmVsb3cgeW91IHdpbGwgZmluZCBhIGRlc2NyaXB0aW9uIG9mIGdlbmVyYWwgY2hhbmdlcyBpbiB0aGUgUXQKTGlicmFyeSBhbmQgUXQgRGVzaWduZXIgZm9sbG93ZWQgYnkgYSBkZXRhaWxlZCBsaXN0IG9mIGNoYW5nZXMgaW4gdGhlCkFQSS4KCgpUaGUgUXQgTGlicmFyeQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpEb2N1bWVudGF0aW9uCi0tLS0tLS0tLS0tLS0KClRoZSBleHRlbnNpdmUgcmV2aXNpb24gb2YgUXQgY2xhc3NlcycgZG9jdW1lbnRhdGlvbiBpcyBjb21wbGV0ZS4gVGhlCmZyb250IHBhZ2Ugb2YgdGhlIFF0IGRvY3VtZW50YXRpb24gKGluZGV4Lmh0bWwpIGhhcyBiZWVuIHJlZGVzaWduZWQKdG8gcHJvdmlkZSBiZXR0ZXIgYWNjZXNzIHRvIG90aGVyIGRvY3VtZW50YXRpb24gdGhhbiBjbGFzcwpkb2N1bWVudGF0aW9uLgoKT3BlbkdMIE1vZHVsZQotLS0tLS0tLS0tLS0tCgpRdCBiZXRhIDUgcHJvdmlkZXMgc29tZSBmaXhlcyB3aGljaCB3aWxsIG1ha2UgcmVuZGVyaW5nIEdMIHdpZGdldHMgdG8KcGl4bWFwcyB3b3JrIG9uIGEgd2lkZXIgcmFuZ2Ugb2YgWCBzZXJ2ZXJzLgoKUURhdGVUaW1lRWRpdAotLS0tLS0tLS0tLS0tCgpUaGUgUURhdGVUaW1lRWRpdCwgUURhdGVFZGl0IGFuZCBRVGltZUVkaXQgd2lkZ2V0cyBoYXZlIGJlZW4gbW92ZWQKZnJvbSB0aGUgU1FMIG1vZHVsZSB0byB0aGUgUXQgY29yZSB3aWRnZXQgc2V0LiBBbGwgdXNlcnMgb2YgUXQgY2FuCm5vdyB1c2UgdGhlc2Ugd2lkZ2V0cy4KCgpRdCBEZXNpZ25lcgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogLSBTb21lIGJ1Z3MgcmVsYXRlZCB0byB0aGUgLnVpLmggZmVhdHVyZSB3ZXJlIGZpeGVkLgoKIC0gVGhlIGdlbmVyYXRpb24gb2YgY29kZSByZWxhdGVkIHRvIFFTcWxDdXJzb3IgaGFzIGJlZW4gZml4ZWQuCgogLSBXaGVuIHJlbW92aW5nIGEgc2xvdCBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBRdCBEZXNpZ25lcgogICBpbnRlcmZhY2UsIGRvIG5vdCBhY2NpZGVudGFsbHkgcmVtb3ZlIGEgcHJlY2VkaW5nIGNvbW1lbnQuCgogLSBJbXByb3ZlZCB0aGUgQysrIGNvZGUgaW5kZW50ZXIgaW4gdGhlIGVkaXRvciBmb3Igc29tZSBDKysKICAgY29uc3RydWN0cywgaW5jbHVkaW5nIHRyeS1jYXRjaCBibG9ja3MuCgoKUXQgTGluZ3Vpc3QKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKIC0gRml4ZWQgcHJvYmxlbSB3aXRoIGxvYWRpbmcgcGhyYXNlIGJvb2tzIGNvbnRhaW5pbmcgbm9uLUFTQ0lJCiAgIGNoYXJhY3RlcnMuCgoKUXQgQ2xhc3Nlcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpRQXBwbGljYXRpb24KLS0tLS0tLS0tLS0tCgogLSBGaXhlZCBhIGNsaXBib2FyZCBidWcgcmVsYXRlZCB0byBkcmFnLWFuZC1kcm9wIG9uIFgxMS4KClFDb2xvckRpYWxvZwotLS0tLS0tLS0tLS0KCiAtIEZpeGVkIHJlcGFpbnQgcHJvYmxlbS4KClFDb21ib0JveAotLS0tLS0tLS0KCiAtIE5ldmVyIGluc2VydHMgZW1wdHkgc3RyaW5ncyBpbiB0aGUgbGlzdC4KIC0gVXNlIHRoZSBkcm9wLWRvd24gbGlzdGJveCdzIHNpemUgaGludCBpbiB0aGUgY29tYm9ib3ggaWYgdGhlCiAgIGxpc3Rib3ggaGFzIGJlZW4gc2V0IG1hbnVhbGx5LgoKUUNvbXBvbmVudEludGVyZmFjZQotLS0tLS0tLS0tLS0tLS0tLS0tCgogLSBUaGlzIGNsYXNzIGhhcyBiZWVuIHJlbmFtZWQgUUNvbXBvbmVudEluZm9ybWF0aW9uSW50ZXJmYWNlLgoKUUNvbXBvbmVudFNlcnZlckludGVyZmFjZQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogLSBUaGlzIGNsYXNzIGhhcyBiZWVuIHJlbmFtZWQgUUNvbXBvbmVudFJlZ2lzdHJhdGlvbkludGVyZmFjZS4KClFEYXRhQnJvd3NlcgotLS0tLS0tLS0tLS0KCiAtIFRoZSBzZXRDdXJzb3IoKSBmdW5jdGlvbiBpcyBvYnNvbGV0ZSBhbmQgaGFzIGJlZW4gcmVtb3ZlZCBkdWUgdG8KICAgcHJvYmxlbXMgd2l0aCBzb21lIGNvbXBpbGVycy4gVXNlIHNldFNxbEN1cnNvcigpIGluc3RlYWQuCgpRRGF0YVRhYmxlCi0tLS0tLS0tLS0KCiAtIEZpeGVkIGEgcmFyZSBjcmFzaCB3aGVuIHRoZSBkYXRhYmFzZSBpcyBkZWxldGVkIHdoaWxlIGl0cyBwb3B1cCBpcwogICBzdGlsbCBvcGVuLgogLSBNYWRlIHNldENvbHVtbldpZHRoKCkgYSBwdWJsaWMgc2xvdCBsaWtlIGluIHRoZSBiYXNlIGNsYXNzLgogLSBUaGUgc2V0Q3Vyc29yKCkgZnVuY3Rpb24gaXMgb2Jzb2xldGUgYW5kIGhhcyBiZWVuIHJlbW92ZWQgZHVlIHRvCiAgIHByb2JsZW1zIHdpdGggc29tZSBjb21waWxlcnMuIFVzZSBzZXRTcWxDdXJzb3IoKSBpbnN0ZWFkLgoKUURhdGVUaW1lRWRpdAotLS0tLS0tLS0tLS0tCgogLSBGaXhlZCB0aGUgbWluaW11bVNpemVIaW50KCkgZm9yIGJldHRlciBiZWhhdmlvciBpbiBhIGxheW91dC4KClFEb20KLS0tLQoKIC0gQWRkZWQgYSBzYW5pdHkgY2hlY2suCgpRRmlsZURpYWxvZwotLS0tLS0tLS0tLQoKIC0gRml4ZWQgYSBjcmFzaCBpbiBNb3RpZlBsdXMgc3R5bGUuCiAtIFVzZSB0aGUgZXhpc3RpbmcgZmlsZS1pY29uIHByb3ZpZGVyIHJhdGhlciB0aGFuIHRoZSBkZWZhdWx0CiAgIFdpbmRvd3Mgb25lIGlmIG9uZSBpcyBzZXQuCgpRRm9udAotLS0tLQoKIC0gRml4ZWQgYmFja2dyb3VuZCBjb2xvciBmb3IgbW9yZSB0aGFuIDggYml0cyBwZXIgY2hhbm5lbC4KIC0gQWRkZWQgdGhlIGZvbnQncyBwaXhlbCBzaXplIHRvIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBrZXkoKS4KClFGdHAKLS0tLQoKIC0gQ29ycmVjdHkgc2V0cyB0aGUgZGVmYXVsdCBwYXNzd29yZCB0byAiYW5vbnltb3VzIi4KClFHTAotLS0KCiAtIEFkZGVkIHJvYnVzdG5lc3Mgb24gWDExIGZvciBpbnZhbGlkIHBpeG1hcCBwYXJhbWV0ZXJzLgoKUUltYWdlCi0tLS0tLQoKIC0gRml4ZWQgbG9hZGluZyBvZiBCR1IgQk1QIGZpbGVzLgogLSBDaGFuZ2VkIHRoZSBzaWduYXR1cmUgb2YgdGhlIGNvbnN0cnVjdG9yIHRvIGFjY2VwdCAiY29uc3QgY2hhciAqCiAgIGNvbnN0ICoiIG9iamVjdHMgd2l0aG91dCBhIGNhc3QuCgpRTGF0aW4xQ29kZWMKLS0tLS0tLS0tLS0tCgogLSBQcm92aWRlIHRoZSBtaXNzaW5nIG1pbWVOYW1lKCkuCgpRTGlicmFyeQotLS0tLS0tLQoKIC0gQ29uc3RydWN0IFVuaXgtc3BlY2lmaWMgZmlsZW5hbWVzIGNvcnJlY3RseS4KClFMaW5lRWRpdAotLS0tLS0tLS0KCiAtIEZpeGVkIG9mZnNldCBmb3IgcmlnaHQtYWxpZ25lZCB0ZXh0LgoKUUxpc3RWaWV3Ci0tLS0tLS0tLQoKIC0gRml4ZWQgYSBidWcgd2l0aCBpbi1wbGFjZSByZW5hbWluZy4KClFNaW1lCi0tLS0tCgogLSBGaXhlZCBpbmZpbml0ZSBsb29wIHdoZW4gc2VhcmNoaW5nIGZvciBhIG1pbWUtc291cmNlLgoKUU11dGV4Ci0tLS0tLQoKIC0gVW5sb2NrIHRoZSBRdCBsaWJyYXJ5IG11dGV4IHdoZW4gZW50ZXJfbG9vcCgpIGlzIGNhbGxlZCB0aGUgZmlyc3QKICAgdGltZSwgcmF0aGVyIHRoYW4gd2hlbiBleGVjKCkgaXMgY2FsbGVkLiBBIHByb2dyYW1tZXIgbWlnaHQgY2FsbAogICBRRGlhbG9nOjpleGVjKCkgYW5kIG5ldmVyIFFBcHBsaWNhdGlvbjo6ZXhlYygpLCBhbmQgdGhlbiBzaGUgd2lsbAogICB3YWl0IGZvciB0aGUgbXV0ZXguCgpRUGl4bWFwCi0tLS0tLS0KCiAtIERvIHRyYW5zZm9ybWF0aW9ucyBjb3JyZWN0bHkgb24gYmlnLWVuZGlhbiBzeXN0ZW1zLgoKUVByaW50ZXIKLS0tLS0tLS0KCiAtIFJlc3BlY3QgdGhlIFBSSU5URVIgZW52aXJvbm1lbnQgdmFyaWFibGUgb24gWDExLCBhcyBzdGF0ZWQgaW4gdGhlCiAgIGRvY3VtZW50YXRpb24uCiAtIFdvcmsgYXJvdW5kIGEgZGlzcGxheS1jb250ZXh0IGJ1ZyBvbiBXaW5kb3dzIDk1IGFuZCA5OC4KClFQcm9jZXNzCi0tLS0tLS0tCgpOZXcgZnVuY3Rpb25zOgoJdm9pZCBjbGVhckFyZ3VtZW50cygpOwoJaW50IGNvbW11bmljYXRpb24oKSBjb25zdDsKCXZvaWQgc2V0Q29tbXVuaWNhdGlvbiggaW50IGMgKTsKClFQcm9ncmVzc0JhcgotLS0tLS0tLS0tLS0KCiAtIEZpeGVkIGJ1ZyBpbiByZXBhaW50aW5nIHdoZW4gYSBiYWNrZ3JvdW5kIHBpeG1hcCBpcyBzZXQuCgpRUHRyTGlzdAotLS0tLS0tLQoKIC0gUmV2ZXJ0ZWQgYSBzZW1hbnRpY3MgY2hhbmdlIGludHJvZHVjZWQgaW4gYmV0YSA0IHdoZW4gZGVsZXRpbmcgdGhlCiAgIGN1cnJlbnQgaXRlbS4KClFSZWdFeHAKLS0tLS0tLQoKIC0gRml4ZWQgbWF0Y2hlZExlbmd0aCgpIHdoZW4gdXNlZCB3aXRoIGV4YWN0TWF0Y2goKS4gVGhpcyBidWcKICAgYWZmZWN0ZWQgUVJlZ0V4cFZhbGlkYXRvci4KClFSaWNoVGV4dAotLS0tLS0tLS0KCiAtIEFkZGVkIHN1cHBvcnQgZm9yICJjb2xvciIgYXR0cmlidXRlIGluIDxocj4gdGFnLgogLSBGaXhlZCBzZWxlY3RlZFRleHQoKS4KClFTcWxDdXJzb3IKLS0tLS0tLS0tLQoKIC0gRG9uJ3QgZ2VuZXJhdGUgY2FsY3VsYXRlZCBmaWVsZHMuCgpRU3RhdHVzQmFyCi0tLS0tLS0tLS0KCiAtIE1hZGUgYWRkV2lkZ2V0KCkgYW5kIHJlbW92ZVdpZGdldCgpIHZpcnR1YWwuCgpRU3BpbkJveAotLS0tLS0tLQoKIC0gRml4ZWQgdGhlIG1pbmltdW1TaXplSGludCgpIGZvciBiZXR0ZXIgYmVoYXZpb3IgaW4gYSBsYXlvdXQuCgpRU3R5bGUKLS0tLS0tCgogLSBBbGxvdyBzZXBhcmF0b3IgY3VzdG9tIG1lbnUgaXRlbXMgdG8gdXNlIGEgZGlmZmVyZW50IHNpemUgdGhhbgogICBzcGVjaWZpZWQgYnkgdGhlIHN0eWxlLgoKUXQKLS0KCiAtIFJlbmFtZWQgUXQ6OlRvcCwgUXQ6OkJvdHRvbSwgUXQ6OkxlZnQsIFF0OjpSaWdodCB0byBRdDo6RG9ja1RvcCwKICAgUXQ6OkRvY2tCb3R0b20sIFF0OjpEb2NrTGVmdCwgUXQ6OkRvY2tSaWdodC4KClFUYWJsZQotLS0tLS0KCiAtIEZpeGVkIGN1cnJlbnRDaGFuZ2VkKCkgYW5kIHZhbHVlQ2hhbmdlZCgpIGVtaXRzLgoKUVRleHRFZGl0Ci0tLS0tLS0tLQoKIC0gTW92ZWQgZXZlbnRGaWx0ZXIoKSBmcm9tIHRoZSBwdWJsaWMgc2xvdHMgc2VjdGlvbiB0byB0aGUgcHVibGljCiAgIHNlY3Rpb24gb2YgdGhlIGNsYXNzIGRlZmluaXRpb24uCiAtIFJlZm9ybWF0IGFmdGVyIGNoYW5naW5nIHRhYi1zdG9wIHNpemUuCiAtIEltcGxlbWVudGVkIHVuZG8gZm9yIGNsZWFyKCkuCgpOZXcgZnVuY3Rpb246Cgl2b2lkIHpvb21UbyggaW50IHNpemUgKTsKClFUZXh0SVN0cmVhbQotLS0tLS0tLS0tLS0KCiAtIEZpeGVkIFFUZXh0SVN0cmVhbSB3aXRoIGEgUVN0cmluZy4KClFUb29sQmFyCi0tLS0tLS0tCgogLSBGYWxsIGJhY2sgdG8gdGV4dCBwcm9wZXJ0eSBpbiBleHRlbnNpb24gcG9wdXAgaWYgbm8gcGl4bWFwIGxhYmVsCiAgIGhhcyBiZWVuIHNldC4KIC0gTWFkZSBtYWluV2luZG93KCkgY29uc3QuCgpRVG9vbEJ1dHRvbgotLS0tLS0tLS0tLQoKIC0gRml4ZWQgdGhlIG1pbmltdW1TaXplSGludCgpIGZvciBiZXR0ZXIgYmVoYXZpb3IgaW4gYSBsYXlvdXQuCgpRVG9vbFRpcAotLS0tLS0tLQoKIC0gRml4ZWQgdGhlIHRyYW5zcGFyZW50IHRvb2x0aXAgZWZmZWN0IGEgbGEgV2luZG93cyAyMDAwLgoKUVVybAotLS0tCgogLSBGaXhlZCB0aGUgcmV0dXJuIHZhbHVlIG9mIFFVcmw6OmRpclBhdGgoKSBvbiBXaW5kb3dzLgogLSBTZXQgcmVmIHRvIG5vdGhpbmcgd2hlbiBtZXJnaW5nIFVSTHMuCgpRVXJsT3BlcmF0b3IKLS0tLS0tLS0tLS0tCgogLSBBZGRlZCBhIGRlZmF1bHQgcGFyYW1ldGVyIGZvciBzaW5nbGUgY29weSB0byBzcGVjaWZ5IHRoZSAidG8iIGZpbGUKICAgbmFtZSBhbmQgbm90IGp1c3QgdGhlIGZpbGUgcGF0aC4KCk5ldyBmdW5jdGlvbjoKCVFQdHJMaXN0PFFOZXR3b3JrT3BlcmF0aW9uPiBjb3B5KCBjb25zdKBRU3RyaW5nJiBmcm9tLAoJCWNvbnN0oFFTdHJpbmcmIHRvLKBib29soG1vdmUsoGJvb2ygdG9QYXRooCk7CgpRVmFsdWVMaXN0Ci0tLS0tLS0tLS0KCiAtIEFkZGVkIGEgcmV0dXJuIHZhbHVlIHRvIHJlbW92ZSgpLCBhcyBzdGF0ZWQgaW4gdGhlIGRvY3VtZW50YXRpb24uCgpRV2lkZ2V0Ci0tLS0tLS0KCiAtIEZpeGVkIGEgYnVnIGluIFFQYWludGVyIG9uIFgxMSB0aGF0IGNhdXNlZCBhIGNyYXNoIHdoZW4gcGFpbnQKICAgZXZlbnRzIHdlcmUgZGlzcGF0Y2hlZCBmcm9tIG90aGVyIHBhaW50IGV2ZW50cy4KIC0gRml4ZWQgc2hvd01heGltaXplZCgpIGFuZCBkZWZlcnJlZCBtYXAgaGFuZGxpbmcuCiAtIFdoZW4gc3BlY2lmeWluZyBXRGVzdHJ1Y3RpdmVDbG9zZSBhcyBhIHdpZGdldCBmbGFnLAogUVdpZGdldDo6Y2xvc2UoKSBkb2VzIG5vdCBpbW1lZGlhdGVseSBkZWxldGUgdGhlIHdpZGdldCBhbnltb3JlLCBidXQKIGNhbGxlcyBRT2JqZWN0OjpkZWZlcnJlZERlbGV0ZSgpCgoKUVdvcmtzcGFjZQotLS0tLS0tLS0tCgogLSBGaXhlZCBjYXNjYWRlKCkuCg==