ICAgICBLZXJuZWwgU3VwcG9ydCBmb3IgbWlzY2VsbGFuZW91cyAoeW91ciBmYXZvdXJpdGUpIEJpbmFyeSBGb3JtYXRzIHYxLjEKICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KClRoaXMgS2VybmVsIGZlYXR1cmUgYWxsb3dzIHlvdSB0byBpbnZva2UgYWxtb3N0IChmb3IgcmVzdHJpY3Rpb25zIHNlZSBiZWxvdykKZXZlcnkgcHJvZ3JhbSBieSBzaW1wbHkgdHlwaW5nIGl0cyBuYW1lIGluIHRoZSBzaGVsbC4KVGhpcyBpbmNsdWRlcyBmb3IgZXhhbXBsZSBjb21waWxlZCBKYXZhKFRNKSwgUHl0aG9uIG9yIEVtYWNzIHByb2dyYW1zLgoKVG8gYWNoaWV2ZSB0aGlzIHlvdSBtdXN0IHRlbGwgYmluZm10X21pc2Mgd2hpY2ggaW50ZXJwcmV0ZXIgaGFzIHRvIGJlIGludm9rZWQKd2l0aCB3aGljaCBiaW5hcnkuIEJpbmZtdF9taXNjIHJlY29nbmlzZXMgdGhlIGJpbmFyeS10eXBlIGJ5IG1hdGNoaW5nIHNvbWUgYnl0ZXMKYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZSB3aXRoIGEgbWFnaWMgYnl0ZSBzZXF1ZW5jZSAobWFza2luZyBvdXQgc3BlY2lmaWVkCmJpdHMpIHlvdSBoYXZlIHN1cHBsaWVkLiBCaW5mbXRfbWlzYyBjYW4gYWxzbyByZWNvZ25pc2UgYSBmaWxlbmFtZSBleHRlbnNpb24KYWthICcuY29tJyBvciAnLmV4ZScuCgpGaXJzdCB5b3UgbXVzdCBtb3VudCBiaW5mbXRfbWlzYzoKCW1vdW50IGJpbmZtdF9taXNjIC10IGJpbmZtdF9taXNjIC9wcm9jL3N5cy9mcy9iaW5mbXRfbWlzYyAKClRvIGFjdHVhbGx5IHJlZ2lzdGVyIGEgbmV3IGJpbmFyeSB0eXBlLCB5b3UgaGF2ZSB0byBzZXQgdXAgYSBzdHJpbmcgbG9va2luZyBsaWtlCjpuYW1lOnR5cGU6b2Zmc2V0Om1hZ2ljOm1hc2s6aW50ZXJwcmV0ZXI6ZmxhZ3MgKHdoZXJlIHlvdSBjYW4gY2hvb3NlIHRoZSAnOicgdXBvbgp5b3VyIG5lZWRzKSBhbmQgZWNobyBpdCB0byAvcHJvYy9zeXMvZnMvYmluZm10X21pc2MvcmVnaXN0ZXIuCkhlcmUgaXMgd2hhdCB0aGUgZmllbGRzIG1lYW46CiAtICduYW1lJyBpcyBhbiBpZGVudGlmaWVyIHN0cmluZy4gQSBuZXcgL3Byb2MgZmlsZSB3aWxsIGJlIGNyZWF0ZWQgd2l0aCB0aGlzCiAgIG5hbWUgYmVsb3cgL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjCiAtICd0eXBlJyBpcyB0aGUgdHlwZSBvZiByZWNvZ25pdGlvbi4gR2l2ZSAnTScgZm9yIG1hZ2ljIGFuZCAnRScgZm9yIGV4dGVuc2lvbi4KIC0gJ29mZnNldCcgaXMgdGhlIG9mZnNldCBvZiB0aGUgbWFnaWMvbWFzayBpbiB0aGUgZmlsZSwgY291bnRlZCBpbiBieXRlcy4gVGhpcwogICBkZWZhdWx0cyB0byAwIGlmIHlvdSBvbWl0IGl0IChpLmUuIHlvdSB3cml0ZSAnOm5hbWU6dHlwZTo6bWFnaWMuLi4nKQogLSAnbWFnaWMnIGlzIHRoZSBieXRlIHNlcXVlbmNlIGJpbmZtdF9taXNjIGlzIG1hdGNoaW5nIGZvci4gVGhlIG1hZ2ljIHN0cmluZwogICBtYXkgY29udGFpbiBoZXgtZW5jb2RlZCBjaGFyYWN0ZXJzIGxpa2UgXHgwYSBvciBceEE0LiBJbiBhIHNoZWxsIGVudmlyb25tZW50CiAgIHlvdSB3aWxsIGhhdmUgdG8gd3JpdGUgXFx4MGEgdG8gcHJldmVudCB0aGUgc2hlbGwgZnJvbSBlYXRpbmcgeW91ciBcLgogICBJZiB5b3UgY2hvc2UgZmlsZW5hbWUgZXh0ZW5zaW9uIG1hdGNoaW5nLCB0aGlzIGlzIHRoZSBleHRlbnNpb24gdG8gYmUKICAgcmVjb2duaXNlZCAod2l0aG91dCB0aGUgJy4nLCB0aGUgXHgwYSBzcGVjaWFscyBhcmUgbm90IGFsbG93ZWQpLiBFeHRlbnNpb24KICAgbWF0Y2hpbmcgaXMgY2FzZSBzZW5zaXRpdmUhCiAtICdtYXNrJyBpcyBhbiAob3B0aW9uYWwsIGRlZmF1bHRzIHRvIGFsbCAweGZmKSBtYXNrLiBZb3UgY2FuIG1hc2sgb3V0IHNvbWUKICAgYml0cyBmcm9tIG1hdGNoaW5nIGJ5IHN1cHBseWluZyBhIHN0cmluZyBsaWtlIG1hZ2ljIGFuZCBhcyBsb25nIGFzIG1hZ2ljLgogICBUaGUgbWFzayBpcyBhbmRlZCB3aXRoIHRoZSBieXRlIHNlcXVlbmNlIG9mIHRoZSBmaWxlLgogLSAnaW50ZXJwcmV0ZXInIGlzIHRoZSBwcm9ncmFtIHRoYXQgc2hvdWxkIGJlIGludm9rZWQgd2l0aCB0aGUgYmluYXJ5IGFzIGZpcnN0CiAgIGFyZ3VtZW50IChzcGVjaWZ5IHRoZSBmdWxsIHBhdGgpCiAtICdmbGFncycgaXMgYW4gb3B0aW9uYWwgZmllbGQgdGhhdCBjb250cm9scyBzZXZlcmFsIGFzcGVjdHMgb2YgdGhlIGludm9jYXRpb24KICAgb2YgdGhlIGludGVycHJldGVyLiBJdCBpcyBhIHN0cmluZyBvZiBjYXBpdGFsIGxldHRlcnMsIGVhY2ggY29udHJvbHMgYSBjZXJ0YWluCiAgIGFzcGVjdC4gVGhlIGZvbGxvd2luZyBmbGFncyBhcmUgc3VwcG9ydGVkIC0KICAgICAgJ1AnIC0gcHJlc2VydmUtYXJndlswXS4gIExlZ2FjeSBiZWhhdmlvciBvZiBiaW5mbXRfbWlzYyBpcyB0byBvdmVyd3JpdGUgdGhlCiAgICAgICAgICAgIG9yaWdpbmFsIGFyZ3ZbMF0gd2l0aCB0aGUgZnVsbCBwYXRoIHRvIHRoZSBiaW5hcnkuICBXaGVuIHRoaXMgZmxhZyBpcwogICAgICAgICAgICBpbmNsdWRlZCwgYmluZm10X21pc2Mgd2lsbCBhZGQgYW4gYXJndW1lbnQgdG8gdGhlIGFyZ3VtZW50IHZlY3RvciBmb3IKICAgICAgICAgICAgdGhpcyBwdXJwb3NlLCB0aHVzIHByZXNlcnZpbmcgdGhlIG9yaWdpbmFsIGFyZ3ZbMF0uCiAgICAgICdPJyAtIG9wZW4tYmluYXJ5LiBMZWdhY3kgYmVoYXZpb3Igb2YgYmluZm10X21pc2MgaXMgdG8gcGFzcyB0aGUgZnVsbCBwYXRoCiAgICAgICAgICAgIG9mIHRoZSBiaW5hcnkgdG8gdGhlIGludGVycHJldGVyIGFzIGFuIGFyZ3VtZW50LiBXaGVuIHRoaXMgZmxhZyBpcwogICAgICAgICAgICBpbmNsdWRlZCwgYmluZm10X21pc2Mgd2lsbCBvcGVuIHRoZSBmaWxlIGZvciByZWFkaW5nIGFuZCBwYXNzIGl0cwogICAgICAgICAgICBkZXNjcmlwdG9yIGFzIGFuIGFyZ3VtZW50LCBpbnN0ZWFkIG9mIHRoZSBmdWxsIHBhdGgsIHRodXMgYWxsb3dpbmcKICAgICAgICAgICAgdGhlIGludGVycHJldGVyIHRvIGV4ZWN1dGUgbm9uLXJlYWRhYmxlIGJpbmFyaWVzLiBUaGlzIGZlYXR1cmUgc2hvdWxkCiAgICAgICAgICAgIGJlIHVzZWQgd2l0aCBjYXJlIC0gdGhlIGludGVycHJldGVyIGhhcyB0byBiZSB0cnVzdGVkIG5vdCB0byBlbWl0CiAgICAgICAgICAgIHRoZSBjb250ZW50cyBvZiB0aGUgbm9uLXJlYWRhYmxlIGJpbmFyeS4KICAgICAgJ0MnIC0gY3JlZGVudGlhbHMuIEN1cnJlbnRseSwgdGhlIGJlaGF2aW9yIG9mIGJpbmZtdF9taXNjIGlzIHRvIGNhbGN1bGF0ZQogICAgICAgICAgICB0aGUgY3JlZGVudGlhbHMgYW5kIHNlY3VyaXR5IHRva2VuIG9mIHRoZSBuZXcgcHJvY2VzcyBhY2NvcmRpbmcgdG8KICAgICAgICAgICAgdGhlIGludGVycHJldGVyLiBXaGVuIHRoaXMgZmxhZyBpcyBpbmNsdWRlZCwgdGhlc2UgYXR0cmlidXRlcyBhcmUKICAgICAgICAgICAgY2FsY3VsYXRlZCBhY2NvcmRpbmcgdG8gdGhlIGJpbmFyeS4gSXQgYWxzbyBpbXBsaWVzIHRoZSAnTycgZmxhZy4KICAgICAgICAgICAgVGhpcyBmZWF0dXJlIHNob3VsZCBiZSB1c2VkIHdpdGggY2FyZSBhcyB0aGUgaW50ZXJwcmV0ZXIKICAgICAgICAgICAgd2lsbCBydW4gd2l0aCByb290IHBlcm1pc3Npb25zIHdoZW4gYSBzZXR1aWQgYmluYXJ5IG93bmVkIGJ5IHJvb3QKICAgICAgICAgICAgaXMgcnVuIHdpdGggYmluZm10X21pc2MuCgoKVGhlcmUgYXJlIHNvbWUgcmVzdHJpY3Rpb25zOgogLSB0aGUgd2hvbGUgcmVnaXN0ZXIgc3RyaW5nIG1heSBub3QgZXhjZWVkIDI1NSBjaGFyYWN0ZXJzCiAtIHRoZSBtYWdpYyBtdXN0IHJlc2lkZSBpbiB0aGUgZmlyc3QgMTI4IGJ5dGVzIG9mIHRoZSBmaWxlLCBpLmUuCiAgIG9mZnNldCtzaXplKG1hZ2ljKSBoYXMgdG8gYmUgbGVzcyB0aGFuIDEyOAogLSB0aGUgaW50ZXJwcmV0ZXIgc3RyaW5nIG1heSBub3QgZXhjZWVkIDEyNyBjaGFyYWN0ZXJzCgpUbyB1c2UgYmluZm10X21pc2MgeW91IGhhdmUgdG8gbW91bnQgaXQgZmlyc3QuIFlvdSBjYW4gbW91bnQgaXQgd2l0aAoibW91bnQgLXQgYmluZm10X21pc2Mgbm9uZSAvcHJvYy9zeXMvZnMvYmluZm10X21pc2MiIGNvbW1hbmQsIG9yIHlvdSBjYW4gYWRkCmEgbGluZSAibm9uZSAgL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjIGJpbmZtdF9taXNjIGRlZmF1bHRzIDAgMCIgdG8geW91cgovZXRjL2ZzdGFiIHNvIGl0IGF1dG8gbW91bnRzIG9uIGJvb3QuCgpZb3UgbWF5IHdhbnQgdG8gYWRkIHRoZSBiaW5hcnkgZm9ybWF0cyBpbiBvbmUgb2YgeW91ciAvZXRjL3JjIHNjcmlwdHMgZHVyaW5nCmJvb3QtdXAuIFJlYWQgdGhlIG1hbnVhbCBvZiB5b3VyIGluaXQgcHJvZ3JhbSB0byBmaWd1cmUgb3V0IGhvdyB0byBkbyB0aGlzCnJpZ2h0LgoKVGhpbmsgYWJvdXQgdGhlIG9yZGVyIG9mIGFkZGluZyBlbnRyaWVzISBMYXRlciBhZGRlZCBlbnRyaWVzIGFyZSBtYXRjaGVkIGZpcnN0IQoKCkEgZmV3IGV4YW1wbGVzIChhc3N1bWVkIHlvdSBhcmUgaW4gL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjKToKCi0gZW5hYmxlIHN1cHBvcnQgZm9yIGVtODYgKGxpa2UgYmluZm10X2VtODYsIGZvciBBbHBoYSBBWFAgb25seSk6CiAgZWNobyAnOmkzODY6TTo6XHg3ZkVMRlx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDJceDAwXHgwMzpceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmVceGZlXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmYlx4ZmZceGZmOi9iaW4vZW04NjonID4gcmVnaXN0ZXIKICBlY2hvICc6aTQ4NjpNOjpceDdmRUxGXHgwMVx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMlx4MDBceDA2Olx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZVx4ZmVceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZiXHhmZlx4ZmY6L2Jpbi9lbTg2OicgPiByZWdpc3RlcgoKLSBlbmFibGUgc3VwcG9ydCBmb3IgcGFja2VkIERPUyBhcHBsaWNhdGlvbnMgKHByZS1jb25maWd1cmVkIGRvc2VtdSBoZGltYWdlcyk6CiAgZWNobyAnOkRFWEU6TTo6XHgwZURFWDo6L3Vzci9iaW4vZG9zZXhlYzonID4gcmVnaXN0ZXIKCi0gZW5hYmxlIHN1cHBvcnQgZm9yIFdpbmRvd3MgZXhlY3V0YWJsZXMgdXNpbmcgd2luZToKICBlY2hvICc6RE9TV2luOk06Ok1aOjovdXNyL2xvY2FsL2Jpbi93aW5lOicgPiByZWdpc3RlcgoKRm9yIGphdmEgc3VwcG9ydCBzZWUgRG9jdW1lbnRhdGlvbi9qYXZhLnR4dAoKCllvdSBjYW4gZW5hYmxlL2Rpc2FibGUgYmluZm10X21pc2Mgb3Igb25lIGJpbmFyeSB0eXBlIGJ5IGVjaG9pbmcgMCAodG8gZGlzYWJsZSkKb3IgMSAodG8gZW5hYmxlKSB0byAvcHJvYy9zeXMvZnMvYmluZm10X21pc2Mvc3RhdHVzIG9yIC9wcm9jLy4uLi90aGVfbmFtZS4KQ2F0dGluZyB0aGUgZmlsZSB0ZWxscyB5b3UgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIGJpbmZtdF9taXNjL3RoZSBlbnRyeS4KCllvdSBjYW4gcmVtb3ZlIG9uZSBlbnRyeSBvciBhbGwgZW50cmllcyBieSBlY2hvaW5nIC0xIHRvIC9wcm9jLy4uLi90aGVfbmFtZQpvciAvcHJvYy9zeXMvZnMvYmluZm10X21pc2Mvc3RhdHVzLgoKCkhJTlRTOgo9PT09PT0KCklmIHlvdSB3YW50IHRvIHBhc3Mgc3BlY2lhbCBhcmd1bWVudHMgdG8geW91ciBpbnRlcnByZXRlciwgeW91IGNhbgp3cml0ZSBhIHdyYXBwZXIgc2NyaXB0IGZvciBpdC4gU2VlIERvY3VtZW50YXRpb24vamF2YS50eHQgZm9yIGFuCmV4YW1wbGUuCgpZb3VyIGludGVycHJldGVyIHNob3VsZCBOT1QgbG9vayBpbiB0aGUgUEFUSCBmb3IgdGhlIGZpbGVuYW1lOyB0aGUga2VybmVsCnBhc3NlcyBpdCB0aGUgZnVsbCBmaWxlbmFtZSAob3IgdGhlIGZpbGUgZGVzY3JpcHRvcikgdG8gdXNlLiAgVXNpbmcgJFBBVEggY2FuCmNhdXNlIHVuZXhwZWN0ZWQgYmVoYXZpb3VyIGFuZCBjYW4gYmUgYSBzZWN1cml0eSBoYXphcmQuCgoKVGhlcmUgaXMgYSB3ZWIgcGFnZSBhYm91dCBiaW5mbXRfbWlzYyBhdApodHRwOi8vd3d3LnRhdC5waHlzaWsudW5pLXR1ZWJpbmdlbi5kZS9+cmd1ZW50aC9saW51eC9iaW5mbXRfbWlzYy5odG1sCgpSaWNoYXJkIEf8bnRoZXIgPHJndWVudGhAdGF0LnBoeXNpay51bmktdHVlYmluZ2VuLmRlPgo=