VGhlIGZvbGxvd2luZyBwZW9wbGUgaGVyZWJ5IGdyYW50IHBlcm1pc3Npb24gdG8gcmVwbGFjZSBhbGwgZXhpc3RpbmcKbGljZW5zZXMgb24gdGhlaXIgY29udHJpYnV0aW9ucyB0byBCb29zdCB3aXRoIHRoZSBCb29zdCBTb2Z0d2FyZQpMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKGJvb3N0aW5zcGVjdDpub2xpY2Vuc2UgYm9vc3RpbnNwZWN0Om5vY29weXJpZ2h0KQoKQWxla3NleSBHdXJ0b3ZveSAoYWd1cnRvdm95QG1ldGEtY29tbS5jb20pCkFuZHJlaSBBbGV4YW5kcmVzY3UgKGFuZHJld2FsZXggLSBhdCAtIGhvdG1haWwuY29tKSAoU2VlIEJvb3N0IGxpc3QgbWVzc2FnZSBvZiBBdWd1c3QgMTIsIDIwMDQgMTE6MDY6NTggQU0gRVNUKSAgIApBbmRyZXcgTHVtc2RhaW5lICgpCkFudGhvbnkgV2lsbGlhbXMgKGFudGhvbnkgLWF0LSBqdXN0c29mdHdhcmVzb2x1dGlvbnMuY28udWspCkJlbWFuIERhd2VzIChiZGF3ZXNAYWNtLm9yZykKQnJhZCBLaW5nIChicmFkLmtpbmcgLWF0LSBraXR3YXJlLmNvbSkgKFNlZSBCb29zdCBsaXN0IG1lc3NhZ2Ugb2YgV2VkLCAyMSBKdWwgMjAwNCAxMToxNTo0NiAtMDQwMCkKQnJpYW4gT3NtYW4gKG9zbWFuIC1hdC0gdnZpc2lvbnMuY29tKSAoU2VlIENWUyBsb2cpCkJydWNlIEJhcnIgKHNjaG1vb3N0IC1hdC0geWFob28uY29tKSAoU2VlIEJvb3N0IGxpc3Qgb2YgTW9uLCAxNiBBdWcgMjAwNCAxNTowNjo0MyAtMDUwMCkKQnJ1bm8gZGEgU2lsdmEgZGUgT2xpdmVpcmEgKGJydW5vIC0gYXQgLSBlc3NzLmNvbS5icikKQ2hyaXN0YWluIEVuZ3N0cm9tIChjaHJpc3RpYW4uZW5nc3Ryb20gLWF0LSBnbGluZHJhLm9yZykgKFNlZSBCb29zdCBsaXN0IG1lc3NhZ2Ugb2YgTW9uLCAzMCBBdWcgMjAwNCAxNDozMTo0OSArMDIwMCkKQ3JvbXdlbGwgRCBFbmFnZSAoc3BvbmFnZSAtYXQtIHlhaG9vLmNvbSkgKFNlZSBCb29zdCBsaXN0IG1lc3NhZ2Ugb2YgQXVndXN0IDEyLCAyMDA0IDExOjQ5OjEzIEFNIEVTVCkgCkRhbiBHb2htYW4gKGRqZyAtYXQtIGNyYXkuY29tKSAoU2VlIEJvb3N0IGxpc3QgbWVzc3NhZ2Ugb2YgU2F0LCAyMSBBdWcgMjAwNCAxMDo1NDo1OSArMDEwMCkKRGFuIE51ZmZlciAoZGFuIC1hdC0gbnVmZmVyLm5hbWUpCkRhbmllbCBGcmV5IChkLmZyZXkgLWF0LSBnbXguZGUsIGRhbmllbC5mcmV5IC1hdC0gYWl4aWdvLmRlKQpEYW5pZWwgTnVmZmVyIChkYW4gLWF0LSBudWZmZXIubmFtZSkKRGFyaW4gQWRsZXIgKGRhcmluIC1hdC0gYmVudHNwb29uLmNvbSkgKEVtYWlsIHRvIEFuZHJlYXMgSHViZXIsIHNlZSBjaGFuZ2UgbG9nKQpEYXJ5bGUgV2Fsa2VyIChkYXJ5bGV3IC0gYXQgLSBob3RtYWlsLmNvbSkKRGF2ZSBBYnJhaGFtcyAoZGF2ZUBib29zdC1jb25zdWx0aW5nLmNvbSkKRGF2ZSBNb29yZSAoZG1vb3JlIC1hdC0gdmllZmluYW5jaWFsLmNvbSkgKFNlZSBCb29zdCBsaXN0IG1lc3NhZ2Ugb2YgMTggRGVjIDIwMDMgMTU6MzU6NTAgLTA1MDApCkRhdmlkIEFicmFoYW1zIChkYXZlQGJvb3N0LWNvbnN1bHRpbmcuY29tKQpEaWV0bWFyIEt1ZWhsIChkaWV0bWFyX2t1ZWhsIC1hdC0geWFob28uY29tKSAoRW1haWwgdG8gQW5kcmVhcyBIdWJlciwgc2VlIGNoYW5nZSBsb2cpCkRvdWdsYXMgR3JlZ29yIChncmVnb2QgLWF0LSBjcy5ycGkuZWR1LCBkZ3JlZ29yIC1hdC0gY3MuaW5kaWFuYS5lZHUsIGRvdWcuZ3JlZ29yIC1hdC0gZ21haWwuY29tKQpEciBKb2huIE1hZGRvY2sgKGpvaG4gLSBhdCAtIGpvaG5tYWRkb2NrLmNvLnVrKQpFZHdhcmQgRC4gQnJleSAoYnJleSAtYXQtIGR1Y3RhcGUubmV0KSAoRW1haWwgdG8gQW5kcmVhcyBIdWJlciwgc2VlIGNoYW5nZSBsb2cpCkVyaWMgRm9yZCAodW41bzZuOTAyIC1hdC0gc25lYWtlbWFpbC5jb20pIChTZWUgQm9vc3QgbGlzdCBtZXNzYWdlIG9mIFN1biwgMTUgQXVnIDIwMDQgMTA6Mjk6MTMgKzAxMDApCkVyaWMgRnJpZWRtYW4gKGViZkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQpCkVyaWMgTmllYmxlciAoZXJpY0Bib29zdC1jb25zdWx0aW5nLmNvbSkKRmVybmFuZG8gQ2FjY2lvbGEgKGZlcm5hbmRvX2NhY2Npb2xhQGNpdWRhZC5jb20uYXIpCkZlcm5hbmRvIEx1aXMgQ2FjY2lvbGEgQ2FyYmFsbGFsIChmZXJuYW5kb19jYWNjaW9sYUBjaXVkYWQuY29tLmFyKQpGcmFuY29pcyBGYXVyZSAoRnJhbmNvaXMuRmF1cmUgLWF0LSBpbWFnLmZyKSAoU2VlIENWUyBsb2cpCkdhcnkgUG93ZWxsIChwb3dlbGxnIC0gYXQgLSBhbWF6b24uY29tKSAoU2VlIEJvb3N0IGxpc3QgbWVzc2FnZSBvZiAxMCBGZWIgMjAwNCAxNDoyMjo0NiAtMDgwMCkKR2VubmFkaXkgUm96ZW50YWwgKHJvZ2VlZmYgLWF0LSBtYWlsLmNvbSkgKEVtYWlsIHRvIEFuZHJlYXMgSHViZXIsIHNlZSBjaGFuZ2UgbG9nKQpHb3R0ZnJpZWQgR2Fuc3NhdWdlIChHb3R0ZnJpZWQuR2Fuc3NhdWdlIC1hdC0gSEFVRkUuREUpIChTZWUgQm9vc3QgTGlzdCBtZXNzYWdlIG9mIE1vbiwgMTYgQXVnIDIwMDQgMTA6MDk6MTkgKzAyMDApCkdvdHRmcmllZCBHYW7fYXVnZSAoR290dGZyaWVkLkdhbnNzYXVnZSAtYXQtIEhBVUZFLkRFKSAoQWx0ZXJuYXRpdmUgc3BlbGxpbmcgb2YgR290dGZyaWVkIEdhbnNzYXVnZSkKR3JlZyBDb2x2aW4gKGdyZWdvcnkuY29sdmluIC1hdC0gb3JhY2xlLmNvbSkgKFNlZSBCb29zdCBsaXN0IG1lc3NhZ2Ugb2YgU2F0LCAxNCBBdWcgMjAwNCAxMDo1NzowMCArMDEwMCkKR3JlZ29yeSBDb2x2aW4gKGdyZWdvcnkuY29sdmluIC1hdC0gb3JhY2xlLmNvbSkgKFNlZSBCb29zdCBsaXN0IG1lc3NhZ2Ugb2YgU2F0LCAxNCBBdWcgMjAwNCAxMDo1NzowMCArMDEwMCkKR3VudGVyIFdpbmtsZXIgKGd1bnRlci53aW5rbGVyIC1hdC0gdW5pYnctbXVlbmNoZW4uZGUpIChTZWUgQm9vc3QgTGlzdCBtZXNzYWdlIG9mIE1vbiwgMTYgQXVnIDIwMDQgMTA6MjQ6MTcgKzAyMDApCkhhcnRtdXQgS2Fpc2VyIChoYXJ0bXV0LmthaXNlciAtYXQtIGdtYWlsLmNvbSkKSGVydmUgQnJvbm5pbWFubiAoaGJyIC1hdC0gcG9seS5lZHUpCkhlcnbpIEJy9m5uaW1hbm4gKGhiciAtYXQtIHBvbHkuZWR1KQpIb3VzZW1hcnF1ZSBPeSAoSWxhcmkgS3VpdHRpbmVuIGlsYXJpLmt1aXR0aW5lbiAtYXQtIGhvdXNlbWFycXVlLmZpKQpIb3dhcmQgSGlubmFudCAoaGlubmFudCAtYXQtIHR3Y255LnJyLmNvbSkgKFNlZSBCb29zdCBsaXN0IG1lc3NhZ2Ugb2YgSnVseSAyNSwgMjAwNCAzOjQ0OjQ5IFBNIEVTVCkKSHViZXJ0IEhvbGluIChodWJlcnRfaG9saW4gLWF0LSB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQpCkluZGlhbmEgVW5pdmVyc2l0eSAoKQpJdGF5IE1hbWFuIChpbWFtYW4gLWF0LSB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQpCkphYWtrbyBK5HJ2aSAoamFqYXJ2aSAtYXQtIG9zbC5pdS5lZHUpCkphYXAgU3V0ZXIgKGouc3V0ZXIgLWF0LSBzdHVkZW50LnV0d2VudGUubmwpIChTZWUgQm9vc3QgbGlzdCBtZXNzYWdlIG9mIFRodSwgMTYgU2VwIDIwMDQgMDk6MzI6NDMgLTA3MDApCkplZmYgR2FybGFuZCAoamVmZiAtIGF0IC0gY3J5c3RhbGNsZWFyc29mdHdhcmUuY29tKSAoc2VlIEJvb3N0IGxpc3QgcG9zdCBvZiBKdWx5IDI1LCAyMDA0IDE5OjMxOjA5IC0wNzAwKQpKZW5zIE1hdXJlciAoSmVucy5NYXVyZXJAZ214Lm5ldCkKSmVyZW15IEcgU2llayAoanNpZWtAb3NsLml1LmVkdSkKSmVyZW15IFNpZWsgKGpzaWVrQG9zbC5pdS5lZHUpCkpvZWwgZGUgR3V6bWFuIChqb2VsIC1hdC0gYm9vc3QtY29uc3VsdGluZy5jb20pIChTZWUgQm9vc3QgbGlzdCBtZXNzYWdlIG9mIEp1bHkgMjUsIDIwMDQgODozMjowMCBQTSBFU1QpCkpvaG4gQmFuZGVsYSAoamJhbmRlbGEtYXQtdWZsLmVkdSkKSm9obiBNYWRkb2NrIChqb2huIC0gYXQgLSBqb2hubWFkZG9jay5jby51aykKSm9obiBSIEJhbmRlbGEgKGpiYW5kZWxhLWF0LXVmbC5lZHUpCkpvbmF0aGFuIFR1cmthbmlzICh0dXJrYW5pcyAtYXQtIGNvZGVyYWdlIGRvdCBjb20pCkp1ZXJnZW4gSHVub2xkIChodW5vbGQgLWF0LSBpdmUudW5pLWhhbm5vdmVyLmRlKSAoU2VlIEJvb3N0IExpc3QgTWVzc2FnZSBvZiBGcmksIDEzIEF1ZyAyMDA0IDE5OjM5OjU1ICswMjAwKQpLZXZsaW4gSGVubmV5IChrZXZsaW4gLWF0LSBjdXJicmFsYW4uY29tKSAoU2VlIEJvb3N0IGxpc3QgbWVzc2FnZSBvZiBXZWQsIDE1IFNlcCAyMDA0IDE4OjE1OjE3ICswMjAwKQpLcmVzaW1pciBGcmVzbCAoZnJlc2wgLWF0LSBtYXN0ZXIuZ3JhZC5ocikgKFNlZSBCb29zdCBMaXN0IG1lc3NhZ2Ugb2YgQXVndXN0IDE2LCAyMDA0IDg6MjM6MzUgQU0gRVNUKQpMYXJzIEd1bGxpayBCavhubmVzIChsYXJzYmogLWF0LSBseXgub3JnKSAoU2VlIEJvb3N0IGxpc3QgbWVzc2FnZSBvZiBUdWUsIDE3IEF1ZyAyMDA0IDE1OjQ5OjAyICswMTAwKQpMaWUtUXVhbiBMZWUgKGxpZXF1YW4gLSBhdCAtIHNsYWMuc3RhbmZvcmQuZWR1LCBsbGVlIC0gYXQgLSBjcy5pbmRpYW5hLmVkdSkKTWFhcnRlbiBLZWlqemVyIChta2VpanplciAtYXQtIGNzLnZ1Lm5sKSAoU2VlIEJvb3N0IGxpc3QgbWVzc2FnZSBvZiBXZWQsIDE4IEF1ZyAyMDA0IDIxOjQzOjE4ICswMTAwKQpNYWMgTXVycmV0dCAobW11cnJldHQgLWF0LSBtYWMuY29tKQpNYXJjIFdpbnRlcm1hbnRlbCAod2ludGVybWFudGVsIC1hdC0gaW1lcy5tYXZ0LmV0aHouY2gsIHdpbnRlcm1hbnRlbCAtYXQtIGV2ZW4tYWcuY2gpIChTZWUgQ1ZTIGxvZykKTWljaGFlbCBHbGFzc2ZvcmQgKGdsYXNzZm9yZG0gLSBhdCAtIGhvdG1haWwuY29tKQpNaWNoYWVsIFN0ZXZlbnMgKE1pY2hhZWwuU3RldmVucyAtIGF0IC0gZXBvc3QuZGUpCk11bHRpIE1lZGlhIEx0ZC4gKHBkaW1vdkBtbWx0ZC5uZXQpCk5pY29sYWkgTSBKb3N1dHRpcyAoc29sdXRpb25zIC1hdC0gam9zdXR0aXMuY29tKSAoU2VlIEJvb3N0IGxpc3QgbWVzc2FnZSBvZiBNb24sIDMwIEF1ZyAyMDA0IDEwOjUyOjAwICswMTAwKQpOaWtvbGF5IE1sYWRlbm92IChuaWNrbSAtYXQtIHNpdGl1cy5jb20pIChTZWUgQm9vc3QgbGlzdCBtZXNzYWdlIG9mIFR1ZSwgMTcgQXVnIDIwMDQgMTU6NDU6MzMgKzAxMDApClBhdWwgTWVuc29uaWRlcyAocG1lbnNvNTcgLWF0LSBjb21jYXN0Lm5ldCkgKFNlZSBCb29zdCBsaXN0IG1lc3NhZ2Ugb2YgSnVseSAyMSwgMjAwNCAxOjEyOjIxIEFNIEVTVCkKUGF2b2wgRHJvYmEgKGRyb2JhIC1hdC0gdG9wbWFpbC5zaykKUGV0ZXIgRGltb3YgKHBkaW1vdkBtbWx0ZC5uZXQpClIgVyBHcm9zc2UtS3Vuc3RsZXZlIChSV0dyb3NzZS1LdW5zdGxldmVAbGJsLmdvdikKUmFsZiBXLiBHcm9zc2UtS3Vuc3RsZXZlIChSV0dyb3NzZS1LdW5zdGxldmVAbGJsLmdvdikKUmF0aW9uYWwgRGlzY292ZXJ5IExMQyAoR3JlZyBMYW5kcnVtIExhbmRydW0gLWF0LSBSYXRpb25hbERpc2NvdmVyeS5jb20pIChTZWUgQm9vc3QgbGlzdCBwb3N0IG9mIFR1ZSwgMTcgQXVnIDIwMDQgMTA6MzU6MzYgKzAxMDApClJlbmUgUml2ZXJhIChncmFmaWsvcmVkc2hpZnQtc29mdHdhcmUuY29tLCBycml2ZXJhL2FjbS5vcmcpClJvYmVydCBSYW1leSAocmFtZXlAd3d3LnJyc2QuY29tKQpSb2xhbmQgUmljaHRlciAocm9sYW5kIC1hdC0gZmxsbC5qa3UuYXQpIChTZWUgQm9vc3QgbGlzdCBwb3N0IG9mIE1vbiwgMTYgQXVnIDIwMDQgMjI6MTY6NTUgKzAyMDApClJvbGFuZCBTY2h3YXJ6IChyb2xhbmQuc2Nod2FyeiAtYXQtIGNoZWxsby5hdCkKUm9uYWxkIEdhcmNpYSAoZ2FyY2lhIC1hdC0gY3MuaW5kaWFuYS5lZHUpIChFbWFpbCB0byBBbmRyZWFzIEh1YmVyLCBzZWUgY2hhbmdlIGxvZykKU2FtdWVsIEtyZW1wcCAoa3JlbXBwIC1hdC0gY3JhbnMuZW5zLWNhY2hhbi5mcikgKFNlZSBCb29zdCBsaXN0IG1lc3NhZ2Ugb2YgTW9uLCAyNyBTZXAgMjAwNCAxMzoxODozNiArMDIwMCkKU3RlZmFuIFNlZWZlbGQgKHNlZWZlbGQgLWF0LSBzeW1wYXRpY28uY2EpClN0ZXBoZW4gQ2xlYXJ5IChzY2xlYXJ5IC1hdC0gamVydmlzd2ViYi5jb20pIChTZWUgQm9vc3QgbGlzdCBtZXNzYWdlIG9mIFR1ZSwgMjggU2VwIDIwMDQgMTM6MTE6NDYgKzAxMDApClN0ZXZlIENsZWFyeSAoVmFyaWFudCBvZiBTdGVwaGVuIENsZWFyeSkKU3lsdmFpbiBQaW9uIChTeWx2YWluLlBpb24gLSBhdCAtIHNvcGhpYS5pbnJpYS5mcikKVGhlIFRydXN0ZWVzIG9mIEluZGlhbmEgVW5pdmVyc2l0eSAoKQpUaG9tYXMgV2l0dCAod2l0dCAtIGF0IC0gaXZlLnVuaS1oYW5ub3Zlci5kZSwgd2l0dCAtIGF0IC0gYWNtLm9yZywgd2l0dCAtIGF0IC0gc3R5bGVhZHZpc29yLmNvbSkKVGhvcnN0ZW4gSvhyZ2VuIE90dG9zZW4gKG5lc290dG8gLSBhdCAtIGNzLmF1Yy5kaykKVGhvcnN0ZW4gT3R0b3NlbiAobmVzb3R0byAtIGF0IC0gY3MuYXVjLmRrKQpUb29uIEtuYXBlbiAodG9vbiBkb3Qga25hcGVuIC0gYXQgLSBmZnQuYmUpClRydXN0ZWVzIG9mIEluZGlhbmEgVW5pdmVyc2l0eSAoKQpVbml2ZXJzaXR5IG9mIE5vdHJlIERhbWUgKCkKVmxhZGltaXIgUHJ1cyAoZ2hvc3RAY3MubXN1LnN1KQpXaWxsaWFtIEUuIEtlbXBmICgpIChlbWFpbCB0byBCZW1hbiBEYXdlcywgOS8xNC8yMDA2IDQ6MTggUE0pCkpvZXJnIFdhbHRlciAoamhyLndhbHRlciAtIGF0IC0gdC1vbmxpbmUuZGUgOiBlbWFpbCB0byB1YmxhcyBtYWlsaW5nIGxpc3QgTW9uLCAxNyBTZXAgMjAwNyAxMDoxNzowOCArMDIwMCkKTWF0aGlhcyBLb2NoIChta29jaCAtIGF0IC0gaWRlc2lzLmRlIDcgOiBlbWFpbCB0byBib29zdC1vd25lckBsaXN0cy5ib29zdC5vcmcgU2VwIDIwMDcgMTM6MjA6MDkgKzAyMDApCgotLS0gZW5kIC0tLQoKCg==