From dfe82e5f0ef80880466c69a2728c35bd7ffe82ab Mon Sep 17 00:00:00 2001 From: Simon Laux Date: Mon, 17 Jun 2024 18:56:36 +0200 Subject: [PATCH] draft make a benchmar with big text --- benches/hugetext.txt | 1 + benches/my_benchmark.rs | 4 ++++ 2 files changed, 5 insertions(+) create mode 100644 benches/hugetext.txt diff --git a/benches/hugetext.txt b/benches/hugetext.txt new file mode 100644 index 0000000..1cf27b1 --- /dev/null +++ b/benches/hugetext.txt @@ -0,0 +1 @@ +TnVsbGEgaWQgbWF4aW11cyBkdWkuIE51bmMgZWxlbWVudHVtIGhlbmRyZXJpdCBzZW0sIHZlbCB0ZW1wdXMgbnVsbGEgZWZmaWNpdHVyIG5lYy4gQ2xhc3MgYXB0ZW50IHRhY2l0aSBzb2Npb3NxdSBhZCBsaXRvcmEgdG9ycXVlbnQgcGVyIGNvbnViaWEgbm9zdHJhLCBwZXIgaW5jZXB0b3MgaGltZW5hZW9zLiBTdXNwZW5kaXNzZSBibGFuZGl0LCBleCBldCBvcm5hcmUgbWF4aW11cywgdGVsbHVzIG5pYmggZ3JhdmlkYSB0dXJwaXMsIHNlZCB2dWxwdXRhdGUgbmlzbCBlcmF0IHZlbCBuaWJoLiBNb3JiaSBuZWMgZGFwaWJ1cyBuaXNsLiBNYXVyaXMgdml0YWUgbmlzaSBjb25zZXF1YXQgbWV0dXMgcnV0cnVtIGNvbmd1ZS4gVml2YW11cyBtZXR1cyB0ZWxsdXMsIHZlc3RpYnVsdW0gZXQgdmFyaXVzIHZpdGFlLCB0ZW1wb3Igdml0YWUgb3JjaS4gQWxpcXVhbSB2ZXN0aWJ1bHVtIG51bGxhIGZpbmlidXMgYXVndWUgZmVybWVudHVtIGVsZW1lbnR1bS4KCkRvbmVjIGxvYm9ydGlzIGFyY3UgYWMgdGVsbHVzIHZvbHV0cGF0IHJob25jdXMuIFNlZCBzb2RhbGVzIGxpYmVybyBpZCBjb25zZXF1YXQgc29sbGljaXR1ZGluLiBQcmFlc2VudCB2ZWwgc2VtcGVyIHNlbSwgZWdldCBwbGFjZXJhdCBudW5jLiBRdWlzcXVlIHRpbmNpZHVudCBudW5jIG5vbiBhY2N1bXNhbiBmaW5pYnVzLiBEb25lYyB2aXZlcnJhIG9yY2kgYSBkaWFtIGlhY3VsaXMgdmVoaWN1bGEuIEFlbmVhbiBldCB0dXJwaXMgaWQganVzdG8gZmV1Z2lhdCBlbGVpZmVuZC4gU2VkIGF0IGVnZXN0YXMgbGliZXJvLCBhdCBlbGVpZmVuZCBkdWkuCgpOdWxsYSBkaWN0dW0gdGluY2lkdW50IG9yY2kuIE1hZWNlbmFzIHZpdGFlIGFsaXF1YW0gc2VtLiBVdCBzb2xsaWNpdHVkaW4gbW9sbGlzIG9yY2ksIGV1IHVsdHJpY2VzIHZlbGl0LiBDdXJhYml0dXIgbm9uIGFudGUgc2l0IGFtZXQgZHVpIGxvYm9ydGlzIHRpbmNpZHVudCBpbiBxdWlzIG9yY2kuIFZlc3RpYnVsdW0gYW50ZSBpcHN1bSBwcmltaXMgaW4gZmF1Y2lidXMgb3JjaSBsdWN0dXMgZXQgdWx0cmljZXMgcG9zdWVyZSBjdWJpbGlhIGN1cmFlOyBBbGlxdWFtIGVyYXQgdm9sdXRwYXQuIEV0aWFtIG5lYyB0dXJwaXMgbW9sZXN0aWUgbGliZXJvIGNvbnNlY3RldHVyIGNvbnNlY3RldHVyIHZlbCBhYyBlbGl0LiBWaXZhbXVzIHRvcnRvciBpcHN1bSwgdml2ZXJyYSBkaWN0dW0ganVzdG8gZWdldCwgcGhhcmV0cmEgcG9ydGEgZXguIE1vcmJpIGZlcm1lbnR1bSBxdWFtIHNpdCBhbWV0IG9kaW8gY29udmFsbGlzLCBzZW1wZXIgb3JuYXJlIGVuaW0gZWZmaWNpdHVyLiBQcm9pbiBpbiBzb2xsaWNpdHVkaW4gYXJjdS4KCk1hZWNlbmFzIHZlbCBtYXhpbXVzIHR1cnBpcy4gTWF1cmlzIG9ybmFyZSBmZXJtZW50dW0gZmVybWVudHVtLiBEdWlzIGNvbnZhbGxpcywgbGVjdHVzIGlkIHRlbXB1cyB2b2x1dHBhdCwgcXVhbSBxdWFtIHZlc3RpYnVsdW0gbGliZXJvLCBvcm5hcmUgY29tbW9kbyBuaXNpIGVyb3MgZXVpc21vZCBtYXVyaXMuIER1aXMgbmlzbCBlcm9zLCB0cmlzdGlxdWUgcXVpcyBwaGFyZXRyYSBxdWlzLCBtb2xsaXMgc2VkIGRvbG9yLiBDcmFzIGNvbnZhbGxpcyBlcmF0IG5lYyBzb2RhbGVzIGZldWdpYXQuIE51bGxhIHNlZCBudW5jIG9kaW8uIEludGVnZXIgZGljdHVtIGFyY3UgaW4gdHVycGlzIHBvc3VlcmUsIHZvbHV0cGF0IHZpdmVycmEgYW50ZSBzdXNjaXBpdC4KClN1c3BlbmRpc3NlIGF0IHRpbmNpZHVudCBlbGl0LiBEb25lYyBlZ2V0IGR1aSBzaXQgYW1ldCBvZGlvIHRpbmNpZHVudCB0ZW1wb3IgbmVjIGFjIGlwc3VtLiBEb25lYyBoZW5kcmVyaXQganVzdG8gY29uZGltZW50dW0gbmlzbCBibGFuZGl0LCBlZ2V0IGludGVyZHVtIGxhY3VzIHBoYXJldHJhLiBNYWVjZW5hcyBzb2xsaWNpdHVkaW4gbGliZXJvIHNpdCBhbWV0IG1hdXJpcyBjb25ndWUsIHNpdCBhbWV0IGRhcGlidXMgbGFjdXMgZ3JhdmlkYS4gTnVsbGFtIGN1cnN1cywgbmVxdWUgYXQgYXVjdG9yIHBvc3VlcmUsIGR1aSBsYWN1cyBjb25zZWN0ZXR1ciBtaSwgaWQgdGluY2lkdW50IG5lcXVlIG1pIGVnZXQgZGlhbS4gUHJvaW4gYWxpcXVhbSBwcmV0aXVtIG1ldHVzLCBldCBncmF2aWRhIGxhY3VzIHVsdHJpY2llcyBhdC4gU3VzcGVuZGlzc2UgcXVpcyBsdWN0dXMgbG9yZW0uIERvbmVjIHRpbmNpZHVudCB0ZW1wb3IgbGFjdXMsIGlkIG1vbGxpcyBlc3QgcmhvbmN1cyBhdC4KCkludGVyZHVtIGV0IG1hbGVzdWFkYSBmYW1lcyBhYyBhbnRlIGlwc3VtIHByaW1pcyBpbiBmYXVjaWJ1cy4gQWVuZWFuIGNvbnNlcXVhdCBhIGVyYXQgbm9uIGZpbmlidXMuIFN1c3BlbmRpc3NlIHRpbmNpZHVudCB2ZXN0aWJ1bHVtIG1pIG1hbGVzdWFkYSBwb3J0dGl0b3IuIFF1aXNxdWUgbnVsbGEgYW50ZSwgaW50ZXJkdW0gYXQgbGFvcmVldCBhLCBhY2N1bXNhbiBldSBvZGlvLiBVdCB1bHRyaWNpZXMgYSBudWxsYSBhdCBzYWdpdHRpcy4gQWxpcXVhbSBlcmF0IHZvbHV0cGF0LiBTZWQgZ3JhdmlkYSwgbWFnbmEgdXQgZGljdHVtIHNlbXBlciwgbnVuYyBkdWkgZWZmaWNpdHVyIGp1c3RvLCB1dCBwcmV0aXVtIGRpYW0gZXJhdCBzaXQgYW1ldCBlbmltLiBWaXZhbXVzIGVsZWlmZW5kIGV4IGFyY3UsIHF1aXMgaWFjdWxpcyBmZWxpcyB2ZWhpY3VsYSBlZ2V0LiBDdXJhYml0dXIgYSBmZXJtZW50dW0gbGVjdHVzLiBQcmFlc2VudCBzaXQgYW1ldCByaXN1cyBldSBlcmF0IG1vbGxpcyBsdWN0dXMgdXQgZWdldCBpcHN1bS4gVXQgcG9ydGEgZWxpdCBzZWQgZHVpIHJ1dHJ1bSBlbGVpZmVuZC4gVmVzdGlidWx1bSBhbnRlIGlwc3VtIHByaW1pcyBpbiBmYXVjaWJ1cyBvcmNpIGx1Y3R1cyBldCB1bHRyaWNlcyBwb3N1ZXJlIGN1YmlsaWEgY3VyYWU7IFByb2luIHV0IHRpbmNpZHVudCBtaS4gRG9uZWMgYWxpcXVhbSBhdCBtaSBlZ2V0IGltcGVyZGlldC4gQWxpcXVhbSBlcmF0IHZlbGl0LCBhbGlxdWV0IGV0IGxlbyBpZCwgY29udmFsbGlzIGdyYXZpZGEgb2Rpby4gQ3VyYWJpdHVyIHZ1bHB1dGF0ZSBwaGFyZXRyYSB2dWxwdXRhdGUuCgpQaGFzZWxsdXMgdmVsIG1hZ25hIGNvbnZhbGxpcywgdGluY2lkdW50IG1hdXJpcyBldSwgcmhvbmN1cyBhdWd1ZS4gVml2YW11cyBzb2xsaWNpdHVkaW4gbmlzaSBub24gdmVzdGlidWx1bSBzY2VsZXJpc3F1ZS4gTWF1cmlzIGVmZmljaXR1ciBhIGxlbyB2ZWwgZXVpc21vZC4gU2VkIHNlZCBiaWJlbmR1bSBhbnRlLCBlZ2V0IG1hbGVzdWFkYSBzYXBpZW4uIE5hbSBtYXhpbXVzIG1hdXJpcyBzZWQgZGFwaWJ1cyBiaWJlbmR1bS4gQ3VyYWJpdHVyIHRlbXB1cyBleCBpZCBvcm5hcmUgZXVpc21vZC4gRG9uZWMgcHVsdmluYXIsIHNhcGllbiBuZWMgdnVscHV0YXRlIGZhdWNpYnVzLCBqdXN0byB0b3J0b3IgcG9zdWVyZSBtYXNzYSwgYWMgdGluY2lkdW50IG5pc2kgZmVsaXMgcG9ydHRpdG9yIGxpZ3VsYS4gUHJhZXNlbnQgY3Vyc3VzIHRvcnRvciBub24gc2FnaXR0aXMgdmVuZW5hdGlzLiBGdXNjZSBwbGFjZXJhdCBtZXR1cyBlZ2V0IHVybmEgbGFvcmVldCwgZXUgb3JuYXJlIHR1cnBpcyBlbGVtZW50dW0uIFZpdmFtdXMgaW1wZXJkaWV0IGluIHVybmEgdXQgbWFsZXN1YWRhLiBQZWxsZW50ZXNxdWUgY29uZ3VlIHVsbGFtY29ycGVyIG5pc2kgc2l0IGFtZXQgcG9zdWVyZS4gSW50ZWdlciBmZXJtZW50dW0gZXJvcyBldCBudWxsYSBwaGFyZXRyYSByaG9uY3VzLiBVdCBhdCBlbmltIG5vbiBtaSBwbGFjZXJhdCBzb2xsaWNpdHVkaW4uIFNlZCB2b2x1dHBhdCwgbnVsbGEgbmVjIHRlbXBvciBjb252YWxsaXMsIG1hZ25hIGxhY3VzIHZvbHV0cGF0IGZlbGlzLCBhYyBjb21tb2RvIHF1YW0gZGlhbSBzYWdpdHRpcyByaXN1cy4gVmVzdGlidWx1bSBhbnRlIGlwc3VtIHByaW1pcyBpbiBmYXVjaWJ1cyBvcmNpIGx1Y3R1cyBldCB1bHRyaWNlcyBwb3N1ZXJlIGN1YmlsaWEgY3VyYWU7CgpBbGlxdWFtIGF1Y3RvciB0ZW1wdXMgb3JuYXJlLiBOdWxsYW0gdml0YWUgdG9ydG9yIG5lYyBlc3QgcGVsbGVudGVzcXVlIGN1cnN1cyBxdWlzIGEgZXN0LiBQZWxsZW50ZXNxdWUgdHJpc3RpcXVlIG9ybmFyZSB2YXJpdXMuIFV0IHBvcnRhIG5pc2wgbGFjdXMsIG5vbiBmYWNpbGlzaXMgdmVsaXQgbWFsZXN1YWRhIGlkLiBEb25lYyB0aW5jaWR1bnQgbW9sbGlzIGZlcm1lbnR1bS4gVmVzdGlidWx1bSBpbXBlcmRpZXQgZmluaWJ1cyBkaWFtLCBlZ2V0IHZhcml1cyBmZWxpcyBiaWJlbmR1bSBxdWlzLiBGdXNjZSBpcHN1bSB0b3J0b3IsIGFsaXF1YW0gc2l0IGFtZXQgYmxhbmRpdCBoZW5kcmVyaXQsIHByZXRpdW0gaWFjdWxpcyBzZW0uIFZlc3RpYnVsdW0gcHJldGl1bSBpcHN1bSB2ZWwgcGhhcmV0cmEgbGFvcmVldC4gUGhhc2VsbHVzIGV4IGZlbGlzLCB0ZW1wdXMgc2VkIHNjZWxlcmlzcXVlIGlkLCBmaW5pYnVzIGVnZXQgZW5pbS4gU3VzcGVuZGlzc2UgcXVpcyBhbnRlIGV1IGRpYW0gZWxlaWZlbmQgbHVjdHVzLiBQcm9pbiB2YXJpdXMgbWF1cmlzIHRvcnRvciwgZXUgYmliZW5kdW0gbnVsbGEgb3JuYXJlIG1vbGVzdGllLiBJbiByaG9uY3VzLCBpcHN1bSBpbiBldWlzbW9kIHZlbmVuYXRpcywgbG9yZW0gZWxpdCBvcm5hcmUgaXBzdW0sIGlkIHBvcnR0aXRvciB1cm5hIGxpYmVybyBpZCBlbGl0LiBDcmFzIGV0IHR1cnBpcyBuaXNsLgoKU3VzcGVuZGlzc2UgZWxlbWVudHVtLCBhcmN1IHNlZCBwb3J0YSBpbnRlcmR1bSwgaXBzdW0gc2VtIGhlbmRyZXJpdCBlbmltLCBhYyBzdXNjaXBpdCBkdWkganVzdG8gbm9uIHB1cnVzLiBJbiBoYWMgaGFiaXRhc3NlIHBsYXRlYSBkaWN0dW1zdC4gTWFlY2VuYXMgdGVtcG9yIGNvbW1vZG8gc2VtLCB1dCB0cmlzdGlxdWUgbGVvIGN1cnN1cyBpZC4gUGhhc2VsbHVzIGFsaXF1YW0gbmliaCBlc3QsIHNpdCBhbWV0IGZlcm1lbnR1bSBtYXVyaXMgY29udmFsbGlzIHZlbC4gRHVpcyBsYWNpbmlhIGZyaW5naWxsYSB2ZXN0aWJ1bHVtLiBTZWQgZ3JhdmlkYSBjb25zZXF1YXQgbmliaCBldSBzZW1wZXIuIFZlc3RpYnVsdW0gY29uZ3VlIGFyY3UgbmliaCwgZXUgdm9sdXRwYXQgb2RpbyB2ZW5lbmF0aXMgdmVsLiBQcmFlc2VudCBhbGlxdWV0IGp1c3RvIG5lYyB2ZWhpY3VsYSBsdWN0dXMuIFF1aXNxdWUgbm9uIGxlY3R1cyB2ZWwgdXJuYSBzZW1wZXIgZmV1Z2lhdC4gRG9uZWMgZXUgbWFzc2EgdmVuZW5hdGlzLCBwbGFjZXJhdCBtYWduYSBzb2xsaWNpdHVkaW4sIG1heGltdXMgZXN0LiBEb25lYyBhdWN0b3Igc2FnaXR0aXMgcGhhcmV0cmEuIFBoYXNlbGx1cyBwdXJ1cyBtZXR1cywgY29uc2VxdWF0IGV0IHRyaXN0aXF1ZSBjb21tb2RvLCBpbXBlcmRpZXQgdmVsIGlwc3VtLiBQcm9pbiB1dCBlbGVtZW50dW0gZXguIEZ1c2NlIHByZXRpdW0gYWMgcHVydXMgYWMgbW9sZXN0aWUuIFF1aXNxdWUgYWxpcXVhbSBlc3Qgc2VkIHZlbmVuYXRpcyBhbGlxdWV0LiBGdXNjZSBwb3J0dGl0b3IgZWxlbWVudHVtIGFjY3Vtc2FuLgoKVml2YW11cyBmZWxpcyB0ZWxsdXMsIHZhcml1cyBuZWMgcXVhbSB2aXRhZSwgcHVsdmluYXIgYWxpcXVhbSBqdXN0by4gQWxpcXVhbSBldCBwdXJ1cyBxdWFtLiBNYWVjZW5hcyBzaXQgYW1ldCBsYW9yZWV0IGRpYW0uIFN1c3BlbmRpc3NlIHBvdGVudGkuIE5hbSBjb252YWxsaXMgbWFnbmEgc2l0IGFtZXQgdml2ZXJyYSBwb3J0dGl0b3IuIE1hdXJpcyBtb2xlc3RpZSBwZWxsZW50ZXNxdWUgdGVtcHVzLiBNYXVyaXMgcG9zdWVyZSBpbnRlcmR1bSBzb2xsaWNpdHVkaW4uIFN1c3BlbmRpc3NlIGxpZ3VsYSBhcmN1LCB0ZW1wdXMgaWQgYmxhbmRpdCBzaXQgYW1ldCwgdGluY2lkdW50IG5vbiB0ZWxsdXMuIERvbmVjIGV1IGR1aSBtYXVyaXMuIFNlZCB0aW5jaWR1bnQgcXVhbSBhYyBtYWduYSBlZ2VzdGFzIGFjY3Vtc2FuLiBTZWQgYSBvZGlvIHV0IG1pIGJsYW5kaXQgZmFjaWxpc2lzIGVnZXQgZWdldCB0dXJwaXMuIERvbmVjIG5lYyBsdWN0dXMgbWFnbmEuIE51bGxhIGNvbnNlY3RldHVyIGlwc3VtIGV1IG5pYmggcGVsbGVudGVzcXVlLCBpbiBwdWx2aW5hciBudW5jIGZlcm1lbnR1bS4gTWF1cmlzIGZpbmlidXMsIGRpYW0gbmVjIG9ybmFyZSBjb25zZXF1YXQsIGFudGUgb3JjaSBmcmluZ2lsbGEgbnVuYywgdml0YWUgZmVybWVudHVtIHVybmEgcXVhbSBub24gaXBzdW0uCgpJbnRlZ2VyIGEgZmVybWVudHVtIHJpc3VzLiBEdWlzIHRpbmNpZHVudCBzZWQgbWFzc2EgcXVpcyBiaWJlbmR1bS4gRG9uZWMgdHJpc3RpcXVlIGR1aSBzaXQgYW1ldCBuZXF1ZSBjb25kaW1lbnR1bSBkaWN0dW0uIFNlZCBsYW9yZWV0IGR1aSB2aXRhZSBsdWN0dXMgZXVpc21vZC4gUHJvaW4gcmlzdXMgcmlzdXMsIGJpYmVuZHVtIHV0IG9kaW8gdml0YWUsIHZlaGljdWxhIGFsaXF1YW0gbGVjdHVzLiBEb25lYyBibGFuZGl0LCBudW5jIG5lYyBjb25zZWN0ZXR1ciBwb3J0dGl0b3IsIHB1cnVzIGRvbG9yIGNvbmd1ZSBtZXR1cywgdml0YWUgYWNjdW1zYW4gYXVndWUgbGliZXJvIGEgcmlzdXMuIEV0aWFtIG5lYyB0aW5jaWR1bnQgZXJhdC4gTnVsbGEgZXVpc21vZCBjdXJzdXMgZXJvcyB1dCBwbGFjZXJhdC4gRXRpYW0gY29uZ3VlLCBsaWd1bGEgbmVjIGRpZ25pc3NpbSBoZW5kcmVyaXQsIGxvcmVtIGRpYW0gdmVzdGlidWx1bSBvZGlvLCBldCBlZmZpY2l0dXIgbGVjdHVzIGxvcmVtIHZlbCBkaWFtLiBQZWxsZW50ZXNxdWUgcXVpcyBmYWNpbGlzaXMgcHVydXMuIEFsaXF1YW0gbWF4aW11cyBzZW0gZXUgdml2ZXJyYSBzdXNjaXBpdC4gUHJvaW4gaW4gbGlndWxhIGZlbGlzLgoKTWFlY2VuYXMgZmV1Z2lhdCBvZGlvIG51bmMsIGEgaWFjdWxpcyBzZW0gaW1wZXJkaWV0IGFjLiBOdWxsYW0gcG9ydHRpdG9yIHR1cnBpcyBxdWlzIGNvbnZhbGxpcyBpbXBlcmRpZXQuIEV0aWFtIGdyYXZpZGEgdWxsYW1jb3JwZXIgZmVsaXMsIHZhcml1cyBzb2RhbGVzIGxpYmVybyBwb3N1ZXJlIGNvbnNlY3RldHVyLiBDdXJhYml0dXIgZXUgdWx0cmljaWVzIG51bGxhLiBJbnRlZ2VyIHVsbGFtY29ycGVyIG9ybmFyZSBleCwgbHVjdHVzIGdyYXZpZGEganVzdG8gZWxlbWVudHVtIGEuIEluIGZpbmlidXMgZG9sb3IgcXVpcyBwZWxsZW50ZXNxdWUgbGFvcmVldC4gTWFlY2VuYXMgYWMgbGlndWxhIGluIG1hc3NhIGFjY3Vtc2FuIHRlbXBvciB2aXRhZSBzZWQgb2Rpby4gTmFtIG5lYyBsZWN0dXMgdXQgbnVsbGEgcGxhY2VyYXQgbWFsZXN1YWRhLiBBZW5lYW4gY29uZGltZW50dW0gcGxhY2VyYXQgdWxsYW1jb3JwZXIuIE51bGxhbSBpZCBlbGVpZmVuZCBkaWFtLiBOdWxsYSBhbnRlIG9kaW8sIHZvbHV0cGF0IG5vbiBsYWNpbmlhIHV0LCBwbGFjZXJhdCBzaXQgYW1ldCBsZWN0dXMuIEV0aWFtIHBvcnR0aXRvciBsb3JlbSBhYyBwb3J0YSB2b2x1dHBhdC4KClNlZCBhIHJ1dHJ1bSBsYWN1cy4gUHJvaW4gdGVtcHVzLCB0dXJwaXMgYWMgc29kYWxlcyB1bGxhbWNvcnBlciwgcmlzdXMgbmVxdWUgbGFvcmVldCBzZW0sIG5vbiBlZ2VzdGFzIG9kaW8gZXJvcyBldSB0ZWxsdXMuIEZ1c2NlIHNlZCBjb25zZXF1YXQgYW50ZS4gTWF1cmlzIGluIGVsaXQgZWdldCBpcHN1bSBmYXVjaWJ1cyB2YXJpdXMgcXVpcyB2aXRhZSBudW5jLiBQcm9pbiB1dCBzZW1wZXIgZHVpLCBpZCBsYW9yZWV0IHZlbGl0LiBRdWlzcXVlIGFsaXF1YW0gb3JjaSBlcm9zLCBlZ2V0IHRlbXB1cyBmZWxpcyB0ZW1wdXMgaWQuIFN1c3BlbmRpc3NlIGltcGVyZGlldCBuaXNsIG1hdXJpcywgYXQgZGFwaWJ1cyBhbnRlIHNvZGFsZXMgZXQuIE5hbSBlZ2V0IG1hbGVzdWFkYSBudW5jLiBQZWxsZW50ZXNxdWUgZXUgdmFyaXVzIHR1cnBpcywgc29sbGljaXR1ZGluIHNvZGFsZXMgb3JjaS4gUHJvaW4gdXQgdml2ZXJyYSBhcmN1LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzY2luZyBlbGl0LiBEb25lYyBxdWlzIG9ybmFyZSBkb2xvci4KCkRvbmVjIG1hc3NhIGxpYmVybywgZWxlbWVudHVtIHNpdCBhbWV0IHF1YW0gbmVjLCBhY2N1bXNhbiB2b2x1dHBhdCBwdXJ1cy4gQWxpcXVhbSBzaXQgYW1ldCBzdXNjaXBpdCBxdWFtLiBBZW5lYW4gdXQgb3JuYXJlIGR1aSwgbm9uIGxhb3JlZXQgbWFnbmEuIE51bmMgbmVjIGFsaXF1ZXQgbGVvLCBpbiBwdWx2aW5hciB2ZWxpdC4gTmFtIHVsdHJpY2VzIGluIG5pc2kgbmVjIHByZXRpdW0uIEZ1c2NlIG5lYyB0b3J0b3IgYWMgbGVvIGZlcm1lbnR1bSBjb252YWxsaXMuIENyYXMgbm9uIGV4IGF1Z3VlLiBNYXVyaXMgc2VkIGlwc3VtIGltcGVyZGlldCwgcHVsdmluYXIgZXggZXUsIHRlbXB1cyBhdWd1ZS4gRHVpcyBsYWNpbmlhLCBlbmltIGV1IHZhcml1cyB2b2x1dHBhdCwgYXVndWUgbnVuYyB0aW5jaWR1bnQgYW50ZSwgZXQgZGljdHVtIG5pc2kgbG9yZW0gaW4gbGVjdHVzLiBQcmFlc2VudCBtYWxlc3VhZGEgaW1wZXJkaWV0IGNvbmd1ZS4gUGhhc2VsbHVzIGxlbyBuaWJoLCB0ZW1wb3IgYSBzb2xsaWNpdHVkaW4gYWMsIHRpbmNpZHVudCBhIHF1YW0uIE1hZWNlbmFzIGluIHB1cnVzIG5vbiBsZWN0dXMgY29uZGltZW50dW0gbWFsZXN1YWRhLiBNb3JiaSBub24gdG9ydG9yIHNlZCBmZWxpcyBjb252YWxsaXMgYmxhbmRpdC4KCkZ1c2NlIHZvbHV0cGF0LCBkdWkgZWdldCBjb25ndWUgZGljdHVtLCBtYXNzYSBpcHN1bSBvcm5hcmUgbnVuYywgdXQgYWxpcXVldCBwdXJ1cyBsZWN0dXMgZXUgbWV0dXMuIE5hbSBpZCBqdXN0byBjdXJzdXMsIGNvbmd1ZSBzZW0gdmVsLCBhbGlxdWFtIG1hZ25hLiBQZWxsZW50ZXNxdWUgY29udmFsbGlzLCBuaXNpIHF1aXMgcnV0cnVtIG1vbGVzdGllLCBuZXF1ZSBvZGlvIHVsdHJpY2VzIGVzdCwgbm9uIGF1Y3RvciB0dXJwaXMgYW50ZSB2ZWwgbnVuYy4gUGhhc2VsbHVzIGJsYW5kaXQgZmVsaXMgYXQgc2VtIGZlcm1lbnR1bSBjb252YWxsaXMuIE5hbSBpYWN1bGlzLCBudWxsYSB2ZWwgY29uZ3VlIHZlbmVuYXRpcywgdmVsaXQganVzdG8gbGFjaW5pYSBsZWN0dXMsIGEgZGFwaWJ1cyBsaWd1bGEgcHVydXMgZWdldCBsZW8uIEluIGEgZGlnbmlzc2ltIGV4LiBOdWxsYW0gYWMgcmhvbmN1cyBsZW8uIFZpdmFtdXMgdmVzdGlidWx1bSBwb3J0YSBlcmF0LCB2aXRhZSBlbGVpZmVuZCBlbGl0LgoKQ3JhcyBpbXBlcmRpZXQgcnV0cnVtIHJob25jdXMuIE51bGxhbSBlZ2VzdGFzIHVybmEgaW4gZG9sb3IgdGVtcHVzIHRlbXBvci4gQWVuZWFuIGNvbW1vZG8gbWF0dGlzIHVsdHJpY2VzLiBOYW0gYSBlbGl0IGVyb3MuIERvbmVjIGEgdWxsYW1jb3JwZXIgZG9sb3IsIGlkIGNvbnNlY3RldHVyIHRlbGx1cy4gVXQgaWQgYXJjdSB2aXRhZSB0b3J0b3Igc2VtcGVyIGltcGVyZGlldC4gSW4gZWZmaWNpdHVyIGZlbGlzIHF1aXMgbG9yZW0gbWF0dGlzIHRpbmNpZHVudC4gTnVsbGFtIHNvbGxpY2l0dWRpbiBwb3J0YSBwdXJ1cyBldSB0cmlzdGlxdWUuIE5hbSBlZmZpY2l0dXIsIGFudGUgcG9ydHRpdG9yIGRhcGlidXMgdnVscHV0YXRlLCBkdWkgZXN0IHNlbXBlciBuaWJoLCBvcm5hcmUgcmhvbmN1cyByaXN1cyBkdWkgcXVpcyBxdWFtLgoKTW9yYmkgcmhvbmN1cyB0ZWxsdXMgYSBwb3J0dGl0b3IgbG9ib3J0aXMuIE51bGxhIGVnZXQgcHJldGl1bSB0dXJwaXMsIHZpdGFlIHZlc3RpYnVsdW0gYW50ZS4gUGhhc2VsbHVzIHNpdCBhbWV0IHNlbXBlciBlcm9zLCBub24gYWxpcXVhbSBmZWxpcy4gU3VzcGVuZGlzc2UgbWF1cmlzIHNlbSwgY29udmFsbGlzIGFjIHBlbGxlbnRlc3F1ZSBkYXBpYnVzLCBmYXVjaWJ1cyBpZCBuaXNsLiBWaXZhbXVzIHF1aXMgbGVjdHVzIGF0IHNhcGllbiBzY2VsZXJpc3F1ZSBhY2N1bXNhbiBldSBhIG9yY2kuIFN1c3BlbmRpc3NlIGEgcXVhbSB2ZWwgdmVsaXQgc29kYWxlcyBhbGlxdWFtLiBQZWxsZW50ZXNxdWUgaW50ZXJkdW0gZXQgcXVhbSBzZWQgcG9ydGEuIEV0aWFtIHZpdGFlIG1pIHByZXRpdW0sIGxvYm9ydGlzIGxlbyBldCwgdGVtcHVzIGxlY3R1cy4gTW9yYmkgaXBzdW0gbWV0dXMsIGJpYmVuZHVtIHNlZCBzZW1wZXIgc2VkLCBzY2VsZXJpc3F1ZSBzZWQgbWkuIFByYWVzZW50IGluIG9kaW8gcmhvbmN1cywgcGxhY2VyYXQgYXVndWUgaWQsIHRpbmNpZHVudCB0dXJwaXMuIERvbmVjIGF0IHBoYXJldHJhIG1ldHVzLiBOdWxsYW0gbGFvcmVldCBsZWN0dXMgdmVsIHF1YW0gY3Vyc3VzIGZldWdpYXQuIFBoYXNlbGx1cyBldCB2ZW5lbmF0aXMgbGlndWxhLCBhIHNvbGxpY2l0dWRpbiBtaS4gRXRpYW0gdXJuYSBsZWN0dXMsIGNvbmd1ZSB1dCB1bHRyaWNpZXMgaW4sIG1vbGVzdGllIGFjIGFyY3UuCgpDcmFzIGFjIGNvbnNlcXVhdCBlcm9zLiBEb25lYyBtZXR1cyBmZWxpcywgcHVsdmluYXIgYXQgbGFjaW5pYSBhYywgbWF0dGlzIHZlbCBsYWN1cy4gQWxpcXVhbSBzaXQgYW1ldCBmYXVjaWJ1cyB1cm5hLCBhdCBmaW5pYnVzIGVsaXQuIFN1c3BlbmRpc3NlIGZyaW5naWxsYSwgbWkgZXUgcG9zdWVyZSBwdWx2aW5hciwgYXVndWUgb2RpbyB2ZXN0aWJ1bHVtIGZlbGlzLCBhYyBtYXR0aXMgc2VtIG1pIGdyYXZpZGEgYW50ZS4gTnVsbGFtIGV0IGxpYmVybyB0dXJwaXMuIE51bmMgbWFsZXN1YWRhIHRvcnRvciB0aW5jaWR1bnQsIGN1cnN1cyBhcmN1IGVnZXQsIG1heGltdXMgYW50ZS4gSW4gaGFjIGhhYml0YXNzZSBwbGF0ZWEgZGljdHVtc3QuIE1hdXJpcyBuZWMgc2VtIGR1aS4gVXQgZmluaWJ1cyBsb3JlbSBub24gZW5pbSB2ZW5lbmF0aXMgdmVuZW5hdGlzLiBOdW5jIGluIGxpZ3VsYSBsZWN0dXMuIERvbmVjIGlhY3VsaXMgdWxsYW1jb3JwZXIgcXVhbSwgdGVtcG9yIHRyaXN0aXF1ZSBuaXNsIGV1aXNtb2QgZWdldC4gTmFtIHVsdHJpY2llcyB1cm5hIG5lYyB1cm5hIGVnZXN0YXMgaW50ZXJkdW0uIE1vcmJpIG1vbGxpcyBzZW0gdXQgZmVybWVudHVtIHZpdmVycmEuCgpEb25lYyBmZWxpcyBudW5jLCBzb2RhbGVzIHNvbGxpY2l0dWRpbiBlcmF0IGlkLCByaG9uY3VzIGN1cnN1cyBlc3QuIFByYWVzZW50IGF1Y3RvciBudW5jIGV1IG5lcXVlIGxhb3JlZXQgY3Vyc3VzLiBBbGlxdWFtIG1hdHRpcywgbmVxdWUgaW4gZmV1Z2lhdCB0ZW1wb3IsIHRvcnRvciB0dXJwaXMgcG9ydGEgbWFzc2EsIHZlbCBjb25kaW1lbnR1bSBlc3QgZXJhdCBub24gYW50ZS4gVmVzdGlidWx1bSBub24gbWFzc2EgZXUgc2VtIHZvbHV0cGF0IGx1Y3R1cyBpbiBxdWlzIG5pYmguIEluIGEgdGVsbHVzIGV1aXNtb2QsIHVsdHJpY2VzIG1hZ25hIGV0LCBldWlzbW9kIG1hdXJpcy4gRG9uZWMgaW1wZXJkaWV0IG5lYyB2ZWxpdCBldCB2ZWhpY3VsYS4gUHJhZXNlbnQgbWFnbmEgZXJvcywgbG9ib3J0aXMgc2l0IGFtZXQgbW9sbGlzIHV0LCBhbGlxdWV0IGVnZXQgbWV0dXMuIFNlZCBpZCB1bHRyaWNpZXMgbGVvLCBhIHBsYWNlcmF0IGxvcmVtLiBNYWVjZW5hcyB2aXRhZSBsYWN1cyB2ZWxpdC4gU2VkIGlhY3VsaXMgdGVsbHVzIGV1IG5pYmggYXVjdG9yIGZhdWNpYnVzLiBOdWxsYW0gZXQgZHVpIG5lYyBpcHN1bSBjb25zZXF1YXQgc2VtcGVyLiBBZW5lYW4gYWxpcXVhbSBlZ2V0IGlwc3VtIHZlbCBkaWN0dW0uIEN1cmFiaXR1ciBiaWJlbmR1bSwgb2RpbyBpbiBmZXJtZW50dW0gY29tbW9kbywgbmlzaSBlc3QgbGFvcmVldCBlbGl0LCBuZWMgZWdlc3RhcyBqdXN0byBhbnRlIHZpdGFlIGVuaW0uCgpRdWlzcXVlIGVsaXQgZG9sb3IsIG1vbGxpcyBpZCB0b3J0b3IgZGljdHVtLCBhdWN0b3Igc3VzY2lwaXQgcHVydXMuIFZpdmFtdXMgdmVsIGRpY3R1bSBhbnRlLCBxdWlzIGNvbnZhbGxpcyBvcmNpLiBOdW5jIGlkIHB1cnVzIGFjIGxlbyBlbGVpZmVuZCBsYW9yZWV0IGEgaWQgc2VtLiBNYXVyaXMgZXN0IGF1Z3VlLCBtYWxlc3VhZGEgYXQgbWkgbm9uLCBlbGVtZW50dW0gdHJpc3RpcXVlIGV4LiBEb25lYyBhYyBkdWkgbm9uIG5pc2kgY29uZGltZW50dW0gY29uc2VxdWF0LiBTZWQgY29uZGltZW50dW0gbWV0dXMgbm9uIGV4IGRpZ25pc3NpbSwgYXQgY29tbW9kbyBsaWd1bGEgZmV1Z2lhdC4gUGVsbGVudGVzcXVlIHF1aXMgYXJjdSBldCBxdWFtIGFjY3Vtc2FuIGludGVyZHVtIGV0IGluIHR1cnBpcy4KCk1hdXJpcyBlZmZpY2l0dXIgZXN0IGV1IG9yY2kgc2VtcGVyLCBhIGdyYXZpZGEgc2VtIHNhZ2l0dGlzLiBWZXN0aWJ1bHVtIHZpdGFlIHR1cnBpcyBjb21tb2RvLCByaG9uY3VzIG1ldHVzIGlkLCBtb2xsaXMgbmlzaS4gUHJhZXNlbnQgdml0YWUgdGVtcHVzIHVybmEuIFZpdmFtdXMgZnJpbmdpbGxhIG1hZ25hIG5pc2ksIHV0IGx1Y3R1cyBsZW8gZGljdHVtIGFjLiBTZWQgaW50ZXJkdW0gZWdlc3RhcyBlcmF0IHNlZCBtYXhpbXVzLiBEb25lYyB1bHRyaWNlcyBhbGlxdWFtIGZhdWNpYnVzLiBNYWVjZW5hcyBpZCBleCBpbiBsYWN1cyBjdXJzdXMgY29udmFsbGlzIGFjIHNlZCBuZXF1ZS4gQWVuZWFuIGxlY3R1cyBuaWJoLCBwaGFyZXRyYSBzZWQgbGFvcmVldCBuZWMsIHNhZ2l0dGlzIGEgdG9ydG9yLiBGdXNjZSBlZ2VzdGFzIG5pc2kgc2VkIG1hdHRpcyBhY2N1bXNhbi4gU2VkIHV0IHRvcnRvciBhYyBvZGlvIG1hbGVzdWFkYSBlbGVpZmVuZCB2ZWwgbmVjIGVsaXQuIEludGVnZXIgYXVjdG9yLCBuaXNsIGluIG1vbGVzdGllIHVsdHJpY2VzLCBpcHN1bSBuaXNsIGRpY3R1bSB0dXJwaXMsIHZpdGFlIGZlcm1lbnR1bSBpcHN1bSBhdWd1ZSBldSBmZWxpcy4gTmFtIHRlbXB1cyBibGFuZGl0IHVsdHJpY2VzLgoKU3VzcGVuZGlzc2Ugc2VtIHRvcnRvciwgbGFjaW5pYSB2aXRhZSBkdWkgdmVsLCBiaWJlbmR1bSBkaWN0dW0gc2FwaWVuLiBQZWxsZW50ZXNxdWUgdXQgZXN0IHV0IGxpZ3VsYSBwb3J0dGl0b3IgYWxpcXVldC4gRG9uZWMgZXQgc29sbGljaXR1ZGluIGV4LCBhdCBoZW5kcmVyaXQgbmVxdWUuIER1aXMgdXQgdmVsaXQgbmVxdWUuIEluIGJsYW5kaXQgbWFzc2EgYXQgc2FwaWVuIHBlbGxlbnRlc3F1ZSBwZWxsZW50ZXNxdWUuIFZpdmFtdXMgc2VkIHNhcGllbiBsaWd1bGEuIEV0aWFtIG1pIHB1cnVzLCBkaWduaXNzaW0gZXQgbWF4aW11cyBpbiwgY3Vyc3VzIHNlZCBwdXJ1cy4KClN1c3BlbmRpc3NlIHVsdHJpY2llcyBuaXNpIGEgbG9yZW0gcGVsbGVudGVzcXVlLCBpZCB1bGxhbWNvcnBlciBxdWFtIHNvZGFsZXMuIEFsaXF1YW0gcHVsdmluYXIgZXN0IHF1aXMgaW50ZXJkdW0gc29kYWxlcy4gVml2YW11cyBsYWN1cyBuaXNpLCBsYW9yZWV0IHNlZCBuaXNpIHNlbXBlciwgcmhvbmN1cyBmYWNpbGlzaXMgZG9sb3IuIFN1c3BlbmRpc3NlIG5pYmggbG9yZW0sIG1hbGVzdWFkYSB2aXRhZSBvZGlvIHV0LCBjb25zZWN0ZXR1ciBtYXR0aXMgZXJvcy4gTnVsbGEgZmFjaWxpc2kuIEZ1c2NlIGEgdG9ydG9yIG5vbiBsb3JlbSBldWlzbW9kIHBsYWNlcmF0IGVnZXQgdXQgbG9yZW0uIER1aXMgZGlhbSBkb2xvciwgbGFjaW5pYSBpZCBlcm9zIGF0LCBzY2VsZXJpc3F1ZSBjb25kaW1lbnR1bSByaXN1cy4gTmFtIHZvbHV0cGF0IGxlY3R1cyBsYWN1cywgc2l0IGFtZXQgZGFwaWJ1cyBxdWFtIHZlaGljdWxhIHZpdGFlLiBJbnRlZ2VyIHBlbGxlbnRlc3F1ZSBlbGl0IGV0IGZlbGlzIHZlc3RpYnVsdW0sIGF0IG1hdHRpcyBlbmltIGZyaW5naWxsYS4gTW9yYmkgaGVuZHJlcml0IG1hbGVzdWFkYSBleCwgZXQgY29uZGltZW50dW0gZG9sb3IgZGFwaWJ1cyBzaXQgYW1ldC4gRG9uZWMgbGliZXJvIGxhY3VzLCBwaGFyZXRyYSBlZ2V0IG1heGltdXMgZWdldCwgcG9ydHRpdG9yIG5lYyBlcmF0LiBTZWQgZmV1Z2lhdCBvZGlvIG5vbiBsb3JlbSB2b2x1dHBhdCBsYW9yZWV0LiBQaGFzZWxsdXMgdXQgY29udmFsbGlzIHVybmEsIHNpdCBhbWV0IGZyaW5naWxsYSBlcmF0LiBWZXN0aWJ1bHVtIHV0IGRpYW0gcnV0cnVtLCBwcmV0aXVtIGp1c3RvIG5lYywgdnVscHV0YXRlIGlwc3VtLgoKQWxpcXVhbSBpbiBlZmZpY2l0dXIgZmVsaXMsIGFjIGludGVyZHVtIG5pc2kuIFByb2luIGF1Y3RvciBsZW8gZWdldCBsaWJlcm8gcGhhcmV0cmEgbGFvcmVldC4gTnVsbGEgdGVtcG9yIGZyaW5naWxsYSB2YXJpdXMuIE1hZWNlbmFzIGluIHVsbGFtY29ycGVyIGFyY3UuIER1aXMgcmhvbmN1cyBwcmV0aXVtIHJob25jdXMuIEluIGFjIGRpZ25pc3NpbSB0dXJwaXMuIENyYXMgbWF0dGlzIG9yY2kgZXN0LCB1dCB1bHRyaWNpZXMgZXN0IGZyaW5naWxsYSBxdWlzLiBEdWlzIGZlcm1lbnR1bSBhY2N1bXNhbiB1bHRyaWNpZXMuIEFlbmVhbiBtYXhpbXVzIGVuaW0gbm9uIG51bmMgZmV1Z2lhdCwgZXQgdGluY2lkdW50IG1ldHVzIGNvbnZhbGxpcy4gVmVzdGlidWx1bSBkYXBpYnVzIGVnZXN0YXMgcHVsdmluYXIuIFNlZCBlbGVpZmVuZCBmYWNpbGlzaXMgbWFzc2EgZWdldCBwbGFjZXJhdC4KClByYWVzZW50IGNvbnZhbGxpcyBudWxsYSBxdWlzIGFudGUgYWxpcXVhbSBoZW5kcmVyaXQuIE51bGxhIG5lYyBuZXF1ZSBub24gbnVsbGEgdHJpc3RpcXVlIGxvYm9ydGlzIHV0IHF1aXMgbmliaC4gUHJvaW4gZnJpbmdpbGxhIGJpYmVuZHVtIGlwc3VtLCB2aXRhZSBlZmZpY2l0dXIgbnVsbGEgc2FnaXR0aXMgbm9uLiBOYW0gYWMgbWF4aW11cyBpcHN1bS4gRnVzY2UgbG9ib3J0aXMgdWx0cmljaWVzIG9yY2kgcXVpcyBzYWdpdHRpcy4gU3VzcGVuZGlzc2UgbmVjIHZ1bHB1dGF0ZSBvcmNpLiBGdXNjZSBuZWMgZmV1Z2lhdCBhdWd1ZS4KCk1hZWNlbmFzIGNvbW1vZG8gZW5pbSB1dCBvcmNpIGxvYm9ydGlzLCBxdWlzIG1heGltdXMgZXJvcyBzY2VsZXJpc3F1ZS4gU2VkIHV0IHR1cnBpcyB2ZWhpY3VsYSwgdnVscHV0YXRlIG5pYmggaW4sIGZyaW5naWxsYSBvZGlvLiBQcm9pbiBlZ2V0IG9yY2kgbWFzc2EuIE51bGxhIGVnZXQgaWFjdWxpcyBqdXN0by4gU2VkIGRpZ25pc3NpbSBlcmF0IHF1aXMgbWkgaWFjdWxpcywgbmVjIHRlbXB1cyBvZGlvIGVsZWlmZW5kLiBEdWlzIHVsbGFtY29ycGVyIHN1c2NpcGl0IGxhY3VzLCBhdCBncmF2aWRhIG5lcXVlLiBTdXNwZW5kaXNzZSBwdWx2aW5hciBvcm5hcmUgYW50ZSBpZCBhdWN0b3IuIEludGVnZXIgbnVuYyBuZXF1ZSwgc29kYWxlcyBub24gc2VtIG5lYywgZGlnbmlzc2ltIHNvZGFsZXMgdmVsaXQuCgpOdWxsYW0gcGxhY2VyYXQgcHJldGl1bSBxdWFtLCBpZCB2b2x1dHBhdCBlc3QgdnVscHV0YXRlIGlkLiBWaXZhbXVzIG1vbGxpcyBsYWNpbmlhIGR1aSwgYSBzYWdpdHRpcyBsZW8gcG9ydGEgbm9uLiBGdXNjZSBhYyBkdWkgbGliZXJvLiBOdWxsYSB1bHRyaWNlcyB2aXRhZSBvcmNpIHV0IHRlbXBvci4gTWF1cmlzIGhlbmRyZXJpdCwgcmlzdXMgYSBjdXJzdXMgbGFjaW5pYSwgZG9sb3IgZXJhdCBwZWxsZW50ZXNxdWUgbWksIGVnZXQgcmhvbmN1cyBlbGl0IGRpYW0gdmVsIHRvcnRvci4gRHVpcyBuZWMgdmVuZW5hdGlzIG5pc2wsIGV0IGV1aXNtb2QgZXJhdC4gTWFlY2VuYXMgbmVjIHN1c2NpcGl0IGp1c3RvLiBRdWlzcXVlIGV1IG5pYmggbW9sbGlzIGVuaW0gcG9zdWVyZSB2ZWhpY3VsYSBuZWMgbmVjIHVybmEuIEluIGltcGVyZGlldCBpYWN1bGlzIGFyY3UgYWMgc29sbGljaXR1ZGluLiBOYW0gdXQgZGlhbSByaXN1cy4KCkRvbmVjIHZpdGFlIHNhcGllbiBub24gdGVsbHVzIGxvYm9ydGlzIGZlcm1lbnR1bSBhdCB2aXRhZSBsaWd1bGEuIFBlbGxlbnRlc3F1ZSB2aXZlcnJhIGdyYXZpZGEgbGliZXJvLCB1dCB1bGxhbWNvcnBlciBmZWxpcy4gUGhhc2VsbHVzIGVnZXN0YXMgYSBsb3JlbSBzZWQgcG9zdWVyZS4gTmFtIHZlbmVuYXRpcyBlc3Qgbm9uIHRlbXB1cyB2ZW5lbmF0aXMuIE1hZWNlbmFzIHZlbCB1bHRyaWNlcyBtaSwgaWQgYWxpcXVldCBlc3QuIE51bGxhbSBmZXJtZW50dW0gb3JjaSBpbiBhcmN1IHZ1bHB1dGF0ZSwgYXQgdmVuZW5hdGlzIGxpZ3VsYSB2aXZlcnJhLiBNb3JiaSBub24gZmVsaXMgZXUgdG9ydG9yIGxhY2luaWEgY29uZGltZW50dW0uIEludGVnZXIgbWFzc2EgbmlzaSwgdWx0cmljaWVzIHNlZCBudW5jIHF1aXMsIG9ybmFyZSBwcmV0aXVtIHNlbS4gVml2YW11cyBzYXBpZW4gYXJjdSwgc29sbGljaXR1ZGluIGlhY3VsaXMgbWFzc2EgbmVjLCBpbnRlcmR1bSB2YXJpdXMgbWFzc2EuIFByYWVzZW50IGF1Y3RvciB0ZWxsdXMgZWdldCBtb2xsaXMgdWxsYW1jb3JwZXIuIEFsaXF1YW0gZXQgZXggdHVycGlzLiBOdW5jIHJ1dHJ1bSBiaWJlbmR1bSBpYWN1bGlzLiBQaGFzZWxsdXMgZnJpbmdpbGxhIGxhb3JlZXQgZGlhbS4gSW50ZWdlciBzaXQgYW1ldCB2ZWxpdCBtaS4gTmFtIHZpdmVycmEgYWNjdW1zYW4gZmF1Y2lidXMuIE5hbSBsaWJlcm8gdGVsbHVzLCBwdWx2aW5hciBuZWMgZXggZXUsIHBsYWNlcmF0IHZvbHV0cGF0IGRpYW0uCgpEb25lYyB1bHRyaWNpZXMsIHNlbSBpbiBlbGVtZW50dW0gcmhvbmN1cywgZXN0IHVybmEgdGluY2lkdW50IG1ldHVzLCB2aXZlcnJhIGRhcGlidXMgb2RpbyBudWxsYSBuZWMgdG9ydG9yLiBFdGlhbSBhIGNvbmd1ZSBmZWxpcywgZWdldCB0ZW1wb3IgbG9yZW0uIEZ1c2NlIG1vbGxpcyBzYWdpdHRpcyBtYXNzYSwgdml0YWUgc2FnaXR0aXMgZG9sb3IgY3Vyc3VzIHNlbXBlci4gU2VkIG9ybmFyZSBhdWd1ZSBldCBsZWN0dXMgaGVuZHJlcml0LCBpbiBpbnRlcmR1bSBvcmNpIHBsYWNlcmF0LiBJbiBmYXVjaWJ1cyBpYWN1bGlzIG9ybmFyZS4gQWxpcXVhbSBlcmF0IHZvbHV0cGF0LiBFdGlhbSB0ZW1wb3IgbGlndWxhIGFjIHZlc3RpYnVsdW0gYmliZW5kdW0uIFByYWVzZW50IGJsYW5kaXQsIG9yY2kgcXVpcyBjb25kaW1lbnR1bSB2aXZlcnJhLCB0ZWxsdXMgb2RpbyBzdXNjaXBpdCBuaXNpLCBuZWMgYWNjdW1zYW4gc2VtIHRvcnRvciBldSBleC4gUHJhZXNlbnQgdmVzdGlidWx1bSBsYWN1cyB0dXJwaXMsIHF1aXMgcGVsbGVudGVzcXVlIGxpYmVybyBoZW5kcmVyaXQgc2l0IGFtZXQuIE51bGxhbSB0ZW1wb3IsIG51bGxhIGluIGludGVyZHVtIGJsYW5kaXQsIG1hdXJpcyBuaWJoIHZlbmVuYXRpcyBudW5jLCBzaXQgYW1ldCBhbGlxdWFtIHJpc3VzIGVsaXQgbm9uIGVsaXQuIER1aXMgYSBhdWN0b3Igb3JjaS4gUXVpc3F1ZSBibGFuZGl0IHZpdGFlIGVuaW0gZWdldCBjb25zZXF1YXQuCgpTdXNwZW5kaXNzZSBwb3RlbnRpLiBNYXVyaXMgc2l0IGFtZXQgZmFjaWxpc2lzIGR1aSwgaW4gdGluY2lkdW50IG9kaW8uIE1hdXJpcyBkdWkgcXVhbSwgZmVybWVudHVtIGVnZXQgYWxpcXVhbSB2aXRhZSwgY29uc2VjdGV0dXIgcG9zdWVyZSBudWxsYS4gVXQgZmFjaWxpc2lzIGFyY3UgZG9sb3IsIHZlbCBlbGVpZmVuZCBtYWduYSBsYW9yZWV0IHNlZC4gVXQgbHVjdHVzIHB1cnVzIGV0IHNlbSByaG9uY3VzIGFsaXF1ZXQuIE5hbSBtb2xsaXMsIHB1cnVzIGluIGNvbmd1ZSBkaWN0dW0sIG51bGxhIGZlbGlzIHNvbGxpY2l0dWRpbiByaXN1cywgc2VkIGx1Y3R1cyBzZW0gYXVndWUgaWQgbWkuIERvbmVjIGVsZW1lbnR1bSBlcmF0IGEgbmlzaSBwZWxsZW50ZXNxdWUgZGlnbmlzc2ltLiBEb25lYyBhdCBtYWduYSBjb252YWxsaXMsIHRyaXN0aXF1ZSBleCBhYywgdWx0cmljaWVzIHZlbGl0LiBOdW5jIGF1Y3RvciBmZXVnaWF0IHB1cnVzIGEgc3VzY2lwaXQuIE51bmMgZXUgcnV0cnVtIG1ldHVzLiBOYW0gdmVuZW5hdGlzIGRvbG9yIHRvcnRvciwgc2VkIGFjY3Vtc2FuIGVzdCB0cmlzdGlxdWUgdml0YWUuIFByYWVzZW50IGVsZWlmZW5kIG5lYyBqdXN0byBzaXQgYW1ldCBhdWN0b3IuIFZlc3RpYnVsdW0gc2VkIGxvcmVtIGFjIGFyY3UgcHJldGl1bSBjb25kaW1lbnR1bSBub24gbGFvcmVldCBvcmNpLiBEb25lYyBmYXVjaWJ1cyBzZWQgbGVvIGF0IGNvbnNlY3RldHVyLiBJbnRlZ2VyIGNvbnNlcXVhdCBsYWN1cyBhYyBtb2xsaXMgYmliZW5kdW0uIEZ1c2NlIGVsZWlmZW5kIGZlbGlzIGVnZXQgbnVsbGEgY29tbW9kbyBkYXBpYnVzIG5vbiBpbiB1cm5hLgoKTnVsbGEgZmFjaWxpc2kuIE5hbSBvcm5hcmUgbm9uIGVsaXQgYWMgYWxpcXVhbS4gTmFtIHNlZCBkdWkgYXQgcmlzdXMgbGFvcmVldCB2b2x1dHBhdC4gTnVsbGEgdXQgbW9sZXN0aWUgZW5pbS4gVmVzdGlidWx1bSBzaXQgYW1ldCBtaSBhbGlxdWV0LCBjdXJzdXMganVzdG8gZXUsIGRpY3R1bSBtYXVyaXMuIE51bGxhbSB0ZW1wdXMgdmVuZW5hdGlzIGRhcGlidXMuIFByYWVzZW50IGRpY3R1bSBudW5jIHV0IGNvbnZhbGxpcyBjb25ndWUuIFNlZCBlcm9zIG1hdXJpcywgdm9sdXRwYXQgYWMgdnVscHV0YXRlIG5lYywgZWxlbWVudHVtIG5lYyBkaWFtLiBGdXNjZSBtYXhpbXVzIGVzdCB0dXJwaXMsIG5vbiBmZXJtZW50dW0gc2FwaWVuIHBvcnR0aXRvciBzaXQgYW1ldC4gTnVsbGEgbm9uIHRpbmNpZHVudCBtaS4gTnVuYyBsb2JvcnRpcyBlZ2V0IGxhY3VzIG5vbiBjb25ndWUuCgpWaXZhbXVzIGdyYXZpZGEgYSBkaWFtIG5lYyBhbGlxdWV0LiBOdWxsYW0gY29uZGltZW50dW0gaXBzdW0gZXQgYXVndWUgdGluY2lkdW50IHNlbXBlci4gTnVsbGFtIHBoYXJldHJhIHJob25jdXMgcHJldGl1bS4gTWF1cmlzIGxvcmVtIG1ldHVzLCBzY2VsZXJpc3F1ZSB1dCBvZGlvIGV0LCB2ZW5lbmF0aXMgdWx0cmljZXMgbGliZXJvLiBOdW5jIHV0IGV4IG5pc2kuIE51bGxhIGRhcGlidXMgdHVycGlzIGFjIHZlc3RpYnVsdW0gaW1wZXJkaWV0LiBTZWQgYWxpcXVldCBlbGl0IGluIGltcGVyZGlldCBtYXhpbXVzLiBWaXZhbXVzIGNvbmRpbWVudHVtIHZlc3RpYnVsdW0gaXBzdW0sIHZlbCBhY2N1bXNhbiBsb3JlbSB2ZXN0aWJ1bHVtIHF1aXMuIEludGVnZXIgbGVjdHVzIG51bmMsIGVsZW1lbnR1bSBhdCBpbnRlcmR1bSB2aXRhZSwgdWx0cmljaWVzIHV0IG5pc2kuIEV0aWFtIHNlbXBlciB1bHRyaWNpZXMgcmlzdXMgYWMgZGlnbmlzc2ltLiBQZWxsZW50ZXNxdWUgaGFiaXRhbnQgbW9yYmkgdHJpc3RpcXVlIHNlbmVjdHVzIGV0IG5ldHVzIGV0IG1hbGVzdWFkYSBmYW1lcyBhYyB0dXJwaXMgZWdlc3Rhcy4gUGVsbGVudGVzcXVlIHZpdGFlIGxvcmVtIGhlbmRyZXJpdCwgbWF0dGlzIG1hZ25hIG5vbiwgZWxlaWZlbmQgdGVsbHVzLiBDcmFzIHR1cnBpcyBtaSwgdGluY2lkdW50IGVnZXQgbWF1cmlzIHNlZCwgdmFyaXVzIGltcGVyZGlldCB2ZWxpdC4KClV0IHN1c2NpcGl0IHRlbXBvciBtaSwgdmVsIHJ1dHJ1bSBkaWFtIGxvYm9ydGlzIGV1LiBTZWQgc2l0IGFtZXQgdWxsYW1jb3JwZXIgcHVydXMuIEludGVnZXIgbG9yZW0gbGlndWxhLCBmZXVnaWF0IGF0IHRlbXB1cyBhLCBzYWdpdHRpcyB2b2x1dHBhdCBhbnRlLiBQZWxsZW50ZXNxdWUgc29sbGljaXR1ZGluIGxhY3VzIGV0IG1hc3NhIHJ1dHJ1bSBzdXNjaXBpdC4gUHJvaW4gc2VtcGVyIGxhY3VzIGEgbnVuYyBzZW1wZXIsIHZlbCBlZ2VzdGFzIGVsaXQgcmhvbmN1cy4gQ3VyYWJpdHVyIG1vbGxpcyBtZXR1cyBldCBudW5jIHNlbXBlciBjb25ndWUuIFN1c3BlbmRpc3NlIHNvZGFsZXMgbGVvIGRpYW0sIGF0IGFjY3Vtc2FuIGRvbG9yIGNvbnZhbGxpcyB2aXRhZS4KClZpdmFtdXMgdmVsIG5lcXVlIHByZXRpdW0sIG1hdHRpcyByaXN1cyBpbiwgZWxlaWZlbmQgbGFjdXMuIFZpdmFtdXMgc2VkIHZlbmVuYXRpcyBpcHN1bSwgbm9uIHNlbXBlciBhdWd1ZS4gUGhhc2VsbHVzIGEgbGliZXJvIGxlY3R1cy4gTnVsbGFtIG9ybmFyZSBhcmN1IGxvcmVtLCBpZCBzZW1wZXIgbGlndWxhIHBvcnRhIGV1LiBQZWxsZW50ZXNxdWUgdml2ZXJyYSBsb3JlbSBhdCBkb2xvciBlZ2VzdGFzIGxhY2luaWEuIFByYWVzZW50IHN1c2NpcGl0IGF0IGVzdCBlZ2V0IGdyYXZpZGEuIEFsaXF1YW0gdmVsIHBsYWNlcmF0IG1pLiBDdXJhYml0dXIgYSBzY2VsZXJpc3F1ZSB0b3J0b3IuIEluIHZpdmVycmEgbnVuYyBzaXQgYW1ldCBlcm9zIHB1bHZpbmFyLCBzaXQgYW1ldCBkYXBpYnVzIGxpYmVybyBmaW5pYnVzLiBRdWlzcXVlIHZpdGFlIHZlaGljdWxhIGVyb3MuIE1hZWNlbmFzIGdyYXZpZGEgZW5pbSBxdWlzIGVuaW0gZGljdHVtLCBzZWQgbGFjaW5pYSBsaWd1bGEgdm9sdXRwYXQuIFF1aXNxdWUgZmV1Z2lhdCBwdXJ1cyBpZCBydXRydW0gbWFsZXN1YWRhLiBTZWQgdmVzdGlidWx1bSBkaWFtIHBvcnR0aXRvciBmZWxpcyBmZXJtZW50dW0gY29tbW9kby4gTWFlY2VuYXMgbGlndWxhIGxlY3R1cywgZmFjaWxpc2lzIGluIGNvbW1vZG8gZXQsIGVnZXN0YXMgcXVpcyBuaXNpLiBTZWQgYWMgbG9yZW0gZWxlbWVudHVtLCBiaWJlbmR1bSBhbnRlIGV1LCB0cmlzdGlxdWUgZXguCgpOdW5jIGFjIGhlbmRyZXJpdCBuaXNsLCBxdWlzIGVmZmljaXR1ciBvZGlvLiBFdGlhbSBzZW0gbGVjdHVzLCBhbGlxdWFtIGNvbnNlcXVhdCBjb25zZXF1YXQgdmVsLCBmZXJtZW50dW0gc2VkIGFyY3UuIFV0IHVsdHJpY2VzIHF1YW0gdm9sdXRwYXQsIGFsaXF1ZXQgZXggbm9uLCBhbGlxdWV0IG51bmMuIE51bGxhIGZhY2lsaXNpLiBRdWlzcXVlIG1vbGVzdGllIHB1cnVzIGVnZXQgZXJvcyBsb2JvcnRpcywgaWQgZnJpbmdpbGxhIGRpYW0gbG9ib3J0aXMuIE1hZWNlbmFzIG1vbGVzdGllIHZlbGl0IHNlZCBudW5jIGx1Y3R1cyBhdWN0b3IuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNjaW5nIGVsaXQuIEluIGNvbmRpbWVudHVtLCBxdWFtIGV1IGFsaXF1YW0gaW50ZXJkdW0sIHB1cnVzIGxlbyBlZmZpY2l0dXIgb3JjaSwgdml0YWUgcGhhcmV0cmEgZHVpIGp1c3RvIGF0IHJpc3VzLgoKRXRpYW0gYWNjdW1zYW4gcXVpcyBudW5jIHNpdCBhbWV0IHZlbmVuYXRpcy4gTnVsbGFtIG9ybmFyZSBsYWNpbmlhIHR1cnBpcyBhIGVsZW1lbnR1bS4gU3VzcGVuZGlzc2UgZmVsaXMgbmVxdWUsIGNvbnNlY3RldHVyIGVnZXQgZ3JhdmlkYSB2aXRhZSwgZWZmaWNpdHVyIHZpdGFlIGFudGUuIFV0IGludGVyZHVtIHB1cnVzIGV4LiBDbGFzcyBhcHRlbnQgdGFjaXRpIHNvY2lvc3F1IGFkIGxpdG9yYSB0b3JxdWVudCBwZXIgY29udWJpYSBub3N0cmEsIHBlciBpbmNlcHRvcyBoaW1lbmFlb3MuIFF1aXNxdWUgdGluY2lkdW50LCBhdWd1ZSBzZWQgYmliZW5kdW0gb3JuYXJlLCBvZGlvIG51bGxhIGZyaW5naWxsYSBlcm9zLCBxdWlzIGN1cnN1cyBhdWd1ZSBudW5jIG5vbiBlcmF0LiBQcmFlc2VudCBldSB2ZWxpdCBldCBhdWd1ZSBhdWN0b3IgZWdlc3Rhcy4gU2VkIGxhb3JlZXQgdGVsbHVzIGlkIGFudGUgdnVscHV0YXRlIHZlc3RpYnVsdW0gYWMgc2VkIG1hdXJpcy4gVmVzdGlidWx1bSBwcmV0aXVtIHR1cnBpcyBldCBtYXNzYSB2ZXN0aWJ1bHVtLCBzaXQgYW1ldCBhdWN0b3IgbWV0dXMgY29udmFsbGlzLiBDcmFzIG5pc2wgYXVndWUsIHRyaXN0aXF1ZSBpZCBleCBpZCwgdml2ZXJyYSBsdWN0dXMgZmVsaXMuIEludGVnZXIgZ3JhdmlkYSBlbmltIG51bmMsIHZpdGFlIHVsdHJpY2llcyBsZWN0dXMgZGFwaWJ1cyBub24uIFByYWVzZW50IG5pc2kgb3JjaSwgbGFvcmVldCBzaXQgYW1ldCBtYXhpbXVzIHV0LCBlZmZpY2l0dXIgYSBmZWxpcy4gUHJvaW4gc2VkIG51bGxhIHZpdGFlIGxlbyBtb2xsaXMgcGhhcmV0cmEgZXQgZXUgc2FwaWVuLgoKUGVsbGVudGVzcXVlIHB1cnVzIG1pLCBzZW1wZXIgcXVpcyBlcmF0IG5vbiwgZWdlc3RhcyBkYXBpYnVzIGxlY3R1cy4gVml2YW11cyBtYXhpbXVzIHZlbmVuYXRpcyB2ZWxpdCwgZWdldCBtb2xsaXMgbmVxdWUgaWFjdWxpcyBhdC4gTnVuYyBtYXhpbXVzIG1hdHRpcyBuaWJoIHNlZCBjb252YWxsaXMuIFByb2luIHZlbmVuYXRpcyBlc3QgaW4gbWkgdml2ZXJyYSwgaWQgbGFjaW5pYSByaXN1cyBlbGVtZW50dW0uIFZlc3RpYnVsdW0gZHVpIHVybmEsIGJpYmVuZHVtIGV0IGNvbnNlY3RldHVyIGV0LCBibGFuZGl0IHF1aXMgbGliZXJvLiBQcm9pbiBjb25ndWUgdnVscHV0YXRlIGR1aSBlZ2V0IGxhY2luaWEuIFByb2luIHByZXRpdW0gbGFjaW5pYSBlcm9zIGlkIGxhb3JlZXQuIFNlZCBzZWQgb2RpbyBuZWMgcmlzdXMgbWFsZXN1YWRhIHRpbmNpZHVudCBmaW5pYnVzIGluIHZlbGl0LiBEdWlzIGZhdWNpYnVzIG9kaW8gdml0YWUgYXVndWUgaGVuZHJlcml0IGFsaXF1ZXQuIFBlbGxlbnRlc3F1ZSBuZWMgZXJvcyBuaXNsLiBBbGlxdWFtIG51bmMgbGVvLCBmYWNpbGlzaXMgbmVjIGx1Y3R1cyB2aXRhZSwgZnJpbmdpbGxhIHF1aXMgc2FwaWVuLiBPcmNpIHZhcml1cyBuYXRvcXVlIHBlbmF0aWJ1cyBldCBtYWduaXMgZGlzIHBhcnR1cmllbnQgbW9udGVzLCBuYXNjZXR1ciByaWRpY3VsdXMgbXVzLiBVdCBuZWMgdmVzdGlidWx1bSBkdWkuIER1aXMgYSB0ZWxsdXMgcXVhbS4KCk1vcmJpIHRpbmNpZHVudCBuaXNpIG1hc3NhLCBldCB2ZXN0aWJ1bHVtIGF1Z3VlIHZpdmVycmEgZXUuIFNlZCBhbnRlIG5pc2wsIHVsdHJpY2llcyB1dCBjb25zZWN0ZXR1ciBhLCBjb25zZXF1YXQgdmVsIGlwc3VtLiBDcmFzIGludGVyZHVtIGxhb3JlZXQgZmVsaXMsIGFjIHN1c2NpcGl0IHJpc3VzIHBoYXJldHJhIHZpdGFlLiBQZWxsZW50ZXNxdWUgdGVtcHVzIGxvcmVtIHF1aXMgc2FnaXR0aXMgY29uc2VxdWF0LiBEdWlzIHF1aXMgZXJhdCBsZW8uIFNlZCBpbnRlcmR1bSBtYXNzYSBkaWFtLCBzZWQgaW1wZXJkaWV0IHR1cnBpcyB0aW5jaWR1bnQgaW4uIEludGVnZXIgcXVpcyB1bGxhbWNvcnBlciBkb2xvci4gUGhhc2VsbHVzIHZvbHV0cGF0IHF1YW0gdmVsIGNvbnNlY3RldHVyIGx1Y3R1cy4gRnVzY2UgbW9sZXN0aWUgc2NlbGVyaXNxdWUgbmVxdWUsIHZlbCB0ZW1wdXMgb3JjaSBsdWN0dXMgdml0YWUuIFZpdmFtdXMgZ3JhdmlkYSB0b3J0b3IgZG9sb3IsIGV1IHRpbmNpZHVudCBkaWFtIGNvbW1vZG8gaW4uCgpWZXN0aWJ1bHVtIGEgdmVsaXQgZmF1Y2lidXMsIG9ybmFyZSBtYWduYSB2ZWwsIGxvYm9ydGlzIGVzdC4gRHVpcyBzYWdpdHRpcyBsaWd1bGEgY29uc2VjdGV0dXIsIHJob25jdXMgZXJhdCB2aXRhZSwgaW50ZXJkdW0gdXJuYS4gQWxpcXVhbSBlbmltIGp1c3RvLCBwb3J0YSBpbiB0ZW1wdXMgdmVsLCBibGFuZGl0IHF1aXMgcXVhbS4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gRG9uZWMgaGVuZHJlcml0IGFudGUgYWMgbmlzaSBsYW9yZWV0IHBvcnRhLiBEdWlzIHNlZCBzYXBpZW4gZXUgdGVsbHVzIGRpY3R1bSBwcmV0aXVtIGEgc2VkIG5pc2wuIFNlZCBjb25kaW1lbnR1bSBtYXNzYSBhYyBlcmF0IHNvbGxpY2l0dWRpbiwgdmVzdGlidWx1bSBzZW1wZXIgZmVsaXMgcmhvbmN1cy4gQWVuZWFuIGVnZXQgdXJuYSBzaXQgYW1ldCBlbmltIHZpdmVycmEgc2NlbGVyaXNxdWUuIFByb2luIGludGVyZHVtIGZpbmlidXMgcXVhbSwgdml0YWUgZmluaWJ1cyBtaSBjb25zZXF1YXQgdml0YWUuCgpGdXNjZSB2dWxwdXRhdGUgb3JjaSBldSBmYWNpbGlzaXMgcGxhY2VyYXQuIFByYWVzZW50IGFjIG5pYmggZXQgdXJuYSBtb2xlc3RpZSBzY2VsZXJpc3F1ZS4gTWF1cmlzIHF1YW0gbWV0dXMsIGZpbmlidXMgaWQgbmlzaSBldCwgZmluaWJ1cyBkaWN0dW0gbWV0dXMuIEluIHVybmEgZXJhdCwgYmxhbmRpdCB2aXRhZSBudW5jIGlkLCBldWlzbW9kIGxhY2luaWEgb2Rpby4gQ3JhcyBzb2xsaWNpdHVkaW4gbWV0dXMgdml0YWUgdGVsbHVzIGludGVyZHVtIHRlbXB1cy4gTnVsbGFtIHZlbmVuYXRpcyBzaXQgYW1ldCBkdWkgZXUgcGhhcmV0cmEuIFNlZCBpbnRlcmR1bSBvZGlvIGV0IGxhY3VzIGVnZXN0YXMsIHV0IG9ybmFyZSBkaWFtIHRlbXB1cy4gTnVsbGEgdnVscHV0YXRlIHZhcml1cyBqdXN0byBhIGFsaXF1YW0uIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNjaW5nIGVsaXQuIE51bmMgbGFjaW5pYSBhdWd1ZSBpbiBtYXVyaXMgbGFvcmVldCBzdXNjaXBpdC4gQWVuZWFuIGVmZmljaXR1ciwgbWFzc2EgZXUgY29uZGltZW50dW0gcmhvbmN1cywgc2FwaWVuIGxlbyBkYXBpYnVzIGV4LCB2aXRhZSBsdWN0dXMgc2FwaWVuIGVuaW0gZXUgbG9yZW0uIFBoYXNlbGx1cyBxdWlzIHB1cnVzIGFjIG9yY2kgYmliZW5kdW0gbWF4aW11cy4KCkR1aXMgdml2ZXJyYSBjb25zZWN0ZXR1ciBtYXVyaXMgYXQgY29tbW9kby4gRnVzY2UgbWV0dXMgYXVndWUsIGNvbnNlcXVhdCBxdWlzIHBoYXJldHJhIHNpdCBhbWV0LCBlZ2VzdGFzIGVnZXQgbnVuYy4gUGVsbGVudGVzcXVlIGVsZW1lbnR1bSBvZGlvIHZlbCBzb2xsaWNpdHVkaW4gbW9sbGlzLiBEdWlzIGZlcm1lbnR1bSBuaXNsIGluIHF1YW0gaGVuZHJlcml0IHRyaXN0aXF1ZS4gTWFlY2VuYXMgbWFzc2EgdXJuYSwgc2FnaXR0aXMgdml2ZXJyYSBwb3J0YSBhLCBmYWNpbGlzaXMgYSB2ZWxpdC4gSW4gdGluY2lkdW50IGxvcmVtIGVnZXQgb3JjaSBoZW5kcmVyaXQsIGFjIG1vbGxpcyBtYWduYSBtYWxlc3VhZGEuIER1aXMgcXVpcyBzYXBpZW4gdmVsIHVybmEgdGluY2lkdW50IGZhdWNpYnVzIGV1IHV0IG5lcXVlLgoKU3VzcGVuZGlzc2UgY29uc2VjdGV0dXIgZWxpdCBzZWQgdml2ZXJyYSBjb25zZWN0ZXR1ci4gUGVsbGVudGVzcXVlIHZpdGFlIG1vbGVzdGllIGFudGUuIE5hbSBub24gdGluY2lkdW50IGlwc3VtLCB2ZWwgbHVjdHVzIHVybmEuIE1hZWNlbmFzIHNlbXBlciBmYXVjaWJ1cyBlZ2VzdGFzLiBEb25lYyB0ZW1wdXMgZmF1Y2lidXMgb3JjaSBldCBsb2JvcnRpcy4gTmFtIG1vbGxpcywgbmliaCBxdWlzIG1heGltdXMgYmliZW5kdW0sIHVybmEgc2FwaWVuIG1hdHRpcyBuaXNsLCBuZWMgdmVuZW5hdGlzIGRpYW0gYXJjdSB2aXRhZSBmZWxpcy4gQWVuZWFuIGlwc3VtIGFyY3UsIHZ1bHB1dGF0ZSBpZCBkb2xvciBhdCwgY29uc2VxdWF0IHBoYXJldHJhIHR1cnBpcy4KCk5hbSBhdCBhY2N1bXNhbiBtYXVyaXMsIG5lYyByaG9uY3VzIGRpYW0uIER1aXMgdml0YWUgdWx0cmljZXMgbnVuYy4gTmFtIGZyaW5naWxsYSBlcmF0IGV1IGp1c3RvIGFjY3Vtc2FuIGdyYXZpZGEuIEFsaXF1YW0gdmFyaXVzIHJpc3VzIGF0IHJob25jdXMgZmFjaWxpc2lzLiBDdXJhYml0dXIgZGlnbmlzc2ltIHF1YW0gdmVsIG5pc2kgY29tbW9kbywgcXVpcyBwb3N1ZXJlIHJpc3VzIGJsYW5kaXQuIFN1c3BlbmRpc3NlIG9ybmFyZSBleCBtZXR1cywgYXQgY29uc2VjdGV0dXIgZG9sb3IgZWZmaWNpdHVyIGVnZXQuIEluIG1hdHRpcyBsYWNpbmlhIHNlbXBlci4gRG9uZWMgdGluY2lkdW50IHBvcnRhIHJpc3VzLCBpZCBhdWN0b3IgbmliaC4gTmFtIGEgdml2ZXJyYSBlcm9zLCBldSBtb2xlc3RpZSBuaWJoLiBJbiBldSBmYXVjaWJ1cyBxdWFtLiBWZXN0aWJ1bHVtIGZhdWNpYnVzIGxlY3R1cyBub24gdG9ydG9yIGVnZXN0YXMsIHZlbCBlZmZpY2l0dXIgbmliaCBzYWdpdHRpcy4gSW4gdmFyaXVzIGludGVyZHVtIGFsaXF1ZXQuCgpVdCBzZWQgZGlhbSByaG9uY3VzLCBlZmZpY2l0dXIgZHVpIG5lYywgcHJldGl1bSBsYWN1cy4gQWxpcXVhbSBsYWNpbmlhIGN1cnN1cyBpcHN1bSBhIHZlaGljdWxhLiBGdXNjZSBtYWxlc3VhZGEgY29uc2VxdWF0IGhlbmRyZXJpdC4gTWF1cmlzIGFsaXF1YW0gcXVpcyBpcHN1bSB2ZWhpY3VsYSBsdWN0dXMuIFNlZCBpbiBxdWFtIG5vbiBuZXF1ZSBzb2RhbGVzIHRlbXB1cyBpbiBxdWlzIG1hdXJpcy4gVml2YW11cyBzb2xsaWNpdHVkaW4sIHR1cnBpcyBhIHVsbGFtY29ycGVyIHVsbGFtY29ycGVyLCBlcmF0IG9yY2kgcG9ydHRpdG9yIHRlbGx1cywgcXVpcyBwb3J0dGl0b3IgbmlzaSBlbmltIGluIHF1YW0uIE51bmMgcXVpcyBkaWFtIGxlY3R1cy4gSW50ZWdlciBlZ2V0IGZldWdpYXQgZXJhdC4gRG9uZWMgdGluY2lkdW50IHNhZ2l0dGlzIHNjZWxlcmlzcXVlLiBEb25lYyBzaXQgYW1ldCBudWxsYSB2ZWwgbmlzaSBkaWN0dW0gZmluaWJ1cy4gRHVpcyBwb3J0YSwgZmVsaXMgaWQgZmluaWJ1cyBlbGVpZmVuZCwgbG9yZW0gbWFnbmEgdGVtcG9yIGVyb3MsIGFjIGNvbnZhbGxpcyB1cm5hIHR1cnBpcyB2ZXN0aWJ1bHVtIGRvbG9yLiBDcmFzIGN1cnN1cyB2ZWhpY3VsYSBuZXF1ZSBuZWMgYWxpcXVldC4gRXRpYW0gZWdldCBudW5jIGRvbG9yLiBOYW0gZWxlaWZlbmQgZWxlbWVudHVtIHVybmEgbGFvcmVldCB2b2x1dHBhdC4gRG9uZWMgZWxlbWVudHVtLCBlbmltIGxvYm9ydGlzIHZpdmVycmEgYWNjdW1zYW4sIHZlbGl0IG51bmMgcmhvbmN1cyBtaSwgaW4gZmluaWJ1cyB2ZWxpdCBuaXNsIHF1aXMgcXVhbS4KCkRvbmVjIGlkIGFudGUgYXJjdS4gRXRpYW0gdGVtcG9yIGVuaW0gbmVjIG5pc2kgaW1wZXJkaWV0LCBpZCBydXRydW0gc2FwaWVuIHNvZGFsZXMuIE51bGxhbSBhdCBzY2VsZXJpc3F1ZSBsaWJlcm8uIEluIHZlbmVuYXRpcywgbmVxdWUgaW4gY29uZGltZW50dW0gdmFyaXVzLCBsaWJlcm8gZW5pbSBwb3N1ZXJlIGRpYW0sIHV0IHRpbmNpZHVudCBhcmN1IHF1YW0gbm9uIGVyb3MuIER1aXMgYmliZW5kdW0sIG1ldHVzIHNpdCBhbWV0IG1vbGVzdGllIGltcGVyZGlldCwgZW5pbSBuZXF1ZSBjb25zZXF1YXQgbmVxdWUsIG5vbiB0aW5jaWR1bnQgZGlhbSBsaWJlcm8gYXQgZGlhbS4gRG9uZWMgZGlnbmlzc2ltIHF1aXMgbWkgYSB1bGxhbWNvcnBlci4gU2VkIGNvbmRpbWVudHVtIGV4IHR1cnBpcy4gUHJvaW4gZWxlaWZlbmQgbmlzaSB2aXRhZSBhcmN1IHJob25jdXMgY29uc2VjdGV0dXIgcXVpcyBuZWMgbGlndWxhLiBTdXNwZW5kaXNzZSBlcmF0IGRvbG9yLCBwdWx2aW5hciBzaXQgYW1ldCB1bGxhbWNvcnBlciBuZWMsIHZpdmVycmEgbm9uIGVyb3MuIFZpdmFtdXMgY29uZ3VlLCBuZXF1ZSB2ZWwgY29uc2VjdGV0dXIgZWxlbWVudHVtLCByaXN1cyBvZGlvIGZpbmlidXMgYXJjdSwgbGFvcmVldCBmYXVjaWJ1cyBkb2xvciBsYWN1cyBhdWN0b3IgZHVpLiBVdCBldCBtb2xlc3RpZSBudWxsYS4gQ3JhcyBpbnRlcmR1bSBkYXBpYnVzIGxvcmVtLCBldSB2YXJpdXMgdGVsbHVzIHBlbGxlbnRlc3F1ZSBhLiBDcmFzIGFsaXF1ZXQgbmVxdWUgYXJjdSwgc29sbGljaXR1ZGluIGZhY2lsaXNpcyBuZXF1ZSBibGFuZGl0IGV0LgoKQ3JhcyB2aXRhZSBsZWN0dXMgc2VkIGVzdCBhY2N1bXNhbiBlZ2VzdGFzIHNlZCBzZWQgdHVycGlzLiBQZWxsZW50ZXNxdWUgYWMgaXBzdW0gbm9uIGF1Z3VlIGltcGVyZGlldCBwb3N1ZXJlLiBBZW5lYW4gZXUgc3VzY2lwaXQgZWxpdCwgZXUgdml2ZXJyYSBlcm9zLiBOdWxsYW0gZXQgcHJldGl1bSBuaXNpLCBmYWNpbGlzaXMgcHVsdmluYXIgZXguIE1hdXJpcyBzaXQgYW1ldCBpcHN1bSBhIG5pYmggaGVuZHJlcml0IGNvbnNlcXVhdCB2ZWwgbm9uIGVzdC4gRnVzY2UgYSBtYXhpbXVzIG9kaW8uIER1aXMgYWMgZmV1Z2lhdCBwdXJ1cy4gTW9yYmkgdGluY2lkdW50IG1vbGxpcyBtaSwgaW4gdml2ZXJyYSBhcmN1IHRlbXBvciB1dC4gQWVuZWFuIGluIGVzdCBhIG1pIHBoYXJldHJhIHBsYWNlcmF0IGV0IHV0IGFyY3UuIE1hdXJpcyBxdWlzIG5pc2kgaWQgdG9ydG9yIG9ybmFyZSBjb21tb2RvIGVnZXQgZXUgbnVuYy4gRG9uZWMgdml0YWUgZmVsaXMgdGluY2lkdW50LCBtYXR0aXMgZXJvcyBhdCwgY29uZGltZW50dW0gbmVxdWUuIE51bGxhIGNvbmd1ZSBtYWxlc3VhZGEgcXVhbSwgaWQgcHJldGl1bSBmZWxpcyB1bGxhbWNvcnBlciBzaXQgYW1ldC4gTmFtIGN1cnN1cyBtYXhpbXVzIG5pc2ksIGFjIHB1bHZpbmFyIGVzdCB2ZXN0aWJ1bHVtIGV1LiBEdWlzIHZlbmVuYXRpcyBlc3QgaGVuZHJlcml0IGxpYmVybyBmZXJtZW50dW0sIHV0IGZhY2lsaXNpcyBtZXR1cyB0ZW1wdXMuIEZ1c2NlIG5lYyByaXN1cyBzaXQgYW1ldCBwdXJ1cyBmYWNpbGlzaXMgYXVjdG9yIHNpdCBhbWV0IG5lYyBkdWkuCgpJbiBwdXJ1cyB0b3J0b3IsIHNvZGFsZXMgYWMgbW9sbGlzIHF1aXMsIGFsaXF1ZXQgc2l0IGFtZXQgYXVndWUuIFNlZCBsYW9yZWV0IG9ybmFyZSBuaWJoLiBWZXN0aWJ1bHVtIHZlbmVuYXRpcyBzYXBpZW4gc2VkIGZlbGlzIGxhb3JlZXQsIGV0IGxhY2luaWEgZW5pbSBwdWx2aW5hci4gSW4gdXQgaXBzdW0gZWxlbWVudHVtLCBwb3N1ZXJlIGR1aSB2ZW5lbmF0aXMsIHBvcnRhIGlwc3VtLiBEb25lYyBuZXF1ZSBtYXVyaXMsIGZpbmlidXMgcXVpcyByaG9uY3VzIHNlZCwgdWx0cmljZXMgdXQgZmVsaXMuIE51bGxhIHZpdmVycmEgZGlhbSB2aXRhZSBlcmF0IHBsYWNlcmF0LCBhdCBtb2xlc3RpZSBtZXR1cyBjb252YWxsaXMuIFBoYXNlbGx1cyBsYW9yZWV0IHZpdGFlIGp1c3RvIGlkIHRlbXB1cy4gRG9uZWMgaW4gbWFnbmEgZnJpbmdpbGxhIGxpYmVybyB0ZW1wdXMgcnV0cnVtIGVmZmljaXR1ciBzaXQgYW1ldCBleC4gTWFlY2VuYXMgaW50ZXJkdW0sIHF1YW0gZWdldCBwaGFyZXRyYSBwb3J0YSwgZHVpIG1hdXJpcyB2dWxwdXRhdGUgbmlzbCwgc2l0IGFtZXQgZXVpc21vZCB0b3J0b3IgbnVsbGEgdml0YWUgcHVydXMuCgpQcmFlc2VudCBwaGFyZXRyYSBtb2xlc3RpZSBuaXNpLCBpZCBtb2xsaXMgbGVvIGVsZWlmZW5kIGEuIE5hbSBsb2JvcnRpcyBwcmV0aXVtIGV4LiBEdWlzIGhlbmRyZXJpdCwgdHVycGlzIG5vbiB0ZW1wb3IgZmVybWVudHVtLCBmZWxpcyBudWxsYSBwdWx2aW5hciBzYXBpZW4sIG1vbGxpcyB2b2x1dHBhdCBsZW8gdHVycGlzIGN1cnN1cyBlcm9zLiBEdWlzIGZldWdpYXQsIGxvcmVtIHF1aXMgY29uc2VjdGV0dXIgZGljdHVtLCBxdWFtIGp1c3RvIGdyYXZpZGEgZHVpLCBhdCBsb2JvcnRpcyBuaXNsIHVybmEgc29kYWxlcyBhdWd1ZS4gVXQgZXN0IGF1Z3VlLCBwb3J0YSBldSBuaWJoIGlkLCBmYWNpbGlzaXMgbHVjdHVzIG51bGxhLiBQcm9pbiBuZWMgY29uc2VjdGV0dXIgbWFzc2EuIEN1cmFiaXR1ciBlZ2V0IHBvcnR0aXRvciBkdWksIGFjIHRpbmNpZHVudCBsb3JlbS4gQ3JhcyBxdWlzIHVsdHJpY2llcyBuaXNsLiBQcm9pbiBzYWdpdHRpcyBmZXJtZW50dW0gcHVydXMgdXQgcGVsbGVudGVzcXVlLiBOdWxsYSBpbnRlcmR1bSB2ZWxpdCBhdCBiaWJlbmR1bSBkaWduaXNzaW0uIFZlc3RpYnVsdW0gbGFjaW5pYSBkaWduaXNzaW0gbnVsbGEgc2l0IGFtZXQgaW1wZXJkaWV0LiBNYXVyaXMgcG9ydHRpdG9yIGVsZW1lbnR1bSBsb3JlbS4gRG9uZWMgYSBtYXNzYSBudW5jLgoKTWFlY2VuYXMgZmVybWVudHVtIGFudGUgYWMgaXBzdW0gc2NlbGVyaXNxdWUsIHVsdHJpY2VzIGFjY3Vtc2FuIG9yY2kgbGFvcmVldC4gTWF1cmlzIGFsaXF1ZXQgbWFzc2Egdml0YWUgbWFnbmEgdmVuZW5hdGlzLCB1dCB2dWxwdXRhdGUgZXggdmVzdGlidWx1bS4gTW9yYmkgdmVoaWN1bGEgdGluY2lkdW50IHZlbGl0IG5vbiBhbGlxdWFtLiBPcmNpIHZhcml1cyBuYXRvcXVlIHBlbmF0aWJ1cyBldCBtYWduaXMgZGlzIHBhcnR1cmllbnQgbW9udGVzLCBuYXNjZXR1ciByaWRpY3VsdXMgbXVzLiBNb3JiaSB1cm5hIHNlbSwgZGlnbmlzc2ltIHNpdCBhbWV0IGVyYXQgZXUsIHBoYXJldHJhIHZvbHV0cGF0IGp1c3RvLiBGdXNjZSBpbiBmZWxpcyBzZWQgbWkgcG9ydHRpdG9yIHB1bHZpbmFyLiBTdXNwZW5kaXNzZSBpZCB1bHRyaWNpZXMganVzdG8sIGVnZXQgdmVzdGlidWx1bSBudWxsYS4gVml2YW11cyBpbiBpcHN1bSBwb3J0YSwgZmVybWVudHVtIGxlbyBuZWMsIHZlaGljdWxhIG5pc2wuIE5hbSB0dXJwaXMgcmlzdXMsIGx1Y3R1cyBub24gYWxpcXVhbSBub24sIHBsYWNlcmF0IHF1aXMgc2VtLiBDcmFzIHJ1dHJ1bSBhIG51bGxhIHZlbCBsdWN0dXMuIEV0aWFtIGZhdWNpYnVzIG5pc2wgcXVpcyBlbGl0IG1hbGVzdWFkYSBzYWdpdHRpcy4gRG9uZWMgZXQgcHVsdmluYXIgZmVsaXMuIEN1cmFiaXR1ciBzY2VsZXJpc3F1ZSBtb2xsaXMgYW50ZSBzaXQgYW1ldCBmZXVnaWF0LiBVdCBhbGlxdWFtIHVybmEgaWQgdHVycGlzIG1vbGVzdGllIHZlbmVuYXRpcy4KCkN1cmFiaXR1ciBuZWMgZnJpbmdpbGxhIGF1Z3VlLCBldCBzdXNjaXBpdCByaXN1cy4gTnVsbGEgdHJpc3RpcXVlIHNhcGllbiB2aXRhZSB1bHRyaWNpZXMgaW1wZXJkaWV0LiBQaGFzZWxsdXMgYWMgYXJjdSBpZCBzYXBpZW4gZWZmaWNpdHVyIGFsaXF1ZXQgc2VkIGVnZXQgbWFzc2EuIEludGVnZXIgbGlndWxhIGR1aSwgZWdlc3RhcyBzZWQgZnJpbmdpbGxhIG1hdHRpcywgcHVsdmluYXIgbm9uIHF1YW0uIFByb2luIG1hbGVzdWFkYSBlbGVpZmVuZCBuaXNpIG5vbiB0ZW1wdXMuIFZlc3RpYnVsdW0gYW50ZSBpcHN1bSBwcmltaXMgaW4gZmF1Y2lidXMgb3JjaSBsdWN0dXMgZXQgdWx0cmljZXMgcG9zdWVyZSBjdWJpbGlhIGN1cmFlOyBNYXVyaXMgcG9zdWVyZSBsYWN1cyBhIGF1Z3VlIHBlbGxlbnRlc3F1ZSB1bHRyaWNpZXMuIFNlZCBldWlzbW9kIGp1c3RvIG5lYyByaXN1cyB1bGxhbWNvcnBlciBzYWdpdHRpcy4gUHJvaW4gZXQgbmVxdWUgcG9ydGEsIGFsaXF1YW0gc2VtIGV1LCBtYWxlc3VhZGEgbmlzbC4gQWVuZWFuIGRpZ25pc3NpbSwgbWV0dXMgYWMgdWx0cmljZXMgdmVuZW5hdGlzLCB2ZWxpdCBlc3QgZ3JhdmlkYSBsb3JlbSwgZWdldCB0ZW1wdXMgcXVhbSBzZW0gZWdldCB0dXJwaXMuIFBlbGxlbnRlc3F1ZSBzZWQgZmV1Z2lhdCBsZWN0dXMuIFF1aXNxdWUgdWx0cmljaWVzIG9kaW8gZWdldCBsb2JvcnRpcyBmZXJtZW50dW0uIFN1c3BlbmRpc3NlIGxlbyBlcm9zLCBlZ2VzdGFzIHZpdGFlIG1hc3NhIGF0LCBzYWdpdHRpcyBsb2JvcnRpcyBlbmltLgoKQWVuZWFuIHRyaXN0aXF1ZSBmaW5pYnVzIGRhcGlidXMuIE51bGxhIGZhY2lsaXNpLiBBZW5lYW4gZmVybWVudHVtIGVnZXN0YXMgYXVndWUsIGluIG9ybmFyZSBlcm9zIGRhcGlidXMgZXUuIEluIGxhY2luaWEgbHVjdHVzIGV4IGVsZW1lbnR1bSBkaWduaXNzaW0uIFNlZCBqdXN0byBmZWxpcywgc3VzY2lwaXQgc2VkIGV4IGV1LCBydXRydW0gaW50ZXJkdW0gdG9ydG9yLiBOdWxsYSBmYWNpbGlzaS4gU3VzcGVuZGlzc2Ugc3VzY2lwaXQgbWV0dXMgdHVycGlzLCBldSB2ZW5lbmF0aXMgdXJuYSBsYW9yZWV0IGlkLiBOdW5jIGJpYmVuZHVtIG5lcXVlIG5lYyBudW5jIHNhZ2l0dGlzLCBlZ2V0IGVsZW1lbnR1bSB1cm5hIGxvYm9ydGlzLiBNYWVjZW5hcyBhdCBydXRydW0gc2FwaWVuLiBWaXZhbXVzIGlkIHJpc3VzIHRpbmNpZHVudCwgcGVsbGVudGVzcXVlIGVyb3MgYSwgc2NlbGVyaXNxdWUgdXJuYS4gQWVuZWFuIGNvbW1vZG8sIGxhY3VzIGV0IGxhb3JlZXQgc3VzY2lwaXQsIG51bmMgc2FwaWVuIGZldWdpYXQgYW50ZSwgYSBzb2RhbGVzIGxpZ3VsYSBlbGl0IGluIGxlY3R1cy4gUGhhc2VsbHVzIHZlbCByaXN1cyB2aXRhZSBudW5jIGxhY2luaWEgcG9ydGEgdml0YWUgdXQgb2Rpby4gUHJhZXNlbnQgc29sbGljaXR1ZGluLCBlc3Qgc2VkIGltcGVyZGlldCBjb25zZWN0ZXR1ciwgb2RpbyB0b3J0b3IgdWx0cmljaWVzIGFudGUsIGluIGNvbW1vZG8gbmVxdWUgbWV0dXMgYWMgZG9sb3IuIE9yY2kgdmFyaXVzIG5hdG9xdWUgcGVuYXRpYnVzIGV0IG1hZ25pcyBkaXMgcGFydHVyaWVudCBtb250ZXMsIG5hc2NldHVyIHJpZGljdWx1cyBtdXMuIE51bGxhIGZhY2lsaXNpLiBTdXNwZW5kaXNzZSBwcmV0aXVtIGlwc3VtIHNpdCBhbWV0IG1ldHVzIHBvcnR0aXRvciBiaWJlbmR1bS4KClByYWVzZW50IGlkIHNlbXBlciBkdWksIGluIGltcGVyZGlldCB0ZWxsdXMuIFZpdmFtdXMgcXVpcyBkdWkgdmVsIGZlbGlzIGx1Y3R1cyBwbGFjZXJhdCBwZWxsZW50ZXNxdWUgZWdldCBkaWFtLiBDcmFzIHZlbmVuYXRpcyBuaXNpIGluIGRpYW0gZ3JhdmlkYSwgZWdldCBzb2RhbGVzIG5pYmggcHVsdmluYXIuIEluIHZpdGFlIGN1cnN1cyBtYXNzYSwgZWdldCBibGFuZGl0IG1ldHVzLiBVdCByaG9uY3VzIG1pIGV1IG51bGxhIG1hdHRpcyBpbnRlcmR1bS4gU2VkIG9kaW8gdGVsbHVzLCBmaW5pYnVzIGV0IG1vbGVzdGllIGluLCBmZXVnaWF0IGVnZXQgbmVxdWUuIFBlbGxlbnRlc3F1ZSBjb25kaW1lbnR1bSBudWxsYSBhIHR1cnBpcyBjdXJzdXMsIHNpdCBhbWV0IGNvbW1vZG8gbmliaCBpbXBlcmRpZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNjaW5nIGVsaXQuCgpNYWVjZW5hcyB2ZWwgdWxsYW1jb3JwZXIgZG9sb3IuIFV0IGZpbmlidXMsIGVsaXQgdmVsIGFsaXF1YW0gdWx0cmljaWVzLCBlbmltIHB1cnVzIHBvcnRhIGxpZ3VsYSwgbm9uIHByZXRpdW0gbWV0dXMgYXJjdSBlZ2V0IG5pc2kuIE5hbSBsaWd1bGEgbGVvLCBtYXhpbXVzIHZpdGFlIG9kaW8gZWdldCwgY29uc2VjdGV0dXIgYWxpcXVhbSBvcmNpLiBJbnRlcmR1bSBldCBtYWxlc3VhZGEgZmFtZXMgYWMgYW50ZSBpcHN1bSBwcmltaXMgaW4gZmF1Y2lidXMuIFV0IHR1cnBpcyBzYXBpZW4sIHRlbXBvciBldSBiaWJlbmR1bSBldCwgaWFjdWxpcyB1dCBmZWxpcy4gQ2xhc3MgYXB0ZW50IHRhY2l0aSBzb2Npb3NxdSBhZCBsaXRvcmEgdG9ycXVlbnQgcGVyIGNvbnViaWEgbm9zdHJhLCBwZXIgaW5jZXB0b3MgaGltZW5hZW9zLiBBZW5lYW4gY29uc2VxdWF0IG9kaW8gdGVtcHVzLCBhY2N1bXNhbiB0dXJwaXMgYWMsIHB1bHZpbmFyIG1ldHVzLiBTdXNwZW5kaXNzZSB1bHRyaWNlcyBkdWkgYWMgYXJjdSBmcmluZ2lsbGEgdWx0cmljaWVzLiBBbGlxdWFtIGN1cnN1cyBuZXF1ZSBhbnRlLCB2ZWwgcG9ydHRpdG9yIG1pIGNvbnNlcXVhdCBzaXQgYW1ldC4gQWVuZWFuIG1hdXJpcyB0ZWxsdXMsIHNvbGxpY2l0dWRpbiBpbiBsZW8gcXVpcywgZGlnbmlzc2ltIGx1Y3R1cyBhdWd1ZS4gUHJhZXNlbnQgbGFvcmVldCB1bHRyaWNlcyBxdWFtIG5lYyB0ZW1wdXMuIEludGVnZXIgc2VkIHNvZGFsZXMgbWF1cmlzLCBlZ2V0IHVsbGFtY29ycGVyIGVyb3MuIFByYWVzZW50IGV0IGhlbmRyZXJpdCB2ZWxpdC4gQWVuZWFuIGZyaW5naWxsYSB0ZW1wb3IgaWFjdWxpcy4gRHVpcyBlcmF0IGVsaXQsIHVsbGFtY29ycGVyIGZlcm1lbnR1bSBjb25zZWN0ZXR1ciBzZWQsIGFsaXF1ZXQgZXUgdmVsaXQuIE51bGxhbSBjb25zZXF1YXQgc2VtIGxpYmVybywgYXQgZGlnbmlzc2ltIG5pc2wgc2NlbGVyaXNxdWUgaW50ZXJkdW0uCgpRdWlzcXVlIGFjY3Vtc2FuIG1hdXJpcyBjb25kaW1lbnR1bSBwdXJ1cyBldWlzbW9kIG1hdHRpcy4gTnVuYyBhY2N1bXNhbiBjb25zZXF1YXQgbG9ib3J0aXMuIFZpdmFtdXMgbW9sbGlzIGZldWdpYXQgbmliaCB1dCBjb252YWxsaXMuIE1hZWNlbmFzIG1vbGxpcyB1bHRyaWNpZXMgbWFzc2EsIG5lYyBzY2VsZXJpc3F1ZSBuZXF1ZSBsYW9yZWV0IHNlZC4gQ3VyYWJpdHVyIG5lYyBkYXBpYnVzIGVyb3MuIER1aXMgcmhvbmN1cyBuaWJoIHZpdGFlIGVyYXQgY29uc2VxdWF0IHZpdmVycmEuIFN1c3BlbmRpc3NlIHZlbmVuYXRpcyBsYWN1cyBpbiBtYXVyaXMgYWNjdW1zYW4gY29uZ3VlLiBVdCBhdCBsaWJlcm8gYSBuaWJoIG9ybmFyZSB1bHRyaWNlcyBldCBldSBkdWkuIFNlZCBldCB1bHRyaWNlcyBmZWxpcy4gVXQgYWMgcGVsbGVudGVzcXVlIGxlY3R1cy4gRnVzY2Ugc2l0IGFtZXQgZGlnbmlzc2ltIHJpc3VzLiBGdXNjZSBvcmNpIGR1aSwgZWZmaWNpdHVyIGEgcGxhY2VyYXQgdml2ZXJyYSwgdm9sdXRwYXQgdml0YWUgZWxpdC4gQWVuZWFuIGVuaW0ganVzdG8sIGV1aXNtb2QgYXQgZW5pbSBpbiwgbWF4aW11cyB0aW5jaWR1bnQgbWV0dXMuIE1hdXJpcyBmYXVjaWJ1cyBzb2xsaWNpdHVkaW4gZG9sb3IgcXVpcyBwdWx2aW5hci4gRHVpcyB2ZWwgc2FwaWVuIHRvcnRvci4gVmVzdGlidWx1bSBhbnRlIGlwc3VtIHByaW1pcyBpbiBmYXVjaWJ1cyBvcmNpIGx1Y3R1cyBldCB1bHRyaWNlcyBwb3N1ZXJlIGN1YmlsaWEgY3VyYWU7CgpJbiB1bGxhbWNvcnBlciBzZWQgZGlhbSBlZ2V0IHVsdHJpY2llcy4gRnVzY2UgZXUgbGFvcmVldCBudW5jLiBQZWxsZW50ZXNxdWUgdXQgbWV0dXMgdHVycGlzLiBNYXVyaXMgZXUgdGVtcHVzIGVyYXQuIERvbmVjIHF1aXMgbmVxdWUgbGFjdXMuIE1hdXJpcyBlbGVtZW50dW0sIHRvcnRvciBzaXQgYW1ldCB2YXJpdXMgY3Vyc3VzLCBuaXNpIGFyY3UgdGluY2lkdW50IG9kaW8sIGVnZXQgcHJldGl1bSBxdWFtIHZlbGl0IHF1aXMgb2Rpby4gQWxpcXVhbSB2aXRhZSBydXRydW0gaXBzdW0uIFBoYXNlbGx1cyBhdCBlbGl0IGhlbmRyZXJpdCwgdnVscHV0YXRlIGVyb3MgYWMsIGFjY3Vtc2FuIHJpc3VzLiBQcm9pbiBmcmluZ2lsbGEgdWx0cmljaWVzIGF1Z3VlLCBpbiB0ZW1wb3IgbWFnbmEuIE51bGxhIHNlZCBhbGlxdWFtIG5pYmguIFN1c3BlbmRpc3NlIHNjZWxlcmlzcXVlIGVsaXQgdGVtcG9yIG5lcXVlIGZlcm1lbnR1bSBtYWxlc3VhZGEuIE1vcmJpIGVuaW0gdG9ydG9yLCB2b2x1dHBhdCBzZWQgc2VtcGVyIG5lYywgZmV1Z2lhdCBldSB0dXJwaXMuIE1vcmJpIG1hbGVzdWFkYSBlbGl0IG5vbiBuaXNsIHVsdHJpY2VzLCBzZWQgbWF4aW11cyBlbmltIHJob25jdXMuCgpEdWlzIHNlZCBzdXNjaXBpdCBlc3QsIG5lYyBwb3J0YSB0dXJwaXMuIE51bGxhIHZpdGFlIGVsaXQgdmVsIG9kaW8gYmxhbmRpdCB0cmlzdGlxdWUgdml0YWUgZXQgZXJvcy4gRG9uZWMgdmVsIHJpc3VzIGR1aS4gQ3VyYWJpdHVyIGxhY3VzIHVybmEsIHVsbGFtY29ycGVyIGV1IHRpbmNpZHVudCBlZ2V0LCBydXRydW0gYSB1cm5hLiBOdWxsYSBwcmV0aXVtIHNvbGxpY2l0dWRpbiBhbGlxdWV0LiBNYXVyaXMgY3Vyc3VzIGZlcm1lbnR1bSBlbGVtZW50dW0uIE51bGxhbSBpbiByaXN1cyBuaWJoLiBFdGlhbSBldSBkb2xvciBuZWMgbWV0dXMgcGhhcmV0cmEgdWx0cmljZXMgdml0YWUgYXQgdG9ydG9yLiBEb25lYyBpbXBlcmRpZXQganVzdG8gbWV0dXMsIHF1aXMgZXVpc21vZCBvZGlvIHRpbmNpZHVudCBldC4gRG9uZWMgYXQgc2NlbGVyaXNxdWUgbGVjdHVzLiBWZXN0aWJ1bHVtIHVsdHJpY2VzIHZhcml1cyBtaSBzZWQgZWZmaWNpdHVyLiBNYXVyaXMgbmlzbCBkb2xvciwgZmVybWVudHVtIHZpdGFlIGxpYmVybyB2aXRhZSwgY3Vyc3VzIHZhcml1cyBlc3QuIE5hbSBhYyBpbXBlcmRpZXQgbG9yZW0uIE1vcmJpIHZlbCB2ZW5lbmF0aXMgdHVycGlzLiBNYXVyaXMgaW1wZXJkaWV0IGN1cnN1cyBkb2xvciBpbiBmZXVnaWF0LiBOdWxsYW0gbHVjdHVzIGVsaXQgcGVsbGVudGVzcXVlIGxhY2luaWEgYWNjdW1zYW4uCgpNb3JiaSBlZ2V0IGludGVyZHVtIGp1c3RvLCBub24gcnV0cnVtIHB1cnVzLiBRdWlzcXVlIG9ybmFyZSBlcmF0IGVnZXQgZmVsaXMgdGVtcG9yIGRhcGlidXMuIFNlZCBpbXBlcmRpZXQgdmVsIGxvcmVtIHNpdCBhbWV0IGxhY2luaWEuIEFsaXF1YW0gZWdldCBuaWJoIHZlbCBzYXBpZW4gZXVpc21vZCBwaGFyZXRyYS4gUXVpc3F1ZSBhYyBhbGlxdWV0IGRpYW0uIFByb2luIGlkIGNvbmd1ZSBsaWJlcm8sIG5vbiB1bGxhbWNvcnBlciBmZWxpcy4gUHJvaW4gdWx0cmljaWVzIHJob25jdXMgYWNjdW1zYW4uIFV0IGFjY3Vtc2FuIGZlcm1lbnR1bSB2ZXN0aWJ1bHVtLiBRdWlzcXVlIGF0IGR1aSBpbiBkb2xvciBpbXBlcmRpZXQgcHVsdmluYXIuIFV0IHVybmEgcXVhbSwgZmF1Y2lidXMgaW4gcG9ydGEgYWMsIHZvbHV0cGF0IHZpdGFlIGR1aS4gRG9uZWMgc2FnaXR0aXMgbWV0dXMgc2FwaWVuLiBWZXN0aWJ1bHVtIGV0IGlwc3VtIGRhcGlidXMsIGxhb3JlZXQgZXN0IG1hdHRpcywgaW1wZXJkaWV0IG1ldHVzLgoKU3VzcGVuZGlzc2UgZmVsaXMgZGlhbSwgZWZmaWNpdHVyIHZpdGFlIGxhY2luaWEgdmVsLCBzdXNjaXBpdCBpbiB0ZWxsdXMuIENyYXMgbGVvIGR1aSwgaWFjdWxpcyB1dCBsZW8gdmVsLCBjdXJzdXMgcG9ydHRpdG9yIGxpYmVyby4gRXRpYW0gdm9sdXRwYXQgYWxpcXVldCBkdWkgc2l0IGFtZXQgY29uZ3VlLiBNb3JiaSBhbGlxdWFtIG5pYmggYSB2dWxwdXRhdGUgY29tbW9kby4gUXVpc3F1ZSBzZWQgZW5pbSBuZXF1ZS4gRXRpYW0gc2l0IGFtZXQgY29uZGltZW50dW0gbWFnbmEuIEZ1c2NlIG1hbGVzdWFkYSBsb3JlbSBxdWlzIGRvbG9yIHNjZWxlcmlzcXVlLCBhdCBwb3N1ZXJlIG1pIG1vbGxpcy4gSW50ZWdlciBpbnRlcmR1bSBtYXVyaXMgdXQgbWkgZmluaWJ1cywgYWMgZGFwaWJ1cyBtYXVyaXMgY29tbW9kby4gU2VkIHNvZGFsZXMgZXJvcyBuZXF1ZSwgYSBlbGVtZW50dW0gZW5pbSBmYXVjaWJ1cyB2ZWwuIE1hdXJpcyBlbGVpZmVuZCBtYXVyaXMgZXQgZXJhdCBwb3N1ZXJlLCBxdWlzIHJob25jdXMgbGlndWxhIGltcGVyZGlldC4gVml2YW11cyBvcm5hcmUgaXBzdW0gdmVsaXQsIG5lYyB0cmlzdGlxdWUgb2RpbyBjb25kaW1lbnR1bSBhdC4gU2VkIGEgdml2ZXJyYSBtZXR1cy4gTnVsbGEgc3VzY2lwaXQgYXVjdG9yIGxpZ3VsYSBpZCBlZmZpY2l0dXIuIE51bmMgZmF1Y2lidXMganVzdG8gaW4gZGlhbSBjb252YWxsaXMsIHNlZCB2dWxwdXRhdGUgbnVuYyBwb3J0dGl0b3IuIFBoYXNlbGx1cyBzY2VsZXJpc3F1ZSBzdXNjaXBpdCBhdWd1ZSBldSBsb2JvcnRpcy4KCk1vcmJpIG5vbiBsb2JvcnRpcyBvcmNpLCBhIG1vbGVzdGllIG5pc2wuIFZlc3RpYnVsdW0gZHVpIG5pYmgsIHVsdHJpY2VzIG5vbiBsb2JvcnRpcyB1dCwgZWdlc3RhcyBub24gZXJvcy4gRHVpcyBub24gbWkgZXQgYXVndWUgY3Vyc3VzIGZlcm1lbnR1bS4gU2VkIGJsYW5kaXQgb3JjaSBuZWMgZW5pbSBmcmluZ2lsbGEgZmV1Z2lhdC4gUHJvaW4gdmVsaXQgZmVsaXMsIHRpbmNpZHVudCBzZWQgY29uc2VxdWF0IHV0LCBvcm5hcmUgdmVsIHRlbGx1cy4gUGVsbGVudGVzcXVlIGN1cnN1cyB0ZW1wb3IgbWFzc2EsIGlkIGFsaXF1YW0gbGliZXJvIGNvbnNlY3RldHVyIGV0LiBEdWlzIGFjIHRyaXN0aXF1ZSBvZGlvLCB1dCBmcmluZ2lsbGEgbGVvLgoKTWFlY2VuYXMgdGVtcHVzIHNlbSBub24gZXJvcyBwbGFjZXJhdCBwbGFjZXJhdC4gTmFtIGFjIG5lcXVlIGdyYXZpZGEsIGFsaXF1ZXQgbG9yZW0gaW4sIHBvcnR0aXRvciBsaWd1bGEuIE5hbSBjb25kaW1lbnR1bSBlZ2V0IGxlY3R1cyBhYyBwZWxsZW50ZXNxdWUuIFF1aXNxdWUgdHJpc3RpcXVlIHZhcml1cyBuaXNpLCBhbGlxdWV0IGxhY2luaWEgbnVsbGEgcG9ydHRpdG9yIGV0LiBFdGlhbSBwZWxsZW50ZXNxdWUgc2FnaXR0aXMgdmVsaXQgcXVpcyB2b2x1dHBhdC4gUHJhZXNlbnQgdWxsYW1jb3JwZXIgaW1wZXJkaWV0IG9yY2kgbmVjIGxhY2luaWEuIFBoYXNlbGx1cyBldWlzbW9kIGF1Z3VlIHVsbGFtY29ycGVyIHRpbmNpZHVudCBhdWN0b3IuIFN1c3BlbmRpc3NlIGZpbmlidXMgbWkgc29sbGljaXR1ZGluIG5pc2wgdGVtcG9yIGVsZW1lbnR1bS4gTW9yYmkgYWxpcXVhbSwgbGVvIG1heGltdXMgY29uZGltZW50dW0gZmV1Z2lhdCwgdHVycGlzIGV4IG1hdHRpcyB1cm5hLCBpbiBibGFuZGl0IHNlbSBsaWd1bGEgbmVjIG5lcXVlLiBEdWlzIGxlbyB0ZWxsdXMsIGFjY3Vtc2FuIGEgbnVsbGEgc2l0IGFtZXQsIGRhcGlidXMgdGluY2lkdW50IG9yY2kuIFBlbGxlbnRlc3F1ZSBoYWJpdGFudCBtb3JiaSB0cmlzdGlxdWUgc2VuZWN0dXMgZXQgbmV0dXMgZXQgbWFsZXN1YWRhIGZhbWVzIGFjIHR1cnBpcyBlZ2VzdGFzLiBJbnRlZ2VyIGx1Y3R1cyBzb2xsaWNpdHVkaW4gaW1wZXJkaWV0LiBVdCBzaXQgYW1ldCBlbGVpZmVuZCBvcmNpLgoKRnVzY2UgdmVsIHNvZGFsZXMgZHVpLiBBZW5lYW4gZWdldCBvcmNpIGF0IGp1c3RvIGZhY2lsaXNpcyB1bHRyaWNpZXMuIFF1aXNxdWUgc29kYWxlcyBhdWd1ZSBuZWMgb3JjaSBlZ2VzdGFzLCBldSBsdWN0dXMgZXJvcyBsYWNpbmlhLiBEb25lYyBkYXBpYnVzIHZlbmVuYXRpcyBlZ2VzdGFzLiBWaXZhbXVzIGV4IGV4LCBlZmZpY2l0dXIgdGluY2lkdW50IHNlbSBhLCB2dWxwdXRhdGUgZGljdHVtIG51bmMuIEN1cmFiaXR1ciBpbnRlcmR1bSBuaXNpIG5lYyBuaXNsIHNvZGFsZXMsIGFjIGJsYW5kaXQgdGVsbHVzIGxhb3JlZXQuIE1hdXJpcyBjdXJzdXMgcGhhcmV0cmEgbGVjdHVzIHV0IGVsZW1lbnR1bS4gUGVsbGVudGVzcXVlIG1pIGlwc3VtLCB1bHRyaWNpZXMgYSBmZXVnaWF0IG5vbiwgY29uZ3VlIHZpdGFlIHB1cnVzLiBQaGFzZWxsdXMgcXVpcyBwb3J0YSB0dXJwaXMuIERvbmVjIGltcGVyZGlldCBhYyBwdXJ1cyB2aXRhZSBjb25zZWN0ZXR1ci4KClBoYXNlbGx1cyB2ZW5lbmF0aXMgcG9ydGEgbWFsZXN1YWRhLiBEdWlzIHNjZWxlcmlzcXVlIG5lcXVlIHJ1dHJ1bSBsZW8gdnVscHV0YXRlLCBzZWQgc29kYWxlcyBlbmltIHRpbmNpZHVudC4gQWxpcXVhbSBzb2RhbGVzIGxlY3R1cyBxdWlzIGVmZmljaXR1ciBwaGFyZXRyYS4gQWxpcXVhbSBkYXBpYnVzIGNvbnZhbGxpcyBtYXNzYSBzaXQgYW1ldCBkYXBpYnVzLiBQcmFlc2VudCBibGFuZGl0IG1vbGxpcyBsaWJlcm8sIGlkIGxhY2luaWEgbnVuYyBjb252YWxsaXMgdXQuIFZlc3RpYnVsdW0gYWMgc2VtcGVyIGVyb3MsIHZpdGFlIHBsYWNlcmF0IHRlbGx1cy4gQ3VyYWJpdHVyIGxlY3R1cyB0dXJwaXMsIG1hbGVzdWFkYSBxdWlzIGxpYmVybyBhLCBhY2N1bXNhbiBzZW1wZXIgdHVycGlzLiBNYWVjZW5hcyB2dWxwdXRhdGUgZXN0IGV0IG9yY2kgZ3JhdmlkYSBtb2xsaXMuIE5hbSBjb252YWxsaXMgYmliZW5kdW0gdmVsaXQuIFZlc3RpYnVsdW0gZmV1Z2lhdCBtZXR1cyBkdWksIGFjIHVsdHJpY2llcyBsaWJlcm8gcmhvbmN1cyBldS4gQWxpcXVhbSBtYWxlc3VhZGEgYXJjdSBpbiBhcmN1IHBvcnRhIG1heGltdXMuIEluIGhhYyBoYWJpdGFzc2UgcGxhdGVhIGRpY3R1bXN0LiBDcmFzIGlkIHZpdmVycmEgdXJuYS4gUXVpc3F1ZSBhYyBudW5jIGN1cnN1cywgY29tbW9kbyBsaWd1bGEgbmVjLCB1bGxhbWNvcnBlciBhdWd1ZS4KCk5hbSBldCBudW5jIHZpdGFlIHJpc3VzIHRlbXBvciBncmF2aWRhLiBRdWlzcXVlIHBvcnR0aXRvciBpZCBtYXVyaXMgbmVjIGVsZW1lbnR1bS4gUGVsbGVudGVzcXVlIHNlbXBlciBtb2xsaXMgZGlhbSBzaXQgYW1ldCBkaWN0dW0uIFF1aXNxdWUgdml2ZXJyYSBzb2xsaWNpdHVkaW4gdmVzdGlidWx1bS4gU3VzcGVuZGlzc2UgcHVydXMgc2FwaWVuLCBmZXJtZW50dW0gaW4gbGFvcmVldCBhdCwgdnVscHV0YXRlIHBlbGxlbnRlc3F1ZSBkaWFtLiBOdWxsYSB2ZWhpY3VsYSBpbXBlcmRpZXQgbmliaCwgc2VkIHRlbXBvciBleC4gRG9uZWMgc2NlbGVyaXNxdWUgYWNjdW1zYW4gZ3JhdmlkYS4gU3VzcGVuZGlzc2UgcG90ZW50aS4gUHJvaW4gZXVpc21vZCB2ZW5lbmF0aXMgaXBzdW0gaWQgc2FnaXR0aXMuCgpJbnRlcmR1bSBldCBtYWxlc3VhZGEgZmFtZXMgYWMgYW50ZSBpcHN1bSBwcmltaXMgaW4gZmF1Y2lidXMuIEV0aWFtIHZlc3RpYnVsdW0gYSBmZWxpcyBpZCBhdWN0b3IuIFBlbGxlbnRlc3F1ZSB1bGxhbWNvcnBlciBkdWkgdXQgbW9sZXN0aWUgdWxsYW1jb3JwZXIuIFZpdmFtdXMgZGljdHVtLCB0ZWxsdXMgc2l0IGFtZXQgZnJpbmdpbGxhIHBsYWNlcmF0LCBhbnRlIGVyYXQgdGVtcG9yIHR1cnBpcywgYWMgc2FnaXR0aXMgZW5pbSB0b3J0b3Igbm9uIG51bGxhLiBOdWxsYSBmYXVjaWJ1cywgaXBzdW0gZWdldCBzdXNjaXBpdCBwaGFyZXRyYSwgZG9sb3Igb3JjaSB2dWxwdXRhdGUgbWF1cmlzLCBhIGF1Y3RvciBzYXBpZW4gbGVvIHZlbCBhcmN1LiBWZXN0aWJ1bHVtIHRlbGx1cyBhbnRlLCB2b2x1dHBhdCBlZ2V0IHVsdHJpY2VzIGlkLCBydXRydW0gbmVjIGlwc3VtLiBNYWVjZW5hcyBpcHN1bSBudWxsYSwgZGFwaWJ1cyBhdCBkdWkgYWMsIHZhcml1cyB1bHRyaWNlcyBzYXBpZW4uIEludGVnZXIgdmVsIHRvcnRvciBsZWN0dXMuIFByb2luIG1hdHRpcywgdXJuYSBub24gY3Vyc3VzIHN1c2NpcGl0LCBhcmN1IG1hc3NhIGNvbmd1ZSBhbnRlLCBhdCBibGFuZGl0IG9yY2kgbWFnbmEgdml0YWUgdG9ydG9yLiBNb3JiaSBzaXQgYW1ldCBwb3N1ZXJlIGVsaXQsIGlkIHZhcml1cyB0dXJwaXMuIFV0IG1hdHRpcyB1cm5hIGEgdXJuYSBtb2xlc3RpZSBwb3J0YS4KCkRvbmVjIGEgYmliZW5kdW0gbWFnbmEsIHZlbCBjb25zZXF1YXQgdmVsaXQuIEFsaXF1YW0gc3VzY2lwaXQgaW50ZXJkdW0gbWF4aW11cy4gUXVpc3F1ZSBlZ2VzdGFzIHRpbmNpZHVudCB1bHRyaWNlcy4gRnVzY2UgbmVxdWUgbGVvLCBhdWN0b3Igc2l0IGFtZXQgdGVsbHVzIHV0LCB0cmlzdGlxdWUgcGxhY2VyYXQgdHVycGlzLiBOdWxsYW0gZXVpc21vZCB0b3J0b3Igdml0YWUgb3JjaSBhY2N1bXNhbiBzb2RhbGVzLiBDcmFzIG1heGltdXMgdHVycGlzIHNpdCBhbWV0IG1ldHVzIHVsdHJpY2VzLCB1dCBkaWduaXNzaW0gbWFzc2EgbWFsZXN1YWRhLiBRdWlzcXVlIHV0IGp1c3RvIHZlaGljdWxhIG5pYmggdnVscHV0YXRlIHNvbGxpY2l0dWRpbiB1dCB2ZWwgcmlzdXMuIEN1cmFiaXR1ciBkdWkgZHVpLCB2aXZlcnJhIHNlZCBzZW1wZXIgbmVjLCBmYXVjaWJ1cyBzaXQgYW1ldCBkaWFtLiBBZW5lYW4gdXQgZG9sb3IgYWMgZmVsaXMgb3JuYXJlIHZlbmVuYXRpcyB2aXRhZSBmYWNpbGlzaXMgbmlzaS4gQ3JhcyBtYXhpbXVzLCBtYWduYSBpbiBibGFuZGl0IGNvbnNlcXVhdCwgcmlzdXMgYW50ZSBzZW1wZXIgbWFzc2EsIGV1IG1heGltdXMgbWkgbGVjdHVzIGluIGVuaW0uIE1hdXJpcyBzZWQgdGluY2lkdW50IHF1YW0sIHF1aXMgYWxpcXVldCB0ZWxsdXMuIER1aXMgcG9zdWVyZSBhdWd1ZSB2aXRhZSBjdXJzdXMgdGluY2lkdW50LiBQcmFlc2VudCBpbiBhcmN1IHZpdGFlIGxlY3R1cyBjb25ndWUgc2NlbGVyaXNxdWUuCgpTZWQgdml0YWUgZWxpdCBuZXF1ZS4gU3VzcGVuZGlzc2UgcG90ZW50aS4gTnVuYyBxdWlzIGxpZ3VsYSBtYWduYS4gQ3VyYWJpdHVyIG1heGltdXMgc2VtIG5lYyB0ZW1wb3IgZmFjaWxpc2lzLiBJbiBxdWlzIGZlbGlzIGVnZXQgcXVhbSB2dWxwdXRhdGUgc2FnaXR0aXMuIFBlbGxlbnRlc3F1ZSBoYWJpdGFudCBtb3JiaSB0cmlzdGlxdWUgc2VuZWN0dXMgZXQgbmV0dXMgZXQgbWFsZXN1YWRhIGZhbWVzIGFjIHR1cnBpcyBlZ2VzdGFzLiBJbiBlbGl0IGxpYmVybywgc2NlbGVyaXNxdWUgZXQgZXVpc21vZCBhYywgZnJpbmdpbGxhIGV0IHR1cnBpcy4gVml2YW11cyB0ZW1wb3IgbGlndWxhIGx1Y3R1cyB0dXJwaXMgZmFjaWxpc2lzLCB1dCB0aW5jaWR1bnQgb3JjaSBzb2xsaWNpdHVkaW4uIFF1aXNxdWUgc2FnaXR0aXMgZmFjaWxpc2lzIG1hdXJpcyBzZWQgYXVjdG9yLiBGdXNjZSBwb3N1ZXJlIG5pc2wgbWV0dXMsIHV0IGhlbmRyZXJpdCBwdXJ1cyBzY2VsZXJpc3F1ZSB1bGxhbWNvcnBlci4gVml2YW11cyB1bHRyaWNpZXMgdmFyaXVzIGxlbywgYSBsb2JvcnRpcyBlcm9zIHZlbmVuYXRpcyBxdWlzLgoKTmFtIHZ1bHB1dGF0ZSwgbG9yZW0gc2l0IGFtZXQgZWZmaWNpdHVyIHVsdHJpY2llcywganVzdG8gdmVsaXQgZGlnbmlzc2ltIGxlbywgZXQgdWxsYW1jb3JwZXIgdXJuYSB1cm5hIG5vbiBhcmN1LiBEdWlzIGNvbmRpbWVudHVtIGxlY3R1cyB2ZWwgZG9sb3IgcnV0cnVtIGF1Y3Rvci4gTWFlY2VuYXMgbm9uIG51bGxhIHRpbmNpZHVudCwgdmVoaWN1bGEgbmlzbCB2ZWwsIHZlbmVuYXRpcyB0ZWxsdXMuIEFlbmVhbiB2YXJpdXMgZXggdmVsIGV4IGNvbmRpbWVudHVtIHZlaGljdWxhLiBQaGFzZWxsdXMgdWx0cmljZXMgbWFnbmEgdXQgYXVndWUgbWFsZXN1YWRhIG9ybmFyZS4gRXRpYW0gZWZmaWNpdHVyIHZvbHV0cGF0IGFudGUgcnV0cnVtIHZpdmVycmEuIENyYXMgdm9sdXRwYXQgdXQgZG9sb3Igc2l0IGFtZXQgZGlnbmlzc2ltLiBQZWxsZW50ZXNxdWUgZXQgc2NlbGVyaXNxdWUgbWV0dXMuIER1aXMgdml2ZXJyYSBjb25zZWN0ZXR1ciBtYXNzYSwgZXUgaGVuZHJlcml0IG1hc3NhIGF1Y3RvciBlZ2V0LiBGdXNjZSBmYWNpbGlzaXMgZXVpc21vZCBvcmNpLCBzaXQgYW1ldCBmcmluZ2lsbGEgZXN0IGhlbmRyZXJpdCBlZ2V0LiBNYXVyaXMgY29tbW9kbyBhbGlxdWV0IGx1Y3R1cy4gUHJhZXNlbnQgYSBlcmF0IGZlcm1lbnR1bSBlbmltIGFsaXF1YW0gcG9ydHRpdG9yIGFsaXF1ZXQgZXQgZGlhbS4gTWF1cmlzIG5pc2kgZXgsIHVsdHJpY2llcyBzaXQgYW1ldCBhdWN0b3IgYXQsIHVsdHJpY2VzIGVnZXQganVzdG8uIFBoYXNlbGx1cyBlcmF0IGVsaXQsIGNvbmRpbWVudHVtIHNlZCBoZW5kcmVyaXQgZWdldCwgZmF1Y2lidXMgaWQgZG9sb3IuIFByb2luIGR1aSBxdWFtLCBmaW5pYnVzIGV0IG9yY2kgdml0YWUsIGJsYW5kaXQgdWx0cmljaWVzIGFudGUuIEludGVnZXIgY29udmFsbGlzIHRvcnRvciBldSBsb2JvcnRpcyBncmF2aWRhLgoKU2VkIHR1cnBpcyBuaXNsLCB2YXJpdXMgdml0YWUgbWFnbmEgYWMsIGV1aXNtb2QgbW9sZXN0aWUgdGVsbHVzLiBQaGFzZWxsdXMgbWF4aW11cyB0ZWxsdXMgc2l0IGFtZXQgZGFwaWJ1cyBvcm5hcmUuIEFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVmVzdGlidWx1bSBhIGVuaW0gZW5pbS4gUHJhZXNlbnQgYmliZW5kdW0gc2FwaWVuIHZlbCBleCBwb3J0dGl0b3IgbGFvcmVldC4gRXRpYW0gZ3JhdmlkYSBtYWduYSBzaXQgYW1ldCBkaWFtIHB1bHZpbmFyIGRpY3R1bS4gQ3JhcyBzY2VsZXJpc3F1ZSBmZWxpcyBhIGVyb3MgZmFjaWxpc2lzIHByZXRpdW0uIEV0aWFtIGEgdnVscHV0YXRlIGxlY3R1cy4gUGVsbGVudGVzcXVlIGV0IGVzdCBzZWQgbWkgZWZmaWNpdHVyIGZhdWNpYnVzLiBJbnRlZ2VyIGFjIGF1Z3VlIHZpdGFlIG51bGxhIGN1cnN1cyBoZW5kcmVyaXQgYSBhIGVuaW0uIE51bGxhIGZhY2lsaXNpLgoKU2VkIHNlZCBmZXJtZW50dW0gbWF1cmlzLCB0aW5jaWR1bnQgcmhvbmN1cyBlbmltLiBWZXN0aWJ1bHVtIGFudGUgaXBzdW0gcHJpbWlzIGluIGZhdWNpYnVzIG9yY2kgbHVjdHVzIGV0IHVsdHJpY2VzIHBvc3VlcmUgY3ViaWxpYSBjdXJhZTsgUGVsbGVudGVzcXVlIGhhYml0YW50IG1vcmJpIHRyaXN0aXF1ZSBzZW5lY3R1cyBldCBuZXR1cyBldCBtYWxlc3VhZGEgZmFtZXMgYWMgdHVycGlzIGVnZXN0YXMuIE1vcmJpIGxvYm9ydGlzIGNvbnNlY3RldHVyIHRlbGx1cywgbm9uIGFjY3Vtc2FuIGRpYW0gcGVsbGVudGVzcXVlIHZpdGFlLiBDcmFzIGVsZWlmZW5kIGRvbG9yIGRhcGlidXMgbWFsZXN1YWRhIHVsdHJpY2VzLiBQZWxsZW50ZXNxdWUgcHVsdmluYXIgZXJhdCBhIGp1c3RvIHNlbXBlciwgdmVsIG1heGltdXMgZHVpIGNvbW1vZG8uIE51bGxhbSBlbGVpZmVuZCBhdWd1ZSBncmF2aWRhIG1hdXJpcyBmYXVjaWJ1cywgbm9uIHNhZ2l0dGlzIG5pc2wgbW9sZXN0aWUuIFBlbGxlbnRlc3F1ZSB1dCBlbGVtZW50dW0gZGlhbS4gQ3JhcyBmZXJtZW50dW0gcGxhY2VyYXQgcHJldGl1bS4gTmFtIHRpbmNpZHVudCBsYWN1cyBsZW8sIGlkIHZlc3RpYnVsdW0gcmlzdXMgZmV1Z2lhdCBzZWQuIE51bmMgaWQgbWF1cmlzIHR1cnBpcy4gRG9uZWMgdGVtcG9yIGF1Z3VlIHF1aXMgdml2ZXJyYSB0ZW1wdXMuIFBlbGxlbnRlc3F1ZSBoYWJpdGFudCBtb3JiaSB0cmlzdGlxdWUgc2VuZWN0dXMgZXQgbmV0dXMgZXQgbWFsZXN1YWRhIGZhbWVzIGFjIHR1cnBpcyBlZ2VzdGFzLiBOYW0gaW4gZmV1Z2lhdCBtYWduYS4gRG9uZWMgcmhvbmN1cyBtYXNzYSBuZWMgbmliaCB2dWxwdXRhdGUsIHZlbCBzdXNjaXBpdCBlcmF0IHByZXRpdW0uCgpDdXJhYml0dXIgdGluY2lkdW50IGFudGUgaW4gYW50ZSBtYXR0aXMsIGF0IGZyaW5naWxsYSBlbGl0IHZhcml1cy4gQWxpcXVhbSBlcmF0IHZvbHV0cGF0LiBEb25lYyBub24gYmliZW5kdW0ganVzdG8uIEFlbmVhbiBub24gZXJhdCBpbnRlcmR1bSwgZGljdHVtIG9kaW8gdm9sdXRwYXQsIHBoYXJldHJhIGZlbGlzLiBOdW5jIHRlbGx1cyBhcmN1LCB2dWxwdXRhdGUgdHJpc3RpcXVlIG1ldHVzIGlkLCBmaW5pYnVzIGNvbnNlY3RldHVyIGR1aS4gSW50ZWdlciBpZCBkYXBpYnVzIGR1aS4gTWF1cmlzIGV0IGhlbmRyZXJpdCBzZW0uIFZlc3RpYnVsdW0gZXQgdWx0cmljZXMgdGVsbHVzLgoKRG9uZWMgbmVjIGF1Z3VlIGlwc3VtLiBEb25lYyBjb252YWxsaXMgdXJuYSBzaXQgYW1ldCBvcmNpIHVsbGFtY29ycGVyIHVsdHJpY2llcy4gU3VzcGVuZGlzc2UgY29uZGltZW50dW0gZmV1Z2lhdCBhdWd1ZSwgbmVjIHNjZWxlcmlzcXVlIHRvcnRvci4gU2VkIGxhY2luaWEgYXJjdSB0aW5jaWR1bnQgZWxpdCBzb2RhbGVzIHZhcml1cy4gU2VkIHBoYXJldHJhIG1hZ25hIG1pLCBzaXQgYW1ldCBmZXVnaWF0IG1ldHVzIGJsYW5kaXQgdXQuIFV0IHZ1bHB1dGF0ZSBncmF2aWRhIGRvbG9yLCBzaXQgYW1ldCB0ZW1wb3IgdmVsaXQgdGluY2lkdW50IG5vbi4gTWF1cmlzIG5pc2kgYXJjdSwgdGluY2lkdW50IGF0IGVsaXQgdmVsLCBhdWN0b3IgbW9sZXN0aWUgZXguIFBoYXNlbGx1cyBjb252YWxsaXMgYXVndWUgc2FwaWVuLCBuZWMgbWFsZXN1YWRhIG5lcXVlIGNvbnNlY3RldHVyIHNpdCBhbWV0LiBTZWQgcXVpcyBhdWd1ZSBzZWQgbGlndWxhIHZlaGljdWxhIGZyaW5naWxsYS4gVXQgdm9sdXRwYXQgdHVycGlzIGVnZXQgcHVydXMgbWFsZXN1YWRhLCBub24gZmV1Z2lhdCBuZXF1ZSBtb2xlc3RpZS4gTWF1cmlzIGV1aXNtb2QgdmVzdGlidWx1bSBydXRydW0uIENyYXMgcG9ydHRpdG9yIGV4IGVnZXQgbGlndWxhIHZlaGljdWxhLCBlZ2V0IHB1bHZpbmFyIGlwc3VtIGZpbmlidXMuIER1aXMgdGluY2lkdW50IHR1cnBpcyBhYyBmZWxpcyB2ZW5lbmF0aXMgZ3JhdmlkYS4gRnVzY2UgbWFsZXN1YWRhIHR1cnBpcyBkb2xvciwgZXQgY3Vyc3VzIHF1YW0gc29sbGljaXR1ZGluIGEuIFZpdmFtdXMgaGVuZHJlcml0IGxvYm9ydGlzIHNhcGllbiwgbmVjIGxhb3JlZXQgbmlzaS4gRG9uZWMgaWQgdWxsYW1jb3JwZXIgZHVpLgoKRG9uZWMgYWxpcXVhbSBtYWxlc3VhZGEgc2VtIGEgdWx0cmljZXMuIERvbmVjIHRpbmNpZHVudCBsaWd1bGEgdXQgdG9ydG9yIHZlc3RpYnVsdW0gaW50ZXJkdW0uIFF1aXNxdWUgYXQgZXggYXJjdS4gU3VzcGVuZGlzc2Ugb3JuYXJlLCBtaSBhIHNvZGFsZXMgdmVoaWN1bGEsIG5pYmggbmlzaSBzZW1wZXIgZHVpLCBlZ2V0IGxhY2luaWEgcXVhbSBtYXNzYSBhdCBuaXNsLiBWZXN0aWJ1bHVtIGFudGUgaXBzdW0gcHJpbWlzIGluIGZhdWNpYnVzIG9yY2kgbHVjdHVzIGV0IHVsdHJpY2VzIHBvc3VlcmUgY3ViaWxpYSBjdXJhZTsgVml2YW11cyBydXRydW0gbWF0dGlzIHF1YW0sIGVnZXQgbWF4aW11cyBzYXBpZW4gcGVsbGVudGVzcXVlIGVnZXQuIEluIGEgdHVycGlzIHNlZCBtYXNzYSBpYWN1bGlzIHRpbmNpZHVudC4gRG9uZWMgZmF1Y2lidXMgc2VkIGVuaW0gZWdldCBmaW5pYnVzLiBWZXN0aWJ1bHVtIG1hbGVzdWFkYSBlbGVpZmVuZCBwdXJ1cyBzaXQgYW1ldCBwb3J0YS4KClZpdmFtdXMgc2FnaXR0aXMgaW4gc2VtIGV0IGVnZXN0YXMuIE1vcmJpIGV0IHZlbGl0IG5vbiBkb2xvciBzdXNjaXBpdCBjb25ndWUgaWQgdml0YWUgdXJuYS4gTmFtIGJsYW5kaXQgdG9ydG9yIG5vbiBuaWJoIHNvbGxpY2l0dWRpbiB2ZXN0aWJ1bHVtLiBEb25lYyBldSBzYXBpZW4gZXguIE1hZWNlbmFzIHZlbCB2ZXN0aWJ1bHVtIGR1aSwgYWMgdGVtcG9yIG51bGxhLiBTZWQgZXQgcmlzdXMgaWQgbWV0dXMgaW50ZXJkdW0gbW9sbGlzIGluIGV1IHRlbGx1cy4gSW4gaGFjIGhhYml0YXNzZSBwbGF0ZWEgZGljdHVtc3QuCgpNb3JiaSBzdXNjaXBpdCBwb3J0dGl0b3IgdG9ydG9yLCBuZWMgdWxsYW1jb3JwZXIgdmVsaXQgcGVsbGVudGVzcXVlIGlkLiBQcmFlc2VudCBhbGlxdWFtLCBvcmNpIGZpbmlidXMgYXVjdG9yIG1hbGVzdWFkYSwgc2VtIGp1c3RvIGZldWdpYXQganVzdG8sIGV0IHB1bHZpbmFyIGxpZ3VsYSBlbmltIGVmZmljaXR1ciBpcHN1bS4gSW4gaW50ZXJkdW0gbGlndWxhIGRvbG9yLCBpbiB0ZW1wdXMgbmVxdWUgc2FnaXR0aXMgZWdldC4gVml2YW11cyBiaWJlbmR1bSB0ZW1wdXMgbmVxdWUsIHZpdGFlIGRpZ25pc3NpbSB0ZWxsdXMuIE51bmMgbG9ib3J0aXMsIG9yY2kgdmVsIGZhdWNpYnVzIGZpbmlidXMsIGVyb3MgYXJjdSBncmF2aWRhIGxhY3VzLCBlZ2V0IHZhcml1cyBlcm9zIGZlbGlzIHZpdGFlIG5lcXVlLiBNYXVyaXMgaW4gbGVjdHVzIG9kaW8uIE51bGxhbSBlZ2V0IGRpYW0gdmVzdGlidWx1bSwgcnV0cnVtIG5lcXVlIHNpdCBhbWV0LCB1bHRyaWNpZXMgc2VtLiBWaXZhbXVzIHZlc3RpYnVsdW0gdHVycGlzIG5vbiBqdXN0byBwb3N1ZXJlIHNjZWxlcmlzcXVlLiBOdW5jIHNpdCBhbWV0IHF1YW0gZmV1Z2lhdCwgZmluaWJ1cyBtaSBhdCwgc2VtcGVyIGVzdC4gTW9yYmkgYWMgbmVxdWUgdGluY2lkdW50LCBwb3J0dGl0b3IgdmVsaXQgYXQsIHVsdHJpY2VzIG1hZ25hLiBOYW0gdmVoaWN1bGEsIGFyY3UgdmVsIHB1bHZpbmFyIGRpZ25pc3NpbSwgYXJjdSBtYXNzYSB0ZW1wdXMgZXJhdCwgdXQgdGluY2lkdW50IGFudGUgdG9ydG9yIG5vbiB2ZWxpdC4gUHJvaW4gdWx0cmljaWVzIHZlbGl0IGV1IGF1Z3VlIGxhb3JlZXQgaW1wZXJkaWV0LiBBbGlxdWFtIHZpdGFlIG1hdXJpcyBjb252YWxsaXMsIHVsbGFtY29ycGVyIG1hc3NhIHNpdCBhbWV0LCB2ZW5lbmF0aXMgbnVsbGEuCgpVdCBwb3J0YSBuaXNpIGZyaW5naWxsYSwgbW9sbGlzIG1hc3NhIHV0LCB0aW5jaWR1bnQgbWV0dXMuIFZlc3RpYnVsdW0gaWQgYXVndWUgdmVsaXQuIE51bGxhIGxvYm9ydGlzIGVnZXQgbGliZXJvIHF1aXMgZmFjaWxpc2lzLiBBbGlxdWFtIHZvbHV0cGF0IHRlbGx1cyBzZW0sIG5lYyBldWlzbW9kIG1hZ25hIGZyaW5naWxsYSBuZWMuIEluIG1vbGVzdGllIGZlbGlzIHF1aXMgcG9zdWVyZSBlbGVpZmVuZC4gVXQgbm9uIG51bGxhIHBvcnRhLCB1bHRyaWNlcyBxdWFtIG5lYywgcG9ydGEgYW50ZS4gRG9uZWMgdHJpc3RpcXVlIHF1YW0gdXQgbnVsbGEgdGluY2lkdW50LCBhIGNvbmRpbWVudHVtIG9kaW8gZWZmaWNpdHVyLiBWaXZhbXVzIG5vbiBwb3J0dGl0b3IgbGlndWxhLgoKRG9uZWMgYXQgbmliaCBhYyBtaSBvcm5hcmUgYWNjdW1zYW4uIEN1cmFiaXR1ciB2ZWwgZXJhdCB1dCB2ZWxpdCBpbXBlcmRpZXQgdnVscHV0YXRlLiBDdXJhYml0dXIgY29udmFsbGlzIG5lcXVlIGV4LCBub24gY29uc2VxdWF0IGxlbyBhdWN0b3IgYS4gTWFlY2VuYXMgZGFwaWJ1cyB2ZWxpdCBuZWMgc2VtIHZpdmVycmEsIHZpdGFlIHZpdmVycmEgcmlzdXMgZGlnbmlzc2ltLiBQZWxsZW50ZXNxdWUgbGFvcmVldCBlbGl0IHV0IHB1cnVzIHBvcnRhLCBhIGx1Y3R1cyBhbnRlIGNvbnNlY3RldHVyLiBOdWxsYSBhYyBwb3J0YSBmZWxpcy4gTWF1cmlzIGZhY2lsaXNpcyB0cmlzdGlxdWUgbGFjdXMgdXQgZGljdHVtLgoKTnVsbGFtIHJob25jdXMgbnVuYyBlc3QsIG5vbiB2aXZlcnJhIGxpZ3VsYSBmZXVnaWF0IGlkLiBQaGFzZWxsdXMgcHVsdmluYXIgdG9ydG9yIGZlbGlzLCB2aXRhZSBmYXVjaWJ1cyBkdWkgYWxpcXVhbSB2ZWwuIENyYXMgcG9ydGEgbWFzc2EgaW4gbGVvIGZhdWNpYnVzLCB1dCBsdWN0dXMgZXJvcyBmZXJtZW50dW0uIEFlbmVhbiBwdWx2aW5hciBzYWdpdHRpcyBleCwgZWdldCBtYXR0aXMgbmlzbCBwb3J0dGl0b3Igc2l0IGFtZXQuIERvbmVjIGZhY2lsaXNpcyBudW5jIGxpZ3VsYSwgZXQgcnV0cnVtIGxhY3VzIHBlbGxlbnRlc3F1ZSBldS4gU3VzcGVuZGlzc2UgY3Vyc3VzIG9kaW8gbmVjIGVzdCBkaWN0dW0gdHJpc3RpcXVlLiBWaXZhbXVzIGV0IG9kaW8gdmVsaXQuIERvbmVjIHVsdHJpY2llcyBwb3J0YSB0b3J0b3IsIG5lYyBwb3N1ZXJlIG9kaW8gYWxpcXVhbSBub24uIER1aXMgY29uZGltZW50dW0gZXJhdCBvcmNpLCBhYyBydXRydW0gbGVvIHBsYWNlcmF0IG5vbi4gRXRpYW0gYWxpcXVldCBmYWNpbGlzaXMganVzdG8sIGlkIHJ1dHJ1bSBvcmNpIGV1aXNtb2QgbmVjLiBTZWQgaWQgbGliZXJvIHJpc3VzLiBDcmFzIHBvcnR0aXRvciBlZmZpY2l0dXIgbWFzc2EsIHNpdCBhbWV0IHJob25jdXMgZG9sb3IgdmVzdGlidWx1bSBsdWN0dXMuIE51bmMgYSBlcmF0IGVyb3MuCgpVdCBldSBuaWJoIHNvZGFsZXMsIGludGVyZHVtIG51bGxhIHF1aXMsIGZlcm1lbnR1bSBhdWd1ZS4gSW4gaGFjIGhhYml0YXNzZSBwbGF0ZWEgZGljdHVtc3QuIEFlbmVhbiBwb3J0dGl0b3IsIG51bmMgb3JuYXJlIGVsZW1lbnR1bSBwZWxsZW50ZXNxdWUsIGFudGUgcmlzdXMgc29sbGljaXR1ZGluIGxpZ3VsYSwgcXVpcyBjb252YWxsaXMgbGliZXJvIHVybmEgaWQgbG9yZW0uIFBlbGxlbnRlc3F1ZSBtb2xsaXMgYXQgbmliaCBpbiBncmF2aWRhLiBQZWxsZW50ZXNxdWUgcGVsbGVudGVzcXVlIHNvZGFsZXMgdmFyaXVzLiBQaGFzZWxsdXMgbGFjaW5pYSBleCBxdWFtLCBzaXQgYW1ldCBhbGlxdWFtIGRpYW0gbGFvcmVldCBub24uIEN1cmFiaXR1ciB2ZWwgbG9yZW0gbGlndWxhLiBNb3JiaSB2YXJpdXMsIGR1aSB2ZWwgc29sbGljaXR1ZGluIGVmZmljaXR1ciwgdGVsbHVzIGxhY3VzIHZ1bHB1dGF0ZSBsaWJlcm8sIHNpdCBhbWV0IHVsdHJpY2llcyBsZWN0dXMgZXN0IHNlZCBuaWJoLiBWaXZhbXVzIHVsdHJpY2VzIG5pc2wgbmlzbCwgdml0YWUgbW9sZXN0aWUgbnVsbGEgZGljdHVtIHNlZC4gVmVzdGlidWx1bSBydXRydW0sIGRvbG9yIHNlZCBlZmZpY2l0dXIgbHVjdHVzLCB0dXJwaXMgbWFzc2EgZmF1Y2lidXMgZW5pbSwgdml0YWUgcmhvbmN1cyBtYXVyaXMgdGVsbHVzIG5vbiBsYWN1cy4gTmFtIGZldWdpYXQsIGV4IG5lYyBoZW5kcmVyaXQgaW50ZXJkdW0sIG5pYmggcHVydXMgdml2ZXJyYSByaXN1cywgYXQgcGxhY2VyYXQgZGlhbSByaXN1cyBhYyBlc3QuIFBlbGxlbnRlc3F1ZSBoYWJpdGFudCBtb3JiaSB0cmlzdGlxdWUgc2VuZWN0dXMgZXQgbmV0dXMgZXQgbWFsZXN1YWRhIGZhbWVzIGFjIHR1cnBpcyBlZ2VzdGFzLiBTdXNwZW5kaXNzZSBzZW1wZXIgc2VtIHNlZCBkdWkgcGxhY2VyYXQsIGVnZXQgdnVscHV0YXRlIGR1aSBwZWxsZW50ZXNxdWUuIER1aXMgc2l0IGFtZXQgZW5pbSB1dCBlcmF0IGNvbW1vZG8gZWxlaWZlbmQuCgpBbGlxdWFtIGdyYXZpZGEgYXQgbGlndWxhIGV1IG1hdHRpcy4gVmVzdGlidWx1bSBkaWN0dW0gZWxpdCBzaXQgYW1ldCBzZW0gdWx0cmljaWVzIHVsbGFtY29ycGVyIGF0IGx1Y3R1cyBlcmF0LiBDdXJhYml0dXIgbHVjdHVzIG5lcXVlIHF1aXMgc2VtIGRpY3R1bSB2dWxwdXRhdGUuIE1hZWNlbmFzIHNpdCBhbWV0IGlwc3VtIG1ldHVzLiBDdXJhYml0dXIgaW4gdmVuZW5hdGlzIG51bmMuIERvbmVjIG5lYyBtZXR1cyBtYWduYS4gQWxpcXVhbSBub24gbGliZXJvIGxpYmVyby4gUHJvaW4gcHVsdmluYXIgc2l0IGFtZXQgbGFjdXMgdmVsIHBvcnRhLgoKRG9uZWMgZXQganVzdG8gcXVpcyBsaWJlcm8gZWZmaWNpdHVyIHJ1dHJ1bSBhIHZlbCBkaWFtLiBBbGlxdWFtIHNhZ2l0dGlzIGF1Z3VlIGV0IHNlbSBjb25zZWN0ZXR1ciBkaWN0dW0uIEV0aWFtIHNpdCBhbWV0IGdyYXZpZGEgb3JjaSwgbmVjIGZhdWNpYnVzIGVzdC4gU2VkIGEgdm9sdXRwYXQgbnVsbGEuIFV0IGRpZ25pc3NpbSBtYXR0aXMgZWZmaWNpdHVyLiBRdWlzcXVlIGZhdWNpYnVzIGxvcmVtIHF1aXMgZnJpbmdpbGxhIGFsaXF1ZXQuIFNlZCB1dCB0cmlzdGlxdWUgZXgsIHZpdGFlIHNvZGFsZXMgYXJjdS4gQWxpcXVhbSBtYXhpbXVzIGVuaW0gdGVsbHVzLCBub24gcGxhY2VyYXQgZmVsaXMgZnJpbmdpbGxhIHZlbC4gUGhhc2VsbHVzIGNvbW1vZG8gZW5pbSB2aXRhZSBmZXJtZW50dW0gYmliZW5kdW0uIFF1aXNxdWUgYSBlZmZpY2l0dXIgdG9ydG9yLCBub24gZmFjaWxpc2lzIGR1aS4gSW50ZWdlciBzb2RhbGVzIGRpYW0gYSBuaWJoIGx1Y3R1cywgYSBsb2JvcnRpcyBleCB2YXJpdXMuIEFlbmVhbiB2b2x1dHBhdCB2ZWwgYW50ZSBldCB2ZXN0aWJ1bHVtLiBFdGlhbSBlZ2V0IHJpc3VzIG9kaW8uIFNlZCBuZWMgbnVuYyB0aW5jaWR1bnQgbWFnbmEgZXVpc21vZCBhbGlxdWFtLgoKTnVsbGFtIHNjZWxlcmlzcXVlIHRvcnRvciBlbmltLCB1dCBwbGFjZXJhdCBudW5jIGFjY3Vtc2FuIHZlbC4gRHVpcyB2aXRhZSBzYXBpZW4gYXQgcXVhbSBmYWNpbGlzaXMgY29uc2VxdWF0IGVnZXQgc2VkIHNhcGllbi4gRHVpcyBvcmNpIGFudGUsIGNvbW1vZG8gdXQgbWFnbmEgbm9uLCB1bGxhbWNvcnBlciBzYWdpdHRpcyBpcHN1bS4gSW50ZWdlciBwb3J0dGl0b3IsIGxpZ3VsYSBpbiBmcmluZ2lsbGEgY29uZGltZW50dW0sIHVybmEgbWFnbmEgcnV0cnVtIG9kaW8sIHF1aXMgZmFjaWxpc2lzIGxvcmVtIG9yY2kgYXQgdG9ydG9yLiBNb3JiaSBpbnRlcmR1bSwgbWF1cmlzIGVnZXQgcnV0cnVtIGZhdWNpYnVzLCB0ZWxsdXMgbmlzbCBydXRydW0gZXgsIGFjIGZpbmlidXMgZXJvcyBmZWxpcyB2aXRhZSBhcmN1LiBDdXJhYml0dXIgbW9sbGlzIGFjY3Vtc2FuIHVsdHJpY2llcy4gRXRpYW0gbW9sbGlzIGV1aXNtb2QgZmV1Z2lhdC4gSW50ZWdlciBxdWlzIHJpc3VzIGlwc3VtLiBNb3JiaSB2ZWhpY3VsYSB2aXZlcnJhIHRyaXN0aXF1ZS4gRXRpYW0gaW1wZXJkaWV0IG5lcXVlIGZldWdpYXQgc2FnaXR0aXMgdm9sdXRwYXQuIE51bmMgZWdlc3RhcyBkaWFtIGVuaW0sIHF1aXMgb3JuYXJlIGVsaXQgYmxhbmRpdCBpbi4gRG9uZWMgcHVsdmluYXIgcmlzdXMgdXQgZXJvcyBwZWxsZW50ZXNxdWUgY29udmFsbGlzLiBNb3JiaSBhYyBkdWkgcG9ydGEsIHBsYWNlcmF0IGxlbyBub24sIHJ1dHJ1bSBlcm9zLiBNYWVjZW5hcyBzZWQgZHVpIGlkIGp1c3RvIGZlcm1lbnR1bSBjb21tb2RvLgoKRG9uZWMgZXVpc21vZCB2ZWwgYW50ZSB2aXRhZSBwb3J0dGl0b3IuIFN1c3BlbmRpc3NlIHJob25jdXMgbWkgbm9uIG9kaW8gdnVscHV0YXRlLCBhdCBwaGFyZXRyYSBzYXBpZW4gdWx0cmljZXMuIE1vcmJpIHZpdGFlIG9ybmFyZSBuaXNsLiBWZXN0aWJ1bHVtIGEgc29sbGljaXR1ZGluIG1ldHVzLiBTZWQgaW4gaXBzdW0gZWdldCBsaWJlcm8gdGVtcHVzIGhlbmRyZXJpdCBpZCBzZWQgdHVycGlzLiBPcmNpIHZhcml1cyBuYXRvcXVlIHBlbmF0aWJ1cyBldCBtYWduaXMgZGlzIHBhcnR1cmllbnQgbW9udGVzLCBuYXNjZXR1ciByaWRpY3VsdXMgbXVzLiBOdWxsYSBmYWNpbGlzaS4KClBoYXNlbGx1cyByaG9uY3VzIGxhb3JlZXQgZXN0IGlkIGNvbmd1ZS4gSW50ZWdlciBydXRydW0gY29uc2VjdGV0dXIgZWxpdCBiaWJlbmR1bSBldWlzbW9kLiBEdWlzIGVnZXQgbGliZXJvIGVnZXQgYXJjdSB2b2x1dHBhdCB0aW5jaWR1bnQgc2l0IGFtZXQgbmVjIHF1YW0uIFV0IGRpY3R1bSBuZXF1ZSBkb2xvciwgaW4gY29uZ3VlIGZlbGlzIGhlbmRyZXJpdCBldS4gQWVuZWFuIG9ybmFyZSBsdWN0dXMgbWF1cmlzLCBub24gY29uc2VjdGV0dXIgdG9ydG9yIHRlbXB1cyB1dC4gUGhhc2VsbHVzIHNvbGxpY2l0dWRpbiBsdWN0dXMgbWkgZWdldCBoZW5kcmVyaXQuIFByb2luIHB1bHZpbmFyIHNvZGFsZXMgc2VtcGVyLiBDdXJhYml0dXIgcXVpcyBwb3N1ZXJlIGxvcmVtLiBDdXJhYml0dXIgbW9sZXN0aWUgZW5pbSBub24gc2FnaXR0aXMgcnV0cnVtLiBWaXZhbXVzIGluIG1hc3NhIGlkIGlwc3VtIGx1Y3R1cyBlbGVpZmVuZCB2aXRhZSBxdWlzIG1pLgoKVmVzdGlidWx1bSBhIG1hbGVzdWFkYSB0dXJwaXMuIEluIGhhYyBoYWJpdGFzc2UgcGxhdGVhIGRpY3R1bXN0LiBEdWlzIHBvc3VlcmUgcG9ydGEgZXN0IG5lYyB2YXJpdXMuIFZlc3RpYnVsdW0gcHVydXMgZmVsaXMsIGNvbmd1ZSBxdWlzIHJob25jdXMgYWMsIGVnZXN0YXMgaWQgcHVydXMuIFZlc3RpYnVsdW0gcG9zdWVyZSBhcmN1IGV1IGFsaXF1ZXQgc29sbGljaXR1ZGluLiBJbiBsdWN0dXMgdXJuYSB2aXRhZSB2dWxwdXRhdGUgcHJldGl1bS4gVml2YW11cyBhdCB0ZWxsdXMgdmVsIG51bGxhIHZlc3RpYnVsdW0gb3JuYXJlIHNpdCBhbWV0IHNpdCBhbWV0IHNhcGllbi4gQ3JhcyBtb2xlc3RpZSBkdWkgaWQgbWV0dXMgcGxhY2VyYXQgdmVzdGlidWx1bS4gTnVsbGFtIGdyYXZpZGEgbHVjdHVzIG9kaW8gbm9uIGRpZ25pc3NpbS4gRnVzY2UgYXVjdG9yIGV1aXNtb2QgcXVhbSwgZmluaWJ1cyB1bHRyaWNpZXMgbWF1cmlzIGFsaXF1ZXQgc2VkLgoKUGVsbGVudGVzcXVlIG5lcXVlIGxhY3VzLCB0aW5jaWR1bnQgYSBlZmZpY2l0dXIgc2l0IGFtZXQsIGNvbnNlY3RldHVyIGEgZWxpdC4gU3VzcGVuZGlzc2UgbWF4aW11cywgbnVuYyBub24gdm9sdXRwYXQgZWxlaWZlbmQsIHRvcnRvciBsYWN1cyBmcmluZ2lsbGEgbGliZXJvLCBuZWMgdmVuZW5hdGlzIHNhcGllbiBtYXNzYSBzaXQgYW1ldCBudW5jLiBFdGlhbSBzaXQgYW1ldCBvZGlvIHZlbCBkb2xvciBsYW9yZWV0IGNvbmRpbWVudHVtIGV1IGVnZXQgbmliaC4gQ3JhcyBzZWQgbmlzbCBpbiB0b3J0b3Igdml2ZXJyYSBsb2JvcnRpcyBlbGVtZW50dW0gbm9uIGVzdC4gTWFlY2VuYXMgdGVtcHVzLCBvZGlvIGFjIHNlbXBlciBtYXR0aXMsIG1hc3NhIGVyYXQgcGxhY2VyYXQgbmVxdWUsIG5vbiBjb25kaW1lbnR1bSBtYWduYSB0ZWxsdXMgZWdldCBlcmF0LiBOYW0gc2FwaWVuIHNhcGllbiwgY3Vyc3VzIG5vbiBiaWJlbmR1bSBhLCBzb2RhbGVzIHZlbCBuZXF1ZS4gQWxpcXVhbSBwaGFyZXRyYSBxdWlzIGVsaXQgYXQgcnV0cnVtLiBJbiBzZWQgZHVpIHNjZWxlcmlzcXVlLCBlbGVtZW50dW0gbmlzbCBzaXQgYW1ldCwgdGluY2lkdW50IG1hc3NhLiBQcm9pbiBmaW5pYnVzIHF1YW0gdXQgbWF0dGlzIGRpY3R1bS4gVml2YW11cyBpYWN1bGlzIGFjIGFyY3UgZXQgaGVuZHJlcml0LgoKTmFtIGRpY3R1bSBsZWN0dXMgc2VtLiBDcmFzIG5lYyBlcmF0IHV0IG5pc2wgdmVzdGlidWx1bSBjb25kaW1lbnR1bSBuZWMgc3VzY2lwaXQgbWFzc2EuIFNlZCBjb25zZXF1YXQgbmVxdWUgYSBsZW8gZmFjaWxpc2lzIHRyaXN0aXF1ZS4gT3JjaSB2YXJpdXMgbmF0b3F1ZSBwZW5hdGlidXMgZXQgbWFnbmlzIGRpcyBwYXJ0dXJpZW50IG1vbnRlcywgbmFzY2V0dXIgcmlkaWN1bHVzIG11cy4gUGVsbGVudGVzcXVlIHZpdGFlIGVsZW1lbnR1bSB2ZWxpdCwgZXQgZmVybWVudHVtIGp1c3RvLiBEdWlzIHV0IG5pc2wgbmlzbC4gRXRpYW0gbWFnbmEgb3JjaSwgY29uZGltZW50dW0gcXVpcyBuaXNsIG5lYywgYWxpcXVhbSBwcmV0aXVtIHB1cnVzLiBTdXNwZW5kaXNzZSBwb3RlbnRpLiBEdWlzIGV1IHVsdHJpY2VzIGZlbGlzLCB2ZWwgZWdlc3RhcyB0ZWxsdXMuIFZlc3RpYnVsdW0gbm9uIGV4IGlkIGFyY3UgbWF0dGlzIHBvc3VlcmUgdXQgdml0YWUganVzdG8uIFByYWVzZW50IHZlbCBuaWJoIGVyb3MuCgpJbnRlZ2VyIGNvbmRpbWVudHVtIGNvbmd1ZSBiaWJlbmR1bS4gVmVzdGlidWx1bSBhbGlxdWV0IGFyY3Ugdml0YWUgbmliaCBhbGlxdWFtLCBzZWQgbWF4aW11cyB0ZWxsdXMgc2FnaXR0aXMuIE51bGxhbSBmcmluZ2lsbGEgY3Vyc3VzIG5pc2wgZXQgaGVuZHJlcml0LiBOdWxsYSBwZWxsZW50ZXNxdWUsIGRpYW0gaWQgZWxlaWZlbmQgZWdlc3RhcywgdmVsaXQgaXBzdW0gY3Vyc3VzIGFudGUsIGlkIGNvbmd1ZSBlcm9zIG5pYmggdXQgb3JjaS4gQWxpcXVhbSBhdWN0b3Igc29sbGljaXR1ZGluIGxhY2luaWEuIE51bGxhbSBtYXhpbXVzIHJpc3VzIGV1IHRvcnRvciBpbXBlcmRpZXQgZmFjaWxpc2lzLiBEdWlzIGltcGVyZGlldCBsaWd1bGEgYSB0b3J0b3IgcG9ydGEsIGFjIHZpdmVycmEgZG9sb3IgcGxhY2VyYXQuIFF1aXNxdWUgZWdlc3RhcyBhbGlxdWV0IGludGVyZHVtLiBEb25lYyB2aXRhZSBmYWNpbGlzaXMgaXBzdW0uIE1hdXJpcyBzdXNjaXBpdCBtYXNzYSBuaXNsLCBzZWQgZWxlbWVudHVtIGVyb3MgbG9ib3J0aXMgYXQuCgpTZWQgdm9sdXRwYXQgdXJuYSBldSBmZXVnaWF0IGZpbmlidXMuIEFlbmVhbiBuZWMgb3JjaSBlbmltLiBVdCBwbGFjZXJhdCBuaXNpIGlkIG5pc2kgcHVsdmluYXIgY29uZ3VlLiBTdXNwZW5kaXNzZSBwb3RlbnRpLiBJbiBxdWlzIG1hdXJpcyB1bHRyaWNlcywgZmF1Y2lidXMgZmVsaXMgaW4sIGJpYmVuZHVtIG5pc2kuIFF1aXNxdWUgdml0YWUgZmF1Y2lidXMgcmlzdXMuIERvbmVjIGVsaXQgYXJjdSwgZmFjaWxpc2lzIG5lYyBuaWJoIHNpdCBhbWV0LCBjb252YWxsaXMgYmliZW5kdW0gdmVsaXQuIE1vcmJpIHBvc3VlcmUgbGFjaW5pYSB1bHRyaWNpZXMuIE1vcmJpIGp1c3RvIGVsaXQsIHNjZWxlcmlzcXVlIG5vbiBiaWJlbmR1bSBhdCwgbW9sbGlzIGluIGxvcmVtLiBBbGlxdWFtIGVyYXQgdm9sdXRwYXQuIE5hbSBxdWlzIGZlbGlzIGRpZ25pc3NpbSwgbGFjaW5pYSBkb2xvciBldSwgcHVsdmluYXIgZXguCgpQaGFzZWxsdXMgcGxhY2VyYXQgaW50ZXJkdW0gdGluY2lkdW50LiBDcmFzIGNvbnNlY3RldHVyIHRpbmNpZHVudCB1cm5hIGF0IHBsYWNlcmF0LiBEdWlzIG1hbGVzdWFkYSBtYWduYSBlcmF0LCBzaXQgYW1ldCBydXRydW0gbWkgbGFjaW5pYSBhYy4gUXVpc3F1ZSBzZWQgbWF0dGlzIG51bGxhLiBDdXJhYml0dXIgc2VkIHNhZ2l0dGlzIGlwc3VtLCByaG9uY3VzIGhlbmRyZXJpdCBuaXNpLiBJbiBuZWMgZWxlaWZlbmQgbWkuIE1hdXJpcyBhdWN0b3IgdGVsbHVzIHNhcGllbiwgc2VkIGVnZXN0YXMgdG9ydG9yIGN1cnN1cyBjdXJzdXMuIERvbmVjIGVnZXQgaWFjdWxpcyBsZW8uIERvbmVjIGxhb3JlZXQgbHVjdHVzIG1hZ25hIHNlZCBjb25kaW1lbnR1bS4gUHJhZXNlbnQgcG9ydGEgdG9ydG9yIHV0IGxvYm9ydGlzIHZlbmVuYXRpcy4gUXVpc3F1ZSBzb2RhbGVzIG1pIHNlbSwgZWdldCBsYWNpbmlhIG5pc2kgbWF0dGlzIGlkLiBOdWxsYW0gc2FwaWVuIGxlY3R1cywgZWxlaWZlbmQgdXQgcG9zdWVyZSBpZCwgdWxsYW1jb3JwZXIgaW4gdGVsbHVzLiBTdXNwZW5kaXNzZSBjb25zZWN0ZXR1ciBmYWNpbGlzaXMgc2VtLCB2ZWwgZGlnbmlzc2ltIGV4IGltcGVyZGlldCBzZWQuIFNlZCB2aXRhZSBsZWN0dXMgYXQgYXJjdSBjb25kaW1lbnR1bSB0aW5jaWR1bnQgc2l0IGFtZXQgcXVpcyBxdWFtLiBQaGFzZWxsdXMgcHVsdmluYXIsIHRlbGx1cyBpbiBjb25zZXF1YXQgcG9zdWVyZSwgYW50ZSBleCB1bHRyaWNlcyBtZXR1cywgdmVsIG9ybmFyZSBudW5jIHR1cnBpcyBub24gZmVsaXMuIFZpdmFtdXMgbW9sbGlzIHZpdmVycmEgbnVuYyBpZCBzZW1wZXIuCgpTdXNwZW5kaXNzZSBibGFuZGl0IHF1YW0gaW4gdGluY2lkdW50IGNvbnZhbGxpcy4gVmVzdGlidWx1bSBhbnRlIG5pc2ksIHVsbGFtY29ycGVyIHJob25jdXMgZmF1Y2lidXMgc2VkLCBzY2VsZXJpc3F1ZSBlZ2V0IG9yY2kuIE51bGxhbSBwdWx2aW5hciBhdWd1ZSBpbiBsaWJlcm8gc3VzY2lwaXQsIHNlZCBlZ2VzdGFzIGVzdCBlbGVtZW50dW0uIFBoYXNlbGx1cyBsaWd1bGEgdHVycGlzLCB2ZWhpY3VsYSBhIGZhY2lsaXNpcyB2aXRhZSwgdGVtcG9yIHV0IGFudGUuIE1hZWNlbmFzIGxvYm9ydGlzIHRvcnRvciBpbiBpbXBlcmRpZXQgbGFjaW5pYS4gQWxpcXVhbSBldWlzbW9kIGV1IG9yY2kgZWdldCBsb2JvcnRpcy4gTWFlY2VuYXMgdGluY2lkdW50IG1hc3NhIHNpdCBhbWV0IHBlbGxlbnRlc3F1ZSBjb25zZWN0ZXR1ci4gVmVzdGlidWx1bSBhdWN0b3IgZXUgb3JjaSBub24gZWZmaWNpdHVyLiBWaXZhbXVzIGluIHNvZGFsZXMgbGFjdXMuIFZlc3RpYnVsdW0gYXQgbmlzaSBldSBuaXNpIGhlbmRyZXJpdCBjb25ndWUgbmVjIHNpdCBhbWV0IG5pc2kuIE1vcmJpIHRlbXB1cyBtYXR0aXMgb3JjaS4gRG9uZWMgdml0YWUgbnVuYyBlcm9zLiBEdWlzIHZlc3RpYnVsdW0gZmVsaXMgaW50ZXJkdW0gbGVjdHVzIHZlaGljdWxhLCBzaXQgYW1ldCBtYWxlc3VhZGEgaXBzdW0gZWZmaWNpdHVyLiBWZXN0aWJ1bHVtIGN1cnN1cywgcHVydXMgZXQgcHJldGl1bSBlbGVtZW50dW0sIGlwc3VtIGFyY3UgYmliZW5kdW0gbGliZXJvLCBzZWQgdmVoaWN1bGEgZXJhdCBlcm9zIGluIHRlbGx1cy4gUHJvaW4gbGFjaW5pYSB2ZWxpdCBzZWQgZGlhbSBsdWN0dXMsIG5lYyBwbGFjZXJhdCBleCBmZXJtZW50dW0uCgpDcmFzIHF1YW0gbmlzbCwgcG9ydHRpdG9yIGFjIHBoYXJldHJhIGluLCBwb3J0YSBpZCBlcm9zLiBOdWxsYW0gaXBzdW0gb2RpbywgZGlnbmlzc2ltIHZpdGFlIGVzdCBub24sIGF1Y3RvciB0ZW1wb3IgYXVndWUuIE5hbSB2aXRhZSBuaXNsIGluIGxlY3R1cyBhY2N1bXNhbiBhdWN0b3Igbm9uIHZlbCBsaWd1bGEuIFBoYXNlbGx1cyBldSBsZWN0dXMgc2FnaXR0aXMsIHVsdHJpY2VzIGxvcmVtIG5vbiwgZmluaWJ1cyBtYXNzYS4gVXQgcHJldGl1bSBlZmZpY2l0dXIgbnVsbGEgYWMgYmxhbmRpdC4gVmVzdGlidWx1bSBpZCB2b2x1dHBhdCBqdXN0by4gTW9yYmkgZWxlbWVudHVtIGF1Z3VlIHNpdCBhbWV0IGVyYXQgcHJldGl1bSBzYWdpdHRpcy4gQ3VyYWJpdHVyIHNvZGFsZXMgZWdldCBlc3QgcXVpcyBibGFuZGl0LiBDcmFzIG1hbGVzdWFkYSBpbnRlcmR1bSBldWlzbW9kLiBTZWQgdml0YWUgbWF1cmlzIHF1aXMgbGVvIG1hdHRpcyB2ZWhpY3VsYSBzZWQgc2VkIGVuaW0uIENsYXNzIGFwdGVudCB0YWNpdGkgc29jaW9zcXUgYWQgbGl0b3JhIHRvcnF1ZW50IHBlciBjb251YmlhIG5vc3RyYSwgcGVyIGluY2VwdG9zIGhpbWVuYWVvcy4gTmFtIHV0IHNhcGllbiBlZmZpY2l0dXIsIHN1c2NpcGl0IGxpZ3VsYSBldSwgZWxlbWVudHVtIHNlbS4gQ2xhc3MgYXB0ZW50IHRhY2l0aSBzb2Npb3NxdSBhZCBsaXRvcmEgdG9ycXVlbnQgcGVyIGNvbnViaWEgbm9zdHJhLCBwZXIgaW5jZXB0b3MgaGltZW5hZW9zLiBEb25lYyBxdWlzIHByZXRpdW0gbmliaC4gTmFtIHZlbmVuYXRpcyBtYXNzYSBsZW8sIHZpdGFlIGZhdWNpYnVzIGVyb3MgZnJpbmdpbGxhIHF1aXMuCgpMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzY2luZyBlbGl0LiBOdWxsYSBxdWFtIGxpZ3VsYSwgdGVtcHVzIHF1aXMgaWFjdWxpcyBuZWMsIHJob25jdXMgdXQgbWF1cmlzLiBEb25lYyBwb3J0dGl0b3IsIHZlbGl0IGFjIHNjZWxlcmlzcXVlIGFjY3Vtc2FuLCBzZW0gbGliZXJvIGZlcm1lbnR1bSBsYWN1cywgdml0YWUgdmVzdGlidWx1bSB2ZWxpdCBudW5jIGVnZXQgZXN0LiBQcmFlc2VudCBub24gcmlzdXMgZmVsaXMuIE51bGxhIHNpdCBhbWV0IGFsaXF1ZXQgcXVhbS4gRG9uZWMgYWMgcG9zdWVyZSBlc3QuIFZlc3RpYnVsdW0gdml0YWUgcG9zdWVyZSBleCwgcXVpcyB2ZXN0aWJ1bHVtIGF1Z3VlLiBGdXNjZSBtb2xlc3RpZSBsZWN0dXMgcXVpcyB2aXZlcnJhIHZhcml1cy4gRG9uZWMgdml2ZXJyYSwgbnVuYyBhYyBiaWJlbmR1bSBiaWJlbmR1bSwgbnVsbGEgbWV0dXMgbG9ib3J0aXMgYW50ZSwgZGlnbmlzc2ltIGF1Y3RvciBhbnRlIG5pc2kgY29uZGltZW50dW0gbWV0dXMuIFNlZCB2ZWwgcHVsdmluYXIgdG9ydG9yLiBOdWxsYW0gdWxsYW1jb3JwZXIgZXVpc21vZCBxdWFtLCBldSBjdXJzdXMgbmlzaSBzdXNjaXBpdCBub24uIFZpdmFtdXMgYXQgZWxpdCB2ZWxpdC4KCkZ1c2NlIGxvYm9ydGlzIG1pIHBoYXJldHJhIG1hc3NhIGFsaXF1YW0gY3Vyc3VzLiBQaGFzZWxsdXMgZGljdHVtIHNpdCBhbWV0IGZlbGlzIGF0IHBsYWNlcmF0LiBQZWxsZW50ZXNxdWUgdml2ZXJyYSBlbGVtZW50dW0gZXJvcywgYSB2ZXN0aWJ1bHVtIGlwc3VtIHBvcnRhIHV0LiBQZWxsZW50ZXNxdWUgcXVpcyBsb2JvcnRpcyBuaXNpLCBzaXQgYW1ldCBlbGVtZW50dW0gZXJhdC4gRG9uZWMgdmVsIHRlbGx1cyBhIHRlbGx1cyB2dWxwdXRhdGUgaGVuZHJlcml0LiBOYW0gZXQgZnJpbmdpbGxhIGVsaXQuIE5hbSB1dCBsZW8gdmVsIG5pYmggc29kYWxlcyB0aW5jaWR1bnQuIEN1cmFiaXR1ciB1dCBtYXR0aXMgbGVjdHVzLiBOdW5jIHZlbCBtaSBzZWQgYXVndWUgYWxpcXVhbSBjb25zZXF1YXQuIEFlbmVhbiBmZXVnaWF0IGxlbyBpZCB2ZWxpdCBtb2xlc3RpZSBwb3J0dGl0b3IuIEV0aWFtIHZ1bHB1dGF0ZSBoZW5kcmVyaXQgZXJhdCwgdWx0cmljaWVzIHRlbXB1cyBlc3QgYWxpcXVldCB1dC4gRG9uZWMgbWF0dGlzIHNhcGllbiBuZWMgY29uZGltZW50dW0gZmF1Y2lidXMuIEluIGN1cnN1cywgbWFnbmEgaW4gZmV1Z2lhdCBldWlzbW9kLCBkb2xvciBtYXVyaXMgdWx0cmljZXMgc2FwaWVuLCBzZWQgc2FnaXR0aXMgc2VtIGR1aSB2aXRhZSBhcmN1LiBOdW5jIGN1cnN1cyBlbmltIGF0IHNlbSBlbGVtZW50dW0sIHZpdGFlIGF1Y3RvciBhbnRlIHN1c2NpcGl0LiBNYXVyaXMgbm9uIGZlcm1lbnR1bSBqdXN0by4KClBlbGxlbnRlc3F1ZSBydXRydW0gdWx0cmljaWVzIGFsaXF1YW0uIE1hZWNlbmFzIHZhcml1cyBpcHN1bSBhYyBudWxsYSB0aW5jaWR1bnQgY29uZGltZW50dW0uIEludGVyZHVtIGV0IG1hbGVzdWFkYSBmYW1lcyBhYyBhbnRlIGlwc3VtIHByaW1pcyBpbiBmYXVjaWJ1cy4gUXVpc3F1ZSBmYXVjaWJ1cyBzYXBpZW4gZXUgcHVsdmluYXIgdWxsYW1jb3JwZXIuIEludGVnZXIgYWMgb3JuYXJlIGFudGUuIERvbmVjIGF0IGVuaW0gZWdldCBlcmF0IHBvcnRhIGFjY3Vtc2FuIGEgZXUgYW50ZS4gQWxpcXVhbSBldSBlbGl0IG5lYyBkaWFtIGRhcGlidXMgZ3JhdmlkYS4gTmFtIGNvbnNlcXVhdCBwZWxsZW50ZXNxdWUgdm9sdXRwYXQuIE51bGxhIHBvc3VlcmUgcG9ydGEgbGFvcmVldC4gU2VkIGVnZXQgcG9zdWVyZSBlbmltLCBldCBpYWN1bGlzIG1hZ25hLiBOYW0gZWdldCBhY2N1bXNhbiBlcm9zLiBDcmFzIGlkIGNvbnZhbGxpcyBkdWkuIFN1c3BlbmRpc3NlIHZlaGljdWxhIGR1aSBhdCBzb2RhbGVzIGNvbmRpbWVudHVtLiBEb25lYyB0aW5jaWR1bnQgZXgganVzdG8sIGV0IGNvbnZhbGxpcyBlcmF0IHRyaXN0aXF1ZSB2ZWwuIFV0IGhlbmRyZXJpdCBtb2xlc3RpZSB0dXJwaXMsIHZpdGFlIG1vbGVzdGllIHB1cnVzIGVsZWlmZW5kIHZpdGFlLiBJbnRlZ2VyIHNlbSBuaXNpLCBjb252YWxsaXMgYXQgcmlzdXMgZWdldCwgY3Vyc3VzIHRlbXB1cyBuaWJoLgoKQ3JhcyBtYXhpbXVzIGV4IGJsYW5kaXQsIHVsdHJpY2llcyBhdWd1ZSBpZCwgZGlnbmlzc2ltIHRvcnRvci4gU2VkIGF1Y3RvciwgYXJjdSBpbiBldWlzbW9kIHJob25jdXMsIHB1cnVzIGVuaW0gdml2ZXJyYSBqdXN0bywgdmVsIGZyaW5naWxsYSBtZXR1cyBhcmN1IGV0IG51bmMuIEZ1c2NlIGZhdWNpYnVzIGZyaW5naWxsYSB0dXJwaXMuIENyYXMgZmF1Y2lidXMgaW50ZXJkdW0gbmlzbCBldCBpbnRlcmR1bS4gSW4gdmVsaXQgZmVsaXMsIGJpYmVuZHVtIGEgbWkgaWQsIGNvbnNlY3RldHVyIGxvYm9ydGlzIGR1aS4gTnVsbGEgZmFjaWxpc2kuIEluIHNjZWxlcmlzcXVlIGZlcm1lbnR1bSB0ZW1wb3IuIFBoYXNlbGx1cyBwb3J0YSBub24ganVzdG8gbm9uIGxvYm9ydGlzLiBJbiBsZWN0dXMgb2RpbywgY29uZGltZW50dW0gaW4gZW5pbSB1dCwgYWNjdW1zYW4gZnJpbmdpbGxhIG1pLiBTZWQgc2FnaXR0aXMgbmliaCB2ZWxpdCwgdmVsIHZlbmVuYXRpcyB0ZWxsdXMgcHVsdmluYXIgdmVzdGlidWx1bS4KCkV0aWFtIHNhZ2l0dGlzIHBvcnR0aXRvciBuZXF1ZSwgYXQgc2NlbGVyaXNxdWUgZmVsaXMgdWxsYW1jb3JwZXIgc2VkLiBJbnRlZ2VyIGlhY3VsaXMgYWMgc2VtIGNvbnNlcXVhdCBpbnRlcmR1bS4gQWVuZWFuIGFsaXF1YW0sIGxlbyBpbiB0aW5jaWR1bnQgaWFjdWxpcywgdHVycGlzIG9kaW8gYWxpcXVldCBleCwgbWF0dGlzIGZldWdpYXQgZXggbnVuYyBhIHF1YW0uIFN1c3BlbmRpc3NlIG5lYyBmZWxpcyB1dCBqdXN0byBjdXJzdXMgcmhvbmN1cyBpbiBlZ2V0IGVsaXQuIEFlbmVhbiBvcm5hcmUgYXVjdG9yIHVybmEuIE9yY2kgdmFyaXVzIG5hdG9xdWUgcGVuYXRpYnVzIGV0IG1hZ25pcyBkaXMgcGFydHVyaWVudCBtb250ZXMsIG5hc2NldHVyIHJpZGljdWx1cyBtdXMuIFBoYXNlbGx1cyBsdWN0dXMgdmVzdGlidWx1bSBtYXVyaXMgZXQgY29uc2VjdGV0dXIuIEFlbmVhbiBldSBpbXBlcmRpZXQgZG9sb3IuIFF1aXNxdWUgY29tbW9kbyBlcmF0IGFjIGFudGUgZmluaWJ1cyB2aXZlcnJhLiBEb25lYyBtYXR0aXMgdmVsaXQgYWMgZXN0IGZlcm1lbnR1bSwgZXQgYWxpcXVldCBuaXNsIHZpdmVycmEuIERvbmVjIGFsaXF1ZXQgdWxsYW1jb3JwZXIgcXVhbSwgc2l0IGFtZXQgcG9ydHRpdG9yIGFyY3UgY29uc2VjdGV0dXIgbmVjLiBOYW0gZWdldCBsYWN1cyBuZWMgcXVhbSBydXRydW0gcnV0cnVtIG5vbiBpbiBuaXNpLiBWaXZhbXVzIGlhY3VsaXMgZXJvcyBlZ2V0IGV1aXNtb2QgZ3JhdmlkYS4gU2VkIGZldWdpYXQgdGluY2lkdW50IG1ldHVzLCBub24gZXVpc21vZCBqdXN0byBkaWN0dW0gaW4uCgpEb25lYyBpYWN1bGlzIG5vbiBpcHN1bSBpbiBhY2N1bXNhbi4gSW4gaXBzdW0gdHVycGlzLCB0aW5jaWR1bnQgbm9uIGVsZW1lbnR1bSBxdWlzLCBsb2JvcnRpcyBhIHR1cnBpcy4gRnVzY2UgcmhvbmN1cyBkb2xvciByaXN1cywgbm9uIGxvYm9ydGlzIG51bGxhIGxhY2luaWEgaWQuIFBoYXNlbGx1cyBtb2xsaXMgbmlzaSBldSBxdWFtIHJ1dHJ1bSwgc2l0IGFtZXQgYmliZW5kdW0gb3JjaSBtb2xsaXMuIE51bGxhIGZhY2lsaXNpLiBTZWQgdXQgdG9ydG9yIGV1IGVyb3MgdGluY2lkdW50IGhlbmRyZXJpdCBldCBldSBmZWxpcy4gSW4gYWMgbGFjdXMgY29uZ3VlLCBydXRydW0gb3JjaSBldCwgbWF0dGlzIGFudGUuIEFsaXF1YW0gcXVpcyBsZW8gZXN0LiBQcm9pbiBzaXQgYW1ldCBkb2xvciBtb2xlc3RpZSwgdmVoaWN1bGEgbWkgdml0YWUsIGRhcGlidXMgbnVsbGEuIE51bGxhbSBjb252YWxsaXMgYWxpcXVldCBleCwgaW4gc2NlbGVyaXNxdWUgbmlzaSB2ZXN0aWJ1bHVtIHV0LgoKTWFlY2VuYXMgcGxhY2VyYXQsIHF1YW0gdXQgdGVtcHVzIGRpY3R1bSwgZWxpdCBudW5jIGJsYW5kaXQgb2RpbywgYXQgZnJpbmdpbGxhIGp1c3RvIG9kaW8gYWMgb2Rpby4gVmVzdGlidWx1bSBhIG5pYmggaWQgcHVydXMgbW9sbGlzIGV1aXNtb2QgcXVpcyBub24gbGVvLiBOdWxsYW0gdWxsYW1jb3JwZXIgbG9yZW0gbGVjdHVzLiBDcmFzIGluIHN1c2NpcGl0IGVyb3MuIE51bGxhbSBiaWJlbmR1bSBmZXJtZW50dW0gZXggaW4gZWdlc3Rhcy4gRHVpcyBhbGlxdWFtIGxhY3VzIGNvbnZhbGxpcyByaG9uY3VzIHBlbGxlbnRlc3F1ZS4gUGVsbGVudGVzcXVlIG1vbGVzdGllIHVsbGFtY29ycGVyIGNvbW1vZG8uIFZlc3RpYnVsdW0gaGVuZHJlcml0IGVyb3MgcGhhcmV0cmEgbWF0dGlzIGZlcm1lbnR1bS4gQWxpcXVhbSBjb21tb2RvIGFsaXF1YW0gdGVsbHVzIGVnZXQgZmF1Y2lidXMuIE51bmMgdGVsbHVzIHZlbGl0LCBzb2RhbGVzIGlkIGF1Z3VlIG5vbiwgZmV1Z2lhdCBtYWxlc3VhZGEgYXVndWUuIFN1c3BlbmRpc3NlIGV0IHZlc3RpYnVsdW0gZW5pbS4gVmVzdGlidWx1bSBzZW1wZXIgaW1wZXJkaWV0IGlhY3VsaXMuIENyYXMgbmVjIGp1c3RvIGludGVyZHVtIHRvcnRvciB0cmlzdGlxdWUgdGluY2lkdW50LgoKTnVuYyBwbGFjZXJhdCB2ZWxpdCBhdCBtYXVyaXMgdGluY2lkdW50IGxvYm9ydGlzLiBOdWxsYSB0cmlzdGlxdWUgbGFjdXMgZWxlaWZlbmQgbmliaCBlbGVtZW50dW0sIGF0IG1hbGVzdWFkYSBqdXN0byBwb3J0dGl0b3IuIFZlc3RpYnVsdW0gZXQgYW50ZSBwcmV0aXVtLCBjb25kaW1lbnR1bSBtaSBzaXQgYW1ldCwgZ3JhdmlkYSBuaWJoLiBQZWxsZW50ZXNxdWUgYXQgZW5pbSB2dWxwdXRhdGUsIHZpdmVycmEgbGlndWxhIHNlZCwgY29uc2VxdWF0IG9kaW8uIFZpdmFtdXMgbWFsZXN1YWRhIG5pc2kgc2FwaWVuLiBQZWxsZW50ZXNxdWUgcGhhcmV0cmEgbmVxdWUgZXJhdCwgYXQgcHJldGl1bSBkb2xvciB0ZW1wdXMgbm9uLiBTZWQgc29sbGljaXR1ZGluIG51bGxhIHNhcGllbiwgYWxpcXVhbSBzY2VsZXJpc3F1ZSBuaXNsIHBsYWNlcmF0IHNpdCBhbWV0LgoKUHJhZXNlbnQgcHJldGl1bSBlbGVpZmVuZCBlbGl0LCBuZWMgb3JuYXJlIG9yY2kgcHJldGl1bSBlZ2V0LiBOdWxsYW0gYXQgbWV0dXMgZXQgZmVsaXMgZXVpc21vZCByaG9uY3VzIGFjIHNlZCBkaWFtLiBQZWxsZW50ZXNxdWUgdXQgZGFwaWJ1cyBvcmNpLiBJbiBzaXQgYW1ldCBmZXJtZW50dW0gbGlndWxhLiBJbnRlZ2VyIGF1Z3VlIGFudGUsIHNvZGFsZXMgcXVpcyBtYXhpbXVzIHNlZCwgY29uZGltZW50dW0gZmluaWJ1cyBudWxsYS4gU2VkIHV0IGVuaW0gdml0YWUgbGliZXJvIGZhdWNpYnVzIGVnZXN0YXMuIER1aXMgYWxpcXVldCBtb2xsaXMgcmlzdXMgc2l0IGFtZXQgbWF4aW11cy4gU2VkIGxhY3VzIG5pc2wsIHJ1dHJ1bSBzaXQgYW1ldCBibGFuZGl0IGEsIGFsaXF1YW0gdXQgbG9yZW0uIEZ1c2NlIHNlbXBlciBtYXVyaXMgdmVsIGlwc3VtIGVsZWlmZW5kIHRlbXB1cy4KCk5hbSBuZWMgYW50ZSB2ZWxpdC4gTWF1cmlzIGV1IG1hZ25hIHV0IHVybmEgYWNjdW1zYW4gdGVtcG9yIHZpdGFlIGV0IGRpYW0uIE51bGxhbSB1bGxhbWNvcnBlciB2ZXN0aWJ1bHVtIGV4IGluIGZpbmlidXMuIFF1aXNxdWUgdml0YWUgdXJuYSBzYWdpdHRpcyBsZW8gYWNjdW1zYW4gZ3JhdmlkYS4gUHJhZXNlbnQgZWdldCBlcm9zIHNlZCBzYXBpZW4gdGVtcG9yIHNhZ2l0dGlzIGF0IG5vbiBkb2xvci4gRG9uZWMgdHJpc3RpcXVlIHVsdHJpY2VzIG1hbGVzdWFkYS4gVmVzdGlidWx1bSBlbGl0IG9yY2ksIGZlcm1lbnR1bSBub24gZW5pbSBhdCwgaW50ZXJkdW0gZ3JhdmlkYSBtYWduYS4gRHVpcyBhdWd1ZSBtZXR1cywgY3Vyc3VzIGlkIGVzdCBldCwgZ3JhdmlkYSB0cmlzdGlxdWUgcHVydXMuCgpOdWxsYW0gbWFsZXN1YWRhIHB1bHZpbmFyIHB1cnVzLCBpbiBvcm5hcmUgbWFzc2EgaWFjdWxpcyBlZ2V0LiBOYW0gZXggb3JjaSwgZWxlbWVudHVtIGV0IHRlbGx1cyBwb3J0YSwgZWdlc3RhcyB2ZW5lbmF0aXMgb3JjaS4gU2VkIHV0IGNvbmRpbWVudHVtIGp1c3RvLCBlZ2V0IHNjZWxlcmlzcXVlIGVzdC4gTW9yYmkgZXQgb3JjaSB2dWxwdXRhdGUsIG9ybmFyZSBsaWd1bGEgbmVjLCBwZWxsZW50ZXNxdWUgbWFnbmEuIFN1c3BlbmRpc3NlIG5lYyB0b3J0b3IgZXQgbGVjdHVzIHBvcnR0aXRvciBlbGVtZW50dW0uIEludGVnZXIgY29uZGltZW50dW0gdmVzdGlidWx1bSBlbGVtZW50dW0uIFBoYXNlbGx1cyBldSB0ZWxsdXMgbnVsbGEuIERvbmVjIGFyY3Ugb3JjaSwgZ3JhdmlkYSBldCBkaWN0dW0gdmVuZW5hdGlzLCBkYXBpYnVzIGV0IGVyYXQuIFV0IGxvYm9ydGlzIHVybmEgc2l0IGFtZXQgc2FnaXR0aXMgZmVybWVudHVtLiBDdXJhYml0dXIgdm9sdXRwYXQgZG9sb3IgaWQgZXJvcyBlZ2VzdGFzLCB2aXRhZSBkaWduaXNzaW0gbmVxdWUgcmhvbmN1cy4gUXVpc3F1ZSBxdWlzIG1vbGxpcyBwdXJ1cy4gUGhhc2VsbHVzIGlkIHRyaXN0aXF1ZSBpcHN1bSwgYSBzY2VsZXJpc3F1ZSBvZGlvLiBEdWlzIHVsdHJpY2llcyBjdXJzdXMgbWV0dXMsIHZpdGFlIHRpbmNpZHVudCBpcHN1bSB1bHRyaWNpZXMgbmVjLgoKTnVsbGEgZXQgdGVtcHVzIG1hdXJpcy4gRnVzY2UgbWV0dXMgZXJhdCwgZnJpbmdpbGxhIHF1aXMgcmlzdXMgcXVpcywgZmFjaWxpc2lzIGFsaXF1YW0gbWF1cmlzLiBQcmFlc2VudCBlbGVpZmVuZCB2b2x1dHBhdCBuaXNsIGV0IHBvcnR0aXRvci4gTW9yYmkgZGlnbmlzc2ltIHNvbGxpY2l0dWRpbiBsZWN0dXMsIGV1IHVsdHJpY2llcyB0dXJwaXMgYmliZW5kdW0gaW4uIFBoYXNlbGx1cyBub24gdGVsbHVzIGEgZG9sb3IgaWFjdWxpcyBwaGFyZXRyYSB1dCBlZ2V0IGxpYmVyby4gUGhhc2VsbHVzIHNpdCBhbWV0IHZpdmVycmEgbGliZXJvLCB1dCBmYXVjaWJ1cyBxdWFtLiBBbGlxdWFtIGNvbnNlcXVhdCBsaWd1bGEgZmluaWJ1cyBhbnRlIHRlbXBvciwgaGVuZHJlcml0IHNvbGxpY2l0dWRpbiBlbmltIHN1c2NpcGl0LiBBbGlxdWFtIHBvcnR0aXRvciB1bHRyaWNlcyBncmF2aWRhLiBQZWxsZW50ZXNxdWUgc2l0IGFtZXQgcHVydXMgZXUgbGFjdXMgdGVtcG9yIHZlc3RpYnVsdW0gc2l0IGFtZXQgYWMgYXVndWUuIEN1cmFiaXR1ciBpbiBzb2xsaWNpdHVkaW4gcXVhbS4gVml2YW11cyBhIHZlbGl0IG1pLgoKRHVpcyBkaWduaXNzaW0sIGxhY3VzIGRpZ25pc3NpbSBzYWdpdHRpcyBibGFuZGl0LCBuaWJoIG5pYmggZmF1Y2lidXMgZWxpdCwgZXQgZWdlc3RhcyBuaXNsIHRlbGx1cyB2ZWwgZWxpdC4gUHJvaW4gZ3JhdmlkYSBtaSBlc3QsIGVnZXQgbWFsZXN1YWRhIGxhY3VzIHVsdHJpY2llcyBuZWMuIEludGVnZXIgZWxlaWZlbmQgdGVsbHVzIHZlbCB0dXJwaXMgZWZmaWNpdHVyIGFsaXF1YW0uIEN1cmFiaXR1ciBzZWQgbmVxdWUgZWdldCBvcmNpIGxvYm9ydGlzIHBvc3VlcmUuIE1hZWNlbmFzIHBlbGxlbnRlc3F1ZSBlc3QgZG9sb3IsIGF0IGNvbnNlcXVhdCB0ZWxsdXMgbGFvcmVldCBxdWlzLiBWaXZhbXVzIGNvbmRpbWVudHVtIHN1c2NpcGl0IG5lcXVlLCBub24gZGFwaWJ1cyBzYXBpZW4gYWNjdW1zYW4gbm9uLiBGdXNjZSBuaWJoIGxhY3VzLCB0aW5jaWR1bnQgZXUgdGVtcHVzIHF1aXMsIHZ1bHB1dGF0ZSBlZ2V0IG1ldHVzLiBGdXNjZSBuaXNpIGVzdCwgdGluY2lkdW50IGV1IGxpZ3VsYSBpZCwgaWFjdWxpcyB0cmlzdGlxdWUgbGVvLiBQcm9pbiBmYXVjaWJ1cyBwb3N1ZXJlIG1hZ25hLCBzaXQgYW1ldCBsdWN0dXMgZGlhbSB1bHRyaWNpZXMgaWQuIFBoYXNlbGx1cyBlZ2VzdGFzIGZlbGlzIGEgbGliZXJvIGZhY2lsaXNpcyBkaWduaXNzaW0uIE51bGxhbSBjb25zZWN0ZXR1ciBjb25zZWN0ZXR1ciBhbnRlLCBpbiBzb2RhbGVzIGR1aSB2ZW5lbmF0aXMgdml0YWUuIE5hbSBsb3JlbSBwdXJ1cywgdml2ZXJyYSBlZ2V0IHJpc3VzIHZpdGFlLCB0cmlzdGlxdWUgaW50ZXJkdW0gZW5pbS4KClN1c3BlbmRpc3NlIGFjY3Vtc2FuIGVsaXQgaWQgcXVhbSB1bHRyaWNlcyB0ZW1wdXMuIFV0IGF0IGJpYmVuZHVtIGxlY3R1cy4gTnVsbGEgYSBydXRydW0gc2FwaWVuLiBTZWQgc2VkIHF1YW0gZWdldCBsZWN0dXMgbHVjdHVzIHZlc3RpYnVsdW0uIFByYWVzZW50IHZpdmVycmEgZmVsaXMgbGlndWxhLCB1dCB0aW5jaWR1bnQgZG9sb3IgY3Vyc3VzIG5lYy4gUHJvaW4gYSBsdWN0dXMgc2VtLCBhdCB2ZWhpY3VsYSBhbnRlLiBQcmFlc2VudCBpbXBlcmRpZXQgdWx0cmljZXMgbGVjdHVzIG5lYyBpbnRlcmR1bS4gQ3VyYWJpdHVyIHZlbCBtYXhpbXVzIG5pc2ksIHNpdCBhbWV0IGZldWdpYXQgZXJvcy4gUGhhc2VsbHVzIGxhb3JlZXQgbGFjdXMgZnJpbmdpbGxhIGFudGUgZmVybWVudHVtIGRhcGlidXMuIFBlbGxlbnRlc3F1ZSBjb252YWxsaXMgdWxsYW1jb3JwZXIgZW5pbSwgcXVpcyBzdXNjaXBpdCBudWxsYSBiaWJlbmR1bSBxdWlzLiBEb25lYyBjb25zZWN0ZXR1ciB0ZW1wb3IgcHJldGl1bS4KCkludGVnZXIgbm9uIGVnZXN0YXMgbGliZXJvLiBOdWxsYSB0ZW1wdXMgdHVycGlzIG1hc3NhLCBldCBpbnRlcmR1bSByaXN1cyB0ZW1wdXMgYXQuIEZ1c2NlIGV1IG9yY2kgcnV0cnVtLCBjb25kaW1lbnR1bSBleCB2aXRhZSwgc2NlbGVyaXNxdWUgZmVsaXMuIEluIG5vbiBtYWduYSB1dCBsZWN0dXMgZmVybWVudHVtIHN1c2NpcGl0LiBNb3JiaSBzb2RhbGVzIHRyaXN0aXF1ZSBlcm9zIHNlZCBwb3J0YS4gTnVsbGEgdmVzdGlidWx1bSB1bHRyaWNlcyBtYXVyaXMsIGEgcHVsdmluYXIgbGFjdXMgaWFjdWxpcyBhLiBGdXNjZSBlbGl0IGFyY3UsIHJob25jdXMgaW4gY3Vyc3VzIGV1LCBiaWJlbmR1bSBldCBlbmltLiBVdCBwbGFjZXJhdCB0ZWxsdXMgdmVsIHRyaXN0aXF1ZSBmcmluZ2lsbGEuIENyYXMgbWFsZXN1YWRhIGxlbyBuZWMgY29uc2VxdWF0IHRyaXN0aXF1ZS4gUHJvaW4gZWZmaWNpdHVyIGN1cnN1cyB0b3J0b3IsIG5vbiBjb25zZXF1YXQgZXJvcyBtb2xsaXMgdXQuIE1hdXJpcyBldSBjb25zZWN0ZXR1ciBvZGlvLCBhIGRhcGlidXMgcXVhbS4gQWxpcXVhbSBwdWx2aW5hciBmcmluZ2lsbGEgZXJvcywgdXQgZmluaWJ1cyBkdWkgY3Vyc3VzIG5lYy4gTnVuYyBhdCB2ZWxpdCBtYXhpbXVzLCBwaGFyZXRyYSBkdWkgYWMsIHZlbmVuYXRpcyBtYXNzYS4gQ3JhcyBldSBvcmNpIGV0IGxvcmVtIGdyYXZpZGEgcnV0cnVtIGVnZXQgbmVjIGF1Z3VlLgoKTnVsbGFtIHZlbCBhbGlxdWV0IG1ldHVzLiBJbnRlZ2VyIHNlZCBpcHN1bSBzb2xsaWNpdHVkaW4sIHRpbmNpZHVudCBuZXF1ZSB2aXRhZSwgdHJpc3RpcXVlIHR1cnBpcy4gRnVzY2UgbWF4aW11cyBpbXBlcmRpZXQgYXVndWUgc2l0IGFtZXQgZmluaWJ1cy4gRXRpYW0gYXQgcmlzdXMgZ3JhdmlkYSBsb3JlbSBwaGFyZXRyYSB2dWxwdXRhdGUgdmVsIGV0IG1hdXJpcy4gUXVpc3F1ZSBpbXBlcmRpZXQgcHVsdmluYXIgdml2ZXJyYS4gQ3VyYWJpdHVyIGV0IHZpdmVycmEgZmVsaXMuIFZlc3RpYnVsdW0gZWdldCBhbGlxdWFtIHRlbGx1cy4gSW50ZXJkdW0gZXQgbWFsZXN1YWRhIGZhbWVzIGFjIGFudGUgaXBzdW0gcHJpbWlzIGluIGZhdWNpYnVzLiBJbnRlcmR1bSBldCBtYWxlc3VhZGEgZmFtZXMgYWMgYW50ZSBpcHN1bSBwcmltaXMgaW4gZmF1Y2lidXMuIE51bGxhbSBwb3J0dGl0b3IgZW5pbSBzb2RhbGVzIHNvZGFsZXMgbWFsZXN1YWRhLiBNYWVjZW5hcyB2ZWwgZW5pbSBzZWQgdXJuYSByaG9uY3VzIGVmZmljaXR1ci4gUXVpc3F1ZSBwZWxsZW50ZXNxdWUgZWdlc3RhcyBudW5jLCBpbiBhbGlxdWV0IG1hc3NhIGdyYXZpZGEgbm9uLiBWZXN0aWJ1bHVtIGlkIGZlbGlzIHRvcnRvci4gTW9yYmkgdWx0cmljaWVzIHVsdHJpY2VzIHBoYXJldHJhLiBOdW5jIGZldWdpYXQgZXJhdCBhIGRhcGlidXMgcnV0cnVtLgoKSW50ZWdlciBzY2VsZXJpc3F1ZSBsb3JlbSBpbiBtYXhpbXVzIGx1Y3R1cy4gRG9uZWMgZmF1Y2lidXMgbmlzaSBlZ2VzdGFzIGRpZ25pc3NpbSBlZmZpY2l0dXIuIE51bmMgdXQgYmliZW5kdW0gYXJjdS4gQ3VyYWJpdHVyIHZpdGFlIGhlbmRyZXJpdCB0b3J0b3IuIFF1aXNxdWUgb3JjaSBvcmNpLCBzYWdpdHRpcyBpZCBsaWJlcm8gbm9uLCBibGFuZGl0IHZlc3RpYnVsdW0gdG9ydG9yLiBNb3JiaSBzaXQgYW1ldCBkdWkgcHJldGl1bSwgbGFvcmVldCBkdWkgc2VkLCBibGFuZGl0IGVuaW0uIEZ1c2NlIG5pc2kgbWFnbmEsIGNvbmRpbWVudHVtIG5lYyBsYWN1cyBhYywgYWxpcXVldCBtb2xsaXMgZHVpLgoKVmVzdGlidWx1bSBvcm5hcmUgZXVpc21vZCBpcHN1bSwgYWMgdGluY2lkdW50IGxhY3VzIGFsaXF1YW0gdml0YWUuIEFsaXF1YW0gZXVpc21vZCBlc3QgbmVjIHBoYXJldHJhIHNjZWxlcmlzcXVlLiBQaGFzZWxsdXMgaWQgbnVsbGEgbGliZXJvLiBJbnRlZ2VyIHV0IHB1cnVzIGNvbmd1ZSwgdGVtcHVzIG1hZ25hIGV0LCB2dWxwdXRhdGUgdG9ydG9yLiBQcmFlc2VudCBibGFuZGl0IGVyYXQgaWQgYmxhbmRpdCBhbGlxdWFtLiBEdWlzIHBsYWNlcmF0IGVmZmljaXR1ciB2ZWxpdCwgdXQgZWZmaWNpdHVyIGR1aSBwb3N1ZXJlIGFjLiBQaGFzZWxsdXMgZmV1Z2lhdCBlcm9zIHNpdCBhbWV0IG51bGxhIGRhcGlidXMgZWxlaWZlbmQuIERvbmVjIGVnZXQgYXVjdG9yIHB1cnVzLiBTZWQgbGliZXJvIGFudGUsIGVsZWlmZW5kIHF1aXMgbWFnbmEgc2l0IGFtZXQsIHVsdHJpY2VzIHByZXRpdW0gbGlndWxhLiBDcmFzIHV0IG5lcXVlIHRpbmNpZHVudCwgZGFwaWJ1cyBhbnRlIGFjLCBlZ2VzdGFzIHNhcGllbi4KCk51bGxhbSBjb25zZWN0ZXR1ciBtYWduYSBsb3JlbSwgaWQgaW50ZXJkdW0gZWxpdCBmcmluZ2lsbGEgYS4gVmVzdGlidWx1bSB1bHRyaWNpZXMgYWxpcXVhbSBuaXNsLiBBbGlxdWFtIHNlZCB2ZW5lbmF0aXMgbGVvLiBJbnRlZ2VyIHNlZCBzYXBpZW4gdmFyaXVzLCB2ZW5lbmF0aXMgbWkgbm9uLCBjdXJzdXMgdG9ydG9yLiBWaXZhbXVzIGV1IGZldWdpYXQgbWF1cmlzLiBTZWQgZmV1Z2lhdCBzZWQgb3JjaSBub24gdGVtcHVzLiBQZWxsZW50ZXNxdWUgaGFiaXRhbnQgbW9yYmkgdHJpc3RpcXVlIHNlbmVjdHVzIGV0IG5ldHVzIGV0IG1hbGVzdWFkYSBmYW1lcyBhYyB0dXJwaXMgZWdlc3Rhcy4gRG9uZWMgdmVoaWN1bGEgZXggbmliaCwgdmVsIGFsaXF1ZXQgZW5pbSBtYXhpbXVzIGV0LiBWaXZhbXVzIGlhY3VsaXMgbmlzaSBzaXQgYW1ldCBsdWN0dXMgdmVoaWN1bGEuIEFsaXF1YW0gdGVtcHVzIGNvbmRpbWVudHVtIHJpc3VzLCBub24gY29uZ3VlIG5pYmggaGVuZHJlcml0IHF1aXMuIERvbmVjIGN1cnN1cyBuZWMgbGliZXJvIHNpdCBhbWV0IGRpY3R1bS4gVml2YW11cyBlZ2V0IGVnZXN0YXMgZGlhbS4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4KClBlbGxlbnRlc3F1ZSBhbnRlIHZlbGl0LCB0ZW1wb3IgdmVsIGxpYmVybyBpZCwgZWxlbWVudHVtIGlhY3VsaXMgbmVxdWUuIE5hbSBpZCBuZXF1ZSBlbGl0LiBVdCBwbGFjZXJhdCBiaWJlbmR1bSB2ZWhpY3VsYS4gTnVsbGFtIHNlZCBuaXNpIGZlbGlzLiBGdXNjZSB2ZW5lbmF0aXMgdWx0cmljaWVzIHNhZ2l0dGlzLiBRdWlzcXVlIGZlbGlzIG1hdXJpcywgY29uZGltZW50dW0gc2VkIGVsZWlmZW5kIGlkLCBsb2JvcnRpcyBldSBhbnRlLiBEdWlzIGV1IGxvYm9ydGlzIGVyb3MsIGV0IGNvbnNlcXVhdCBzYXBpZW4uIFZpdmFtdXMgY29uZ3VlIGVyYXQgYWMgbWF4aW11cyBwbGFjZXJhdC4gUGhhc2VsbHVzIGxhY2luaWEgc2FwaWVuIGp1c3RvLCBldCBtYXhpbXVzIGlwc3VtIGV1aXNtb2QgcnV0cnVtLiBQZWxsZW50ZXNxdWUgaGFiaXRhbnQgbW9yYmkgdHJpc3RpcXVlIHNlbmVjdHVzIGV0IG5ldHVzIGV0IG1hbGVzdWFkYSBmYW1lcyBhYyB0dXJwaXMgZWdlc3Rhcy4gQWxpcXVhbSB2b2x1dHBhdCwgbnVuYyBldSBtYXR0aXMgcGVsbGVudGVzcXVlLCBsb3JlbSBzZW0gYXVjdG9yIGxlY3R1cywgYWMgcG9zdWVyZSByaXN1cyBtaSBzZWQgZmVsaXMuIEZ1c2NlIGFjIHZlbGl0IGRpYW0uIE1hZWNlbmFzIGNvbnNlcXVhdCBlbmltIGltcGVyZGlldCBtYXNzYSBjb25zZWN0ZXR1ciBpYWN1bGlzLiBTdXNwZW5kaXNzZSB2ZWwgbGlndWxhIG1pLgoKTW9yYmkgZXQgaWFjdWxpcyBkb2xvci4gQWVuZWFuIGdyYXZpZGEgcG9ydHRpdG9yIGZpbmlidXMuIFZpdmFtdXMgc29kYWxlcyBsYW9yZWV0IGRvbG9yIG1hdHRpcyBkaWN0dW0uIFByYWVzZW50IHRpbmNpZHVudCBpbnRlcmR1bSBlc3QuIFByYWVzZW50IGltcGVyZGlldCBkb2xvciBwaGFyZXRyYSBkaWduaXNzaW0gY29uZGltZW50dW0uIE1hdXJpcyBjb25kaW1lbnR1bSB0aW5jaWR1bnQgY29udmFsbGlzLiBWaXZhbXVzIGNvbmRpbWVudHVtIG1hc3NhIGxhY3VzLCBhIGVsZW1lbnR1bSB0ZWxsdXMgaW50ZXJkdW0gdml0YWUuIER1aXMgYWxpcXVhbSBsYWN1cyBpZCBwbGFjZXJhdCB2aXZlcnJhLiBFdGlhbSBhYyBibGFuZGl0IGp1c3RvLiBBbGlxdWFtIHRvcnRvciBlbGl0LCBmYWNpbGlzaXMgZWdldCB0aW5jaWR1bnQgZXQsIGFjY3Vtc2FuIGFjIHVybmEuIFBlbGxlbnRlc3F1ZSBkaWduaXNzaW0gdmVuZW5hdGlzIHBvcnR0aXRvci4KClV0IG5vbiBhbnRlIGV0IGF1Z3VlIGNvbmd1ZSB2ZWhpY3VsYS4gSW4gdmVsaXQgcmlzdXMsIGVnZXN0YXMgc2l0IGFtZXQgbWFnbmEgbWF0dGlzLCBzb2RhbGVzIGVsZW1lbnR1bSBsZW8uIFN1c3BlbmRpc3NlIGFsaXF1YW0gbWF0dGlzIG51bGxhLCB2b2x1dHBhdCB2ZW5lbmF0aXMgbWkgbHVjdHVzIGV0LiBOdW5jIHV0IGJpYmVuZHVtIGVzdC4gU2VkIHF1YW0gdG9ydG9yLCBwdWx2aW5hciBhYyBibGFuZGl0IGEsIGN1cnN1cyBldSBvZGlvLiBOdW5jIGNvbmd1ZSBhY2N1bXNhbiBqdXN0byBzaXQgYW1ldCBtYXhpbXVzLiBTdXNwZW5kaXNzZSB1cm5hIHNlbSwgbWF0dGlzIGV0IGV4IGlkLCBpYWN1bGlzIG1vbGVzdGllIGxpZ3VsYS4gUHJhZXNlbnQgY29uc2VjdGV0dXIgZXggZXQgZWxpdCBjb25zZXF1YXQgZWZmaWNpdHVyLiBOdWxsYSBpZCB2ZWhpY3VsYSBzZW0sIHNpdCBhbWV0IHJob25jdXMgZXN0LiBGdXNjZSB2ZWxpdCBudWxsYSwgc2VtcGVyIHNlZCBzb2xsaWNpdHVkaW4gaW4sIHBlbGxlbnRlc3F1ZSBpbiBvZGlvLiBOdW5jIHNlZCBsb3JlbSBldSBsaWJlcm8gZXVpc21vZCBncmF2aWRhLiBJbnRlZ2VyIGVnZXQgZmVsaXMgZXQgbnVuYyBtb2xsaXMgdGVtcG9yIHNpdCBhbWV0IGJpYmVuZHVtIHJpc3VzLiBWZXN0aWJ1bHVtIGNvbnNlY3RldHVyIHF1YW0gc2l0IGFtZXQgZXggYWxpcXVhbSBjb25kaW1lbnR1bS4gQ3VyYWJpdHVyIHZlaGljdWxhIHZhcml1cyBuaXNpIHV0IGxhb3JlZXQuIE1hZWNlbmFzIHZpdGFlIGRpYW0gdmVsIGxvcmVtIGV1aXNtb2QgdnVscHV0YXRlLgoKVXQgcG9ydGEgcGxhY2VyYXQgbmlzaSBzZWQgdGluY2lkdW50LiBOdWxsYSBjb25zZWN0ZXR1ciBuZXF1ZSB1dCByaXN1cyBmYXVjaWJ1cywgbm9uIHVsdHJpY2llcyB1cm5hIGN1cnN1cy4gVXQgZGlhbSBsZW8sIGludGVyZHVtIHNlZCBlbGVpZmVuZCBub24sIHZvbHV0cGF0IG5vbiB0ZWxsdXMuIE1hdXJpcyBlZ2V0IG5lcXVlIGRpZ25pc3NpbSBvcmNpIGZhdWNpYnVzIHRlbXBvciBtb2xlc3RpZSBpZCBuaXNsLiBBbGlxdWFtIGEgbmVxdWUgbWkuIFF1aXNxdWUgaWQgaW1wZXJkaWV0IGZlbGlzLiBWZXN0aWJ1bHVtIGlkIG5lcXVlIGJpYmVuZHVtLCBkaWN0dW0gbnVuYyBpbiwgYmxhbmRpdCBkdWkuIFZpdmFtdXMgZXJhdCBtYXVyaXMsIGxhY2luaWEgbm9uIHNhcGllbiBuZWMsIHZvbHV0cGF0IHZlaGljdWxhIG9yY2kuIFNlZCBhIGRvbG9yIHNpdCBhbWV0IGRvbG9yIHZvbHV0cGF0IG1vbGVzdGllLgoKTWFlY2VuYXMgcGxhY2VyYXQsIGxhY3VzIGV1IHZlaGljdWxhIGdyYXZpZGEsIG9yY2kgcmlzdXMgc29sbGljaXR1ZGluIG1pLCB0aW5jaWR1bnQgYWNjdW1zYW4gb2RpbyBvZGlvIGV0IGxvcmVtLiBOdWxsYSBlZ2V0IGxlbyBhbGlxdWFtLCBjdXJzdXMgb2RpbyBpZCwgY29uZ3VlIG9kaW8uIFNlZCBldCBxdWFtIGlkIGVuaW0gc3VzY2lwaXQgY3Vyc3VzIG5lYyBhYyB0b3J0b3IuIEFlbmVhbiBpbnRlcmR1bSBsaWd1bGEgbm9uIG5lcXVlIGRpZ25pc3NpbSBkYXBpYnVzLiBNYXVyaXMgbWkgbnVsbGEsIGVnZXN0YXMgbmVjIGFyY3UgZXUsIHNvbGxpY2l0dWRpbiBkaWduaXNzaW0gZGlhbS4gQ3JhcyBzZW1wZXIgdHVycGlzIGF0IHJpc3VzIG9ybmFyZSBzY2VsZXJpc3F1ZS4gTWF1cmlzIHVsdHJpY2VzIHRvcnRvciB2ZXN0aWJ1bHVtIHNlbSBiaWJlbmR1bSwgYWMgcG9ydHRpdG9yIGVyb3MgcGhhcmV0cmEuIERvbmVjIG5lYyBjb252YWxsaXMgbWF1cmlzLgoKRG9uZWMgYWMgcmhvbmN1cyBuaXNsLCB2ZWwgZmFjaWxpc2lzIGxlY3R1cy4gQ3VyYWJpdHVyIHZpdGFlIHVybmEgc2l0IGFtZXQgbGliZXJvIHRyaXN0aXF1ZSBwdWx2aW5hciBuZWMgZXUgcXVhbS4gQWxpcXVhbSB2aXRhZSBhdWN0b3IgbmlzaS4gUGhhc2VsbHVzIHNjZWxlcmlzcXVlIG9yY2kgaW4gY3Vyc3VzIHRpbmNpZHVudC4gQWVuZWFuIGV0IGhlbmRyZXJpdCBuaXNpLCBhIG1hbGVzdWFkYSBqdXN0by4gRG9uZWMgaGVuZHJlcml0IHBvc3VlcmUgbmlzaSBhIGV1aXNtb2QuIE51bmMgdWx0cmljZXMgb2RpbyBzZWQgdG9ydG9yIGlhY3VsaXMgc29sbGljaXR1ZGluLiBWaXZhbXVzIGFjIGFudGUgdXQgdmVsaXQgZ3JhdmlkYSBsYW9yZWV0IGluIGEgcXVhbS4KCkluIG1hZ25hIG1pLCB0ZW1wdXMgYXQgc3VzY2lwaXQgZXQsIHZlc3RpYnVsdW0gYWNjdW1zYW4gZW5pbS4gTnVsbGFtIHNlZCBlbmltIGEgbmlzaSBwdWx2aW5hciBjb25ndWUuIEluIG5vbiB0cmlzdGlxdWUgb3JjaSwgc2l0IGFtZXQgcGxhY2VyYXQgbGFjdXMuIEludGVyZHVtIGV0IG1hbGVzdWFkYSBmYW1lcyBhYyBhbnRlIGlwc3VtIHByaW1pcyBpbiBmYXVjaWJ1cy4gUHJhZXNlbnQgbG9ib3J0aXMgbWFnbmEgYXQgcXVhbSBmcmluZ2lsbGEsIGluIG1hdHRpcyBudW5jIHJ1dHJ1bS4gRnVzY2UgbW9sbGlzIHBvc3VlcmUgc29kYWxlcy4gTnVsbGEgdml0YWUgdWx0cmljaWVzIHB1cnVzLCBpZCBmYXVjaWJ1cyBqdXN0by4gRG9uZWMgdGVtcHVzIGxlY3R1cyBkdWksIG5vbiBkYXBpYnVzIGVsaXQgZGlnbmlzc2ltIGluLiBBZW5lYW4gZXQgbWFzc2EgcG9ydGEgbGFjdXMgbG9ib3J0aXMgcGVsbGVudGVzcXVlLiBOdWxsYW0gbmVjIGZhY2lsaXNpcyBsaWJlcm8uIE1hdXJpcyBsYWN1cyBxdWFtLCBjb25zZWN0ZXR1ciBzaXQgYW1ldCBncmF2aWRhIHZpdGFlLCB0ZW1wdXMgaW4gaXBzdW0uIFByYWVzZW50IG1vbGVzdGllIHZpdmVycmEgZXN0IHNpdCBhbWV0IGFjY3Vtc2FuLiBBZW5lYW4gc2FnaXR0aXMgYXVndWUgaW50ZXJkdW0gc2FnaXR0aXMgZXVpc21vZC4gUHJhZXNlbnQgZXVpc21vZCBtYWxlc3VhZGEgdHVycGlzIHZpdGFlIGVmZmljaXR1ci4gRnVzY2UgZmluaWJ1cyBlc3QgdXQgdGVsbHVzIGNvbmRpbWVudHVtIHNvZGFsZXMuCgpTdXNwZW5kaXNzZSBwb3RlbnRpLiBPcmNpIHZhcml1cyBuYXRvcXVlIHBlbmF0aWJ1cyBldCBtYWduaXMgZGlzIHBhcnR1cmllbnQgbW9udGVzLCBuYXNjZXR1ciByaWRpY3VsdXMgbXVzLiBOdWxsYW0gZXJvcyB1cm5hLCBwb3J0dGl0b3IgYXQgY29uZGltZW50dW0gdXQsIHJ1dHJ1bSB2ZWwgbWFnbmEuIFN1c3BlbmRpc3NlIHBvdGVudGkuIEFsaXF1YW0gYXVjdG9yIG1hc3NhIHV0IGZlcm1lbnR1bSBjb25kaW1lbnR1bS4gQ2xhc3MgYXB0ZW50IHRhY2l0aSBzb2Npb3NxdSBhZCBsaXRvcmEgdG9ycXVlbnQgcGVyIGNvbnViaWEgbm9zdHJhLCBwZXIgaW5jZXB0b3MgaGltZW5hZW9zLiBDcmFzIGluIGxhY3VzIHNlZCBuaXNsIGxhY2luaWEgcmhvbmN1cyB2aXRhZSBhdCBtYXNzYS4gUXVpc3F1ZSBhIGxpZ3VsYSBjb21tb2RvLCBmYWNpbGlzaXMganVzdG8gdmVuZW5hdGlzLCBhbGlxdWFtIGVsaXQuIERvbmVjIGxvYm9ydGlzIHNlbSBsZW8sIHNlZCBhY2N1bXNhbiBuaXNsIGltcGVyZGlldCBhLiBNYXVyaXMgcG9ydHRpdG9yIGJpYmVuZHVtIGFudGUgdml0YWUgY29uc2VjdGV0dXIuIEFsaXF1YW0gZWdldCB1cm5hIGEgYW50ZSBhbGlxdWFtIGFsaXF1YW0uIENyYXMgdml0YWUgbWFzc2EgaW4ganVzdG8gZWxlbWVudHVtIHZvbHV0cGF0IGVnZXQgZWdldCBkaWFtLiBJbnRlZ2VyIGRhcGlidXMgc2VtIG9yY2ksIG5lYyB0ZW1wdXMgbmVxdWUgY3Vyc3VzIGEuIENyYXMgbm9uIG51bGxhIHVsbGFtY29ycGVyIG1hZ25hIGludGVyZHVtIGVsZWlmZW5kLgoKUHJvaW4gdml0YWUganVzdG8gYWMgbWkgcHJldGl1bSBtYXR0aXMgZXQgZWdldCByaXN1cy4gRG9uZWMgc2l0IGFtZXQgdGluY2lkdW50IGxlY3R1cy4gUGVsbGVudGVzcXVlIHJob25jdXMgdmVsaXQgZXUgb3JuYXJlIHZ1bHB1dGF0ZS4gQ3VyYWJpdHVyIGV1IGVsaXQgdGluY2lkdW50LCBhbGlxdWFtIHB1cnVzIGV0LCBiaWJlbmR1bSBuaXNsLiBOdW5jIHZpdGFlIG1hc3NhIGp1c3RvLiBJbnRlZ2VyIHNpdCBhbWV0IHZlaGljdWxhIG1pLCBldCBjb25kaW1lbnR1bSBuaWJoLiBNYXVyaXMgbmVjIHNlbSBzZW0uIEFsaXF1YW0gYW50ZSBzYXBpZW4sIHJob25jdXMgdXQgaGVuZHJlcml0IHV0LCBwb3N1ZXJlIGluIG1ldHVzLiBJbiBjb25kaW1lbnR1bSBtYXhpbXVzIHF1YW0sIGluIGZyaW5naWxsYSBhcmN1IHNvZGFsZXMgZWdldC4gSW4gbHVjdHVzIHF1aXMgbWF1cmlzIGV0IHZlaGljdWxhLiBTZWQgYSBlbGl0IHV0IHNhcGllbiB1bHRyaWNpZXMgZmVybWVudHVtIGluIGV0IHRvcnRvci4gUGVsbGVudGVzcXVlIG9kaW8gYXJjdSwgdmFyaXVzIHV0IGRpZ25pc3NpbSBpbiwgY29uc2VxdWF0IGF0IGxvcmVtLiBJbiBhIGF1Z3VlIGFsaXF1YW0sIHNjZWxlcmlzcXVlIHVybmEgaWQsIG1heGltdXMgZHVpLiBJbiBtYXNzYSBlbGl0LCBtYXR0aXMgdml0YWUgbmliaCBpbiwgdmVzdGlidWx1bSBsYWNpbmlhIGVsaXQuIFByYWVzZW50IG1hbGVzdWFkYSB2aXRhZSBsZWN0dXMgZWdldCBjdXJzdXMuIE51bGxhIGR1aSBvZGlvLCBzdXNjaXBpdCBtYXR0aXMgbWkgc2l0IGFtZXQsIGFsaXF1YW0gY29uc2VxdWF0IGxlY3R1cy4KCk1vcmJpIHNpdCBhbWV0IHNhcGllbiBpbiBtZXR1cyBtYWxlc3VhZGEgcG9ydGEuIEZ1c2NlIG1vbGxpcyBuaWJoIG5lYyB0dXJwaXMgcHJldGl1bSB0aW5jaWR1bnQuIERvbmVjIHB1cnVzIGV4LCBwZWxsZW50ZXNxdWUgYXQgZGFwaWJ1cyBjb252YWxsaXMsIHNjZWxlcmlzcXVlIG5lYyBsYWN1cy4gU3VzcGVuZGlzc2UgdmVuZW5hdGlzIHRpbmNpZHVudCB2ZWxpdCwgbm9uIHBvcnR0aXRvciBwdXJ1cyBydXRydW0gdml0YWUuIEluIGhhYyBoYWJpdGFzc2UgcGxhdGVhIGRpY3R1bXN0LiBNb3JiaSBjb252YWxsaXMgZWxlbWVudHVtIG1hdHRpcy4gRnVzY2UgcG9zdWVyZSBwbGFjZXJhdCBvcm5hcmUuIEFlbmVhbiBtb2xlc3RpZSBzYWdpdHRpcyBhdWd1ZSB2ZWhpY3VsYSBsYWNpbmlhLiBRdWlzcXVlIGV1IGJsYW5kaXQgbGlndWxhLCBlbGVtZW50dW0gdWxsYW1jb3JwZXIgZmVsaXMuIFNlZCBmYXVjaWJ1cyBmYWNpbGlzaXMgYXJjdS4gUHJhZXNlbnQgZXUgbW9sZXN0aWUgdHVycGlzLiBDbGFzcyBhcHRlbnQgdGFjaXRpIHNvY2lvc3F1IGFkIGxpdG9yYSB0b3JxdWVudCBwZXIgY29udWJpYSBub3N0cmEsIHBlciBpbmNlcHRvcyBoaW1lbmFlb3MuIFNlZCB2ZXN0aWJ1bHVtIGF0IGR1aSBldCBpYWN1bGlzLgoKUGhhc2VsbHVzIHZpdGFlIHZlaGljdWxhIHNhcGllbiwgc2VkIHZhcml1cyBtZXR1cy4gQWVuZWFuIGVsZW1lbnR1bSBhbGlxdWFtIG1pIGlhY3VsaXMgYmliZW5kdW0uIFNlZCBzYWdpdHRpcywgdGVsbHVzIGV1IGNvbnZhbGxpcyBsdWN0dXMsIG5lcXVlIG5lcXVlIHByZXRpdW0ganVzdG8sIGluIGVsZWlmZW5kIGxpZ3VsYSB2ZWxpdCBuZWMgYW50ZS4gUXVpc3F1ZSByaG9uY3VzIG5lcXVlIHVsdHJpY2llcyBlbGVtZW50dW0gbG9ib3J0aXMuIFF1aXNxdWUgcXVpcyBsaWd1bGEgb3JuYXJlLCBwbGFjZXJhdCBsYWN1cyBpbiwgbGFvcmVldCBlbGl0LiBTZWQgbmVjIGludGVyZHVtIGxpYmVybywgYSBmYWNpbGlzaXMgZmVsaXMuIE51bmMgZWxlaWZlbmQgZ3JhdmlkYSBvcmNpIGV1IHRyaXN0aXF1ZS4gVXQgdm9sdXRwYXQsIGV4IG5vbiBlbGVpZmVuZCBzZW1wZXIsIGxhY3VzIG5lcXVlIHRlbXB1cyBuaXNsLCBldSB2dWxwdXRhdGUgbGFjdXMgbGliZXJvIG5vbiB2ZWxpdC4gUXVpc3F1ZSBwb3J0YSBmZWxpcyBuZXF1ZSwgcXVpcyBjdXJzdXMgZHVpIGxvYm9ydGlzIGV0LgoKUHJvaW4gZWdldCBjb25ndWUgb3JjaSwgZWZmaWNpdHVyIGFsaXF1ZXQgb2Rpby4gTWFlY2VuYXMgdWx0cmljZXMsIGRpYW0gcXVpcyBldWlzbW9kIHB1bHZpbmFyLCBuaXNsIGFyY3UgZWxlaWZlbmQgbmVxdWUsIGV0IGNvbnNlcXVhdCBkaWFtIG5lcXVlIHNpdCBhbWV0IGVyb3MuIER1aXMgbG9yZW0gYXJjdSwgYXVjdG9yIGEgZXJhdCBldCwgY29uc2VxdWF0IGxvYm9ydGlzIHR1cnBpcy4gUGhhc2VsbHVzIGlkIHB1cnVzIHVybmEuIFNlZCBpbiB2b2x1dHBhdCBsYWN1cywgdmVsIGlhY3VsaXMgYW50ZS4gTmFtIGVnZXQgZW5pbSBldSBsZWN0dXMgdWx0cmljaWVzIHNvbGxpY2l0dWRpbiBldCBzZWQgbWF1cmlzLiBDcmFzIHZlc3RpYnVsdW0gdmVoaWN1bGEgdG9ydG9yLCB2aXRhZSBsdWN0dXMgbWF1cmlzIG1vbGxpcyBzaXQgYW1ldC4gSW50ZWdlciBjb252YWxsaXMgbWV0dXMgaW4gbGlndWxhIGNvbnZhbGxpcywgdml0YWUgZmFjaWxpc2lzIG5pYmggdmFyaXVzLiBBbGlxdWFtIHRvcnRvciBzZW0sIGZlcm1lbnR1bSBub24gYWxpcXVldCBlZ2V0LCBjb25zZXF1YXQgYWMgbWFzc2EuIEluIGNvbmRpbWVudHVtIG1pIHZpdGFlIHBvcnRhIGZpbmlidXMuIFByb2luIG5lYyBxdWFtIG5lYyB1cm5hIHBvcnR0aXRvciBjb252YWxsaXMgYSBpZCBudW5jLiBBZW5lYW4gdml2ZXJyYSBudW5jIGV0IGVyb3Mgc2NlbGVyaXNxdWUgcG9zdWVyZS4gTmFtIGluIG5pc2kgYSBuaWJoIHNlbXBlciBsYWNpbmlhLgoKTnVsbGFtIG1vbGxpcyB2YXJpdXMgbWF1cmlzLiBOdWxsYSBwcmV0aXVtIHBsYWNlcmF0IGp1c3RvLCBsb2JvcnRpcyBzb2xsaWNpdHVkaW4gbGVjdHVzIHVsdHJpY2llcyBhLiBRdWlzcXVlIGRhcGlidXMgbnVuYyB2ZWwgY29tbW9kbyB2ZWhpY3VsYS4gSW4gcGxhY2VyYXQgbWFsZXN1YWRhIHR1cnBpcywgYXQgY29uc2VjdGV0dXIgbWkuIENyYXMgZmV1Z2lhdCBtb2xlc3RpZSBwcmV0aXVtLiBQcm9pbiBsb2JvcnRpcyBlcm9zIG5lYyBlbGVpZmVuZCBoZW5kcmVyaXQuIEluIG1vbGVzdGllIGFudGUgb2RpbywgdmVsIGFsaXF1ZXQgbWFzc2EgYmliZW5kdW0gaW4uIFV0IGJpYmVuZHVtIHJpc3VzIGFyY3UsIG5vbiBncmF2aWRhIGxhY3VzIGV1aXNtb2QgYS4gQWxpcXVhbSB2ZWhpY3VsYSBzZWQgbmVxdWUgc2l0IGFtZXQgbW9sZXN0aWUuIFV0IGF1Y3RvciBwbGFjZXJhdCB0ZWxsdXMgdml0YWUgY29uZGltZW50dW0uCgpOdW5jIGZlbGlzIG1hZ25hLCB2b2x1dHBhdCBuZWMgYW50ZSB2aXRhZSwgZWxlaWZlbmQgaW1wZXJkaWV0IG5pYmguIERvbmVjIHJ1dHJ1bSBlbmltIHVybmEsIHNpdCBhbWV0IG1hdHRpcyBhcmN1IHRpbmNpZHVudCBhdC4gTW9yYmkgZXJhdCBsYWN1cywgdmFyaXVzIHF1aXMgbW9sZXN0aWUgZXQsIGNvbnNlcXVhdCBzZWQgbWV0dXMuIEludGVnZXIgbWV0dXMgaXBzdW0sIGJpYmVuZHVtIGZldWdpYXQgYXVndWUgc2l0IGFtZXQsIHZlbmVuYXRpcyBtYWxlc3VhZGEgZHVpLiBOdWxsYSBjdXJzdXMgdGVsbHVzIGVuaW0sIGluIHVsdHJpY2VzIHF1YW0gY29udmFsbGlzIHNlZC4gRG9uZWMgdGVtcG9yIHZlbCB0dXJwaXMgbmVjIHNlbXBlci4gUXVpc3F1ZSB2aXRhZSBsYWN1cyBldCBlc3QgcG9zdWVyZSBzYWdpdHRpcy4gRnVzY2UgdGVtcHVzIG5pYmggbmVjIHRlbGx1cyBncmF2aWRhLCBhIHNjZWxlcmlzcXVlIGxlY3R1cyB2dWxwdXRhdGUuIE51bGxhIGZhY2lsaXNpLiBNb3JiaSBxdWlzIG1vbGxpcyBtZXR1cywgYWMgc29kYWxlcyBkaWFtLiBQcmFlc2VudCB0ZW1wdXMgbmlzaSBkaWFtLCBub24gZmF1Y2lidXMgbWkgbGFvcmVldCBpZC4KClNlZCBsYWNpbmlhIG5lcXVlIHJpc3VzLCBxdWlzIHN1c2NpcGl0IGp1c3RvIGZldWdpYXQgYXQuIFNlZCBhdCBsb3JlbSBhIGVyb3MgdWx0cmljaWVzIHBvcnR0aXRvci4gSW4gYXQgZG9sb3Igc2VkIGF1Z3VlIHBvcnRhIHRpbmNpZHVudC4gU2VkIGltcGVyZGlldCBmZXVnaWF0IHZvbHV0cGF0LiBWZXN0aWJ1bHVtIGJsYW5kaXQsIG5pYmggbm9uIGNvbnNlcXVhdCBmZXJtZW50dW0sIGxhY3VzIGxpYmVybyBmZXVnaWF0IHZlbGl0LCBhIGNvbmd1ZSBudWxsYSBlbmltIHZlbCBuaWJoLiBOdW5jIGN1cnN1cyBsZWN0dXMgYWMgbGVjdHVzIGNvbnZhbGxpcyBzY2VsZXJpc3F1ZS4gRG9uZWMgdnVscHV0YXRlIGNvbnNlY3RldHVyIGlwc3VtIHNjZWxlcmlzcXVlIG1hdHRpcy4gRHVpcyBsYWN1cyBsZWN0dXMsIGxhY2luaWEgZXQgZmVsaXMgcXVpcywgY29uZ3VlIHVsdHJpY2llcyBtYWduYS4gTmFtIGNvbnNlY3RldHVyIGluIHR1cnBpcyBhYyBsYW9yZWV0LiBEb25lYyB2ZXN0aWJ1bHVtIHZlbGl0IGxlbywgc2VkIGFsaXF1YW0gZGlhbSB1bGxhbWNvcnBlciBuZWMuIE5hbSB2ZWwgdnVscHV0YXRlIHNhcGllbi4KClZpdmFtdXMgYWMgdGluY2lkdW50IGRvbG9yLiBNb3JiaSBldWlzbW9kIG5pc2wgbmVjIGxvcmVtIHZpdmVycmEgY29uc2VjdGV0dXIgc2l0IGFtZXQgY29tbW9kbyBtaS4gVml2YW11cyBpbiBlbGVtZW50dW0gbGVvLiBTZWQgdGluY2lkdW50IGxhb3JlZXQgbG9yZW0sIG5vbiBwcmV0aXVtIHR1cnBpcy4gU2VkIGltcGVyZGlldCBvZGlvIGNvbW1vZG8gZG9sb3IgcnV0cnVtIHBoYXJldHJhLiBJbnRlZ2VyIGNvbnNlcXVhdCwgbGFjdXMgaW4gcGVsbGVudGVzcXVlIGF1Y3RvciwgbGVvIGxpZ3VsYSBpYWN1bGlzIGlwc3VtLCBxdWlzIGZhY2lsaXNpcyB0ZWxsdXMgdHVycGlzIGV0IG51bmMuIFByYWVzZW50IGVnZXQgdG9ydG9yIGZhdWNpYnVzIGVuaW0gbWF4aW11cyBibGFuZGl0IGEgZXUgbmVxdWUuIE5hbSBldCBzYXBpZW4gdXQgbmlzbCBjb25zZXF1YXQgY29uc2VjdGV0dXIuIEZ1c2NlIGhlbmRyZXJpdCBuZXF1ZSBub24gbGVjdHVzIHVsbGFtY29ycGVyIG1vbGVzdGllLiBEb25lYyBhbGlxdWV0IGxlY3R1cyBxdWlzIG1hZ25hIHRyaXN0aXF1ZSwgYWMgZWdlc3RhcyBzZW0gc2NlbGVyaXNxdWUuIFV0IHNlZCBlZ2VzdGFzIHRlbGx1cy4gU2VkIHVsdHJpY2VzIHZpdmVycmEgdG9ydG9yIHV0IGltcGVyZGlldC4gU2VkIGluIGFyY3UgZmF1Y2lidXMsIGNvbnNlcXVhdCBtaSBpbiwgdWxsYW1jb3JwZXIgbnVuYy4gQ3VyYWJpdHVyIGRpZ25pc3NpbSB0dXJwaXMgdml0YWUgZmVybWVudHVtIGNvbnZhbGxpcy4gRHVpcyBldWlzbW9kIGxvcmVtIHZlbCBzZW0gdGluY2lkdW50IGVsZWlmZW5kLgoKQWxpcXVhbSB0aW5jaWR1bnQgbGliZXJvIGF0IGV4IHNhZ2l0dGlzLCBuZWMgYWNjdW1zYW4gbGVjdHVzIG1vbGVzdGllLiBQZWxsZW50ZXNxdWUgaGFiaXRhbnQgbW9yYmkgdHJpc3RpcXVlIHNlbmVjdHVzIGV0IG5ldHVzIGV0IG1hbGVzdWFkYSBmYW1lcyBhYyB0dXJwaXMgZWdlc3Rhcy4gU2VkIGFsaXF1ZXQgY29uZGltZW50dW0gYXJjdSBwaGFyZXRyYSBlZ2VzdGFzLiBWZXN0aWJ1bHVtIGEgZmF1Y2lidXMgb2Rpby4gQWxpcXVhbSBzb2RhbGVzIHZlbmVuYXRpcyBleCwgYXQgdmVoaWN1bGEgbWV0dXMgc2VtcGVyIHNpdCBhbWV0LiBRdWlzcXVlIGVnZXQgaWFjdWxpcyBlbmltLiBVdCBpYWN1bGlzIGxpZ3VsYSB0dXJwaXMsIHNpdCBhbWV0IGNvbnNlY3RldHVyIHRvcnRvciBpbXBlcmRpZXQgZXQuIFV0IGRvbG9yIGxpZ3VsYSwgdmVoaWN1bGEgdmVsIGZpbmlidXMgZWdldCwgdmFyaXVzIGFjIG1hdXJpcy4gUHJvaW4gdml0YWUgbWF1cmlzIG5vbiBlcm9zIHRlbXBvciBwb3J0YSBzaXQgYW1ldCBub24gZXguIEludGVnZXIgYSBjdXJzdXMgcHVydXMuIENyYXMgZXQgbnVuYyBsYWN1cy4gUGVsbGVudGVzcXVlIGhhYml0YW50IG1vcmJpIHRyaXN0aXF1ZSBzZW5lY3R1cyBldCBuZXR1cyBldCBtYWxlc3VhZGEgZmFtZXMgYWMgdHVycGlzIGVnZXN0YXMuIFBlbGxlbnRlc3F1ZSBub24gcGxhY2VyYXQgc2VtLiBQaGFzZWxsdXMgYmliZW5kdW0gbmlzaSBldCBzZW0gZXVpc21vZCBldWlzbW9kLiBNYXVyaXMgZGFwaWJ1cyB1bHRyaWNpZXMgbnVuYywgZXQgY29tbW9kbyBvcmNpIHRlbXB1cyBuZWMuIE51bGxhbSBpZCBzZW0gY29tbW9kbywgdHJpc3RpcXVlIGVsaXQgZWdldCwgYWNjdW1zYW4gb2Rpby4KCkZ1c2NlIG5pYmggbmliaCwgZmluaWJ1cyBpbiBiaWJlbmR1bSB1dCwgY29tbW9kbyBhdCB0b3J0b3IuIEZ1c2NlIHZlc3RpYnVsdW0gdGVtcHVzIHBoYXJldHJhLiBVdCBlbGl0IHF1YW0sIGNvbnNlY3RldHVyIHNpdCBhbWV0IGJsYW5kaXQgdmVsLCBmZXJtZW50dW0gdXQgYXVndWUuIE1hdXJpcyBtYWduYSBmZWxpcywgaW50ZXJkdW0gcXVpcyBhdWN0b3IgcXVpcywgbGFjaW5pYSBldSBuZXF1ZS4gTmFtIGV1aXNtb2QgaW4gcXVhbSBzZWQgYmliZW5kdW0uIEV0aWFtIHBoYXJldHJhIGZldWdpYXQgbmliaCwgdXQgdml2ZXJyYSBtYXVyaXMgbHVjdHVzIHF1aXMuIEluIHNlbXBlciB0ZWxsdXMgbm9uIHZ1bHB1dGF0ZSBtYXhpbXVzLiBNYXVyaXMgcXVpcyBhbnRlIHRyaXN0aXF1ZSwgY29uZGltZW50dW0gbGVvIGF0LCB0aW5jaWR1bnQgbWV0dXMuIEFsaXF1YW0gdXQgc3VzY2lwaXQgbG9yZW0sIGluIHNvbGxpY2l0dWRpbiB2ZWxpdC4gUHJvaW4gY29uc2VxdWF0IHBlbGxlbnRlc3F1ZSBuaXNsIHV0IG1heGltdXMuIFZlc3RpYnVsdW0gdWx0cmljaWVzLCBhdWd1ZSBxdWlzIG1hbGVzdWFkYSBydXRydW0sIGR1aSBsb3JlbSBtb2xlc3RpZSBxdWFtLCBpZCByaG9uY3VzIG1hc3NhIGR1aSB2aXRhZSBpcHN1bS4gVmVzdGlidWx1bSBzY2VsZXJpc3F1ZSBldSBsaWJlcm8gc2l0IGFtZXQgY29uc2VjdGV0dXIuIFV0IGZhdWNpYnVzIHZ1bHB1dGF0ZSB1cm5hIHZlbCB2aXZlcnJhLiBVdCBldSBtYXNzYSB2aXRhZSB0b3J0b3IgY29uc2VjdGV0dXIgYWxpcXVhbS4gVmVzdGlidWx1bSBhbnRlIGlwc3VtIHByaW1pcyBpbiBmYXVjaWJ1cyBvcmNpIGx1Y3R1cyBldCB1bHRyaWNlcyBwb3N1ZXJlIGN1YmlsaWEgY3VyYWU7CgpTZWQgbW9sbGlzLCBudW5jIHZpdGFlIGRhcGlidXMgYWxpcXVldCwgZXggc2VtIGlhY3VsaXMgZXgsIHF1aXMgcGhhcmV0cmEgbGVjdHVzIGVuaW0gc2l0IGFtZXQgbG9yZW0uIEN1cmFiaXR1ciBzYXBpZW4gZWxpdCwgcnV0cnVtIGFjIHR1cnBpcyBlZ2V0LCBzYWdpdHRpcyBmcmluZ2lsbGEgdmVsaXQuIFByb2luIGluIHRvcnRvciBldSBlbGl0IGNvbW1vZG8gdWxsYW1jb3JwZXIgdXQgZWdldCBtYXVyaXMuIERvbmVjIGF0IG1pIGRvbG9yLiBWaXZhbXVzIGdyYXZpZGEgbmliaCBhdCBsaWd1bGEgaW1wZXJkaWV0LCB2ZWwgcGxhY2VyYXQgc2VtIGVsZWlmZW5kLiBNYWVjZW5hcyBldSBpbXBlcmRpZXQgZXJvcy4gTnVsbGEgYXVjdG9yIGNvbmd1ZSB0cmlzdGlxdWUuIE5hbSBtYWxlc3VhZGEgbWkgdGluY2lkdW50IGxvcmVtIGVnZXN0YXMsIHNpdCBhbWV0IHBvc3VlcmUgZWxpdCBmYWNpbGlzaXMuIFV0IGxpYmVybyBtYWduYSwgdmFyaXVzIHZpdGFlIGF1Z3VlIHF1aXMsIHZlc3RpYnVsdW0gY29uZGltZW50dW0gbWV0dXMuIENsYXNzIGFwdGVudCB0YWNpdGkgc29jaW9zcXUgYWQgbGl0b3JhIHRvcnF1ZW50IHBlciBjb251YmlhIG5vc3RyYSwgcGVyIGluY2VwdG9zIGhpbWVuYWVvcy4gTnVsbGEgcHJldGl1bSBpbXBlcmRpZXQgbGlndWxhIG5lYyBzdXNjaXBpdC4gSW4gZXUgY29tbW9kbyBsaWJlcm8uIFBlbGxlbnRlc3F1ZSB1bHRyaWNlcyBpbXBlcmRpZXQgdHVycGlzLCBuZWMgZGljdHVtIGxlbyBhbGlxdWFtIHV0LiBOdWxsYSB1bHRyaWNlcyBleCBhYyBsaWd1bGEgcGhhcmV0cmEgaW50ZXJkdW0uCgpWZXN0aWJ1bHVtIHRlbXB1cyBlbmltIGEgZW5pbSB2dWxwdXRhdGUsIGV1IHVsbGFtY29ycGVyIGp1c3RvIG1vbGxpcy4gTnVsbGFtIHRlbXBvciBkb2xvciBldSBmaW5pYnVzIGhlbmRyZXJpdC4gU2VkIG5vbiBhdWd1ZSBpcHN1bS4gQWVuZWFuIGV0IG1hZ25hIG1hbGVzdWFkYSwgY3Vyc3VzIG5pYmggc2l0IGFtZXQsIHNlbXBlciBsb3JlbS4gRnVzY2UgcXVpcyBpcHN1bSBldSBkdWkgY29tbW9kbyBtb2xlc3RpZSBhIGlkIGV4LiBBbGlxdWFtIGxhb3JlZXQgbW9sbGlzIGFudGUuIE9yY2kgdmFyaXVzIG5hdG9xdWUgcGVuYXRpYnVzIGV0IG1hZ25pcyBkaXMgcGFydHVyaWVudCBtb250ZXMsIG5hc2NldHVyIHJpZGljdWx1cyBtdXMuIFNlZCBwZWxsZW50ZXNxdWUsIGxlbyBhYyBzdXNjaXBpdCBzY2VsZXJpc3F1ZSwgdGVsbHVzIGVuaW0gcHJldGl1bSBudW5jLCBtYXR0aXMgZnJpbmdpbGxhIGxhY3VzIGp1c3RvIHF1aXMgYXJjdS4gQWxpcXVhbSBlZ2VzdGFzIHZlbmVuYXRpcyBkaWN0dW0uIE1hdXJpcyBlZ2V0IHB1cnVzIHNlZCBlc3QgbHVjdHVzIGRhcGlidXMuIFByYWVzZW50IGNvbW1vZG8gZWxlaWZlbmQgbGVjdHVzLCBldCBmcmluZ2lsbGEgcHVydXMgZ3JhdmlkYSBldC4KCk5hbSBmcmluZ2lsbGEgZXN0IGZlbGlzLCB2ZWwgdWx0cmljZXMgbGFjdXMgbW9sZXN0aWUgZWdldC4gTnVsbGEgc29kYWxlcyBzaXQgYW1ldCBxdWFtIGV0IHRpbmNpZHVudC4gVml2YW11cyBuZWMgbWV0dXMgZXQgZGlhbSBhdWN0b3IgcHVsdmluYXIuIERvbmVjIHNpdCBhbWV0IGF1Z3VlIHZpdGFlIGRpYW0gc3VzY2lwaXQgbW9sZXN0aWUgZXUgcXVpcyBleC4gUGVsbGVudGVzcXVlIGZlbGlzIGRvbG9yLCBjb25zZWN0ZXR1ciB2aXRhZSBkaWFtIGNvbW1vZG8sIGhlbmRyZXJpdCBsdWN0dXMgc2FwaWVuLiBPcmNpIHZhcml1cyBuYXRvcXVlIHBlbmF0aWJ1cyBldCBtYWduaXMgZGlzIHBhcnR1cmllbnQgbW9udGVzLCBuYXNjZXR1ciByaWRpY3VsdXMgbXVzLiBOdWxsYW0gYXVndWUgbmlzaSwgcnV0cnVtIHNpdCBhbWV0IG1hdXJpcyBncmF2aWRhLCBzb2xsaWNpdHVkaW4gdmVoaWN1bGEgbnVsbGEuIFBlbGxlbnRlc3F1ZSBuZWMgbGFjdXMgbnVuYy4gQWxpcXVhbSB0ZWxsdXMgZWxpdCwgZmFjaWxpc2lzIGEgZWxlaWZlbmQgdmVsLCBzYWdpdHRpcyBzaXQgYW1ldCBsaWd1bGEuIEFsaXF1YW0gcmhvbmN1cywgbWFzc2EgZXUgYWNjdW1zYW4gZWxlbWVudHVtLCBsaWd1bGEgbG9yZW0gdWxsYW1jb3JwZXIgbmVxdWUsIGF0IHNvZGFsZXMgYXJjdSBsaWJlcm8gZXQgbWV0dXMuIEN1cmFiaXR1ciBlZ2V0IGVsaXQgZWdldCBlbmltIHJ1dHJ1bSBtb2xlc3RpZS4gQ3VyYWJpdHVyIGJpYmVuZHVtIHZlbCBkaWFtIGVnZXQgZGljdHVtLiBGdXNjZSBpYWN1bGlzIGFyY3UgYXJjdSwgZWdldCB1bHRyaWNlcyBhbnRlIGJpYmVuZHVtIGNvbnNlY3RldHVyLiBEdWlzIGZyaW5naWxsYSwgaXBzdW0gcXVpcyBlZ2VzdGFzIGJsYW5kaXQsIGRpYW0gdGVsbHVzIGZyaW5naWxsYSB2ZWxpdCwgdWx0cmljZXMgc29sbGljaXR1ZGluIGxhY3VzIG1pIHZlbCBtYXVyaXMuIE51bmMgbnVsbGEgZHVpLCBwb3J0dGl0b3IgdmVsIHVybmEgZWdldCwgbWF4aW11cyBzb2RhbGVzIGxpYmVyby4gRG9uZWMgcXVpcyB2ZWhpY3VsYSBsYWN1cy4KClN1c3BlbmRpc3NlIHRvcnRvciBmZWxpcywgYWxpcXVhbSBpZCB1cm5hIGV1LCBldWlzbW9kIGJpYmVuZHVtIGxlY3R1cy4gQ3VyYWJpdHVyIGFjIGVyYXQgYWMgc2VtIHNjZWxlcmlzcXVlIG1heGltdXMuIFNlZCBjb25zZXF1YXQgY3Vyc3VzIHRvcnRvciwgZXVpc21vZCBpYWN1bGlzIGxvcmVtIHJob25jdXMgdXQuIENyYXMgc29kYWxlcyBhdWN0b3Igc2FnaXR0aXMuIEFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gTnVsbGEgcnV0cnVtIGFjY3Vtc2FuIGp1c3RvIGluIHJ1dHJ1bS4gRXRpYW0gbm9uIG1hdXJpcyBmZWxpcy4gRnVzY2UgZXQgcmlzdXMgdGVtcG9yIGxpYmVybyBydXRydW0gc2NlbGVyaXNxdWUuIE51bmMgbW9sZXN0aWUgdml0YWUgc2VtIGlkIGF1Y3Rvci4gRG9uZWMgc2l0IGFtZXQgbmlzbCB1dCBkb2xvciBzZW1wZXIgdHJpc3RpcXVlIGV1IGV0IG1ldHVzLiBEb25lYyBldSBvZGlvIHJ1dHJ1bSwgZmVybWVudHVtIGFyY3UgYWMsIGVnZXN0YXMgcHVydXMuIERvbmVjIGF0IHR1cnBpcyBuZXF1ZS4gU3VzcGVuZGlzc2UgZWdlc3RhcyBhYyB0dXJwaXMgYXQgbGFjaW5pYS4gRG9uZWMgbWFsZXN1YWRhIHZpdGFlIG9yY2kgaWQgY3Vyc3VzLgoKQWVuZWFuIGNvbnNlcXVhdCB0b3J0b3IgbG9ib3J0aXMganVzdG8gZnJpbmdpbGxhIGNvbmd1ZS4gU2VkIHNlZCBtYXVyaXMgY29tbW9kbywgdHJpc3RpcXVlIG51bGxhIHV0LCBzb2RhbGVzIG5pc2wuIEFsaXF1YW0gaW50ZXJkdW0gYXQgZHVpIGFsaXF1ZXQgZ3JhdmlkYS4gTW9yYmkgYSBzb2RhbGVzIG51bmMuIE51bmMgdmVuZW5hdGlzIGp1c3RvIHRvcnRvciwgZGlnbmlzc2ltIHNvbGxpY2l0dWRpbiBsYWN1cyBzYWdpdHRpcyBhYy4gRG9uZWMgbm9uIGxpYmVybyBtaS4gRHVpcyBjdXJzdXMgZGlhbSBzZWQgb3JjaSBlZmZpY2l0dXIsIGFjIHJob25jdXMgdHVycGlzIHZpdmVycmEuIER1aXMgZXUgb2RpbyBldCBkaWFtIGNvbW1vZG8gdnVscHV0YXRlLiBJbiBmZWxpcyBuaWJoLCB0aW5jaWR1bnQgaW4gYXJjdSBlZ2V0LCBkYXBpYnVzIGJsYW5kaXQgZXguIEZ1c2NlIHBsYWNlcmF0IGNvbnNlcXVhdCBmZXVnaWF0LgoKRXRpYW0gc2VtcGVyIHNlbXBlciBtZXR1cyB2aXRhZSB0cmlzdGlxdWUuIE51bGxhbSB2b2x1dHBhdCB0b3J0b3IgdmVuZW5hdGlzIHVybmEgaWFjdWxpcyBkaWN0dW0uIFNlZCBxdWlzIGRvbG9yIGVnZXN0YXMsIHNjZWxlcmlzcXVlIGZlbGlzIGlkLCBsdWN0dXMgdmVsaXQuIEFlbmVhbiBydXRydW0gY3Vyc3VzIGxhY3VzLCBpZCB1bHRyaWNlcyBudWxsYSBhY2N1bXNhbiBpbnRlcmR1bS4gRXRpYW0gbWF4aW11cywganVzdG8gbm9uIG1vbGxpcyBsdWN0dXMsIHNlbSByaXN1cyB2YXJpdXMgZXJhdCwgdml0YWUgbGFjaW5pYSBuZXF1ZSBlbmltIHV0IG5lcXVlLiBRdWlzcXVlIGR1aSBkb2xvciwgY3Vyc3VzIG5vbiBsb3JlbSBhYywgcHVsdmluYXIgZWdlc3RhcyBlcm9zLiBWZXN0aWJ1bHVtIGVnZXQgYW50ZSBpbiBhbnRlIHZvbHV0cGF0IGRpY3R1bSBpbiBhdCB1cm5hLiBJbnRlZ2VyIHRlbXBvciBvcmNpIGV0IGxlbyBpYWN1bGlzLCBxdWlzIHRpbmNpZHVudCBzZW0gcGVsbGVudGVzcXVlLiBJbnRlZ2VyIG9ybmFyZSBmZWxpcyBhYyBsaWd1bGEgcmhvbmN1cyB0ZW1wb3IuIFV0IHJpc3VzIG51bmMsIHBvc3VlcmUgdXQgYXJjdSBzZWQsIGZhdWNpYnVzIGZlcm1lbnR1bSBtaS4gRnVzY2UgbmVjIGlwc3VtIHNlbXBlciBtaSBhbGlxdWFtIHBvcnR0aXRvci4gRG9uZWMgdHJpc3RpcXVlLCBsaWJlcm8gZWdldCB0aW5jaWR1bnQgYmxhbmRpdCwgYXVndWUgbGliZXJvIHVsdHJpY2VzIHRvcnRvciwgYSBtYXR0aXMgZG9sb3IgbGVjdHVzIHNlZCBwdXJ1cy4gUGVsbGVudGVzcXVlIGRpZ25pc3NpbSBkaWduaXNzaW0gbWFsZXN1YWRhLiBDdXJhYml0dXIgYWMgZGlhbSBlcmF0LgoKSW50ZXJkdW0gZXQgbWFsZXN1YWRhIGZhbWVzIGFjIGFudGUgaXBzdW0gcHJpbWlzIGluIGZhdWNpYnVzLiBJbnRlZ2VyIGFudGUgcmlzdXMsIGRhcGlidXMgZXQgZW5pbSB1dCwgYWxpcXVhbSBwb3J0YSBkdWkuIFBlbGxlbnRlc3F1ZSB1dCBkdWkgdmVoaWN1bGEsIHN1c2NpcGl0IHR1cnBpcyBpZCwgZmV1Z2lhdCB1cm5hLiBNYXVyaXMgY3Vyc3VzIHZhcml1cyBmZWxpcywgcXVpcyBmaW5pYnVzIGVzdCBwb3J0YSBldC4gUGhhc2VsbHVzIGx1Y3R1cyBhbGlxdWFtIGNvbW1vZG8uIEN1cmFiaXR1ciBlbGVpZmVuZCBhbnRlIG5vbiBsb3JlbSBpbnRlcmR1bSBsb2JvcnRpcy4gQWxpcXVhbSB2aXRhZSBqdXN0byBhdCBxdWFtIGVsZWlmZW5kIHN1c2NpcGl0IHNpdCBhbWV0IHNlZCBuaXNsLiBDdXJhYml0dXIgYWxpcXVhbSBtaSBpbiBiaWJlbmR1bSBjb21tb2RvLgoKTWF1cmlzIGFjIGVyYXQgZWdldCBleCBoZW5kcmVyaXQgZmF1Y2lidXMgbmVjIGEgbnVsbGEuIE9yY2kgdmFyaXVzIG5hdG9xdWUgcGVuYXRpYnVzIGV0IG1hZ25pcyBkaXMgcGFydHVyaWVudCBtb250ZXMsIG5hc2NldHVyIHJpZGljdWx1cyBtdXMuIFV0IGV4IHJpc3VzLCBncmF2aWRhIGVnZXQgc2VtIHNlZCwgc2VtcGVyIHZlaGljdWxhIG5pc2kuIEFsaXF1YW0gZXUgbWF0dGlzIG9kaW8sIGV0IHJ1dHJ1bSBzZW0uIE51bGxhIGVnZXQgc2VtcGVyIG5pYmgsIHV0IGRpY3R1bSBsYWN1cy4gQWxpcXVhbSBlbGl0IHJpc3VzLCBpbnRlcmR1bSBpbiBsZW8gZXUsIHBsYWNlcmF0IGFjY3Vtc2FuIGVyb3MuIFNlZCBldWlzbW9kIGV4IGVyYXQsIGV1IHRyaXN0aXF1ZSBudWxsYSBzYWdpdHRpcyBpZC4gRG9uZWMgbGFvcmVldCwgc2FwaWVuIGFjIGFsaXF1ZXQgcG9ydGEsIGxlbyBlcmF0IG1hdHRpcyBhcmN1LCBhIGRpZ25pc3NpbSBlcmF0IGVsaXQgcXVpcyBkaWFtLgoKTW9yYmkgbG9ib3J0aXMgc2VkIHB1cnVzIHZlbCBwaGFyZXRyYS4gQWVuZWFuIG5lcXVlIG9yY2ksIHNvbGxpY2l0dWRpbiBub24gZmVsaXMgZXUsIGNvbW1vZG8gYWxpcXVldCBhbnRlLiBJbnRlZ2VyIGJpYmVuZHVtLCBudW5jIGVnZXQgaW50ZXJkdW0gY29uc2VxdWF0LCB0ZWxsdXMgdGVsbHVzIGZpbmlidXMgbnVuYywgZXQgcG9ydHRpdG9yIGxpZ3VsYSB2ZWxpdCBxdWlzIHR1cnBpcy4gT3JjaSB2YXJpdXMgbmF0b3F1ZSBwZW5hdGlidXMgZXQgbWFnbmlzIGRpcyBwYXJ0dXJpZW50IG1vbnRlcywgbmFzY2V0dXIgcmlkaWN1bHVzIG11cy4gVXQgcGxhY2VyYXQgY29udmFsbGlzIHF1YW0gbmVjIGFsaXF1ZXQuIFNlZCBmYWNpbGlzaXMgcHVydXMgc2l0IGFtZXQgY29uc2VjdGV0dXIgbGFjaW5pYS4gRG9uZWMgbGFvcmVldCBhYyBkb2xvciBhIGRhcGlidXMuIEZ1c2NlIGRpY3R1bSBwdXJ1cyBldSBqdXN0byBlZmZpY2l0dXIsIGlkIGFjY3Vtc2FuIGV4IHN1c2NpcGl0LiBWaXZhbXVzIHNlZCBtYXNzYSB2aXRhZSBsaWd1bGEgc2VtcGVyIGxhY2luaWEuIFNlZCB2aXZlcnJhIHR1cnBpcyBub24gbGVjdHVzIGNvbmd1ZSBwZWxsZW50ZXNxdWUuCgpJbnRlZ2VyIGFjIGp1c3RvIHZpdGFlIGxpYmVybyBlZmZpY2l0dXIgc29sbGljaXR1ZGluLiBJbnRlZ2VyIGlhY3VsaXMgbmVjIHRvcnRvciBncmF2aWRhIHZ1bHB1dGF0ZS4gTW9yYmkgc2VtcGVyIHNpdCBhbWV0IG1hc3NhIHZlbCBsb2JvcnRpcy4gUHJhZXNlbnQgY29uc2VxdWF0LCBqdXN0byBhYyBtYXR0aXMgbWF0dGlzLCBtYXNzYSBlc3QgY29uZGltZW50dW0gdHVycGlzLCB1dCB1bHRyaWNpZXMgYXJjdSB0dXJwaXMgY29uc2VjdGV0dXIgbnVuYy4gSW4gY29uc2VxdWF0IG5lYyBsaWd1bGEgc2l0IGFtZXQgbW9sbGlzLiBOdWxsYSBwb3J0dGl0b3IgbWFzc2EgbmVjIG51bmMgdWxsYW1jb3JwZXIgdGluY2lkdW50LiBNb3JiaSBjb25ndWUgbmliaCBpZCBkdWkgdWxsYW1jb3JwZXIgYmliZW5kdW0uIENyYXMgc29kYWxlcyBmZXJtZW50dW0gbWFnbmEgYWMgY3Vyc3VzLiBFdGlhbSBlZmZpY2l0dXIgdmVoaWN1bGEgY29udmFsbGlzLiBNb3JiaSBlcm9zIGVyYXQsIGludGVyZHVtIGFjIHJpc3VzIGVnZXQsIHRpbmNpZHVudCBlbGVpZmVuZCBxdWFtLiBEdWlzIG5vbiBmYXVjaWJ1cyBpcHN1bS4KClV0IGZlcm1lbnR1bSBvZGlvIHNpdCBhbWV0IHVybmEgZGljdHVtLCBiaWJlbmR1bSBhbGlxdWFtIGp1c3RvIHJob25jdXMuIERvbmVjIHNlbXBlciBtYXhpbXVzIHRvcnRvciBub24gdml2ZXJyYS4gU2VkIGEgZ3JhdmlkYSBsZW8uIEludGVnZXIgdmVoaWN1bGEgbGVjdHVzIGFjIG1hZ25hIHNvZGFsZXMgZGlnbmlzc2ltLiBNYXVyaXMgcXVpcyBwdXJ1cyB1dCB2ZWxpdCBhbGlxdWV0IGFsaXF1YW0gaW4gc2VkIG5pYmguIEN1cmFiaXR1ciBpZCBvcm5hcmUgdHVycGlzLiBJbiBoYWMgaGFiaXRhc3NlIHBsYXRlYSBkaWN0dW1zdC4gTW9yYmkgY29uc2VxdWF0IHZlc3RpYnVsdW0gdHVycGlzIGVnZXQgZmFjaWxpc2lzLiBRdWlzcXVlIHNlZCBjb25ndWUgbGliZXJvLCBzaXQgYW1ldCB0ZW1wdXMgdG9ydG9yLiBBZW5lYW4gYSB0b3J0b3IgYmliZW5kdW0sIHVsdHJpY2llcyBlbmltIHNlZCwgZGljdHVtIGp1c3RvLiBWaXZhbXVzIG5vbiB0aW5jaWR1bnQgbWF1cmlzLCBub24gaW50ZXJkdW0gbGlndWxhLgoKSW50ZXJkdW0gZXQgbWFsZXN1YWRhIGZhbWVzIGFjIGFudGUgaXBzdW0gcHJpbWlzIGluIGZhdWNpYnVzLiBDcmFzIHZlbGl0IGVsaXQsIHZ1bHB1dGF0ZSBpbiBkaWN0dW0gcXVpcywgY29tbW9kbyBhYyBtYXNzYS4gVmVzdGlidWx1bSBiaWJlbmR1bSB2dWxwdXRhdGUgcGVsbGVudGVzcXVlLiBWZXN0aWJ1bHVtIGFsaXF1ZXQgbmVjIG5lcXVlIGluIHBlbGxlbnRlc3F1ZS4gVmVzdGlidWx1bSBhbnRlIGlwc3VtIHByaW1pcyBpbiBmYXVjaWJ1cyBvcmNpIGx1Y3R1cyBldCB1bHRyaWNlcyBwb3N1ZXJlIGN1YmlsaWEgY3VyYWU7IEluIHB1bHZpbmFyIGR1aSBjb25zZWN0ZXR1ciBuaXNsIGNvbW1vZG8gYmliZW5kdW0uIEluIGV0IHZhcml1cyBsb3JlbS4gTWFlY2VuYXMgZXQgYW50ZSB2aXRhZSBlc3QgZmF1Y2lidXMgcGxhY2VyYXQuIE1hdXJpcyBzb2RhbGVzIHF1aXMgbGVjdHVzIGVnZXQgZnJpbmdpbGxhLiBOdWxsYSBsb2JvcnRpcyBhdWN0b3IgdGVsbHVzIHNlZCBsb2JvcnRpcy4gU3VzcGVuZGlzc2UgdmVsaXQgZWxpdCwgZ3JhdmlkYSB2ZWwgZG9sb3IgY29uc2VjdGV0dXIsIGZldWdpYXQgZGljdHVtIGVuaW0uIE1hZWNlbmFzIGNvbnNlY3RldHVyIGhlbmRyZXJpdCBtb2xlc3RpZS4KCkZ1c2NlIHZlbCBuaWJoIGN1cnN1cywgaWFjdWxpcyBsb3JlbSB2ZWwsIHZlaGljdWxhIGxlby4gTWFlY2VuYXMgY29udmFsbGlzIGhlbmRyZXJpdCB1cm5hLCBzaXQgYW1ldCB2dWxwdXRhdGUgaXBzdW0gbW9sbGlzIHZlbC4gRXRpYW0gZWZmaWNpdHVyIGFjY3Vtc2FuIGFsaXF1YW0uIER1aXMgbm9uIGV4IG5lYyBtZXR1cyBpbnRlcmR1bSBwcmV0aXVtIGFjIHV0IHR1cnBpcy4gUHJvaW4gaXBzdW0gaXBzdW0sIGxvYm9ydGlzIGV0IGZlbGlzIGEsIGRhcGlidXMgZWxlaWZlbmQgbWFzc2EuIFN1c3BlbmRpc3NlIG1hbGVzdWFkYSBtYWxlc3VhZGEgdWxsYW1jb3JwZXIuIFV0IGV1aXNtb2QgZmV1Z2lhdCB2ZXN0aWJ1bHVtLiBEb25lYyBvcm5hcmUgc2l0IGFtZXQgZXJvcyB2aXRhZSBwcmV0aXVtLiBWZXN0aWJ1bHVtIG1pIGV4LCBoZW5kcmVyaXQgc2VkIG1hc3NhIGVnZXQsIGludGVyZHVtIGJpYmVuZHVtIGV4LiBDbGFzcyBhcHRlbnQgdGFjaXRpIHNvY2lvc3F1IGFkIGxpdG9yYSB0b3JxdWVudCBwZXIgY29udWJpYSBub3N0cmEsIHBlciBpbmNlcHRvcyBoaW1lbmFlb3MuCgpNYXVyaXMgc2l0IGFtZXQgb3JuYXJlIGRvbG9yLCBzZWQgdmVuZW5hdGlzIGp1c3RvLiBRdWlzcXVlIGR1aSBudW5jLCBwb3J0dGl0b3Igdml0YWUgbGFvcmVldCBzZWQsIGVsZWlmZW5kIGlkIG5pYmguIE51bGxhbSBzdXNjaXBpdCBkaWFtIGluIGVsaXQgcG9ydHRpdG9yLCBpbiBjb252YWxsaXMgYW50ZSBhbGlxdWFtLiBQaGFzZWxsdXMgb3JuYXJlIGVyYXQgZWxpdCwgbm9uIHRlbXBvciBlc3QgcnV0cnVtIGEuIFByb2luIG5vbiBuaWJoIHZpdGFlIGxhY3VzIHBvcnR0aXRvciBzY2VsZXJpc3F1ZSBpbiBzZWQgbmliaC4gQ3JhcyBxdWlzIGVsZWlmZW5kIG51bmMuIFBlbGxlbnRlc3F1ZSBxdWlzIHVsbGFtY29ycGVyIGxhY3VzLCBub24gcG9ydHRpdG9yIG51bGxhLiBDbGFzcyBhcHRlbnQgdGFjaXRpIHNvY2lvc3F1IGFkIGxpdG9yYSB0b3JxdWVudCBwZXIgY29udWJpYSBub3N0cmEsIHBlciBpbmNlcHRvcyBoaW1lbmFlb3MuIE1hZWNlbmFzIGV1IGN1cnN1cyBtZXR1cywgdGVtcHVzIHB1bHZpbmFyIGV4LgoKQWxpcXVhbSBzYXBpZW4gYXVndWUsIGRhcGlidXMgaWQgZHVpIGV1LCBncmF2aWRhIHBoYXJldHJhIHJpc3VzLiBGdXNjZSBzYWdpdHRpcyBhdWd1ZSB1dCBncmF2aWRhIGVmZmljaXR1ci4gTnVuYyB1dCB0ZW1wdXMgbmVxdWUsIGV1IG1hbGVzdWFkYSBlcm9zLiBOdWxsYSBwcmV0aXVtIGxvcmVtIGV1IG1ldHVzIHZlbmVuYXRpcyBwbGFjZXJhdC4gUGVsbGVudGVzcXVlIG1vbGxpcyBmZWxpcyBpbiB2ZWxpdCBncmF2aWRhIHNvZGFsZXMuIFByYWVzZW50IGx1Y3R1cywgZG9sb3Igc2l0IGFtZXQgaW50ZXJkdW0gZmF1Y2lidXMsIGRpYW0gZXJvcyB1bHRyaWNlcyBuZXF1ZSwgbm9uIGZhdWNpYnVzIGlwc3VtIG5lcXVlIGV0IGp1c3RvLiBEb25lYyBncmF2aWRhIHBsYWNlcmF0IG1ldHVzIG5vbiBsdWN0dXMuIFV0IG1pIHR1cnBpcywgdGVtcHVzIGV1IGltcGVyZGlldCB1dCwgZmV1Z2lhdCBpbiBudW5jLiBQcm9pbiBkaWN0dW0sIGVzdCBxdWlzIGJpYmVuZHVtIHBvcnR0aXRvciwgZW5pbSBvcmNpIGxhY2luaWEgbnVuYywgdXQgaW1wZXJkaWV0IG5pYmggdGVsbHVzIGVnZXQgZW5pbS4KClNlZCBjb25zZWN0ZXR1ciBtb2xlc3RpZSBzYXBpZW4uIFZpdmFtdXMgbm9uIHRvcnRvciBpbiBsaWd1bGEgbWF4aW11cyBmZXVnaWF0LiBQZWxsZW50ZXNxdWUgaGFiaXRhbnQgbW9yYmkgdHJpc3RpcXVlIHNlbmVjdHVzIGV0IG5ldHVzIGV0IG1hbGVzdWFkYSBmYW1lcyBhYyB0dXJwaXMgZWdlc3Rhcy4gVmVzdGlidWx1bSBtYXhpbXVzIGZldWdpYXQgcmlzdXMgZXUgbHVjdHVzLiBGdXNjZSBzb2RhbGVzIHR1cnBpcyBwaGFyZXRyYSBibGFuZGl0IGlhY3VsaXMuIEFsaXF1YW0gYWMgZXN0IGNvbW1vZG8sIGFsaXF1ZXQgZW5pbSBpbiwgZmF1Y2lidXMgbWV0dXMuIEluIGhhYyBoYWJpdGFzc2UgcGxhdGVhIGRpY3R1bXN0LiBDdXJhYml0dXIgZXUgYXVndWUgZXUgdHVycGlzIHBlbGxlbnRlc3F1ZSBwb3N1ZXJlLiBFdGlhbSBzaXQgYW1ldCBjb252YWxsaXMgZXJhdC4gRG9uZWMgZmFjaWxpc2lzLCBudW5jIHF1aXMgc3VzY2lwaXQgaGVuZHJlcml0LCBuaWJoIGxlY3R1cyB2aXZlcnJhIGlwc3VtLCBlZ2V0IGZyaW5naWxsYSBuaXNsIGFyY3Ugc2VkIGxvcmVtLiBQcmFlc2VudCBhYyBmYWNpbGlzaXMgbGVjdHVzLCBlZ2V0IHBvc3VlcmUgbWF1cmlzLiBDcmFzIHVsbGFtY29ycGVyIHJ1dHJ1bSByaXN1cyBldCBkaWduaXNzaW0uIFZpdmFtdXMgdmFyaXVzIGF1Z3VlIHF1aXMgc29kYWxlcyB2ZW5lbmF0aXMuIEFlbmVhbiB0aW5jaWR1bnQgb2RpbyB2aXRhZSBpbXBlcmRpZXQgYWxpcXVldC4KClZlc3RpYnVsdW0gYSB0ZWxsdXMgZXJvcy4gUGhhc2VsbHVzIHF1aXMgdXJuYSBhcmN1LiBOdW5jIG1hdXJpcyBudW5jLCBibGFuZGl0IHNpdCBhbWV0IGFudGUgYSwgbGFjaW5pYSB2ZXN0aWJ1bHVtIGVyYXQuIE5hbSBmcmluZ2lsbGEganVzdG8gdml0YWUgZXJvcyB2dWxwdXRhdGUsIGF0IGRpY3R1bSBzYXBpZW4gdGVtcG9yLiBEdWlzIHJpc3VzIHRlbGx1cywgbGFvcmVldCBlZ2V0IGJsYW5kaXQgZWdldCwgZGFwaWJ1cyBhYyBsYWN1cy4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gUGhhc2VsbHVzIGEgbGlndWxhIHVsdHJpY2llcywgcmhvbmN1cyB0b3J0b3IgYSwgdml2ZXJyYSB0dXJwaXMuIEFsaXF1YW0gY29uc2VxdWF0IG51bGxhIGF0IHB1cnVzIGZyaW5naWxsYSBmZXJtZW50dW0uIE5hbSB2aXRhZSBmaW5pYnVzIHF1YW0uIFByYWVzZW50IGV0IGVuaW0gZ3JhdmlkYSwgZGljdHVtIGVyb3MgZWdldCwgZGljdHVtIGxhY3VzLgoKQWVuZWFuIHNpdCBhbWV0IGV4IGlkIGVyb3MgZWZmaWNpdHVyIHBvc3VlcmUuIE1vcmJpIGRpY3R1bSBlcm9zIGluIHB1cnVzIHRyaXN0aXF1ZSwgbHVjdHVzIHZlbmVuYXRpcyBuaXNsIHZpdmVycmEuIE51bmMgc29kYWxlcyBzYXBpZW4gc2l0IGFtZXQgbG9yZW0gbGFjaW5pYSBmaW5pYnVzLiBTZWQgYXQgdGVsbHVzIHZpdGFlIHRvcnRvciBibGFuZGl0IHRpbmNpZHVudCBhIGEgYXVndWUuIE51bGxhIG1hdHRpcyBlbGVpZmVuZCBzYXBpZW4sIGF0IGZlcm1lbnR1bSBxdWFtIGx1Y3R1cyBpbi4gRnVzY2UgbGVjdHVzIHF1YW0sIGZhY2lsaXNpcyB0cmlzdGlxdWUgbmVxdWUgdml0YWUsIGltcGVyZGlldCBmYWNpbGlzaXMgZG9sb3IuIER1aXMgZWdldCBzZW0gZWxpdC4KCkFsaXF1YW0gYSBsYWNpbmlhIHR1cnBpcywgY29uc2VxdWF0IHNvbGxpY2l0dWRpbiBpcHN1bS4gRHVpcyB2aXRhZSBvcm5hcmUgcXVhbS4gTnVuYyBlbGVtZW50dW0gc2VtIHV0IGNvbmRpbWVudHVtIHBvcnRhLiBBZW5lYW4gc2l0IGFtZXQgbmliaCBlZ2V0IGVsaXQgdmVuZW5hdGlzIGRpZ25pc3NpbSBuZWMgdml0YWUgYXVndWUuIFZpdmFtdXMgYXQgcXVhbSBtZXR1cy4gUGhhc2VsbHVzIGZyaW5naWxsYSwgYW50ZSBpZCB2b2x1dHBhdCBhbGlxdWV0LCBudW5jIG5pc2wgc2FnaXR0aXMgdG9ydG9yLCBhYyB1bHRyaWNpZXMgZG9sb3Igc2VtIG5lYyBlcm9zLiBEb25lYyBxdWlzIHByZXRpdW0gbmlzbCwgdXQgcmhvbmN1cyB0b3J0b3IuIEludGVnZXIgbGFvcmVldCBlbGVtZW50dW0gc2FwaWVuIGluIHVsdHJpY2llcy4gTnVsbGEgZmFjaWxpc2kuIEV0aWFtIHZvbHV0cGF0IGRpY3R1bSB2ZWxpdCBldSBzb2RhbGVzLiBPcmNpIHZhcml1cyBuYXRvcXVlIHBlbmF0aWJ1cyBldCBtYWduaXMgZGlzIHBhcnR1cmllbnQgbW9udGVzLCBuYXNjZXR1ciByaWRpY3VsdXMgbXVzLiBQcm9pbiBmYWNpbGlzaXMgcXVhbSBuZWMgdG9ydG9yIHZlaGljdWxhLCByaG9uY3VzIGltcGVyZGlldCBuaXNpIGF1Y3Rvci4gU3VzcGVuZGlzc2UgcG90ZW50aS4gVmVzdGlidWx1bSB1dCBlcmF0IGVyYXQuIFZpdmFtdXMgdXQgbGliZXJvIHNhcGllbi4KCk51bGxhbSBjb25ndWUgaW50ZXJkdW0gcHVydXMuIE5hbSBmYWNpbGlzaXMgdml0YWUgZXJvcyBlZ2V0IHZpdmVycmEuIEV0aWFtIGFjIGVzdCBkdWkuIER1aXMgbGFvcmVldCwgbGVjdHVzIHZpdGFlIHNvbGxpY2l0dWRpbiBsYWNpbmlhLCBsaWd1bGEgdmVsaXQgdnVscHV0YXRlIG1hZ25hLCBlZ2V0IGxhb3JlZXQgb2RpbyB2ZWxpdCBuZWMgZWxpdC4gU2VkIHNlbXBlciBsb2JvcnRpcyBqdXN0by4gVml2YW11cyBudWxsYSBudW5jLCBlZ2VzdGFzIHNpdCBhbWV0IGZlbGlzIG5lYywgZmV1Z2lhdCBiaWJlbmR1bSBsb3JlbS4gSW4gbmVjIGF1Z3VlIGRpZ25pc3NpbSwgc2NlbGVyaXNxdWUgbGVvIHNlZCwgcHVsdmluYXIgZXN0LiBQcm9pbiB2aXRhZSBmZWxpcyBwZWxsZW50ZXNxdWUsIGZhY2lsaXNpcyBmZWxpcyB2ZWwsIG1hdHRpcyBlcm9zLiBEb25lYyBlbGVtZW50dW0gZXUgbGliZXJvIGFjIGltcGVyZGlldC4gRG9uZWMgaXBzdW0gb3JjaSwgdGVtcG9yIHNlZCBlc3Qgc2VkLCBhY2N1bXNhbiBwb3J0YSBkdWkuIEluIHBvcnR0aXRvciBudWxsYSBhYyBzZW0gZWdlc3RhcyB0aW5jaWR1bnQuIEFlbmVhbiB1bHRyaWNlcyBpcHN1bSByaXN1cywgZXUgY29uZ3VlIGVuaW0gZWxlbWVudHVtIHF1aXMuCgpDdXJhYml0dXIgaW4gbGFjdXMgZXVpc21vZCwgY29udmFsbGlzIHJpc3VzIGV0LCBhbGlxdWFtIGR1aS4gTW9yYmkgdGluY2lkdW50IGxlY3R1cyBkdWksIGEgaW1wZXJkaWV0IG51bGxhIHNlbXBlciBuZWMuIEFsaXF1YW0gY29udmFsbGlzIHNvZGFsZXMgYXJjdSB2ZWwgdml2ZXJyYS4gQWxpcXVhbSB2aXRhZSB0aW5jaWR1bnQgZXJhdCwgc2NlbGVyaXNxdWUgdmVuZW5hdGlzIGxpYmVyby4gRG9uZWMgbW9sZXN0aWUgbmVjIGxpYmVybyB0aW5jaWR1bnQgY29uc2VjdGV0dXIuIE1hZWNlbmFzIGV0IHNlbXBlciBhcmN1LiBWZXN0aWJ1bHVtIGN1cnN1cyBtb2xsaXMgbGVjdHVzIGF0IHNhZ2l0dGlzLiBQZWxsZW50ZXNxdWUgbG9ib3J0aXMgZWxlaWZlbmQgbGVjdHVzIG5vbiBncmF2aWRhLiBTdXNwZW5kaXNzZSBwb3N1ZXJlIHV0IHB1cnVzIGlkIHZpdmVycmEuIERvbmVjIG1hc3NhIGF1Z3VlLCBhbGlxdWV0IHNpdCBhbWV0IHJ1dHJ1bSBhLCBlbGVtZW50dW0gYXQgdG9ydG9yLiBVdCB2ZW5lbmF0aXMgZXJhdCB2ZWwgbnVsbGEgcmhvbmN1cyBsYWNpbmlhLiBJbiBsZW8gZmVsaXMsIHNlbXBlciBhdCBtYXVyaXMgcGxhY2VyYXQsIGxvYm9ydGlzIGdyYXZpZGEgb3JjaS4KCkNyYXMgZGlnbmlzc2ltIGxvcmVtIGEgb2RpbyBmcmluZ2lsbGEgYWxpcXVhbS4gTmFtIHN1c2NpcGl0IGxvYm9ydGlzIHVybmEsIHJ1dHJ1bSBwdWx2aW5hciBsaWd1bGEuIFZlc3RpYnVsdW0gYWMgbGVvIGxhY3VzLiBOdW5jIGVmZmljaXR1ciB2ZWwgcmlzdXMgZWdldCBtb2xsaXMuIFN1c3BlbmRpc3NlIHNlZCByaXN1cyBkb2xvci4gTWFlY2VuYXMgY29udmFsbGlzIHJpc3VzIGEgbG9yZW0gcmhvbmN1cyBncmF2aWRhLiBTdXNwZW5kaXNzZSBub24gdmFyaXVzIGxlY3R1cy4gVmVzdGlidWx1bSBzZWQgZ3JhdmlkYSBkb2xvciwgdml0YWUgZWZmaWNpdHVyIG5pc2kuIEFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gUHJvaW4gbWF0dGlzIHZpdmVycmEgc3VzY2lwaXQuIE51bGxhIG1vbGxpcyBuaXNsIGlkIGV4IGVnZXN0YXMgZWxlbWVudHVtLiBTZWQgaWFjdWxpcyB0ZWxsdXMgdmVsIGFudGUgdWx0cmljZXMsIGV0IGF1Y3RvciBuaXNpIGVnZXN0YXMuCgpFdGlhbSBpcHN1bSBuZXF1ZSwgaW50ZXJkdW0gdXQgZXJvcyBldCwgc29sbGljaXR1ZGluIHBoYXJldHJhIHRlbGx1cy4gT3JjaSB2YXJpdXMgbmF0b3F1ZSBwZW5hdGlidXMgZXQgbWFnbmlzIGRpcyBwYXJ0dXJpZW50IG1vbnRlcywgbmFzY2V0dXIgcmlkaWN1bHVzIG11cy4gUHJvaW4gdm9sdXRwYXQgaW50ZXJkdW0gZXJvcyBlZ2V0IGlhY3VsaXMuIFBoYXNlbGx1cyBzZWQgbmlzbCBtYXhpbXVzLCBzdXNjaXBpdCBleCB1dCwgY29uc2VjdGV0dXIgbmlzbC4gRnVzY2UgcG9zdWVyZSBxdWFtIGlkIGR1aSBldWlzbW9kLCBlZ2V0IGJpYmVuZHVtIG5lcXVlIGJsYW5kaXQuIFByYWVzZW50IGF0IG1ldHVzIGVzdC4gU3VzcGVuZGlzc2UgZGFwaWJ1cyB0dXJwaXMgc2VkIHNhcGllbiBmZXVnaWF0LCBzZWQgZGljdHVtIHF1YW0gcG9ydGEuIE51bGxhIHNjZWxlcmlzcXVlIGxlY3R1cyBvcmNpLCBldCBwbGFjZXJhdCBxdWFtIHZlaGljdWxhIHNpdCBhbWV0LiBNYXVyaXMgZ3JhdmlkYSBudW5jIHV0IGRpYW0gZGlnbmlzc2ltLCBpZCBpbnRlcmR1bSBvZGlvIHVsbGFtY29ycGVyLiBEb25lYyBhdCBvcmNpIHZhcml1cywgZmF1Y2lidXMgbmliaCBzZW1wZXIsIHNvbGxpY2l0dWRpbiB1cm5hLiBBbGlxdWFtIHJob25jdXMgbmliaCBxdWlzIGZlbGlzIHNvZGFsZXMsIG5vbiBkaWduaXNzaW0gZXJhdCBtYWxlc3VhZGEuIFBoYXNlbGx1cyBhbnRlIHVybmEsIHRpbmNpZHVudCBub24gbGliZXJvIHNpdCBhbWV0LCBoZW5kcmVyaXQgbWFsZXN1YWRhIG51bmMuIFByYWVzZW50IG5vbiB2b2x1dHBhdCB2ZWxpdC4gU2VkIG1ldHVzIGF1Z3VlLCBsYW9yZWV0IGV0IG9kaW8gZXUsIGRpZ25pc3NpbSBzdXNjaXBpdCB0ZWxsdXMuIFZlc3RpYnVsdW0gc2FwaWVuIHB1cnVzLCBpYWN1bGlzIG5lYyB0ZW1wdXMgZXQsIHZhcml1cyBzZWQganVzdG8uCgpGdXNjZSBub24gZXggbWF0dGlzLCB0aW5jaWR1bnQgbmVxdWUgaW4sIGxhY2luaWEgZXN0LiBNYXVyaXMgYXVjdG9yLCBhcmN1IHNpdCBhbWV0IGhlbmRyZXJpdCBtYWxlc3VhZGEsIG9kaW8gcXVhbSB0aW5jaWR1bnQgbGVjdHVzLCBlZmZpY2l0dXIgdHJpc3RpcXVlIG51bGxhIGF1Z3VlIG5vbiBuaWJoLiBRdWlzcXVlIHF1YW0gbGVvLCBwcmV0aXVtIHNlZCB2ZW5lbmF0aXMgbm9uLCBoZW5kcmVyaXQgZXQgbG9yZW0uIER1aXMgdXQgcHVsdmluYXIgb3JjaSwgc2l0IGFtZXQgZmluaWJ1cyB2ZWxpdC4gSW4gZXQgbmlzbCBhdCBlbmltIHB1bHZpbmFyIGludGVyZHVtIHNlZCBuZWMgYW50ZS4gUGhhc2VsbHVzIGFsaXF1YW0gbmlzaSB1dCBkdWkgZGFwaWJ1cyB1bGxhbWNvcnBlci4gTWF1cmlzIG5lYyBjb21tb2RvIG1ldHVzLiBJbiBjb252YWxsaXMgb2RpbyB2aXRhZSB0b3J0b3IgdGVtcG9yIHNvZGFsZXMuIFBlbGxlbnRlc3F1ZSBldCBsb3JlbSBlbGl0LiBNb3JiaSBpbXBlcmRpZXQgY29uc2VxdWF0IHNlbSBhdCB1bHRyaWNpZXMuIFZlc3RpYnVsdW0gcGhhcmV0cmEsIG1ldHVzIG5lYyB0aW5jaWR1bnQgbWF4aW11cywgbmVxdWUgcHVydXMgaW1wZXJkaWV0IG5pc2wsIGdyYXZpZGEgY29tbW9kbyBpcHN1bSBxdWFtIGlkIGZlbGlzLiBQZWxsZW50ZXNxdWUgaW4gZGlnbmlzc2ltIHJpc3VzLCBldSBmZXVnaWF0IG5pc2kuCgpQcmFlc2VudCBzdXNjaXBpdCBkb2xvciBldCBqdXN0byBlbGVpZmVuZCBmaW5pYnVzLiBJbnRlZ2VyIHNlZCB1bHRyaWNlcyBkb2xvci4gQ2xhc3MgYXB0ZW50IHRhY2l0aSBzb2Npb3NxdSBhZCBsaXRvcmEgdG9ycXVlbnQgcGVyIGNvbnViaWEgbm9zdHJhLCBwZXIgaW5jZXB0b3MgaGltZW5hZW9zLiBBZW5lYW4gZXUgdGVtcHVzIGVyb3MsIHF1aXMgYmxhbmRpdCByaXN1cy4gVmVzdGlidWx1bSBuZWMgdGVtcG9yIG5pc2kuIFBoYXNlbGx1cyB2b2x1dHBhdCBhbGlxdWV0IGJsYW5kaXQuIE1vcmJpIGVnZXN0YXMgYXVjdG9yIG5pYmgsIGFjIGVnZXN0YXMgdXJuYSBjb25kaW1lbnR1bSB2aXRhZS4gRG9uZWMgaWFjdWxpcyB0ZW1wb3IgZGFwaWJ1cy4gTWFlY2VuYXMgZWdldCB0aW5jaWR1bnQgZXguIE1hZWNlbmFzIG5lYyBsYWN1cyBtb2xlc3RpZSwgdmVoaWN1bGEgZXJvcyBzZWQsIHNhZ2l0dGlzIGxvcmVtLgoKQWVuZWFuIG1ldHVzIG5pc2wsIGZhY2lsaXNpcyBhYyBjb21tb2RvIGluLCB1bGxhbWNvcnBlciBhdCBlc3QuIENsYXNzIGFwdGVudCB0YWNpdGkgc29jaW9zcXUgYWQgbGl0b3JhIHRvcnF1ZW50IHBlciBjb251YmlhIG5vc3RyYSwgcGVyIGluY2VwdG9zIGhpbWVuYWVvcy4gUGhhc2VsbHVzIGF0IHZ1bHB1dGF0ZSB0dXJwaXMsIHF1aXMgaWFjdWxpcyBwdXJ1cy4gTnVuYyB1dCBqdXN0byBkaWduaXNzaW0sIG1hdHRpcyBhdWd1ZSBpbiwgb3JuYXJlIGp1c3RvLiBTdXNwZW5kaXNzZSBzaXQgYW1ldCB0cmlzdGlxdWUgZHVpLiBOdWxsYSBpbnRlcmR1bSBtaSBlZ2V0IHBoYXJldHJhIGxvYm9ydGlzLiBFdGlhbSB1bGxhbWNvcnBlciBzY2VsZXJpc3F1ZSB1cm5hIGF0IGdyYXZpZGEuIENyYXMgaW1wZXJkaWV0IG5pYmggYWMgdHJpc3RpcXVlIHRlbXBvci4gTnVsbGEgYWxpcXVhbSB2dWxwdXRhdGUgdGVtcG9yLiBOdWxsYW0gY29tbW9kbyBmZXJtZW50dW0gdHVycGlzIGFjIG1vbGxpcy4gTnVsbGEgc29kYWxlcyBuaXNsIGRvbG9yLCBlZ2V0IGxhb3JlZXQgbGFjdXMgc29sbGljaXR1ZGluIHV0LiBFdGlhbSBlcm9zIG51bmMsIHBoYXJldHJhIG5lYyBhbGlxdWV0IHRyaXN0aXF1ZSwgcGxhY2VyYXQgZWdldCBvZGlvLiBBbGlxdWFtIGVnZXN0YXMgZWdlc3RhcyBtYWduYS4gQ3JhcyB0cmlzdGlxdWUgZXggcXVpcyBhdWd1ZSBzb2RhbGVzIHNvbGxpY2l0dWRpbi4gTnVsbGFtIG1hdXJpcyBlcmF0LCBtb2xsaXMgbm9uIGV4IHV0LCBzb2RhbGVzIHJob25jdXMgZGlhbS4gQ2xhc3MgYXB0ZW50IHRhY2l0aSBzb2Npb3NxdSBhZCBsaXRvcmEgdG9ycXVlbnQgcGVyIGNvbnViaWEgbm9zdHJhLCBwZXIgaW5jZXB0b3MgaGltZW5hZW9zLgoKU2VkIHNpdCBhbWV0IGxlbyB0ZWxsdXMuIE5hbSB0b3J0b3Igc2FwaWVuLCBpbXBlcmRpZXQgc2VkIHBlbGxlbnRlc3F1ZSB2aXRhZSwgcG9zdWVyZSB1dCBzYXBpZW4uIE51bGxhIGZhY2lsaXNpLiBPcmNpIHZhcml1cyBuYXRvcXVlIHBlbmF0aWJ1cyBldCBtYWduaXMgZGlzIHBhcnR1cmllbnQgbW9udGVzLCBuYXNjZXR1ciByaWRpY3VsdXMgbXVzLiBOdWxsYSBlZmZpY2l0dXIgZ3JhdmlkYSBmcmluZ2lsbGEuIFBoYXNlbGx1cyB2aXZlcnJhIHF1YW0gZXQgc2NlbGVyaXNxdWUgY29uZGltZW50dW0uIE5hbSB1dCB0aW5jaWR1bnQgZmVsaXMuIEFsaXF1YW0gZ3JhdmlkYSBzYXBpZW4gYXQgYW50ZSBtb2xsaXMgdmVzdGlidWx1bS4gRXRpYW0gdGluY2lkdW50IHZlbCBtYXNzYSB2aXRhZSBzYWdpdHRpcy4gTmFtIG5vbiBsYWN1cyBuaXNsLiBQcmFlc2VudCBzaXQgYW1ldCBlcm9zIGV1IGxvcmVtIHNvZGFsZXMgZWdlc3Rhcy4gRG9uZWMgZmFjaWxpc2lzLCBzYXBpZW4gaW4gZWdlc3RhcyBlbGVpZmVuZCwgZXN0IG51bGxhIGJsYW5kaXQgcXVhbSwgYXQgcG9ydGEgZXggZXJvcyB2YXJpdXMgdHVycGlzLgoKUHJvaW4gZHVpIG1pLCBwb3J0dGl0b3IgZWxlbWVudHVtIGNvbmRpbWVudHVtIHZpdGFlLCBkYXBpYnVzIHNpdCBhbWV0IG1hdXJpcy4gRG9uZWMgdnVscHV0YXRlIGFjIGxlY3R1cyBhYyBzYWdpdHRpcy4gRG9uZWMgaW4gaW1wZXJkaWV0IHRlbGx1cy4gQ3JhcyBlZ2V0IGRpYW0gaWQgbGlndWxhIG1hdHRpcyBtYWxlc3VhZGEuIFNlZCBpbiBtZXR1cyBhdCBtYXNzYSB2ZXN0aWJ1bHVtIGNvbnNlcXVhdC4gUGhhc2VsbHVzIGlkIG1hZ25hIGlkIG5pYmggdGVtcG9yIGNvbnNlY3RldHVyLiBTdXNwZW5kaXNzZSBldWlzbW9kIGxhY2luaWEgZmVsaXMsIHZhcml1cyBzb2xsaWNpdHVkaW4gbGFjdXMgYWxpcXVldCBpZC4gVXQgbW9sZXN0aWUgY29uc2VjdGV0dXIgbWFnbmEsIGEgcG9ydHRpdG9yIGxpYmVybyBoZW5kcmVyaXQgYS4gQ3VyYWJpdHVyIG1ldHVzIHJpc3VzLCBlbGVpZmVuZCB2ZWwgbmliaCBhdCwgb3JuYXJlIHB1bHZpbmFyIGxlY3R1cy4gUHJvaW4gc2FnaXR0aXMgZWZmaWNpdHVyIHJ1dHJ1bS4gVXQgZmFjaWxpc2lzIGxlY3R1cyBzaXQgYW1ldCBuaWJoIHNlbXBlciBjb252YWxsaXMuIFF1aXNxdWUgaW4gYXVjdG9yIGRpYW0sIGV1IHNlbXBlciBsZW8uIFNlZCB2ZWwgbGliZXJvIGJpYmVuZHVtLCByaG9uY3VzIGF1Z3VlIHNpdCBhbWV0LCBwdWx2aW5hciBtYXNzYS4KClByb2luIGVmZmljaXR1ciwgc2VtIGxvYm9ydGlzIGJpYmVuZHVtIHVsbGFtY29ycGVyLCBleCBlc3QgdWx0cmljaWVzIG9yY2ksIG5lYyBwdWx2aW5hciBhcmN1IGZlbGlzIHRpbmNpZHVudCBsaWJlcm8uIFByb2luIGFjIGF1Y3RvciBxdWFtLiBQZWxsZW50ZXNxdWUgZGljdHVtIHByZXRpdW0gbnVsbGEsIHZlbCBjb25ndWUgdmVsaXQgZXVpc21vZCBhdC4gUGVsbGVudGVzcXVlIGxhY2luaWEgcG9zdWVyZSBlbmltLCBpZCBkaWN0dW0gbGliZXJvIHBoYXJldHJhIGFjLiBWaXZhbXVzIHVsdHJpY2VzIG5vbiBkaWFtIGVnZXQgYWxpcXVhbS4gRG9uZWMgYW50ZSBqdXN0bywgZmV1Z2lhdCBldSBuaXNpIGV0LCBmcmluZ2lsbGEgdmVuZW5hdGlzIG51bGxhLiBNYWVjZW5hcyBtYXhpbXVzIHF1YW0gcXVpcyB2ZWxpdCBhbGlxdWV0IHByZXRpdW0uIFByYWVzZW50IGV1IGlwc3VtIG51bGxhLiBQcm9pbiB2ZWwgdmVzdGlidWx1bSBqdXN0by4gUHJhZXNlbnQgc2VkIHB1cnVzIGVnZXN0YXMsIHBvc3VlcmUgcmlzdXMgYSwgdnVscHV0YXRlIG51bmMuIENyYXMgbG9yZW0gcHVydXMsIHZpdmVycmEgaW4gb3JjaSBlZ2V0LCBzYWdpdHRpcyBjb21tb2RvIHNlbS4gQWxpcXVhbSBwdWx2aW5hciwgbnVsbGEgbmVjIGlhY3VsaXMgZWZmaWNpdHVyLCBvcmNpIGFyY3UgbWFsZXN1YWRhIGVuaW0sIGluIHVsbGFtY29ycGVyIG9kaW8gb3JjaSB2aXRhZSBuaWJoLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzY2luZyBlbGl0LiBTZWQgdml0YWUgcGhhcmV0cmEgbGliZXJvLgoKUGVsbGVudGVzcXVlIG5lYyBiaWJlbmR1bSBxdWFtLCBjb25zZXF1YXQgY29tbW9kbyBxdWFtLiBWZXN0aWJ1bHVtIGZpbmlidXMgZXQgbGVjdHVzIHV0IGFjY3Vtc2FuLiBTZWQgbmVxdWUgbmliaCwgdm9sdXRwYXQgYWMgYmliZW5kdW0gcXVpcywgZmF1Y2lidXMgaWQgcmlzdXMuIE51bGxhbSBwb3N1ZXJlIHRlbGx1cyBub24gc29kYWxlcyB0cmlzdGlxdWUuIFF1aXNxdWUgaW4gZmVybWVudHVtIGxlby4gUXVpc3F1ZSB0ZW1wb3IgZXggaWQgZW5pbSBjb25zZWN0ZXR1ciwgZXUgdmVoaWN1bGEgb3JjaSBtYXhpbXVzLiBWZXN0aWJ1bHVtIGVsZWlmZW5kIG9yY2kgZXQgZXggcG9zdWVyZSwgZWdldCBlZ2VzdGFzIGxvcmVtIHB1bHZpbmFyLgoKSW50ZWdlciBpbiBlcm9zIHZpdGFlIHB1cnVzIGFjY3Vtc2FuIGVnZXN0YXMuIE51bGxhIGVnZXN0YXMgcHVsdmluYXIgZXJvcywgdmVsIHBvcnRhIGZlbGlzIGZpbmlidXMgdXQuIEN1cmFiaXR1ciBjb25kaW1lbnR1bSBlcm9zIGF1Z3VlLCBlZ2V0IGZhY2lsaXNpcyBudW5jIGRpZ25pc3NpbSBldC4gVXQgaWQgZXJvcyBjdXJzdXMsIHZlaGljdWxhIHF1YW0gcXVpcywgcHVsdmluYXIgbmVxdWUuIENyYXMgYmxhbmRpdCBsZW8gYXQgYW50ZSBlbGVtZW50dW0gc29sbGljaXR1ZGluLiBRdWlzcXVlIG1hbGVzdWFkYSB1bGxhbWNvcnBlciBjb21tb2RvLiBNYWVjZW5hcyBxdWlzIGZpbmlidXMgbGVjdHVzLiBEb25lYyByaXN1cyBvcmNpLCBzb2RhbGVzIHF1aXMgaGVuZHJlcml0IHNjZWxlcmlzcXVlLCBmcmluZ2lsbGEgc2l0IGFtZXQgbmlzaS4KClF1aXNxdWUgbWFzc2EgcmlzdXMsIGVmZmljaXR1ciB2ZWwgb2RpbyBhLCBhdWN0b3IgY29uc2VjdGV0dXIgbGVjdHVzLiBOdW5jIGV1IG51bmMgdWx0cmljZXMsIHZpdmVycmEgZXggcHVsdmluYXIsIGZhdWNpYnVzIG5pYmguIEV0aWFtIGZpbmlidXMganVzdG8gaWQgZWdlc3RhcyBjb25kaW1lbnR1bS4gVXQgdGVtcG9yIGZhY2lsaXNpcyBkdWksIHNpdCBhbWV0IHRlbXB1cyBlcm9zIG1vbGxpcyBmZXJtZW50dW0uIFNlZCBzdXNjaXBpdCwgZmVsaXMgdmVsIHVsdHJpY2llcyBhbGlxdWV0LCBkdWkgZWxpdCBzb2xsaWNpdHVkaW4gbG9yZW0sIGEgYmxhbmRpdCBlcmF0IHNhcGllbiBzZWQgZXguIE51bmMgcmlzdXMgZG9sb3IsIGFsaXF1YW0gZXQgZmVsaXMgdmVsLCBsdWN0dXMgYWxpcXVhbSB2ZWxpdC4gQWxpcXVhbSB0cmlzdGlxdWUgbWV0dXMgcGVsbGVudGVzcXVlIGxlY3R1cyBmaW5pYnVzLCBiaWJlbmR1bSB0cmlzdGlxdWUgb3JjaSBsb2JvcnRpcy4gRHVpcyBlcm9zIG1ldHVzLCB2YXJpdXMgbmVjIGRvbG9yIGF0LCBjb21tb2RvIHZ1bHB1dGF0ZSBzZW0uIFByb2luIGlkIGF1Y3RvciBzYXBpZW4uIFNlZCBhYyBpcHN1bSBtYXNzYS4gU3VzcGVuZGlzc2UgYWMgaXBzdW0gbm9uIG51bGxhIGRpY3R1bSBwZWxsZW50ZXNxdWUgYSBxdWlzIG1hZ25hLiBTZWQgdnVscHV0YXRlIGVyYXQgaWQgZmVsaXMgdWx0cmljZXMsIGV1IGZldWdpYXQgdHVycGlzIHZlaGljdWxhLiBDbGFzcyBhcHRlbnQgdGFjaXRpIHNvY2lvc3F1IGFkIGxpdG9yYSB0b3JxdWVudCBwZXIgY29udWJpYSBub3N0cmEsIHBlciBpbmNlcHRvcyBoaW1lbmFlb3MuCgpBZW5lYW4gcXVpcyBvcmNpIGxlY3R1cy4gU2VkIGlwc3VtIGxlbywgYXVjdG9yIHF1aXMgbGlndWxhIHNpdCBhbWV0LCBmaW5pYnVzIGNvbnZhbGxpcyBsZWN0dXMuIEN1cmFiaXR1ciB2ZWwgbGFvcmVldCBsaWJlcm8uIE51bGxhIHNvbGxpY2l0dWRpbiBudWxsYSBpZCBsYWNpbmlhIHJob25jdXMuIE1hZWNlbmFzIG5vbiBibGFuZGl0IGVsaXQuIFV0IGluIGNvbmd1ZSBlbGl0LiBRdWlzcXVlIHBvc3VlcmUsIG5pc2wgaWQgbW9sZXN0aWUgZXVpc21vZCwgcmlzdXMgcXVhbSBjb25zZXF1YXQgbG9yZW0sIGFjIGZhdWNpYnVzIG1hZ25hIHF1YW0gdml0YWUgbmlzbC4gU3VzcGVuZGlzc2UgYWxpcXVldCwgbGFjdXMgbmVjIGxhb3JlZXQgZmF1Y2lidXMsIG51bmMgbmlzaSBzb2xsaWNpdHVkaW4gZGlhbSwgcXVpcyBmYWNpbGlzaXMgbGVvIGFyY3UgZWdldCBuaWJoLiBDcmFzIG9ybmFyZSBlbmltIHB1cnVzLCBldCBhY2N1bXNhbiBtaSB0aW5jaWR1bnQgZXUuCgpOYW0gc2VkIG51bGxhIHZlc3RpYnVsdW0sIGJsYW5kaXQgYW50ZSBzaXQgYW1ldCwgc29kYWxlcyBkaWFtLiBNYWVjZW5hcyBzZW1wZXIgcHVsdmluYXIgZG9sb3IgdmVsIG1heGltdXMuIFV0IGxvcmVtIG5pc2wsIGFsaXF1ZXQgc2l0IGFtZXQgcmhvbmN1cyB1dCwgZ3JhdmlkYSBuZWMgdGVsbHVzLiBNb3JiaSBmaW5pYnVzIHJ1dHJ1bSBhdWd1ZSwgc2l0IGFtZXQgbW9sbGlzIGVzdCB0aW5jaWR1bnQgZXUuIERvbmVjIHZlc3RpYnVsdW0gZmVsaXMgaWQgb2RpbyBwcmV0aXVtLCBldCBzZW1wZXIgZXJhdCBhbGlxdWFtLiBWZXN0aWJ1bHVtIGJsYW5kaXQgdGVtcHVzIHRyaXN0aXF1ZS4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gU2VkIHRlbXB1cyBsb2JvcnRpcyB1cm5hLCBpbiBkYXBpYnVzIGxhY3VzIGJpYmVuZHVtIGV0LiBOdW5jIGFjIG9yY2kgdXJuYS4gRG9uZWMgdmVsIHBsYWNlcmF0IG5pYmgsIG5vbiBmaW5pYnVzIGxhY3VzLgoKU3VzcGVuZGlzc2UgcmhvbmN1cyBwdXJ1cyBsaWJlcm8sIGV0IGludGVyZHVtIG1hc3NhIHRyaXN0aXF1ZSB2aXRhZS4gTWF1cmlzIHNhZ2l0dGlzIHJ1dHJ1bSBkb2xvciBzaXQgYW1ldCBldWlzbW9kLiBEdWlzIGNvbnNlY3RldHVyIGNvbnNlcXVhdCBlc3QuIERvbmVjIG5vbiBxdWFtIGlkIG5pc2kgZmVybWVudHVtIGZyaW5naWxsYS4gTW9yYmkgdXQgZXJvcyB2ZWwgcmlzdXMgc2FnaXR0aXMgbW9sbGlzLiBQcmFlc2VudCBhdCBtYXVyaXMgaWQgZXN0IHBsYWNlcmF0IHNhZ2l0dGlzIGRpZ25pc3NpbSB2ZWwgbGliZXJvLiBVdCBtb2xlc3RpZSBmZXJtZW50dW0gZGFwaWJ1cy4gU2VkIHZlbCBvZGlvIGVsaXQuIEV0aWFtIG1hbGVzdWFkYSBuaXNpIG5pc2wsIGlkIHNhZ2l0dGlzIGVzdCBmaW5pYnVzIHNlZC4KCkNyYXMgb2RpbyBlbGl0LCB0ZW1wb3IgYXQgZWdlc3RhcyBpZCwgaGVuZHJlcml0IHNpdCBhbWV0IGR1aS4gRHVpcyBuaWJoIG1ldHVzLCBhbGlxdWFtIGFjIGxvcmVtIHNpdCBhbWV0LCBhdWN0b3IgcmhvbmN1cyBsb3JlbS4gRnVzY2UgYW50ZSBsZW8sIGx1Y3R1cyBuZWMgbW9sbGlzIG5vbiwgYWNjdW1zYW4gdXQgcmlzdXMuIFBlbGxlbnRlc3F1ZSBsaWJlcm8gYWMu \ No newline at end of file diff --git a/benches/my_benchmark.rs b/benches/my_benchmark.rs index 9c4fbd0..fdb3532 100644 --- a/benches/my_benchmark.rs +++ b/benches/my_benchmark.rs @@ -31,6 +31,7 @@ pub fn criterion_benchmark(c: &mut Criterion) { "πŸ‘¨β€πŸ‘©β€πŸ‘§β€πŸ‘§πŸ‘¨β€πŸ‘©β€πŸ‘§β€πŸ‘§πŸ‘¨β€πŸ‘©β€πŸ‘§β€πŸ‘§πŸ‘¨β€πŸ‘©β€πŸ‘§β€πŸ‘§", "πŸ‘ΈπŸΎ", ]; + let hugetext = include_str!("hugetext.txt"); c.bench_function("only_text_lorem_ipsum.txt", |b| { b.iter(|| parse_only_text(black_box(lorem_ipsum_txt))) @@ -68,6 +69,9 @@ pub fn criterion_benchmark(c: &mut Criterion) { c.bench_function("emoji", |b| { b.iter(|| emojies.iter().map(|s| get_first_emoji(black_box(s)))) }); + c.bench_function("huge text, test performance", |b| { + b.iter(|| parse_desktop_set(black_box(hugetext))) + }); } criterion_group!(benches, criterion_benchmark);