<!-- FORMAT: rich_text -->
<!-- AST_B64: W3siaWQiOiJibG9ja18xNzkyNzYwNzkxMjQ5IiwidHlwZSI6ImhlYWRpbmciLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiJDIFByb2dyYW1taW5nIFBhcnQgMjogSG93IHRvIFNldCBVcCBDIG9uIFdpbmRvd3MgYW5kIFJ1biBZb3VyIEZpcnN0IFByb2dyYW08YnI+In1dLCJjaGlsZHJlbiI6W10sInByb3BzIjp7ImxldmVsIjoyfX0seyJpZCI6ImJsb2NrXzE3OTI3NjA3OTkyODAiLCJ0eXBlIjoicGFyYWdyYXBoIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiPGJyPkhlbGxvIGhlbGxvIGZyb20gR0RSITxicj5IZWxsbyBoZWxsbywgZ3V5cyEgV2VsY29tZSBiYWNrIHRvIGFub3RoZXIgdHV0b3JpYWwuPGJyPkluIFBhcnQgMSwgd2UgbGVhcm5lZCB3aGF0IEMgTGFuZ3VhZ2UgaXMsIHdoeSBpdCBpcyBpbXBvcnRhbnQsIGFuZCB3aHkgd2Ugc2hvdWxkIGxlYXJuIGl0IGV2ZW4gd2hlbiBsYW5ndWFnZXMgbGlrZSBQeXRob24sIEphdmEsIGFuZCBKYXZhU2NyaXB0IGFscmVhZHkgZXhpc3QuPGJyPk5vdyBpdCdzIHRpbWUgdG8gc3RvcCB0YWxraW5nIGFuZCBzdGFydCBkb2luZyBzb21ldGhpbmcuPGJyPlRvZGF5LCB3ZSBhcmUgZ29pbmcgdG8gc2V0IHVwIEMgUHJvZ3JhbW1pbmcgb24gb3VyIFdpbmRvd3MgY29tcHV0ZXIsIGluc3RhbGwgYSBjb21waWxlciwgd3JpdGUgb3VyIGZpcnN0IEMgcHJvZ3JhbSwgYW5kIHJ1biBpdCBzdWNjZXNzZnVsbHkuPGJyPkFuZCBkb24ndCB3b3JyeS4gWW91IGRvbid0IG5lZWQgYSDigrkxIGxha2ggZ2FtaW5nIGxhcHRvcCwgNjQgR0IgUkFNLCBvciBhIE5BU0EgY29tcHV0ZXIgdG8gcnVuIGEgc2ltcGxlIEMgcHJvZ3JhbS48YnI+SWYgeW91ciBsYXB0b3AgY2FuIG9wZW4gYSBicm93c2VyIHdpdGhvdXQgdHVybmluZyBpbnRvIGEgaGVhdGVyLCB3ZSBjYW4gcHJvYmFibHkgZ2V0IHN0YXJ0ZWQuPGJyPkxldCdzIGJlZ2luIVdhdGNoIHRoZSBvcmlnaW5hbCB2aWRlbzxicj5IZXJlIGlzIG15IG9yaWdpbmFsIHNldHVwIHR1dG9yaWFsLiBXYXRjaCBpdCBhbG9uZ3NpZGUgdGhpcyB3cml0dGVuIGd1aWRlLjxicj5UaGUgdmlkZW8gdXNlcyBhbiBvbGRlciBNaW5HVyBpbnN0YWxsYXRpb24gbWV0aG9kLiBCZWxvdywgSSdsbCBleHBsYWluIGEgcmVjb21tZW5kZWQgc2V0dXAgZm9yIG5ldyBXaW5kb3dzIGluc3RhbGxhdGlvbnMgYW5kIGNsYXJpZnkgdGhlIHRlY2huaWNhbCBwb2ludHMgdGhhdCBiZWdpbm5lcnMgb2Z0ZW4gbWlzdW5kZXJzdGFuZC4xLiBXaGF0IGRvIHdlIG5lZWQgdG8gc3RhcnQgQyBQcm9ncmFtbWluZz88YnI+QmVmb3JlIHdyaXRpbmcgY29kZSwgd2UgbmVlZCB0d28gdGhpbmdzLjxicj5GaXJzdCwgYSBjb2RlIGVkaXRvci48YnI+QSBjb2RlIGVkaXRvciBpcyB3aGVyZSB3ZSB3cml0ZSBvdXIgY29kZS4gV2UgY2FuIHVzZSBWaXN1YWwgU3R1ZGlvIENvZGUsIE5vdGVwYWQrKywgb3IgZXZlbiBOb3RlcGFkLjxicj5TZWNvbmQsIGEgY29tcGlsZXIuPGJyPkEgY29tcGlsZXIgdHJhbnNsYXRlcyBvdXIgQyBzb3VyY2UgY29kZSBpbnRvIGEgZm9ybSB0aGF0IHRoZSBjb21wdXRlciBjYW4gZXhlY3V0ZS48YnI+Rm9yIHRoaXMgdHV0b3JpYWwsIHdlJ2xsIHVzZSBHQ0MsIHdoaWNoIHN0YW5kcyBmb3IgR05VIENvbXBpbGVyIENvbGxlY3Rpb24uPGJyPkdDQyBzdXBwb3J0cyBzZXZlcmFsIHByb2dyYW1taW5nIGxhbmd1YWdlcywgaW5jbHVkaW5nIEMgYW5kIEMrKy48YnI+UmVtZW1iZXIsIGluc3RhbGxpbmcgVlMgQ29kZSBkb2VzIG5vdCBhdXRvbWF0aWNhbGx5IG1lYW4geW91IGhhdmUgaW5zdGFsbGVkIGEgQyBjb21waWxlci4gVlMgQ29kZSBpcyB3aGVyZSB5b3Ugd3JpdGUgeW91ciBjb2RlLCB3aGlsZSBHQ0MgY29tcGlsZXMgaXQuPGJyPkluc3RhbGxpbmcgYSBjb2RlIGVkaXRvciBhbmQgZXhwZWN0aW5nIEMgdG8gd29yayBhdXRvbWF0aWNhbGx5IGlzIGxpa2UgYnV5aW5nIGEgbm90ZWJvb2sgYW5kIGV4cGVjdGluZyB5b3VyIGhvbWV3b3JrIHRvIGNvbXBsZXRlIGl0c2VsZi48YnI+SWYgdGhhdCB3b3JrZWQsIGV2ZXJ5IHN0dWRlbnQgd291bGQgaGF2ZSBhIDEwIENHUEEgYW5kIGFic29sdXRlbHkgbm8gaWRlYSBob3cgdGhleSBnb3QgaXQuMi4gSW5zdGFsbGluZyBDIG9uIFdpbmRvd3M8YnI+V2UnbGwgdXNlIE1TWVMyIHdpdGggdGhlIFVDUlQ2NCBHQ0MgdG9vbGNoYWluLiBUaGlzIGlzIGEgcmVjb21tZW5kZWQgYXBwcm9hY2ggZm9yIGEgZnJlc2ggV2luZG93cyBpbnN0YWxsYXRpb24uPGJyPk9mZmljaWFsIHdlYnNpdGVzOjxicj5NU1lTMjogPGEgaHJlZj1cImh0dHBzOi8vd3d3Lm1zeXMyLm9yZy8/dXRtX3NvdXJjZT1jaGF0Z3B0LmNvbVwiPmh0dHBzOi8vd3d3Lm1zeXMyLm9yZy88L2E+PGJyPk1pY3Jvc29mdCdzIFZTIENvZGUgQy9DKysgc2V0dXAgZ3VpZGU6IDxhIGhyZWY9XCJodHRwczovL2NvZGUudmlzdWFsc3R1ZGlvLmNvbS9kb2NzL2NwcC9jb25maWctbWluZ3c/dXRtX3NvdXJjZT1jaGF0Z3B0LmNvbVwiPmh0dHBzOi8vY29kZS52aXN1YWxzdHVkaW8uY29tL2RvY3MvY3BwL2NvbmZpZy1taW5ndzwvYT5TdGVwIDE6IERvd25sb2FkIE1TWVMyPGJyPk9wZW4geW91ciBicm93c2VyIGFuZCB2aXNpdCA8YSBocmVmPVwiaHR0cHM6Ly93d3cubXN5czIub3JnLz91dG1fc291cmNlPWNoYXRncHQuY29tXCI+aHR0cHM6Ly93d3cubXN5czIub3JnLzwvYT4uPGJyPkRvd25sb2FkIHRoZSBvZmZpY2lhbCBpbnN0YWxsZXIgYW5kIGluc3RhbGwgaXQuIFVubGVzcyB5b3UgaGF2ZSBhIHNwZWNpZmljIHJlYXNvbiB0byBjaGFuZ2UgaXQsIGtlZXAgdGhlIGRlZmF1bHQgaW5zdGFsbGF0aW9uIGZvbGRlcjo8YnI+PGNvZGU+QzpcXG1zeXM2NDwvY29kZT48YnI+UGxlYXNlIGRvd25sb2FkIGl0IGZyb20gdGhlIG9mZmljaWFsIHdlYnNpdGUuIERvbid0IGRvd25sb2FkIHJhbmRvbSBmaWxlcyBjYWxsZWQgPGNvZGU+R0NDX0ZJTkFMX1JFQUxfRklYRURfMjAyNi5leGU8L2NvZGU+IGZyb20gc3VzcGljaW91cyB3ZWJzaXRlcy48YnI+V2UncmUgdHJ5aW5nIHRvIGJlY29tZSBwcm9ncmFtbWVycywgbm90IHRoZSBtYWluIGNoYXJhY3RlciBvZiBhIGN5YmVyc2VjdXJpdHkgaW5jaWRlbnQgcmVwb3J0LiJ9XSwiY2hpbGRyZW4iOltdLCJwcm9wcyI6e319LHsiaWQiOiJibG9ja18xNzkyNzYwODI4OTYwIiwidHlwZSI6InBhcmFncmFwaCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IlN0ZXAgMjogT3BlbiB0aGUgTVNZUzIgVUNSVDY0IHRlcm1pbmFsPGJyPk9wZW4geW91ciBXaW5kb3dzIFN0YXJ0IG1lbnUgYW5kIHNlYXJjaCBmb3I6PGJyPjxjb2RlPk1TWVMyIFVDUlQ2NDwvY29kZT48YnI+TGF1bmNoIGl0Ljxicj5GaXJzdCwgdXBkYXRlIHRoZSBNU1lTMiBwYWNrYWdlczo8Y29kZT48L2NvZGU+In1dLCJjaGlsZHJlbiI6W10sInByb3BzIjp7fX0seyJpZCI6ImJsb2NrXzE3OTI3NjA4NDYzMDQiLCJ0eXBlIjoiY29kZV9ibG9jayIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6InBhY21hbiAtU3l1In1dLCJjaGlsZHJlbiI6W10sInByb3BzIjp7Imxhbmd1YWdlIjoic2hlbGwiLCJjb2RlIjoiIn19LHsiaWQiOiJibG9ja18xNzkyNzYwODc5NzQxIiwidHlwZSI6InBhcmFncmFwaCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6Ijxicj5Gb2xsb3cgdGhlIGluc3RydWN0aW9ucyBkaXNwbGF5ZWQgaW4gdGhlIHRlcm1pbmFsLiBJZiBpdCBhc2tzIHlvdSB0byBjbG9zZSB0aGUgdGVybWluYWwgYWZ0ZXIgdXBkYXRpbmcsIGNsb3NlIGl0LCByZW9wZW4gdGhlIFVDUlQ2NCB0ZXJtaW5hbCwgYW5kIGZvbGxvdyBhbnkgcmVtYWluaW5nIHVwZGF0ZSBpbnN0cnVjdGlvbnMuPGJyPk5vdyBpbnN0YWxsIEdDQyBhbmQgdGhlIGRldmVsb3BtZW50IHRvb2xzOjxjb2RlPjwvY29kZT4ifV0sImNoaWxkcmVuIjpbXSwicHJvcHMiOnt9fSx7ImlkIjoiYmxvY2tfMTc5Mjc2MDg5NDgxOSIsInR5cGUiOiJodG1sIiwiY29udGVudCI6W3sidGV4dCI6IjwhLS0gU0FOREJPWF9TVEFSVCAtLT5cbjxpZnJhbWUgd2lkdGg9XCI5OTFcIiBoZWlnaHQ9XCI1NTdcIiBzcmM9XCJodHRwczovL3d3dy55b3V0dWJlLmNvbS9lbWJlZC8ybzJ4WDRxOUl1b1wiIHRpdGxlPVwiSG93IHRvIFNldCBVcCBHQ0MgQyBMYW5ndWFnZSBDb21waWxlciBvbiBXaW5kb3dzIGFuZCBMaW51eCB8IFN0ZXAtYnktU3RlcCBHdWlkZVwiIGZyYW1lYm9yZGVyPVwiMFwiIGFsbG93PVwiYWNjZWxlcm9tZXRlcjsgYXV0b3BsYXk7IGNsaXBib2FyZC13cml0ZTsgZW5jcnlwdGVkLW1lZGlhOyBneXJvc2NvcGU7IHBpY3R1cmUtaW4tcGljdHVyZTsgd2ViLXNoYXJlXCIgcmVmZXJyZXJwb2xpY3k9XCJzdHJpY3Qtb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luXCIgYWxsb3dmdWxsc2NyZWVuPjwvaWZyYW1lPlxuPCEtLSBTQU5EQk9YX1NFUCAtLT5cblxuPCEtLSBTQU5EQk9YX1NFUCAtLT5cblxuPCEtLSBTQU5EQk9YX0VORCAtLT4ifV0sImNoaWxkcmVuIjpbXSwicHJvcHMiOnt9fSx7ImlkIjoiYmxvY2tfMTc5Mjc2MDkxMDkzOCIsInR5cGUiOiJjb2RlX2Jsb2NrIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoicGFjbWFuIC1TIC0tbmVlZGVkIGJhc2UtZGV2ZWwgbWluZ3ctdzY0LXVjcnQteDg2XzY0LXRvb2xjaGFpbiJ9XSwiY2hpbGRyZW4iOltdLCJwcm9wcyI6eyJsYW5ndWFnZSI6InNoZWxsIiwiY29kZSI6IiJ9fSx7ImlkIjoiYmxvY2tfMTc5Mjc2MDk1MDM5MSIsInR5cGUiOiJwYXJhZ3JhcGgiLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiI8YnI+SWYgaXQgYXNrcyB5b3UgdG8gY2hvb3NlIHBhY2thZ2VzIGZyb20gdGhlIHRvb2xjaGFpbiBncm91cCwgcHJlc3MgRW50ZXIgdG8gYWNjZXB0IHRoZSBkZWZhdWx0IHNlbGVjdGlvbi4gV2hlbiBhc2tlZCB0byBwcm9jZWVkLCB0eXBlIDxjb2RlPlk8L2NvZGU+IGFuZCBwcmVzcyBFbnRlci48YnI+V2FpdCBmb3IgdGhlIGluc3RhbGxhdGlvbiB0byBmaW5pc2guPGJyPkl0IG1pZ2h0IHRha2UgYSB3aGlsZSBkZXBlbmRpbmcgb24geW91ciBpbnRlcm5ldCBjb25uZWN0aW9uLiBEb24ndCBjbG9zZSB0aGUgdGVybWluYWwgaGFsZndheSB0aHJvdWdoIGJlY2F1c2UgeW91J3JlIGJvcmVkLiBUaGUgY29tcGlsZXIgaXMgaW5zdGFsbGluZywgbm90IHdyaXRpbmcgYSBzdXNwZW5zZSB0aHJpbGxlci5TdGVwIDM6IEFkZCBHQ0MgdG8gUEFUSDxicj5Ob3cgd2UgbmVlZCB0byBtYWtlIEdDQyBhY2Nlc3NpYmxlIGZyb20gV2luZG93cyBDb21tYW5kIFByb21wdC48YnI+SWYgeW91IHVzZWQgdGhlIGRlZmF1bHQgTVNZUzIgaW5zdGFsbGF0aW9uIGxvY2F0aW9uLCB0aGUgR0NDIGV4ZWN1dGFibGUgZm9sZGVyIHNob3VsZCBiZTo8YnI+PGNvZGU+QzpcXG1zeXM2NFxcdWNydDY0XFxiaW48L2NvZGU+PGJyPkNvcHkgdGhpcyBwYXRoLjxicj5UaGVuIGZvbGxvdyB0aGVzZSBzdGVwczo8YnI+T3BlbiB0aGUgV2luZG93cyBTdGFydCBtZW51Ljxicj5TZWFyY2ggZm9yIEVkaXQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciB5b3VyIGFjY291bnQuPGJyPk9wZW4gdGhlIHNldHRpbmdzLjxicj5GaW5kIHRoZSA8Y29kZT5QYXRoPC9jb2RlPiB2YXJpYWJsZSB1bmRlciB5b3VyIHVzZXIgdmFyaWFibGVzLjxicj5DbGljayBFZGl0Ljxicj5DbGljayBOZXcuPGJyPlBhc3RlIDxjb2RlPkM6XFxtc3lzNjRcXHVjcnQ2NFxcYmluPC9jb2RlPi48YnI+Q2xpY2sgT0sgdG8gc2F2ZSB5b3VyIGNoYW5nZXMuPGJyPkRvIG5vdCBkZWxldGUgeW91ciBleGlzdGluZyBQQVRIIGVudHJpZXMuIFNpbXBseSBhZGQgdGhlIG5ldyBvbmUuPGJyPkFuZCBwbGVhc2UgZG9uJ3QgcmFuZG9tbHkgZGVsZXRlIGV2ZXJ5IGVudHJ5IGJlY2F1c2UgeW91IHNhdyBhIFlvdVR1YmUgY29tbWVudCBzYXlpbmcgaXQgZml4ZXMgZXZlcnl0aGluZy4gV2UgYXJlIGluc3RhbGxpbmcgYSBjb21waWxlciwgbm90IHNwZWVkcnVubmluZyBXaW5kb3dzIHJlcGFpci48YnI+Q2xvc2UgYW55IHByZXZpb3VzbHkgb3BlbmVkIENvbW1hbmQgUHJvbXB0IG9yIHRlcm1pbmFsIHdpbmRvd3MsIHRoZW4gb3BlbiBhIG5ldyBvbmUgc28gaXQgcmVjZWl2ZXMgdGhlIHVwZGF0ZWQgUEFUSC4ifV0sImNoaWxkcmVuIjpbXSwicHJvcHMiOnt9fSx7ImlkIjoiYmxvY2tfMTc5Mjc2MDk2NTg4MyIsInR5cGUiOiJoZWFkaW5nIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiU3RlcCA0OiBDaGVjayB3aGV0aGVyIEdDQyBpcyBpbnN0YWxsZWQ8YnI+In1dLCJjaGlsZHJlbiI6W10sInByb3BzIjp7ImxldmVsIjoyfX0seyJpZCI6ImJsb2NrXzE3OTI3NjA5NzExNjIiLCJ0eXBlIjoicGFyYWdyYXBoIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiPGJyPlByZXNzIDxjb2RlPldpbiArIFI8L2NvZGU+LCB0eXBlIDxjb2RlPmNtZDwvY29kZT4sIGFuZCBwcmVzcyBFbnRlci48YnI+Tm93IHJ1bjoifV0sImNoaWxkcmVuIjpbXSwicHJvcHMiOnt9fSx7ImlkIjoiYmxvY2tfMTc5Mjc2MDk4NDcyNCIsInR5cGUiOiJjb2RlX2Jsb2NrIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiZ2NjIC0tdmVyc2lvbiJ9XSwiY2hpbGRyZW4iOltdLCJwcm9wcyI6eyJsYW5ndWFnZSI6InNoZWxsIiwiY29kZSI6IiJ9fSx7ImlkIjoiYmxvY2tfMTc5Mjc2MTAxNzQ5MSIsInR5cGUiOiJwYXJhZ3JhcGgiLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiI8YnI+SWYgZXZlcnl0aGluZyBpcyBjb25maWd1cmVkIGNvcnJlY3RseSwgeW91IHNob3VsZCBzZWUgR0NDIHZlcnNpb24gaW5mb3JtYXRpb24uPGJyPlRoZSBleGFjdCBvdXRwdXQgd2lsbCBkZXBlbmQgb24gdGhlIHZlcnNpb24geW91IGluc3RhbGxlZC48YnI+SWYgV2luZG93cyBzYXlzOjxicj48Y29kZT4nZ2NjJyBpcyBub3QgcmVjb2duaXplZCBhcyBhbiBpbnRlcm5hbCBvciBleHRlcm5hbCBjb21tYW5kPC9jb2RlPjxicj5pdCBtZWFucyBXaW5kb3dzIGNhbm5vdCBmaW5kIEdDQy4gVGhlIGNvbXBpbGVyIG1pZ2h0IG5vdCBiZSBpbnN0YWxsZWQgcHJvcGVybHksIG9yIGl0cyBmb2xkZXIgbWlnaHQgYmUgbWlzc2luZyBmcm9tIFBBVEguPGJyPkNoZWNrIHlvdXIgaW5zdGFsbGF0aW9uIGFuZCBQQVRIIGVudHJ5IGJlZm9yZSB0cnlpbmcgYWdhaW4uPGJyPlJlbWVtYmVyLCA8Y29kZT5nY2MgLS12ZXJzaW9uPC9jb2RlPiBjb25maXJtcyB0aGF0IFdpbmRvd3MgY2FuIGZpbmQgR0NDLiBXZSdsbCBzdGlsbCBjb21waWxlIGEgcmVhbCBwcm9ncmFtIHRvIHRlc3QgdGhhdCBldmVyeXRoaW5nIHdvcmtzLjMuIFdyaXRlIHlvdXIgZmlyc3QgQyBwcm9ncmFtPGJyPkNvbmdyYXR1bGF0aW9ucyEgV2UndmUgaW5zdGFsbGVkIHRoZSBjb21waWxlci48YnI+Tm93IGxldCdzIHdyaXRlIHNvbWUgYWN0dWFsIGNvZGUuPGJyPkNyZWF0ZSBhIGZvbGRlciBvbiB5b3VyIERlc2t0b3AgY2FsbGVkOjxicj48Y29kZT5DLVByYWN0aWNlPC9jb2RlPjxicj5JbnNpZGUgdGhhdCBmb2xkZXIsIGNyZWF0ZSBhIGZpbGUgY2FsbGVkOjxicj48Y29kZT5tYWluLmM8L2NvZGU+PGJyPk1ha2Ugc3VyZSB0aGUgZmlsZW5hbWUgcmVhbGx5IGVuZHMgd2l0aCA8Y29kZT4uYzwvY29kZT4sIG5vdCA8Y29kZT4udHh0PC9jb2RlPi48YnI+V2luZG93cyBzb21ldGltZXMgaGlkZXMgZmlsZSBleHRlbnNpb25zIGJ5IGRlZmF1bHQsIHNvIHlvdSBjYW4gZW5hYmxlIFZpZXcg4oaSIFNob3cg4oaSIEZpbGUgbmFtZSBleHRlbnNpb25zIGluIEZpbGUgRXhwbG9yZXIgdG8gY2hlY2suPGJyPk5vdyBvcGVuIDxjb2RlPm1haW4uYzwvY29kZT4gaW4gVlMgQ29kZSBvciB5b3VyIHByZWZlcnJlZCB0ZXh0IGVkaXRvciBhbmQgd3JpdGUgdGhpcyBjb2RlOiJ9XSwiY2hpbGRyZW4iOltdLCJwcm9wcyI6e319LHsiaWQiOiJibG9ja18xNzkyNzYxMTIwMjkwIiwidHlwZSI6ImNvZGVfYmxvY2siLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiJcbiNpbmNsdWRlICZsdDtzdGRpby5oJmd0Ozxicj48YnI+PGJyPjxicj5pbnQgbWFpbih2b2lkKTxicj48YnI+ezxicj48YnI+ICAgIHByaW50ZihcIkhlbGxvLCBXb3JsZCFcXG5cIik7PGJyPjxicj4gICAgcmV0dXJuIDA7PGJyPjxicj59XG5cbiJ9XSwiY2hpbGRyZW4iOltdLCJwcm9wcyI6eyJsYW5ndWFnZSI6ImNwcCIsImNvZGUiOiIifX0seyJpZCI6ImJsb2NrXzE3OTI3NjExMzg0NTUiLCJ0eXBlIjoicGFyYWdyYXBoIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiPGJyPkxldCdzIHVuZGVyc3RhbmQgd2hhdCB3ZSB3cm90ZS48Y29kZT4jaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDs8L2NvZGU+PGJyPlRoaXMgaW5jbHVkZXMgdGhlIHN0YW5kYXJkIGlucHV0L291dHB1dCBoZWFkZXIsIHdoaWNoIGRlY2xhcmVzIGZ1bmN0aW9ucyBzdWNoIGFzIDxjb2RlPnByaW50ZigpPC9jb2RlPi48Y29kZT5pbnQgbWFpbih2b2lkKTwvY29kZT48YnI+VGhpcyBkZWZpbmVzIHRoZSBtYWluIGZ1bmN0aW9uLCB3aGVyZSBleGVjdXRpb24gb2YgYSBub3JtYWwgaG9zdGVkIEMgcHJvZ3JhbSBiZWdpbnMuPGNvZGU+cHJpbnRmKFwiSGVsbG8sIFdvcmxkIVxcblwiKTs8L2NvZGU+PGJyPlRoaXMgZGlzcGxheXMgPGNvZGU+SGVsbG8sIFdvcmxkITwvY29kZT4gb24gdGhlIHNjcmVlbi48YnI+VGhlIDxjb2RlPlxcbjwvY29kZT4gbW92ZXMgdGhlIG91dHB1dCB0byBhIG5ldyBsaW5lLjxjb2RlPnJldHVybiAwOzwvY29kZT48YnI+VGhpcyBpbmRpY2F0ZXMgc3VjY2Vzc2Z1bCB0ZXJtaW5hdGlvbiB3aGVuIHRoZSBwcm9ncmFtIHJlYWNoZXMgdGhlIHJldHVybiBzdGF0ZW1lbnQgaW4gYSBub3JtYWwgaG9zdGVkIGVudmlyb25tZW50Ljxicj5JdCBkb2Vzbid0IHByZXZlbnQgZXZlcnkgcG9zc2libGUgZXJyb3IuIEl0IHNpbXBseSByZXR1cm5zIGEgc3RhdHVzIHZhbHVlLldoeSBpcyB0aGVyZSBhIHNlbWljb2xvbj88YnI+SW4gQywgbW9zdCBzdGF0ZW1lbnRzIGVuZCB3aXRoIGEgc2VtaWNvbG9uLjxicj5Gb3JnZXQgb25lIGluIHRoZSB3cm9uZyBwbGFjZSwgYW5kIHRoZSBjb21waWxlciBtaWdodCBjb21wbGFpbi48YnI+VGhlIGNvbXBpbGVyIGlzbid0IGFuZ3J5IHdpdGggeW91LiBJdCBkb2Vzbid0IGV2ZW4ga25vdyB5b3UgZXhpc3QuPGJyPkl0IHNpbXBseSBmb2xsb3dzIHRoZSBydWxlcywgdW5saWtlIHRoYXQgb25lIGZyaWVuZCB3aG8gc3RpbGwgaGFzbid0IHJldHVybmVkIHlvdXIg4oK5NTAwLjQuIENvbXBpbGUgYW5kIHJ1biB5b3VyIGZpcnN0IHByb2dyYW08YnI+Tm93IHdlIG5lZWQgdG8gY29tcGlsZSB0aGUgY29kZS48YnI+T3BlbiB5b3VyIDxjb2RlPkMtUHJhY3RpY2U8L2NvZGU+IGZvbGRlciBpbiBWUyBDb2RlLiBTZWxlY3QgVGVybWluYWwsIHRoZW4gTmV3IFRlcm1pbmFsLjxicj5NYWtlIHN1cmUgdGhlIHRlcm1pbmFsIGlzIGluc2lkZSB0aGUgZm9sZGVyIGNvbnRhaW5pbmcgPGNvZGU+bWFpbi5jPC9jb2RlPi48YnI+WW91IGNhbiBjaGVjayBieSBydW5uaW5nOjxjb2RlPmRpcjwvY29kZT48YnI+WW91IHNob3VsZCBzZWUgPGNvZGU+bWFpbi5jPC9jb2RlPiBpbiB0aGUgb3V0cHV0LlN0ZXAgMTogQ29tcGlsZSB0aGUgcHJvZ3JhbTxicj5SdW46PGNvZGU+Z2NjIG1haW4uYyAtbyBtYWluLmV4ZTwvY29kZT48YnI+SGVyZSdzIHdoYXQgdGhlIGNvbW1hbmQgbWVhbnM6PGJyPjxjb2RlPmdjYzwvY29kZT4gcnVucyB0aGUgY29tcGlsZXIuPGJyPjxjb2RlPm1haW4uYzwvY29kZT4gaXMgeW91ciBzb3VyY2UgZmlsZS48YnI+PGNvZGU+LW8gbWFpbi5leGU8L2NvZGU+IHRlbGxzIEdDQyB0byBuYW1lIHRoZSBvdXRwdXQgcHJvZ3JhbSA8Y29kZT5tYWluLmV4ZTwvY29kZT4uPGJyPklmIGNvbXBpbGF0aW9uIHN1Y2NlZWRzLCBHQ0Mgd2lsbCB1c3VhbGx5IHJldHVybiB0byB0aGUgdGVybWluYWwgd2l0aG91dCBkaXNwbGF5aW5nIGFuIGVycm9yIG1lc3NhZ2UuPGJyPllvdSBzaG91bGQgbm93IGhhdmUgYSBuZXcgZmlsZSBjYWxsZWQgPGNvZGU+bWFpbi5leGU8L2NvZGU+LlN0ZXAgMjogUnVuIHRoZSBwcm9ncmFtPGJyPklmIHlvdSdyZSB1c2luZyBDb21tYW5kIFByb21wdCwgcnVuOjxjb2RlPm1haW4uZXhlPC9jb2RlPjxicj5JZiB5b3UncmUgdXNpbmcgUG93ZXJTaGVsbCwgcnVuOjxjb2RlPi5cXG1haW4uZXhlPC9jb2RlPjxicj5Zb3VyIG91dHB1dCBzaG91bGQgYmU6PGNvZGU+SGVsbG8sIFdvcmxkITwvY29kZT48YnI+QW5kIHRoZXJlIHlvdSBnbyE8YnI+WW91J3ZlIHdyaXR0ZW4sIGNvbXBpbGVkLCBhbmQgZXhlY3V0ZWQgeW91ciBmaXJzdCBDIHByb2dyYW0uPGJyPkNvbmdyYXR1bGF0aW9ucy4gWW91J3ZlIG1hZGUgeW91ciBjb21wdXRlciBkaXNwbGF5IHR3byB3b3JkcyBhbmQgYSBjb21tYS48YnI+TWljcm9zb2Z0IG1pZ2h0IG5vdCBoaXJlIHlvdSBqdXN0IHlldCwgYnV0IGV2ZXJ5Ym9keSBzdGFydHMgc29tZXdoZXJlLjUuIFdoYXQgYWN0dWFsbHkgaGFwcGVucyB3aGVuIHdlIGNvbXBpbGUgQyBjb2RlPzxicj5MZXQncyB1bmRlcnN0YW5kIHNvbWV0aGluZyBpbXBvcnRhbnQuPGJyPldoZW4gd2Ugd3JpdGUgQyBjb2RlLCB3ZSdyZSB3cml0aW5nIHNvdXJjZSBjb2RlIHRoYXQgdGhlIHByb2Nlc3NvciBjYW5ub3QgZXhlY3V0ZSBkaXJlY3RseSBpbiBpdHMgb3JpZ2luYWwgZm9ybS48YnI+VGhlIGNvbXBpbGVyIHRvb2xjaGFpbiBwcm9jZXNzZXMgdGhlIHNvdXJjZSBjb2RlIGFuZCBwcm9kdWNlcyBhIHByb2dyYW0gZm9yIHRoZSB0YXJnZXQgc3lzdGVtLjxicj5BIHR5cGljYWwgR0NDIGJ1aWxkIGludm9sdmVzIHNldmVyYWwgc3RhZ2VzOjxicj5QcmVwcm9jZXNzaW5nPGJyPkNvbXBpbGF0aW9uPGJyPkFzc2VtYmx5PGJyPkxpbmtpbmc8YnI+V2UnbGwgZXhwbG9yZSB0aGVzZSBzdGFnZXMgaW4gbW9yZSBkZXRhaWwgbGF0ZXIuPGJyPkZvciBub3csIHJlbWVtYmVyIHRoaXM6PGJyPkMgc291cmNlIGNvZGUg4oaSIENvbXBpbGVyIHRvb2xjaGFpbiDihpIgRXhlY3V0YWJsZSBwcm9ncmFtIOKGkiBPdXRwdXQ8YnI+Q29tcGlsaW5nIGlzIG5vdCBzaW1wbHkgY2hhbmdpbmcgdGhlIGV4dGVuc2lvbiBmcm9tIDxjb2RlPi5jPC9jb2RlPiB0byA8Y29kZT4uZXhlPC9jb2RlPi48YnI+UmVuYW1pbmcgYSBmaWxlIGRvZXNuJ3QgdHJhbnNmb3JtIGl0cyBjb250ZW50cy4gT3RoZXJ3aXNlLCB3ZSBjb3VsZCByZW5hbWUgb3VyIGV4YW0gcGFwZXIgdG8gPGNvZGU+ZnVsbF9tYXJrcy5wZGY8L2NvZGU+IGFuZCBiZWNvbWUgdG9wcGVycyBvdmVybmlnaHQuPGJyPlNhZGx5LCB0aGUgZWR1Y2F0aW9uIHN5c3RlbSBoYXNuJ3QgaW1wbGVtZW50ZWQgdGhhdCBmZWF0dXJlLjYuIENvbW1vbiBXaW5kb3dzIHByb2JsZW1zIGFuZCB0aGVpciBzb2x1dGlvbnNQcm9ibGVtIDE6IEdDQyBpcyBub3QgcmVjb2duaXNlZDxicj5DaGVjayB0aGF0IEdDQyBpcyBpbnN0YWxsZWQgYW5kIHRoYXQgdGhlIGNvcnJlY3QgZm9sZGVyIGlzIGluIFBBVEguPGJyPkZvciB0aGUgZGVmYXVsdCBNU1lTMiBVQ1JUNjQgaW5zdGFsbGF0aW9uLCB0aGF0IGZvbGRlciBpczo8YnI+PGNvZGU+QzpcXG1zeXM2NFxcdWNydDY0XFxiaW48L2NvZGU+PGJyPk9wZW4gYSBuZXcgdGVybWluYWwgYWZ0ZXIgY2hhbmdpbmcgUEFUSC4ifV0sImNoaWxkcmVuIjpbXSwicHJvcHMiOnt9fSx7ImlkIjoiYmxvY2tfMTc5Mjc2MTE3MTk1NSIsInR5cGUiOiJoZWFkaW5nIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiUHJvYmxlbSAyOiBUaGUgY29tcGlsZXIgc2hvd3MgZXJyb3JzPGJyPiJ9XSwiY2hpbGRyZW4iOltdLCJwcm9wcyI6eyJsZXZlbCI6Mn19LHsiaWQiOiJibG9ja18xNzkyNzYxMTg1NTgwIiwidHlwZSI6InBhcmFncmFwaCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6Ijxicj5DaGVjayB5b3VyIGNvZGUgZm9yIG1pc3Npbmcgc2VtaWNvbG9ucywgbWlzc3BlbGxlZCBmdW5jdGlvbiBuYW1lcywgdW5tYXRjaGVkIGJyYWNlcywgb3IgbWlzc2luZyBxdW90YXRpb24gbWFya3MuPGJyPkZvciBleGFtcGxlLCB0aGlzIGNvZGUgaXMgbWlzc2luZyBhIHNlbWljb2xvbjo8Y29kZT5wcmludGYoXCJIZWxsbywgV29ybGQhXFxuXCIpPC9jb2RlPjxicj5UaGUgY29ycmVjdCB2ZXJzaW9uIGlzOjxjb2RlPnByaW50ZihcIkhlbGxvLCBXb3JsZCFcXG5cIik7PC9jb2RlPjxicj5SZWFkIHRoZSBjb21waWxlcidzIGVycm9yIG1lc3NhZ2UgY2FyZWZ1bGx5LiBJdCBvZnRlbiBnaXZlcyB5b3UgYSB1c2VmdWwgc3RhcnRpbmcgcG9pbnQuUHJvYmxlbSAzOiBUaGUgcHJvZ3JhbSBjb21waWxlcyBidXQgZG9lc24ndCBydW48YnI+Q2hlY2sgd2hldGhlciA8Y29kZT5tYWluLmV4ZTwvY29kZT4gZXhpc3RzIGJ5IHJ1bm5pbmc6PGNvZGU+ZGlyPC9jb2RlPjxicj5UaGVuIHJ1biB0aGUgY29ycmVjdCBmaWxlbmFtZS48YnI+SW4gQ29tbWFuZCBQcm9tcHQ6PGNvZGU+bWFpbi5leGU8L2NvZGU+PGJyPkluIFBvd2VyU2hlbGw6PGNvZGU+LlxcbWFpbi5leGU8L2NvZGU+PGJyPkFsc28gbWFrZSBzdXJlIHlvdSdyZSBydW5uaW5nIHRoZSBleGVjdXRhYmxlIHlvdSBqdXN0IGNvbXBpbGVkLCBub3QgYW4gb2xkZXIgdmVyc2lvbiBsZWZ0IG92ZXIgZnJvbSBhIHByZXZpb3VzIGF0dGVtcHQuUHJvYmxlbSA0OiBOb3RoaW5nIGFwcGVhcnMgb24gdGhlIHNjcmVlbjxicj5DaGVjayB3aGV0aGVyIHlvdXIgcHJvZ3JhbSBhY3R1YWxseSBjb250YWlucyBhIDxjb2RlPnByaW50ZigpPC9jb2RlPiBzdGF0ZW1lbnQgYW5kIHdoZXRoZXIgeW91IGFyZSBydW5uaW5nIHRoZSBjb3JyZWN0IGV4ZWN1dGFibGUuPGJyPklmIGNvbXBpbGF0aW9uIGZhaWxzLCBhbiBvbGRlciBleGVjdXRhYmxlIG1pZ2h0IHN0aWxsIGV4aXN0LiBUaGF0IGNhbiBtYWtlIGl0IGxvb2sgYXMgdGhvdWdoIHlvdXIgbGF0ZXN0IGNvZGUgd29ya2VkIHdoZW4geW91J3JlIGFjdHVhbGx5IHJ1bm5pbmcgeWVzdGVyZGF5J3MgdmVyc2lvbi48YnI+QWx3YXlzIGNoZWNrIGZvciBjb21waWxlciBlcnJvcnMgYmVmb3JlIHJ1bm5pbmcgdGhlIHByb2dyYW0uNy4gQSBxdWljayBsb29rIGF0IExpbnV4PGJyPk91ciBtYWluIGZvY3VzIGlzIFdpbmRvd3MsIGJ1dCBoZXJlJ3MgdGhlIGJhc2ljIHNldHVwIGZvciBMaW51eCB1c2Vycy48YnI+T24gVWJ1bnR1LCBEZWJpYW4sIGFuZCBLYWxpIExpbnV4LCB5b3UgY2FuIGdlbmVyYWxseSBpbnN0YWxsIEdDQyB1c2luZzo8Y29kZT5zdWRvIGFwdCB1cGRhdGVcbnN1ZG8gYXB0IGluc3RhbGwgYnVpbGQtZXNzZW50aWFsPC9jb2RlPjxicj5UaGVuIGNoZWNrOjxjb2RlPmdjYyAtLXZlcnNpb248L2NvZGU+PGJyPkNyZWF0ZSBhIGZpbGUgY2FsbGVkIDxjb2RlPm1haW4uYzwvY29kZT4gY29udGFpbmluZzo8Y29kZT4jaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDtcblxuaW50IG1haW4odm9pZClcbntcbiAgICBwcmludGYoXCJIZWxsbyBmcm9tIEdEUiFcXG5cIik7XG4gICAgcmV0dXJuIDA7XG59PC9jb2RlPjxicj5Db21waWxlIGl0Ojxjb2RlPmdjYyBtYWluLmMgLW8gaGVsbG88L2NvZGU+PGJyPlJ1biBpdDo8Y29kZT4uL2hlbGxvPC9jb2RlPjxicj5UaGUgb3V0cHV0IHNob3VsZCBiZTo8Y29kZT5IZWxsbyBmcm9tIEdEUiE8L2NvZGU+PGJyPk5vdGljZSB0aGF0IHdlIHVzZWQgPGNvZGU+aGVsbG88L2NvZGU+IHdpdGhvdXQgYW4gZXh0ZW5zaW9uLjxicj5MaW51eCBleGVjdXRhYmxlcyBkbyBub3QgZ2VuZXJhbGx5IHJlcXVpcmUgYSA8Y29kZT4uZXhlPC9jb2RlPiBvciA8Y29kZT4ub3V0PC9jb2RlPiBleHRlbnNpb24uIEdDQyBtYXkgY3JlYXRlIGEgZmlsZSBuYW1lZCA8Y29kZT5hLm91dDwvY29kZT4gd2hlbiB5b3UgZG9uJ3Qgc3BlY2lmeSBhbiBvdXRwdXQgZmlsZW5hbWUsIGJ1dCB5b3UgY2FuIGNob29zZSB5b3VyIG93biBuYW1lIHVzaW5nIDxjb2RlPi1vPC9jb2RlPi48YnI+V2luZG93cyBhbmQgTGludXggYWxzbyB1c2UgZGlmZmVyZW50IGV4ZWN1dGFibGUgZm9ybWF0cyBhbmQgc3lzdGVtIGludGVyZmFjZXMuIEEgbmF0aXZlIGV4ZWN1dGFibGUgYnVpbHQgZm9yIG9uZSBvcGVyYXRpbmcgc3lzdGVtIGRvZXMgbm90IGF1dG9tYXRpY2FsbHkgcnVuIGFzIGEgbmF0aXZlIHByb2dyYW0gb24gdGhlIG90aGVyLjguIEltcG9ydGFudCBjb3JyZWN0aW9ucyB0byBteSBvcmlnaW5hbCB2aWRlbzxicj5TaW5jZSB0aGlzIHR1dG9yaWFsIHVwZGF0ZXMgbXkgb3JpZ2luYWwgc2V0dXAgdmlkZW8sIGhlcmUgYXJlIHRoZSBpbXBvcnRhbnQgY2xhcmlmaWNhdGlvbnMuPGJyPjEuIFRoZSBXaW5kb3dzIGluc3RhbGxhdGlvbiBtZXRob2QgaXMgb2xkZXIuIFRoZSBvcmlnaW5hbCB2aWRlbyB1c2VzIE1pbkdXIEluc3RhbGxhdGlvbiBNYW5hZ2VyLiBGb3IgYSBmcmVzaCBpbnN0YWxsYXRpb24sIHRoaXMgZ3VpZGUgcmVjb21tZW5kcyBNU1lTMiB3aXRoIFVDUlQ2NCBHQ0MuPGJyPjIuIEFkZGluZyBHQ0MgdG8gUEFUSCBkb2VzIG5vdCBpbnN0YWxsIEdDQy4gWW91IG11c3QgaW5zdGFsbCB0aGUgY29tcGlsZXIgZmlyc3QuIFBBVEggaGVscHMgV2luZG93cyBsb2NhdGUgaXQuPGJyPjMuIDxjb2RlPmdjYyAtLXZlcnNpb248L2NvZGU+IGlzIG9ubHkgdGhlIGZpcnN0IGNoZWNrLiBDb21waWxpbmcgYW5kIHJ1bm5pbmcgYSByZWFsIHByb2dyYW0gaXMgYSBiZXR0ZXIgdGVzdCBvZiB0aGUgY29tcGxldGUgc2V0dXAuPGJyPjQuIDxjb2RlPnJldHVybiAwOzwvY29kZT4gZG9lcyBub3QgcHJldmVudCBhbGwgZXJyb3JzLiBJdCBub3JtYWxseSBpbmRpY2F0ZXMgc3VjY2Vzc2Z1bCB0ZXJtaW5hdGlvbiB3aGVuIHJlYWNoZWQuIEl0IGRvZXMgbm90IGd1YXJhbnRlZSB0aGF0IHlvdXIgcHJvZ3JhbSBpcyBmcmVlIGZyb20gYnVncy48YnI+NS4gTGludXggZG9lcyBub3QgcmVxdWlyZSA8Y29kZT4ub3V0PC9jb2RlPiBmb3IgZXhlY3V0YWJsZXMuIFRoZSBmaWxlbmFtZSBleHRlbnNpb24gaXMgbm90IHdoYXQgbWFrZXMgYSBmaWxlIGV4ZWN1dGFibGUuPGJyPjYuIENvbXBpbGluZyBpcyBub3QgcmVuYW1pbmcuIFRoZSBjb21waWxlciB0b29sY2hhaW4gcHJvY2Vzc2VzIHlvdXIgc291cmNlIGNvZGUgYW5kIGJ1aWxkcyBhIHByb2dyYW0gZm9yIHRoZSB0YXJnZXQgc3lzdGVtLjxicj5UaGVzZSBjb3JyZWN0aW9ucyB3aWxsIGhlbHAgeW91IGZvbGxvdyB0aGUgb3JpZ2luYWwgdmlkZW8gd2hpbGUgbGVhcm5pbmcgdGhlIHByb2Nlc3MgYWNjdXJhdGVseS45LiBZb3VyIGZpcnN0IHByb2dyYW1taW5nIGNoYWxsZW5nZTxicj5Ob3cgbGV0J3Mgc2VlIHdoZXRoZXIgeW91IGNhbiB3cml0ZSBhIHNtYWxsIHByb2dyYW0geW91cnNlbGYuPGJyPllvdXIgdGFzayBpcyB0byBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgb3V0cHV0Ojxjb2RlPkhlbGxvLCBXb3JsZCFcbkhlbGxvIGZyb20gR0RSIVxuSSBhbSBsZWFybmluZyBDIFByb2dyYW1taW5nLlxuTXkgam91cm5leSBzdGFydHMgdG9kYXkhPC9jb2RlPjxicj5Ucnkgd3JpdGluZyB0aGUgcHJvZ3JhbSBiZWZvcmUgbG9va2luZyBhdCB0aGUgc29sdXRpb24uPGJyPkhlcmUncyBvbmUgcG9zc2libGUgYW5zd2VyOjxjb2RlPiNpbmNsdWRlICZsdDtzdGRpby5oJmd0O1xuXG5pbnQgbWFpbih2b2lkKVxue1xuICAgIHByaW50ZihcIkhlbGxvLCBXb3JsZCFcXG5cIik7XG4gICAgcHJpbnRmKFwiSGVsbG8gZnJvbSBHRFIhXFxuXCIpO1xuICAgIHByaW50ZihcIkkgYW0gbGVhcm5pbmcgQyBQcm9ncmFtbWluZy5cXG5cIik7XG4gICAgcHJpbnRmKFwiTXkgam91cm5leSBzdGFydHMgdG9kYXkhXFxuXCIpO1xuXG4gICAgcmV0dXJuIDA7XG59PC9jb2RlPjxicj5Db21waWxlIGFuZCBydW4gaXQgdXNpbmcgdGhlIHN0ZXBzIHlvdSBsZWFybmVkIGFib3ZlLjxicj5JZiBpdCB3b3JrcywgZXhjZWxsZW50Ljxicj5JZiBpdCBkb2Vzbid0LCBkb24ndCBpbW1lZGlhdGVseSBjb3B5IHNvbWVvbmUgZWxzZSdzIGNvZGUuIFJlYWQgdGhlIGVycm9yLCBjaGVjayB5b3VyIHdvcmssIGFuZCB0cnkgdG8gdW5kZXJzdGFuZCB3aGF0IHdlbnQgd3JvbmcuPGJyPkRlYnVnZ2luZyBpcyBwYXJ0IG9mIHByb2dyYW1taW5nLiBJdCBkb2Vzbid0IG1lYW4geW91J3JlIGJhZCBhdCBpdC4ifV0sImNoaWxkcmVuIjpbXSwicHJvcHMiOnt9fV0= -->
## C Programming Part 2: How to Set Up C on Windows and Run Your First Program<br>
<br>Hello hello from GDR!<br>Hello hello, guys! Welcome back to another tutorial.<br>In Part 1, we learned what C Language is, why it is important, and why we should learn it even when languages like Python, Java, and JavaScript already exist.<br>Now it's time to stop talking and start doing something.<br>Today, we are going to set up C Programming on our Windows computer, install a compiler, write our first C program, and run it successfully.<br>And don't worry. You don't need a ₹1 lakh gaming laptop, 64 GB RAM, or a NASA computer to run a simple C program.<br>If your laptop can open a browser without turning into a heater, we can probably get started.<br>Let's begin!Watch the original video<br>Here is my original setup tutorial. Watch it alongside this written guide.<br>The video uses an older MinGW installation method. Below, I'll explain a recommended setup for new Windows installations and clarify the technical points that beginners often misunderstand.1. What do we need to start C Programming?<br>Before writing code, we need two things.<br>First, a code editor.<br>A code editor is where we write our code. We can use Visual Studio Code, Notepad++, or even Notepad.<br>Second, a compiler.<br>A compiler translates our C source code into a form that the computer can execute.<br>For this tutorial, we'll use GCC, which stands for GNU Compiler Collection.<br>GCC supports several programming languages, including C and C++.<br>Remember, installing VS Code does not automatically mean you have installed a C compiler. VS Code is where you write your code, while GCC compiles it.<br>Installing a code editor and expecting C to work automatically is like buying a notebook and expecting your homework to complete itself.<br>If that worked, every student would have a 10 CGPA and absolutely no idea how they got it.2. Installing C on Windows<br>We'll use MSYS2 with the UCRT64 GCC toolchain. This is a recommended approach for a fresh Windows installation.<br>Official websites:<br>MSYS2: <a href="https://www.msys2.org/?utm_source=chatgpt.com">https://www.msys2.org/</a><br>Microsoft's VS Code C/C++ setup guide: <a href="https://code.visualstudio.com/docs/cpp/config-mingw?utm_source=chatgpt.com">https://code.visualstudio.com/docs/cpp/config-mingw</a>Step 1: Download MSYS2<br>Open your browser and visit <a href="https://www.msys2.org/?utm_source=chatgpt.com">https://www.msys2.org/</a>.<br>Download the official installer and install it. Unless you have a specific reason to change it, keep the default installation folder:<br><code>C:\msys64</code><br>Please download it from the official website. Don't download random files called <code>GCC_FINAL_REAL_FIXED_2026.exe</code> from suspicious websites.<br>We're trying to become programmers, not the main character of a cybersecurity incident report.
Step 2: Open the MSYS2 UCRT64 terminal<br>Open your Windows Start menu and search for:<br><code>MSYS2 UCRT64</code><br>Launch it.<br>First, update the MSYS2 packages:<code></code>
```shell
pacman -Syu
```
<br>Follow the instructions displayed in the terminal. If it asks you to close the terminal after updating, close it, reopen the UCRT64 terminal, and follow any remaining update instructions.<br>Now install GCC and the development tools:<code></code>
[html:JTNDIS0tJTIwU0FOREJPWF9TVEFSVCUyMC0tJTNFJTBBJTNDaWZyYW1lJTIwd2lkdGglM0QlMjI5OTElMjIlMjBoZWlnaHQlM0QlMjI1NTclMjIlMjBzcmMlM0QlMjJodHRwcyUzQSUyRiUyRnd3dy55b3V0dWJlLmNvbSUyRmVtYmVkJTJGMm8yeFg0cTlJdW8lMjIlMjB0aXRsZSUzRCUyMkhvdyUyMHRvJTIwU2V0JTIwVXAlMjBHQ0MlMjBDJTIwTGFuZ3VhZ2UlMjBDb21waWxlciUyMG9uJTIwV2luZG93cyUyMGFuZCUyMExpbnV4JTIwJTdDJTIwU3RlcC1ieS1TdGVwJTIwR3VpZGUlMjIlMjBmcmFtZWJvcmRlciUzRCUyMjAlMjIlMjBhbGxvdyUzRCUyMmFjY2VsZXJvbWV0ZXIlM0IlMjBhdXRvcGxheSUzQiUyMGNsaXBib2FyZC13cml0ZSUzQiUyMGVuY3J5cHRlZC1tZWRpYSUzQiUyMGd5cm9zY29wZSUzQiUyMHBpY3R1cmUtaW4tcGljdHVyZSUzQiUyMHdlYi1zaGFyZSUyMiUyMHJlZmVycmVycG9saWN5JTNEJTIyc3RyaWN0LW9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbiUyMiUyMGFsbG93ZnVsbHNjcmVlbiUzRSUzQyUyRmlmcmFtZSUzRSUwQSUzQyEtLSUyMFNBTkRCT1hfU0VQJTIwLS0lM0UlMEElMEElM0MhLS0lMjBTQU5EQk9YX1NFUCUyMC0tJTNFJTBBJTBBJTNDIS0tJTIwU0FOREJPWF9FTkQlMjAtLSUzRQ==]
```shell
pacman -S --needed base-devel mingw-w64-ucrt-x86_64-toolchain
```
<br>If it asks you to choose packages from the toolchain group, press Enter to accept the default selection. When asked to proceed, type <code>Y</code> and press Enter.<br>Wait for the installation to finish.<br>It might take a while depending on your internet connection. Don't close the terminal halfway through because you're bored. The compiler is installing, not writing a suspense thriller.Step 3: Add GCC to PATH<br>Now we need to make GCC accessible from Windows Command Prompt.<br>If you used the default MSYS2 installation location, the GCC executable folder should be:<br><code>C:\msys64\ucrt64\bin</code><br>Copy this path.<br>Then follow these steps:<br>Open the Windows Start menu.<br>Search for Edit environment variables for your account.<br>Open the settings.<br>Find the <code>Path</code> variable under your user variables.<br>Click Edit.<br>Click New.<br>Paste <code>C:\msys64\ucrt64\bin</code>.<br>Click OK to save your changes.<br>Do not delete your existing PATH entries. Simply add the new one.<br>And please don't randomly delete every entry because you saw a YouTube comment saying it fixes everything. We are installing a compiler, not speedrunning Windows repair.<br>Close any previously opened Command Prompt or terminal windows, then open a new one so it receives the updated PATH.
Step 4: Check whether GCC is installed<br>
<br>Press <code>Win + R</code>, type <code>cmd</code>, and press Enter.<br>Now run:
```shell
gcc --version
```
<br>If everything is configured correctly, you should see GCC version information.<br>The exact output will depend on the version you installed.<br>If Windows says:<br><code>'gcc' is not recognized as an internal or external command</code><br>it means Windows cannot find GCC. The compiler might not be installed properly, or its folder might be missing from PATH.<br>Check your installation and PATH entry before trying again.<br>Remember, <code>gcc --version</code> confirms that Windows can find GCC. We'll still compile a real program to test that everything works.3. Write your first C program<br>Congratulations! We've installed the compiler.<br>Now let's write some actual code.<br>Create a folder on your Desktop called:<br><code>C-Practice</code><br>Inside that folder, create a file called:<br><code>main.c</code><br>Make sure the filename really ends with <code>.c</code>, not <code>.txt</code>.<br>Windows sometimes hides file extensions by default, so you can enable View → Show → File name extensions in File Explorer to check.<br>Now open <code>main.c</code> in VS Code or your preferred text editor and write this code:
```cpp
#include <stdio.h><br><br><br><br>int main(void)<br><br>{<br><br> printf("Hello, World!\n");<br><br> return 0;<br><br>}
```
<br>Let's understand what we wrote.<code>#include <stdio.h></code><br>This includes the standard input/output header, which declares functions such as <code>printf()</code>.<code>int main(void)</code><br>This defines the main function, where execution of a normal hosted C program begins.<code>printf("Hello, World!\n");</code><br>This displays <code>Hello, World!</code> on the screen.<br>The <code>\n</code> moves the output to a new line.<code>return 0;</code><br>This indicates successful termination when the program reaches the return statement in a normal hosted environment.<br>It doesn't prevent every possible error. It simply returns a status value.Why is there a semicolon?<br>In C, most statements end with a semicolon.<br>Forget one in the wrong place, and the compiler might complain.<br>The compiler isn't angry with you. It doesn't even know you exist.<br>It simply follows the rules, unlike that one friend who still hasn't returned your ₹500.4. Compile and run your first program<br>Now we need to compile the code.<br>Open your <code>C-Practice</code> folder in VS Code. Select Terminal, then New Terminal.<br>Make sure the terminal is inside the folder containing <code>main.c</code>.<br>You can check by running:<code>dir</code><br>You should see <code>main.c</code> in the output.Step 1: Compile the program<br>Run:<code>gcc main.c -o main.exe</code><br>Here's what the command means:<br><code>gcc</code> runs the compiler.<br><code>main.c</code> is your source file.<br><code>-o main.exe</code> tells GCC to name the output program <code>main.exe</code>.<br>If compilation succeeds, GCC will usually return to the terminal without displaying an error message.<br>You should now have a new file called <code>main.exe</code>.Step 2: Run the program<br>If you're using Command Prompt, run:<code>main.exe</code><br>If you're using PowerShell, run:<code>.\main.exe</code><br>Your output should be:<code>Hello, World!</code><br>And there you go!<br>You've written, compiled, and executed your first C program.<br>Congratulations. You've made your computer display two words and a comma.<br>Microsoft might not hire you just yet, but everybody starts somewhere.5. What actually happens when we compile C code?<br>Let's understand something important.<br>When we write C code, we're writing source code that the processor cannot execute directly in its original form.<br>The compiler toolchain processes the source code and produces a program for the target system.<br>A typical GCC build involves several stages:<br>Preprocessing<br>Compilation<br>Assembly<br>Linking<br>We'll explore these stages in more detail later.<br>For now, remember this:<br>C source code → Compiler toolchain → Executable program → Output<br>Compiling is not simply changing the extension from <code>.c</code> to <code>.exe</code>.<br>Renaming a file doesn't transform its contents. Otherwise, we could rename our exam paper to <code>full_marks.pdf</code> and become toppers overnight.<br>Sadly, the education system hasn't implemented that feature.6. Common Windows problems and their solutionsProblem 1: GCC is not recognised<br>Check that GCC is installed and that the correct folder is in PATH.<br>For the default MSYS2 UCRT64 installation, that folder is:<br><code>C:\msys64\ucrt64\bin</code><br>Open a new terminal after changing PATH.
Problem 2: The compiler shows errors<br>
<br>Check your code for missing semicolons, misspelled function names, unmatched braces, or missing quotation marks.<br>For example, this code is missing a semicolon:<code>printf("Hello, World!\n")</code><br>The correct version is:<code>printf("Hello, World!\n");</code><br>Read the compiler's error message carefully. It often gives you a useful starting point.Problem 3: The program compiles but doesn't run<br>Check whether <code>main.exe</code> exists by running:<code>dir</code><br>Then run the correct filename.<br>In Command Prompt:<code>main.exe</code><br>In PowerShell:<code>.\main.exe</code><br>Also make sure you're running the executable you just compiled, not an older version left over from a previous attempt.Problem 4: Nothing appears on the screen<br>Check whether your program actually contains a <code>printf()</code> statement and whether you are running the correct executable.<br>If compilation fails, an older executable might still exist. That can make it look as though your latest code worked when you're actually running yesterday's version.<br>Always check for compiler errors before running the program.7. A quick look at Linux<br>Our main focus is Windows, but here's the basic setup for Linux users.<br>On Ubuntu, Debian, and Kali Linux, you can generally install GCC using:<code>sudo apt update
sudo apt install build-essential</code><br>Then check:<code>gcc --version</code><br>Create a file called <code>main.c</code> containing:<code>#include <stdio.h>
int main(void)
{
printf("Hello from GDR!\n");
return 0;
}</code><br>Compile it:<code>gcc main.c -o hello</code><br>Run it:<code>./hello</code><br>The output should be:<code>Hello from GDR!</code><br>Notice that we used <code>hello</code> without an extension.<br>Linux executables do not generally require a <code>.exe</code> or <code>.out</code> extension. GCC may create a file named <code>a.out</code> when you don't specify an output filename, but you can choose your own name using <code>-o</code>.<br>Windows and Linux also use different executable formats and system interfaces. A native executable built for one operating system does not automatically run as a native program on the other.8. Important corrections to my original video<br>Since this tutorial updates my original setup video, here are the important clarifications.<br>1. The Windows installation method is older. The original video uses MinGW Installation Manager. For a fresh installation, this guide recommends MSYS2 with UCRT64 GCC.<br>2. Adding GCC to PATH does not install GCC. You must install the compiler first. PATH helps Windows locate it.<br>3. <code>gcc --version</code> is only the first check. Compiling and running a real program is a better test of the complete setup.<br>4. <code>return 0;</code> does not prevent all errors. It normally indicates successful termination when reached. It does not guarantee that your program is free from bugs.<br>5. Linux does not require <code>.out</code> for executables. The filename extension is not what makes a file executable.<br>6. Compiling is not renaming. The compiler toolchain processes your source code and builds a program for the target system.<br>These corrections will help you follow the original video while learning the process accurately.9. Your first programming challenge<br>Now let's see whether you can write a small program yourself.<br>Your task is to display the following output:<code>Hello, World!
Hello from GDR!
I am learning C Programming.
My journey starts today!</code><br>Try writing the program before looking at the solution.<br>Here's one possible answer:<code>#include <stdio.h>
int main(void)
{
printf("Hello, World!\n");
printf("Hello from GDR!\n");
printf("I am learning C Programming.\n");
printf("My journey starts today!\n");
return 0;
}</code><br>Compile and run it using the steps you learned above.<br>If it works, excellent.<br>If it doesn't, don't immediately copy someone else's code. Read the error, check your work, and try to understand what went wrong.<br>Debugging is part of programming. It doesn't mean you're bad at it.