MjAwMy0wNi0xMCAgICA8a2FybEBnbnUub3JnPgoKCSogdmVyc2lvbiA0LjYuCgoyMDAzLTA2LTA0ICAgIDxrYXJsQGdudS5vcmc+CgoJKiBjb25maWcuc3ViOiB1cGRhdGUgZnJvbSBnbnVsaWIuCgoyMDAzLTA2LTAzICAgIDxrYXJsQGdudS5vcmc+CgoJKiBta2luc3RhbGxkaXJzOiB1cGRhdGUgZnJvbSBnbnVsaWIuCgoyMDAzLTA2LTAyIEFraW0gRGVtYWlsbGUgPGFraW1AZXBpdGEuZnI+CgoJKiB1dGlsL3RleGkyZHZpICh0ZXhfZW52dmFycyk6IE5ldy4KCVVzZSBpdCB0byBmb3J3YXJkIC1JIGRpcmVjdG9yaWVzIHRvIEJJQklOUFVUUyBhbmQgQlNUSU5QVVRTLCBpbgoJYWRkaXRpb24gb2YgSU5ERVhTVFlMRSBhbmQgVEVYSU5QVVRTLgoKMjAwMy0wNi0wMiAgICA8a2FybEBnbnUub3JnPgoKCSogbWFrZWluZm8vaHRtbC5jIChodG1sX291dHB1dF9oZWFkKTogZG9uJ3Qgb3V0cHV0IHRoZSA8bGluaz4sIHRvCgkJYXZvaWQgaGF2aW5nIG1vemlsbGEgcHV0IHVwIGEgZG9jdW1lbnQgbmF2aWdhdGlvbiBiYXIgd2hlbgoJCXdlIGRvbid0IGhhdmUgYW55dGhpbmcgZWxzZSB0byBzdXBwb3J0IGl0IHlldC4gIFJlcG9ydCBmcm9tOgoJCVBlciBCb3RobmVyLgoJKiBtYWtlaW5mby9tYWtlaW5mby5jOiBubyBuZWVkIHRvIGRlY2xhcmUgYWRkX2xpbmsgb3IKCQlhZGRfZXNjYXBlZF9hbmNob3JfbmFtZSwgc2luY2UgdGhleSBhcmUgbm90IHVzZWQuCgoJKiBkb2MvdGV4aW5mby50eGkgKENvbnRlbnRzKTogcmVjb21tZW5kIEBjb250ZW50cyBhdCB0aGUgYmVnaW5uaW5nCgkJbW9yZSBzdHJvbmdseS4gIFN1Z2dlc3Rpb25zIGZyb20gS2V2aW4gUnlkZS4KCjIwMDMtMDYtMDEgICAgPGthcmxAZ251Lm9yZz4KCgkqIG1ha2VpbmZvL21hY3JvLmMgKGFwcGx5KTogbWFrZSBcXCBleHBhbmQgdG8gXCBldmVuIGlmIHRoZSBtYWNybwoJaGFzIG5vIGFyZ3VtZW50cy4gIFJlcG9ydCBmcm9tOiBKZXNwZXIgSGFyZGVyIDxoYXJkZXJAaWZhLmF1LmRrPiwKCTMxIE1heSAyMDAzIDAyOjU2OjIwICswMjAwLgoKMjAwMy0wNS0zMSAgICA8a2FybEBnbnUub3JnPgoKCSogdXRpbC9kaXItZXhhbXBsZSAoQysrIGxpYnJhcmllcyk6IG5ldyBjYXRlZ29yeSwgc3VnZ2VzdGVkIGJ5IEJydW5vLgoKMjAwMy0wNS0yOSAgICA8a2FybEBnbnUub3JnPgoKCSogY29uZmlndXJlLmFjOiBwcmV0ZXN0IHZlcnNpb24gNC41LjkzLgoKMjAwMy0wNS0yOSAgZ2V0dGV4dGl6ZSAgPGJ1Zy1nbnUtZ2V0dGV4dEBnbnUub3JnPgoKCSogY29uZmlndXJlLmFjIChBTV9HTlVfR0VUVEVYVF9WRVJTSU9OKTogQnVtcCB0byAwLjEyLjEuCgoyMDAzLTA1LTI2ICAgIDxrYXJsQGdudS5vcmc+CgoJKiB1dGlsL3RleGkyZHZpOiBzcHVyaW91cyBcIGluIHRleF9hcmdzIGFzc2lnbm1lbnQuCgoJKiBkb2MvdGV4aW5mby50eGkgKENvbnRlbnRzKTogdHJpbSBleGNlc3Mgd29yZHMuCgoyMDAzLTA1LTI1ICAgIDxrYXJsQGdudS5vcmc+CgoJKiB1dGlsL3RleGkyZHZpOiBleHRyYSBxdW90ZXMgZm9yIHRoZSB0ZXhfYXJncyBhc3NpZ25tZW50IGluCgktLWJhdGNoIG1vZGUuCgoyMDAzLTA1LTE5ICAgIDxrYXJsQGdudS5vcmc+CgoJKiBsaWIveGV4aXQuYzogdHJhbnNsYXRlIGZmbHVzaCBlcnJvciBtZXNzYWdlcywgYWRkIG5ld2xpbmVzCgkocmVwb3J0IGZyb20gSmltIE1leWVyaW5nKS4KCSogdXRpbC97dGV4aW5kZXguYyxpbnN0YWxsLWluZm8uY30sCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMsCgkqIGluZm8vaW5mby5jOiB1c2UgeGV4aXQgYWdhaW4sIHdpdGggcmVkdW5kYW50IHJldHVybiB0byBhdm9pZAoJd2FybmluZ3MuCgoyMDAzLTA1LTE4ICAgIDxrYXJsQGdudS5vcmc+CgoJKiBsaWIveGV4aXQuYyAoeGV4aXQpOiBmcHV0cyBub3QgZnByaW50Ziwgc28gd2UgZ2V0IG5ld2xpbmU7Cgl0cmFuc2xhdGUgdGhlIG1lc3NhZ2VzLCB0b28uICBSZXBvcnQgZnJvbSBKaW0gTWV5ZXJpbmcuCgoJKiB1dGlsL2Rpci1leGFtcGxlOiBtb3ZlIGdjYy9hdXRvbWFrZSBlbnRyaWVzLgoKCSogcHJldGVzdCB2ZXJzaW9uIDQuNS45Mi4KCgkqIHVwZGF0ZSB0byBhdXRvbWFrZSAxLjcuNS4KCgkqIG1ha2VpbmZvL2h0bWwuYyAoYXBwZW5kX2NoYXIpOiBmb3Jnb3QgdG8gaW5jcmVtZW50IGxlbmd0aCwgZHVoLgoJUmVwb3J0IGZyb206ICJUb3JzdGVuIEJyb25nZXIiIDxicm9uZ2VyQHBoeXNpay5yd3RoLWFhY2hlbi5kZT4sCgkxOCBNYXkgMjAwMyAxNDozNjoyMyArMDIwMC4KCjIwMDMtMDUtMTcgICAgPGthcmxAZ251Lm9yZz4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKGRlZmluaW5nX2NvcHlpbmcpOiBuZXcgZm4uCgkoYWRkX2NoYXIpOiBjYWxsIGl0LCB3aGVuIHRlc3RpbmcgaWYgd2Ugc2hvdWxkCgljYWxsIGh0bWxfb3V0cHV0X2hlYWQuCglSZXBvcnQgZnJvbTogVG9yc3RlbiBCcm9uZ2VyIDxicm9uZ2VyQHBoeXNpay5yd3RoLWFhY2hlbi5kZT4sCgkxNyBNYXkgMjAwMyAyMjoxMDo0MiArMDIwMC4KCgkqIGNvbmZpZ3VyZS5hYzogcHJldGVzdCB2ZXJzaW9uIDQuNS45MS4KCjIwMDMtMDUtMTYgICAgPGthcmxAZ251Lm9yZz4KCgkqIG1ha2VpbmZvL2luZGV4LmMgKHNvcnRfaW5kZXgpOiBkb24ndCBkZXJlZiBOVUxMLiAgUmVwb3J0IGZyb20gSmFuLgoKMjAwMy0wNS0xMyAgICA8a2FybEBnbnUub3JnPgoKCSogbWFrZWluZm8vaHRtbC5jIChhcHBlbmRfY2hhcik6IGFwcGVhc2Ugc2dpIGNvbXBpbGVyLgoJKiBtYWtlaW5mby9odG1sLmMgKGluc2VydF9odG1sX3RhZyk6IHJlbW92ZSBzcHVyaW91cyBhcmcgdG8gcG9wX3RhZywKCUZyb206IGV6cmEgcGVpc2FjaCA8ZXBlaXNhY2hAbWVkLXh0YWwuYnUuZWR1PiwgMTMKCU1heSAyMDAzIDEyOjEzOjQwIC0wNDAwLgoKCUZpeCBhIGZldyBHQ0Mgd2FybmluZ3MsIHJlcG9ydGVkIGJ5IEppbSBNZXllcmluZzoKCgkqIGluZm8vbm9kZXMuYzogcGFyZW50aGVzaXplIGFzc2lnbm1lbnQgdXNlZCBhcyB0cnV0aCB2YWx1ZS4KCSogaW5mby9ub2RlbWVudS5jIChmb3JtYXRfbm9kZV9pbmZvKTogc3RyY3B5IGluc3RlYWQgb2Ygc3ByaW50ZiwKCQlzaW5jZSB0aGVyZSdzIG5vIGZvcm1hdC4KCSogbWFrZWluZm8vbWFrZWluZm8uYyAoaXNvbGF0ZV9ub2RlbmFtZSk6IHJlbW92ZSBzcHVyaW91cyBkZWNsLgoJKiBtYWtlaW5mby94bWwuYyAoeG1sX2luc2VydF9pbmRleHRlcm0pOiBkZWNsYXJlIGFzIHZvaWQuCgkqIGluZm8va2V5LmM6IGluaXRpYWxpemUgd2l0aCAwLDAgYXQgZW5kLgoJKiBpbmZvL2luZm9rZXkuYyAobWFpbik6IHJldHVybiBpbnN0ZWFkIG9mIHhleGl0LCBhbmQgcmVtb3ZlCgl1bnVzZWQgdmFyaWFibGUuCgkqIG1ha2VpbmZvL2h0bWwuYyAoaW5pdF9idWZmZXIpOiBmb3Jnb3QgdG8gcmV0dXJuIGJ1Zi4KCSogaW5mby9pbmZvLmMgKHJlbWVtYmVyX2luZm9fcHJvZ3JhbV9uYW1lKTogcmVtb3ZlIHNwdXJpb3VzCglkZWNsYXJhdGlvbi4KCgkqIG1ha2VpbmZvL3NlY3Rpb25pbmcuYywKCSogaW5mby9pbmZvbWFwLmM6IHJlbW92ZSB1bnVzZWQgdmFyaWFibGVzLgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAoaW5zZXJ0X3RvcGxldmVsX3N1YmRpcmVjdG9yeSksCgkqIGluZm8vbWFuLmMsCgkqIGluZm8vaW5mb2RvYy5jIChpbmZvX2ZpbmRfb3JfY3JlYXRlX2hlbHBfd2luZG93KTogcGFyZW50aGVzaXplCgkmJiB3aXRoaW4gfHwuCgkqIGluZm8vZGlzcGxheS5jIChkaXNwbGF5X3VwZGF0ZV9vbmVfd2luZG93KTogaW5pdGlhbGl6ZSByZXAgdG8KCU5VTEwsIHBhcmVudGhlc2l6ZSAmJiB3aXRoaW4gfHwuCgoJKiB1dGlsL2luc3RhbGwtaW5mby5jLAoJKiBpbmZvL2luZm8uYyAobWFpbiksCgkqIGluZm8vbWFrZWRvYy5jIChtYWluKTogcmV0dXJuIGluc3RlYWQgb2YgeGV4aXQuCgoyMDAzLTA1LTEzICBBa2ltIERlbWFpbGxlICA8YWtpbUBlcGl0YS5mcj4KCgkqIHV0aWwvdGV4aTJkdmkgKGdldF94cmVmX2ZpbGVzKTogUGFzcyAtLWZpbGUtbGluZS1lcnJvci1zdHlsZQoJdG8gVGVYIHdoZW4gc3VwcG9ydGVkLgoKMjAwMy0wNS0xMiAgICA8a2FybEBnbnUub3JnPgoKCSogY29uZmlndXJlLmFjOiBwcmV0ZXN0IHZlcnNpb24gNC41LjkwLgoKCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBhZGQgb25jZW9ubHkubTQuCgoJKiBtYWtlaW5mby90ZXN0cy9hY2NlbnRlbmM6IG11c3QgZGlzY2FyZCBzdGRlcnIgc2luY2Ugd2UgZXhwZWN0Cgl0d28gZXJyb3JzIGluIHRoaXMgY2FzZS4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKG1haW4pOiBuZXcgb3B0aW9uIC0tY3NzLWluY2x1ZGUuCgkodXNhZ2UpOiBhZGQgdG8gLS1oZWxwIG1lc3NhZ2UuCgkqIG1ha2VpbmZvL21ha2VpbmZvLmggKGNzc19pbmNsdWRlKTogbmV3IGdsb2JhbC4KCSogbWFrZWluZm8vaHRtbC5jIChhcHBlbmRfY2hhciwgcHJvY2Vzc19jc3NfZmlsZSk6IG5ldyBmbnMKCWltcGxlbWVudGluZyBpdC4KCShodG1sX291dHB1dF9oZWFkKTogY2FsbCBpdC4KCSogZG9jL3RleGluZm8udHhpIChIVE1MIENTUyk6IG5ldyBub2RlIGRlc2NyaWJpbmcgaXQuCglBbHNvIHNwbGl0IHVwIHRoZSBHZW5lcmF0aW5nIEhUTUwgbm9kZSBpbnRvIHN1Ym5vZGVzLgoKCSogY29uZmlnLntndWVzcyxzdWJ9OiB1cGRhdGUgZnJvbSBnbnVsaWIuCgoyMDAzLTA1LTEwICAgIDxrYXJsQGdudS5vcmc+CgoJKiBtYWtlaW5mby9pbmRleC5jIChzb3J0X2luZGV4KTogYWxsb2NhdGUgdGhlIHNvcnRlZCBpbmRleCBpbiBuZXcKCW1lbW9yeSwgYW5kIHNldCB0aGUgb3JpZ2luYWwgaW5kZXggdG8gdGhhdCwgdG8gYXZvaWQgcHJvYmxlbXMgd2l0aAoJQHByaW50aW5kZXggYmVpbmcgY2FsbGVkIHR3aWNlIG9uIHRoZSBzYW1lIGluZGV4LgoJKGNtX3ByaW50aW5kZXgpOiBkbyBub3QgZnJlZSB0aGUgcmV0dXJuZWQgaW5kZXguCglSZXBvcnQgZnJvbTogRHVtYXMgUGF0cmljZSA8ZHVtYXNAY2VudHJlLWNpcmVkLmZyPiwgOSBNYXkgMjAwMwoJMTU6MTI6MjEgKzAyMDAuCgoyMDAzLTA1LTA5ICAgIDxrYXJsQGdudS5vcmc+CgoJKiBtYWtlaW5mby9kZWZ1bi5jIChjbV9kZWZ1bik6IGlzc3VlIGVycm9yIG1lc3NhZ2Ugd2l0aG91dCBleHRyYQoJeCdzLiAgUmVwb3J0IGZyb206IER1bWFzIFBhdHJpY2UgPGR1bWFzQGNlbnRyZS1jaXJlZC5mcj4sIDkgTWF5CgkyMDAzIDE3OjI0OjI1ICswMjAwLgoKMjAwMy0wNS0wNyAgQWtpbSBEZW1haWxsZSAgPGFraW1AZXBpdGEuZnI+CgoJKiB1dGlsL3RleGkyZHZpICh0ZXh0cmFfY21kKTogTmV3LgogICAgICAgICh0ZXh0cmEpOiBFc2NhcGUgZXNjYXBlcyBmcm9tIHNlZCdzIGV2YWx1YXRpb24uCglVc2UgdGhlbSB0byBzdXBwb3J0IGFkZGl0aW9uYWwgVGVYL0xhVGVYIGNvbW1hbmRzLgoJU3VwcG9ydCAtLWNvbW1hbmQgYXMgYSBzeW5vbnltIGZvciAtLXRleGluZm8uCgoyMDAzLTA1LTA2ICAgIDxrYXJsQGdudS5vcmc+CgoJKiB1dGlsL2Rpci1leGFtcGxlOiBmaW5pc2ggZ2V0dGluZyByaWQgb2YgR05VIHBhY2thZ2VzLgoKMjAwMy0wNS0wNCAgICA8a2FybEBnbnUub3JnPgoKCSogZG9jL3RleGluZm8udGV4IChcaXRlbWl6ZXkpOiBpZiBubyBhcmcgdG8gQGl0ZW1pemUsIGRlZmF1bHQgdG8KCUBidWxsZXQuICBGaXggZnJvbTogU3RlcGFuIEthc2FsIDxrYXNhbEBtYXRoLmNhcy5jej4gMiBNYXkgMjAwMwoJMDk6MzI6MTEgKzAyMDAsIHJlcG9ydCBmcm9tOiBKZXNwZXIgSGFyZGVyIDxoYXJkZXJAaWZhLmF1LmRrPi4KCjIwMDMtMDQtMzAgICAgPGthcmxAZ251Lm9yZz4KCgkqIG1ha2VpbmZvLy5nZGJpbml0OiBubyBjb2xvbiBvbiBsb2NhbCB2YXJpYWJsZXMuCgoJKiBkb2MvdGV4aW5mby50eGkgKGRvY3VtZW50ZW5jb2RpbmcpOiBEb2N1bWVudCBuZXcgSW5mbyBvdXRwdXQgZmVhdHVyZS4KCW1ha2VpbmZvL2xhbmcuaCAoZW5jb2RpbmdfdHlwZSk6IHJlbmFtZSBgZWNuYW1lJyBtZW1iZXIgdG8gYGVuY25hbWUnLgoJbWFrZWluZm8vaHRtbC5jLCBsYW5nLmM6IGNoYW5nZSB1c2FnZS4KCW1ha2VpbmZvL2xhbmcuYyAoY21fZG9jdW1lbnRlbmNvZGluZyk6IGZpeCB0eXBvIGluIHdhcm5pbmcuCgltYWtlaW5mby9tYWtlaW5mby5oIChTUExJVF9TSVpFX1RIUkVTSE9MRCk6IHJlbW92ZS4KCShpbmZvX3RyYWlsZXIpOiBkZWNsYXJlLgoJbWFrZWluZm8vbWFrZWluZm8uYyAoaW5mb190cmFpbGVyKTogbmV3IGZuIHRvIGdlbmVyYXRlIExvY2FsCgkJVmFyaWFibGVzOiBzZWN0aW9uIGlmIC0tZW5hYmxlLWVuY29kaW5nIGFuZAoJCUBkb2N1bWVudGVuY29kaW5nIGFyZSBnaXZlbi4KCShjb252ZXJ0X2Zyb21fbG9hZGVkX2ZpbGUpOiBjYWxsIGl0LgoJKiBtYWtlaW5mby9ub2RlLmMgKHNwbGl0X2ZpbGUpOiB3cml0ZSB0cmFpbGVyIGludG8gZWFjaCBzcGxpdAoJCWZpbGUuICBBbHNvLCBzaW1wbHkgc3BsaXQgZmlsZXMgaWYgZmlsZSBzaXplIGlzIGxlc3MgdGhhbgoJCS0tc3BsaXQtc2l6ZSwgcmVtb3ZpbmcgU1BMSVRfU0laRV9USFJFU0hPTEQuCgoJKiBkb2MvdGV4aW5mby50ZXg6IHJlbW92ZSB0cmFpbGluZyB3aGl0ZXNwYWNlLgoKMjAwMy0wNC0yOSAgICA8a2FybEBnbnUub3JnPgoKCSogbWFrZWluZm8vbm9kZS5jIChjbV9hbmNob3IpOiBub3JtYWxpemVfbm9kZV9uYW1lIHNvIHRoYXQgYW4KCWFuY2hvciBuYW1lZCAiVE9QIiBvciAidG9wIiBvciB3aGF0ZXZlciBpcyBub3QgYWxsb3dlZC4gIFJlcG9ydAoJZnJvbTogRHVtYXMgUGF0cmljZSA8ZHVtYXNAY2VudHJlLWNpcmVkLmZyPiwgMjkgQXByIDIwMDMgMTg6NTY6NTEKCSswMjAwLgoKMjAwMy0wNC0yOCAgICA8a2FybEBnbnUub3JnPgoKCSogbWFrZWluZm8vbWFrZWluZm8uYzogd2hpdGVzcGFjZSBjbGVhbnVwLgoKCSogZG9jL3RleGluZm8udGV4IChcZG9wcmludGluZGV4KTogZG9uJ3QgXGtlcm4tXHBhcmluZGVudCwgaXQgbWFrZXMKCXRoZSBmaXJzdCBpbmRleCBlbnRyeSBzdGljayBvdXQgdG8gdGhlIGxlZnQuCglSZXBvcnQgZnJvbTogSmVzcGVyIEhhcmRlciA8aGFyZGVyQGlmYS5hdS5kaz4sCgkyOCBBcHIgMjAwMyAwMzoxMDozNiArMDIwMC4KCglGcm9tIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPjoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAoY21fdmFsdWUpOiBXYXJuIGZvciB1bmRlZmluZWQgZmxhZ3MuCgoyMDAzLTA0LTI3ICAgIDxrYXJsQGdudS5vcmc+CgoJKiBkb2MvdGV4aW5mby50ZXggKFxmb290bm90ZSwgXHNtYXJ0aXRhbGljeCk6IHVzZSBccHRleHNsYXNoCglmb3IgaXRhbGljIGNvcnJlY3Rpb24gaW5zdGVhZCBvZiBcLywgc2luY2Ugd2UndmUgcmVkZWZpbmVkIFwvIG5vdy4KCVJlcG9ydCBmcm9tOiBKZXNwZXIgSGFyZGVyIDxoYXJkZXJAaWZhLmF1LmRrPiwgMjcgQXByIDIwMDMKCTIzOjMwOjI5ICswMjAwLgoKCSogdXRpbC9kaXItZXhhbXBsZSAobWFpbHV0aWxzKTogbW9yZSBmcm9tIFdvamNpZWNoIFBvbGFrLgoJKGF1dG9jb25mKTogYWxpZ24vZWRpdC9zb3J0IGVudHJpZXMuCgoyMDAzLTA0LTI2ICAgIDxrYXJsQGdudS5vcmc+CgoJKiBkb2MvdGV4aW5mby50eGkgKEltYWdlIFN5bnRheCk6IHNlY29uZCBhbmQgZm9sbG93aW5nIEBpbWFnZSBhcmdzCgkgb3B0aW9uYWwuIFJlcG9ydCBmcm9tOiBNYXggVGVjaHRlciA8bXRlY2h0ZXJAZ214LmRlPiwgMjYgQXByIDIwMDMKCTE1OjUwOjAyICswMjAwLgoKCSogdXRpbC9kaXItZXhhbXBsZSAoYW51YmlzKTogcmVxdWVzdCBmcm9tIFdvamNpZWNoIFBvbGFrLgoKMjAwMy0wNC0yNSAgICA8a2FybEBnbnUub3JnPgoKCSogbWFrZWluZm8vZGVmdW4uYyAoZGVmdW5faW50ZXJuYWwpOiB3aGl0ZXNwYWNlIG5lZWRlZCBpbiBkb2Nib29rCglvdXRwdXQgZm9yIGRlZnR5cGUqLiAgRnJvbTogSm9z6SBGb25zZWNhCgk8al9yX2ZvbnNlY2FAeWFob28uY28udWs+LCAyNSBBcHIgMjAwMyAxMzowNzoxMyArMDEwMC4KCjIwMDMtMDQtMjEgICAgPGthcmxAZ251Lm9yZz4KCgkqIGRvYy90ZXhpbmZvLnRleCAoXGRvZmlyc3RwYXJhZ3JhcGhpbmRlbnQpOiBmb3Jnb3QgdG8gcmVuYW1lIHRoZQoJICAgICAgICBcLi4ud29yZCdzLgoJKFxzdXBwcmVzc2ZpcnN0cGFyYWdyYXBoaW5kZW50KTogZm9yZ290IHRvIHJlbmFtZQoJdG8gXGRvc3VwcHJlc3MuLi4gIFJlcG9ydGVkIGJ5IFNpbW9uLgoKMjAwMy0wNC0yMCAgICA8a2FybEBnbnUub3JnPgoKCSogSW5zdGFsbGVkIGNoYW5nZXMgZnJvbSBTaW1vbiBmb3Igc3VwcHJlc3NpbmcgaW5kZW50YXRpb24gb24gdGhlCglmaXJzdCBwYXJhZ3JhcGggYWZ0ZXIgc2VjdGlvbiBoZWFkaW5ncywgYW5kIGZvciBuZXcgQGluZGVudCBjb21tYW5kOgoKCTIwMDMtMDQtMTIgIFNpbW9uIExhdyAgPHNmbGxhd0BlbmdtYWlsLnV3YXRlcmxvby5jYT4KICAgICAgICAqIGRvYy90ZXhpbmZvLnRleCAoXGZpcnN0cGFyYWdyYXBoaW5kZW50KTogaW1wbGVtZW50IHN1cHByZXNzaW9uCiAgICAgICAgb2YgdGhlIGluZGVudGF0aW9uIG9mIHRoZSBmaXJzdCBwYXJhZ3JhcGguCiAgICAgICAgKFxkb2ZpcnN0cGFyYWdyYXBoaW5kZW50KTogZm9yIHBhcnNpbmcgYXJndW1lbnRzLgogICAgICAgIChcc3VwcHJlc3NmaXJzdHBhcmFncmFwaGluZGVudCk6IHN1cHByZXNzLCBvciBkb24ndCBzdXBwcmVzcy4KICAgICAgICAoXGRvc3VwcHJlc3NmaXJzdHBhcmFncmFwaGluZGVudCk6IHRoZSBhY3R1YWwgZ29iYmxpbmcgb2YgaW5kZW50YXRpb24uCiAgICAgICAgKFxmb290bm90ZSk6IENvbXBlbnNhdGUgZm9yIHRoZSBoYW5naW5nLWluZGVudCBzaWRlLWVmZmVjdC4KICAgICAgICAoXG51bWhlYWQsIFxhcHBoZWFkLCBcdW5ubWhlYWQpOiBjYWxsIFxkb3N1cHByZXNzLi4uCiAgICAgICAgKiBtYWtlaW5mby9jbWRzLmMgKGNvbW1hbmRfdGFibGUpOiBhZGQgImZpcnN0cGFyYWdyYXBoaW5kZW50IgogICAgICAgIChhcyBjbV9maXJzdHBhcmFncmFwaGluZGVudCkKICAgICAgICAoc2V0X2ZpcnN0cGFyYWdyYXBoaW5kZW50LCBjbV9maXJzdHBhcmFncmFwaGluZGVudCk6IGltcGxlbWVudAogICAgICAgIEBmaXJzdHBhcmFncmFwaGluZGVudCBwYXJzaW5nIG9mIG9wdGlvbnMuCiAgICAgICAgKiBtYWtlaW5mby9tYWtlaW5mby5oOiBkZWNsYXJlICJkb19maXJzdF9wYXJfaW5kZW50Ii4KICAgICAgICAqIG1ha2VpbmZvL3NlY3Rpb25pbmcuYyAoc2VjdGlvbmluZ191bmRlcnNjb3JlKTogc3VwcHJlc3MKICAgICAgICBpbmRlbnRhdGlvbiBpZiByZXF1ZXN0ZWQuCiAgICAgICAgKiBkb2MvdGV4aW5mby50eGk6IGRvY3VtZW50IGl0LgoKICAgICAgICAqIGRvYy90ZXhpbmZvLnRleCAoXGluZGVudCk6IG92ZXJyaWRlIFxpbmRlbnQgcHJpbWl0aXZlIHRvCiAgICAgICAgY2xlYXIgXGV2ZXJ5cGFyLgogICAgICAgIChccHRleGluZGVudCk6IGZvciBzYXZpbmcvcmVzdG9yaW5nIFxpbmRlbnQgaW4gQHRleC4KICAgICAgICAoXGZvb3Rub3RlKTogTmV1dHJhbGlzZSB0aGUgZWZmZWN0IG9mIEBpbmRlbnQKICAgICAgICB3aXRoaW4gYSBmb290bm90ZS4KICAgICAgICAqIG1ha2VpbmZvL2NtZHMuYyAoY29tbWFuZF90YWJsZSk6IGFkZCAiaW5kZW50IiAoYXMgY21faW5kZW50KS4KICAgICAgICAoY21faW5kZW50KTogdW4taW5oaWJpdF9wYXJhZ3JhcGhfaW5kZW50YXRpb24uCiAgICAgICAgKiBkb2MvdGV4aW5mby50eGk6IGRvY3VtZW50IGl0LgoKICAgICAgICAqIGRvYy90ZXhpbmZvLnR4aSAoQ29udmVudGlvbnMpOiByZW1vdmUgc3B1cmlvdXMgZXh0cmEgdmVydGljYWwgc3BhY2UKICAgICAgICBmcm9tIGJ1bGxldGVkIGl0ZW1pemUgd2hpY2ggc3RhcnRzIHdpdGggYSBxdW90ZS4KCiAgICAgICAgKiBtYWtlaW5mby9jbWRzLmMgKGNvbW1hbmRfdGFibGUpOiBmaXggQG5vdmFsaWRhdGUgZGVmaW5pdGlvbi4KCgoJKiBJbnN0YWxsZWQgY2hhbmdlcyBmcm9tIEphbiBmb3IgQGltYWdlIHN1cHBvcnQgaW4gSW5mbyBmb3JtYXQ6CgoJMjAwMy0wNC0xNCAgSmFuIE5pZXV3ZW5odWl6ZW4gIDxqYW5uZWtlQGdudS5vcmc+CgkqIGluZm8vZGlzcGxheS5jIChkaXNwbGF5X3VwZGF0ZV9vbmVfd2luZG93KTogU2tpcCBuZXcgc3R5bGUKCWltYWdlIHRhZy9jb29raWUuCgoJMjAwMy0wNC0wOSAgSmFuIE5pZXV3ZW5odWl6ZW4gIDxqYW5uZWtlQGdudS5vcmc+CgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKGNtX2ltYWdlKTogV3JpdGUgXkBeSFtpbWFnZSAuLi5eQF5IXSB0YWcuCgoKCSogbWFrZWluZm8vaHRtbC5jIChodG1sX291dHB1dF9oZWFkKTogdXNlIDxzdHlsZT4gdG8gZ2V0IHRoZQoJcmVndWxhciByb21hbiBmb250IGluc3RlYWQgb2YgdHlwZXdyaXRlciBmb3IgQGZvcm1hdCBhbmQgQGRpc3BsYXk7CglsaWtld2lzZSB0byByZWR1Y2UgdGhlIGZvbnQgc2l6ZSBmb3IgQHNtYWxsKi4gIFN1Z2dlc3Rpb24gZnJvbToKCSJUb3JzdGVuIEJyb25nZXIiIDxicm9uZ2VyQHBoeXNpay5yd3RoLWFhY2hlbi5kZT4sIDIwIEFwciAyMDAzCgkxMTowMzo1OSArMDIwMC4KCjIwMDMtMDQtMTggICAgPGthcmxAZ251Lm9yZz4KCgkqIGNvbmZpZ3VyZS5hYyAobmN1cnNlcy90ZXJtY2FwLmgpOiBtb3ZlIHRlc3QgdG8gYWZ0ZXIgdGVybWxpYidzCglkZWZpbml0aW9uLCBvZiBjb3Vyc2UuICBSZXBvcnRlZCBieSBOb3J0b24gQWxsZW4KCTxhbGxlbkBodWFycC5oYXJ2YXJkLmVkdT4sIDE4IEFwciAyMDAzIDEzOjMxOjM1IC0wNDAwLgoKCSogY29uZmlndXJlLmFjOiByZW1vdmUgY29tbWEgZnJvbSBjb21tZW50IGluIEFDX1RSWV9MSU5LIHByb2dyYW0sCgl0byBhdm9pZCBzcHVyaW91cyBtaXNpbnRlcnByZXRhdGlvbiBhcyBhbiBhcmd1bWVudCBkZWxpbWl0ZXIuCgoyMDAzLTA0LTA4ICAgIDxrYXJsQGdudS5vcmc+CgoJKiBtYWtlaW5mby9tYWtlaW5mby5jICh1c2FnZSk6IGF2b2lkIGRvdWJsZSBibGFuayBsaW5lLgoKMjAwMy0wNC0wNSAgICA8a2FybEBnbnUub3JnPgoKCSogTWFrZWZpbGUuYW0gKGFsbCBvZiB0aGVtKTogdXNlICQoVkFSKSBpbnN0ZWFkIG9mIEBWQVJALCBzaW5jZQoJYXV0b21ha2Ugbm93IGVtaXRzIGRlZmluaXRpb25zIGZvciBhbGwgc3Vic3RpdHV0ZWQgdmFyaWFibGVzLgoKCSogbWFrZWluZm8vbWFrZWluZm8uaCAoREVGQVVMVF9TUExJVF9TSVpFKTogaW5jcmVhc2UgdG8gMzAwLDAwMC4KCShTUExJVF9TSVpFX1RIUkVTSE9MRCk6IGluY3JlYXNlIHRvIDUwMCwwMDAuCglJbXBsaWNpdCBzdWdnZXN0aW9uIHZpYSBHZXJhbGQgUGZlaWZlciA8cGZlaWZlckBkYmFpLnR1d2llbi5hYy5hdD4uCgoyMDAzLTA0LTA0ICAgIDxrYXJsQGdudS5vcmc+CgoJKiB1dGlsL3RleGkyZHZpIChyZXBsYWNlX2VtcHR5KTogbmV3IHZhcmlhYmxlIHRvIGRvIHRoZSBlbXB0eSBwYXRoCgllbGVtZW50IGRldGVjdGlvbjsgZG9uJ3QgaGFyZHdpcmUgcGF0aCBzZXBhcmF0b3IgYXMgOi4KCjIwMDMtMDQtMDIgICAgPGthcmxAZ251Lm9yZz4KCgkqIGRvYy90eGktcGwudGV4OiBuZXcgZmlsZSwgZnJvbSBwb2xha0BnbnUub3JnLgoJKiBkb2MvTWFrZWZpbGUuYW0gKFRYSV9YTEFURSk6IGFkZCBpdC4KCjIwMDMtMDQtMDEgICAgPGthcmxAZ251Lm9yZz4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKG1haW4pOiBjb3JyZWN0IHdvcmRpbmcgb2YgaHRtbC9uby1oZWFkZXJzL3NwbGl0CgllcnJvciBtZXNzYWdlLCBhbmQgZG9uJ3QgY29tcGxhaW4gaWYgb3V0cHV0IGlzIHRvIHN0ZG91dC4KCgkqIG1ha2VpbmZvL2luc2VydGlvbi5jIChlbmRfaW5zZXJ0aW9uKTogZm9yIEBlbmQgbWVudSBodG1sIG91dHB1dCwKCWRvbid0IG91dHB1dCA8L3VsPiBpZiBub19oZWFkZXJzLiAgUmVwb3J0IGZyb206IEplc3BlcgoJSGFyZGVyIDxoYXJkZXJAaWZhLmF1LmRrPiwgMDEgQXByIDIwMDMgMDA6MDA6MzcgKzAyMDAuCgoJKiBpbmZvL2luZm9tYXAuYyAoZmV0Y2hfdXNlcl9tYXBzKTogZG9uJ3QgY29tcGxhaW4gaWYgLmluZm8KCQlkb2Vzbid0IGV4aXN0LgoKMjAwMy0wMy0zMSAgICA8a2FybEBnbnUub3JnPgoKCSogbWFrZWluZm8vbGFuZy5jIChpc284ODU5XzJfbWFwKTogbmV3IGVuY29kaW5nIG1hcC4KCShlbmNvZGluZ190YWJsZSk6IGVuYWJsZSBpdC4KCgkqIGluZm8vcGN0ZXJtLmMgKHBjX3VwX2xpbmUpOiB1c2UgTUFYIGluc3RlYWQgb2YgbWF4IChubyBsb25nZXIKCWRlZmluZWQpLiAgUmVwb3J0ZWQgYnkgUmljaGFyZCBEYXdlcy4KCgkqIGRvYy90ZXhpbmZvLnR4aSAoZG9jdW1lbnRlbmNvZGluZyk6IG1lbnRpb24gdGhhdCBhbGwgcHJvY2Vzc29ycwoJcmVjb2duaXplIHRoZSBjb21tYW5kLgoKMjAwMy0wMy0zMCAgICA8a2FybEBnbnUub3JnPgoKCSogbWFrZWluZm8vbGFuZy5jIChjbV9zcGVjaWFsX2NoYXJhY3Rlcik6IGluY29ycmVjdGx5IGFkZGVkIGh0bWwKCXNlcXVlbmNlcyBmb3IgQG9lIGFuZCBAT0UgZXZlbiBpbiBpbmZvIG91dHB1dC4KCjIwMDMtMDMtMjUgICAgPGthcmxAZ251Lm9yZz4KCgkqIHV0aWwvc3JjbGlzdC50eHQgKENPUFlJTkcpOiBnZXQgZnJvbSBnbnVsaWIvZG9jLCBub3QgZ251bGliLgoKMjAwMy0wMy0yNCAgICA8a2FybEBnbnUub3JnPgoKCSogVE9ETzogbmVlZCB0byB3cml0ZSByZWFsIGRlZmluaXRpb24gb2YgSW5mbyBmb3JtYXQuCgoJKiBtYWtlaW5mby9ub2RlLmMgKGNtX25vZGUpOiB1c2UgJm5ic3A7IGluc3RlYWQgb2YgYCAnLCB0byBhdm9pZAoJbGluZSBicmVha3MuCgoyMDAzLTAzLTIyICAgIDxrYXJsQGdudS5vcmc+CgoJKiBtYWtlaW5mby9ub2RlLmMgKGNtX25vZGUpOiBvdXRwdXQgYSBzcGFjZSBhZnRlciB0aGUgTm9kZTogYW5kCglzaW1pbGFyIGhlYWRlcnMsIHNpbmNlIEJvYiB3YW50cyBvbmUuCgoJKiBpbmZvL3BjdGVybS5jIChNSU4sTUFYKTogbW92ZWQgdG8gc3lzdGVtLmguCgkqIGluZm8vc2Vzc2lvbi5jIChNSU4pOiBtb3ZlZCB0byBzeXN0ZW0uaC4KCSogbWFrZWluZm8vc2VjdGlvbmluZy5jIChNSU4pOiBtb3ZlIHRvIHN5c3RlbS5oLgoJKiBsaWIvc3lzdGVtLmggKE1JTixNQVgpOiBkZWZpbmUgaGVyZS4KCgkqIG1ha2VpbmZvL3NlY3Rpb25pbmcuYyAoc2VjdGlvbmluZ19odG1sKTogZG9uJ3QgZ28gc21hbGxlciB0aGFuIDxoMz4uCglSZXBvcnRlZCBieSBCb2IuCgkoTUlOKTogbmV3IG1hY3JvLgoKCSogaW5mby9zZXNzaW9uLmMgKE1JTikgW01JTl06ICN1bmRlZiBmaXJzdCBpZiBhbHJlYWR5ICNkZWZpbmUnZC4KCgkqIGRvYy90ZXhpbmZvLnRleCAoXG5vZGV4eHgpOiB1c2UgYSBjb250cm9sIHNlcXVlbmNlIGluc3RlYWQgb2YKCWJyYWNrZXRzIHRvIHBhcnNlIHRoZSBwYXJ0cyBvZiBAbm9kZS4gIE90aGVyd2lzZSBub2RlIG5hbWVzIHdpdGgKCWJyYWNrZXRzIGNhdXNlIHNwdXJpb3VzIG91dHB1dC4gIFJlcG9ydGVkIGJ5IEJvYi4KCShceHJlZnByaW50bm9kZW5hbWUpOiBzZXBhcmF0ZSB0aGlzIG91dCBmcm9tCglceHJlZlgsIGZvciBlYXNpZXIgcmVkZWZpbmluZyBieSBCb2IuCgoyMDAzLTAzLTE4ICAgIDxrYXJsQGdudS5vcmc+CgoJKiBtYWtlaW5mby9pbnNlcnRpb24uYyAoY21faXRlbSk6IGVuc3VyZSB3ZSBkb24ndCBnbyBvZmYgdGhlIGVuZAoJb2YgdGhlIHN0cmluZyB3aGVuIHVzaW5nIHN0cm5jbXAuICBGcm9tOiBQZXRlciBOIExld2lzCgk8cGV0ZXJAc3RhaXJ3YXlzLmNvbS5hdT4sIDEzIE1hciAyMDAzIDE2OjA4OjI3ICswODAwLgoKCSogZG9jL3RleGluZm8udHhpIChSYXcgRm9ybWF0dGVyIENvbW1hbmRzKTogbWVudGlvbiB1c2luZyBcZ2RlZgoJd2l0aGluIEB0ZXgsIG5vdCBcZGVmLgoKMjAwMy0wMy0xMiAgICA8a2FybEBnbnUub3JnPgoKCSogZG9jL3RleGluZm8udHhpIChQcmVwYXJpbmcgZm9yIFRlWCk6IG1lbnRpb24gZXh0cmEgY29sb25zLgoKMjAwMy0wMy0wNyAgICA8a2FybEBnbnUub3JnPgoKCSogZG9jL3RleGluZm8udGV4IChcLyk6IG5ldyBjb21tYW5kIHRvIGFsbG93IGEgbGluZSBicmVhay4KCShccHRleHNsYXNoKTogZm9yIHNhdmluZy9yZXN0b3JpbmcgcHJpbWl0aXZlIFwvIGluIEB0ZXguCgkqIG1ha2VpbmZvL2NtZHMuYyAoY29tbWFuZF90YWJsZSk6IGFkZCAiLyIgKGFzIGNtX25vX29wKS4KCSogbWFrZWluZm8vbWFrZWluZm8uYyAoc2VsZl9kZWxpbWl0aW5nKTogYWRkIC8uCgkqIGRvYy90ZXhpbmZvLnR4aSAoTGluZSBCcmVha3MsIENvbW1hbmQgU3VtbWFyeSk6IGRvY3VtZW50IGl0LgoJU3VnZ2VzdGlvbiBmcm9tIHdsLgoKCSogZG9jL3RleGluZm8udGV4IChcaHlwaGVuYXRpb24pOiB0aW1lLXN0YW1wLgoKMjAwMy0wMy0wNiAgICA8a2FybEBnbnUub3JnPgoKCSogaW5mby9zZXNzaW9uLmMgKG5lYXJlc3RfeHJlZik6IG5ldyBmbi4KCShpbmZvX21lbnVfb3JfcmVmX2l0ZW0pOiBjYWxsIGl0IHdoZW4gd2UgYXJlCglzZWFyY2hpbmcgZm9yIHhyZWZzLCBpbnN0ZWFkIG9mIGp1c3QgbG9va2luZyBvbgoJdGhlIGN1cnJlbnQgbGluZS4KCSogaW5mby9pbmZvLXV0aWxzLmMgKGluZm9fY29weV9yZWZlcmVuY2UpOiBuZXcgZm4uCgkqIGluZm8vaW5mby11dGlscy5oIChpbmZvX2NvcHlfcmVmZXJlbmNlKTogZGVjbGFyZS4KCUJ1ZyByZXBvcnQgZnJvbTogcmljaEBwaGVrZGEuZnJlZXNlcnZlLmNvLnVrLAoJMDQgTWFyIDIwMDMgMTc6NTE6NDcgKzAwMDAuCgoJKiAqLy5nZGJpbml0OiBzZXQgZW52IE1BTExPQ19DSEVDS18uCgoJMjAwMy0wMy0wNiAgUmFscGggU2NobGVpY2hlciAgPHJzQG51bmF0YWsuYWxsZ2FldS5vcmc+CgkqIG1ha2VpbmZvL2ZpbGVzLmggKGdldF9maWxlX2luZm9faW5fcGF0aCk6IERlY2xhcmUgZnVuY3Rpb24uCgkqIG1ha2VpbmZvL2ZpbGVzLmMgKGdldF9maWxlX2luZm9faW5fcGF0aCk6IFJlbW92ZSBzdGF0aWMga2V5d29yZC4KCSogbWFrZWluZm8vbWFrZWluZm8uYyAoY21faW1hZ2UpOiBMb29rdXAgaW1hZ2UgZmlsZSBuYW1lIGluIHRoZQoJc2VhcmNoIHBhdGggZm9yIGluY2x1ZGUgZmlsZXMuCgoyMDAzLTAzLTA1ICAgIDxrYXJsQGdudS5vcmc+CgoJKiBtYWtlaW5mby9tYWtlaW5mby5jIChpbnNlcnRfdG9wbGV2ZWxfc3ViZGlyZWN0b3J5KTogYWx3YXlzIG1ha2UKCXN1YmRpcmVjdG9yeSBmb3IgaHRtbC4gQmVmb3JlLCBpZiB0aGUgY3VycmVudCBkaXJlY3RvcnkgaGFwcGVuZWQKCXRvIGJlIG5hbWVkIGBmb28nIGFuZCB0aGUgQHNldGZpbGVuYW1lIHdhcyBmb28uaW5mbywgd2Ugd291bGQKCXdyaXRlIHRoZSBzcGxpdCBodG1sIGZpbGVzIGludG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiAgUmVwb3J0ZWQKCWJ5IHJpY2hAcGhla2RhLmZyZWVzZXJ2ZS5jby51aywgMDEgTWFyIDIwMDMgMTI6MDM6MTMgKzAwMDAuCgoJKiBtYWtlaW5mby9maWxlcy5jIChmaWxlbmFtZV9wYXJ0KTogc2ltcGxpZnkgYXNzaWdubWVudC4KCjIwMDMtMDItMjQgICAgPGthcmxAZ251Lm9yZz4KCgkqIG1ha2VpbmZvL2luc2VydGlvbi5jIChnZXRfaXRlbV9mdW5jdGlvbik6IGNoZWNrIGZvciBAaXRlbSBpbgoJYXJndW1lbnQgdG8gQGl0ZW1pemUuICBSZXBvcnQgZnJvbTogRHVtYXMgUGF0cmljZQoJPGR1bWFzQGNlbnRyZS1jaXJlZC5mcj4sIDI0IEZlYiAyMDAzIDEzOjEzOjUyICswMTAwLgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAocmVtZW1iZXJfYnJhY2UpOiBzYXkgYGJyYWNlcycgaW5zdGVhZCBvZgoJYHsuLi59Jywgc2luY2Ugb2Z0ZW4gd2UgZG9uJ3QgYWN0dWFsbHkgZXhwZWN0IHRleHQgaW5zaWRlIHRoZQoJYnJhY2VzLgoKMjAwMy0wMi0yMSAgICA8a2FybEBnbnUub3JnPgoKCSogYWNsb2NhbC5tNDogYXV0b21ha2UgMS43LjMuCgoyMDAzLTAyLTE5ICAgIDxrYXJsQGdudS5vcmc+CgoJKiBkb2MvaW5mby1zdG5kLnRleGk6IG9taXQgYWxsIG5vZGUgcG9pbnRlcnMuCgoyMDAzLTAyLTE4ICAgIDxrYXJsQGdudS5vcmc+CgoJKiB1dGlsL3RleGluZGV4LmMgKG1ha2V0ZW1wbmFtZSk6IHVzZSBhbHJlYWR5LXNldCBgdGVtcGRpcicgaW5zdGVhZAoJb2YgaGFsZi1yZWRvaW5nIHRoZSBsb2dpYy4KCShjb25jYXQpOiBvbmx5IG5lZWQgdHdvIGFyZ3MsIG5vdCB0aHJlZTsgY2hhbmdlIGNhbGxlcnMuCgkocGVycm9yX3dpdGhfbmFtZSk6IHJlYWxseSBjYWxsIHBlcnJvciwgcHV0dGluZwoJdGhlIG5hbWUgZmlyc3QgYSBsYSBnY2MuCgkocGZhdGFsX3dpdGhfbmFtZSk6IGNhbGwgcGVycm9yX3dpdGhfbmFtZS4KCgkqIHV0aWwvdGV4aTJkdmkgKGdldF94cmVmX2ZpbGVzKTogYSBmaWxlIHdob3NlIGZpcnN0IGxpbmUgaXMKCVxpbnB1dCB0ZXhpbmZvIGlzIG5vdCBhbiBpbmRleCBmaWxlLiAgUmVwb3J0IGZyb206IEFudG9uIEVydGwKCTxhbnRvbkBhMC5jb21wbGFuZy50dXdpZW4uYWMuYXQ+LCAxOCBGZWIgMjAwMyAxNDo0MTo0NyArMDEwMC4KCjIwMDMtMDItMTYgICAgPGthcmxAZ251Lm9yZz4KCgkqIG1ha2VpbmZvL2luZGV4LmMgKGluaXRfaW5kaWNlcyk6IGRvbid0IHRyeSB0byBmcmVlIGluZGV4ZXMgdGhhdAoJdW5kZWZpbmRleCBhbHJlYWR5IGZyZWVkLiAgUmVwb3J0IGZyb206IEFya2FkaXVzegoJTWlza2lld2ljeiA8bWlzaWVrQHBsZC5PUkcuUEw+LAoJMTUgRmViIDIwMDMgMTM6MjI6NDkgKzAxMDAuCgoJKiBjb25maWd1cmUuYWMgKGN1cnNlcyk6IGZvcmdvdCB0byBxdW90ZSBhcmcgdG8gQUNfVFJZX0xJTksuCglGcm9tIHZvanRhIGFuZCB0ZSwgMTYgRmViIDIwMDMgMDE6Mzc6MDkgKzAxMDAuCgoyMDAzLTAyLTEzICAgIDxrYXJsQGdudS5vcmc+CgoJKiBtYWtlaW5mby9pbnNlcnRpb24uYyAoYmVnaW5faW5zZXJ0aW9uKTogZm9yIGh0bWwgY2FydG91Y2hlCglvdXRwdXQsIGFkZCBjbGFzcz0iY2FydG91Y2hlIi4gIFN1Z2dlc3Rpb24gZnJvbSBTdGVwaGVuLgoKMjAwMy0wMi0xMSAgICA8a2FybEBnbnUub3JnPgoKCSogSW5zdGFsbGVkIHBhdGNoOgoJMjAwMy0wMi0xMCAgICBQZXRlciBCcmVpdGVubG9obmVyIDxwZWJAbXBwbXUubXBnLmRlPgoJKiBpbmZvL2luZGljZXMuYywgaW5mby9pbmZvLmMsIGluZm8vaW5mby5oLCBpbmZvL25vZGVtZW51LmMsCglpbmZvL3Nlc3Npb24uYywgaW5mby93aW5kb3cuYywgbWFrZWluZm8vZGVmdW4uYywgbWFrZWluZm8vaHRtbC5jLAoJbWFrZWluZm8vaW5kZXguYywgbWFrZWluZm8vaW5zZXJ0aW9uLmMsIG1ha2VpbmZvL21ha2VpbmZvLmMsCgltYWtlaW5mby9tYWtlaW5mby5oLCBtYWtlaW5mby9ub2RlLmM6IGRlY2xhcmUgYWxsIGNvbnN0YW50CglzdHJpbmdzIGFzIHN1Y2ggaW4gb3JkZXIgdG8gYXZvaWQgbG90cyBvZiBnY2Mgd2FybmluZ3MgKGZvcgoJLS1kaXNhYmxlLW5scyBhbmQgbWF5YmUgd2l0aG91dCB0aGF0IGFzIHdlbGwpLgoKCSogZG9jL3RleGluZm8udGV4IChccmVnaXN0ZXJlZHN5bWJvbCk6IG5ldyBjb21tYW5kIGZvciBBcm5vbGQuCgoJKiB1dGlsL2Rpci1leGFtcGxlOiBkYyB0byBiYXNpY3MuCgoJKiBkb2MvdGV4aW5mby50eGkgKERlZmluaW5nIE1hY3Jvcyk6IGRvY3VtZW50IG5ldyByZXF1aXJlbWVudHMgb24KCW1hY3JvIG5hbWVzLiAgUmVwb3J0IGZyb206IEFscGVyIEVyc295Cgk8ZGlydEBndGsub3JnPiwgMTEgRmViIDIwMDMgMDU6MTE6MzUgKzAyMDAuCgoyMDAzLTAyLTA3ICAgIDxrYXJsQGdudS5vcmc+CgoJKiBtYWtlaW5mby9pbnNlcnRpb24uYyAoYmVnaW5faW5zZXJ0aW9uKTogb3V0cHV0IGEgdGFibGUgd2l0aCBhIGJvcmRlcgoJZm9yIEBjYXJ0b3VjaGUuCgkoZW5kX2luc2VydGlvbik6IGVuZCB0aGUgdGFibGUuCglGcm9tOiBKb3NodWEgTiBQcml0aWtpbiA8dmlzaG51QHBvYm94LmNvbT4sCgk3IEZlYiAyMDAzIDIxOjU5OjQ5ICswNTMwLgoKMjAwMy0wMi0wNSAgICA8a2FybEBnbnUub3JnPgoKCSogaW5mby9pbmZvLmMgKHNob3J0X29wdGlvbnMpOiBhZGQgaC4KCShtYWluKTogdHJlYXQgLWggc2FtZSBhcyAtLWhlbHAuCiAgICAgICAgRnJvbTogcndocm9uQGVhcnRobGluay5uZXQsIDMxIEF1ZyAyMDAyIDE5OjU2OjU3IC0wNDAwLgoKCSogaW5mby9zZXNzaW9uLmMgKHNob3dfaXNlYXJjaF9wcm9tcHQpOiBjb21wdXRlIGxlbmd0aCBvZgoJdHJhbnNsYXRlZCAiRmFpbGluZyAiLCBkb24ndCBhc3N1bWUgMjAgaXMgZW5vdWdoLgoJKEl0J3MgMjEgYnl0ZXMgaW4gVVRGLTggUnVzc2lhbi4pCglSZXBvcnQgZnJvbTogdmFyZ0B0aHN1bjEuamluci5ydSwKCTI1IEp1bCAyMDAyIDE1OjI2OjQyICswNDAwLgoKCSogaW5mby9kaXNwbGF5LmMgKGRpc3BsYXlfdXBkYXRlX29uZV93aW5kb3cpOiBkb24ndCBkZXJlZmVuY2UgbnVsbAoJYGVudHJ5JyAoaWYgdGhlIHNjcmVlbiBpcyB2ZXJ5IHNtYWxsKS4KCUZyb206IERhbm55IFlvbyA8ZHlvb0Boa24uZWVjcy5iZXJrZWxleS5lZHU+LAoJOCBKdWwgMjAwMiAxNToyMToxNCAtMDcwMC4KCgkqIGRvYy8uY3ZzaWdub3JlOiBpZ25vcmUgKi5pbmZvIGFuZCB0ZXhwdXQubG9nLgoKMjAwMy0wMi0wNCAgICA8a2FybEBnbnUub3JnPgoKCSogVmVyc2lvbiA0LjUgKHRoYXQgaW5mbyBidWcgd2FzIGEga2lsbGVyKS4KCgkqIGNvbmZpZ3VyZS5hYyAoQUNfQ0hFQ0tfSEVBREVSUyk6IHRlc3QgZm9yIHN5cy9zdHJlYW0uaC4KCShzeXMvcHRlbS5oKTogd3JpdGUgc2VwYXJhdGUgdGVzdCBzaW5jZSBpdCBuZWVkcwoJc3lzL3N0cmVhbS5oIG9uIFNvbGFyaXMuICBGcm9tOiBMYXJzIEhlY2tpbmcKCTxsaGVja2luZ0BubXJjLnVjYy5pZT4sIDQgRmViIDIwMDMgMTk6NDc6NTQgKzAwMDAuCgoJKiBkb2MvdGV4aW5mby50eGk6IGNvbW1lbnQgYWJvdXQgdXNpbmcgQGV4YW1wbGUgaW5zdGVhZCBvZgoJQHZlcmJhdGltIGR1ZSB0byBhdXRvbWFrZSBkb2Vzbid0IGFwcGx5IGFueSBtb3JlLgoKMjAwMy0wMi0wMyAgICA8a2FybEBnbnUub3JnPgoKCSogZG9jL3RleGluZm8udGV4IChcdmVyYmF0aW1pbmNsdWRlKTogdXNlIFxvdGhlciBpbnN0ZWFkIG9mIDEyLgoKMjAwMy0wMi0wMiAgICA8a2FybEBnbnUub3JnPgoKCSogZG9jL3RleGluZm8udGV4IChcY2FydG91Y2hlKTogZXhwbGljaXQgXHBhciwgYXMgQGNhcnRvdWNoZSBkb2VzCglub3Qgd29yayBpbnNpZGUgYSBwYXJhZ3JhcGguCglCdWcgcmVwb3J0IGZyb206IFN0ZXBoZW4gR2lsZGVhIDxnaWxkZWFAaW50b3VjaHN5cy5jb20+LAoJMTUgT2N0IDE5OTkgMDk6MjU6MzEgRURULgoKMjAwMy0wMi0wMSAgICA8a2FybEBnbnUub3JnPgoKCSogdXRpbC9maXgtaW5mby1kaXIsIHV0aWwvZ2VuLWRpci1ub2RlLCB1dGlsL2luc3RhbGwtaW5mby1odG1sLAoJdXRpbC90ZXgzcGF0Y2gsIHV0aWwvdHhpdGV4dGVzdDogdGVzdCAmJiB0ZXN0IGluc3RlYWQgb2YgdGVzdCAtYSwgZXRjLgoJRnJvbTogUGF1bCBFZ2dlcnQgPGVnZ2VydEB0d2luc3VuLmNvbT4sCgkzMSBKYW4gMjAwMyAyMjo1OTozNSAtMDgwMC4KCjIwMDMtMDEtMzEgICAgPGthcmxAZ251Lm9yZz4KCgkqIGRvYy90ZXhpbmZvLnRleCAoXGdyb3VwYm94KTogXG5ld2JveC4KCShcdmZpbGxsaW1pdCk6IG5ldyBcZGVmLgoJKFxncm91cCk6IGluc2VydCBhbiBleHBsaWNpdCBccGFnZSBpZiB0aGUgZ3JvdXAgaXMKCWJpZywgYW5kIGRvZXNuJ3QgZml0IG9uIHRoZSBjdXJyZW50IHBhZ2UuCglPdGhlcndpc2UsIHRoZSBwcmV2aW91cyBwYWdlIGdldHMgc3RyZXRjaGVkIHVucmVhc29uYWJseS4KCUZyb206IFdlcm5lciBMRU1CRVJHIDx3bEBnbnUub3JnPiwKCTMxIEphbiAyMDAzIDE5OjE5OjMzICswMTAwLgoKCSogZG9jL3RleGluZm8udGV4IChcZGVmYXJnc2NvbW1vbmVuZGluZyk6IGluc2VydCBccGVuYWx0eTEwMDAyLgoJKFxwYXJzZWJvZHljb21tb24pOiBjaGVjayBmb3IgXHBlbmFsdHkxMDAwMiB0bwoJYWxsb3cgYSBicmVha3BvaW50IGJldHdlZW4gQGRlZidzLCBub3QgMTAwMDAuCgoJKiBkb2MvdGV4aW5mby50ZXggKFxkZWZhcmdzY29tbW9uZW5kaW5nKTogbmV3IG1hY3JvLgoJKFxkZWZ1bmFyZ3MsIGV0Yy4pOiBjYWxsIGl0LCBpbnN0ZWFkIG9mIHJlcGVhdGluZyBjb2RlLgoJKE5vIGZ1bmN0aW9uYWwgY2hhbmdlLikKCgkqIGluZm8vZmlsZXN5cy5jIChleHRyYWN0X2NvbG9uX3VuaXQpOiByZXR1cm4gbGFzdCBjb2xvbiB1bml0CgliZWZvcmUgY2xhaW1pbmcgd2UncmUgZG9uZS4gIFJlcG9ydCBmcm9tOiBBbGV4YW5kcmUgRHVyZXQtTHV0egoJPGR1cmV0X2dAbHJkZS5lcGl0YS5mcj4sIDMxIEphbiAyMDAzIDE4OjE4OjIyICswMTAwLgoKCSogVmVyc2lvbiA0LjQuCgoyMDAzLTAxLTMwICAgIDxrYXJsQGdudS5vcmc+CgoJKiBkb2MvdGV4aW5mby50ZXggKFxkb3N1YmluZCk6IG5lZWQgZnVsbCBleHBhbnNpb24gb2YgdGhlIGluZGV4CgkJc29ydCBzdHJpbmcuCgoJKiBkb2MvdGV4aW5mby50ZXggKFxzdGFydGNvbnRlbnRzLFxjb250ZW50cyxcc2hvcnRjb250ZW50cyk6Cglhc3NpZ25tZW50cyB0byBccGFnZW5vIG11c3QgYmUgXGdsb2JhbDsgb3RoZXJ3aXNlCglpZiBpdCdzIHJ1biBpbnNpZGUgYSBncm91cCwgYXMgaW4KCUBpZm5vdGh0bWwKCUBjb250ZW50cwoJQGVuZCBpZm5vdGh0bWwKCXRoZSByZXN0IG9mIHRoZSBwYWdlcyBpbiB0aGUgZG9jdW1lbnQgZ2V0IHJvbWFuIG51bWVyYWxzLgoJUmVwb3J0ZWQgYnkgcmxwLgoKCSogZG9jL3RleGluZm8udGV4IChcZG9zdWJpbmQpOiBuZWVkIHNwYWNlIGJldHdlZW4gZW50cnkgYW5kCglzdWJlbnRyeSBpbiBwcmludGVkIG91dHB1dC4gIEJ1ZyByZXBvcnQgZnJvbTogUm9iaW4gTGVlIFBvd2VsbAoJPHJscG93ZWxsQGRpZ2l0YWxraW5nZG9tLm9yZz4sIDMwIEphbiAyMDAzIDE1OjEzOjQ4IC0wODAwLgoJKFxkZWZvcGhlYWQsIFxkZWZjdmFyaGVhZCwgXGRlZml2YXJoZWFkZXIpOiBzaG93CgltZXRob2QgbmFtZSBpbiBcY29kZS4KCgkqIGRvYy90ZXhpbmZvLnRleCAoXGRvc3ViaW5kKTogbmVlZCB0byBcdnNraXAtXHNraXAwLCBub3QKCS1cbGFzdHNraXAsIHNpbmNlIFxsYXN0c2tpcCBnZXRzIGNsZWFyZWQgYnkgdGhlIFxub2JyZWFrLiAgQnVnCglyZXBvcnQgZnJvbTogV2VybmVyIExFTUJFUkcgPHdsQGdudS5vcmc+LCAyOSBKYW4gMjAwMyAwOToxODoxNgoJKzAxMDAuCgoyMDAzLTAxLTI5ICAgIDxrYXJsQGdudS5vcmc+CgoJKiBpbmZvL3NpZ25hbHMuYyAoaW5pdGlhbGl6ZV9pbmZvX3NpZ25hbF9oYW5kbGVyKTogaW5pdGlhbGl6ZSB0aGUKCXNpZ2FjdGlvbiBzdHJ1Y3QgaGVyZSwgbm90IHN0YXRpY2FsbHksIHNpbmNlIHdlIGNhbid0IHJlbHkgb24gdGhlCglvcmRlcmluZyBvZiB0aGUgZWxlbWVudHM7IGl0J3MgZGlmZmVyZW50IG9uIElSSVggYW5kIEZyZWVCU0QsIGF0CglsZWFzdC4gIFBhdGNoIGZyb206IGV6cmEgcGVpc2FjaCA8ZXBlaXNhY2hAbWVkLXh0YWwuYnUuZWR1PiwgMjgKCUphbiAyMDAzIDEzOjA5OjE4IC0wNTAwIChFU1QpLgoKMjAwMy0wMS0yOCAgICA8a2FybEBnbnUub3JnPgoKCSogdXRpbC9kaXItZXhhbXBsZTogYnJpbmcgZW1hY3Mgc2VjdGlvbiB1cCB0byBkYXRlLgoKMjAwMy0wMS0yNyAgICA8a2FybEBnbnUub3JnPgoKCSogY29uZmlndXJlLmFjOiBwcmV0ZXN0IHZlcnNpb24gNC4zZC4KCiAgICAgICAgTW9yZSBjaGFuZ2VzIHRvIHVzZSBAIGZ1bGx5IGluIHRoZSAuYXV4IGZpbGUsIG90aGVyd2lzZSBzb21ldGhpbmcKCWFzIHNpbXBsZSBhczoKICAgICAgICAgIEBub2RlIGZvbwogICAgICAgICAgQHNlY3Rpb24gQGNvZGV7Zm9vfQogICAgICAgIHdhcyBicm9rZW4uCgkqIGRvYy90ZXhpbmZvLnRleCAoXHNldHJlZik6IGNhbGwgXGF0ZHVtbWllcy4KCShcYXRkdW1taWVzKTogbmV3IG1hY3JvLCBiYXNlZCBvbiBcaW5kZXhkdW1taWVzLgoJKFxjb21tb25kdW1taWVzKTogc2VwYXJhdGUgb3V0IGNvbW1vbiByZWRlZmluaXRpb25zLgoJKFxsYnJhY2VhdGNtZCxccmJyYWNlYXRjbWQpOiBAeyBhbmQgQH0sIGFzIHN0cmluZ3MuCgoJKiBjb25maWd1cmUuYWMgKEFDX0NIRUNLX0ZVTkNTKTogYWRkIHNpZ2FjdGlvbi4KCSogaW5mby9zaWduYWxzLmMgKHNldF90ZXJtc2lnKSBbSEFWRV9TSUdBQ1RJT05dOiBzZWNvbmQgYXJnIHRvCglzaWdhY3Rpb24gaXMgYSBwb2ludGVyLCBub3QgYSBzdHJ1Y3QuCgoJRnJvbTogQUlEQSBTaGlucmEgPGFpZGEtc0BqY29tLmhvbWUubmUuanA+LCAyNSBKYW4gMjAwMyAxODo1MzoxOSArMDkwMDoKCSogaW5mby9zaWduYWxzLmMgKG1hc2tfdGVybXNpZyxzZXRfdGVybXNpZyxyZXN0b3JlX3Rlcm1zaWcpOiBuZXcgZm5zLgoJKGluaXRpYWxpemVfaW5mb19zaWduYWxfaGFuZGxlcik6IHVzZSBzaWdhY3Rpb24gaWYgd2UgaGF2ZSBpdC4KCShpbmZvX3NpZ25hbF9wcm9jKTogcmVyZWFkIHdpbmRvdyBzaXplIGluIGNhc2UgaXQgaGFzIGNoYW5nZWQKCXdoaWxlIHdlIHdlcmUgc3VzcGVuZGVkLgoKCU1vbiBKYW4gMjcgMDg6MDk6MDcgQ0VUIDIwMDMgU3RlcGFuIEthc2FsIDxrYXNhbEBtYXRoLmNhcy5jej4KCSogZG9jL3RleGluZm8udGV4IChcYWN1dGVhY2NlbnQpOiB0aGUgd29ya2Fyb3VuZCBpcyBubyBsb25nZXIgbmVlZGVkLgoJKFx4cmVmWCk6IFxub3JtYWx0dXJub2ZmYWN0aXZlIGNoYW5nZWQgdG8gXHR1cm5vZmZhY3RpdmUsIHNpbmNlCgl3ZSBcb3RoZXJiYWNrc2xhc2ggcmlnaHQgYWZ0ZXJ3YXJkcyBhbnl3YXkuCgoyMDAzLTAxLTI0ICAgIDxrYXJsQGdudS5vcmc+CgoJKiBkb2MvdGV4aW5mby50ZXg6IFRoZXNlIGNoYW5nZXMgYWxsb3cgJyBpbiBub2RlIGFuZCBhbmNob3IgbmFtZXM6CgkoXGludGVybmFsc2V0cSk6IHVzZSBAIGluc3RlYWQgb2YgJyBhcyB0aGUgZXNjYXBlCgljaGFyYWN0ZXIgZm9yIC5hdXggZmlsZXMuCgkoXHhyZGVmKTogZG9uJ3QgbmVlZCB0byBwbGF5IGdhbWVzIHdpdGggXCBub3cuCgkoXHJlYWRhdXhmaWxlKTogZG9uJ3Qgc2V0IGNhdGNvZGUnIHRvIDAsIGFuZCBkbwoJc2V0IGNhdGNvZGVAIHRvIDAuCgoJVGhlc2UgY2hhbmdlcyBhbGxvdyBcIGluIG5vZGUgYW5kIGFuY2hvciBuYW1lcwoJKHRoaXMgd29ya2VkIG9uY2UsIGJ1dCB3ZSBicm9rZSBpdCBzb21ld2hlcmUgYWxvbmcgdGhlIGxpbmUpOgoJKFxzZXRyZWYsIFx4cmVmWCwgXGRvc2V0cSwgXHJlZngpOiBjYWxsIFxvdGhlcmJhY2tzbGFzaC4KCShcb3RoZXJiYWNrc2xhc2gpOiBuZXcgbWFjcm8gdG8gbWFrZSBhbiBhY3RpdmUKCWJhY2tzbGFzaCBleHBhbmQgdG8gYSBsaXRlcmFsIGBcJyBjaGFyYWN0ZXIgd2l0aAoJY2F0Y29kZSBvdGhlci4KCgoJKiBjb25maWd1cmUuYWM6IHByZXRlc3QgdmVyc2lvbiA0LjNjLgoKCSogZG9jL3RleGluZm8udGV4IChcc21hbGxlbnZpcm9ubWVudHMpOiByZW1vdmUsIGFuZCBjaGFuZ2UgY2FsbGVycy4KICAgICAgICAoXHNtYWxsLi4ueCk6IHJlbmFtZSB0byBqdXN0IFxzbWFsbC4uLgoJKFxzbWFsbGV4YW1wbGVmb250cyk6IHNldCB0byBcc21hbGxmb250cywgbm90Cglcc21hbGxlcmZvbnRzLCBhdCBsZWFzdCB1bnRpbCBwZW9wbGUgY29tcGxhaW4gYWdhaW4uCgoJVGhlIGVmZmVjdCBvZiB0aGVzZSBjaGFuZ2VzIGlzIHRvIG1ha2UgdGhlCglAc21hbGwuLi4gY29tbWFuZHMgcHJpbnQgaW4gYSBzbWFsbGVyIGZvbnQgKDlwdCkKCWZvciBhbGwgZm9ybWF0cywgbm90IGp1c3QgQHNtYWxsYm9vayBhbmQgQGFmaXZlcGFwZXIuCgoKCSogaW5mby9maWxlc3lzLmMgKGV4dHJhY3RfY29sb25fdW5pdCk6IHJld3JpdGUgc28gdGhhdCBhbiBlbXB0eQoJdW5pdCBkb2VzIG5vdCBzdG9wIHVzIGZyb20gcHJvY2Vzc2luZyB0aGUgcmVzdC4gIFJlcG9ydCBmcm9tOgoJV2VybmVyIExFTUJFUkcgPHdsQGdudS5vcmc+LCAyNCBKYW4gMjAwMyAwNzowMTowOSArMDEwMC4KCgoJRGF0ZTogTW9uLCAwMiBEZWMgMjAwMiAwMTowNjozNyArMDkwMAoJRnJvbTogQUlEQSBTaGlucmEgPGFpZGEtc0BqY29tLmhvbWUubmUuanA+CgoJKiAiaW5mbyBpbmZva2V5IiBzYXlzIGtleSBiaW5kaW5ncyBpbiAuaW5mbyB0YWtlIHByZWNlZGVuY2Ugb3ZlcgoJdGhlIGRlZmF1bHQgbWFwcGluZywgYnV0IHRoaXMgaXMgbm90IHRydWUuIE9ubHkgYmluZGluZ3MgdG8KCXVuZGVmaW5lZCBrZXlzIHRha2UgZWZmZWN0cy4KCSogQmluZGluZyB0byAiaW52YWxpZCIgYWN0aW9uIHJlc3VsdHMgY3Jhc2guCgkqIE5vIGNvZGUgdG8gZGlzYWJsZSBwcmVmaXgga2V5cy4gU29tZSB1c2VycyBtaWdodCB3YW50IHRvIGJpbmQKCWVzY2FwZSBvciBDLXggdG8gYSBub24tcHJlZml4IGtleSwgYnV0IHRoaXMgZG9lcyBub3QgYWxsb3dlZC4KCS4uLiBJdCBhbHdheXMgYWxsb3dzICdeaCcgaW4gaW5jcmVtZW50YWwKCXNlYXJjaC4gU29tZSB0ZXJtaW5hbHMgbWFwICdiYWNrc3BhY2UnIHRvICdeaCcgYnkgZGVmYXVsdC4KCiAgICAgICAgVGhlc2UgYXJlIHRoZSBjaGFuZ2VzOgoJKiBpbmZvL3Nlc3Npb24uYyAoaW5jcmVtZW50YWxfc2VhcmNoKTogY2hlY2sgZm9yIENvbnRyb2woJ2gnKSBhcwoJd2VsbCBhcyBERUwuCgkqIGluZm8vaW5mb21hcC5jIChmaW5kX2Z1bmN0aW9uX2tleXNlcSwgYWRkX2Z1bmN0aW9uX2tleXNlcSwKCXJlbW92ZV9mdW5jdGlvbl9rZXlzZXEpOiBuZXcgZm5zLgoJKGtleW1hcF9jb3B5X2tleW1hcCwga2V5bWFwX2Rpc2NhcmRfa2V5bWFwKTogdGFrZQoJcm9vdG1hcCBhcmcuCgpXZWQgSmFuIDIyIDE0OjI1OjM5IENFVCAyMDAzICBTdGVwYW4gS2FzYWwgIDxrYXNhbEBtYXRoLmNhcy5jej4KCgkqIGRvYy90ZXhpbmZvLnRleCAoXGZvb3Rub3Rlenp6KTogdGhlIHZlcnkgYmVnaW5uaW5nIHdhcyBtb3ZlZAoJICB0byBcc3RhcnRmb290aW5zOwoJICAoXHN0YXJ0Zm9vdGlucyk6IG5ldyBtYWNybzsKCSAgKFxtdWx0aXRhYmxlLCBcZG90YWJsZSk6IHJlZGVmaW5lIFxzdGFydGZvb3RpbnMgdG8gZ2V0IGZvb3Rub3RlcwoJICBzYXZlZCwgdXNlIFxjcmNyd2l0aGZvb3Rub3RlczsKCSAgKFxjcmNyd2l0aGZvb3Rub3Rlcyk6IGNoZWNrIGZvciBwb3N0cG9uZWQgZm9vdG5vdGVzIGVhY2ggdGltZSBhIHJvdwoJICBvZiBhIG11bHRpdGFibGUgaXMgZmluaXNoZWQ7CgkgIChcdGFiKTogbm8gbG9uZ2VyIGRlZmluZWQgZ2xvYmFsbHksIGp1c3QgXGxldCB0byAmIGluc2lkZQoJICBAbXVsdGl0YWJsZS4KCjIwMDMtMDEtMjIgICAgPGthcmxAZ251Lm9yZz4KCgkqIGRvYy90ZXhpbmZvLnRleDogZG9jIGZpeC4KCSogZG9jL3RleGluZm8udGV4IChcZG9mb290bm90ZSk6IHJlbmFtZSBmcm9tIFxmb290bm90ZXp6ei4KCiAgICAgICAgV2VkIEphbiAyMiAxNDoyMzo1MSBDRVQgMjAwMyAgU3RlcGFuIEthc2FsICA8a2FzYWxAbWF0aC5jYXMuY3o+CgkqIGRvYy90ZXhpbmZvLnRleCAoXGNhcnRvdWNoZSwgXGZvb3Rub3Rlenp6KTogcmVtb3ZlZCBcbG9uZywgaXQKCSAgaGFzIG5vIGVmZmVjdCBmb3IgbWFjcm9zIHdpdGhvdXQgYSBwYXJhbWV0ZXI7CiAgICAgICAgKFxmb0B0LCBcZkBAdCwgXGZAdCwgXEBmb290KTogcmVtb3ZlZCwgbG9jYWwgXGRlZiBoYXMgbm8gZWZmZWN0LgoKMjAwMy0wMS0yMSAgICA8a2FybEBnbnUub3JnPgoKCSogZG9jL3RleGluZm8udHhpIChPdXRwdXQgRm9ybWF0cyk6IG5ldyBzZWN0aW9uLgoKMjAwMy0wMS0xOSAgICA8a2FybEBnbnUub3JnPgoKCSogY29uZmlndXJlLmFjOiBwcmV0ZXN0IHZlcnNpb24gNC4zYi4KCgkqIG1ha2VpbmZvL3Rlc3RzL2luY2x1ZGUtdmFsdWU6IG5lZWQgLUkgJHNyY2Rpci4KCgkqIHV0aWwvdGV4aW5kZXguYzoKCSogdXRpbC9pbnN0YWxsLWluZm8uYzoKCSogaW5mby9pbmZva2V5LmM6CgkqIGluZm8vaW5mby5jOgoJKiBtYWtlaW5mby9tYWtlaW5mby5jOgoJKiB1dGlsL3RleGkyZHZpOiAyMDAzLgoKMjAwMy0wMS0xOCAgICA8a2FybEBnbnUub3JnPgoKCSogbWFrZWluZm8vbm9kZS5jOiBhZGQgYChwZXJoYXBzIGluY29ycmVjdCBzZWN0aW9uaW5nPyknIHRvIHNvbWUgb2YKCXRoZSBlcnJvciBtZXNzYWdlcy4gVW5mb3J0dW5hdGVseSB3ZSBjYW4ndCBlYXNpbHkKCWRldGVybWluZSB3aGVuIHRoZSBlcnJvciBzdGVtcyBmcm9tIGFjdHVhbAoJbWlzdHlwZWQgbm9kZSBwb2ludGVycywgYW5kIHdoZW4gZnJvbSBpbmNvcnJlY3QKCW1lbnVzIGNhdXNpbmcgdGhlIGltcGxpY2l0IHBvaW50ZXIgY3JlYXRpb24gdG8gZmFpbC4KCjIwMDMtMDEtMTcgICAgPGthcmxAZ251Lm9yZz4KCglUaHUgSmFuIDE2IDEwOjI4OjMyIENFVCAyMDAzICBTdGVwYW4gS2FzYWwgIDxrYXNhbEBtYXRoLmNhcy5jej4KCSogZG9jL3RleGluZm8udGV4IChccmVmeCk6IFNldCBsb2NhbGx5IFxpbmRleGR1bW1pZXMgYmVmb3JlIGV4cGFuZGluZwoJICB0aGUgXGNzbmFtZSwgaW4gY2FzZSB0aGVyZSBhcmUgbWFjcm9zOyBmb3JlaWduIGFjY2VudHMsIGZvciBleGFtcGxlLgoJQnVnIHJlcG9ydCBmcm9tIER1bWFzIFBhdHJpY2UgPGR1bWFzQGNlbnRyZS1jaXJlZC5mcj4uCgoJKiBtYWtlaW5mby9tYWtlaW5mby5jIChDT01NQU5EX0NIQVIpOiBuZXcgbWFjcm8sIGFuZCBleGNsdWRlIF4gYW5kCglfIGZyb20gY29tbWFuZCBuYW1lcy4KCShyZWFkX3Rva2VuKTogY2FsbCBpdC4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmggKGNvbW1hbmRfY2hhcik6IG1vdmUgdG8gbWFrZWluZm8uYywgc2luY2UKCWl0J3Mgb25seSB1c2VkIGluIG9uZSBwbGFjZS4KCjIwMDMtMDEtMTYgICAgPGthcmxAZ251Lm9yZz4KCgkqIFRPRE86IEBlbHNlCgoyMDAzLTAxLTEyICAgIDxrYXJsQGdudS5vcmc+CgoJKiBkb2MvdGV4aW5mby50ZXggKFxkb3VubWFjcm8pOiBzaW1wbGlmeSBtZXRob2QgZm9yIHJlbW92aW5nIGZyb20KCW1hY3JvIGxpc3QuICBGcm9tIFN0ZXBhbi4gIChBbHNvIHJlbmFtZSBmcm9tIFx1bm1hY3JveHh4LikKCShcdW5tYWNyb2RvKTogbmV3IG1hY3JvLCBjYWxsZWQgd2l0aCBuZXcgbWV0aG9kLgoKCSogZG9jL3RleGluZm8udGV4IChcZG90Q2hhciwgcXVlc3RDaGFyLCBleGNsYW1DaGFyLCBjb2xvbkNoYXIsCglzZW1pQ2hhciwgY29tbWFDaGFyLCB1bmRlckNoYXIpOiBuYW1lcyBmb3IgY2F0Y29kZSBjaGFycywgZGVmaW5lZCB1c2luZwoJXGNoYXJkZWYuICBGcm9tIFN0ZXBhbi4KCgkqIGRvYy90ZXhpbmZvLnRleCAoXGNvbmRpdGlvbmFsc3VjY2VlZCk6IGJhY2sgdG8gdGhlIGVhc3kKCWRlZmluaXRpb24sIHNpbmNlIEBzZXQgaXMgZ2xvYmFsIG5vdy4gIEZyb20gU3RlcGFuLgoKCSogZG9jL3RleGluZm8udGV4IChcZG9pZmNsZWFyLFxkb2lmc2V0KTogdXNlIFxsZXRcbmV4dCBpbnN0ZWFkIG9mCglcZXhwYW5kYWZ0ZXIsIHNvIHRoYXQgd2UnbGwgc3VjY2VlZCBvbiBubwoJY29uZGl0aW9uYWwgdGV4dC4gIEZyb20gU3RlcGFuLgoJQWxzbyByZW5hbWUgZnJvbSBcaWZjbGVhcnh4eCBhbmQgXGlmc2V0eHh4LgoKCSogZG9jL3RleGluZm8udGV4IChcZXhwYW5kYWJsZXZhbHVlKTogZ2l2ZSBhIFxtZXNzYWdlIGlmIHRoZQoJdmFyaWFibGUgaXMgbm90IHNldC4gIEJhc2VkIG9uIHBhdGNoIGZyb20gU3RlcGFuLgoKCSogZG9jL3RleGluZm8udGV4IChcc2V0dXB0YWJsZSk6IGluc2VydCBhbiBhY3R1YWwgXHNwYWNlIGFmdGVyCglcdW5za2lwLiAgRnJvbSBTdGVwYW4uCgoJKiBkb2MvdGV4aW5mby50ZXggKFxrYmRpbnB1dHN0eWxlKTogZ2l2ZSBlcnJvciBpZiB1bmtub3duIGFyZ3VtZW50LAoJYW5kIGNhbGwgdGhlIG1hY3JvIHRvIHNldCB0aGUgZGVmYXVsdC4gIEZyb20gU3RlcGFuLgoKCSogZG9jL3RleGluZm8udGV4OiB0eXBvIGZyb20gU3RlcGFuLgoKCSogZG9jL3RleGluZm8udGV4IChcZG9jZW50ZXIpOiByZW5hbWUgZnJvbSBcY2VudGVyenp6IGFuZCBkbyBcaGZpbAoJaW5zdGVhZCBvZiB1c2luZyBwbGFpbidzIFxjZW50ZXJsaW5lIGFuZCBcaHNzLiAgQWxzbyBmb3JjZSBsaW5lCglicmVha3MgYmVmb3JlIGFuZCBhZnRlciBpbiBob3Jpem9udGFsIG1vZGUuCglCYXNlZCBvbiBwYXRjaCBmcm9tIFN0ZXBhbiwgMTEgQXByIDIwMDAgMTk6NDQ6MzEgKzAyMDAuCgoJKiBkb2MvdGV4aW5mby50ZXg6IHVzZSBcb3RoZXIgYW5kIFxhY3RpdmUgY29uc2lzdGVudGx5LgoJRnJvbTogU3RlcGFuIEthc2FsIDxrYXNhbEBzdXNlLmN6PiwgMTEgQXByIDIwMDAgMTk6NDQ6MzEgKzAyMDAuCgoJKiBtYWtlaW5mby9jbWRzLmMgKGhhbmRsZV9pbmNsdWRlKTogY2FsbCB0ZXh0X2V4cGFuc2lvbiBvbiB0aGUKCWZpbGVuYW1lLCBzbyBAdmFsdWUgY29uc3RydWN0cyBhcmUgZXhwYW5kZWQuCgoJKiBkb2MvdGV4aW5mby50eGkgKHZlcmJhdGltaW5jbHVkZSwgVXNpbmcgSW5jbHVkZSBGaWxlcyk6IG1lbnRpb24KCUB2YWx1ZSBleHBhbnNpb24uCglBbHNvLCB1cGRhdGUgc2FtcGxlcyB0byBiZSBjb3B5cmlnaHQgMjAwMy4KCgkqIGRvYy90ZXhpbmZvLnRleCAoXGRvdmVyYmF0aW1pbmNsdWRlLCBcdmVyYmF0aW16enopOiBleHBhbmQKCQkJQHZhbHVlKGJ1dCBub3RoaW5nIGVsc2UpLgoJQnVnIGZyb206IEFscGVyIEVyc295IDxhZXJzb3lAdGZ6Lm5ldD4sCgk2IEphbiAyMDAzIDEzOjE0OjI4ICswMjAwLgoKMjAwMy0wMS0xMSAgICA8a2FybEBnbnUub3JnPgoKCSogZG9jL3RleGluZm8udGV4IChcZGVmaW5lZHVtbXl3b3JkKTogbmV3IG1hY3JvLgoJKFxpbmRleGR1bW1pZXMpOiBjYWxsIGl0LCBpbnN0ZWFkIG9mIGRlZmluaW5nIGVhY2gKCWNvbW1hbmQgc2VwYXJhdGVseTsgbWFueSB0cmFpbGluZyBzcGFjZXMgaGFkIGJlZW4gb21pdHRlZC4KCUFsdGVybmF0ZSBpbXBsZW1lbnRhdGlvbiBvZiBhIHBhdGNoIGZyb206IFN0ZXBhbgoJS2FzYWwgPGthc2FsQG1hdGguY2FzLmN6PiwgMTAgSmFuIDIwMDMgMjI6NDI6MDUgKzAxMDAuCgoJKiBkb2MvdGV4aW5mby50ZXggKFxhY3V0ZWFjY2VudCk6IG5ldyBkZWZuLgoJKFxpbmRleGR1bW1pZXMpOiB1c2UgaXQgaW5zdGVhZCBvZiBcJyBpbiB0aGUgYXV4IGZpbGUuCglWYXJpYXRpb24gb2YgYSBwYXRjaCBmcm9tOiBTdGVwYW4gS2FzYWwgPGthc2FsQG1hdGguY2FzLmN6PiwKCTEwIEphbiAyMDAzIDIxOjI4OjQwICswMTAwLgoKCSogZG9jL3RleGluZm8udGV4OiBkb2MgZml4LgoKMjAwMy0wMS0xMCAgICA8a2FybEBnbnUub3JnPgoKCSogZG9jL3RleGluZm8udGV4IChcaW5kZXhub2ZvbnRzLCBcaW5kZXhkdW1taWVzKTogaGFuZGxlIG1vcmUKCQlhY2NlbnQgY29tbWFuZHMuCgkoXGluZGV4ZHVtbXlmb250KTogbm90IG5lZWRlZCwgdXNlIFxhc2lzIGluc3RlYWQuCgoJKiBkb2MvdGV4aW5mby50ZXggKFxpbmRleGR1bW1pZXMsXGluZGV4bm9mb250cyk6IGluZGVudCwgbm8gb3RoZXIKCQljaGFuZ2VzLgoKCSogZG9jL3RleGluZm8udGV4IChcY2hhcHRlciAuLiBcc3Vic3Vic2VjdGlvbik6IGluZGVudCB0aGUKCWRlZmluaXRpb25zOyBubyBvdGhlciBjaGFuZ2UuCgoJKiBkb2MvdGV4aW5mby50eGkgKE1hY3JvIGRldGFpbHMpOiBubyBtdWx0aXBsZS1saW5lIGFyZ3MgaXMKCQlhbm90aGVyIGxpbWl0YXRpb24uCgoJRnJpIEphbiAxMCAwNzoxMjoyMyBDRVQgMjAwMyBTdGVwYW4gS2FzYWwgPGthc2FsQG1hdGguY2FzLmN6PgogICAgICAgICogdGV4aW5mby50ZXggKFx3cml0ZXRvY2VudHJ5KTogVGhlCiAgICAgICAgICBjb21tb24gd29yayBvbiBidWlsZGluZyB0aGUgbGluZSBmb3IgXHdyaXRlXHRvY2ZpbGUgd2FzCiAgICAgICAgICBtb3ZlZCBpbnRvIHRoZSBtYWNybyBpdHNlbGYgYW5kIHRodXMgYWxsIGNhbGxlcnMgaGFzIGJlZW4gY2hhbmdlZC4KCjIwMDMtMDEtMDkgICAgPGthcmxAZ251Lm9yZz4KCgkqIGluZm8vc2Vzc2lvbi5jIChpbmNyZW1lbnRhbF9zZWFyY2gpOiBkb24ndCBpbnRlcnByZXQgdGhlCglgZnVuY3Rpb24nIGVsZW1lbnQgYXMgYW4gSW5mb0NvbW1hbmQgd2hlbiBpdCdzIHJlYWxseSBhIEtleW1hcC4KCVRoaXMgY2F1c2VkIGFycm93IGtleXMgdG8gYmUgaW5zZXJ0ZWQgbGl0ZXJhbGx5IHVuZGVyIFNvbGFyaXMsIGJ1dAoJbm90IEdOVS9MaW51eC4gIEJ1ZyByZXBvcnQgZnJvbTogSmVyZW15IExpbgoJPGpqbGluQE9DRi5CZXJrZWxleS5FRFU+LCA1IEphbiAyMDAzIDAxOjU5OjI5IC0wODAwLgoKCSogaW5mby9pbmZvbWFwLmM6IGFkZCBjb21tZW50IGFib3V0IHN0cmFuZ2UgcG9pbnRlciBjYXN0LgoKMjAwMy0wMS0wOCAgICA8a2FybEBnbnUub3JnPgoKCSogZG9jL3RleGluZm8udGV4IChcaWdub3JlbW9yZWNvbW1hbmRzKTogZGVmaW5lIFxFZGVmLi4uIGFuZAoJXGRlZi4uLnggZm9yIGFsbCBAZGVmLi4uIGNvbW1hbmRzLCBhbmQgdXNlIFxlbXB0eQoJaW5zdGVhZCBvZiBccmVsYXguICBCdWcgcmVwb3J0IGZyb20gUGF1bCBFZ2dlcnQKCTxlZ2dlcnRAdHdpbnN1bi5jb20+LCA3IEphbiAyMDAzIDIyOjI5OjA3IC0wODAwLgoKMjAwMy0wMS0wNiAgICA8a2FybEBnbnUub3JnPgoKCSogZG9jL3RleGluZm8udHhpICh0YWJsZSk6IG1lbnRpb24gQG9wdGlvbiBhcyBhIHVzZWZ1bCBpbmRpY2F0aW5nCgljb21tYW5kLCBhbmQgbmVlZCBmb3IgYmxhbmsgbGluZXMgYmVmb3JlIGFuZAoJYWZ0ZXIuICBTdWdnZXN0aW9uIGZyb206IEtldmluIFJ5ZGUKCTx1c2VyNDJAemlwLmNvbS5hdT4sIDAzIEphbiAyMDAzIDEwOjAyOjU1ICsxMDAwLgoKMjAwMy0wMS0wNSAgICA8a2FybEBnbnUub3JnPgoKCSogdXRpbC90ZXhpMmR2aTogbWFrZSBlZ3JlcCBhIHZhcmlhYmxlIChFR1JFUCkuICBTdWdnZXN0aW9uIGZyb206CglLdXJ0IEhvcm5payA8aG9ybmlrQGNpLnR1d2llbi5hYy5hdD4uCglBbHNvLCByZXBsYWNlIGZncmVwIHdpdGggZ3JlcC4KCgkqIGRvYy9NYWtlZmlsZS5hbSAoVFhJX1hMQVRFKTogaW5jbHVkZSB0eGktdHIudGV4IGZyb20gQWxwZXIgRXJzb3kKCTxkaXJ0QGd0ay5vcmc+LgoKMjAwMy0wMS0wMiAgICA8a2FybEBnbnUub3JnPgoKCSogbWFrZWluZm8vaW5zZXJ0aW9uLmMgKGVuZF9pbnNlcnRpb24pOiBpbiB0YWJsZSBjYXNlLCBjYWxsCgljbG9zZV9pbnNlcnRpb25fcGFyYWdyYXBoLiAgQnVnIHJlcG9ydCBmcm9tOiBLZXZpbgoJUnlkZSA8dXNlcjQyQHppcC5jb20uYXU+LCAwMyBKYW4gMjAwMyAwODowOTo1NCArMTAwMC4KCgkqIGRvYy90ZXhpbmZvLnRleDogcmVtb3ZlIHNwdXJpb3VzIENUUkwtRy4KCgkqIHV0aWwvc3JjbGlzdC50eHQ6IG1vcmUgbTQgZmlsZXMgZnJvbSBnbnVsaWIgbm93LgoKMjAwMy0wMS0wMSAgICA8a2FybEBnbnUub3JnPgoKCSogZG9jL3RleGluZm8udGV4IChcXyk6IG1vcmUgc3BhY2UgYWZ0ZXJ3YXJkcywgc28gX18gY29tZXMgb3V0CgliZXR0ZXIuICBOb3RpY2VkIGluIHRoZSBnY2MgbWFudWFsLgoKMjAwMi0xMi0zMSAgICA8a2FybEBnbnUub3JnPgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAodXNhZ2UpOiBvbWl0IGFsbCB0aGUgaGVscCBtZXNzYWdlIHdoZW4gc29tZXRoaW5nCglnb2VzIHdyb25nIGluIGFyZ3VtZW50IHBhcnNpbmcsIGFzIGludGVuZGVkLgoKMjAwMi0xMi0yNiAgICA8a2FybEBnbnUub3JnPgoKCSogZG9jL3RleGluZm8udGV4IChcaW5zZXJ0Y29weWluZyk6IGlnbm9yZSBAYywgQGNvbW1lbnQsIGFuZAoJQGlnbm9yZS4uLkBlbmQgaWdub3JlIGFzIGJlc3Qgd2UgY2FuLiAgUmVwb3J0IGZyb20KCSJKb3NlcGggUy4gTXllcnMiIDxqc20yOEBjYW0uYWMudWs+LCAyNCBEZWMgMjAwMgoJMTg6MDg6MTAgKzAwMDAgKEdNVCksIGZvciB0aGUgZ2NjIG1hbnVhbCwgd2hpY2gKCXVzZXMgdGhlc2UgY29uc3RydWN0cyBmb3IgYXV0b21hdGljIG1hbiBwYWdlIGdlbmVyYXRpb24uCgoyMDAyLTEyLTIzICAgIDxrYXJsQGdudS5vcmc+CgoJKiBkb2MvdGV4aW5mby50eGkgKGV4YW1wbGUpOiBub3RlIHRoYXQgVGV4aW5mbyBjb21tYW5kcyBhcmUKCQlleHBhbmRlZCwgcGx1cyBvdGhlciBjaGFuZ2VzLiAgU3VnZ2VzdGlvbiBmcm9tIE5lbHNvbiBCZWViZS4KCjIwMDItMTItMjAgICAgPGthcmxAZ251Lm9yZz4KCgkqIGNvbmZpZy5ndWVzczogdXBkYXRlIGZyb20gcHJlcC4KCjIwMDItMTItMTcgICAgPGthcmxAZ251Lm9yZz4KCgkqIG1ha2VpbmZvL3RleGluZm8uZHRkIChpbmRleHRlcm0pOiBpbmRleCBub3QgSU5ERVguCgkobm9kZSk6IG9ubHkgYW55IGJsb2NrLCBub3QganVzdCBwYXJhfG1lbnUuCgkqIG1ha2VpbmZvL3htbC5jICh0ZXhpbmZvbWxfZWxlbWVudF9saXN0KTogZm9ybWF0IGFuZCBsaWtlIGNhbgoJCWNvbnRhaW4gcGFyYS4KCUZyb206IEFscGVyIEVyc295IDxhZXJzb3lAdGZ6Lm5ldD4uCgoyMDAyLTEyLTE0ICAgIDxrYXJsQGdudS5vcmc+CgoJKiBkb2MvdGV4aW5mby50eGkgKG1ha2VpbmZvIGluIEVtYWNzKTogZG9lcyBub3QgcHJvbXB0IGZvcgoJZmlsZW5hbWUuCglGcm9tOiBLZXZpbiBSeWRlIDx1c2VyNDJAemlwLmNvbS5hdT4uCgoyMDAyLTEyLTEzICAgIDxrYXJsQGdudS5vcmc+CgoJKiBkb2MvdGV4aW5mby50eGk6IHNob3J0IHNhbXBsZSBuZWVkcyBAdG9wIChmcm9tIGphcyksIGdudSBzYW1wbGUKCWNhbiB1c2UgQHZlcmJhdGltIChhdXRvbWFrZSBmaXgpLgoKMjAwMi0xMi0xMSAgICA8a2FybEBnbnUub3JnPgoKCSogZG9jL3RleGluZm8udHhpOiB0eXBvcy4KCjIwMDItMTItMDcgICAgPGthcmxAZ251Lm9yZz4KCgkqIG1ha2VpbmZvL3htbC5jOiB1c2UgbG93ZXJjYXNlLCBhbGxvdyBtb3JlIGNoYXJzIGluIGlkJ3MuICBGcm9tOgoJSmFpbWUgRGF2aWxhIDxqZGF2aWxhQGVuZ3IudWNvbm4uZWR1PiwgNiBEZWMgMjAwMiAxMTowMDoyNSAtMDUwMC4KCjIwMDItMTItMDUgICAgPGthcmxAZ251Lm9yZz4KCgkqIHV0aWwvZGlyLWV4YW1wbGU6IGFscGhhYmV0aXplIG1ha2UuCgoJKiBORVdTOiBjaGFuZ2UgdGV4aW5mby50ZXggdXJsLgoKCSogZG9jL3RleGluZm8udGV4IChcb2JzdGV4d2Fybik6IGZpeCB1cmwncyB0byBUZVguUkVBRE1FIGFuZAoJdGV4aW5mby50ZXguCgoyMDAyLTEyLTAyICAgIDxrYXJsQGdudS5vcmc+CgoJKiBkb2MvdGV4aW5mby50eGkgKExpbmUgQnJlYWtzKTogZml4ZXMuCgoyMDAyLTEyLTAxICAgIDxrYXJsQGdudS5vcmc+CgoJKiBjb25maWd1cmUuYWM6IHByZXRlc3QgdmVyc2lvbiA0LjNhLgoKMjAwMi0xMS0zMCAgICA8a2FybEBnbnUub3JnPgoKCSogZG9jL01ha2VmaWxlLmFtICh0ZXhpbmZvKTogcmVzdG9yZSBydWxlIHNpbmNlIHRoaXMgd29uJ3QgcXVpdGUKCWJlIGZpeGVkIHVudGlsIGF1dG9tYWtlIDEuNy4yIG9yIGxhdGVyLgoKMjAwMi0xMS0yOSAxOToxOSAgZmVsb3kKCgkqIG1ha2VpbmZvL3htbC5jOiBGaXggdGhlIDxwYXJhPiZsdDsgYnVnIGluIFhNTCwgcmVwb3J0ZWQgYnkgSy4KCVJ5ZGUKCjIwMDItMTEtMjkgICAgPGthcmxAZ251Lm9yZz4KCgkqIGxpYi9zdHJkdXAuYzogZ251bGliIHVwZGF0ZS4KCjIwMDItMTEtMjkgIEFsZXhhbmRyZSBEdXJldC1MdXR6ICA8YWRsQGdudS5vcmc+CgoJKiBkb2MvTWFrZWZpbGUuYW0gKC50ZXhpLmluZm8sIHRleGluZm8pOiBSZW1vdmUuICBBdXRvbWFrZSAxLjcrCglubyBsb25nZXIgb3V0cHV0IGluZm8gZmlsZXMgaW4gdGhlIHNvdXJjZSB0cmVlLgoKMjAwMi0xMS0yNiAgICA8a2FybEBnbnUub3JnPgoKCSogbWFrZWluZm8vaW5zZXJ0aW9uLmMgKGNtX2luc2VydGlvbl9jb3B5aW5nKTogZmx1c2hfb3V0cHV0LCBzbyB0aGF0CglvdXRwdXRfcG9zaXRpb24gZ2V0cyB1cGRhdGVkLCB3aGljaCBpbiB0dXJuIG1ha2VzCgl0aGUgdGFnIHRhYmxlIHBvc2l0aW9ucyByZWZsZWN0IHRoZSBjb3B5aW5nIHRleHQuCglSZXBvcnQgZnJvbTogIlcuIEwuIEVzdGVzIiA8d2xlc3Rlc0B1bmNnLmVkdT4sIDE1CglOb3YgMjAwMiAxNTo1NzowNCAtMDUwMC4KCgkqIG1ha2VpbmZvL2luZGV4LmMgKGluaXRfaW5kaWNlcyk6IHVuZGVmaW5kZXggYWZ0ZXIgd2Uga25vdwoJbmFtZV9pbmRleF9hbGlzdFtpXSBpcyBub3QgbnVsbC4KCUZyb206ICJSb25hbGQgRi4gR3VpbG1ldHRlIiA8cmZnQG1vbmtleXMuY29tPiwgMjYgTm92IDIwMDIKCTAxOjA4OjA0IC0wODAwLgoKCSogZG9jL01ha2VmaWxlLmFtICh0ZXhpbmZvKTogZGVwZW5kIG9uIHZlcnNpb24KCWZpbGVzLiAgUmVwb3J0IGZyb206IEtldmluIFJ5ZGUKCTx1c2VyNDJAemlwLmNvbS5hdT4sIDI3IE5vdiAyMDAyIDA3OjUyOjU3ICsxMDAwLgoKMjAwMi0xMS0yNSAgICA8a2FybEBnbnUub3JnPgoKCSogbWFrZWluZm8vY21kcy5jIChjbV92ZXJiKTogdXNlIDx0dD4gbm90IDxwcmU+LCBhcyB0aGlzIGlzIGFuCglpbmxpbmUgY29uc3RydWN0LiAgQWxzbywgZGVjcmVtZW50Cglpbl9maXhlZF93aWR0aF9mb250LCBlbHNlIHRoZSBuZXh0IHBhcmFncmFwaCBkb2VzCglub3QgZ2V0IGEgPHA+LgoJUmVwb3J0IGZyb206IFRvcnN0ZW4gQnJvbmdlciA8YnJvbmdlckBwaHlzaWsucnd0aC1hYWNoZW4uZGU+CgkyNiBOb3YgMjAwMiAwMDozNzozNSArMDEwMC4KCgkqIGRvYy90ZXhpbmZvLnRleCAoXGRvc3BlY2lhbHMpOiBtdXN0IGluY2x1ZGUgYWxsIG90aGVyIGNoYXJhY3RlcnMKCXRoYXQgd2Ugc2V0IGFjdGl2ZSwgbmFtZWx5IDw+fF8iLCBvciB0aGV5IGdvdAoJbXlzdGVyaW91c2x5IGxvc3QgYXMgdGhlIGZpcnN0IGNoYXJhY3RlciBvbiBhCgl2ZXJiYXRpbSBsaW5lLgoJUmVwb3J0IGZyb206IFRvcnN0ZW4gQnJvbmdlciA8YnJvbmdlckBwaHlzaWsucnd0aC1hYWNoZW4uZGU+CgkyNSBOb3YgMjAwMiAxODoyNjoxMiArMDEwMC4KCgkoXGRvdmVyYmF0aW0pOiBpZ25vcmUgZXZlcnl0aGluZyB1cCB0byB0aGUgZmlyc3QKCV5eTSwgdG8gYXZvaWQgYW4gZXh0cmEgYmxhbmsgbGluZSBpbiB0aGUgb3V0cHV0LgoKCSogbGliL2dldG9wdCosIHN0cmR1cC5jLCB0ZW1wbmFtZS5jOiB1cGRhdGUgZnJvbSBnbnVsaWIgKGJydW5vCgljaGFuZ2VzICsgZ3BsKS4KCjIwMDItMTEtMjQgICAgPGthcmxAZ251Lm9yZz4KCgkqIGRvYy90ZXhpbmZvLnR4aSAoTXVsdGlwbGUgU3BhY2VzKTogeHJlZiB0aWUgcmF0aGVyIHcgZm9yCgl1bmJyZWFrYWJsZSBzcGFjZXMuCgoyMDAyLTExLTIyICAgIDxrYXJsQGdudS5vcmc+CgoJKiBkb2MvdGV4aW5mby50eGk6IGVkaXRvcmlhbCBjaGFuZ2VzIGZyb20gTWF4J3MgZWRpdG9yLgoKMjAwMi0xMS0yMSAgICA8a2FybEBnbnUub3JnPgoKCSogZG9jL3RleGluZm8udHhpIChDb252ZW50aW9ucyk6IGFkZCBpdGVtIGZvciBibGFuayBsaW5lcyBhcwoJcGFyYWdyYXBoIHNlcGFyYXRvci4gIFJlcG9ydCBmcm9tOiBNYXhpbSBNYXNpdXRpbgoJPG1heEByaXRsYWJzLmNvbT4sIDIxIE5vdiAyMDAyIDAwOjAzOjA3ICswMjAwLgoKMjAwMi0xMS0xOSAgICA8a2FybEBnbnUub3JnPgoKCSogdXRpbC9pbnN0YWxsLWluZm8uYyAoZW5zdXJlX2RpcmZpbGVfZXhpc3RzKTogZG9uJ3QgdHJhbnNsYXRlIHRoZSBgKgoJTWVudScga2V5d29yZC4gIFJlcG9ydCBmcm9tOiBJbmdvIEtyYWJiZQoJPGkua3JhYmJlQGRva29tLm5ldD4sIDE5IE5vdiAyMDAyIDA5OjI0OjQ1ICswMTAwLgoKMjAwMi0xMS0xOCAgICA8a2FybEBnbnUub3JnPgoKCSogcG8vLmN2c2lnbm9yZTogZXhjbHVkZSAqLmdtbyBpbnN0ZWFkIG9mIGxpc3RpbmcgZWFjaCBpbmRpdmlkdWFsbHkuCglGcm9tOiBGculk6XJpYyBMLiBXLiBNZXVuaWVyIDwwQHBlcnZhbGlkdXMubmV0PiwKCTE1IE5vdiAyMDAyIDIwOjE2OjA5IC0wMjAwIChCUlNUKS4KCgkqIGNvbmZpZ3VyZS5hYyAoLS1lbmFibGUtbXVsdGlwbGF0Zm9ybSk6IG5ldyBvcHRpb24gZm9yIHRlVGVYIGFuZAoJVGVYIExpdmUuICBGcm9tIHRlLgoKMjAwMi0xMS0xNCAgICA8a2FybEBnbnUub3JnPgoKCSogY29uZmlndXJlLmFjLCB1dGlsL3RleGkyZHZpLCBORVdTOiByZWxlYXNlIHZlcnNpb24gNC4zLgoKCSogdXRpbC90ZXhpMmR2aSwgbWtpbnN0YWxsZGlyczogdXNlIGBmb3IgdmFyPG5ld2xpbmU+ZG8iJyBpbnN0ZWFkCgkgb2YgIGBmb3IgdmFyOyBkbycsIGZvciBTb2xhcmlzLgoKCSogZG9jL3RleGluZm8udHhpIChtYXRoKTogZW1waGFzaXplIHRoYXQgbWFrZWluZm8gZG9lcyBub3QgaW50ZXJwcmV0Cgl0aGUgYXJnLgoKCSogY29uZmlnLntndWVzcyxzdWJ9OiB1cGRhdGUgZnJvbSBwcmVwLgoKMjAwMi0xMS0xMyAgICA8a2FybEBnbnUub3JnPgoKCSogY29uZmlndXJlLmFjOiBwcmV0ZXN0IHZlcnNpb24gNC4yZi4KCgkqIG1ha2VpbmZvL3htbC5jIChJTkRFWF9TRVApOiBkZWZpbmUgYXMgYSBzdHJpbmcgdGhhdCB3aWxsIG5ldmVyCglhcHBlYXIsIHNvIHRoYXQgd2UgZG9uJ3QgdHJ5IHRvIGJyZWFrIGluZGV4IHRlcm1zCglhdCBjb21tYXMuICBJZGVhIGZyb206IFN0ZXBhbiBLYXNhbAoJPGthc2FsQG1hdGguY2FzLmN6PiwgcHJvYmxlbSByZXBvcnRlZCBieSBKb3PpCglGb25zZWNhIDxqX3JfZm9uc2VjYUB5YWhvby5jby51az4uCgoyMDAyLTExLTEyICAgIDxrYXJsQGdudS5vcmc+CgoJKiBtYWtlaW5mby9tYWtlaW5mby5jOiBtYWtlIHN1cmUgY29tbWFuZCBpcyBub24tbnVsbCwgZm9yIHNha2Ugb2YgYm9ndXMKCWlucHV0IChcZGVmXHh7fSkuICBSZXBvcnQgZnJvbQoJTmVpbC5UdXJ0b25AYnJvYWRjb20uY29tLCBkZWJpYW4gYnVnIzE2ODY4OS4KCgkqIG1ha2VpbmZvL01ha2VmaWxlLmFtIChtYWtlaW5mb19TT1VSQ0VTKTogcmVtb3ZlIGRvY2Jvb2suW2NoXSwKCXBlciBmZWxveSB0aGUgZG9jYm9vayBzdHVmZiBpcyBpbiB4bWwuW2NoXSBub3cuCgoyMDAyLTExLTEyIDE5OjQ4ICBmZWxveQoKCSogbWFrZWluZm8vOiBsYW5nLmMsIG1ha2VpbmZvLmM6IChkb2Nib29rKSBFbnRpdGllcyBmb3IgYWNjZW50ZWQKCWNoYXJhY3RlcnMgYXJlIHdyaXR0ZW4gY29ycmVjdGx5CgoyMDAyLTExLTEyIDE5OjM0ICBmZWxveQoKCSogbWFrZWluZm8veG1sLmM6IChkb2Nib29rKSBEbyBub3QgZXhwYW5kIEBzZXQgY29udGVudHMKCjIwMDItMTEtMTEgMTg6MTQgIGZlbG95CgoJKiBtYWtlaW5mby94bWwuYzogQmV0dGVyIDxib29raW5mbz4gc3VwcG9ydAoKMjAwMi0xMS0xMSAxMzozNyAgZmVsb3kKCgkqIG1ha2VpbmZvLzogY21kcy5jLCBpbnNlcnRpb24uYywgeG1sLmMsIHhtbC5oOiBCZXR0ZXIgdXNlIG9mCgk8Ym9va2luZm8+IGFuZCA8YWJzdHJhY3Q+IHdpdGggZG9jYm9vayBvdXRwdXQKCjIwMDItMTEtMTEgMDE6NTcgIGZlbG95CgoJKiBtYWtlaW5mby86IGRlZnVuLmMsIHhtbC5jLCB4bWwuaDogUmVtb3ZlZCBhbGwgcmVmZXJlbmNlcyB0bwoJZG9jYm9vay5bY2hdIHdoaWNoIHdhcyB0aGUgb2xkIHNvdXJjZXMgZm9yIGRvY2Jvb2sgb3V0cHV0LCByZXBsYWNlZAoJYnkgeG1sLltjaF0KCjIwMDItMTEtMTAgMjM6MzEgIGZlbG95CgoJKiBtYWtlaW5mby86IGluc2VydGlvbi5jLCB4bWwuYywgeG1sLmg6IFNvbWUgYnVnZml4ZXMgaW4gZG9jYm9vawoJb3V0cHV0CgoyMDAyLTExLTA5IDE4OjQ3ICBmZWxveQoKCSogbWFrZWluZm8vaW5zZXJ0aW9uLmM6IEluIERvY2Jvb2ssIENvcHlpbmcgcGFyYWdyYXBoIGlzIG5vdAoJaW5zZXJ0ZWQgYXQgQGNvcHlpbmcvQGVuZCBjb3B5aW5nIHBvaW50LgoKMjAwMi0xMS0wOCAyMTowMSAgZmVsb3kKCgkqIG1ha2VpbmZvL3htbC5jOiB0YWtlIGNhcmUgb2YgaW5kZXh0ZXJtIGF0IGJlZ2lubmluZyBvZiB0YWJsZQoKMjAwMi0xMS0wOCAyMDo1MiAgZmVsb3kKCgkqIG1ha2VpbmZvL3htbC5jOiBUZXh0IGJlZm9yZSBmaXJzdCBAaXRlbSBpbiBAdGFibGUgaXMgaW5zZXJ0ZWQgYXMKCXRoZSA8dGl0bGU+IG9mIDx2YXJpYWJsZWxpc3Q+CgoyMDAyLTExLTA4IDIwOjI0ICBmZWxveQoKCSogbWFrZWluZm8veG1sLmM6IHN1YnN1YmhlYWRpbmcgaXMgc2ltcGxlc2VjdCBhbmQgbm90IHNlY3QzCgoyMDAyLTExLTA4IDE5OjEzICBmZWxveQoKCSogbWFrZWluZm8vOiBtYWtlaW5mby5jLCB4bWwuYywgeG1sLmg6IG1ha2VpbmZvL3htbC5jICh4bWxfaWQpOgoJQWRkZWQgbW9yZSBmb3JiaWRkZW4gY2hhcmFjdGVycyBtYWtlaW5mby97eG1sLmMseG1sLmgsbWFrZWluZm8uY306CglEZWZpbmVkIHhtbF9pbl94cmVmX3Rva2VuIHZhcmlhYmxlCgoyMDAyLTExLTA3ICAgIDxrYXJsQGdudS5vcmc+CgoJKiBtYWtlaW5mby9zZWN0aW9uaW5nLmM6IGRvYy4KCSogbWFrZWluZm8vc2VjdGlvbmluZy5jOiByZXZlcnQgbGFzdCBjaGFuZ2UsIGl0IGJyZWFrcyBnY2MuCgoJKiBtYWtlaW5mby94bWwuYyAoeG1sLWFkZF9jaGFyKTogZG9uJ3QgaW5zZXJ0IEJPT0tJTkZPIGFuZCBBQlNUUkFDVAoJaWYgZXhlY3V0aW5nX3N0cmluZy4gIEZyb20gSm9zPyBGb25zZWNhLgoKCSogY29uZmlndXJlLmFjOiBwcmV0ZXN0IHZlcnNpb24gNC4yZS4KCglGcm9tOiBKb3PpIEZvbnNlY2EgPGpfcl9mb25zZWNhQHlhaG9vLmNvLnVrPiwKICAgICAgICAgICAgICA3IE5vdiAyMDAyIDAwOjMxOjI4ICswMDAwLgoJKiBtYWtlaW5mby9pbmRleC5jIChjbV9wcmludGluZGV4KTogaW4gZG9jYm9vayBjYXNlLCBwYXNzIHRoZQoJdW5leHBhbmRlZCBpbmRleCB0ZXJtLgoJKiBtYWtlaW5mby94bWwuYyAoeG1sX2luc2VydF9pbmRleHRlcm0pOiBleGVjdXRlX3N0cmluZyBpbnN0ZWFkIG9mCgkJaW5zZXJ0X3N0cmluZy4KCShPdGhlcndpc2UsIDw+JiBhcmUgbm90IGVzY2FwZWQgaW4gdGhlIGRvY2Jvb2sgaW5kZXggb3V0cHV0LikKCgkqIHV0aWwvZGlyLWV4YW1wbGU6IHNlZC4KCgkqIG1ha2VpbmZvL2xhbmcuYzogY29weXJpZ2h0LgoJKiBtYWtlaW5mby9sYW5nLmg6IGNvcHlyaWdodC4KCjIwMDItMTEtMDcgIFN0ZXBoZW4gR2lsZGVhCgoJKiBtYWtlaW5mby9zZWN0aW9uaW5nLmMgKHNlY3Rpb25pbmdfaHRtbCk6IGhhdmUgQSB0YWcgZW5jbG9zZQogICAgICAgICAgc2VjdGlvbiBuYW1lIHJhdGhlciB0aGFuIHByZWNlZGluZyBpdC4KCgkqIG1ha2VpbmZvL3RvYy5jIChjb250ZW50c191cGRhdGVfaHRtbCk6IHB1dCBuYW1lIGF0dHJpYnV0ZSBpbnRvCiAgICAgICAgICBleGlzdGluZyBBIHRhZyByYXRoZXIgdGhhbiBtYWtpbmcgYSBzZXBhcmF0ZSB0YWcgZm9yIGl0LgoKMjAwMi0xMS0wNyAgU3RlcGhlbiBHaWxkZWEKCgkqIG1ha2VpbmZvL2xhbmcuYzogc3VwcG9ydCBAZG9jdW1lbnRlbmNvZGluZyBVUy1BU0NJSToKCVB1dCBOVUxMIGF0IGVuZCBvZiBtYXAgdGFibGVzIHNvIHRoZXkgY2FuIGJlIG9mIHZhcnlpbmcgbGVuZ3Rocy4KCSh1c19hc2NpaV9tYXApOiBuZXcgaXNvX21hcF90eXBlIHRhYmxlLgoJKGVuY29kaW5nX3RhYmxlKTogYWRkIFVTX0FTQ0lJLgoJKGNtX3NlYXJjaF9pc29fbWFwKTogZG9uJ3QgYXNzdW1lIGFsbCBtYXBzIGFyZSB0aGUgc2FtZSBsZW5ndGguCgkoY21fZG9jdW1lbnRlbmNvZGluZyk6IGRvbid0IGFzc3VtZSBJU09fODg1OV8xIGlzIGZpcnN0IHRhYmxlIGVudHJ5LgoJKiBtYWtlaW5mby9sYW5nLmggKGVuY29kaW5nX2NvZGVfdHlwZSk6IGFkZCBVU19BU0NJSS4KCjIwMDItMTEtMDUgICAgPGthcmxAZ251Lm9yZz4KCgkqIGRvYy9pbmZvLXN0bmQudGV4aTogdW50YWJpZnkuCgkqIGRvYy9pbmZvLXN0bmQudGV4aTogZG9jdW1lbnQgdGhhdC4KCSogaW5mby9mb290bm90ZXMuYyAoYXV0b19mb290bm90ZXNfcCk6IHR1cm4gb2ZmIGJ5IGRlZmF1bHQuCgoJKiBpbmZvL2luZm9kb2MuYyAoaW5mb19pbnRlcm5hbF9oZWxwX3RleHQpOiBoYWQKCXNjcm9sbC17Zm9yd2FyZCxiYWNrd2FyZH0gdHdpY2UgaW5zdGVhZCBvZiB7bmV4dCxwcmV2fS1saW5lLgoJKiBpbmZvL2luZm9kb2MuYzogdW50YWJpZnkuCgoJKiB1dGlsL3RleGkyZHZpOiB1bnRhYmlmeS4KCSogZG9jL3RleGluZm8udGV4OiB1bnRhYmlmeS4KCSogdXRpbC90ZXhpbmRleC5jOiB1bnRhYmlmeS4KCSogdXRpbC9pbnN0YWxsLWluZm8uYzogdW50YWJpZnkuCgkqIG1ha2VpbmZvL21ha2VpbmZvLmM6IGluZGVudGF0aW9uIGZpeC4KCSogbWFrZWluZm8vY21kcy5jOiBkb2MgZml4LgoKMjAwMi0xMS0wNCAgICA8a2FybEBnbnUub3JnPgoKCSogY29uZmlndXJlLmFjOiBwcmV0ZXN0IHZlcnNpb24gNC4yZC4KCSogZG9jL2ZkbC50ZXhpOiBiZXR0ZXIgbGluZSBicmVhayB0byBhdm9pZCBvdmVyZnVsbCBoYm94LgoKMjAwMi0xMS0wNCAgU3RlcGhlbiBHaWxkZWEKCiAgICAgICAgKiBtYWtlaW5mby97Zm9vdG5vdGUuYyxjbWRzLmMsaHRtbC5jLGluZGV4LmMsaW5zZXJ0aW9uLmMsCiAgICAgICAgbWFrZWluZm8uYyxub2RlLmMsdG9jLmMsc2VjdGlvbmluZy5jfTogYWRkIGEgY2xhc3MgYXR0cmlidXRlCiAgICAgICAgdG8gdGFncyBnZW5lcmF0ZWQgaW4gc3BlY2lhbCBjaXJjdW1zdGFuY2VzIHRoYXQgd291bGRuJ3QgYmUKICAgICAgICBvYnZpb3VzIHRvIGEgdXNlciBhZ2VudC4KCiAgICAgICAgUXVvdGUgYWxsIGF0dHJpYnV0ZSB2YWx1ZXMgKGZvciBYSFRNTCkuCgoyMDAyLTExLTA0ICAgIDxrYXJsQGdudS5vcmc+CgoJKiBkb2MvdGV4aW5mby50eGkgKEZpbGUgRW5kKTogZ3JhbW1hci4KCiAgICAgICAgVGhlc2UgY2hhbmdlcyBmcm9tIGdpbGRlYToKCSogbWFrZWluZm8vY21kcy5jIChjbV90aXRsZXBhZ2UpOiBuZXcgZm4sIGFuZCB1c2UgaXQgZm9yIEB0aXRsZXBhZ2UuCgoJKiBtYWtlaW5mby9jbWRzLmggKHRpdGxlcGFnZV9jbWRfcHJlc2VudCk6IG5ldyBnbG9iYWwuCgkqIG1ha2VpbmZvL2h0bWwuYyAoaHRtbF9vdXRwdXRfaGVhZCk6IGNoZWNrIHRpdGxlcGFnZV9jbWRfcHJlc2VudAoJYmVmb3JlIG91dHB1dHRpbmcgdGhlIDxoMT4uCgoJKiBtYWtlaW5mby9odG1sLmMgKGh0bWxfb3V0cHV0X2hlYWQpOiBwdXQgYSBjbGFzcyBvbiB0aGUgPGgxPiBmcm9tCglzZXR0aXRsZS4KCgkqIG1ha2VpbmZvL2NtZHMuYyAoY21fdGl0bGVmb250KTogcHV0IHRoZSBjbGFzcyBkaXJlY3RseSBvbiB0aGUgaDEKCXJhdGhlciB0aGFuIGEgc2VwYXJhdGUgPHNwYW4+IGVsZW1lbnQuCgoyMDAyLTEwLTMxICAgIDxrYXJsQGdudS5vcmc+CgoJKiBkb2MvdGV4aW5mby50ZXggKFxtYXRoYWN0aXZlKTogbmV3IGZuLgoJKFxtYXRoKTogY2FsbCBpdCwgdG8gY2hhbmdlIGRlZmluaXRpb25zIG9mIGFjdGl2ZSBjaGFyYWN0ZXJzLgoJKFxwdGV4e2d0cixoYXQsbGVzcyxwbHVzfSk6IHNhdmUgb3JpZ2luYWwgY2hhcmFjdGVycy4KCVJlcG9ydCBmcm9tIHdsLgoKCSogZG9jL3RleGluZm8udGV4IChcaXRlbXp6eik6IFxwZW5hbHR5MTAwMDEgaW5zdGVhZCBvZiAxMDAwMAogICAgICAgIGJlZm9yZSB0aGUgcHV0YXRpdmUgXHBhcnNraXAuCiAgICAgICAgKFxhYm92ZWVudmJyZWFrKTogaW5zZXJ0IFxwYXJza2lwIGlmIHBlbmFsdHkhPTEwMDAwLAogICAgICAgIHJhdGhlciB0aGFuIDwxMDAwMC4gT3RoZXJ3aXNlLCBAaXRlbSBzb21lIGxvbmcgaXRlbSBsYWJlbCAvCiAgICAgICAgQGV4YW1wbGUgaGFzIHRvbyBsaXR0bGUgc3BhY2luZy4KCVJlcG9ydCBmcm9tOiBXZXJuZXIgTEVNQkVSRyA8d2xAZ251Lm9yZz4sCgkyNiBBcHIgMjAwMiAwODozNzo0MSArMDIwMCAoQ0VTVCkuCgoJKiBtYWtlaW5mby9tYWtlaW5mby5jIChleGVjdXRpbmdfbWFjcm8pOiBuZXcgc3RhdGljLgoJKHJlYWRfY29tbWFuZCk6IHNldCBpdCwgaWYgd2UgZXhlY3V0ZSBhIG1hY3JvLgoJKGFkZF9jaGFyKTogaWYgaXQgaXMgc2V0LCBjYWxsIGh0bWxfb3V0cHV0X2hlYWQuCglUaGlzIGlzIHNvIGlmIGEgbWFjcm8gZXhwYW5zaW9uIGlzIGZpcnN0IGluIHRoZSBkb2N1bWVudCBib2R5LCB0aGUKCWh0bWwgaGVhZCBnZXRzIHdyaXR0ZW4gYmVmb3JlIHRoZSBtYWNybyBib2R5LgoJUmVwb3J0IGZyb206IFN0ZXBoZW4gR2lsZGVhIDxnaWxkZWFAc3RvcC5tYWlsLWFidXNlLm9yZz4sCgkxMCBKdWwgMjAwMiAxMzozNToxMyAtMDQwMC4KCgkqIG1ha2VpbmZvL2h0bWwuYyAoaHRtbF90aXRsZV93cml0dGVuKSwKCSogbWFrZWluZm8vaHRtbC5oIChodG1sX3RpdGxlX3dyaXR0ZW4pOiBtYWtlIGF2YWlsYWJsZS4KCSogbWFrZWluZm8vY21kcy5jIChjbV90aXRsZWZvbnQpOiBzZXQgaHRtbF90aXRsZV93cml0dGVuIGZvciBodG1sCgkJb3V0cHV0LgoKCSogdXRpbC90ZXhpbmRleC5jOiB0ZXhpbmRleC5jIChuZWVkX2luaXRpYWxzLCBmaXJzdF9pbml0aWFsKTogTmV3CglnbG9iYWxzLgoJKG1haW4pOiBDbGVhciB0aGVtIGZvciBlYWNoIGluZGV4LgoJKHBhcnNlZmlsZSk6IFNldCBuZWVkX2luaXRpYWxzIHdoZW4gdGhlcmUgaXMgbW9yZSB0aGFuIG9uZQoJaW5pdGlhbCBpbiB0aGlzIGluZGV4LgoJKGluZGV4aWZ5KTogRG8gbm90IGVtaXQgXGluaXRpYWwgY29tbWFuZHMgdW5sZXNzIG5lZWRfaW5pdGlhbHMKCWlzIHNldC4gIFVzZSB0b3VwcGVyLgoKCUZyb206IFphY2sgV2VpbmJlcmcgPHphY2tAY29kZXNvdXJjZXJ5LmNvbT4KCURhdGU6IFR1ZSwgMjYgTWFyIDIwMDIgMTc6MjA6MDYgLTA4MDAKCgkqIGxpYi9zeXN0ZW0uaDogZG9jIGZpeCBmcm9tIGdpbGRlYS4KCjIwMDItMTAtMzAgICAgPGthcmxAZ251Lm9yZz4KCiAgICAgICAgKEZvbGxvd2luZyByZXBvcnRlZCBieSBCb2IgV2lsc29uLikKCgkqIGRvYy90ZXhpbmZvLnRleCAoXHNlY3Rpb25oZWFkaW5nKTogYWRkIGVpdGhlcgoJXG5vcm1hbGJhc2VsaW5lc2tpcCBvciBccGFyc2tpcCBhZnRlciB0aGUgaGVhZGluZywgd2hpY2hldmVyIGlzCglsYXJnZXIsIGluc3RlYWQgb2YgaGFyZHdpcmluZyAxMHB0LgoKCSogZG9jL3RleGluZm8udGV4IChcZGVmeGJvZHljb21tb24pOiBuZXcgZGVmbiwgaW5jbHVkaW5nIGEKCXBvdGVudGlhbCBicmVha3BvaW50IGlmIHdlIGhhdmUgbXVsdGlwbGUgY29uc2VjdXRpdmUgQGRlZi4uLnggY29tbWFuZHMuCgkoXGRlZipwYXJzZWJvZHkpOiB1c2UgaXQuCgoJKiBkb2MvdGV4aW5mby50ZXggKFxzaW5nbGVzcGFjZSk6IHJlbW92ZSwgc2luY2Ugd2UgZml4ZWQgdGhlCiAgICAgICAgcmVndWxhciBsaW5lIHNwYWNpbmcgYSBsb25nIHRpbWUgYWdvIHRvIG5vdCBiZSBkb3VibGUtc3BhY2VkLgogICAgICAgIEluIEBzbWFsbGJvb2sgbW9kZSwgaXQgaXJvbmljYWxseSBjYXVzZWQgZXhjZXNzaXZlIGxpbmUgc3BhY2luZy4KCShcbm9uZmlsbHN0YXJ0LCBccXVvdGF0aW9uKTogZG9uJ3QgY2FsbCBpdC4KCgkqIGRvYy90ZXhpbmZvLnRleCAoXHNtYXJ0c2xhbnRlZCwgXHNtYXJ0aXRhbGljKTogdXNlIFx0dHNsIGlmIGluCgl0eXBld3JpdGVyLgoJRnJvbTogQm9iIFdpbHNvbiA8YndpbHNvbkB0ZW5zaWxpY2EuY29tPi4KCgkqIGRvYy90ZXhpbmZvLnRleCAoXGRlZm1ldGhwYXJzZWJvZHkpOiBwYXNzIFxlbXB0eSB0byBcc21hbGxzcGxpdAoJdG8ga2VlcCBhIGJyYWNlLWRlbGltaXRlZCBhcmd1bWVudCB0byBAZGVmZm4gZnJvbSBoYXZpbmcgdGhlIGJyYWNlcwoJc3RyaXBwZWQuCgkoUmVwb3J0IGZyb206IEhhbi1XZW4gTmllbmh1eXMgPGhhbndlbkBjcy51dS5ubD4uKQoKMjAwMi0xMC0yOCAgICA8a2FybEBnbnUub3JnPgoKCSogZG9jL3RleGluZm8udGV4IChcbG9nZ2luZ2FsbCk6IHJld3JpdGUgdG8gbWluaW1pemUgbG9nIGZpbGUKCW91dHB1dCAoaWRlYXMgZnJvbSBGcmFuayBNaXR0ZWxiYWNoJ3MgdHJhY2Uuc3R5KSBhbmQgZXhwbGljaXRseQoJc2hvdyB0aGUgZXRleCBjaGFuZ2VzLgoKCSogY29uZmlndXJlLmFjOiBwcmV0ZXN0IHZlcnNpb24gNC4yYy4KCgkqIE5FV1M6IG1lbnRpb24gV2VybmVyJ3MgZml4ZXMuCgoyMDAyLTEwLTI3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CgoJKiBtYWtlaW5mby9odG1sLmMgKGluc2VydF9odG1sX3RhZyk6IEZpeCBoYW5kbGluZyBvZiBuZXN0ZWQsCglpZGVudGljYWwgdGFncy4KCjIwMDItMTAtMjcgICAgPGthcmxAZ251Lm9yZz4KCgkqIGNvbmZpZ3VyZS5hYyAoQU1fSU5JVF9BVVRPTUFLRSk6IGFkZCBkaXN0LWJ6aXAyIG9wdGlvbi4KCjIwMDItMTAtMjYgICAgPGthcmxAZ251Lm9yZz4KCgkqIDIwMDItMTAtMjQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KCUZpeCBodG1sIGZvbnQgdGFncywgaS5lLiwgbWFrZSB0aGUgb3V0cHV0IHNpbWlsYXIgdG8KCXRleGluZm8udGV4LiAgVGhlIG1haW4gaWRlYSBpcyB0byBhdm9pZCBuZXN0ZWQgZm9udCB0YWdzLgoKCSogbWFrZWluZm8vaHRtbC5jIChwdXNoX3RhZywgcG9wX3RhZyk6IE5ldyBmdW5jdGlvbnMuCgkoaW5zZXJ0X2h0bWxfdGFnKTogVXNlIHRoZW0uCglEb24ndCBlbWl0IG1vcmUgdGhhbiBhIHNpbmdsZSBmb250IGF0dHJpYnV0ZS4KCgkqIG1ha2VpbmZvL2h0bWwuaCAoSFNUQUNLKTogTmV3IHN0cnVjdHVyZS4KCgkqIG1ha2VpbmZvL2RlZnVuLmM6IEluY2x1ZGUgY21kcy5oIGFuZCBodG1sLmguCgkocHJvY2Vzc19kZWZ1bl9hcmdzKTogRG9uJ3QgYXBwbHkgPGk+Li4uPC9pPiB0byBwYXJlbnRoZXNlcwoJYW5kIGJyYWNrZXRzLgoJKGRlZnVuX2ludGVybmFsKTogVXNlIGluc2VydF9odG1sX3RhZyBmb3IgZW1pdHRpbmcgZm9udCB0YWdzLgoKCSogbWFrZWluZm8vY21kcy5jIChjbV91cmwpOiBVc2UgaW5zZXJ0X2h0bWxfdGFnIGZvciBlbWl0dGluZwoJZm9udCB0YWcuCgkoY21fcik6IFNpbXBsaWZ5LgoKMjAwMi0xMC0yNSAgQWxleGFuZHJlIER1cmV0LUx1dHogIDxhZGxAZ251Lm9yZz4KCgkqIHV0aWwvdGV4aTJkdmk6IFByZXNlcnZlIGVtcHR5IGNvbXBvbmVudHMgd2hlbiBleHBhbnNpbmcKCVRFWElOUFVUUyBhbmQgSU5ERVhTVFlMRS4KCjIwMDItMTAtMjQgICAgPGthcmxAZ251Lm9yZz4KCgkqIGRvYy9pbmZvLXN0bmQudGV4aTogbWlzc2luZyBwZXJpb2QuCgoJKiBtNC97Y2hlY2stZGVjbC5tNCxta3N0ZW1wLm00LHByZXJlcS5tNH06IG5ldyBmaWxlcyBmcm9tIGdudWxpYi4KCSogbGliL21rc3RlbXAuYywgbGliL3RlbXBuYW1lLmM6IGxpa2V3aXNlLgoJKiBhY2xvY2FsLm00LCBjb25maWd1cmUuYWM6IHN1cHBvcnQgZm9yIG1rc3RlbXAgaW5zdGVhZCBvZiBta3RlbXAuCgkqIHV0aWwvdGV4aW5kZXguYzogdXNlIG1rc3RlbXAgaW5zdGVhZCBvZiBta3RlbXAuCgogICAgICAgIDIwMDItMTAtMjQgIEFsZXhhbmRyZSBEdXJldC1MdXR6ICA8YWRsQGdudS5vcmc+CgkqIHV0aWwvdGV4aTJkdmk6IFR1cm4gcmVsYXRpdmUgZW50cmllcyAkVEVYSU5QVVRTIGFuZCAkSU5ERVhTVFlMRQoJaW50byBhYnNvbHV0ZSBwYXRocy4gIChBbGxvd3MgLS1jbGVhbiB0byB3b3JrIHdpdGggcmVsYXRpdmUgZGlycwoJaW4gVEVYSU5QVVRTLCBldGMuKQoKCSogZG9jL3RleGluZm8udGV4OiB1cGRhdGUgXHRleGluZm92ZXJzaW9uIHRpbWVzdGFtcC4KCjIwMDItMTAtMjIgICAgPGthcmxAZ251Lm9yZz4KCgkyMDAyLTEwLTE2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CgoJKiB0ZXhpbmZvLnRleCAoXGFwcGVuZGl4Ym94KTogTmV3IG1hY3JvIHRvIGNvbXB1dGUgYQoJZml4ZWQtd2lkdGggYm94IGZvciB0aGUgYXBwZW5kaXggZW50cnkgaW4gdGhlIFRPQy4KCShcYXBwZW5kaXh6enosIFxhcHBlbmRpeGVudHJ5KTogVXNlIGl0LgoKCShcc2hvcnRjb250dHQpOiBOZXcgZm9udC4KCShcc3VtbWFyeWNvbnRlbnRzKTogVXNlIGl0IHRvIHNldCB0aGUgZm9udCBzaXplIG9mIHRoZSBcdHQKCWZvbnQgcHJvcGVybHkuCgoJKFxhdXRob3J0dCk6IE5ldyBtYWNyby4KCShcYXV0aG9yZm9udCk6IFVzZSBpdCB0byBwcm92aWRlIGEgcHJvcGVyIGZvbnQgc2l6ZSBmb3IKCUBlbWFpbCB1c2VkIHdpdGhpbiBAYXV0aG9yLgoKMjAwMi0xMC0yMSAgICA8a2FybEBnbnUub3JnPgoKCSogYXV0b21ha2UgMS43LjEuCgoyMDAyLTEwLTE4ICAgIDxrYXJsQGdudS5vcmc+CgoJKiBkb2MvdGV4aW5mby50ZXggKFxkZWZuYW1lKTogZ2V0IHJpZCBvZiB0aGUgdW51c2VkCgkgXGRlZnR5cGVtYXJnaW47IHR5cGVzZXQgdGhlIGZ1bmN0aW9uIHR5cGUgd29yZCBmbHVzaCByaWdodCwgaW4KCSBicmFja2V0cy4gIFBhcnRpYWxseSBzdWdnZXN0ZWQgYnkgYm9iLgoKMjAwMi0xMC0xNiAgICA8a2FybEBnbnUub3JnPgoKCSogbWFrZWluZm8vaHRtbC5jOiBKdXN0ID4gYWZ0ZXIgYWxsIG9uIDxtZXRhPiBhbmQgPGxpbms+IHRvCglhcHBlYXNlIEhUTUwgNC4wMSAoYW5kIGJyZWFrIFhIVE1MKS4gIEZyb20gSmFuaXMuCgoyMDAyLTEwLTE1ICAgIDxrYXJsQGdudS5vcmc+CgoJKiBjb25maWd1cmUuYWM6IHByZXRlc3QgdmVyc2lvbiA0LjJiLgoKCSogbWFrZWluZm8vY21kcy5jIChjbV9kb3RzLCBjbV9lbmRkb3RzKTogZG9uJ3QgdXNlIHNtYWxsIGlmCglpbl9maXhlZF93aWR0aF9mb250czsgdGhpcyB2aW9sYXRlcyB0aGUgaHRtbCBzcGVjcywgd2hpY2ggZG9uJ3QKCXdhbnQgeW91IHRvIGNoYW5nZSBmb250cyB3aXRoaW4gPHByZT4uIChBcmdoLikKCVJlcG9ydCBmcm9tOiBKYW5pcyBKb2huc29uIDxqYW5pczE4N0B1cy5pYm0uY29tPiwKCTE0IE9jdCAyMDAyIDE1OjU5OjE2IC0wNzAwLgoKMjAwMi0xMC0xNCAgQWxleGFuZHJlIER1cmV0LUx1dHogIDxhZGxAZ251Lm9yZz4KCSogdXRpbC90ZXhpMmR2aSAoY29tbW9uLCB0eGluY2x1ZGVzKTogRml4IGRlZmluaXRpb25zIHNvIHRoYXQKCWFuIGVtcHR5ICR0eGluY2x1ZGVzIGRvZXNuJ3QgcmVzdWx0IGluIGEgZW1wdHkgcGF0aCBlbGVtZW50CglpbiBURVhJTlBVVFMuCgoyMDAyLTEwLTE0ICAgIDxrYXJsQGdudS5vcmc+CgoJKiBpbmZvL2luZm9rZXkuYzogY29weXJpZ2h0IDIwMDIgbm90IDAyLgoJKiBtYWtlaW5mby9sYW5nLmM6IGNvcHlyaWdodCAyMDAxIG5vdCAwMS4KCgkqIG1ha2VpbmZvL2luc2VydGlvbi5jIChiZWdpbl9pbnNlcnRpb24pOiBmb3IgZW51bWVyYXRlLCBzZXQKCWluX3BhcmFncmFwaD0wIGFzIHdlIGRvIGZvciBpdGVtaXplLgoJT3RoZXJ3aXNlIGEgPC9wPiBnZXRzIGluc2VydGVkIGF0IHRoZSBuZXh0IEBpdGVtLCB3aGljaCBpcyB3cm9uZy4KCglSZXBvcnQgZnJvbTogSmFuaXMgSm9obnNvbiA8amFuaXMxODdAdXMuaWJtLmNvbT4sIDE0IE9jdCAyMDAyCgkxMjozNTozMCAtMDcwMC4KCjIwMDItMTAtMTMgICAgPGthcmxAZ251Lm9yZz4KCgkqIHV0aWwvaW5zdGFsbC1pbmZvLmMgKGxvbmdvcHRzKTogbWFrZSAtLWluZm9kaXIgYSBzeW5vbnltIGZvcgoJLS1pbmZvLWRpciwgZm9yIHNvbWUgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBEZWJpYW4gaW5zdGFsbC1pbmZvLgoJUmVwb3J0ZWQgYnkgQm9iIENoYXNzZWxsLCBZdmVzIENvZGV0IDx5Y29kZXRAY2x1Yi1pbnRlcm5ldC5mcj4sCglhbmQgbWFueSBvdGhlcnMuCgoJKiBkb2MvdGV4aW5mby50eGkgKG1ha2VpbmZvIGFkdmFudGFnZXMpOiBkb2N1bWVudCB2YXJpb3VzIG9wdGlvbnMKCXRoYXQgaGF2ZSBjcmVwdCBpbiB0byB0aGUgc291cmNlLiAgKFdlcm5lciBMZW1iZXJnIG5vdGVkIHRoYXQKCS0taWZ0ZXggYW5kIGNvbXBhbmlvbnMgd2VyZSBtaXNzaW5nLikKCjIwMDItMTAtMTAgICAgPGthcmxAZ251Lm9yZz4KCgkqIG1ha2VpbmZvL2NtZHMuYyAoY21fdGllKTogbmV3IGZuIGZvciBuZXcgY21kIEB0aWV7fS4KCSogZG9jL3RleGluZm8udHhpOiBkb2N1bWVudCBpdC4KCjIwMDItMTAtMDkgICAgPGthcmxAZ251Lm9yZz4KCgkqIGRvYy90ZXhpbmZvLnR4aTogcmVjb21tZW5kIGZyZWUgc29mdHdhcmUgZGlyZWN0b3J5IGNhdGVnb3JpZXMKCShzdWdnZXN0aW9uIGZyb20gcm1zKSwKICAgICAgICBtb3JlIGluZm8gYWJvdXQgQG5vaW5kZW50IChmdXRfbmlzQGQzLmRpb24ubmUuanAgYW5kIHJ5a0Bkc3B3aXouY29tKSwKICAgICAgICB2ZXJzaW9uIHNwZWNpZmljYXRpb24gKHNwZWN0b3Job21lQHJjbi5jb20pLgoKCSogbWFrZWluZm8ve2NtZHMsZm9vdG5vdGUsaHRtbCxpbnNlcnRpb24sbWFrZWluZm8sbXVsdGksbm9kZX0uYzoKCXVzZSA8YnIgLz4gaW5zdGVhZCBvZiBwbGFpbiA8YnI+LCBmb3IgdGhlIHNha2Ugb2YgWEhUTUwuICBMaWtld2lzZQogICAgICAgIHdpdGggPGhyIC8+IGFuZCA8bWV0YSAvPiwgYW5kIHF1b3RlIGFsbCA8bWV0YT4gdmFsdWVzLgogICAgICAgIFN1Z2dlc3Rpb24gKGFuZCBhc3N1cmFuY2Ugb2YgY29tcGF0aWJpbGl0eSkgZnJvbQogICAgICAgIEphbmlzIEpvaG5zb24gPGphbmlzMTg3QHVzLmlibS5jb20+CiAgICAgICAgYW5kIEdlcmFsZCBQZmVpZmVyIDxwZmVpZmVyQGRiYWkudHV3aWVuLmFjLmF0PgogICAgICAgICh0aGUgZ2NjIHdlYiBwYWdlIG1haW50YWluZXJzKS4KCgkqIHV0aWwvaW5mb3NyY2g6IG5ldyBjb250cmliIHNjcmlwdC4KCSogdXRpbC9NYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IGFkZCBpbmZvc3JjaC4KCjIwMDItMTAtMDQgICAgPGthcmxAZ251Lm9yZz4KCgkqIGNvbmZpZ3VyZS5hYzogcHJldGVzdCB2ZXJzaW9uIDQuMmEuCgoJKiBUT0RPOiBtb3JlIGluZm8gb24gZGlyIGNhdGVnb3JpZXMuCgoyMDAyLTEwLTAyICAgIDxrYXJsQGdudS5vcmc+CgoJKiBkb2MvLmN2c2lnbm9yZTogaWdub3JlIHRleCBvdXRwdXQgZmlsZXMuCgoJKiB1dGlsL2Rpci1leGFtcGxlOiByZW1vdmUgdW51c2VkIGNhdGVnb3JpZXMsIGV0Yy4KCjIwMDItMTAtMDEgICAgPGthcmxAZ251Lm9yZz4KCgkqIGRvYy90ZXhpbmZvLnRleCAoXHhtbCxcaWZ4bWwpOiBtb3JlIFxkb2lnbm9yZSdzLgoJKFxjb3B5aW5nLFxpbnNlcnRjb3B5aW5nKTogbmV3IGltcGxlbWVudGF0aW9uIHRvIHNhdmUgdGhlIHVuaW50ZXJwcmV0ZWQKCXRva2VucyBpbnN0ZWFkIG9mIHR5cGVzZXR0aW5nIGEgYm94LCBzbyB0aGF0IHRoZSBwYWdlIHNpemUsIGZvbnRzLAoJZXRjLiwgZG9uJ3QgaGF2ZSB0byBiZSBkZWZpbmVkIGJlZm9yZSBAY29weWluZyBpcyBydW4uCgoJVGhlc2UgY2hhbmdlcyBmcm9tIFdlcm5lciBMZW1iZXJnIDx3bEBnbnUub3JnPjoKCShcaW50ZXJuYWxwYWdlc2l6ZXMpOiB0YWtlIHR3byBuZXcgYXJndW1lbnRzIGZvciB0aGUgcGh5c2ljYWwgcGFwZXIKCWhlaWdodCBhbmQgd2lkdGguCgkoXHNtYWxsYm9vayxcYWZvdXJwYXBlcixcYWZpdmVwYXBlcixcbGV0dGVycGFwZXIsXGFmb3Vyd2lkZSwKIAkgXHBhZ2VzaXplcyk6IHBhc3MgdGhlbS4KCjIwMDItMDktMzAgICAgPGthcmxAZ251Lm9yZz4KCgkqIHV0aWwvdGV4aTJkdmk6IGRvYyBmaXhlcy4KCgkqIFJFQURNRTogbWVudGlvbiBhdXRvcmVjb25mLgoKMjAwMi0wOS0yOSAgICA8a2FybEBnbnUub3JnPgoKCSogZG9jL3RleGluZm8udGV4IChccGRmbWFrZW91dGxpbmVzKTogY2FsbCBcdHVybm9mZmFjdGl2ZSB0byBoYW5kbGUgYWxsIHNwZWNpYWwgY2hhcmFjdGVycwoJZXhjZXB0IFx7fS4KCShcbm9ybWFsdHVybm9mZmFjdGl2ZSk6IGNhbGwgXHR1cm5vZmZhY3RpdmUgaW5zdGVhZCBvZiByZXBlYXRpbmcgYWxsIHRoZQoJcmVkZWZpbml0aW9ucy4KCgkqIGRvYy90ZXhpbmZvLnRleCAoXGFmb3VycGFwZXIsIFxhZm91cmxhdGV4LCBcYWZvdXJ3aWRlKTogbmV3CgkJZm9ybWF0dGluZyB2YWx1ZXMuCglGcm9tOiBFcmljLkJlbHBhaXJlQGVxdWFudC5jb20sIDMwIEF1ZyAyMDAyIDE5OjAzOjMwICswMjAwLgoKCSogYWNsb2NhbC5tNDogJElkIG5vdyBvbWl0dGVkLgoKCSogZG9jL3RleGluZm8udHhpOiBkb2N1bWVudCBAeG1sIGFuZCBAaWZ4bWwuCgoJKiBtYWtlaW5mby9tYWtlaW5mby5jICh1c2FnZSk6IG1lbnRpb24gdGhlIG5ldyBvcHRpb25zLgoJKiBpbmZvL01ha2VmaWxlLmFtIChCVUlMVF9TT1VSQ0VTKTogZGVmaW5lIHRoaXMgdW5jb25kaXRpb25hbGx5LAoJCW5vIG1vcmUgVEVYSU5GT19NQUlOVC4gIFdlIGhhbmRsZSBpdCBpbiB0aGUgdG9wLWxldmVsCgkJTWFrZWZpbGUuYW0gYnkgZGVmaW5pbmcgZGlzdGNsZWFuY2hlY2tfbGlzdGZpbGVzLgoKCSogYWNpbmNsdWRlLm00OiBjYW4ndCBoYXZlICRJZCwgdGhlbiBpdCBnZXRzIHByb3BhZ2F0ZWQgdG8KCQlhY2xvY2FsLm00LgoKICAgIEZyb206IFBoaWxpcHBlIE1hcnRpbiA8ZmVsb3lAZnJlZS5mcj4sIDExIEF1ZyAyMDAyIDIwOjE3OjQ0ICswMjAwLgoJKiBtYWtlaW5mby9jbWRzLmM6IG5ldyBjb21tYW5kcyBAaWZub3R4bWwsIEBpZnhtbCwgQHhtbC4KCSogaW5zZXJ0aW9uLmM6IGxpa2V3aXNlLgoJKGNtX2lmeG1sLCBjbV9pZm5vdHhtbCk6IG5ldyBmdW5jdGlvbnMuCgkqIGluc2VydGlvbi5oOiBsaWtld2lzZS4KCSogbWFrZWluZm8uYzogbmV3IG9wdGlvbnMgLS1pZnhtbCwgLS1uby1pZnhtbC4KCShjbV9pbWFnZSk6IGJldHRlciB4bWwgb3V0cHV0LgogICAgICAgICogbWFrZWluZm8uaCAocHJvY2Vzc194bWwpOiBuZXcgZ2xvYmFsLgogICAgICAgICogeG1sLmM6IGNhbGwgeG1sX2Nsb3NlX3NlY3Rpb25zLgoKMjAwMi0wOS0yOCAgICA8a2FybEBnbnUub3JnPgoKCSogbWFrZWluZm8vaW5zZXJ0aW9uLmMgKGJlZ2luX2luc2VydGlvbik6IG9ubHkgZG8gPHByZT4sIG5vdAoJPGJyPjxwcmU+OyBzdWdnZXN0aW9uIGZyb20gV2VybmVyLgoKCSogaW5mby9pbmZvZG9jLmM6IGRvY3VtZW50IHRoZSBidWcgcmVnYXJkaW5nIHdoZXJlX2lzX3JlcF9pbmRleCwKCWJ1dCBkb24ndCBmaXggaXQgc2luY2UgaXQncyBpbiB0aGUgWyFJTkZPS0VZXSBjb2RlLgoKICAgMjAwMi0wNS0xOCAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCVRoZXNlIGNoYW5nZXMgbWFrZSBAZXhhbXBsZSBiZSBpbmRlbnRlZCBpbiBIVE1MIG91dHB1dCwgYW5kIG1ha2UKCUBleGRlbnQgd29yayBpbnNpZGUgYW4gQGV4YW1wbGUgaW4gSFRNTC4KCgkqIG1ha2VpbmZvL2luc2VydGlvbi5jIChiZWdpbl9pbnNlcnRpb24pIDxleGFtcGxlPjogSW5zZXJ0IHNwYWNlcwoJYWZ0ZXIgPHByZT4gdG8gcHJvZHVjZSBpbmRlbnRhdGlvbiBvZiB0aGUgZmlyc3QgbGluZSBpbiBIVE1MIG1vZGUuCgoJKiBtYWtlaW5mby9tYWtlaW5mby5jIChpbmRlbnQpOiBEbyBpbmRlbnQgZXZlbiBpbiBIVE1MIG1vZGUuCgogICAgVGhlc2UgcGF0Y2hlcyBmcm9tOiBUaGllcnJ5IFZpZ25hdWQgPHR2aWduYXVkQG1hbmRyYWtlc29mdC5jb20+LAoJMjQgQXByIDIwMDIgMjA6NTI6MzcgKzAyMDAuCgoJKiBtYWtlaW5mby9pbnNlcnRpb24uYzogZG9jIGZpeC4KCgkqIGluZm8vaW5mb21hcC5jOiBoYWQgaCBhbmQgbCBmdW5jdGlvbnMgcmV2ZXJzZWQgaW4gdmkgbW9kZS4KCgkqIHV0aWwvaW5zdGFsbC1pbmZvLmM6IGJ6aXAyIHN1cHBvcnQuCgoJKiB1dGlsL3RleGkyZHZpOiBkb24ndCBhbGxvdyB3aGl0ZXNwYWNlIGFzIG9uZSBvZiB0aGUgPydzIGFyb3VuZAoJdGhlIG8gaW4gZm9vLj9vPywgdGhhdCBjb3VsZCBsZWFkIHRvIG1pc3BhcnNpbmcuCgoyMDAyLTA5LTI3ICAgIDxrYXJsQGdudS5vcmc+CgoJKiBkb2MvTWFrZWZpbGUuYW0gKCouMSk6IGNhbGwgdGhlIGJpbmFyeSwgbm90IHRoZSBzb3VyY2UgZmlsZS4KCgkqIHV0aWwvdGV4aW5kZXguYyAoc29ydF9pbl9jb3JlKTogaW50IG5vdCBvZmZfdC4KCShtYWluKTogY2FzdCBhcmd1bWVudCB0byBzb3J0X2luX2NvcmUgdG8gaW50LgoJKHNvcnRfb2ZmbGluZSk6IG5maWxlcyBwYXJhbWV0ZXIgaXMgbm90IGFjdHVhbGx5IHBhc3NlZCAob3IgdXNlZCk7CgluZWVkIHRvIHBhc3MgJnRlbXBmaWxlc1tpXSB0byBzb3J0X2luX2NvcmUuCglGcm9tOiBDaHJpc3RvcGhlciBMZWFndWUgPGxlYWd1ZUBjb250cmFwdW5jdHVzLm5ldD4sCgkyNiBBcHIgMjAwMiAyMjo0NTo0NSAtMDQwMC4KCgkqIGRvYy90ZXhpbmZvLnRleCAoXHVubnVtYi4uLmVudHJ5KTogbWFrZSBhbmFsb2dvdXMgdG8gXC4uLmVudHJ5CgkoZXhjZXB0IHdoZW4gYWN0dWFsbHkgb3V0cHV0dGluZyB0aGUgdGV4dCwgb2YgY291cnNlKSwgc28gcGRmCglib29rbWFya3MgY2FuIGdvIHRvIHRoZSByaWdodCBsZXZlbC4KCUZyb206IENocmlzdG9waGVyIExlYWd1ZSA8bGVhZ3VlQGNvbnRyYXB1bmN0dXMubmV0PiwKCTI1IEFwciAyMDAyIDE1OjI5OjI0IC0wNDAwLgoKCSogaW5zdGFsbC1zaDogdXBkYXRlIGZyb20gZ251bGliLgoKCSogbWFrZWluZm8vaW5zZXJ0aW9uLmMgKGhhbmRsZV92ZXJiYXRpbV9lbnZpcm9ubWVudCk6IG5lZWQgdG8KCXF1b3RlICYgYW5kIDwuCglGcm9tOiBQaGlsaXBwZSBNYXJ0aW4gPGZlbG95QGZyZWUuZnI+LCAxOCBBdWcgMjAwMiAxNTozOToxMCArMDIwMC4KCiAgICAgICAgMjAwMi0wNi0wNCAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCSogbWFrZWluZm8vY21kcy5jIChjbV9leGRlbnQpOiBDYWxsIHN0YXJ0X3BhcmFncmFwaCB0byByZXN0b3JlCglwcmV2aW91cyBpbmRlbnRhdGlvbiBvZiB0ZXh0LiAgKGV4cG9uZW50LnRleCB0ZXN0LikKCiAgICAgICAgMjAwMi0wNS0xMSAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCSogbWFrZWluZm8vbm9kZS5jIChyZW1lbWJlcl9ub2RlKTogSWYgdGhlIGFyZ3VtZW50IEZOQU1FIGlzIE5VTEwsCglhcyBpdCBoYXBwZW5zIGZvciAiVG9wIiwgdXNlIHRoZSBiYXNlbmFtZSBvZiBjdXJyZW50X291dHB1dF9maWxlbmFtZS4KCjIwMDItMDktMjYgICAgPGthcmxAZ251Lm9yZz4KCgkqIGxpYi9zeXN0ZW0uaCBbTUlLVEVYXTogaW5jbHVkZSBnbnUtbWlrdGV4LmgsIGRlZmluZSBTX0lTRElSLgoJWyEgTUlLVEVYXTogZGVjbGFyZSBzdWJzdHJpbmcuCglGcm9tOiBTdGVwaGVuIEdpbGRlYSA8Z2lsZGVhQHN0b3AubWFpbC1hYnVzZS5vcmc+LAoJMDggTWF5IDIwMDIgMTg6MTI6NTggLTA0MDAuCgoJKiBkb2MvdGV4aW5mby50ZXg6IHNwdXJpb3VzIFxsZXQgd2hlbiBzZXR0aW5nIFxtYWlubWFnc3RlcC4KCUZyb206IFN0ZXBoZW4gR2lsZGVhIDxnaWxkZWFAc3RvcC5tYWlsLWFidXNlLm9yZz4sCgkwOCBNYXkgMjAwMiAwODozODozOSAtMDQwMC4KCgkqIGRvYy90ZXhpbmZvLnR4aTogY29weXJpZ2h0IHN5bWJvbDogdXNlIEBjb2Rle0Bjb3B5cmlnaHRAe0B9fSwKCXdpdGggdGhlIGJyYWNlcyBpbiB0aGUgQGNvZGUuCglGcm9tOiBQYXVsIEVnZ2VydCA8ZWdnZXJ0QHR3aW5zdW4uY29tPiwgMSBBcHIgMjAwMiAxMTozNzo1MiAtMDgwMC4KCgkqIGluZm8vaW5mb2RvYy5jIChyZXBsYWNlX2luX2RvY3VtZW50YXRpb24pOiBhbHdheXMgYWxsb2NhdGUgYXQKCWxlYXN0IG9uZSBieXRlIGZvciByZXBsZW4sIG90aGVyd2lzZSB0aGluZ3MgY3Jhc2ggd2hlbiBNQUxMT0NfQ0hFQ0tfPTIuCglGcm9tOiAiQW5kcmVhcyBIZXJybWFubiIgPEFIRVJSTUFOQGRlLmlibS5jb20+LgoKCSogbGliL01ha2VmaWxlLmFtIChsaWJ0eGlfYV9TT1VSQ0VTKTogaW5jbHVkZSB4YWxsb2MuaC4KCgkqIGRvYy9NYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IHNraXAgbWFjcm8udGV4aSBhbmQgdXNlcmRvYy50ZXhpIG5vdy4KCShjb21tb25fbWFuZGVwcyk6IG5ldyB2YXIuCgkoKi4xKTogdXNlIHRoYXQsIGFuZCBkZXBlbmQgb24gdGhlIHNvdXJjZSBmaWxlcyB3aXRoIHRoZSB2ZXJzaW9uIHN0cmluZ3MKCWluc3RlYWQgb2YgdGhlIGJpbmFyaWVzLiAgU3VnZ2VzdGlvbiBmcm9tIEFsZXhhbmRyZS4KCgkqIHV0aWwvTWFrZWZpbGUuYW0gKGJpbl9QUk9HUkFNUywgZ2luc3RhbGxfaW5mb19TT1VSQ0VTLAoJdHJhbnNmb3JtKTogYnVpbGQgYXMgZ2luc3RhbGwtaW5mbywgdG8gYXZvaWQgY2xhc2hpbmcgd2l0aCB0aGUKCWluc3RhbGwtaW5mbyB0YXJnZXQgaW5zZXJ0ZWQgYnkgQXV0b21ha2UuICAoU3VnZ2VzdGlvbiBmcm9tIEFraW0uKQoKCSogTWFrZWZpbGUuYW0gKGRpc3RjbGVhbmNoZWNrX2xpc3RmaWxlcyk6IG5ldyBkZWZpbml0aW9uIHNvCglkaXN0Y2hlY2sgZG9lc24ndCBjb21wbGFpbiBhYm91dCBvdXIgZ2VuZXJhdGVkIGZpbGVzIGluIGluZm8vLAoJd2hpY2ggYXJlIGNvbmRpdGlvbmFsaXplZCBvbiBURVhJTkZPX01BSU5ULgoKCSogbGliL2dldHRleHQuaDogdXBkYXRlIGZyb20gZ2V0dGV4dCAwLjExLjUuCgoyMDAyLTA5LTI0ICAgIDxrYXJsQGdudS5vcmc+CgoJKiB1dGlsL3NyY2xpc3QudHh0OiBtNCBmaWxlcyBmcm9tIGFjbG9jYWwgcmF0aGVyIHRoYW4gZ251bGliLgoKICAgICAgICAqIE1ha2VmaWxlLmFtLCB1dGlsL01ha2VmaWxlLmFtLCBkaXItZXhhbXBsZTogbW92ZSBkaXItZXhhbXBsZSB0byB1dGlsLgoKMjAwMi0wOS0yMyAgICA8a2FybEBnbnUub3JnPgoKCSogSU5TVEFMTC5nZW5lcmljOiB1cGRhdGUgZnJvbSBhdXRvY29uZiAyLjU0LgoKMjAwMi0wOS0yMCAgZ2V0dGV4dGl6ZSAgPGJ1Zy1nbnUtZ2V0dGV4dEBnbnUub3JnPgoKCSogY29uZmlndXJlLmFjIChBTV9HTlVfR0VUVEVYVF9WRVJTSU9OKTogQnVtcCB0byAwLjExLjUuCgoyMDAyLTA5LTEyICAgIDxrYXJsQGdudS5vcmc+CgoJKiB1dGlsL3NyY2xpc3QudHh0OiBJTlNUQUxMIHRvIElOU1RBTEwuZ2VuZXJpYy4KCjIwMDItMDgtMDQgICAgPGthcmxAZ251Lm9yZz4KCgkqIGRvYy90ZXhpbmZvLjU6CgkqIGxpYi9zeXN0ZW0uaDoKCSogZG9jL3RleGluZm8udGV4OgoJKiBkb2MvaW5mby1mci50ZXhpOgoJKiBjb25maWd1cmUuYWM6IG5vbi1jb3B5cmlnaHQgbm90aWNlLgoJKiBkb2MvaW5mby1mci50ZXhpOgoJKiBkb2MvaW5mby1zdG5kLnRleGk6CgkqIGRvYy90ZXhpbmZvLnR4aTogY29weXJpZ2h0IHllYXJzIHNob3VsZCBiZSB3cml0dGVuIG91dCBpbiBmdWxsLgoKMjAwMi0wNy0yMyAgICA8a2FybEBnbnUub3JnPgoKCSogZG9jL3RleGluZm8udHhpOiB2ZXJiYXRpbSBsaWNlbnNlIHNhbXBsZSBwZXIgcm1zIGFuZCBjaGFzc2VsbC4KCjIwMDItMDctMTkgICAgPGthcmxAZ251Lm9yZz4KCgkqIGRvYy90ZXhpbmZvLnR4aToKCjIwMDItMDYtMDUgICAgPGthcmxAZ251Lm9yZz4KCgkqIGRvYy9NYWtlZmlsZS5hbSAoVFhJX1hMQVRFKTogdHhpLWl0LnRleCBmcm9tIFBhb2xvIEJvbnppbmkKCQk8Ym9uemluaUBnbnUub3JnPi4KCjIwMDItMDYtMDQgICAgPGthcmxAZ251Lm9yZz4KCgkqIGRvYy90ZXhpbmZvLnRleCAoXGRlZnBhcnNlYm9keWNvbW1vbik6IGRvIFxwZW5hbHR5MCBpZiB0aGUgbGFzdAoJaXRlbSB3YXMgYSBcbm9icmVhaywgc2luY2UgdGhhdCBtZWFucyB3ZSBoYXZlIHR3byBmdW5jdGlvbiBoZWFkZXJzCglpbiBhIHJvdy4gIFJlcG9ydCBmcm9tOiBCcmlhbiBHb3VnaCA8YmpnQG5ldHdvcmstdGhlb3J5LmNvLnVrPi4KCgkoXGRlZnBhcnNlYm9keSwuLi4pOiB1c2UgXGRlZnBhcnNlYm9keWNvbW1vbiBpbnN0ZWFkIG9mIHJlcGVhdGluZyBjb2RlLgoKMjAwMi0wNS0wOSAgICA8a2FybEBnbnUub3JnPgoKCSogZG9jL3RleGluZm8uNTogbG93ZXJjYXNlIE5BTUUgdG8gYHRleGluZm8nIGZvciBTb2xhcmlzIG1hbi4KCUZyb20gZ2lsZGVhLgoKMjAwMi0wNC0yOSAgICA8a2FybEBnbnUub3JnPgoKCSogZG9jL3RleGluZm8udHhpOiBtZW50aW9uIGl0LgoJKiB1dGlsL3RleGkyZHZpOiBhbGxvdyAtRSBhcyB3ZWxsIGFzIC1lLgoKMjAwMi0wNC0xMCAgICA8a2FybEBnbnUub3JnPgoKCSogZG9jL3RleGluZm8udHhpOgoKMjAwMi0wNC0wMSAgICA8a2FybEBnbnUub3JnPgoKCSogY29uZmlndXJlLmFjOiB2ZXJzaW9uIDQuMi4KCSogdXRpbC90ZXhpMmR2aTogNC4yCgoJKiBtYWtlaW5mby90b2MuYzogZG9jIGZpeC4KCSogdXRpbC9pbnN0YWxsLWluZm8taHRtbDoKCSogbWFrZWluZm8vdGV4aW5mby54c2w6IEZpeGVzIEZyb206IFZpbGxlIFNreXR05AoJCTx2aWxsZS5za3l0dGFAaWtpLmZpPi4KCgkqIG1ha2VpbmZvL2luc2VydGlvbi5jIChiZWdpbl9pbnNlcnRpb24pOiAoY29weWluZyBjYXNlKSBvbWl0CgkJY21faW5zZXJ0X2NvcHlpbmcgaWYgbm9faGVhZGVycy4KCUJ1ZyByZXBvcnQgZnJvbSBTdGVwaGVuIEdpbGRlYS4KCjIwMDItMDMtMjggICAgPGthcmxAZ251Lm9yZz4KCgkqIGNvbmZpZ3VyZS5hYzogcHJldGVzdCA0LjFkLgoKCSogZG9jL3RleGluZm8udHhpOgoJKiBtYWtlaW5mby9jbWRzLmM6IGlnbm9yZSBoZWFkaW5ncyBjb21tYW5kcy4gIEZyb20gU3RlcGhlbiBHaWxkZWEuCgoJKiBkb2MvdGV4aW5mby50eGk6IEBpZnBsYWludGV4dAoKMjAwMi0wMy0yNiAgICA8a2FybEBnbnUub3JnPgoKCSogZG9jL3RleGluZm8udGV4IChcaWZwbGFpbnRleHQsXGlmbm90cGxhaW50ZXh0KTogbmV3IG91dHB1dAoJCWZvcm1hdCBjb25kaXRpb25hbC4KCgkqIG1ha2VpbmZvL2NtZHMuYyAoY21fc2V0dGl0bGUpOgoJKiBtYWtlaW5mby9ub2RlLmMgKGNtX25vZGUpOiBuZWVkIHRvIHBhc3Mgb3V0cHV0IGZpbGVuYW1lIGFyZyB0bwoJCSogeG1sX2JlZ2luX2RvY3VtZW50LgoKCSogbWFrZWluZm8vY21kcy5jIChjbV9zcCk6IG5lZWQgY2xvc2Vfc2luZ2xlX3BhcmFncmFwaCBpbnN0ZWFkIG9mCgljbG9zZV9wYXJhZ3JhcGggdG8gYXZvaWQgYW4gZXh0cmEgYmxhbmsgbGluZS4gIEJ1ZyByZXBvcnQgZnJvbSBTdGVwaGVuIEdpbGRlYS4KCgkqIGRvYy90ZXhpbmZvLnRleCAoXGRvaWdub3JlKTogY2FuJ3QgZG8gYyBrbHVkZ2UgZm9yCgkJZG9jdW1lbnRkZXNjcmlwdGlvbi4gIEJ1ZyByZXBvcnQgZnJvbSBTdGVwaGVuIEdpbGRlYS4KCgkqIGRvYy90ZXhpbmZvLnR4aTogbWlzc2luZyB0IGluIGRvY3VtZW50ZGVzY3JpcHRpb24gZXhhbXBsZSwgZnJvbQoJU3RlcGhlbiBHaWxkZWEuCgoyMDAyLTAzLTI0ICAgIDxrYXJsQGdudS5vcmc+CgoJKiBkb2MvdGV4aW5mby50eGk6IGludmFyIHNlYwoKMjAwMi0wMy0yMyAgICA8a2FybEBnbnUub3JnPgoKCSogY29uZmlndXJlLmFjOiBwcmV0ZXN0IDQuMWMuCgoyMDAyLTAzLTIzICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgoKCSogaW5mby9zZWFyY2guYyAoc2tpcF9ub25fd2hpdGVzcGFjZSk6IERvbid0IGdvIGJleW9uZCB0aGUKCXRlcm1pbmF0aW5nIG51bGwgY2hhcmFjdGVyLgoKCSogaW5mby9maWxlc3lzLmMgKGZpbGVzeXNfcmVhZF9pbmZvX2ZpbGUpCgkoZmlsZXN5c19yZWFkX2NvbXByZXNzZWQpOiBOdWxsLXRlcm1pbmF0ZSB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUKCXdlJ3ZlIHJlYWQsIHNvIGl0IGNvdWxkIGJlIHVzZWQgYXMgYSBDIHN0cmluZy4KCjIwMDItMDMtMjMgIEVsaSBaYXJldHNraWkgIDxlbGl6QGlzLmVsdGEuY28uaWw+CgoJKiBtYWtlaW5mby9tYWtlaW5mby5jIChpbnNlcnRfdG9wbGV2ZWxfc3ViZGlyZWN0b3J5KTogRml4Cgljb21wdXRhdGlvbiBvZiBvdXRwdXRfZmlsZW5hbWUncyBsZW5ndGgsIHRvIGF2b2lkIG92ZXJydW5uaW5nCgltYWxsb2MnZWQgYnVmZmVyLiAgSWYgbWtkaXIgcmV0dXJucyB3aXRoIEVFWElTVCwgYXNzdW1lIHdlIGNhbiB1c2UKCWFuIGV4aXN0aW5nIGRpcmVjdG9yeSBvbmx5IGlmIHRoZSBleGlzdGluZyBmaWxlIGlzIGluZGVlZCBhCglkaXJlY3RvcnkuICBPbiBNUy1ET1MsIGFsbG93IGZvciBFQUNDRVMgaW4gYWRkaXRpb24gdG8gRUVYSVNULgoJPG1heF9uYW1lX2xlbj46IFJlbW92ZSB0aGlzIHZhcmlhYmxlLgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAoZXhwYW5zaW9uKTogUHJvdGVjdCBleGVjdXRlX3N0cmluZyBmcm9tIHRvbwoJbG9uZyBzdHJpbmdzLgoJKEVYRUNVVEVfU1RSSU5HX01BWCk6IE5ldyBtYWNyby4KCShleGVjdXRlX3N0cmluZyk6IFVzZSBFWEVDVVRFX1NUUklOR19NQVgsIG5vdCA0MDAwLgoKMjAwMi0wMy0yMyAgICA8a2FybEBnbnUub3JnPgoKCSogZG9jL3RleGluZm8udHhpOgoJKiBtYWtlaW5mby9pbnNlcnRpb24uaDoKCSogbWFrZWluZm8vdGV4aW5mby5kdGQ6CgkqIG1ha2VpbmZvL3htbC5oOgoJKiBtYWtlaW5mby94bWwuYzoKCSogbWFrZWluZm8vbWFrZWluZm8uaDoKCSogbWFrZWluZm8vaW5zZXJ0aW9uLmM6CgkqIG1ha2VpbmZvL2h0bWwuYzoKCSogbWFrZWluZm8vY21kcy5jOgoJKiBkb2MvaW5mby1zdG5kLnRleGk6IEBwZXJtaXNzaW9ucyAtPiBAY29weWluZy4KCSogZG9jL3RleGluZm8udGV4OiBwZXJtaXNzaW9ucyAtPiBjb3B5aW5nLgoKMjAwMi0wMy0yMiAgICA8a2FybEBnbnUub3JnPgoKCSogY29uZmlndXJlLmFjOiBwcmV0ZXN0IDQuMWIuCgoJKiBpbmZvL01ha2VmaWxlLmFtIChCVUlMVF9TT1VSQ0VTKTogY29uZGl0aW9uYWxpemUgb24KCQlURVhJTkZPX01BSU5ULCB0byBhcHBlYXNlIGRpc3RjaGVjay4KCgkqIEZyb206IE1hdHRoZXcgV29vZGNyYWZ0IDxtYXR0aGV3d0BjaGlhcmsuZ3JlZW5lbmQub3JnLnVrPjoKCSogbWFrZWluZm8vbWFrZWluZm8uaCAobmV4dF9tZW51X2l0ZW1fbnVtYmVyKTogTmV3IGdsb2JhbC4KCSogbWFrZWluZm8vaW5zZXJ0aW9uLmMgKGJlZ2luX2luc2VydGlvbik6IEluaXRpYWxpc2UgaXQuCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKGhhbmRsZV9tZW51X2VudHJ5KTogRW1pdCBhY2Nlc3NrZXkgYXR0cmlidXRlCglpbiBodG1sIG91dHB1dCwgYWNjb3JkaW5nIHRvIG5leHRfbWVudV9pdGVtX251bWJlci4KCSogbWFrZWluZm8vbm9kZS5jIChjbV9ub2RlKTogRW1pdCBhY2Nlc3NrZXkgYXR0cmlidXRlcyBpbiBodG1sIG91dHB1dC4KCgkqIGRvYy90ZXhpbmZvLnR4aTogR05VIHRleHRzLgoKCSogZG9jL2luZm8tc3RuZC50ZXhpOiBAc3luY29kZWluZGV4LCBub3QgQHN5bmluZGV4LgoKMjAwMi0wMy0yMSAgICA8a2FybEBnbnUub3JnPgoKCSogZG9jL3RleGluZm8udHhpOiBAcGVybWlzc2lvbnMuCgoyMDAyLTAzLTIwICAgIDxrYXJsQGdudS5vcmc+CgoJKiBkb2MvdGV4aW5mby50eGk6IGRvY3VtZW50IC0tbm8taGVhZGVycyBhIGJpdCBiZXR0ZXIuCgkqIG1ha2VpbmZvL21ha2VpbmZvLmM6IGJldHRlciBkZXNjcmlwdGlvbiBvZiAtLW5vLWhlYWRlcnMsCgkJc3VnZ2VzdGVkIGJ5IFN0ZXBoZW4gR2lsZGVhLgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAoaW5zZXJ0X3RvcGxldmVsX3N1YmRpcmVjdG9yeSk6IHVzZQoJCWNvbW1hbmQtbGluZSBzcGVjaWZpZWQgb3V0cHV0IG5hbWUgdW5jaGFuZ2VkLgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAoZnVsbF9leHBhbnNpb24pOiBuZXcgcm91dGluZSwgc2VwYXJhdGVkCglmcm9tIGV4cGFuc2lvbiwgdGhhdCBkb2VzIG5vdCB0YW1wZXIgd2l0aCB0aGUgZm9ybWF0dGluZyBwYXJhbWV0ZXJzLgoJKiBtYWtlaW5mby9pbnNlcnRpb24uYzogY29weWluZyAtPiBwZXJtaXNzaW9ucy4KCShjbV9pbnNlcnRfcGVybWlzc2lvbnMpOiBpbnNlcnQgcmF0aGVyIHRoYW4gYWRkLgoJKiBtYWtlaW5mby90ZXhpbmZvLmR0ZDoKCSogbWFrZWluZm8veG1sLmg6CgkqIG1ha2VpbmZvL3htbC5jOgoJKiBtYWtlaW5mby9jbWRzLmM6IGNvcHlpbmcgLT4gcGVybWlzc2lvbnMuCgkqIG1ha2VpbmZvL21ha2VpbmZvLmg6IGNvcHlpbmcgLT4gcGVybWlzc2lvbnMuCgkoZnVsbF9leHBhbnNpb24pOiBkZWNsYXJlLgoKCSogZG9jL3RleGluZm8udHhpOiBAY29weWluZyAtPiBAcGVybWlzc2lvbnMsIEBpbmNsdWRlIGZkbC50ZXhpLgoJKiBkb2MvaW5mby1zdG5kLnRleGk6IEBjb3B5aW5nIC0+IEBwZXJtaXNzaW9ucywgYWx3YXlzIGluY2x1ZGUgdGhlIEZETC4KCgkqIG1ha2VpbmZvL2h0bWwuYyAoaHRtbF9vdXRwdXRfaGVhZCk6IGNvcHlpbmcgLT4gcGVybWlzc2lvbnMsIHVzZQoJaW5zZXJ0X3N0cmluZy4KCSogbWFrZWluZm8vaW5zZXJ0aW9uLmg6IGNvcHlpbmcgLT4gcGVybWlzc2lvbnMuCgkqIGRvYy90ZXhpbmZvLnRleDogXGNvcHlpbmcgLT4gXHBlcm1pc3Npb25zLgoKCSogZG9jL01ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogaW5jbHVkZSBmZGwudGV4aS4KCjIwMDItMDMtMTkgICAgPGthcmxAZ251Lm9yZz4KCgkqIG1ha2VpbmZvL2luc2VydGlvbi5jIChjbV9pbnNlcnRfY29weWluZyk6IHVzZSBpbnNlcnRfc3RyaW5nIGluCgkJdGhlIHhtbCBjYXNlLCBzaWdoLgoKCSogZG9jL2luZm8tc3RuZC50ZXhpOiBjb3B5aW5nCgoJKiBkaXItZXhhbXBsZTogaW5mbyBzdGFuZGFsb25lLgoKCSogbWFrZWluZm8vaHRtbC5jOiBjb3B5cmlnaHRfdGV4dCAtPiBjb3B5aW5nX3RleHQuCgkqIG1ha2VpbmZvL3RleGluZm8uZHRkOgoJKiBtYWtlaW5mby9pbnNlcnRpb24uYzoKCSogbWFrZWluZm8vaW5zZXJ0aW9uLmg6CgkqIG1ha2VpbmZvL21ha2VpbmZvLmg6CgkqIG1ha2VpbmZvL3htbC5jOgoJKiBtYWtlaW5mby94bWwuaDoKCSogbWFrZWluZm8vY21kcy5jOiBjb3B5cmlnaHR0ZXh0IC0+IGNvcHlpbmcuCgkqIGRvYy9pbmZvLXN0bmQudGV4aTogY29weXJpZ2h0dGV4dCAtPiBjb3B5aW5nLgoJKiBkb2MvdGV4aW5mby50ZXggKFxjb3B5aW5nLCBcaW5zZXJ0Y29weWluZyk6IHJlbmFtZSBmcm9tCgkJY29weXJpZ2h0dGV4dCBwZXIgcm1zLgoKCSogbWFrZWluZm8vaW5kZXguYyAoaW5kZXhfYWRkX2FyZyk6IGRvbid0IGVtaXQgd2FybmluZyBmb3IgaW5kZXgKCWVudHJpZXMgY29udGFpbmluZyA6IGFmdGVyIGFsbC4KCgkqIGluZm8vaW5mb2tleS5jOiByZW1vdmUgbm9uLWFuc2kgdHJhaWxpbmcgY29tbWFzIGZyb20gbGFzdCBpdGVtcwoJb2YgZW51bXMuICBGcm9tOiBBbGJlcnQgQ2hpbi1BLVlvdW5nIDxjaGluYUB0aGV3cml0dGVud29yZC5jb20+LgoKMjAwMi0wMy0xOCAgICA8a2FybEBnbnUub3JnPgoKCSogZG9jL2luZm8tc3RuZC50ZXhpOiBAaW5jbHVkZSBhZnRlciBAc2V0ZmlsZW5hbWUuCgkqIGRvYy90ZXhpbmZvLnR4aTogQGluc2VydGNvcHlyaWdodHRleHQsIEBzZXR0aXRsZSBHTlUgLi4uCgoJKiBkb2MvdGV4aW5mby50eGk6IG1lbnRpb24gQHNldGZpbGVuYW1lIGFuZCBzb3VyY2UgZmlsZW5hbWUKCQlleGNlcHRpb25zIGF0IHRoZSB0b3AuCgoJKiBtYWtlaW5mby9kZWZ1bi5jIChzY2FuX2dyb3VwX2luX3N0cmluZyk6IGhhbmRsZSBlc2NhcGVkIEB7IGFuZCBAfS4KCUJ1ZyByZXBvcnQgZnJvbSBXZXJuZXIgTGVtYmVyZy4KCgkqIGRvYy9pbmZvLXN0bmQudGV4aTogYWRkIHZlcnNpb24gbnVtYmVyIHRvIHRpdGxlIGEgbGEgVGV4aW5mby4KCSogZG9jL2luZm8tc3RuZC50ZXhpOiBmaWxlIC0+IG1hbnVhbC4KCSogZG9jL2luZm8tc3RuZC50ZXhpOiB1c2UgQGNvcHlyaWdodHRleHQuCgoJKiBtYWtlaW5mby9pbnNlcnRpb24uYyAoYmVnaW5faW5zZXJ0aW9uLCBlbmRfaW5zZXJ0aW9uKToKCQkJY29weXJpZ2h0dGV4dCBjYXNlLgoJKiBtYWtlaW5mby9tYWtlaW5mby5oIChjb3B5cmlnaHRfdGV4dCk6IGRlY2xhcmUvZGVmaW5lLgoJKiBtYWtlaW5mby9odG1sLmMgKGh0bWxfb3V0cHV0X2hlYWQpOiBvdXRwdXQgY29weXJpZ2h0dGV4dC4KCSogbWFrZWluZm8vdGV4aW5mby5kdGQ6IEFkZCBjb3B5cmlnaHR0ZXh0LgoJKiBtYWtlaW5mby94bWwuaCAoeG1sX2VsZW1lbnQpOiBhZGQgQ09QWVJJR0hUVEVYVC4KCSogbWFrZWluZm8veG1sLmMgKHRleGluZm9tbF9lbGVtZW50X2xpc3QsIGRvY2Jvb2tfZWxlbWVudF9saXN0KToKCQkJY29weXJpZ2h0dGV4dCBjYXNlLgoKMjAwMi0wMy0xNyAgICA8a2FybEBnbnUub3JnPgoKCSogbWFrZWluZm8vaW5zZXJ0aW9uLmggKGluc2VydGlvbl90eXBlKTogaW5jbHVkZSBjb3B5cmlnaHR0ZXh0LgoJKiBtYWtlaW5mby9jbWRzLmMgKGNvbW1hbmRfdGFibGUpOiBuZXcgY29tbWFuZCBjb3B5cmlnaHR0ZXh0LgoKCSogZG9jL3RleGluZm8udGV4IChcY29weXJpZ2h0dGV4dCwgXGluc2VydGNvcHlyaWdodHRleHQpOiBuZXcKCSBUZXhpbmZvIGNvbW1hbmRzIHRvIGhhbmRsZSB0aGUgY29weXJpZ2h0IGFuZCBwZXJtaXNzaW9uIHRleHQgY2xlYW5seS4KCShcZGJsYXJyb3dib3gsXGxvbmdkYmxhcnJvd2JveCxccHVzaGNoYXJib3gsXGVxdWl2Ym94LFxidWxsYm94KToKCQlyZW1vdmUgdGhlc2UgZGVmaW5pdGlvbnMgdGhhdCBoYXZlIG5vdCBiZWVuIHVzZWQgZm9yIGFnZXMuCgoJKiBjb25maWd1cmUuYWM6IGNhbGwgQUNfQ0FOT05JQ0FMX0JVSUxEIGJlZm9yZSB0aGUgdGVybWNhcAoJY2hlY2tpbmcuICBCdWcgcmVwb3J0IGZyb20gRWxpLgoKMjAwMi0wMy0xNiAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCgkqIG1ha2VpbmZvL25vZGUuYyAoY21fYW5jaG9yKTogV2hlbiByZWNvcmRpbmcgdGhlIGFuY2hvciBwb3NpdGlvbiwKCWFjY291bnQgZm9yIG91dHB1dF9wYXJhZ3JhcGhfb2Zmc2V0LCBzaW5jZSB0aGUgY3VycmVudCBwYXJhZ3JhcGgKCW1pZ2h0IG5vdCBiZSBjbG9zZWQgeWV0IChoYXBwZW5zIGluc2lkZSBhIG1lbnUsIGZvciBleGFtcGxlKS4KCgkqIGRqZ3BwL2NvbmZpZy5zZWQ6IFR3ZWFrIHRvIGFkYXB0IHRvIHRoZSBuZXcgQXV0b21ha2UvQXV0b2NvbmYuCgoJKiBkamdwcC9SRUFETUU6IFVwZGF0ZS4KCjIwMDItMDMtMTUgICAgPGthcmxAZ251Lm9yZz4KCgkqIGRpci1leGFtcGxlOiBHTlUgb3JnYW5pemF0aW9uLgoKMjAwMi0wMy0xNCAgICA8a2FybEBnbnUub3JnPgoKCSogbWFrZWluZm8vY21kcy5jIChjbV90aXRsZXBhZ2UpOiBkbyBub3QgZGVjbGFyZSBub25leGlzdGVudAoJZnVuY3Rpb24uCgoyMDAyLTAzLTE0ICAgIDxrYXJsQGdudS5vcmc+CgoJKiBkb2MvdGV4aW5mby50eGk6IGRvbid0IHNheSBzcGVjaWZpY2FsbHkgaHRtbCAzLjIsIHNpbmNlIDxodG1sCgkJCWxhbmc9Li4uPiBpcyBub3QgMy4yLgoJQnVnIHJlcHJ0IGZyb206IE1hdHRoZXcgV29vZGNyYWZ0IDxtYXR0aGV3d0BjaGlhcmsuZ3JlZW5lbmQub3JnLnVrPi4KCjIwMDItMDMtMTMgICAgPGthcmxAZ251Lm9yZz4KCgkqIGRvYy90ZXhpbmZvLnRleCAoXHdyaXRldG9jZW50cnkpOiBzZXQgXHBkZm1ha2VwYWdlZGVzdHRydWUgaGVyZS4KCShcRXRpdGxlcGFnZSk6IGluc3RlYWQgb2YgaGVyZS4gIEluIGNhc2UgdGhlIGRvY3VtZW50IGhhcyBubwoJCUB0aXRsZXBhZ2UuICBCdWcgcmVwb3J0IGZyb20gU3RlcGhlbiBHaWxkZWEuCgoJKiB1dGlsL3RleGkyZHZpOiBiZSB2ZXJib3NlIGFmdGVyIHRoZSBkZWZpbml0aW9uIG9mIGNtZCwgbm90CgliZWZvcmUuICBGcm9tIEFuZHJlYXMgU2Nod2FiLgoKMjAwMi0wMy0xMiAgICA8a2FybEBnbnUub3JnPgoKCSogcHJldGVzdCA0LjFhLgoJKiBkb2MvaW5mby1zdG5kLnRleGk6IHVwZGF0ZSB0byBGREwuCgoyMDAyLTAzLTExICAgIDxrYXJsQGdudS5vcmc+CgoJKiB1dGlsL3RleGkyZHZpOgoJKiB1dGlsL3RleGluZGV4LmM6CgkqIHV0aWwvaW5zdGFsbC1pbmZvLmM6CgkqIG1ha2VpbmZvL21ha2VpbmZvLmM6CgkqIGluZm8vaW5mb2tleS5jOgoJKiBpbmZvL2luZm8uYzogaG9tZSBwYWdlIGFuZCBoZWxwIG1lc3NhZ2UuCgoJKiBkb2MvdGV4aW5mby50eGkgKG1hdGgpOiBkb2N1bWVudCBAXCAoYWthIFxcKSBmb3IgbGl0ZXJhbCBcLgoJcmVndWxhcml6ZSBpbmRleCBlbnRyaWVzLgoJKiBtYWtlaW5mby9jbWRzLmMgKGNvbW1hbmRfdGFibGUpOiBcXCAtPiBpbnNlcnRfc2VsZi4KCgkqIGRvYy90ZXhpbmZvLnRleCAoXG1hdGhiYWNrc2xhc2gpOiBuZXcgZGVmaW5pdGlvbi4KCShcbWF0aCk6IGhhbmRsZSBcXCB0b28uCgkoXGNvZGV1bmRlcik6IGhhbmRsZSBAY29kZXtcfSBpbiBtbW9kZS4KCgkqIG1ha2VpbmZvL2h0bWwuYzogbWFrZSBob21lIHBhZ2UgYmUgZ251J3MuCgoJKiBkb2MvdGV4aW5mby50eGkgKENvbnZlbnRpb25zKTogcmV3cml0ZSBkZXNjcmlwdGlvbiBvZiBxdW90ZXMgc28KCWFzIHRvIHdvcmsgaW4gYWxsIGZvcm1hdHM7IHRoZXJlIHdhcyBubyBvdXRwdXQgZm9yIEhUTUwuCglSZXBvcnQgZnJvbTogRGF2aWQgTWVycmlsbCA8ZGF2aWRAbHVwZXJjYWxpYS5uZXQ+LgoKMjAwMi0wMy0xMCAgICA8a2FybEBnbnUub3JnPgoKCSogZG9jL3RleGluZm8udHhpIChUZXhpbmZvIENvcHlpbmcgQ29uZGl0aW9ucyk6IG1lbnRpb24gdGhpcwoJbWFudWFsJ3MgbGljZW5zZSBzcGVjaWZpY2FsbHkuCgoyMDAyLTAzLTA5ICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgoKCSogaW5mby9pbmRpY2VzLmMgKGFkZF9pbmRleF90b19pbmRleF9ub2RlbmFtZXMpOiBGaXggYW4gb2ZmLWJ5LW9uZQoJZXJyb3Igd2hlbiBjb21wdXRpbmcgdGhlIG51bWJlciBvZiB0aGUgbGFzdCBpbmRleCBlbnRyeS4KCjIwMDItMDMtMDggICAgPGthcmxAZ251Lm9yZz4KCgkqIGRvYy90ZXhpbmZvLnRleDogUmV3cml0ZSB1bm51bWJlcmVkIHRvYyBoYW5kbGluZyB0byBrZWVwIHRyYWNrCglvZiB0aGVpciBzZXF1ZW5jZSwgc28gdGhleSBjYW4gYmUgaGFuZGxlZCBjb3JyZWN0bHkgaW4KCXRoZSBQREYgdG9jICg9IGJvb2ttYXJrcykuCglGcm9tOiBXZXJuZXIgTEVNQkVSRyA8d2xAZ251Lm9yZz4uCgoJKiBjb25maWd1cmUuYWM6IEFDX01TR19XQVJOIGlmIGNhbid0IGZpbmQgYSB0ZXJtIGxpYnJhcnkuICBGcm9tOgoJTWFyYy5IZXJiZXJ0QGVucy1seW9uLmZyLgoKCSogaW5mby9pbmZvLmM6IGFscGhhYmV0aXplLgoJKiBpbmZvL2luZm8uYzogaW5jbHVkZSBzaG9ydCBvcHRpb24gbmFtZXMuCgoyMDAyLTAzLTA4ICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgoKCSogaW5mby9kaXNwbGF5LmMgKGRpc3BsYXlfdXBkYXRlX29uZV93aW5kb3cpOiBEeW5hbWljYWxseSByZWFsbG9jYXRlCglwcmludGVkX2xpbmVbXSBhcyBuZWVkZWQuICBXaGVuIHVuZGVyIC1SLCBpZ25vcmUgQU5TSSBlc2NhcGVzIGZvcgoJdGhlIHB1cnBvc2VzIG9mIGxpbmUgd3JhcCBkaXNwbGF5LiAgQ2xlYXIgdGhlIGxpbmUgdG8gRU9MIGlmIGl0Cgl1c2VkIGVzY2FwZSBzZXF1ZW5jZXMuICBSZWFsbG9jYXRlIGVudHJ5LT50ZXh0IGlmIHRoZSBuZXcKCXByaW50ZWRfbGluZSBpcyBsb25nZXIgdGhhbiBzY3JlZW53aWR0aC4KCgkqIGluZm8vd2luZG93LmMgKHN0cmluZ193aWR0aCk6IERvbid0IGNvdW50IEFOU0kgZXNjYXBlIHNlcXVlbmNlcwoJaW4gc3RyaW5nIHdpZHRoLCB3aGVuIHVuZGVyIC1SLi4KCShjYWxjdWxhdGVfbGluZV9zdGFydHMpOiBEb24ndCBjb3VudCBBTlNJIGVzY2FwZSBzZXF1ZW5jZXMgaW4gbGluZQoJd2lkdGgsIHdoZW4gdW5kZXIgLVIuCgkod2luZG93X2dldF9jdXJzb3JfY29sdW1uLCB3aW5kb3dfY2hhcnNfdG9fZ29hbCk6IFdoZW4gdW5kZXIgLVIsCglBTlNJIGVzY2FwZXMgZG9uJ3QgYWZmZWN0IHRoZSBob3Jpem9udGFsIHBvc2l0aW9uLgoKCSogaW5mby9pbmZvLXV0aWxzLmMgKHByaW50ZWRfcmVwcmVzZW50YXRpb24pOiBJZiAtUiBpcyBpbiBlZmZlY3QsCgl0cmVhdCBFU0MgYXMgYSBub3JtYWwgY2hhcmFjdGVyLgoKMjAwMi0wMy0wOCAgICA8a2FybEBnbnUub3JnPgoKCSogdXRpbC9NYWtlZmlsZS5hbToKCSogaW5mby9NYWtlZmlsZS5hbToKCSogbWFrZWluZm8vTWFrZWZpbGUuYW06CgkqIGxpYi9NYWtlZmlsZS5hbTogZG9jIGZpeC4KCgkqIGRvYy9NYWtlZmlsZS5hbSAoaW5zdGFsbC10ZXgpOiBwcmVmaXggdGhlIGluc3RhbGwgZGlyZWN0b3JpZXMKCXdpdGggJChERVNURElSKSwgYmVjYXVzZSB0aGF0IGlzIHdoYXQgYXV0b21ha2UgZG9lcyBmb3IgYWxsCglnZW5lcmF0ZWQgaW5zdGFsbCBydWxlcy4gIFRoZSBmaWxlIHBkZmNvbG9yLnRleCBzaG91bGQgYmUKCWluc3RhbGxlZCBhcyBzdWNoIChhbmQgbm90IGFzIGVwc2YudGV4KS4KCUZyb206IFBldGVyIEJyZWl0ZW5sb2huZXIgPHBlYkBtcHBtdS5tcGcuZGU+LgoKCSogY29uZmlndXJlLmFjIChBQ19JTklUKTogbm93IHBhc3MgW0dOVSBUZXhpbmZvXS4KCShBTV9JTklUX0FVVE9NQUtFKTogbm93IG5vIGFyZ3MsIGZvciBhdXRvbWFrZSAxLjYuCgoyMDAyLTAzLTA1ICAgIDxrYXJsQGdudS5vcmc+CgoJKiBkb2MvdGV4aW5mby50eGk6IGhpc3RvcnkKCjIwMDItMDMtMDQgICAgPGthcmxAZ251Lm9yZz4KCgkqIGNvbmZpZ3VyZS5hYzogdmVyc2lvbiA0LjEuCgkqIHV0aWwvdGV4aTJkdmk6IHZlcnNpb24uCgoJKiBkb2MvdGV4aW5mby50eGk6IEBzZXR0aXRsZSBpcyB1c2VkIGluIGh0bWwgb3V0cHV0IChmcm9tIEVsaSksCgkJdmFyaW91cyB1bmRlcmZ1bGwgaGJveCBmaXhlcy4KCjIwMDItMDMtMDIgICAgPGthcmxAZ251Lm9yZz4KCgkqIGNvbmZpZ3VyZS5hYzogcHJldGVzdCA0LjBrCgoJKiBpbmZvL2luZm8uYzogZGVjbGFyZSBhZGRfZmlsZV90b19kaXJlY3RvcnkgdG8gYXZvaWQgd2FybmluZy4KCgkqIGRvYy9pbmZvLXN0bmQudGV4aTogaW5mbyBzdGFuZGFsb25lIHNvIGFzIG5vdCB0byBjb2xsaWRlIHdpdGgKCQlgc3RhbmRhcmRzJyBpbiBkaXIuCgoyMDAyLTAzLTAxICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgoKCSogbWFrZWluZm8vaW5zZXJ0aW9uLmMgKGVuZF9pbnNlcnRpb24pOiBJbnNlcnQgdGhlIC90ZCBhbmQgL3RyCglkaXJlY3RpdmVzIGluIGxvd2VyIGNhc2UuICBGcm9tIFBlciBCb3RobmVyIDxwZXJAYm90aG5lci5jb20+LgoKCSogbWFrZWluZm8vbWFjcm8uYyAoY21fYWxpYXMpOiBJZ25vcmUgd2hpdGVzcGFjZSBhcm91bmQgdGhlIGFsaWFzCgluYW1lLCBsaWtlIHRoZSBtYW51YWwgcHJvbWlzZXMuCgoJKiBkb2MvdGV4aW5mby50eGkgKEludm9raW5nIE1hY3JvcywgTWFjcm8gRGV0YWlscyk6IERvY3VtZW50IHRoYXQKCWNvbW1hcyBpbiBtYWNybyBhcmd1bWVudHMgZG9uJ3Qgd29yayBpbiBUZVguICBBZHZpc2UgdGV4aTJkdmkgLWUKCXdoZW4gbWFjcm9zIGRvbid0IHdvcmsgd2l0aCBUZVguCgoJKiBkb2MvdGV4aW5mby50eGkgKE5vZGUgTGluZSBSZXF1aXJlbWVudHMpOiBBZGQgcmVzdHJpY3Rpb25zIGFib3V0CglwYXJlbnMgYW5kIHNvbWUgcHVuY3R1YXRpb24gY2hhcmFjdGVycyBpbiBub2RlIG5hbWVzLgoJKERlZiBDbWQgVGVtcGxhdGUpOiBEb2N1bWVudCB0aGF0IG1hY3JvcyBhcmUgbm90IGV4cGFuZGVkLgoKCVRoZSBmb2xsb3dpbmcgdHdvIGNoYW5nZXMgYWxsb3cgdG8gc2F5ICJpbmZvIGZvbyIgaWYgdGhlcmUncyBhbgoJSW5mbyBmaWxlIGBmb28nIHNvbWV3aGVyZSBhbG9uZyBJTkZPUEFUSC4KCgkqIGluZm8vaW5mby5jIChhZGRfZmlsZV9kaXJlY3RvcnlfdG9fcGF0aCk6IE5ldyBmdW5jdGlvbiwgY29kZQoJbW92ZWQgZnJvbSBgbWFpbicuCgkobWFpbik6IFVzZSBhZGRfZmlsZV9kaXJlY3RvcnlfdG9fcGF0aC4KCgkqIGluZm8vc2Vzc2lvbi5jIChpbmZvX2ZvbGxvd19tZW51cyk6IElmIHRoZSBmaXJzdCBtZW51IGVudHJ5Cgljb3VsZG4ndCBiZSBmb3VuZCBhcyBhbiBpdGVtIGluIERJUidzIG1lbnUsIHRyeSBpdCBhcyBhIGZpbGUgbmFtZS4KCgkyMDAxLTA2LTE5ICBNYXJrIE1vbnRhZ3VlICA8bWFya21vbnRAdW1pY2guZWR1PgoKCSogaW5mby9maWxlc3lzLmM6IEZpeCBmb3Igc3BhcmM2NCAob2Zmc2V0cyBzaG91bGQgYmUgImxvbmcicykuCgoJKiBpbmZvL3Nlc3Npb24uYzogRml4IHR5cG9zIGluIGZ1bmN0aW9uIGNhbGxzLgoKCTIwMDEtMDgtMjMgIEVsaSBaYXJldHNraWkgIDxlbGl6QGlzLmVsdGEuY28uaWw+CgoJKiBtYWtlaW5mby9mb290bm90ZS5jIChjbV9mb290bm90ZSk6IERvbid0IGFsbG93IGZvb3Rub3RlcyBpbnNpZGUKCWZvb3Rub3Rlcy4KCShvdXRwdXRfcGVuZGluZ19ub3Rlcyk6IEluY3JlbWVudCBhbHJlYWR5X291dHB1dHRpbmdfcGVuZGluZ19ub3RlcwoJaW4gdGhlIEhUTUwgY2FzZSBhcyB3ZWxsLCB0byBwcm90ZWN0IGV4ZWN1dGVfc3RyaW5nIGZyb20KCXJlY3Vyc2l2ZWx5IGVudGVyaW5nIG91dHB1dF9wZW5kaW5nX25vdGVzLgoKMjAwMi0wMy0wMSAgICA8a2FybEBnbnUub3JnPgoKCSogZG9jL3RleGluZm8udGV4OiBmaXggbWlzbWF0Y2hlZCAkJ3MgZm9yIHNha2Ugb2YgZW1hY3MgZm9udC1sb2NrLgoJRnJvbTogU3RlcGhlbiBHaWxkZWEgPGdpbGRlYUBzdG9wLm1haWwtYWJ1c2Uub3JnPi4KCjIwMDItMDItMjcgICAgPGthcmxAZ251Lm9yZz4KCgkqIGNvbmZpZ3VyZS5hYzogcHJldGVzdCA0LjBqLgoKCSogaW5mby9pbmZvZG9jLmM6IDFzY3JvbGwtZm9yd2FyZCB0eXBvLgoKMjAwMi0wMi0yNiAgICA8a2FybEBnbnUub3JnPgoKCSogbGliL3N5c3RlbS5oIFshIEVOQUJMRV9OTFNdOiBsZXQncyBub3QgZ28gY29uc3QuCgoyMDAyLTAyLTI2ICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgoKCSogZGpncHAvY29uZmlnLnNlZDogQWRkIHR3ZWFraW5nIG9mIGZpbGUgbmFtZXMgaW4gImluc3RhbGwtaW5mbyIKCWFuZCAidW5pbnN0YWxsLWluZm8iIHRhcmdldHMuCgoJKiBkb2MvaW5mLXN0bmQudGV4aSAoQ3VzdG9tIEtleSBCaW5kaW5ncywgSW52b2tpbmcgaW5mb2tleSk6CiAgICAgICAgICBBZGQgZm9vdG5vdGVzIGFib3V0IERPUyBmaWxlIG5hbWVzLgoKCSogaW5mby9pbmZva2V5LmMgKG1haW4pIFtfX01TRE9TX19dOiBJZiBIT01FIGlzIG5vdCBkZWZpbmVkLAoJZGVmYXVsdCB0byB0aGUgY3VycmVudCBkaXJlY3RvcnkuCgoyMDAyLTAyLTI2ICAgIDxrYXJsQGdudS5vcmc+CgoJKiBsaWIvc3lzdGVtLmggKExDX01FU1NBR0VTKSBbISBMQ19NRVNTQUdFU106IG5lZWQgdGhpcyBhZnRlciBhbGwuCgoyMDAyLTAyLTI1ICAgIDxrYXJsQGdudS5vcmc+CgoJKiBkb2MvaW5mby1zdG5kLnRleGk6IGNvbnRlbnRzIGF0IHRvcCwgYXZvaWQgb3ZlcmZ1bGwgaGJveC4KCSogbGliL01ha2VmaWxlLmFtIChsaWJ0eGlfYV9zb3VyY2VzKTogaW5jbHVkZSBnZXR0ZXh0LmguCgoJKiBsaWIvc3lzdGVtLmggKExDX01FU1NBR0VTKTogZG9uJ3QgbmVlZCBjb25kaXRpb25hbCwgQnJ1bm8gc2F5cwoJCXRoYXQgbG9jYWxlLmggb3IgbGliaW50bC5oIGRvZXMgc28uCgoJKiBjb25maWd1cmUuYWM6IHByZXRlc3QgNC4waS4KCgkqIGRpci1leGFtcGxlOiBpbmZva2V5LgoJKiBkb2MvaW5mby1zdG5kLnRleGk6IGludm9raW5nIGluZm9rZXkuCgkqIGluZm8vaW5mb2tleS5jIChzaG9ydF9oZWxwKTogcmVvcmdhbml6ZSBzbGlnaHRseS4KCgkqIGxpYi9zeXN0ZW0uaDogdXNlICJnZXR0ZXh0LmgiIGluc3RlYWQgb2YgPGxpYmludGwuaD4gcGVyIGdldHRleHQKCTAuMTEgcmVjb21tZW5kYXRpb24uCgoyMDAyLTAyLTI1ICBnZXR0ZXh0aXplICA8YnVnLWdudS1nZXR0ZXh0QGdudS5vcmc+CgoJKiBNYWtlZmlsZS5hbSAoU1VCRElSUyk6IEFkZCBpbnRsLgoJKiBjb25maWd1cmUuYWMgKEFDX0NPTkZJR19GSUxFUyk6IEFkZCBpbnRsL01ha2VmaWxlLgoKMjAwMi0wMi0yNSAgICA8a2FybEBnbnUub3JnPgoKCSogdXRpbC9NYWtlZmlsZS5hbSAoTERBREQpOgoJKiBtYWtlaW5mby9NYWtlZmlsZS5hbSAoTERBREQpOgoJKiBpbmZvL01ha2VmaWxlLmFtIChMREFERCk6IEBMSUJJTlRMQCBwZXIgZ2V0dGV4dGl6ZS4KCgkqIGNvbmZpZ3VyZS5hYzogZ2V0dGV4dGl6ZSBjaGFuZ2VzLgoJKiBNYWtlZmlsZS5hbTogZ2V0dGV4dGl6ZSBjaGFuZ2VzLgoKMjAwMi0wMi0yNSAgZ2V0dGV4dGl6ZSAgPGJ1Zy1nbnUtZ2V0dGV4dEBnbnUub3JnPgoKCSogTWFrZWZpbGUuYW0gKFNVQkRJUlMpOiBBZGQgbTQuCgkoU1VCRElSUyk6IFJlbW92ZSBpbnRsLgoJKEFDTE9DQUxfQU1GTEFHUyk6IE5ldyB2YXJpYWJsZS4KCShFWFRSQV9ESVNUKTogQWRkIGNvbmZpZy5ycGF0aC4KCSogY29uZmlndXJlLmFjIChBQ19DT05GSUdfRklMRVMpOiBBZGQgbTQvTWFrZWZpbGUuCgkoQUNfQ09ORklHX0ZJTEVTKTogUmVtb3ZlIGludGwvTWFrZWZpbGUuCgoyMDAyLTAyLTIzICAgIDxrYXJsQGdudS5vcmc+CgoJKiBwcmV0ZXN0IDQuMGguCgoJKiAyMDAyLTAyLTIzICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgoJKiBkb2MvaW5mby1zdG5kLnRleGkgKEludm9raW5nIEluZm8pOiBBZGQgYSByZWZlcmVuY2UgdG8gdGhlCglkZXNjcmlwdGlvbiBvZiBpbmRleC1hcHJvcG9zIGFuZCBpbmRleC1zZWFyY2guICBEb2N1bWVudCB0aGUKCS0tcmF3LWVzY2FwZXMgb3B0aW9uLgoJKFNlYXJjaGluZyBDb21tYW5kcyk6IERlc2NyaWJlIGluZGV4LXNlYXJjaCBhbmQgaW5kZXgtYXByb3Bvcy4KCgkqIGluZm8vbWFuLmMgKGNsZWFuX21hbnBhZ2UpOiBJZiByYXdfZXNjYXBlc19wIGlzIG5vdCBzZXQsIHJlbW92ZQoJQU5TSSBlc2NhcGUgc2VxdWVuY2VzIGZyb20gdGhlIG1hbiBwYWdlLgoKCSogaW5mby9pbmZvLmg6IERlY2xhcmUgcmF3X2VzY2FwZXNfcC4KCgkqIGluZm8vaW5mby5jOiA8cmF3X2VzY2FwZXNfcD46IE5ldyB2YXJpYWJsZS4KCU5ldyBvcHRpb24gLS1yYXctZXNjYXBlcyBvciAtUi4KCShtYWluKTogSGFuZGxlIGl0LgoJKGluZm9fc2hvcnRfaGVscCk6IERvY3VtZW50IGl0LgoJKG1haW4pOiBIb25vciAtLW91dHB1dCB0b2dldGhlciB3aXRoIC0tdXNhZ2UsIGJ5IGR1bXBpbmcgdGhlIG5vZGUKCXdlIGZvdW5kIHRvIHRoZSBuYW1lZCBmaWxlLgoKCTIwMDItMDItMjMgIEVsaSBaYXJldHNraWkgIDxlbGl6QGlzLmVsdGEuY28uaWw+CgkqIG1ha2VpbmZvL2h0bWwuYyAobm9kZW5hbWVfdG9fZmlsZW5hbWUpOiBDYWxsCglub2RlbmFtZV90b19maWxlbmFtZV8xIHdpdGggdGhlIGxhc3QgYXJndW1lbnQgMSwgbm90IDAuCgoJKiBtYWtlaW5mby90b2MuYyAoc2hvcnRjb250ZW50c191cGRhdGVfaHRtbCkKCShjb250ZW50c191cGRhdGVfaHRtbCk6IERvbid0IG9taXQgdGhlIGVudHJ5IGZvciB0aGUgVG9wIG5vZGUuCgoJKiAyMDAyLTAxLTMwICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgoJKiBtYWtlaW5mby9ub2RlLmMgKGNtX25vZGUpOiBEb24ndCBjb25kaXRpb24gc3BsaXR0aW5nIG9uCgl0b3Bfbm9kZV9zZWVuIGJlaW5nIG5vbi16ZXJvLiAgSWYgY3VycmVudF9ub2RlIGlzIE5VTEwsIHVzZSB0aGUKCWN1cnJlbnQgb3V0cHV0IGZpbGUgbmFtZSB0byBnZXQgYXQgdGhlIGZpbGUgbmFtZSBmb3IgdGhlIHByZXZpb3VzCglub2RlLiAgRG9uJ3QgY29tcHV0ZSBhIG5ldyBmaWxlIG5hbWUgZm9yIGEgbm9kZSBpZiB3ZSBkaWRuJ3QgY2xvc2UKCXRoZSBjdXJyZW50IGZpbGUuCgoJMjAwMi0wMi0wMSAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCSogbWFrZWluZm8vbm9kZS5jIChjbV9ub2RlKTogQ2FsbCBodG1sX291dHB1dF9oZWFkIHdoZW5ldmVyIHdlCgljcmVhdGUgYSBuZXcgc3BsaXQtSFRNTCBmaWxlLgoKCSogbWFrZWluZm8vaHRtbC5jIChodG1sX291dHB1dF9oZWFkKTogTWFrZSBodG1sX3RpdGxlIHN0YXRpYy4KCUNvbXB1dGUgaXQgb25seSBvbmNlLCBhbmQgZG9uJ3QgZnJlZSBpdC4gIE91dHB1dCB0aGUgPGgxPiB0aXRsZQoJaGVhZGVyIG9ubHkgb25jZSBwZXIgcnVuLgoKCTIwMDItMDItMDIgIEVsaSBaYXJldHNraWkgIDxlbGl6QGlzLmVsdGEuY28uaWw+CgkqIG1ha2VpbmZvL3RvYy5jIChjb250ZW50c191cGRhdGVfaHRtbCk6IEZpeCB0aGUgY29uZGl0aW9uIGZvcgoJb21pdHRpbmcgZHVwbGljYXRlIFRPQyBlbnRyaWVzLiAgRml4IGNvbXBhcmlzb24gd2l0aCB0aGUgVE9DIGVudHJ5Cglmb3IgIlRvcCIuCgoyMDAyLTAyLTE0ICAgIDxrYXJsQGdudS5vcmc+CgoJKiBkb2MvTWFrZWZpbGUuYW0gKERJU1RDTEVBTkZJTEVTKTogdXNlIHRoaXMgdmFyaWFibGUgaW5zdGVhZCBvZgoJdGhlIGRpc3RjbGVhbi1hbWluZm8gdGFyZ2V0LCB3aGljaCBhcHBhcmVudGx5IGlzIG5vIGxvbmdlciB1c2VkLgoKCSogcHJldGVzdCA0LjBnLgoKCSogZG9jL3RleGluZm8udGV4IChcYXBwZW5kaXhlbnRyeSk6IG5ldyBtYWNybyBmb3IgdHlwZXNldHRpbmcKCWFwcGVuZGl4IHRvYyBlbnRyaWVzLgoJKFxhcHBlbmRpeHp6eiwgXHN1bW1hcnljb250ZW50cywgXHBkZm91dGxpbmVzKTogdXNlIGl0LCBpbnN0ZWFkIG9mCgl1c3VycGluZyBcY2hhcGVudHJ5LiAgVGhpcyBhbGxvd3MgdGhlIGJvb2ttYXJrcyBpbiB0aGUgcGRmIG91dHB1dAoJdG8gY29tZSBvdXQgcmlnaHQuICBSZXBvcnQgZnJvbTogS3VydCBIb3JuaWsKCTxLdXJ0Lkhvcm5pa0BjaS50dXdpZW4uYWMuYXQ+LgoKMjAwMi0wMi0xMyAgICA8a2FybEBnbnUub3JnPgoKCSogY29uZmlndXJlLmFjOiBBTExfTElOR1VBUyBpcyBkZXByZWNhdGVkIGFzIG9mIGdldHRleHQgMC4xMS4KCSogZG9jL3RleGluZm8udGV4IChcaW1hZ2UpOiByZW1vdmUgc3B1cmlvdXMgXGxvZ2dpbmdhbGwuCgoJKiBkb2MvdGV4aW5mby50eGk6IEBtYXRoIG5vdyBpbXBsaWVzIEB0ZXguCgkqIGRvYy90ZXhpbmZvLnRleCAoXG1hdGgpOiBpbXBseSBAdGV4LgoKMjAwMi0wMi0xMSAgICA8a2FybEBnbnUub3JnPgoKCSogbWFrZWluZm8vaW5zZXJ0aW9uLmMgKGhhbmRsZV92ZXJiYXRpbV9lbnZpcm9ubWVudCk6IHNhdmUgYW5kCglyZXN0b3JlIGZpbGxpbmdfZW5hYmxlZCBhbmQgaW5oaWJpdF9wYXJhZ3JhcGhfaW5kZW50YXRpb24uICBCdWcKCXJlcG9ydCBmcm9tOiBBbGV4YW5kcmUgRHVyZXQtTHV0eiA8ZHVyZXRfZ0BscmRlLmVwaXRhLmZyPi4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKHJlYWRlcl9sb29wKTogZG9uJ3Qgd29ycnkgYWJvdXQgYmFyZSBicmFjZXMKCWluc2lkZSBAbWF0aC4KCjIwMDItMDItMDggICAgPGthcmxAZ251Lm9yZz4KCgkqIGluZm8vaW5mb2RvYy5jOiBrZWVwIHVuZGVybGluZXMgd2l0aCB0aGUgdGV4dCB0aGV5IHJlZmVyIHRvLCBmb3IKCQl0cmFuc2xhdGlvbiBwdXJwb3Nlcy4KCVBvaW50ZWQgb3V0IGJ5IENocmlzdGlhbiBSb3NlIDxtZW50aG9zQG1lbnRob3MuY29tPiwgMjAgbm92IDIwMDEuCgoJKiBkb2MvaW5mby50ZXhpOiByZWNvbW1lbmQgc2V0dGluZyBJTkZPUEFUSC4KCgkqIGRvYy9NYWtlZmlsZS5hbSAoaW5zdGFsbC10ZXgpOiBuZWVkICQoc3JjZGlyKSBmb3IgaW5zdGFsbC4KCUZyb206IGlzdHJ5IDxpc3RyeUBtYWlsLnJ1Pi4KCgkqIGRvYy90ZXhpbmZvLnRleDogcmVwbGFjZSAkJCQgZGVsaW1pdGVyIHdpdGggJC4kLCBmb3Igc2FrZSBvZgoJZm9udC1sb2NrIGluIEVtYWNzIDIxLjEuICBTdWdnZXN0aW9uIGZyb206IFN0ZXBoZW4gR2lsZGVhCgk8Z2lsZGVhQHN0b3AubWFpbC1hYnVzZS5vcmc+LgoKCTIwMDItMDEtMjYgIEVsaSBaYXJldHNraWkgIDxlbGl6QGlzLmVsdGEuY28uaWw+CgkqIGluZm8vaW5mb21hcC5jIChkZWZhdWx0X2VtYWNzX2xpa2VfaW5mb19rZXlzKQoJKGRlZmF1bHRfZW1hY3NfbGlrZV9lYV9rZXlzLCBkZWZhdWx0X3ZpX2xpa2VfaW5mb19rZXlzKQoJKGRlZmF1bHRfdmlfbGlrZV9lYV9rZXlzKTogRml4IGRlZmF1bHQga2V5YmluZGluZ3MgdG8gYmUKCWNvbnNpc3RlbnQgd2l0aCBub24tSU5GT0tFWSBicmFuY2guICBBZGQgYmluZGluZ3MgZm9yIEhvbWUsIEVuZCwKCWFuZCBEZWxldGUga2V5cy4KCgkyMDAyLTAxLTIzICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgoJKiBtYWtlaW5mby90b2MuaCA8VE9DX0VOVFJZX0VMVD46IE5ldyBtZW1iZXIgaHRtbF9maWxlLgoKCSogbWFrZWluZm8vdG9jLmMgKHRvY19hZGRfZW50cnkpOiBDb21wdXRlIGFuZCBzZXQgdGhlIGh0bWxfZmlsZQoJbWVtYmVyLgoJKHNob3J0Y29udGVudHNfdXBkYXRlX2h0bWwpOiBQcm9kdWNlIHRoZSB0b2NfKiBsaW5rcyBjb3JyZWN0bHksCgl3aXRob3V0IGR1cGxpY2F0aW5nIHRoZSBsaW5rIHRleHQuICBGaXggY29tcGFyaXNvbiB3aXRoICJUb3AiLgoJSGFuZGxlIHRoZSBjYXNlIHdoZW4gdGhlcmUncyBAc2hvcnRjb250ZW50cywgYnV0IG5vIEBjb250ZW50cy4KCShjb250ZW50c191cGRhdGVfaHRtbCk6IEZpeCB0aGUgd2F5IHRvY18qIGFuY2hvcnMgYXJlIHByb2R1Y2VkCglmcm9tIHRvY19lbnRyeV9hbGlzdFtpXS0+bmFtZTogdGFrZSBvbmx5IHRoZSBub2RlIG5hbWUgZnJvbSB0aGUKCXN0cmluZyBpbiB0b2NfZW50cnlfYWxpc3RbaV0tPm5hbWUuICBGaXggY29tcGFyaXNvbiB3aXRoICJUb3AiLgoKCSogbWFrZWluZm8vc2VjdGlvbmluZy5jIChzZWN0aW9uaW5nX2h0bWwpOiBUYWtlIHRoZSB0b2NfYW5jaG9yCglzdWJzdHJpbmcgYmVmb3JlIGNsb3NpbmcgdGhlIGFuY2hvciB3aXRoIDwvYT4uICBGaXggdGhlIGNsb3NpbmcKCTwvaE4+IHRhZy0tYWRkIDIgdG8gbGV2ZWwsIG5vdCAxLiAgVXNlIHNpemVvZiBpbnN0ZWFkIG9mIGEgbWFnaWMKCXZhbHVlIG9mIDkuCgoJKiBtYWtlaW5mby9jbWRzLmM6IE1ha2UgQHN1bW1hcnljb250ZW50cyBjYWxsIGNtX3Nob3J0Y29udGVudHMsIGFzCglwcm9taXNlZCBieSB0aGUgZG9jcy4KCgkyMDAyLTAxLTE5ICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgoJKiBkamdwcC9jb25maWcuc2VkOiBGaXggYSBwcm9ibGVtIHdpdGggQUNfQ09ORklHX0xJTktTIHRoYXQKCXByZXZlbnRlZCBidWlsZGluZyBmcm9tIGEgZGlyZWN0b3J5IG9uIGFub3RoZXIgZHJpdmUuCgoJKiBkamdwcC9jb25maWcuYmF0OiBGaXggcHJvYmxlbXMgd2l0aCBsb25nIC0tc3JjZGlyIGRpZWN0b3J5IG5hbWVzLgoKCSogZGpncHAvUkVBRE1FOiBVcGRhdGUuCgoyMDAyLTAxLTMxICAgIDxrYXJsQGdudS5vcmc+CgoJKiBkb2MvdGV4aW5mby50eGk6IG1lbnRpb24gZHZpcHMKCjIwMDItMDEtMjggICAgPGthcmxAZ251Lm9yZz4KCgkqIGNvbmZpZ3VyZS5hYyAoQUxMX0xJTkdVQVMpOiBhZGQgaHIuCgoyMDAyLTAxLTIyICAgIDxrYXJsQGdudS5vcmc+CgoJKiBtYWtlaW5mby9kZWZ1bi5jIChkZWZ1bi5jKTogb25seSB3YXJuIGFib3V0ICggaW1tZWRpYXRlbHkKICAgICAgICBmb2xsb3dpbmcgYSBkZWZ1biBuYW1lLCBzaW5jZSB0aGUgZ3JvZmYgbWFudWFsIG5lZWRzIG90aGVyCiAgICAgICAgY2hhcmFjdGVycyB0aGVyZSB3aGVyZSB3aGl0ZXNwYWNlIGlzIGluY29ycmVjdC4KCVJlcG9ydGVkIGJ5IFdlcm5lciBMZW1iZXJnIDx3bEBnbnUub3JnPi4KCgkqIGRvYy9pbmZvLXN0bmQudGV4aTogYWxwaGFiZXRpemUgdmFyaWFibGUgbGlzdC4KCgkqIGRvYy90ZXhpbmZvLnR4aTogbm8gOidzIGluIGluZGV4IGVudHJpZXMsIGluZGV4IEBwYWdlL0Bncm91cAoJc29tZSBtb3JlLgoKCSogbWFrZWluZm8vaW5kZXguYyAoaW5kZXhfYWRkX2FyZyk6IHdhcm4gaWYgaW5kZXggZW50cnkgY29udGFpbnMgYQoJY29sb24uICBGcm9tOiBLZW5uZXRoIExvcmJlciA8a2VuaUBoaXMuY29tPi4KCjIwMDItMDEtMjEgICAgPGthcmxAZ251Lm9yZz4KCgkqIG1ha2VpbmZvL2luc2VydGlvbi5jOiA8L3ByZSBub3QgLzxwcmUsIHJlcG9ydGVkIGJ5IE1pa2UKCUJlbmVmaWVsZCA8bWlrZUBkdWNrYnJhaW4uY29tPi4KCjIwMDItMDEtMTggICAgPGthcmxAZ251Lm9yZz4KCgkqIGNvbmZpZ3VyZS5hYzogcHJldGVzdCA0LjBmLgoKCSogdXRpbC90ZXhpbmRleC5jOgoJKiB1dGlsL2luc3RhbGwtaW5mby5jOgoJKiBtYWtlaW5mby9tYWtlaW5mby5jOgoJKiBpbmZvL2luZm8uYzogaXQncyAyMDAyLgoKCSogaW5mby9zZXNzaW9uLmM6IHBhc3MgcmlnaHQgYXJncyB0byBpbmZvX3Njcm9sbF9oYWxmX3NjcmVlbl91cC4KCUZyb20gRWxpLgoKMjAwMi0wMS0xOCAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCgkqIG1ha2VpbmZvL211bHRpLmMgKG11bHRpdGFibGVfaXRlbSk6IEFsd2F5cyByZXR1cm4gYSB2YWx1ZS4KCgkqIHV0aWwvaW5zdGFsbC1pbmZvLmMgKHhtYWxsb2MsIHhyZWFsbG9jLCBwZmF0YWxfd2l0aF9uYW1lKQoJKG9wZW5fcG9zc2libHlfY29tcHJlc3NlZF9maWxlLCBwYXJzZV9pbnB1dCk6IENhbGwgYGZhdGFsJyB3aXRoIDMKCWFyZ3VtZW50cywgdG8gYXZvaWQgY29tcGlsZXIgd2FybmluZ3MuCgkobWFpbik6IENhbGwgYGZhdGFsJywgYGVycm9yJywgYW5kIGB3YXJuaW5nJyB3aXRoIHRoZSByaWdodCBudW1iZXIKCW9mIGFyZ3VtZW50cy4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKG1haW4pOiBSZW1vdmUgZXh0cmFuZW91cyBmaXJzdCBhcmcgb2YKCXVzYWdlKCkuCgoJKiBpbmZvL3dpbmRvdy5jIChidWlsZF9tZXNzYWdlX25vZGUpOiBTdXBwbHkgYSA0dGggYXJndW1lbnQgdG8KCWJ1aWxkX21lc3NhZ2VfYnVmZmVyLgoKCjIwMDItMDEtMTggIEVsaSBaYXJldHNraWkgIDxlbGl6QGlzLmVsdGEuY28uaWw+CgoJKiBtYWtlaW5mby9zZWN0aW9uaW5nLmMgKHNlY3Rpb25pbmdfaHRtbCk6IEVuZCB0aGUgYW5jaG9yIHByb3Blcmx5Cgl3aXRoIGEgPC9hPi4KCgkqIGluZm8vc2Vzc2lvbi5jIChpbmZvX21lbnVfb3JfcmVmX2l0ZW0pOiBJZiB3ZSBkaWRuJ3QgZmluZCBhCgljcm9zcy1yZWZlcmVuY2Ugb24gdGhpcyBsaW5lLCB0cnkgdGhlIG9uZSBiZWZvcmUuCgoJKiBpbmZvL2luZm9tYXAuYyAoZmV0Y2hfdXNlcl9tYXBzKTogUHJvdmlkZSB0d28gZGlmZmVyZW50Cgl0cmFuc2xhdGlvbnMgZm9yIGBgZmlsZSB0b28gc21hbGwnJyBhbmQgYGBmaWxlIHRvbyBiaWcnJyBlcnJvci4KCgkqIGluZm8vaW5mby5jIChpbmZvX3Nob3J0X2hlbHApOiBQcmludCB0aGUgLS1zcGVlY2gtZnJpZW5kbHkKCW9wdGlvbiB0b2dldGhlciB3aXRoIHRoZSBvdGhlciBvcHRpb25zLCBub3QgYXQgdGhlIGVuZCBvZiB0aGUgaGVscAoJc2NyZWVuLgoKMjAwMi0wMS0xOCAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAc3VzZS5kZT4KCgkqIG1ha2VpbmZvL2h0bWwuYyAoZXNjYXBlX3N0cmluZyk6IFdoZW4gc3RyaW5nIGlzIGVtcHR5IGRvbid0IHJlYWQKCXBhc3QgZW5kIG9mIGl0LgoKMjAwMi0wMS0xNyAgICA8a2FybEBnbnUub3JnPgoKCSogZG9jL2luZm8tc3RuZC50ZXhpOiBvdmVyZnVsbCBib3ggaW4gdGFibGUuCgoyMDAyLTAxLTE2ICAgIDxrYXJsQGdudS5vcmc+CgoJKiBjb25maWd1cmUuYWM6IHByZXRlc3QgNC4wZS4KCgkqIGRvYy9pbmZvLnRleGk6IHVwZGF0ZSBmcm9tIGVtYWNzLgoKMjAwMi0wMS0wMyAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKGZpbGVfbGluZV9lcnJvcik6IE5ldyBmdW5jdGlvbi4KCgkqIG1ha2VpbmZvL2luc2VydGlvbi5jIChkaXNjYXJkX2luc2VydGlvbnMpOiBDYWxsIGZpbGVfbGluZV9lcnJvcgoJaW5zdGVhZCBvZiBjaGFuZ2luZyBnbG9iYWwgdmFyaWFibGVzLgoKCSogbWFrZWluZm8vc2VjdGlvbmluZy5jIChjbV90b3ApOiBEaXR0by4KCgkqIG1ha2VpbmZvL25vZGUuYyAodmFsaWRhdGVfZmlsZSk6IERpdHRvLgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAoZGlzY2FyZF9icmFjZXMsIGhhbmRsZV92YXJpYWJsZV9pbnRlcm5hbCk6CglEaXR0by4KCgkqIG1ha2VpbmZvL21hY3JvLmMgKGRlZmluZV9tYWNybyk6IERpdHRvLgoKCTIwMDEtMTItMzEgIEVsaSBaYXJldHNraWkgIDxlbGl6QGlzLmVsdGEuY28uaWw+CgoJKiBtYWtlaW5mby9ub2RlLmggKFRBR19FTlRSWSk6IE5ldyBzdHJ1Y3QgbWVtYmVyIGh0bWxfZm5hbWUuCgoJKiBtYWtlaW5mby9ub2RlLmMgKGZpbmRfbm9kZV9ieV9mbmFtZSk6IE5ldyBmdW5jdGlvbi4KCShyZW1lbWJlcl9ub2RlKTogQWNjZXB0IGFuIGFkZGl0aW9uYWwgYXJndW1lbnQgRk5BTUUsIHRoZSBub2RlJ3MKCWZpbGUgbmFtZSwgYW5kIHJlY29yZCBpdCBpbiB0aGUgbGlzdCBvZiBub2RlczsgY2FsbGVycyBjaGFuZ2VkLgoJKGNtX25vZGUpOiBDYWxsIGZpbmRfbm9kZV9ieV9mbmFtZSB0byBzZWUgaWYgdGhpcyBub2RlJ3MgZmlsZSBuYW1lCgljbGFzaGVzIHdpdGggYW5vdGhlciBub2RlIG9yIGFuY2hvci4gIElmIGl0IGNsYXNoZXMgd2l0aCBhbm90aGVyCglub2RlLCBhcHBlbmQgdGhlIG5ldyBub2RlIHRvIHRoZSBzYW1lIGZpbGUgaW5zdGVhZCBvZiBlcmFzaW5nIHRoZQoJb3RoZXIgbm9kZS4gIElmIGl0IGNsYXNoZXMgd2l0aCBhbiBhbmNob3IsIHByaW50IGFuIGVycm9yIG1lc3NhZ2UKCWFuZCBvdmVyd3JpdGUgdGhlIGFuY2hvcidzIGZpbGUuCgkoY21fYW5jaG9yKTogSWYgdGhpcyBhbmNob3IncyBmaWxlIG5hbWUgY2xhc2hlcyB3aXRoIGFub3RoZXIKCWFuY2hvciBvciBub2RlLCBwcmludCBhbiBlcnJvciBtZXNzYWdlIGFuZCBpZ25vcmUgdGhlIGFuY2hvci4KCgkqIG1ha2VpbmZvL2ZpbGVzLmMgKG5vcm1hbGl6ZV9maWxlbmFtZSk6IE5ldyBmdW5jdGlvbi4KCgkqIG1ha2VpbmZvL2ZpbGVzLmggPG5vcm1hbGl6ZV9maWxlbmFtZT46IEFkZCBkZWNsYXJhdGlvbi4KCgkqIG1ha2VpbmZvL2h0bWwuYyAobm9kZW5hbWVfdG9fZmlsZW5hbWVfMSk6IENhbGwKCW5vcm1hbGl6ZV9maWxlbmFtZSBiZWZvcmUgcmV0dXJuaW5nIHRoZSBmaWxlIG5hbWUgdG8gdGhlIGNhbGxlci4KCURpc2FibGUgdGhlIGNvZGUgd2hpY2ggYWRkcyAjTm9kaWZpZWQtZmlsZW5hbWUgdG8gdGhlIGZpbGUgbmFtZSB3ZQoJcHJvZHVjZS4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKGFkZF9jaGFyKTogRG9uJ3QgcmVwbGFjZSB3aGl0ZXNwYWNlIHdpdGgKCSZuYnNwOyBpZiB3ZSBhcmUgcHJvZHVjaW5nIGFuIEhUTUwgZGlyZWN0aXZlLgoJKGFkZF9odG1sX2VsdCk6IE5ldyBmdW5jdGlvbi4KCShjbV94cmVmLCBjbV9pbmZvcmVmLCBjbV91cmVmLCBjbV9lbWFpbCwgY21faW1hZ2UpOiBVc2UKCWFkZF9odG1sX2VsdCBpbnN0ZWFkIG9mIGFkZF93b3JkLCB3aGVyZSBhcHByb3ByaWF0ZS4KCgkqIG1ha2VpbmZvL2h0bWwuYyAoYWRkX2xpbmspOiBEaXR0by4KCgkqIG1ha2VpbmZvL2Zvb3Rub3RlLmMgKGNtX2Zvb3Rub3RlKTogRGl0dG8uCgoJKiBtYWtlaW5mby9kZWZ1bi5jIChkZWZ1bl9pbnRlcm5hbCk6IERpdHRvLgoKCTIwMDEtMTItMjcgIEVsaSBaYXJldHNraWkgIDxlbGl6QGlzLmVsdGEuY28uaWw+CgoJKiBtYWtlaW5mby9ub2RlLmMgKGNtX25vZGUpOiBEb24ndCBvbWl0IGxpbmtzIHRvIChESVIpIGZyb20gdGhlCgluYXZpZ2F0aW9uIGJhciwgYWRkX2FuY2hvcl9uYW1lIHdpbGwgRFRSVCBub3cuCgoJKiBtYWtlaW5mby9tYWtlaW5mby5jIChjbV94cmVmKTogUHJvZHVjZSBhIHNwbGl0LUhUTUwgZmlsZSBuYW1lCglmcm9tIGFyZzEsIHRoZSBub2RlIG5hbWUsIG5vdCBmcm9tIGFyZzMgb3IgYXJnMiwgd2hpY2ggYXJlIHRoZQoJcmVmZXJlbmNlIG5hbWUuICBVc2UgYXJnMiBvciBhcmczIGZvciB0aGUgdGV4dCB0byBiZSBkaXNwbGF5ZWQgYXMKCWEgbGluayBiZXR3ZWVuICI+IiBhbmQgIjwvYT4iLiAgVXNlIGFkZF9hbmNob3JfbmFtZSBpbnN0ZWFkIG9mCglhZGRfbm9kZW5hbWVfdG9fZmlsZW5hbWUuCgkoY21faW5mb3JlZik6IFVzZSBhZGRfYW5jaG9yX25hbWUgaW5zdGVhZCBvZgoJYWRkX25vZGVuYW1lX3RvX2ZpbGVuYW1lLiAgSGFuZGxlIHRoZSBjYXNlIG9mIGEgbWlzc2luZyBzZWNvbmQKCWFyZ3VtZW50IGluIEBpbmZvcmVmLgoKCSogbWFrZWluZm8vaHRtbC5jIChhZGRfYW5jaG9yX25hbWUpOiBBbHdheXMgYWRkICMgYW5kIHRoZSBhbmNob3IKCW5hbWUsIGV2ZW4gaWYgd2UgYXJlIHNwbGl0dGluZy4gIElmIHRoZSBub2RlIGlzICIoZGlyKSIsIHRyZWF0IGl0CglhcyBpZiBpdCB3ZXJlICJkaXIiLgoJKG5vZGVuYW1lX3RvX2ZpbGVuYW1lXzEpOiBEb24ndCBhcHBlbmQgI1RvcCBmb3IgdGhlIFRvcCBub2RlLgoJKGFkZF9saW5rKTogRG9uJ3QgcHVudCBpZiBub2RlbmFtZSBpcyAiKGRpcikiLiAgT3V0cHV0ICI8L2E+IgoJYWZ0ZXIgdGhlIGxpbmsuCgoJMjAwMS0xMi0yNSAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKGNtX3hyZWYsIGNtX2luZm9yZWYpOiBPdXRwdXQgdGhlIHRhcmdldAoJZmlsZSBuYW1lIHZpYSBhZGRfbm9kZW5hbWVfdG9fZmlsZW5hbWUuCgoJMjAwMS0xMi0yMCAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCgkqIG1ha2VpbmZvL2h0bWwuYyAobm9kZW5hbWVfdG9fZmlsZW5hbWVfMSk6IE1ha2UgcmVmZXJlbmNlcyB0byBUb3AKCXRvIHJlZmVyIHRvIGluZGV4Lmh0bWwjVG9wLgoJKGFkZF9ub2RlbmFtZV90b19maWxlbmFtZSk6IEFjY2VwdCBhZGRpdGlvbmFsIGFyZ3VtZW50IEhSRUY7CgljYWxsZXJzIGNoYW5nZWQuCgoJKiBtYWtlaW5mby90b2MuYyAocmV3cml0ZV90b3ApOiBJZiB0aGUgZmlsZW5hbWUgdG8gcmV3cml0ZSBpcwoJc3Rkb3V0IG9yIHRoZSBudWxsIGRldmljZSwgZG8gbm90aGluZy4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKGluc2VydF90b3BsZXZlbF9zdWJkaXJlY3RvcnkpOiBVc2UKCUZJTEVOQU1FX0NNUCBpbnN0ZWFkIG9mIHN0cmNtcC4gIFNlYXJjaCBmb3IgYSBwZXJpb2QgZm9yd2FyZCwgbm90CgliYWNrd2FyZC4gIE1ha2UgaW5kZXhfbmFtZVtdIGEgc3RhdGljIGNvbnN0IGFycmF5LCBhbmQgaXRzIGxlbgoJY29tcHV0ZWQgYXQgY29tcGlsZSB0aW1lLgoJKGNvbnZlcnRfZnJvbV9sb2FkZWRfZmlsZSk6IElmIG91dHB1dF9maWxlbmFtZSBpcyB0aGUgbnVsbCBkZXZpY2UsCgl0dXJuIG9mZiBIVE1MIHNwbGl0dGluZy4KCShjbV94cmVmKTogVXNlIGFkZF9hbmNob3JfbmFtZSwgcmF0aGVyIHRoYW4gYWRkX2VzY2FwZWRfYW5jaG9yX25hbWUsCglpbiB0aGUgNS1hcmd1bWVudCBjYXNlIGluIEhUTUwgbW9kZS4KCShjbV9pbmZvcmVmKTogRml4IGV4dGVybmFsIHJlZmVyZW5jZXMgaW4gSFRNTCBtb2RlLgoKCSogbWFrZWluZm8vbm9kZS5jIChjbV9ub2RlKTogVXNlIEZJTEVOQU1FX0NNUCBpbnN0ZWFkIG9mIHN0cmNtcC4KCURvbid0IG9wZW4gYSBuZXcgZmlsZSBpZiB0aGUgbmV3IG5vZGUncyBuYW1lIGlzIGVtcHR5LiAgVGFrZSB0aGUKCWRpcmVjdG9yeSBwYXJ0IG9mIHNwbGl0LUhUTUwgZmlsZXMgZnJvbSBjdXJyZW50X291dHB1dF9maWxlbmFtZSwKCW5vdCBmcm9tIHRvcGxldmVsX291dHB1dF9maWxlbmFtZSAodGhlIGxhdHRlciBkb2Vzbid0IGluY2x1ZGUgdGhlCgltYW51YWwncyBzdWJkaXJlY3RvcnkgcGFydCkuCgoJKiBtYWtlaW5mby9odG1sLmMgKG5vZGVuYW1lX3RvX2ZpbGVuYW1lXzEpOiBVc2UgRklMRU5BTUVfQ01QTgoJaW5zdGVhZCBvZiBzdHJuY21wLiAgU3VwcG9ydCAqLmluZiBmaWxlcyBpbiByZWZlcmVuY2VzLgoKMjAwMS0xMi0xMSAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCgkqIGRqZ3BwL2NvbmZpZy5iYXQsIGRqZ3BwL2NvbmZpZy5zZWQsIGRqZ3BwL2NvbmZpZy5zaXRlOiBVcGRhdGUKCWZvciBUZXhpbmZvIDQuMGQuCgoJKiBtYWtlaW5mby9tYWtlaW5mby5jIChpbnNlcnRfdG9wbGV2ZWxfc3ViZGlyZWN0b3J5KTogVXNlIElTX1NMQVNICglpbnN0ZWFkIG9mIGxpdGVyYWwgYC8nLgoJKGNvbnZlcnRfZnJvbV9sb2FkZWRfZmlsZSk6IEZsdXNoIHRoZSBvdXRwdXQgc3RyZWFtIGJlZm9yZQoJY3JlYXRpbmcgdGhlIFRPQy4KCgoyMDAyLTAxLTE0ICAgIDxrYXJsQGdudS5vcmc+CgoJKiBpbmZvL2luZm8uYzogdHJhbnNsYXRlIC0tc3BlZWNoLWZyaWVuZGx5IChmcm9tIEVsaSkuCgkqIG1ha2VpbmZvL2luZGV4LmM6IGZvcm1hdHRpbmcuCgoJMjAwMS0xMi0yNCAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCSogaW5mby9pbmZvbWFwLmMgKGluaXRpYWxpemVfaW5mb19rZXltYXBzKTogQmluZCB0aGUgdXNlci1kZWZpbmVkCglrZXlzIG9uIHRvcCBvZiB0aGUgZGVmYXVsdCBvbmVzLCBub3QgdGhlIG90aGVyIHdheSBhcm91bmQuCgoyMDAyLTAxLTExICAgIDxrYXJsQGdudS5vcmc+CgoJKiBpbmZvL2luZm8uYzogY2FuJ3QgZG8gI2lmZGVmIGluc2lkZSBvZiBwcmludGYgYW55IG1vcmUuCglGcm9tOiBUeWxlciA8dHlsZXJAemVyb2RpdmlkZS5jeD4KCgkqIGNvbmZpZ3VyZS5hYyAoQUxMX0xJTkdVQVMpOiBhZGQgaGUsIGZyb20gRWxpLgoKMjAwMi0wMS0wOSAgRWxpIFphcmV0c2tpaSA8ZWxpekBpcy5lbHRhLmNvLmlsPgoKCSogaW5mby93aW5kb3cuYyAoY2FsY3VsYXRlX2xpbmVfc3RhcnRzKTogQ2FzdCBub2RlLT5jb250ZW50c1tpXSB0bwogCXVuc2lnbmVkIGNoYXIuCgoyMDAyLTAxLTA0ICAgIDxrYXJsQGdudS5vcmc+CgoJKiBkb2MvdGV4aW5mby50ZXggKFxmb290bm90ZXp6eik6IFxub2luZGVudD1ccmVsYXguCgoyMDAyLTAxLTAzICAgIDxrYXJsQGdudS5vcmc+CgoJKiBkb2MvdGV4aW5mby50ZXggKFxpbWFnZXh4eCk6IGhhbmRsZSBwZGYgYW5kIGR2aSBjYXNlcyB0aGUgc2FtZS4KICAgICAgICAoXGRvcGRmaW1hZ2UpOiBuZWVkIFxpbW1lZGlhdGUgdG8gYXZvaWQgc2VnIGZhdWx0IHdoZW4gaW5jbHVkaW5nIHRoZQoJc2FtZSBpbWFnZSB0d2ljZS4KCUJ1ZyByZXBvcnRzIGZyb20gQWxleGFuZHJlIER1cmV0LUx1dHogPGR1cmV0X2dAbHJkZS5lcGl0YS5mcj4uCgoyMDAxLTEyLTMxICAgIDxrYXJsQGdudS5vcmc+CgoJKiBtYWtlaW5mby9tYWtlaW5mby5jIChjbV9pbWFnZSk6IGNoZWNrICpleHRfYXJnIGFzIHdlbGwgYXMKCQlleHRfYXJnIHdoZW4gY29tcHV0aW5nIGxlbmd0aCBvZiBmdWxsbmFtZS4KCgkqIG1ha2VpbmZvL2RlZnVuLmM6IGRvY2Jvb2sgY2hhbmdlcy4KCSogbWFrZWluZm8vZG9jYm9vay5jIChkb2Nib29rX3B1bmN0dWF0aW9uKTogcmVtb3ZlIGRlcHJlY2F0ZWQKCQlkZWZhdWx0OiBhdCBlbmQgb2Ygc3RhdGVtZW50LgoKCSogbWFrZWluZm8vZG9jYm9vay5jOiBpbml0aWFsLgoJKiBtYWtlaW5mby9kb2Nib29rLmg6IGluaXRpYWwuCgkqIG1ha2VpbmZvL01ha2VmaWxlLmFtIChtYWtlaW5mb19TT1VSQ0VTKTogYWRkIGRvY2Jvb2suW2NoXS4KCSogbWFrZWluZm8vbWFrZWluZm8uYyAoYWRkX2NoYXIpOiB1c2UgJm5ic3A7IGluIGRvY2Jvb2sgY2FzZS4KCgkqIGRvYy90ZXhpbmZvLnRleCAoXGZvb3Rub3Rlenp6KTogdXNlIFxldmVyeXBhcj17XGhhbmd9IGluc3RlYWQgb2YKCWp1c3QgXGhhbmcgaW4gY2FzZSBhIGZvb3Rub3RlIGV4dGVuZHMgZm9yIG11bHRpcGxlIHBhcmFncmFwaHMuCgoyMDAxLTEyLTE4ICAgIDxrYXJsQGdudS5vcmc+CgoJKiBpbmZvL01ha2VmaWxlLmFtIChCVUlMVF9TT1VSQ0VTKTogaW5jbHVkZSAkKEVYRUVYVCkgb24gbWFrZWRvYwoJZGVwZW5kZW5jeSBzaW5jZSBhdXRvbWFrZSBkb2Vzbid0IGRvIGl0LgoKCTIwMDEtMTItMTEgIEVsaSBaYXJldHNraWkgIDxlbGl6QGlzLmVsdGEuY28uaWw+CgoJKiBkamdwcC9jb25maWcuYmF0LCBkamdwcC9jb25maWcuc2VkLCBkamdwcC9jb25maWcuc2l0ZTogVXBkYXRlCglmb3IgVGV4aW5mbyA0LjBkLgoKCSogaW5mby9pbmZvbWFwLmMgKGZldGNoX3VzZXJfbWFwcyk6IEluaXRpYWxpemUgYGZpbGVuYW1lJyB0byBOVUxMCglhbmQgZG9uJ3QgdHJ5IHRvIGNhbGwgYG9wZW4nIGlmIGBmaWxlbmFtZScgaXMgTlVMTC4KCVtfX01TRE9TX19dOiBUcnkgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGlmIG5laXRoZXIgJElORk9LRVkgbm9yCgkkSE9NRSBhcmUgZGVmaW5lZC4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKGluc2VydF90b3BsZXZlbF9zdWJkaXJlY3RvcnkpOiBVc2UgSVNfU0xBU0gKCWluc3RlYWQgb2YgbGl0ZXJhbCBgLycuCgkoY29udmVydF9mcm9tX2xvYWRlZF9maWxlKTogRmx1c2ggdGhlIG91dHB1dCBzdHJlYW0gYmVmb3JlCgljcmVhdGluZyB0aGUgVE9DLgoKCTIwMDEtMTItMTAgIEVsaSBaYXJldHNraWkgIDxlbGl6QGlzLmVsdGEuY28uaWw+CgoJKiBpbmZvL2luZm9rZXkuYyAobWFpbik6IFVzZSBGT1BFTl9XQklOIGluc3RlYWQgb2YgInciLgoKCSogaW5mby9pbmZva2V5LmggKElORk9LRVlfU1JDRklMRSwgSU5GT0tFWV9GSUxFKSBbX19NU0RPU19fXToKCVNwZWNpYWwgZGVmaW5pdGlvbnMgZm9yIE1TLURPUy4KCgkyMDAxLTEyLTA5ICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgoKCSogbGliL3N5c3RlbS5oOiBDb25kaXRpb24gaW5jbHVzaW9uIG9mIGxpYmludGwuaCBvbiBFTkFCTEVfTkxTLgoJKGdldHRleHQsIGJpbmR0ZXh0ZG9tYWluLCB0ZXh0ZG9tYWluKSBbIUVOQUJMRV9OTFNdOiBQcm92aWRlCgl0cml2aWFsIGRlZmluaXRpb25zIGZvciB3aGVuIE5MUyBpcyBub3QgdXNlZC4KCShMQ19NRVNTQUdFUykgWyFFTkFCTEVfTkxTXTogRGVmaW5lIGlmIHVuZGVmaW5lZCBieSBsb2NhbGUuaC4KCjIwMDEtMTItMTggIEVsaSBaYXJldHNraWkgIDxlbGl6QGlzLmVsdGEuY28uaWw+CgoJKiBpbmZvL2luZm9tYXAuYyAoZGVjb2RlX2tleXMpOiBDaGFuZ2UgdGhlIHJldHVybiB0eXBlIHRvIGludDsKCWNhbGxlcnMgY2hhbmdlZC4gIFJldHVybiB6ZXJvIGlmIHNvbWUgb2YgdGhlIHNwZWNpYWwga2V5cyBpbiBTUkMKCWFyZSBub3QgZGVmaW5lZCBieSB0aGUgdGVybWluYWw7IHJldHVybiBub24temVybyBvdGhlcndpc2UuCgkoc2VjdGlvbl90b19rZXltYXBzKTogSWYgZGVjb2RlX2tleXMgcmV0dXJucyB6ZXJvLCBkb24ndCBiaW5kIHRoZQoJa2V5IHNlcXVlbmNlLgoKMjAwMS0xMi0xOCAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCgkqIG1ha2VpbmZvL3htbC5jICh4bWxfaW5zZXJ0X2VsZW1lbnRfd2l0aF9hdHRyaWJ1dGUpCgkoeG1sX2luc2VydF9lbGVtZW50KTogUmVuYW1lIHRoZSBhcmd1bWVudCBgZWxlbWVudCcgdG8gYGVsdCcuCgoJKiBpbmZvL2luZm9rZXkuYyAoY29tcGlsZSk6IFVzZSBcMDMzIGluc3RlYWQgb2YgKG5vbi1zdGFuZGFyZCkgXGUuCgoyMDAxLTEyLTE3ICAgIDxrYXJsQGdudS5vcmc+CgoJMjAwMS0xMi0xNiAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCgkqIGluZm8vcGN0ZXJtLmMgKHBjX2luaXRpYWxpemVfdGVybWluYWwpIFtJTkZPS0VZXTogU3RvcmUgdGVybV9raCwKCXRlcm1fa2UsIHRlcm1fa2ksIGFuZCB0ZXJtX2t4IHNlcXVlbmNlcy4KCShESkdQUF9rZXl0YWIpOiBNYXAgSG9tZSwgRW5kLCBhbmQgSW5zZXJ0IHRvIGVzY2FwZSBzZXF1ZW5jZXMsIG5vdAoJdG8gQy1hLCBDLWUsIGV0Yy4KCgkqIGluZm8vaW5mb21hcC5jIChkZWZhdWx0X2VtYWNzX2xpa2VfaW5mb19rZXlzKQoJKGRlZmF1bHRfZW1hY3NfbGlrZV9lYV9rZXlzLCBkZWZhdWx0X3ZpX2xpa2VfaW5mb19rZXlzKQoJKGRlZmF1bHRfdmlfbGlrZV9lYV9rZXlzKTogQWRkIHRoZSBsZWFkaW5nIHN1cHByZXNzLWRlZmF1bHQgZmxhZywKCXRvIGJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgdGFibGUgd2hpY2ggY29tZXMgZnJvbSBhIGZpbGUuCgoJKiBpbmZvL3Nlc3Npb24uYyAoaW5mb19kb19sb3dlcmNhc2VfdmVyc2lvbik6IEFkZCBhIGRvYyBzdHJpbmcuCgoJKiBpbmZvL2luZm9kb2MuYyAoZGVzY3JpYmVfa2V5KSBbSU5GT0tFWV06IElmIGtleXN0cm9rZSBpcyBib3VuZAoJdG8gZG8tbG93ZXJjYXNlLXZlcnNpb24sIGJ1dCBpdHMgbG93ZXItY2FzZSB2YXJpYW50IGlzIHVuZGVmaW5lZCwKCXNheSB0aGF0IGtleXN0cm9rZSBpcyBhbHNvIHVuZGVmaW5lZC4KCgoyMDAxLTEyLTEyICAgIDxrYXJsQGdudS5vcmc+CgoJKiBtYWtlaW5mby9maWxlcy5jIChmaW5kX2FuZF9sb2FkKTogcmVtb3ZlIGNvbmRpdGlvbmFscyBvbgoJCSBWTVN8T19CSU5BUlksIGFsd2F5cyBqdXN0IHJlYWQgYXMgbWFueSBieXRlcyBhcyB3ZSBjYW4uCgogICAgICAgIDIwMDEtMTItMTEgIEVsaSBaYXJldHNraWkgIDxlbGl6QGlzLmVsdGEuY28uaWw+CiAgICAgICAgKiBuZXcgZmlsZXMgZm9yIGRqZ3BwLy4KCiAgICAgICAgMjAwMS0wOS0wOSAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCSogaW5mby9lY2hvLWFyZWEuYyAoYnVpbGRfY29tcGxldGlvbnMpOiBMb29rIGZvciBhIGNhbmRpZGF0ZQoJY29tcGxldGlvbiB3aGljaCBtYXRjaGVzIHVzZXIncyByZXF1ZXN0IGluY2x1ZGluZyB0aGUgbGV0dGVyLWNhc2UsCgl1c2UgdGhhdCBhcyB0aGUgdmFsdWUgb2YgTENEX2NvbXBsZXRpb24uCgogICAgICAgIDIwMDEtMTItMDYgIEVsaSBaYXJldHNraWkgIDxlbGl6QGlzLmVsdGEuY28uaWw+CgkqIGluZm8vZWNoby1hcmVhLmMgKGJ1aWxkX2NvbXBsZXRpb25zKTogV2hlbiBsb29raW5nIGZvciB0aGUgYmVzdAoJY29tcGxldGlvbiBjYW5kaWRhdGUsIG9ubHkgY29tcGFyZSBhcyBtdWNoIGNoYXJhY3RlcnMgYXMgdGhlIHVzZXIKCXR5cGVkLgoKCjIwMDEtMTItMDQgICAgPGthcmxAZ251Lm9yZz4KCgkqIGRvYy90ZXhpbmZvLnRleCAoXHBkZm1rcGduKTogcmVtb3ZlIHRyYWlsaW5nIEAgaW4gbGluayBuYW1lcwoJCWFnYWluLiAgQWxzbyBmcm9tIEt1cnQuCgoJKiBkb2MvdGV4aW5mby50ZXggKFxpbWFnZSk6IG5lZWQgZml2ZSBjb21tYXMgdG8gaWdub3JlIGFkZGl0aW9uYWwKCW9wdGlvbmFsIGFyZ3MgdG8gQGltYWdlLiAgRnJvbSBLdXJ0Lkhvcm5pa0BjaS50dXdpZW4uYWMuYXQuCgoJKiBkb2MvdGV4aW5mby50ZXggKFxhZm91cmxhdGV4KTogcmVzZXQgXGdsb2JhbGRlZnM9MCBleHBsaWNpdGx5LgoJRnJvbSBUcm9uZCBFbmRyZXN0+GwgPHRyb25kQHJhbXN0aW5kLmd0Zi5vbC5ubz4uCgoyMDAxLTEyLTAxICAgIDxrYXJsQGdudS5vcmc+CgoJKiBtYWtlaW5mby9maWxlcy5jIChmaW5kX2FuZF9sb2FkKTogcmVtb3ZlIE9fQklOQVJZIGZyb20gb3BlbgoJY2FsbCwgdGhpcyBtZXNzZXMgdXAgdW5kZXIgV2luZG93cy4gIEZyb20gZWxpLgoKMjAwMS0xMS0yMCAgICA8a2FybEBnbnUub3JnPgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAoY21faW1hZ2UpOiByZXdvcmQgZXJyb3IgbWVzc2FnZXMuCgoyMDAxLTExLTE5ICAgIDxrYXJsQGdudS5vcmc+CgoJKiBQcmV0ZXN0IDQuMGQuCgkqIGRvYy90ZXhpbmZvLnR4aTogaW5kZXggcmFnZ2VkIHJpZ2h0L2xlZnQuCgoJKiBpbmZvL3dpbmRvdy5jIChidWlsZF9tZXNzYWdlX2J1ZmZlcik6IGhhbmRsZSAlMSRzIGFzIHVzZWQgaW4KCWphLnBvLiAgRnJvbSBGdW1pdG9zaGkgVUtBSSA8dWthaUBkZWJpYW4ub3IuanA+LgoKCSogY29uZmlndXJlLmFjIChBTExfTElOR1VBUyk6IGFkZCBzdi4KCjIwMDEtMTEtMTYgICAgPGthcmxAZ251Lm9yZz4KCgkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogYWRkIENPUFlJTkcuRE9DLgoKICAgICAgICAxOTk5LTEwLTMwICBBbmRyZXcgQmV0dGlzb24gIDxhbmRyZXdiQHppcC5jb20uYXU+CgoJQWxsIHRoZXNlIGNoYW5nZXMgYXJlIHRvIGltcGxlbWVudCB1c2VyLWNvbmZpZ3VyYWJsZSBrZXkgbWFwcGluZwoJdXNpbmcgdGhlIG5ldyAnaW5mb2tleScgcHJvZ3JhbS4gIEZvciB0aGUgdGltZSBiZWluZywgdGhlIG5ldwoJY29kZSBpcyBjb25kaXRpb25hbCBvbiBbSU5GT0tFWV0gYW5kIHRoZSBvbGQgY29kZSBpcyBzdGlsbCB0aGVyZQoJaW4gY2FzZSB3ZSB3YW50IHRvIHJldmVydC4KCgkqIGluZm8vc2Vzc2lvbi5jIChpbmNyZW1lbnRhbF9zZWFyY2gpOiB0ZXN0IGZvciBwcmludGFibGUgY2hhcnMKCV9iZWZvcmVfIGlzZWFyY2ggY29tbWFuZCBrZXlzIC0tIG1ha2VzIGEgZGlmZmVyZW5jZSBpZiB0aGUKCWlzZWFyY2ggY29tbWFuZHMgYXJlIGJvdW5kIHRvIHByaW50YWJsZSBjaGFycy4KCgkqIGluZm8vZG9jLmgsCgkqIGluZm8vaW5mb2RvYy5jLAoJKiBpbmZvL2luZm9tYXAuYywKCSogaW5mby9tLXguYywKCSogaW5mby9zZXNzaW9uLmM6IE5ldyB0eXBlZGVmIEluZm9Db21tYW5kLCBwbHVzIGEgYnVuY2ggb2YKCXN1cHBvcnRpbmcgbWFjcm9zLCB0byBhYnN0cmFjdCBhICJjb21tYW5kIiBhd2F5IGZyb20gYmVpbmcgYQoJZnVuY3Rpb24gcG9pbnRlci4KCgkqIGluZm8vZG9jLmggKHByZXR0eV9rZXlzZXEpLAoJKiBpbmZvL2luZm9kb2MuYyAocHJldHR5X2tleXNlcSksCgkqIGluZm8vc2Vzc2lvbi5jIChwcmV0dHlfa2V5c2VxKTogTW92ZWQgZGVmaW5pdGlvbiBmcm9tCglzZXNzaW9uLmMgaW50byBpbmZvZG9jLmMsIGFuZCByZXdyb3RlIHRvIHJlY29nbmlzZSBzcGVjaWFsCgl0ZXJtaW5hbCBzZXF1ZW5jZXMgKFBnVXAsIFBnRG4sIGV0Yy4pLgoKCSogaW5mby9pbmZvZG9jLmMgKGNyZWF0ZV9pbnRlcm5hbF9pbmZvX2hlbHBfbm9kZSwKCXJlcGxhY2VfaW5fZG9jdW1lbnRhdGlvbiwgaW5mb193aGVyZV9pcyksCgkqIGluZm8vbS14LmMgKGluZm9fZXhlY3V0ZV9jb21tYW5kKTogQ2xlYW5lZCB1cCByZWZlcmVuY2VzIHRvCgloYXJkd2lyZWQga2V5c3Ryb2tlcy4KCgkqIGluZm8vaW5mb2RvYy5jIChyZXBsYWNlX2luX2RvY3VtZW50YXRpb24pOgoJRXh0ZW5kZWQgdGhlIFxcW2Zvb10gc3ludGF4IHRvIHJlY29nbmlzZSBcXCUtWC5ZW2Zvb10sIHdoaWNoCgljYXVzZXMgdGhlIHJlcGxhY2VtZW50IHRleHQgdG8gYmUgaW5zZXJ0ZWQgdXNpbmcgc3ByaW50ZigiJS1YLllzIikuCgoJKiBpbmZvL3Nlc3Npb24uYyAoX3Njcm9sbF9mb3J3YXJkLCBfc2Nyb2xsX2JhY2t3YXJkLAoJc2Nyb2xsX2ZvcndhcmRfcGFnZV9vbmx5LCBzY3JvbGxfYmFja3dhcmRfcGFnZV9vbmx5LAoJc2Nyb2xsX2ZvcndhcmRfcGFnZV9vbmx5X3NldF93aW5kb3csCglzY3JvbGxfYmFja3dhcmRfcGFnZV9vbmx5X3NldF93aW5kb3cpOiBOZXcgZnVuY3Rpb25zLCBlbGltaW5hdGluZwoJbmVlZCBmb3IgU1BDIGFuZCBERUwgaGFjay4KCgkqIGluZm8vc2Vzc2lvbi5jIChzY3JvbGxfZm9yd2FyZCwgc2Nyb2xsX2JhY2t3YXJkLAoJc2Nyb2xsX2ZvcndhcmRfc2V0X3dpbmRvdywgc2Nyb2xsX2JhY2t3YXJkX3NldF93aW5kb3cpOiBDYWxsCglfc2Nyb2xsX2ZvcndhcmQgYW5kIF9zY3JvbGxfYmFja3dhcmQgdG8gZG8gYWxsIHRoZSB3b3JrLgoKCSogaW5mby9pbmZvbWFwLmMgKGluaXRpYWxpemVfaW5mb19rZXltYXBzKVshSU5GT0tFWV06IHNldCAndicKCWFuZCBDb250cm9sKCd2Jykga2V5IGJpbmRpbmdzIHRvIGluZm9fc2Nyb2xsX2JhY2t3YXJkX3BhZ2Vfb25seQoJYW5kIGluZm9fc2Nyb2xsX2ZvcndhcmRfcGFnZV9vbmx5IHJlc3BlY3RpdmVseS4KCgkqIGluZm8vTWFrZWZpbGUuYW0gKGJpbl9QUk9HUkFNUyk6IEFkZGVkIG5ldyBleGVjdXRhYmxlIGBpbmZva2V5Jy4KCShpbmZva2V5X1NPVVJDRVMpOiBEZWZpbmVkLgoJKEVYVFJBX0RJU1QpOiBBZGRlZCBgc2FtcGxlX2luZm9rZXknLgoJKEJVSUxUX1NPVVJDRVMpOiBBZGRlZCBga2V5LmMnLgoKCSogaW5mby9pbmZva2V5LmgsCgkqIGluZm8vaW5mb2tleS5jOiBDcmVhdGVkLCBmb3IgbmV3IHByb2dyYW0gYGluZm9rZXknIHdoaWNoCgljcmVhdGVzIGEgJEhPTUUvLmluZm8gZmlsZSBieSBjb21waWxpbmcgYSB0ZXh0IHNvdXJjZSBmaWxlIHdpdGgKCXN5bnRheCB2ZXJ5IHNpbWlsYXIgdG8gdGhhdCB1c2VkIGJ5IGBsZXNza2V5JyBpbiBsZXNzIDMuNC4wLgoKCSogaW5mby9tYWtlZG9jLmM6IEdlbmVyYXRlIG5ldyBmaWxlIGBrZXkuYycgZGVmaW5pbmcgYW4gYXJyYXkgdG8KCW1hcCBjb21tYW5kIG5hbWVzIHRvIGNvZGVzLgoKCSogaW5mby9rZXkuaDogQ3JlYXRlZCwgdG8gZGVmaW5lIGNvbnRlbnRzIG9mIG5ldyBga2V5LmMnIG5vdwoJY3JlYXRlZCBieSBtYWtlZG9jLgoKCSogaW5mby9pbmZvLmggKElORk9LRVkpOiBEZWZpbmUsIHRvIGVuYWJsZSBhbGwgZm9sbG93aW5nIGNoYW5nZXMuCgkoc2V0X3ZhcmlhYmxlX3RvX3ZhbHVlKVtJTkZPS0VZXTogRGVjbGFyZSBuZXcgZnVuY3Rpb24uCgoJKiBpbmZvL21ha2Vkb2MuYyBbSU5GT0tFWV06IFdyaXRlICcjZGVmaW5lIEFfJyBudW1lcmljIGNvbW1hbmQKCWNvZGUgZGVmaW5pdGlvbnMgaW50byBgZnVucy5oJyB0byBzdXBwb3J0IG5ldyBrZXkgYmluZGluZyBzeXN0ZW0uCgoJKiBpbmZvL3Nlc3Npb24uYyAoaW5mb19kaXNwYXRjaF9vbl9rZXksIGluZm9fbnVtZXJpY19hcmdfZGlnaXRfbG9vcCkKCVtJTkZPS0VZXSwKCSogaW5mby9pbmZvbWFwLmMgW0lORk9LRVldLAoJKiBpbmZvL2luZm9kb2MuYyAoZnVuY3Rpb25fZG9jdW1lbnRhdGlvbiwgZnVuY3Rpb25fbmFtZSwKCWRlc2NyaWJlX2tleSwgcHJldHR5X2tleW5hbWUsIHByZXR0eV9rZXlzZXFfaW50ZXJuYWwsCgl3aGVyZV9pc19pbnRlcm5hbClbSU5GT0tFWV0sCgkqIGluZm8vdGVybWluYWwuaCAodGVybV9raCwgdGVybV9rZSwgdGVybV9reCwgdGVybV9raSlbSU5GT0tFWV0sCgkqIGluZm8vdGVybWluYWwuYyAodGVybV9raCwgdGVybV9rZSwgdGVybV9reCwgdGVybV9raSwKCXRlcm1pbmFsX2luaXRpYWxpemVfdGVybWluYWwpW0lORk9LRVldLAoJKiBpbmZvL3ZhcmlhYmxlcy5jIChzZXRfdmFyaWFibGVfdG9fdmFsdWUpW0lORk9LRVldLAoJKiBpbmZvL3NhbXBsZV9pbmZva2V5OiBBZGRlZCBpbmZva2V5IGZ1bmN0aW9uYWxpdHksIGNvcGllZCBtb3JlCglvciBsZXNzIHdob2xlc2FsZSBmcm9tICdsZXNza2V5JyBpbiBHTlUgTGVzcyAzLjQuMC4gIEFkZGVkIGEgbmV3Cgl0eXBlZGVmIHN0cnVjdCBGVU5DVElPTl9LRVlTRVEsIGFuZCBhIG5ldyBlbGVtZW50IGBrZXlzJyB0bwoJdHlwZWRlZiBzdHJ1Y3QgRlVOQ1RJT05fRE9DLCB0byBnaXZlIHRoZSB1c2VyIHNvbWUgY29udHJvbCBvdmVyCgl0aGUga2V5c3Ryb2tlcyB0aGF0IGFwcGVhciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBub2RlIGdlbmVyYXRlZAoJYnkgZ2V0LWhlbHAtd2luZG93LCBhbmQgdG8gaW1wcm92ZSBlZmZpY2llbmN5IGEgbGl0dGxlLgoKCSogaW5mby9pbmZvZG9jLmMgKGluZm9faW50ZXJuYWxfaGVscF90ZXh0LAoJY3JlYXRlX2ludGVybmFsX2luZm9faGVscF9ub2RlKVtJTkZPS0VZXTogUmV3cm90ZSBhbGwgY29kZSB0aGF0Cglhc3N1bWVzIGZpeGVkIGtleXN0cm9rZXMsIHJlcGxhY2luZyAlMTBzIHNlcXVlbmNlcyB3aXRoIFxcJTEwW2Zvb10KCXNlcXVlbmNlcyBpbnN0ZWFkLgoKCSogZG9jL2luZm8tc3RuZC50ZXhpOiBEb2N1bWVudGVkIGFib3ZlIGNoYW5nZXMuCgoyMDAxLTA5LTE5ICAgIDxrYXJsQGdudS5vcmc+CgoJKiBtYWtlaW5mby9jbWRzLmM6IDwvIG5vdCAvPCwgZHVoIDopLiAgRnJvbSBqYW5uZWtlLgoKMjAwMS0wOS0xMiAgICA8a2FybEBnbnUub3JnPgoKCSogY29uZmlndXJlLmFjIChBQ19TWVNfUE9TSVhfVEVSTUlPUywgQUNfSEVBREVSX1RJT0NHV0lOU1opOiB1c2UKCSB0aGVzZSBuZXcgYXV0b2NvbmYgbWFjcm9zIGluc3RlYWQgb2YgdGhlIG9sZCBhdXRvbWFrZSBvbmVzLgoKCSogaW5mby90ZXJtaW5hbC5jOiByZW1vdmUgdW5jb25kaXRpb25hbCBpbmNsdWRlIG9mIHN5cy9pb2N0bC5oLgoJKiBpbmZvL3Rlcm1kZXAuaDogPHN5cy9pb2N0bC5oPiBbR1dJTlNaX0lOX1NZU19JT0NUTF06IGluY2x1ZGUgb3V0c2lkZSBvZiBIQVZFX1RFUk1JT1NfSCwKCXBlciBhdXRvY29uZiBtYW51YWwuCgoJKiBkb2MvTWFrZWZpbGUuYW0gKGluc3RhbGwtaW5mby1hbSk6IHJlbW92ZSBvdmVycmlkZSBvZiBhdXRvbWFrZSdzCgkgdGFyZ2V0LCBpbnN0ZWFkIGVuYWJsZSBsb29raW5nIGluIC4gZm9yIGluZm8gZmlsZXMgd2l0aGluIGF1dG9tYWtlLgoKCSogZG9jL2luZm8tc3RuZC50ZXhpOiBpbmNsdWRlIHNlcGFyYXRlIHZlcnNpb24tc3RuZC50ZXhpCgkqIGNvbmZpZ3VyZS5hYzogYXV0b2NvbmYgMi41MiwgYW5kIHJlbmFtZSB0byBjb25maWd1cmUuYWMuCgoyMDAxLTA5LTExICAgIDxrYXJsQGdudS5vcmc+CgoJKiBkb2MvdGV4aW5mby50eGk6IHJlY29tbWVuZCBhZ2FpbnN0IHVzaW5nIC0gYW5kIF8gaW4gQHNldCBuYW1lcywKCQkqIGFuZCByZWFycmFuZ2UgdGhhdCBzZWN0aW9uLgoKCSogaW5mby9pbmZvZG9jLmMgKHJlcGxhY2VfaW5fZG9jdW1lbnRhdGlvbik6IGZyZWUgZnVuX25hbWUgdG8gZml4CgkJbWVtb3J5IGxlYWsuCglGcm9tOiAiQXJ0IEhhYXMiIDxhaGFhc0BuZW9zb2Z0LmNvbT4sIFNhdCwgNCBBdWcgMjAwMSAwODozNDozMSAtMDUwMC4KCgkqIG1ha2VpbmZvL2xhbmcuYzogZW5jb2Rpbmcgc3VwcG9ydCBmb3IgaW5mbyBvdXRwdXQgZnJvbSBrYW1hLgoJKiBtYWtlaW5mby9sYW5nLmg6IGVuY29kaW5nIHN1cHBvcnQgZm9yIGluZm8gb3V0cHV0IGZyb20ga2FtYS4KCgkqIG1ha2VpbmZvL2h0bWwuYzogaW5jbHVkZSBkb2N1bWVudCBlbmNvZGluZyBjb2RlIHVubGVzcwoJbm9fZW5jb2RpbmcuCgkqIG1ha2VpbmZvL2luc2VydGlvbi5jIChjbV9kaXJlbnRyeSk6IGRvbid0IGNhbGwgYmVnaW5faW5zZXJ0aW9uCglpZiBpZ25vcmluZy4KCShjbV9kb2N1bWVudGRlc2NyaXB0aW9uKTogbW92ZWQgaGVyZSwgYW5kIGxpa2V3aXNlLgoJKGJlZ2luX2luc2VydGlvbik6IGRvbid0IG5lZWQgb3V0cHV0IGZvcm1hdCBjb25kaXRpb25hbHMgaGVyZS4KCgkqIG1ha2VpbmZvL2NtZHMuYyAoY21fZG9jdW1lbnRkZXNjcmlwdGlvbik6IG1vdmUgdG8gaW5zZXJ0aW9uLmMuCgkqIG1ha2VpbmZvL21ha2VpbmZvLmggKGVuYWJsZV9lbmNvZGluZyk6IG5ldyBnbG9iYWwuCgkqIG1ha2VpbmZvL21ha2VpbmZvLmM6IG5ldyBvcHRpb24gLS1lbmFibGUtZW5jb2RpbmcsIHJlYXJyYW5nZSBoZWxwLgoKCVN1biBPY3QgMzEgMTg6NDQ6MjQgVVRDIDE5OTkgS2FybCBIZWlueiBNYXJiYWlzZSA8a2FtYUBoaXBwby5maWRvLmRlPgoKCSAgICAtIGxhbmcue2MsaH06CgkgICAgICBvIGFkZGVkIHRyYW5zbGF0aW9uIG1hcCBiZXR3ZWVuIEhUTUwgbWFya3VwcyBhbmQgOC1CaXQKCQkoSVNPLTg4NTktMSBjb2Rlczsgc3VwcGxlbWVudGFsIGlzIFVuaWNvZGUgZm9yIHRoZSBmdXR1cmUpLgoJICAgICAgbyBhZGRlZCBjbV9zZWFyY2hfaXNvX21hcDoKCQlzZWFyY2ggZm9yIGNoYXJhY3RlcnMgYmFzZWQgb24gSFRNTCBtYXJrdXAgbmFtZXMgZm9yCgkJdHJhbnNsYXRpb24gOC1CaXQgY29kZS4KCSAgICAgIG8gcmVjb2duaXppbmcgb2YgQGRvY3VtZW50ZW5jb2RpbmcgaW1wcm92ZWQuCgkJbm93IHdlIGNhbiByZWNvZ25pemUgdGhpbmdzIGxpa2UgSVNPLTg4NTktezEuLi4xNX0KCgkgICAgLSBtYWtlaW5mby57YyxofToKCSAgICAgIG8gYWRkZWQgdHdvIGNvbW1hbmQgbGluZSBzd2l0Y2hlcy4KCQkrIGluZm8tZW5jb2RpbmcgdG8gYWN0aXZhdGUgdGhlIGVuY29kaW5nIGZvciBpbmZvIG91dHB1dAoJCSAgd2hpY2ggaXMgY29ycmVjdGx5IHNob3duIGJ5IGluZm8uIERlZmF1bHQgaXMgTk9UIHRvCgkJICBlbmNvZGUgdGhlIG91dHB1dCB0byBiZSBjb21wYXRpYmxlIHdpdGggZWFybGllciB2ZXJzaW9ucy4KCQkrIG5vLWVuY29kaW5nIHRvIHN1cHByZXNzIGVuY29kaW5nIGUuZy4gd2hpbGUgcHJvZHVjaW5nCgkJICBBU0NJSSBvdXRwdXQgKC0tbm8taGVhZGVycykgcmVzdWx0cyBpbiB0aGF0IHlvdSBnZXQKCQkgICJBIGZvciAmQXVtbDsgYXMgYmVmb3JlLgoJICAgICAgbyBoZWxwIG91dHB1dCBjaGFuZ2VkIHRvIGRvY3VtZW50IHRoZSBzd2l0Y2hlcy4KCgkgICAgLSBodG1sLmM6CgkgICAgICBjaGFyc2V0IGVuY29kaW5nIGluIGh0bWwgYmFzZWQgb24gQGRvY3VtZW50ZW5jb2RpbmcuCgoKMjAwMS0wNy0zMSAgICA8a2FybEBnbnUub3JnPgoKCSogZG9jL3RleGluZm8udHhpOiBtZW50aW9uIHBkZmNvbG9yLnRleC4KCSogZG9jL3RleGluZm8udGV4OiBkb2MuCgkqIGRvYy9NYWtlZmlsZS5hbSAoaW5zdGFsbC10ZXgpOiBpbnN0YWxsIHBkZmNvbG9yLnRleCB0b28uCgkqIGRvYy9wZGZjb2xvci50ZXg6IG5ldyBmaWxlLCBzaW5jZSBLdXJ0Lkhvcm5pa0BjaS50dXdpZW4uYWMuYXQKCQlyZXBvcnRzIHRoYXQgbm90IGFsbCBwZGZ0ZXggaW5zdGFsbGF0aW9ucyBpbmNsdWRlIGl0LgoKMjAwMS0wNy0yNSAgICA8a2FybEBnbnUub3JnPgoKCSogZG9jL3RleGluZm8udGV4IChcRXRpdGxlcGFnZSk6IG5lZWQgXEhFQURJTkdTb24gYmVmb3JlIHRoZQoJXC4uLmFmdGVydGl0bGVwYWdlIGNoZWNrcyB0byBnZXQgcGFnZSBudW1iZXJzLiBSZXBvcnQgZnJvbQoJM2RpZmZAZ251Lm9yZy4KBwoyMDAxLTA3LTA2ICAgIDxrYXJsQGdudS5vcmc+CgoJKiBkb2MvdGV4aW5mby50eGk6IG1lbnRpb24gaHR0cDovL2RvY2Jvb2syWC5zb3VyY2Vmb3JnZS5uZXQvLgoKMjAwMS0wNi0yOSAgICA8a2FybEBnbnUub3JnPgoKCSogbWFrZWluZm8vbWFrZWluZm8uYzogbWFrZSBvdXRwdXQgdG8gc3Rkb3V0IGltcGx5IC0tbm8tc3BsaXQgZm9yCgkJSFRNTCwgdG9vLgoKCSogbWFrZWluZm8vaHRtbC5jIChodG1sX291dHB1dF9oZWFkKTogdXNlIGRvY3VtZW50ZGVzY3JpcHRpb24gaWYgc2V0LgoJKiBtYWtlaW5mby9pbnNlcnRpb24uaCAoaW5zZXJ0aW9uX3R5cGUpOiBuZXcgY2FzZSBkb2N1bWVudGRlc2NyaXB0aW9uLgoJKiBtYWtlaW5mby9pbnNlcnRpb24uYyAoYmVnaW5faW5zZXJ0aW9uLCBlbmRfaW5zZXJ0aW9uLAoJaW5zZXJ0aW9uX3R5cGVfbmFtZXMpOiBuZXcgY2FzZSBmb3IgZG9jdW1lbnRkZXNjcmlwdGlvbi4KCSogbWFrZWluZm8vY21kcy5jIChjbV9kb2N1bWVudGRlc2NyaXB0aW9uKTogbmV3IGZuLgoJKiBtYWtlaW5mby9tYWtlaW5mby5oIChkb2N1bWVudF9kZXNjcmlwdGlvbik6IG5ldyBnbG9iYWwuCgkqIGRvYy90ZXhpbmZvLnR4aTogQGRvY3VtZW50ZGVzY3JpcHRpb24uCglAZG9jdW1lbnRkZXNjcmlwdGlvbiBpbXBsZW1lbnRhdGlvbiBmcm9tIHBhdGNoZXMgYnkgV2lsbCBFc3Rlcy4KCjIwMDEtMDYtMjYgICAgPGthcmxAZ251Lm9yZz4KCgkqIGRvYy90ZXhpbmZvLnR4aTogZG9jdW1lbnRkZXNjcmlwdGlvbgoJKiBkb2MvdGV4aW5mby50ZXg6IElnbm9yZSBAZG9jdW1lbnRkZXNjcmlwdGlvbiAuLi4gQGVuZAoJZG9jdW1lbnRkZXNjcmlwdGlvbi4KCgkqIGRvYy90ZXhpbmZvLnR4aTogZG9jdW1lbnQgc2VxdWVudGlhbCBwdW5jdHVhdGlvbiBpbiBAZm9vdG5vdGUgaXMKCW5vcm1hbCwgc3VnZ2VzdGVkIGJ5IHJtcy4KCjIwMDEtMDYtMjEgICAgPGthcmxAZ251Lm9yZz4KCgkqIGRvYy90ZXhpbmZvLnRleCAoXHRleHRmb250cyk6IGNhbGwgXHNldGxlYWRpbmcgaGVyZSwgc28gdGhhdCB3ZSBjYW4KCXN3aXRjaCBmb250IHNpemVzIGJhY2sgYW5kIGZvcnRoIGluc2lkZSBAdGV4IHdpdGggXGdsb2JhbGRlZnM9MQoJYW5kIG5vdCBsb3NlIHRoZSBsZWFkaW5nLgoKCSogZG9jL3RleGluZm8udHhpOiBhbGxvdyBAc21hbGxib29rIHRvIHJ1biB3aXRob3V0IG92ZXJmdWxsIG9yCgkJdW5kZXJmdWxsIGJveGVzLgoKMjAwMS0wNi0xOSAgICA8a2FybEBnbnUub3JnPgoKCSogZG9jL3RleGluZm8udGV4IChcaW1hZ2V4eHgpOiBpZ25vcmUgbmV3IG9wdGlvbmFsIGFyZ3MgdG8gQGltYWdlLgoKCSogbWFrZWluZm8vaHRtbC5jIChodG1sX291dHB1dF9oZWFkKTogaW5jbHVkZSA8aDE+dGl0bGU8L2gxPiBhdAoJYmVnaW5uaW5nIG9mIGRvY3VtZW50LgoJKiBtYWtlaW5mby9zZWN0aW9uaW5nLmMgKGNtX3RvcCk6IGRvbid0IGluY2x1ZGUgZXhwbGljaXQgbGlua3MgaW4KCUhUTUwgb3V0cHV0LCB0aGUgcmVndWxhciBjb2RlIGZvciBAbm9kZSB3aWxsIGRvIGl0LgoJKHNlY3Rpb25pbmdfaHRtbCk6IHVzZSA8aDI+IGZvciBjaGFwdGVyIGluc3RlYWQgb2YgPGgxPiwgZXRjLgoJKiBtYWtlaW5mby9ub2RlLmMgKGNtX25vZGUpOiBkbyBub3QgaW5jbHVkZSBjb2RlIHRvIG91dHB1dCB0aGUKCUhUTUwgPGhlYWQ+LCB3ZSBkbyB0aGF0IGVsc2V3aGVyZSBub3cuCgoJMTk5OS0xMS0yNiBXLiBMLiBFc3RlcyA8d2lsbEBmdW1ibGVycy5vcmc+CgkqIG1ha2VpbmZvL2luc2VydGlvbi5jIChiZWdpbl9pbnNlcnRpb24pOiBhZGQgYW4gZXhwbGljaXQgPGJyPgoJYmVmb3JlIGJlZ2lubmluZyBhIDxwcmU+IGJsb2NrLiBmb3IgZmx1c2hsZWZ0IGFuZCBmbHVzaHJpZ2h0LCB1c2UKCTxkaXY+IHRhZyB3aXRoIGFuIGFsaWduIGF0dHJpYnV0ZSBzZXQuCgkqIG1ha2VpbmZvL2luc2VydGlvbi5jIChlbmRfaW5zZXJ0aW9uKTogZm9yIGZsdXNobGVmdCBhbmQKCWZsdXNocmlnaHQsIGVuZCB0aGUgPC9kaXY+IGJsb2NrLgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAoY21faW1hZ2UpOiBuZXcgdmFyaWFibGUsIGFsdF9hcmcgbm93IGFsbG93cwoJdXNlci1zdXBwbGllZCBhbHQgYXR0cmlidXRlIHZhbHVlIGFuZAoJZXh0X2FyZyBhbGxvd3MgdXNlci1zdXBwbGllZCBleHRlbnNpb24gZm9yIGltYWdlIGZpbGVzLgoKCSogbWFrZWluZm8vdG9jLmMgKGNvbnRlbnRzX3VwZGF0ZV9odG1sKTogYWRkIGFuY2hvcnMgYXQgY2hhcHRlcgoJbGV2ZWwgZW50cmllcwoJKHNob3J0Y29udGVudHNfdXBkYXRlX2h0bWwpOiBocmVmcyBpbiBzaG9ydGNvbnRlbnRzIHBvaW50IHRvIHRoZQoJYWJvdmUgYW5jaG9ycyBpbiB0aGUgZGV0YWlsZWQgY29udGVudHMKCgkqIGRvYy90ZXhpbmZvLnR4aTogZG9jdW1lbnQgY2hhbmdlcyB0byBAaW1hZ2UgYW5kIHRoZSBuZXcgYmVoYXZpb3IKCW9mIHNob3J0Y29udGVudHMgZW50cmllcwoKMjAwMS0wNi0xNCAgICA8a2FybEBnbnUub3JnPgoKCSogbWFrZWluZm8vbm9kZS5jOiBubyBuZWVkIGZvciBzaXplX3QuCgoyMDAxLTA2LTEzICAgIDxrYXJsQGdudS5vcmc+CgoJKiB0ZXhpbmZvLnRleCAoXHBkZm1rZGVzdCk6IFxub3JtYWx0dXJub2ZmYWN0aXZlLCBzbyByZWZzIGFuZAoJZGVmcyBtYXRjaC4KCShceHJlZlgpOiBwZGYgbGluayBkZWZzIG5vIGxvbmdlciB1c2UgQCwgc28gbGluayByZWZzIHNob3VsZG4ndCB1c2UgQAoJZWl0aGVyLiAoQWxsIHhyZWZzIGluIHBkZiB3ZXJlIGZhaWxpbmcuKQoJKFxta3Bnbik6IHJlbW92ZSByZWR1bmRhbnQgc2Vjb25kIGRlZmluaXRpb24uCgoJKiB0ZXhpbmZvLnRleCAoXHNtYWxsZXJmb250cyk6IG5ldyBmb250IHNpemUuCgkoXHNtYWxsZXhhbXBsZSwgZXQgYWwuKTogdXNlIGl0LCBpbiBhbGwgY2FzZXMsIG5vdCBqdXN0IEBzbWFsbGJvb2suCgoJMTk5OS0xMS0zMCBBbmRyZWFzIFNjaHdhYiA8c2Nod2FiQHN1c2UuZGU+CgkqIGRvYy90ZXhpbmZvLnRleCAoXHhyZWZYKTogVHVybiBvZmYgYWN0aXZlIGNoYXJhY3RlcnMgd2hlbiB3cml0aW5nCglvdXQgdGhlIGxpbmsgbmFtZSBmb3IgcGRmLgoKMjAwMS0wNi0xMyAgICA8a2FybEBnbnUub3JnPgoKCSogZG9jL3RleGluZm8udHhpOiBkb2N1bWVudCB0aGF0IEBzbWFsbGV4YW1wbGUgaXMgc21hbGxlciBpbiBhbGwKCQlwYWdlIGZvcm1hdHMgbm93LgoKMjAwMS0wNi0xMSAgICA8a2FybEBnbnUub3JnPgoKCSogNC4wYy4KCSogdXRpbC9NYWtlZmlsZS5hbTogRG9uJ3QgbmVlZCBhdXRvbWFrZSBwYXRjaCBhbnkgbW9yZSwgd2l0aAoJCWF1dG9tYWtlIDEuNHA0LgoKCSogY29uZmlndXJlLmluIChBQ19GVU5DX1NFVFZCVUZfUkVWRVJTRUQpOiBvbmx5IG5lZWRlZCBvbgoJcHJlLXN5c3ZyMyBzeXN0ZW1zIHRoYXQgbm9ib2R5IGhhcyBhbnltb3JlPyAgT3Igc28gUnVzcyBBbGxiZXJ5CglpbmZvcm1zIG1lIC4uLgoKMjAwMS0wNi0wOCAgICA8a2FybEBnbnUub3JnPgoKCSogbWFrZWluZm8vTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBpbmNsdWRlIHRleGluZm8ue2R0ZCx4c2x9LgoKCSogdXRpbC9NYWtlZmlsZS5hbTogYXV0b21ha2UtMS40cDMgbm93LgoKMjAwMS0wNi0wNyAgICA8a2FybEBnbnUub3JnPgoKCSogdXRpbC90ZXhpMmR2aTogY29tbWVudCBvdXQgY29uZGl0aW9uYWwgdGV4dCwgZnJvbSBXZXJuZXIgTEVNQkVSRwoJICAgICAgIDx3bEBnbnUub3JnPi4KCiAgICAgICAyMDAxLTA2LTAyICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgoJKiBpbmZvL2VjaG8tYXJlYS5jIChpbmZvX3JlYWRfY29tcGxldGluZ19pbnRlcm5hbCk6IElmIHRoZXJlIGFyZQoJbm8gY29tcGxldGlvbnMsIHNheSB0aGF0IGluc3RlYWQgb2YgIk5vdCBjb21wbGV0ZSIuCgoJKiBjb25maWd1cmUuaW4gKEFMTF9MSU5HVUFTKTogYWRkIGRhCgoJKiBtYWtlaW5mby9NYWtlZmlsZS5hbSAocGtnZGF0YV9EQVRBKTogaW5jbHVkZSB0ZXhpbmZvLnhzbC4KCgkqIGNvbmZpZ3VyZS5pbjogdXBkYXRlIGZvciBhdXRvY29uZiAyLjUwLgoKMjAwMS0wNi0wNCAgICA8a2FybEBnbnUub3JnPgoKCSogdXRpbC9NYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IGF1dG9tYWtlLTE0cDIucGF0Y2ggbm93LgoJKiB1dGlsL2F1dG9tYWtlLTE0cDIucGF0Y2g6IHJlbmFtZSBmcm9tIDE0cDEuCgoyMDAxLTA1LTIyICAgIDxrYXJsQGdudS5vcmc+CgoJKiBjaGFuZ2VzIGZyb20gZmVsb3kgZm9yIGxvd2VyY2FzZSB4bWwgbmFtZXMsIGV0Yy4KCjIwMDEtMDUtMjEgICAgPGthcmxAZ251Lm9yZz4KCgkqIHV0aWwvTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBhZGQgYXV0b21ha2UtMTRwMS5wYXRjaC4KCSogbWFrZWluZm8vTWFrZWZpbGUuYW0gKHBrZ2RhdGFfREFUQSk6IGRlZmluZSB0byBpbnN0YWxsCgkgICAgICAgIHRleGluZm8uZHRkLgoKICAgICAgICAyMDAxLTA1LTE3ICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgoJKiBtYWtlaW5mby9tYWtlaW5mby5jIChjbV94cmVmLCBjbV9pbmZvcmVmKTogRG9uJ3QgYWxsb3cgZW1wdHkKCWZpcnN0IGFyZ3VtZW50cyBpbiBjcm9zcyByZWZlcmVuY2VzLgoKCSogbWFrZWluZm8vbWFrZWluZm8uYzogcmVkbyAtLWhlbHAsIGJhc2ljIHBhdGNoIGZyb20ga2VAc3VzZS5kZS4KCjIwMDEtMDUtMDMgICAgPGthcmxAZ251Lm9yZz4KCgkqIGRvYy9pbmZvLnRleGk6IG1vdmUgaGVscC1jcm9zcyB0byBiZSBzdWJub2RlIG9mIGNyb3NzLXJlZnMsCglpbnN0ZWFkIGRhbmdsaW5nIG91dCBpbiBzcGFjZS4KCSogZG9jL2luZm8udGV4aTogdXBkYXRlIGZyb20gZWxpCgoyMDAxLTA1LTAyICAgIDxrYXJsQGdudS5vcmc+CgoJKiBtYWtlaW5mby94bWwuYyAoeG1sX3B1c2hfY3VycmVudF9lbGVtZW50KTogbmVlZCB0byBzZWxlY3QgdGhlCgkJYG5hbWUnIG1lbWJlci4KCjIwMDEtMDUtMDEgICAgPGthcmxAZ251Lm9yZz4KCgkqIGNvbmZpZ3VyZS5pbjogNC4wYgoKCSogZG9jL2luZm8udGV4aSAoSGVscC1Dcm9zcyk6IHN1YnNlY3Rpb24gb2YgQ3Jvc3MtcmVmcy4KCgkqIGxpYi9zeXN0ZW0uaCAodmFfYWxpc3QsIGV0Yy4pOiBtb3ZlZCBmcm9tIG1ha2VpbmZvLmMuCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKHZhX2FsaXN0LCBldGMuKTogbW92ZSB0byBzeXN0ZW0uaAoKCSogbWFrZWluZm8veG1sLltjaF06IG5ldyBmaWxlcyBmcm9tIFBoaWxpcHBlIE1hcnRpbiA8ZmVsb3lAZnJlZS5mcj4uCgkqIHByZXR0eSBtdWNoIGFsbCBmaWxlcyBhbHNvIG1vZGlmaWVkIGZvciBYTUwvRG9jQm9vayBvdXRwdXQuCgkqIGRvYy90ZXhpbmZvLnR4aTogbWluaW1hbGx5IG1lbnRpb24gLS14bWwgYW5kIC0tZG9jYm9vay4KCSogbWFrZWluZm8veG1sLmM6IGNvbnZlcnQgdG8gSyZSIHVudGlsIHdlIGNhbiBkbyBhbnNpMmtuci4KCgkqIHV0aWwvdGV4aW5kZXguYywKCSogdXRpbC9pbnN0YWxsLWluZm8uYywKCSogaW5mby9pbmZvLmM6IGl0J3MgMjAwMS4KCjIwMDEtMDQtMTUgICAgPGthcmxAZ251Lm9yZz4KCgkqIGRvYy9pbmZvLnRleGk6IG1ham9yIHVwZGF0ZSBmcm9tIGVsaS4KCjIwMDEtMDQtMTMgICAgPGthcmxAZ251Lm9yZz4KCiAgICAgICAgMTk5OS0xMC0xNiAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCSogbWFrZWluZm8vbm9kZS5jIChjbV9ub2RlKTogRG9uJ3QgZ2VuZXJhdGUgY3Jvc3MtcmVmZXJlbmNlcyB0bwoJIihESVIpIi4KCSogbWFrZWluZm8vaHRtbC5jIChhZGRfbGluayk6IExpa2V3aXNlLgoKICAgICAgICAxOTk5LTEwLTE2ICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgoJKiBtYWtlaW5mby9tYWtlaW5mby5jIChpbnNlcnQpOiBEb24ndCBjYWxsIGh0bWxfb3V0cHV0X2hlYWQgaGVyZS4KCShhZGRfY2hhcik6IENhbGwgaHRtbF9vdXRwdXRfaGVhZCBoZXJlLi4uCgkqIG1ha2VpbmZvL2NtZHMuYyAoY21fc3ApOiAuLi5hbmQgaGVyZS4uLgoJKiBtYWtlaW5mby90b2MuYyAoY21fY29udGVudHMsIGNtX3Nob3J0Y29udGVudHMpOiAuLi5hbmQgaGVyZS4uLgoJKiBtYWtlaW5mby9ub2RlLmMgKGNtX2FuY2hvcik6IC4uLmFuZCBoZXJlLgoKCSogbWFrZWluZm8vaHRtbC5jIChodG1sX291dHB1dF9oZWFkKTogYGZyZWUnIGh0bWxfdGl0bGUgaWYKCWV4cGFuZGVkLiAgTWFrZSA8aGVhZD4gYW5kIDxib2R5PiBzdGFuZCBvdXQuCgoyMDAxLTA0LTEyICAgIDxrYXJsQGdudS5vcmc+CgoJMTk5OS0xMi0yNiAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCSogbWFrZWluZm8vZGVmdW4uYyAoZGVmdW5faW50ZXJuYWwpOiBVc2UgZXhlY3V0ZV9zdHJpbmcgaW5zdGVhZAoJYWRkX3dvcmRfYXJncyB0byBleHBhbmQgZGVmaW5lZF9uYW1lLCB0eXBlX25hbWUgYW5kIGNhdGVnb3J5IChpbgoJSFRNTCBtb2RlKS4KCjIwMDEtMDMtMjkgICAgPGthcmxAZ251Lm9yZz4KCgkqIE1ha2VmaWxlLmFtOiBzaW1wbGUgbGljZW5zZS4KCjIwMDEtMDItMjcgICAgPGthcmxAZ251Lm9yZz4KCgkxOTk5LTEyLTE3ICBZb3NoaWtpIEhheWFzaGkgIDx0OTA1NTNAbWFpbC5lY2MudS10b2t5by5hYy5qcD4KCQkqIGluZm8vdGVybWluYWwuaCwgaW5mby90ZXJtaW5hbC5jICh0ZXJtX2toLCB0ZXJtX2tlLCB0ZXJtX2tEKToKCQlOZXcgdmFyaWFibGVzIHRvIGhvbGQgSG9tZSwgRW5kLCBEZWxldGUga2V5IHNlcXVlbmNlcy4KCQkqIGluZm8vaW5mb21hcC5jIChpbml0aWFsaXplX2VtYWNzX2xpa2Vfa2V5bWFwcywKCQlpbml0aWFsaXplX3ZpX2xpa2Vfa2V5bWFwcyk6IFNldCB0aGVtLgoKCSogbWFrZWluZm8vbWFrZWluZm8uaCwKCSogbWFrZWluZm8vbWFrZWluZm8uYzogLS1zcGxpdC1zaXplIG9wdGlvbiBmcm9tIFlvc2hpa2k6CgkxOTk5LTEyLTA5ICBZb3NoaWtpIEhheWFzaGkgIDx0OTA1NTNAbWFpbC5lY2MudS10b2t5by5hYy5qcD4KCQkqIG1ha2VpbmZvL21ha2VpbmZvLmggKHNwbGl0X3NpemUpOiBOZXcgb3B0aW9uLgoJCSogbWFrZWluZm8vbWFrZWluZm8uYyAobG9uZ19vcHRpb25zKTogQWRkIHNwbGl0X3NpemUuCgkJKHVzYWdlKTogRGl0dG8uCVN1Z2dlc3RlZCBieSBSaWNoYXJkIFkuIEtpbS4KCgkqIHV0aWwvdGV4aTJkdmk6IC1vIHN1cHBvcnQgZnJvbSBBa2ltLgoKMjAwMS0wMi0wMiAgICA8a2FybEBnbnUub3JnPgoKCSogZGlyLWV4YW1wbGU6IGRvbid0IG5lZWQgenNoIHR3aWNlLgoKCUZyb206IE5pc2hpbyBGdXRvc2hpIDxmdXRfbmlzQGQzLmRpb24ubmUuanA+LCAwMiBBcHIgMjAwMC4KCSogZG9jL3RleGluZm8udHhpOiBjYXBpdGFsaXphdGlvbiBmaXhlcy4KCSogZG9jL2luZm8udGV4aTogdXAgcG9pbnRlciBmaXhlcy4KCSogZG9jL3RleGluZm8udHhpOiBpbnN0YWxsaW5nIGFuIGluZm8gZmlsZS4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmM6IC0tb3V0cHV0IGlzIGZvciBzcGxpdCBodG1sLCBub3Qgbm9uLXNwbGl0LgoJRnJvbTogS2FybCBFaWNod2FsZGVyIDxrZWljaHdhQGdteC5uZXQ+CgoyMDAxLTAxLTEyICAgIDxrYXJsQGdudS5vcmc+CgoJMTk5OS0xMC0xNSAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCQkqIG1ha2VpbmZvL2NtZHMuYyAoY21fc2MpOiBEb24ndCBwcmludCB0aGUgd2FybmluZyBhYm91dAoJCWFsbC11cHBlcmNhc2UgYXJndW1lbnQgaW4gbWVudXMgdW5kZXIgLS1uby1oZWFkZXJzLgoKCSogbWFrZWluZm8vZmlsZXMuYzogcGFzcyBPX0JJTkFSWSBmbGFnIHRvIG9wZW4sIHN1Z2dlc3RlZCBieSBiZm94LgoKMjAwMS0wMS0xMSAgICA8a2FybEBnbnUub3JnPgoKCSogaW5mby90ZXJtaW5hbC5jIFtIQVZFX1RFUk1JT1NfSCAmJiBUQ09PTl06IHRjZmxvdyBUQ09PRkYvVENDT04KCXRvIHJlc3VtZSBvdXRwdXQgaWYgdXNlciBwcmVzc2VzIENUUkwtUyBhdCB0aGUgYmVnaW5uaW5nIG9mCgl0aGluZ3MuCglbSEFWRV9URVJNSU9fSCAmJiBUQ1hPTkNdOiBkaXR0by4KCUZyb20gS2V2aW4gUnlkZSA8dXNlcjQyQHppcC5jb20uYXU+LCAxNmp1bjIwMDA7CgljZi4gZW1hY3Mvc3JjL3N5c2RlcC5jLgoKMjAwMS0wMS0wOCAgICA8a2FybEBnbnUub3JnPgoKCSogbWFrZWluZm8vY21kcy5jOiBhZml2ZXBhcGVyLCBhZm91cndpZGUsIGFmb3VybGF0ZXguCgkqIGRvYy90ZXhpbmZvLnR4aTogYWZpdmVwYXBlcgoKMjAwMS0wMS0wNSAgICA8a2FybEBnbnUub3JnPgoKCSogZG9jL2luZm8udGV4aTogdHlwbyBmcm9tOiBNYXJ0aW4gQnVjaGhvbHogPG1hcnRpbkB4ZW1hY3Mub3JnPi4KCSogZG9jL2luZm8udGV4aTogdHlwbyBmaXhlcyBmcm9tIG1leWVyaW5nLgoKMjAwMS0wMS0wMiAgICA8a2FybEBnbnUub3JnPgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAocmVtZW1iZXJfYnJhY2VfMSk6IGRvbid0IGFzc3VtZSBjb21tYW5kIGlzCgkgbm9uLW51bGwsIGFuIChlcnJvbmVvdXMpIGlucHV0IGxpbmUgbGlrZSBcaGJveCB0bzdpbnsgcGFzc2VzIGluIGEKCSBudWxsLgoKCSogbWFrZWluZm8vdG9jLmM6IGZpeCBmcm9tIGphbgoJKiBtYWtlaW5mby9odG1sLmM6IGZpeCBmcm9tIGphbiBmb3IgdG9wLWxldmVsIHJlZmVyZW5jZXMuCgoyMDAwLTEyLTIyICAgIDxrYXJsQGdudS5vcmc+CgoJKiBtYWtlaW5mby9tYWtlaW5mby5jOiAtLWhlbHAgY2hhbmdlcy4KCSogZG9jL3RleGluZm8udHhpOiAtbyBtZWFucyB0aGUgZGlyZWN0b3J5IG5hbWUgZm9yIEhUTUwgb3V0cHV0LgoKMjAwMC0xMi0yMSAgICA8a2FybEBnbnUub3JnPgoKCSogZG9jL3RleGluZm8udHhpOiBzd2l0Y2ggdG8gZmRsCgoJKiBtYWtlaW5mby9odG1sLmM6IGRvYyBmaXguCgkqIG1ha2VpbmZvL2luc2VydGlvbi5jOiBubyBzcGFjZSBhZnRlciBfIEkgZ3Vlc3MuCgkqIG1ha2VpbmZvL2NtZHMuYzogbm8gc3BhY2UgYWZ0ZXIgXyBJIGd1ZXNzLgoKCSogbWFrZWluZm8vaHRtbC5jIChub2RlbmFtZV90b19maWxlbmFtZV8xKTogZml4IHVwIGV4dGVybmFsCgkqIHRvcC1ub2RlIHJlZmVyZW5jZXMuCgoyMDAwLTEyLTIwICAgIDxrYXJsQGdudS5vcmc+CgoqIEhUTUwgdGFibGUgcGF0Y2ggZnJvbSBKYW46CiAgICAyMDAwLTEyLTE5ICBKYW4gTmlldXdlbmh1aXplbiAgPGphbm5la2VAZ251Lm9yZz4KCgkgICAgKiBtYWtlaW5mby9tdWx0aS5jIChtdWx0aXRhYmxlX2l0ZW0pLAoJICAgIChjbV90YWIpOiBjbG9zZSBodG1sIHRhYmxlIGNvbHVtbnMuICBBbHNvLCBhbGlnbiBjZWxsIGNvbnRlbnRzIHRvCgkgICAgdG9wLCB3aGljaCBpcyBwcm9iYWJseSB0aGUgbW9zdCBzZW5zaWJsZSB0aGluZyB0byBkbyBmb3IgdGV4dC4KCgoyMDAwLTEyLTE5ICAgIDxrYXJsQGdudS5vcmc+CgoJKiBtYWtlaW5mby9tYWtlaW5mby5jIChpbnNlcnRfdG9wbGV2ZWxfc3ViZGlyZWN0b3J5KTogdHJ5CgkJbmFtZS5odG1sIGlmIGp1c3QgbmFtZSBkb2Vzbid0IHdvcmsuCgoJKiBkb2MvdGV4aW5mby50eGk6IGRvY3VtZW50IGh0bWwgb3V0cHV0IGluIC5odG1sIGRpcmVjdG9yeQoJCXNvbWV0aW1lcy4KCgkqIHV0aWwvTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBhZGQgaW5zdGFsbC1pbmZvLWh0bWwuCgoJKiB1dGlsL3RleGluZGV4LmM6IDIwMDAKCSogdXRpbC9pbnN0YWxsLWluZm8uYzogMjAwMAoJKiBpbmZvL2luZm8uYzogMjAwMAoJKiBjb25maWd1cmUuaW46IDQuMGEKCgkqIGxpYi9zeXN0ZW0uaDogaW5jbHVkZSBsaW1pdHMuaAoKCSogQXBwbGllZCBIVE1MIHNwbGl0dGluZyBjaGFuZ2VzIGZyb20gSmFuOgogICAgMjAwMC0xMS0xMCAgSmFuIE5pZXV3ZW5odWl6ZW4gIDxqYW5uZWtlQGdudS5vcmc+CgoJICAgICogbWFrZWluZm86IHJlbW92ZWQgY29kZSBmb3IgbnVtYmVyZWQgc3BsaXQgSFRNTCBvdXRwdXQsIHJlbW92ZWQKCSAgICBTUExJVF9KQ04gY29uZGl0aW9uYWwuCgogICAgMjAwMC0xMS0wOSAgSmFuIE5pZXV3ZW5odWl6ZW4gIDxqYW5uZWtlQGdudS5vcmc+CgoJICAgICogbWFrZWluZm8vaHRtbC5jOiBwcmVwYXJlZCBub2RpZnlpbmcgZmlsZW5hbWUgZnVuY3Rpb25zIGZvcgoJICAgIGxpbmtpbmcgbm90IG5vbi1zcGl0IEhUTUwgZG9jdW1lbnRzLCBieSBhZGRpbmcgYGAjYW5jaG9yJycgdG8KCSAgICBleHRlcm5hbCByZWZlcm5jZXMuCgoJICAgICogZG9jL3RleGluZm8udHhpIChJbnN0YWxsaW5nIEhUTUwgaW5mbyk6IHVwZGF0ZWQgZG9jbyBmb3IgLS1odG1sCgkgICAgb3B0aW9uLCBhZGRlZCBub2RlIEluc3RhbGxpbmcgSFRNTCBpbmZvLgoKCSAgICAqIHV0aWwvaW5zdGFsbC1pbmZvLWh0bWwuaW46IG5ldyBzY3JpcHQuICBUaGUgYmFyZSBtaW5pbXVtCgkgICAgcmVxdWlyZWQgZm9yIGdlbmVyYXRpbmcgSFRNTCBpbmRleC4KCgkgICAgKiBsaWIvc3lzdGVtLmg6CWNvbXBpbGF0aW9uIGZpeC4KCiAgICAyMDAwLTExLTA4ICBKYW4gTmlldXdlbmh1aXplbiAgPGphbm5la2VAZ251Lm9yZz4KCgkgICAgKiBtYWtlaW5mby9tYWtlaW5mby5jIChjb252ZXJ0X2Zyb21fbG9hZGVkX2ZpbGUpOiBbU1BMSVRfSkNOXToKCSAgICBvdmVybG9hZGVkIGFscmVhZHkgd2F5IHRvbyBoYWlyeSBmdW5jdGlvbiB3aXRoIGxvZ2ljIHRvIHB1dCBzcGxpdAoJICAgIGh0bWwgb3V0cHV0IGludG8gc3ViZGlyZWN0b3J5IHdpdGggYmFzZW5hbWUgb2YgdG9wbGV2ZWwgb3V0cHV0CgkgICAgZmlsZS4KCgkgICAgKiBtYWtlaW5mby9odG1sLmMgKGZpeF9maWxlbmFtZSk6IG5ldyBmdW5jdGlvbi4KCiAgICAyMDAwLTExLTA3ICBKYW4gTmlldXdlbmh1aXplbiAgPGphbm5la2VAZ251Lm9yZz4KCgkgICAgKiB0b2MuYyAodG9jX2FkZF9lbnRyeSk6CgkgICAgKGNvbnRlbnRzX3VwZGF0ZV9odG1sKToKCSAgICAoc2hvcnRjb250ZW50c191cGRhdGVfaHRtbCk6IFtTUExJVF9KQ05dOiB1c2UgaHJlZnMgZm9yIG5vZGVuYW1lIGJhc2VkCgkgICAgaHRtbCBmaWxlcy4KCgkgICAgKiBub2RlLmMgKGNtX25vZGUpOiBbU1BMSVRfSkNOXTogY3JlYXRlIGh0bWwgZmlsZW5hbWUgYmFzZWQgb24KCSAgICBub2RlbmFtZSAoaW5zdGVhZCBvZiBhIG51bWJlcmVkIG5vZGU8bnVtPi5odG1sIGZpbGVuYW1lKS4KCgkgICAgKiBtYWtlaW5mby9tYWtlaW5mby5jIChtYWluKTogW1NQTElUX0pDTl06IGVuYWJsZSBzcGxpdHRpbmcgb2YKCSAgICBodG1sIG91dHB1dC4KCgkgICAgKiBtYWtlaW5mby9odG1sLmMKCSAgICAoYWRkX3VybF9uYW1lLGFkZF9ub2RlbmFtZV90b19maWxlbmFtZSxub2RlbmFtZV90b19maWxlbmFtZSk6IG5ldwoJICAgIGZ1bmN0aW9ucy4KCjIwMDAtMTItMTUgICAgPGthcmxAZ251Lm9yZz4KCgkqIGNvbmZpZ3VyZS5pbiAoQUNfQ0hFQ0tfSEVBREVSUyk6IGFkZCBsaW1pdHMuaCBleHBsaWNpdGx5LgoKMjAwMC0xMS0xMCAgICA8a2FybEBnbnUub3JnPgoKCSogZGlyLWV4YW1wbGU6IHVwZGF0ZQoJKiBpbmZvL25vZGVzLmM6IGRvYyBmaXhlcywgZXRjLgoKCSogaW5jb3Jwb3JhdGVkIHZlcmJhdGltIHBhdGNoIGZyb20gamFubmVrZToKICAgIDIwMDAtMDQtMTQgICAgPGphbm5la2VAZ251Lm9yZz4KCgkgICAgKiBhcHBsaWVkIHRleGluZm8tMy4xMnMuamNuNCBwYXRjaAoKICAgIDE5OTktMDktMDIgICAgPGphbm5la2VAZ251Lm9yZz4KCgkgICAgKiBtYWtlaW5mby9jbWRzLmMsCgkgICAgKiBtYWtlaW5mby9pbnNlcnRpb24uYzogQHZlcmJhdGltaW5jbHVkZSBmaWxlCgkgICAgKiBkb2MvdGV4aW5mby50ZXg6IEB2ZXJiYXRpbWluY2x1ZGUgZmlsZQoJICAgICogZG9jL3RleGluZm8udHhpOiBAdmViYXRpbWluY2x1ZGUgZmlsZSBkb2NvCgkgICAgKiBORVdTOiBhZGRlZCBAdmVyYmF0aW1pbmNsdWRlIHRvIExhbmd1YWdlIHNlY3Rpb24KCiAgICAxOTk5LTA5LTAxICAgIDxqYW5uZWtlQGdudS5vcmc+CgoJICAgICogbWFrZWluZm8vbWFrZWluZm8uYzogYmY6IEBleGRlbnQgKHVyZzYudGV4aSkgLS0gUm9sbGVkIGludG8gNC4wCgkgICAgKiBORVdTOiBhZGRlZCB2ZXJiKiB0byBMYW5ndWFnZSBzZWN0aW9uCgkgICAgKiBkb2MvdGV4aW5mby50eGk6IEB2ZXJiLCBAdmVyYmF0aW0gZG9jbwoJICAgICogZG9jL3RleGluZm8udGV4OiB0cmlja3kgdGV4LWZpeCBmb3IgQHZlcmJ7PGNoYXI+Li48Y2hhcj59CgkgICAgKiBkb2MvdGV4aW5mby50ZXg6IHJlYWwgdGFiIGV4cGFuc2lvbiBmb3IgQHZlcmJhdGltIG1vZGUKCSAgICAqIGRvYy90ZXhpbmZvLnRleDogcHJvcGVyIHN0YXJ0IG9mIGVudmlyb25tZW50LCBubyBpbmRlbnRhdGlvbgoKICAgIDE5OTktMDgtMzEgICAgPGphbm5la2VAZ251Lm9yZz4KCgkgICAgKiBtYWtlaW5mby9jbWRzLmM6CgkgICAgKiBtYWtlaW5mby9pbnNlcnRpb24ue2MsaH0sCgkgICAgKiBtYWtlaW5mby9tYWtlaW5mby57YyxofTogcmVkbyBvZiBAdmVyYmF0aW0sIEB2ZXJiezxjaGFyPi4uPGNoYXI+fQoJICAgICogZG9jL3RleGluZm8udGV4OiBmaXhlZCBAdmVyYns8Y2hhcj4uLjxjaGFyPn0KCiAgICAxOTk5LTA4LTMwICBKYW4gTmlldXdlbmh1aXplbiA8amFubmVrZUBnbnUub3JnPgoKCSAgICAqIG1ha2VpbmZvL2NtZHMuYywKCSAgICAqIG1ha2VpbmZvL2luc2VydGlvbi57YyxofSwKCSAgICAqIG1ha2VpbmZvL21ha2VpbmZvLntjLGh9OiBhZGRlZCBAdmVyYmF0aW0gKGFuZCBwcmVsaW1pbmFyeSBAdmVyYikKCSAgICBzdXBwb3J0CgkgICAgKiBkb2MvdGV4aW5mby50ZXg6IGFkZGVkIEB2ZXJiYXRpbSAoYW5kIHByZWxpbWluYXJ5IEB2ZXJiKSBzdXBwb3J0CgogICAgMTk5OS0wOC0yNCAgSmFuIE5pZXV3ZW5odWl6ZW4gPGphbm5la2VAZ251Lm9yZz4KCgkgICAgKiBiZjogZW1wdHkgbm9kZTogbWFrZWluZm8vbm9kZS5jOmNtX25vZGUgKCkgLS0gUm9sbGVkIGludG8gNC4wCgoKMjAwMC0xMC0xOCAgICA8a2FybEBnbnUub3JnPgoKCSogZG9jL2luZm8udGV4aTogZWxpIHVwZGF0ZQoKMjAwMC0wOS0yMiAgICA8a2FybEBnbnUub3JnPgoKCSogbWFrZWluZm8vZGVmdW4uYzogd2FybiBpZiBub24td2hpdGVzcGFjZSBmb2xsb3dzIEBkZWZ1bidkIG5hbWUKCSAgKHN1Z2dlc3Rpb24gZnJvbSBBa2ltKS4KCiAgSW5zdGFsbGVkIHNvbWUgcGF0Y2hlczoKCiAgMjAwMC0wOC0wNCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CgkgICogbWFrZWluZm8vbXVsdGkuYyAoZmluZF90ZW1wbGF0ZV93aWR0aCk6CgkgIERvbid0IGFjY2VzcyBiZWZvcmUgc3RhcnQgb2YgKlBBUkFNUy4KCiAgMjAwMC0wOC0yMSAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCSAgKiBpbmZvL2ZpbGVzeXMuYyAoaW5mb19maWxlX2luX3BhdGgpOiBSZWplY3QgRklMRU5BTUUgaWYgaXQgaXMKCSAgZW1wdHksIG9yICIuIiwgb3IgIi4uIi4KCiAgMjAwMC0wOC0yMyAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCSAgKiBpbmZvL3Nlc3Npb24uYyAoaW5mb19tZW51X29yX3JlZl9pdGVtKTogSWYgdGhlIHVzZXIgaGF2ZSBjaG9zZW4KCSAgbWVudSBpdGVtIG9yIHhyZWYgdGhhdCdzIGlkZW50aWNhbCB0byBkZWZlbnRyeSdzIGxhYmVsLCB1c2UKCSAgZGVmZW50cnkgaW5zdGVhZCBvZiBsb29raW5nIGZvciBpdHMgbGFiZWwuICBPdGhlcndpc2UsIHNlbGVjdCB0aGUKCSAgZW50cnkgd2hvc2UgcG9zaXRpb24gaXMgdGhlIGNsb3Nlc3QgdG8gdGhlIHdpbmRvdydzIHBvaW50LCBpbgoJICBjYXNlIHRoZXJlJ3MgbW9yZSB0aGFuIGEgc2luZ2xlIGVudHJ5IHdpdGggdGhhdCBsYWJlbC4KCjIwMDAtMDktMTIgICAgPGthcmxAZ251Lm9yZz4KCgkqIGRvYy90ZXhpbmZvLnR4aTogaXQncyAyMDAwIG5vdy4KCSogZG9jL3RleGluZm8udHhpOiBkb2N1bWVudCB0aGUgb25seSByZWFsIChhbmQgcmFyZSkgcmVhc29uIGZvciBub3QgdXNpbmcgaW1wbGljaXQgcG9pbnRlcgoJY3JlYXRpb24uCgoyMDAwLTA5LTA2ICAgIDxrYXJsQGdudS5vcmc+CgoJKiBjb25maWd1cmUuaW46IHRlc3QgYWxsIHRlcm1jYXAgdmFyaWFibGVzIGZvciBleGlzdGVuY2UuICBGcm9tCglhbmR5QHJ6LnVuaS1rYXJsc3J1aGUuZGUuCgoJKiBjb25maWd1cmUuaW4gKEFMTF9MSU5HVUFTKTogaW5jbHVkZSBqYS4KCSogbGliL3N5c3RlbS5oIFtIQVZFX0lPX0hdOiBtYWtlICNpbmNsdWRlIDxpby5oPiBjb25kaXRpb25hbCBmb3IKCUJlT1MuICBSZXBvcnRlZCBieSBEYW4gTW9vcmUsIGRhbkBtb29yZS5jeC4KCSogY29uZmlndXJlLmluIChBQ19DSEVDS19IRUFERVJTKTogYWRkIGlvLmguCgoyMDAwLTA2LTA1ICAgIDxrYXJsQGdudS5vcmc+CgoJKiBkb2MvdGV4aW5mby50eGk6IGZvcmdvdCB0byBlc2NhcGUge30uCgoyMDAwLTA1LTMwICAgIDxrYXJsQGdudS5vcmc+CgoJKiBpbmZvL2ZpbGVzeXMuYyAoaXNfZGlyX25hbWUpOiBjaGVjayBhbGwgaW5mbyBzdWZmaXhlcyBhcyB3ZWxsIGFzCgl0aGUgY29tcHJlc3Npb24gc3VmZml4ZXMuICBGaXhlcyBzZWdtZW50YXRpb24gZmF1bHQgb24gYSBkaXIuaW5mbwoJZmlsZSBlbmRpbmcgYWZ0ZXIgdGhlICogTWVudS4KCjIwMDAtMDUtMjggICAgPGthcmxAZ251Lm9yZz4KCgkqIGRvYy90ZXhpbmZvLnR4aTogRm9yZ290IHthcmd9IGluIEBybWFjcm8gZXhhbXBsZS4gIEZyb20gT2xhZiBCLgoKMjAwMC0wNS0yNyAgICA8a2FybEBnbnUub3JnPgoKCSogZG9jL3R4aS1jcy50ZXg6IHVwZGF0ZSBmcm9tOiBTdGVwYW4gS2FzYWwgPGthc2FsQHN1c2UuY3o+LgoKCSogZG9jL01ha2VmaWxlLmFtIChpbnN0YWxsLWRhdGEtbG9jYWwpOiByZWZvcm1hdCB3YXJuaW5nIHBlcgoJRnJhbudvaXMgdG8gaG9wZWZ1bGx5IG1ha2UgaXQgbW9yZSBub3RpY2VhYmxlLgoKCTIwMDAtMDItMDggIEVsaSBaYXJldHNraWkgIDxlbGl6QGlzLmVsdGEuY28uaWw+CgkJKiBpbmZvL3Nlc3Npb24uYyAoaW5jcmVtZW50YWxfc2VhcmNoKTogRG9uJ3QgcmV0YWluIFJFVCB3aGVuCgkJZXhpdGluZyBpc2VhcmNoLiAgU3VnZ2VzdGVkIGJ5IEhydm9qZSBOaWtzaWMgPGhuaWtzaWNAaXNrb24uaHI+LgoKMjAwMC0wNS0yMiAgICA8a2FybEBnbnUub3JnPgoKCSogZG9jL3RleGluZm8udHhpOiBwYWdlcGFyYW1zIC0+IHBhZ2VzaXplcwoKMjAwMC0wNS0xOCAgICA8a2FybEBnbnUub3JnPgoKCSogbWFrZWluZm8vbGFuZy5jIChjbV9hY2NlbnRfdGlsZGUpOiBuZWVkIE4gaW4gbGlzdC4KCUZyb206IGthbWFAaGlwcG8uZmlkby5kZSAoS2FybCBIZWlueiBNYXJiYWlzZSkKCgkqIG1ha2VpbmZvL2ZpbGVzLmMgKGZpbmRfYW5kX2xvYWQpOiByZWFkIG9ubHkgdGhlIG51bWJlciBvZiBieXRlcwoJYXZhaWxhYmxlIGluIHRoZSBidWZmZXIuICBBbHNvLCByZW1vdmUgb25lLWJ5dGUtYXQtYS10aW1lIHJlYWRpbmcKCWluIHRoZSBXSU4zMiBjYXNlLgoJRnJvbTogIkouIERhdmlkIEJyeWFuIiA8ZGJyeWFuQGJjcGwubmV0PgoKCSogaW5mby9tYW4uYzogdXNlIGVsaSdzIHBhdGNoIGFmdGVyIGFsbCwgd2UgcmUtaW5jcmVtZW50IGogYXQgdGhlCgl0b3Agb2YgdGhlIGxvb3AuCgoyMDAwLTA1LTE2ICAgIDxrYXJsQGdudS5vcmc+CgoJKiBpbmZvL21hbi5jIChjbGVhbl9tYW5wYWdlKTogZG9uJ3Qgd3JpdGUgYmVmb3JlIHRoZSBiZWdpbm5pbmcgb2YKCW5ld3BhZ2UuCgkoYmFzZWQgb24gcGF0Y2ggZnJvbSBFbGkpLgoKMjAwMC0wMi0wMyAgICA8a2FybEBnbnUub3JnPgoKCSogZG9jL3RleGluZm8udHhpOiByZW1vdmUgc3B1cmlvdXMgc3BhY2UuIGZyb20ga2FqYS4KCjE5OTktMTAtMTIgIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiBkb2MvTWFrZWZpbGUuYW0gKGluc3RhbGwtdGV4KTogaW5zdGFsbCBhbGwgdHhpLT8/IGZpbGVzLgoKMTk5OS0xMC0wMSAgVy4gTC4gRXN0ZXMgIDx3aWxsQGZ1bWJsZXJzLm9yZz4KCgkqIG1ha2VpbmZvL2NtZHMuYzogZG9udCB0cmVhdCBAY2VudGVyIGFzIHNlcGFyYXRlIHBhcmFncmFwaCwKCXVzZSBkaXYgZWxlbWVudCB0byBvdXRwdXQgY2VudGVyCgoxOTk5LTA5LTI5ICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgoKCSogZGpncHAvUkVBRE1FOiBTYXkgYGRpci1leGFtcGxlJywgbm90IERJUi4KCgkqIGxpYi9zeXN0ZW0uaCAoREVGQVVMVF9JTkZPUEFUSCkgW19fREpHUFBfX106IERlZmluZS4KCjE5OTktMDktMjggIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiBjb25maWd1cmUuaW4sCgl1dGlsL3RleGkyZHZpOiB2ZXJzaW9uIDQuMC4KCSogZG9jL3RleGluZm8udHhpOiBOZXcgaXNibi4KCjE5OTktMDktMjQgIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiBkb2MvdGV4aW5mby50eGk6IEZpeGVzIGZyb20gT2xlZy4KCjE5OTktMDktMjAgIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiBtYWtlaW5mby9ub2RlLmM6IERvbid0IHdyaXRlIHJlZ2lvbiBhdCBhbiBhbmNob3IuCglGcm9tOiBUaG9tYXMgRXNrZW4gPGVza2VuQG5tbGFiLmluZm9ybWF0aWsuZmgtZG9ydG11bmQuZGU+CgoJKiBpbmZvL3Rlcm1pbmFsLmM6IE9ubHkgc2V0IGR1bWIgdGVybWluYWwgaWYgdGdldGVudCByZXR1cm5zIDwgMCwKCQlub3QgMC4KCUZvciBIUC1VUCAxMS4KCUZyb20gamVmZi5odWxsQHN0YXRlLmNvLnVzLgoKCSogbWFrZWluZm8vZm9vdG5vdGUuYzogRG9uJ3QgdHJhbnNsYXRlIHRoZSBgRm9vdG5vdGVzJyBzdHJpbmcKCQlhY2NvcmRpbmcgdG8gTEFORywgaXQgc2hvdWxkIGJlIGFjY29yZGluZyB0bwoJCUBkb2N1bWVudGxhbmd1YWdlLCB3aGljaCBpc24ndCBpbXBsZW1lbnRlZCB5ZXQuCglGcm9tOiBKYW4gTmlldXdlbmh1aXplbiA8amFubmVrZUBnbnUub3JnPgoKCSogZG9jL3RleGluZm8udHhpOiBAZW5kIGRpcmVudHJ5IGZyb20ga2FtYS4KCjE5OTktMDktMTkgIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiBkb2MvdGV4aW5mby50eGk6IFxuaW5ldHQgaXMgbm93IFxzbWFsbHR0LgoKCSogZG9jL3RleGluZm8udHhpOiBhcm5vbGQgY2hhbmdlcwoKCTE5OTktMDktMDMgIEFraW0gRGVtYWlsbGUgIDxha2ltQGVwaXRhLmZyPgoJKiB0ZXhpMmR2aSAoZ2V0b3B0KTogYmF0Y2ggaGFzIHRvIGJlIGFzc2lnbmVkIGBldmFsJywgbm90IGBlY2hvJy4KCShiaWJ0ZXgpOiBMYXVuY2ggQmliVGVYIGFsc28gd2hlbiB0aGUgTE9HIGZpbGUgY29tcGxhaW5zIHRoYXQKIAl0aGVyZSBhcmUgbm8gQkJMIGZpbGUuCgoJKiBkb2MvdGV4aW5mby50eGk6IERvY3VtZW50IHRoYXQgQGFuY2hvciBpZ25vcmVzIHNwYWNlcy4KCgkqIG1ha2VpbmZvL2NtZHMuYyAoY21fc2h5cGgpOiByZW1vdmUsICZzaHk7IGlzIG5vdCBzdXBwb3J0ZWQgaW4KCQlicm93c2Vycy4KCUZyb206IFRob21hcyBFc2tlbiA8ZXNrZW5Abm1sYWIuaW5mb3JtYXRpay5maC1kb3J0bXVuZC5kZT4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmM6IERvbid0IGNyYXNoIGlmIGN1cnJlbnRfaW5kZW50ID0gMC4KCUZyb206IEphbiBOaWV1d2VuaHVpemVuIDxqYW5uZWtlQGdudS5vcmc+CgoJKiBtYWtlaW5mby9tYWtlaW5mby5jOiBBdm9pZCBibGFuayBsaW5lcyBiZXR3ZWVuIEBtZW51IGVudHJpZXMuCgkqIGNvbmZpZ3VyZS5pbjogMy4xMnQKCgkxOTk5LTA4LTMxICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgoJKiBpbmZvL2luZm8uYyAoaW5mb19zaG9ydF9oZWxwKTogRG9jdW1lbnQgLS1hcHJvcG9zLgoKMTk5OS0wOS0xOCAgS2FybCBCZXJyeSAgPGthcmxAZ251Lm9yZz4KCgkqIG1ha2VpbmZvL2h0bWwuYyAoaHRtbF9vdXRwdXRfaGVhZCk6IHVzZSB0ZXh0IGZvciA8dGl0bGU+LCBub3QKCQlodG1sIG1hcmt1cC4gIEZyb20gRnJhbudvaXMuCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKHRleHRfZXhwYW5zaW9uKTogbmV3IHJvdXRpbmUuCgkqIG1ha2VpbmZvL2NtZHMuYyAoY21fc2V0dGl0bGUpOiBkb24ndCBleHBhbmQgdGhlIHRpdGxlIGhlcmUsCgkJd2UnbGwgZG8gaXQgbGF0ZXIuCgoJKiBtYWtlaW5mby9tYWtlaW5mby5oICh0ZXh0X2V4cGFuc2lvbik6IGRlY2xhcmUuCgoJKiBpbmZvL2luZGljZXMuYywKCSogaW5mby9pbmZvZG9jLmMsCgkqIGluZm8vc2Vzc2lvbi5jLAoJKiBpbmZvL2Zvb3Rub3Rlcy5jOiB0cmFuc2xhdGUgZXJyb3JzLgoJKiBpbmZvL2luZm8uaDogVXNlIGAnIGluc3RlYWQgb2YgIiIgaW4gZXJyb3JzLgoKMTk5OS0wOS0wNiAgS2FybCBCZXJyeSAgPGthcmxAZ251Lm9yZz4KCgkrMTk5OS0wOC0yNCAgSmFuIE5pZXV3ZW5odWl6ZW4gPGphbm5la2VAZ251Lm9yZz4KCSogbWFrZWluZm8vbm9kZS5jOmNtX25vZGU6IGRvbid0IGNvbXBhcmUgY3VycmVudF9ub2RlIHdoZW4gbnVsbC4KCgkxOTk5LTA4LTIzICBXLiBMLiBFc3RlcyAgPHdpbGxAZnVtYmxlcnMub3JnPgoJKiAgbWFrZWluZm8vbm9kZS5jIChjbV9ub2RlKTogd3JpdGUgPGEgbmFtZT0+IHRhZ3MgZXZlbgogICAgICAgICAgIGlmdXNpbmcgLS1uby1oZWFkZXJzCgoJKiBjb25maWd1cmUuaW46IG9zcGVlZGxpYiAtPiB0cnlsaWIKCUZyb206IEFuZHJlYXMgU2Nod2FiIDxzY2h3YWJAc3VzZS5kZT4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKHJlYWRfY29tbWFuZCk6IGFkZCBleHBsaWNpdCAwIHRvIHJldHVybiBpZgoJZW5jbG9zdXJlIGNvbW1hbmQuICBGcm9tOiBBbmRyZWFzIEphZWdlciA8YWpAYXJ0aHVyLnJoZWluLW5lY2thci5kZT4uCgoxOTk5LTA4LTE5ICBLYXJsIEJlcnJ5ICA8a2FybEBnbnUub3JnPgoKCSogY29uZmlndXJlLmluOiBhZGQgbWlzc2luZyBxdW90ZXMsIGxvZ2ljIGluIG5ldyB0ZXJtY2FwIGxpYnJhcnkKCWNoZWNrLgoKMTk5OS0wOC0xNyAgS2FybCBCZXJyeSAgPGthcmxAZ251Lm9yZz4KCgkqIG1ha2VpbmZvL211bHRpLmMsCgkqIG1ha2VpbmZvL3NlY3Rpb25pbmcuYywKCSogbWFrZWluZm8vbm9kZS5jLAoJKiBtYWtlaW5mby9tYWNyby5jOiBvbWl0IHVudXNlZCB2YXJzCgkqIGluZm8vc2Vzc2lvbi5jIChpbmZvX2dvdG9faW52b2NhdGlvbl9ub2RlKTogb21pdCB1bnVzZWQgZGVjbC4KCgkqIGNvbmZpZ3VyZS5pbjogQ2hlY2sgZm9yIGV4dHJhIHRlcm1saWIgdmFyaWFibGUgbmVjZXNzYXJ5IG9uCgkJSFAtVVggOS4KCUZyb206IE9sYWYgQmFjaG1hbm4gPG9iYWNobWFuQG1hdGhlbWF0aWsudW5pLWtsLmRlPgoKICAxOTk5LTA4LTE2ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBzdXNlLmRlPgoJICAqIGluZm8vdGVybWluYWwuYyAodGVybWluYWxfaW5pdGlhbGl6ZV90ZXJtaW5hbCk6IFRyeSB0Y2dldGF0dHIKCSAgYW5kIGNmZ2V0b3NwZWVkIGluIHByZWZlcmVuY2UgdG8gVElPQ0dFVFAuCgkgIChvcmlnaW5hbF90Y2hhcnMsIG9yaWdpbmFsX2x0Y2hhcnMpOiBEZWZpbmUgdGhlbSBvbmx5IGlmIG5lZWRlZC4KCjE5OTktMDgtMTYgIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiBpbmZvL2luZm9kb2MuYyAoY3JlYXRlX2ludGVybmFsX2luZm9faGVscF9ub2RlKTogcmVuYW1lIGFyZy4KCShpbmZvX2ZpbmRfb3JfY3JlYXRlX2hlbHBfd2luZG93KTogYXZvaWQgZGVyZWYgb2YgbnVsbCBlbGlnaWJsZS4KCgkqIGluZm8vdGVybWluYWwuYyAoVElPQ0dFVFAsIFRJT0NHRVRDLCBUSU9DR0xUQykgW2FscGhhICYmIGxpbnV4XToKCSN1bmRlZi4gIFVzZWxlc3Mgc3R1YnMgYXJlIHByZXNlbnQuCgoxOTk5LTA4LTE1ICBLYXJsIEJlcnJ5ICA8a2FybEBnbnUub3JnPgoKCSogaW5mby9ub2Rlcy5jOiBSZW1vdmUgcmVmZXJlbmNlIHRvIG5vbmV4aXN0ZW50IFJGQyBmb3IgSW5mbwoJZmlsZXMuCgoxOTk5LTA4LTExICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgoKCSogaW5mby9ub2Rlcy5jIChpbmZvX2ZpbmRfZmlsZV9pbnRlcm5hbCk6IElmIHRoZSBmaWxlJ3MgY29udGVudHMKCXdlcmUgZ2MnZWQgc2luY2UgbGFzdCB0aW1lIGl0IHdhcyBsb2FkZWQsIHJlbG9hZCB0aGUgZmlsZS4KCldlZCBBdWcgMTEgMDY6NDI6NDcgMTk5OSAgS2FybCBCZXJyeSAgPGthcmxAZ251Lm9yZz4KCgkqIGRvYy9NYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IGFkZCB0eGktcHQudGV4IGZyb20gTGFsby4KCk1vbiBBdWcgIDkgMTY6Mjg6MTggMTk5OSAgS2FybCBCZXJyeSAgPGthcmxAZ251Lm9yZz4KCgkqIHV0aWwvdGV4aTJkdmk6IFN1cHBvcnQgcHJlbG9hZGVkIHRleGluZm8udGV4LCBmcm9tIFN0ZXBoZW4uCgoJKiBtYWtlaW5mby9tYWtlaW5mby5jIChhZGRfY2hhcik6IHJlc3RvcmUgdWdseSBjaGVjayBmb3IgZmlyc3QKIAkJY2hhcmFjdGVyIGJlaW5nIDwuCgoJKiBtYWtlaW5mby9jbWRzLmMgKGNtX2tiZCk6IEluY3JlbWVudCBpbl9maXhlZF93aWR0aF9mb250IGZvcgogCQlodG1sLgoKCSogZG9jL3RleGluZm8udHhpOiBlZmZlY3Qgbm90IGFmZmVjdAoKCSogbWFrZWluZm8vbWFrZWluZm8uYzogUmVhcnJhbmdlIGhlbHAuCgoJKiBtYWtlaW5mby90b2MuYzogQ2FzdCAlKiBhcmd1bWVudHMgdG8gKGludCkgdG8gcGxhY2F0ZSBnY2MKIAkJLVdmb3JtYXQuCgpGcmkgQXVnICA2IDEzOjAzOjE0IDE5OTkgIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiB1dGlsL2luc3RhbGwtaW5mby5jOiBIYXJkd2lyZSB0aGUgRmlsZTogZGlyLCBOb2RlOiB0b3AgcGFydCBvZgoJCXRoZSBza2VsZXRvbiBkaXIgZmlsZS4KCVJlcG9ydCBmcm9tOiBTdGFuaXNsYXYgQnJhYmVjIDx1dHhAazMzMi5mZWxkLmN2dXQuY3o+CgoJKiBpbmZvL01ha2VmaWxlLmFtIChCVUlMVF9TT1VSQ0VTKTogcm0gLWYgJChCVUlMVF9TT1VSQ0VTKSwgYQogCQlrbHVkZ2UuCgogICAgMTk5OS0wNy0yOCAgS2FybCBFaWNod2FsZGVyICA8a2VAZ251LmZyYW5rZW4uZGU+CgoJICAgICogbWFrZWluZm8vbWFrZWluZm8uYzogRml4IGhlbHAgc3RyaW5nICgtbykuCgogICAgMTk5OS0wNy0zMCAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCgkgICAgKiBtYWtlaW5mby9tYWtlaW5mby5jIChjbV91cmVmLCBjbV9lbWFpbCk6IERvbid0IGNvbGxhcHNlIC0tIGFuZAoJICAgIGBgIGluIHRoZSBVUkwgcGFydCBvZiB0aGUgcmVmZXJlbmNlLgoKICAgIDE5OTktMDgtMDMgIEVsaSBaYXJldHNraWkgIDxlbGl6QGlzLmVsdGEuY28uaWw+CgoJICAgICogdXRpbC9pbnN0YWxsLWluZm8uYyAobWFpbik6IEZvciBlbnRyaWVzIGdpdmVuIG9uIGNvbW1hbmQgbGluZSwKCSAgICBzZXQgZW50cnlfc2VjdGlvbnMgYW5kIGVudHJ5X3NlY3Rpb25zX3RhaWwgbWVtYmVycyB0byBOVUxMLCBhbmQKCSAgICBzZXQgdGV4dF9sZW4gbWVtYmVyIHRvIHRoZSBlbnRyeSBsZW5ndGguICBBZnRlciBwcm9jZXNzaW5nIHRoZQoJICAgIEluZm8gZmlsZSwgdXBkYXRlIHRoZSBlbnRyeV9zZWN0aW9ucyBwb2ludGVycyBvZiBhbGwgZW50cmllcyB0aGF0CgkgICAgY2FtZSBmcm9tIHRoZSBjb21tYW5kIGxpbmUuCgoJKiB1dGlsL3RleGluZGV4LmMgKHNvcnRfb2ZmbGluZSwgc29ydF9pbl9jb3JlKTogdXNlIG9mZl90IHJhdGhlcgoJCXRoYW4gbG9uZy4KCUZvdW5kIG9uIEZyZWVkQlNEIDIuMi44IGJ5ICJUcm9uZCBFbmRyZXN0b2wiIDxlbmRyZXN0b2xAaG90bWFpbC5jb20+LgoKTW9uIEp1bCAxOSAxNzoxNjo0NiAxOTk5ICBLYXJsIEJlcnJ5ICA8a2FybEBnbnUub3JnPgoKCSogY29uZmlndXJlLmluOiAzLjEybgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAoYWRkX2NoYXIpOiBEb24ndCBpbnNlcnQgPHA+IGlmIHdlJ3JlIGluCiAJCUBodG1sLgoKCSogbWFrZWluZm8vaHRtbC5jIChhZGRfZXNjYXBlZF9hbmNob3JfbmFtZSksCgkqIG1ha2VpbmZvL3RvYy5jICh0b2NfYWRkX2VudHJ5KTogdXNlIFVSTF9TQUZFX0NIQVIuCgkqIG1ha2VpbmZvL21ha2VpbmZvLmggKEhUTUxfU0FGRSwgVVJMX1NBRkVfQ0hBUik6IG5ldyBtYWNyb3MuCgpTdW4gSnVsIDE4IDE0OjQ3OjQwIDE5OTkgIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiBkaXItZXhhbXBsZTogQWRkIGJ6aXAyLgoKCSogY29uZmlndXJlLmluOiAzLjEybS4KCgkqIGRvYy90ZXhpbmZvLnR4aSAoQGFmb3VybGF0ZXgsQGFmb3Vyd2lkZSk6IGFkZCB0byBjb21tYW5kIGxpc3QuCgoxOTk5LTA3LTE3ICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAoY21feHJlZik6IERvbid0IGNvbGxhcHNlIGBgIGFuZCAtLSB3aGlsZQoJZXhwYW5kaW5nIG5vZGUgbmFtZXMuICBHZW5lcmF0ZSBhIHRlcm1pbmF0aW5nIHBlcmlvZCBmb3IKCUBweHJlZiwgd2hlbiBpdCBoYXMgbW9yZSB0aGFuIGEgc2luZ2xlIGFyZ3VtZW50LgoKCSogbWFrZWluZm8vaW5kZXguYyAoY21fcHJpbnRpbmRleCk6IERvbid0IGNvbGxhcHNlIGBgIGFuZCAtLSB3aGlsZQoJZXhwYW5kaW5nIG5vZGUgbmFtZXMuCgpTYXQgSnVsIDE3IDE2OjMzOjQ1IDE5OTkgIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiAzLjEybC4KCgkqIGRvYy90ZXhpbmZvLnR4aTogQGFsaWFzLCBAZGVmaW5mb2VuY2xvc2UsIGV0Yy4KCgkqIHV0aWwvdGV4aW5kZXguYyAoaW5kZXhpZnkpOiBlcnJvciBtZXNzYWdlIGluc3RlYWQgb2YgYWJvcnQoMikKIAkJd2hlbiBubyBwYWdlIG51bWJlci4KCkZyaSBKdWwgMTYgMTg6MDA6MjYgMTk5OSAgS2FybCBCZXJyeSAgPGthcmxAZ251Lm9yZz4KCgkqIGRvYy90ZXhpbmZvLnR4aTogT3ZlcmZ1bGwgYm94ZXMsIGhlbHAybWFuLCBldGMuCgoJKiB1dGlsL01ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogdGV4aS1vdXRsaW5lLmdhd2sgaXMgcmVhbGx5CglvdXRsaW5lLmdhd2ssIGFkZCBmaXhyZWYuZ2F3ayBhbmQgcHJlcGluZm8uYXdrIGFuZAoJCXRleGktZG9jc3RyaW5nLW1hZ2ljLmVsLgoKVGh1IEp1bCAxNSAxODo1Nzo1NCAxOTk5ICBLYXJsIEJlcnJ5ICA8a2FybEBnbnUub3JnPgoKCSogZG9jL3RleGluZm8udHhpOiAuZm10LCBldGMuCgkqIGRvYy90ZXhpbmZvLnR4aTogTW9yZSBtYWNybyBkb2NzLCBldGMuCgpXZWQgSnVsIDE0IDE5OjU4OjQ3IDE5OTkgIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiBkb2MvdGV4aW5mby50eGk6IEdpdmUgZ29vZCBxdW90ZS4KCgkqIHV0aWwvTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBhZGQgdGV4aS1vdXRsaW5lLmdhd2suCgoJRnJvbToga2FtYUBoaXBwby5maWRvLmRlIChLYXJsIEhlaW56IE1hcmJhaXNlKQoJKiBtYWtlaW5mby90b2MuYyAoY29udGVudHNfdXBkYXRlX2h0bWwpOiBnbyBiYWNrIHRvIHN0YXJ0IGxldmVsLgoJKiBkb2MvdGV4aW5mby50eGk6IGRlZnR5cGVvcAoKCUZyb206ICJLYXZlaCBSLiBHaGF6aSIgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgkqIG1ha2VpbmZvL3RvYy5jICh0b2NfYWRkX2VudHJ5KTogZG9uJ3QgYXNzdW1lIHNwcmludGYgcmV0dXJuIHR5cGUKIAkJaXMgaW50LgoJKiBtYWtlaW5mby9zZWN0aW9uaW5nLmMgKGluc2VydF9hbmRfdW5kZXJzY29yZSk6IGRlY2xhcmUgbW9yZQogCQl1bnNpZ25lZCBjaGFyICouCgkqIG1ha2VpbmZvL21hY3JvLmggKGl0ZXh0X2luZm8sIGl0ZXh0X3NpemUpOiByZW1vdmUgZGVjbGFyYXRpb25zLAoJCXRoZXkncmUgZGVmaW5lZCBzdGF0aWMuCgkqIG1ha2VpbmZvL21ha2VpbmZvLmM6IFNwbGl0IHVwIGhlbHAgc3RyaW5nIGV2ZW4gbW9yZS4KClR1ZSBKdWwgMTMgMTc6MTY6MTggMTk5OSAgS2FybCBCZXJyeSAgPGthcmxAZ251Lm9yZz4KCgkqIGRvYy90ZXhpbmZvLnR4aTogRG9jdW1lbnQgQHJtYWNyby4KCSogbWFrZWluZm8vbWFjcm8uYyAoY21fcm1hY3JvKTogbmV3IGNvbW1hbmQgdG8gZG8gQGFsbG93LXJlY3Vyc2lvbgogCQlieSBkZWZhdWx0LgogCShkZWZpbmVfbWFjcm8pOiBzcGxpdCBvZmYgZnJvbSBjbV9tYWNyby4KCgkqIG1ha2VpbmZvL21hY3JvLmggKGNtX3JtYWNybyk6IGRlY2xhcmUuCgkqIG1ha2VpbmZvL21hY3JvLmggKGRlbGV0ZV9tYWNybyk6IGRvIG5vdCBuZWVkIHRvIGV4cG9ydC4KCSogbWFrZWluZm8vY21kcy5jIChybWFjcm8pOiBuZXcgY29tbWFuZC4KCgkqIG1ha2VpbmZvL2h0bWwuYywKCSogbWFrZWluZm8vdG9jLmMsCgkqIG1ha2VpbmZvL2xhbmcuYywKCSogbWFrZWluZm8vbWFrZWluZm8uYzogVXNlIHN0cmNociBpbnN0ZWFkIG9mIG1lbWJlci4KCk1vbiBKdWwgMTIgMDg6MDE6MTkgMTk5OSAgS2FybCBCZXJyeSAgPGthcmxAZ251Lm9yZz4KCgkqIGRvYy90ZXhpbmZvLnR4aTogZG9jdW1lbnQgdGhpcy4KCSogbWFrZWluZm8vbWFjcm8uYyAoYXBwbHkpOiB3YXJuIGlmIFwgaW4gbWFjcm8gYm9keSBpcyBub3QKCQlmb2xsb3dlZCBieSBhIHBhcmFtZXRlciBuYW1lIG9yIFwsIGluc3RlYWQgb2Ygc2lsZW50bHkKCQlhY2NlcHRpbmcgaXQsIGZvciBjb21wYXRpYmlsaXR5IHdpdGggVGVYLgoKCSogbWFrZWluZm8vbWFjcm8uYzogRG9jIGZpeC4KClN1biBKdWwgMTEgMTI6NDk6NTAgMTk5OSAgS2FybCBCZXJyeSAgPGthcmxAZ251Lm9yZz4KCgkqIG1ha2VpbmZvL21hY3JvLmMgKGNtX21hY3JvKTogZG8gQHF1b3RlLWFyZyBpbXBsaWNpdGx5IGlmIHNpbmdsZQogCQlhcmd1bWVudCB0byBtYWNyby4KCSogZG9jL3RleGluZm8udHhpOiBEb2N1bWVudCB0aGlzLgoKCSogZG9jL3RleGluZm8udHhpIChTbWFsbGNhcHMpOiBEb2N1bWVudCBtYWtlaW5mbyB3YXJuaW5nIGlmIGFyZyBpcwogCQlhbGwgdXBwZXJjYXNlLgoJKiBtYWtlaW5mby9jbWRzLmMgKGNtX3NjKTogd2FybiBpZiBhcmcgaXMgYWxsIHVwcGVyIChzdWdnZXN0ZWQgYnkKIAkJSmltIE1leWVyaW5nKS4KCgkqIG1ha2VpbmZvL2NtZHMuYyAoY21fdmFyKTogd2FybiBpZiBhcmd1bWVudCBjb250YWlucyBhbnkgb2YgLFtdKCkKCQl3aGljaCBhcmUgdW5saWtlbHkgdG8gYmUgYWxsb3dhYmxlIGluIHJlYWwgdmFyaWFibGUgbmFtZXMuCgkJU3VnZ2VzdGVkIGJ5IHJtcy4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmggKG1lbWJlcik6IHJlbW92ZSB3ZWlyZCBtYXNraW5nIG1hY3JvLgoKCSogZG9jL3RleGluZm8udHhpOiBQcm9iYWJseSBvayB0byBpbmRlbnQgQGV4YW1wbGUuCgoJKiBjb25maWd1cmUuaW46IDMuMTJrLgoKCSogbWFrZWluZm8vaHRtbC5jIChhZGRfZXNjYXBlZF9hbmNob3JfbmFtZSk6IENhc3QgdG8gdW5zaWduZWQgY2hhcgoJCWZvciA4LWJpdCBjaGFycy4gRnJvbSBZb3NoaWtpLgoKCSogbWFrZWluZm8vbWFrZWluZm8uYzogY29tcGxhaW4gLT4gd2FybiBmb3Igc2FrZSBvZiA8ODAgY2hhcnMuCgoxOTk5LTA3LTA5ICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgoKCSogbWFrZWluZm8vbXVsdGkuYyAobXVsdGl0YWJsZV9pdGVtKTogUXVvdGUgdGhlIHZhbHVlIG9mIGFsaWduPQoJcHJvcGVydHkuCgoJKiBtYWtlaW5mby9kZWZ1bi5jIChkZWZ1bl9pbnRlcm5hbCk6IERpdHRvLgoKCSogbWFrZWluZm8vY21kcy5jIChjbV9jZW50ZXIpOiBEaXR0by4KCgkqIG1ha2VpbmZvL3RvYy5jICh0b2NfYWRkX2VudHJ5KTogTmV3IGFyZ3VtZW50IEFOQ0hPUjsgYWxsIGNhbGxlcnMKCWNoYW5nZWQuICBJbiBIVE1MIG1vZGUsIGV4cGFuZCBOT0RFX05BTUUsIG9yIHVzZSBBTkNIT1IsIGlmCglub24tTlVMTCwgYW5kIHNhdmUgaXQgdG9nZXRoZXIgd2l0aCB0aGUgVE9DIG5hbWUgaW4gdGhlIG5hbWUKCW1lbWJlciBvZiB0aGUgVE9DIGVudHJ5LgoJKHRvY19hZGRfZW50cnksIHRvY19maW5kX3NlY3Rpb25fb2Zfbm9kZSk6IEFkZCBhIHdhcm5pbmcgaW4gYQoJY29tbWVudCB0aGF0IHRoZSBOT0RFIGFyZ3VtZW50IG11c3QgYmUgdW5leHBhbmRlZC4KCShjb250ZW50c191cGRhdGVfaHRtbCk6IFRlcm1pbmF0ZSB0aGUgVE9DIGVudHJ5IHdpdGggPC9hPi4KCgkqIG1ha2VpbmZvL3NlY3Rpb25pbmcuYyAoc2VjdGlvbmluZ19odG1sKTogSWYgdGhlIHNlY3Rpb25pbmcKCWNvbW1hbmQgaXMgb3V0c2lkZSBhbnkgbm9kZSwgZ2VuZXJhdGUgZXhwbGljaXQgYW5jaG9yIGFuZCBwYXNzIGl0Cgl0byB0b2NfYWRkX2VudHJ5LgoKCSogbWFrZWluZm8vbm9kZS5jIChleHBhbmRfbm9kZV9uYW1lKTogTm93IGV4dGVybmFsIGluc3RlYWQgb2YKCXN0YXRpYy4KCShjbV9ub2RlKTogT3V0cHV0IGV4cGFuZGVkIG5vZGUgbmFtZSBpbiB0aGUgbmF2aWdhdGlvbiBiYXIuCgoJKiBtYWtlaW5mby9ub2RlLmg6IERlY2xhcmUgZXhwYW5kX25vZGVfbmFtZS4KCgkqIG1ha2VpbmZvL2luZGV4LmMgKGNtX3ByaW50aW5kZXgpOiBQcm9kdWNlIHZhbGlkIEhUTUwgbGlua3MsIGV2ZW4KCWlmIGluZGV4LT5ub2RlIGlzIE5VTEwgb3IgZW1wdHkuICBGaXggZm9ybWF0IG9mIGluZGV4IHVuZGVyCgktLW5vLWhlYWRlcnMuCgpGcmkgSnVsICA5IDE4OjA5OjI4IDE5OTkgIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiBkb2MvdGV4aW5mby50eGk6IFBhaXIgQGVuZCBodG1sIHByb3Blcmx5LiAgRnJvbSBPbGFmIEIuCgoJKiBkb2MvTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBhZGQgdHhpLW5sLnRleCBmcm9tIE1hcmNlbCB2YW4gZGVyIEJvb20KCTxtYXJjZWxAdmlydHVhbHByb2plY3RzLm9yZz4uCgoJKiBkb2MvdHhpLWVuLnRleDogRG9jIGZpeC4KCldlZCBKdWwgIDcgMTY6MDc6NDQgMTk5OSAgS2FybCBCZXJyeSAgPGthcmxAZ251Lm9yZz4KCgkqIGRvYy9NYWtlZmlsZS5hbTogRG9jIGZpeC4KCgkqIGNvbmZpZ3VyZS5pbiAodHhpX0NIRUNLX0RFQ0xTKTogY2FsbCB0aGlzIG5ldyBtYWNybyAoaW4KIAkJYWNpbmNsdWRlLm00KS4KIAkqIGFjaW5jbHVkZS5tNDogbmV3IGZpbGUuCgpUdWUgSnVsICA2IDE5OjEyOjM3IDE5OTkgIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiBtYWtlaW5mby9pbnNlcnRpb24uaCwKCSogbWFrZWluZm8vaW5zZXJ0aW9uLmMsCgkqIG1ha2VpbmZvL2NtZHMuYywKCSogbWFrZWluZm8vZGVmdW4uYzogbmV3IGNvbW1hbmQgQGRlZnR5cGVvcC4KCVN1Z2dlc3Rpb24gZnJvbTogYm9vdGhAdXMuaWJtLmNvbS4KCjE5OTktMDctMDUgIEVsaSBaYXJldHNraWkgIDxlbGl6QGlzLmVsdGEuY28uaWw+CgoJKiBtYWtlaW5mby9tYWtlaW5mby5jIChjbV92YWx1ZSk6IERvbid0IGNvbnZlcnQgcXVvdGVzIGFuZCBkYXNoZXMKCWluIHRoZSBhcmd1bWVudCBvZiBAdmFsdWUsIHNpbmNlIEBzZXQgZG9lc24ndC4KCk1vbiBKdWwgIDUgMTY6NDM6MjMgMTk5OSAgS2FybCBCZXJyeSAgPGthcmxAZ251Lm9yZz4KCgkqIG1ha2VpbmZvL2luc2VydGlvbi5jIChnZXRfaXRlbV9mdW5jdGlvbik6IHJldHVybiAiQCAiIHJhdGhlcgogCQl0aGFuICJAIi4JKGNvbW1hbmRfbmVlZHNfYnJhY2VzKTogbmV3IGZuLgoJKGNtX2l0ZW0pOiBoYW5kbGUgQGl0ZW1pemUgbWFya2VycyB0aGF0IGRvbid0IHRha2UgYnJhY2VzLgoJQnVnIHJlcG9ydGVkIGJ5IFN0ZXBoZW4sIHByb3RvdHlwZSBmaXggZnJvbSBZb3NoaWtpLgoKCSogZG9jL3RleGluZm8udHhpIChDb250ZW50cyk6IEBjb250ZW50cyBpZ25vcmVkIGF0IGJlZ2lubmluZyB3aGVuCiAJCW91dHB1dHRpbmcgdG8gc3Rkb3V0LgoJSW5zdGFsbGVkIHRoaXMuCj4xOTk5LTA1LTAyICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgo+CSogbWFrZWluZm8vdG9jLmMgKGNtX2NvbnRlbnRzLCBjbV9zaG9ydGNvbnRlbnRzKTogSWYgd3JpdGluZyB0bwo+CXN0ZG91dCwgb3V0cHV0IHRoZSBjb250ZW50cyBhbmQgc2hvcnQgY29udGVudHMgaW1tZWRpYXRlbHksIGFuZAo+CWFzc2lnbiBOVUxMIHRvIGNvbnRlbnRzX2ZpbGVuYW1lIGFuZCBzaG9ydGNvbnRlbnRzX2ZpbGVuYW1lLCBzbwo+CXRoYXQgdG9jX3VwZGF0ZSB3b24ndCB0cnkgdG8gcmV3cml0ZSBzdGRvdXQuCgoKCSogbWFrZWluZm8vc2VjdGlvbmluZy5jIChzZWN0aW9uaW5nX2h0bWwpOiBkZWNsYXJlIHN0YXJ0aW5nX3BvcwoJCWFuZCBlbmRpbmdfcG9zIGFzIHVuc2lnbmVkIGNoYXIgKiBzaW5jZSB0aGV5J3JlIGJhc2VkIG9uCgkJb3V0cHV0X3BhcmFncmFwaC4KCgkqIG1ha2VpbmZvL2luc2VydGlvbi5jOiBDYXN0IG91dHB1dF9wYXJhZ3JhcGggdG8gY2hhciAqIGZvciBzYWtlCgkJb2Ygc3RybmNtcCBwcm90b3R5cGUgKG9uIElSSVggNCkuCglGcm9tOiAiS2F2ZWggUi4gR2hhemkiIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCgkqIGluZm8vbWFuLmMgKGdldF9tYW5wYWdlX2NvbnRlbnRzKTogcmVzdG9yZSBwcmV2aW91cyAoZGVmYXVsdCkKIAkJU0lHQ0hMRCBoYW5kbGVyIHNvIHRoZSBwY2xvc2Ugd2hlbiBndW56aXBwaW5nIGluZm8gZmlsZXMKIAkJZG9lc24ndCBmYWlsIHdpdGggYE5vIGNoaWxkIHByb2Nlc3NlcycgKGJlY2F1c2UKIAkJcmVhcF9jaGlsZHJlbiByZWFwZWQgaXQpLgogCUZyb206IEpvc2lwIFJvZGluIDxqcm9kaW5AcHVibGljLnNyY2UuaHI+CiAJbmpzQHVjbGluazQuYmVya2VsZXkuZWR1LCAzODA2My1mb3J3YXJkZWRAYnVncy5kZWJpYW4ub3JnCgpGcmkgSnVsICAyIDE0OjI2OjIyIDE5OTkgIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJRnJvbSBnaWxkZWE6CgkqIGluZm8vdGVybWluYWwuYyAoVElPQ0dFVEMpIFtNX1hFTklYICYmIFRJT0NHRVRDXTogI3VuZGVmLgoJKiBpbmZvL3Nlc3Npb24uYyAoc3RybmNhc2VjbXApIFtNX1hFTklYXTogZGVjbGFyZS4KClRodSBKdWwgIDEgMTk6MjU6MTIgMTk5OSAgS2FybCBCZXJyeSAgPGthcmxAZ251Lm9yZz4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKGNtX3ZhbHVlKTogZXJyb25lb3VzIGNhcGl0YWxpemF0aW9uIGluCiAJCWVycm9yIG1lc3NhZ2UuCgoJKiBtYWtlaW5mby9pbnNlcnRpb24uYyAoZW5kX2luc2VydGlvbik6IEBlbmQgaHRtbCBzaG91bGQgdHVybiBodG1sCiAJCWVzY2FwaW5nIGJhY2sgb24uIEZyb20gZXNyLgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAoY21fcHhyZWYpOiBObyBwZXJpb2QgbmVlZGVkIHRvIHRlcm1pbmF0ZQogCQljcm9zcy1yZWZlcmVuY2UuCgpTdW4gSnVuIDEzIDE2OjEyOjQxIDE5OTkgIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiBkb2MvdGV4aW5mby50eGk6IFJlbW92ZSBzb21lIG1vcmUgbm9kZSBsaW5rcy4KClNhdCBNYXkgIDEgMTY6MDE6MzYgMTk5OSAgS2FybCBCZXJyeSAgPGthcmxAZ251Lm9yZz4KCgkqIGluZm8vaW5mby5jOiBTaW5nbGUgc3BhY2UgZm9yIG9wdGlvbiBpbmRlbnQgdG8gbWF0Y2ggb3RoZXJzLgoKCSogbWFrZWluZm8vbWFrZWluZm8uYywKCSogdXRpbC90ZXhpbmRleC5jLAoJKiB1dGlsL2luc3RhbGwtaW5mby5jOiBNdXN0IGluZGVudCBvcHRpb24gbGlzdCBmb3IgaGVscDJtYW4uCgoJKiBpbmZvL2luZm9kb2MuYyBbSEVMUF9OT0RFX0dFVFNfUkVHRU5FUkFURURdOiBzZXQgdG8gdHJ1ZS4KCShpbmZvX2ludGVybmFsX2hlbHBfdGV4dCk6IHB1dCBtb3ZpbmcgY21kcyBmaXJzdCBzbyB0aGV5IGtub3cgaG93IHRvIGdvCglmb3J3YXJkIGluIHRoZSBoZWxwIHdpbmRvdy4KCShjcmVhdGVfaW50ZXJuYWxfaW5mb19oZWxwX25vZGUpOiBjYW4ndCBhbHdheXMgcXVpdCBoZWxwIHdpdGggQy14IDAuCgkoaW5mb19maW5kX29yX2NyZWF0ZV9oZWxwX3dpbmRvdyk6IHBhc3MgIW9uZV93aW5kb3dfcC4KCjE5OTktMDQtMjkgIFlvc2hpa2kgSGF5YXNoaSAgPGc3NDA2ODVAa29tYWJhLmVjYy51LXRva3lvLmFjLmpwPgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAoY21feHJlZik6IERvbid0IGNvbGxhcHNlIC0tLSB0byAtLSBldGMuLAoJaW4gcmVmZXJlbmNlcy4KCk1vbiBBcHIgMjYgMTY6NDE6NTUgMTk5OSAgS2FybCBCZXJyeSAgPGthcmxAZ251Lm9yZz4KCgkqIG1ha2VpbmZvL25vZGUuYyAodmFsaWRhdGUpOiBhcnJhbmdlIHRvIHRyYW5zbGF0ZSB0aGUgcmVmZXJlbmNlIHR5cGUuCglSZXBvcnQgZnJvbSBTZXJnaW8uCgoJKiBtYWtlaW5mby9tYWtlaW5mby5jICh2YWxpZGF0ZSk6IHNob3VsZCBub3QgYmUgZGVjbGFyZWQgaGVyZS4KCgkqIG1ha2VpbmZvL2luZGV4LmMgKGNtX3ByaW50aW5kZXgpOiA8dWwgY29tcGFjdD4gaXMgbm90CiAJCXRyYW5zbGF0YWJsZS4gIEZyb20gWW9zaGlraS4KCgkqIGRvYy9NYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IGluY2x1ZGUgbmV3IHR4aS1lcy50ZXggZnJvbSBBZHJpYW4KIAkJUGVyZXogSm9yZ2UgPGFsdTE0MTVAY3NpLnVsbC5lcz4uICBBbmQgbmV3IHR4aS1lbi50ZXguCgpTdW4gQXByIDI1IDE2OjA4OjI3IDE5OTkgIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiBtYWtlaW5mby9jbWRzLmMgKGNtX3NldHRpdGxlKTogZG9uJ3Qgb3V0cHV0IGh0bWwgaGVhZCBoZXJlLgoKCSogbWFrZWluZm8vbWFrZWluZm8uYzogTW92ZSBodG1sIHJvdXRpbmVzIHRvIGh0bWwuYy4KCSogbWFrZWluZm8vTWFrZWZpbGUuYW0gKG1ha2VpbmZvX1NPVVJDRVMpOiBhZGQgaHRtbC5bY2hdLgoJKiBtYWtlaW5mby9odG1sLltjaF06IG5ldyBmaWxlcy4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmM6IFJlc3RvcmUgLS0gaW4gLS1vdXRwdXQgbGluZS4gIEZyb20gU2VyZ2lvLgoKMTk5OS0wNC0yMyAgWW9zaGlraSBIYXlhc2hpIDxnNzQwNjg1QGtvbWFiYS5lY2MudS10b2t5by5hYy5qcD4KCgkqIG1ha2VpbmZvL2NtZHMuYyAoY21fY2VudGVyKTogUmVjb3ZlciB0aGUgcHJldmlvdXMgc3RhdGUgd2hlbgoJY2FsbGVkIHdpdGggLS1odG1sLgoKMTk5OS0wNC0yNCAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCgkqIG1ha2VpbmZvL2NtZHMuYyAoY21fYnllKTogRmx1c2ggdGhlIG91dHB1dCwgaW4gY2FzZSBzb21lIGNvbW1hbmQKCXByb2R1Y2VkIGl0IGltbWVkaWF0ZWx5IGJlZm9yZSBAYnllLgoKCSogbWFrZWluZm8vdG9jLmggKFRPQ19FTlRSWV9FTFQpOiBOZXcgbWVtYmVyOiBjb250YWluaW5nX25vZGUuCgoJKiBtYWtlaW5mby90b2MuYyAobG90c19vZl9zdGFycyk6IE5ldyB2YXJpYWJsZS4KCSh0b2NfYWRkX2VudHJ5KTogQWRkIGEgbmV3IHBhcmFtZXRlciBub2RlX25hbWU7IGFsbCBjYWxsZXJzCgljaGFuZ2VkLiAgUmVjb3JkIHRoZSBuYW1lIG9mIHRoZSBub2RlIGNvbnRhaW5pbmcgdGhlIHNlY3Rpb24uCgkodG9jX2ZpbmRfc2VjdGlvbl9vZl9ub2RlKTogTmV3IGZ1bmN0aW9uLgoJKHRvY19mcmVlKTogRnJlZSB0aGUgbmV3IGNvbnRhaW5pbmdfbm9kZSBtZW1iZXIuCgkoY29udGVudHNfdXBkYXRlX2luZm8sIHNob3J0Y29udGVudHNfdXBkYXRlX2luZm8pOiBVbmRlcmxpbmUgdGhlCgl0aXRsZSB3aXRoIHN0YXJzLiAgT3V0cHV0IHR3byBlbXB0eSBsaW5lcyBhZnRlciB0aGUgVE9DLgoJKGNvbnRlbnRzX3VwZGF0ZSk6IEZpeCBvZmYtYnktb25lIGVycm9yIGluIHdyaXRpbmcgdGhlIHJlc3Qgb2YgdGhlCglmaWxlIGFmdGVyIHVwZGF0aW5nIHRoZSBUT0MuCgoJKiBtYWtlaW5mby9pbmRleC5jIChjbV9wcmludGluZGV4KTogU2F2ZSBhbmQgcmVzdG9yZSBsaW5lX251bWJlcgoJYW5kIGlucHV0X2ZpbGVuYW1lLiAgRG9uJ3Qgb3V0cHV0IHRoZSAiKiBNZW51IiBoZWFkZXIgd2hlbgoJLS1uby1oZWFkZXJzIGlzIGluIGVmZmVjdC4gIE1ha2UgdGhlIGZha2Ugbm9kZSBuYW1lIGZvciBpbmRleAoJZW50cmllcyB0aGF0IGFyZSBvdXRzaWRlIGFueSBub2RlIGJlIG1vcmUgZXhwbGFuYXRvcnksIGFuZCBlbWl0IGFuCgllcnJvciBmb3Igc3VjaCBpbmRleCBlbnRyaWVzLiAgVW5kZXIgLS1uby1oZWFkZXJzLCBvdXRwdXQgYQoJcmVmZXJlbmNlIHRvIHRoZSBzZWN0aW9uIG5hbWUsIGFzIHJldHVybmVkIGJ5IGEgY2FsbCB0bwoJdG9jX2ZpbmRfc2VjdGlvbl9vZl9ub2RlLCBpbnN0ZWFkIG9mIGEgbm9kZSBuYW1lLgoKMTk5OS0wNC0yNCAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCgkqIG1ha2VpbmZvL2luZGV4LmMgKHN0cnVjdCBpbmRleF9lbHQpOiBBZGQgYSBuZXcgbWVtYmVyCgllbnRyeV90ZXh0LgoJKGZyZWVfaW5kZXgsIG1ha2VfaW5kZXhfZW50cmllc191bmlxdWUpOiBGcmVlIHRoZSBlbnRyeV90ZXh0CgltZW1iZXIuCgkoaW5kZXhfYWRkX2FyZyk6IERvbid0IEhUTUwtZXNjYXBlIHRoZSBpbmRleCBlbnRyeSBoZXJlLgoJKGluZGV4X2FkZF9hcmcpOiBJbml0aWFsaXplIHRoZSBlbnRyeSBtZW1iZXIgdG8gTlVMTC4gIFB1dCB0aGUKCWVudHJ5IHRleHQgaW50byB0aGUgZW50cnlfdGV4dCBtZW1iZXIuCgkoc29ydF9pbmRleCk6IEV4cGFuZCB0aGUgaW5kZXggZW50cmllcyBhcyBpZiBpbiBub24tSFRNTCBtb2RlLgoJUHV0IHRoZSBleHBhbnNpb24gaW50byB0aGUgZW50cnkgbWVtYmVyIG9mIHN0cnVjdCBpbmRleF9lbHQuCgkoY21fcHJpbnRpbmRleCk6IEFsbG9jYXRlIHRoZSBsaW5lW10gYXJyYXkgaW4gSW5mbyBtb2RlIG9ubHkuCglJbiBIVE1MIG1vZGUsIGVzY2FwZSBhbmQgZXhwYW5kIHRoZSBvcmlnaW5hbCBpbmRleCBlbnRyeSB0ZXh0LAoJZG9uJ3QgdXNlIHRoZSByZXN1bHRzIG9mIGV4cGFuc2lvbiBpbnNpZGUgc29ydF9pbmRleC4KCgkqIG1ha2VpbmZvL2NtZHMuYyAoY21fcik6IFVuZG8gdGhlIGVmZmVjdCBvZiBAY29kZSB3aGlsZSBwcmludGluZwoJb25lIG9mIHRoZSAiY29kZSItc3R5bGUgaW5kaWNlcyBpbiBIVE1MIG1vZGUuCgoxOTk5LTA0LTIzICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgoKCSogaW5mby9pbmZvbWFwLmMgKGluaXRpYWxpemVfdmlfbGlrZV9rZXltYXBzKTogQmluZCBERUwgaW4gZWNobwoJYXJlYSB0byBlYV9ydWJvdXQsIGV4Y2VwdCBmb3IgX19NU0RPU19fLgoKCSogZG9jL2luZm8tc3RuZC50ZXhpIChOb2RlIENvbW1hbmRzKTogRG9jdW1lbnQgdGhhdCBgSScgb25seQoJcHJvZHVjZXMgaXRzIGVmZmVjdCBmb3IgcHJvZ3JhbXMgZG9jdW1lbnRlZCBpbiB0aGUgY3VycmVudCBJbmZvCglmaWxlLiAgVGVsbCB0aGVtIHRvIGludm9rZSBgSScgZnJvbSBESVIgaWYgaXQgZG9lc24ndCB3b3JrIGZyb20KCWN1cnJlbnQgcGxhY2UuCgpUaHUgQXByIDIyIDA5OjU5OjAyIDE5OTkgIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiBtYWtlaW5mby9tYWtlaW5mby5jLAoJKiBpbmZvL2luZm8uYzogUmV3cml0ZSBoZWxwIHN0cmluZyBhIGxpdHRsZSBtb3JlLgoKCSogZG9jL2luZm8tc3RuZC50ZXhpOiBDaGFuZ2UgY2hhcHRlciBuYW1lIHRvIG1hdGNoIG5vZGUgbmFtZSwKCQkqIG90aGVyIGNoYW5nZXMuCgoJKiBtYWtlaW5mby9jbWRzLmMgKGNtX2J5ZSk6IGNhbGwgZGlzY2FyZF9icmFjZXMuCgoJKiBtYWtlaW5mby9jbWRzLmMgKGNtX3NldHRpdGxlKTogb3V0cHV0IG1vcmUgbWV0YSBhbmQgbGluayB0YWdzLgoKCSogY29uZmlndXJlLmluIChBTExfTElOR1VBUyk6IGFkZCBlby4KCgkqIHV0aWwvaW5zdGFsbC1pbmZvLmMgW1NUUklQX0RPVF9FWEVdOiAjaWYgbm90ICNpZmRlZgoKV2VkIEFwciAyMSAxOTo0MDo1MSAxOTk5ICBLYXJsIEJlcnJ5ICA8a2FybEBnbnUub3JnPgoKCSogbWFrZWluZm8vbWFrZWluZm8uYzogRG9jIGZpeC4KCgkqIG1ha2VpbmZvL3NlY3Rpb25pbmcuYyAoaW5zZXJ0X2FuZF91bmRlcnNjb3JlKTogZG8gbm90IG91dHB1dAogCQlodG1sIGFuY2hvciBoZXJlLgoJKiBtYWtlaW5mby9ub2RlLmMgKGNtX25vZGUpOiBkbyBhbmNob3IgYXQgbm9kZSBuYW1lIG5vdCBzZWN0aW9uaW5nCiAJCXRpdGxlLgoKCSogbWFrZWluZm8vbm9kZS5jOiBOZXdsaW5lcyBvbiBub2RlIGxpbmVzLgoKVHVlIEFwciAyMCAxMzowMjo0NiAxOTk5ICBLYXJsIEJlcnJ5ICA8a2FybEBnbnUub3JnPgoKCSogaW5mby9tYW4uYyAoZ2V0X21hbnBhZ2VfY29udGVudHMpOiBmcmVvcGVuIHN0ZGluIGFuZCBzdGRlcnIgdG8KICAgICAgICAvZGV2L251bGwgcmF0aGVyIHRoYW4gY2xvc2luZyB0aGVtLiBodHRwOi8vYnVncy5kZWJpYW4ub3JnLzE0Nzg3CgpNb24gQXByIDE5IDE0OjEyOjA5IDE5OTkgIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiBkb2MvdGV4aW5mby50eGk6IERvY3VtZW50IHBvc3NpYmlsaXR5IG9mIGB0aXRsZXBhZ2UnIHN0dWZmIGZvcgoJCXBsYWluIHRleHQgb3V0cHV0IHVzaW5nIEBpZmluZm8uCglSZXBvcnQgZnJvbTogS3VydCBIb3JuaWsgPEt1cnQuSG9ybmlrQGNpLnR1d2llbi5hYy5hdD4uCgoJKiBtYWtlaW5mby9jbWRzLmM6IFNjcmV3IHRoYXQuCgkqIGRvYy90ZXhpbmZvLnR4aTogRml4IHVwIGZyb250bWF0dGVyIGEgYml0LgoKCSogZGlyLWV4YW1wbGU6IFNwYWNlcyBub3QgdGFicy4KCSogZGlyLWV4YW1wbGUgKFIgRkFRKTogYWRkLgoKCSogbWFrZWluZm8vbWFrZWluZm8uYzogTG93ZXJjYXNlIG1ha2VpbmZvIGluIGZpcnN0IGxpbmUuCgoJKiBkb2MvaW5mby50ZXhpIChUaGUgbm9kZSByZWFjaGVkLi4uKTogaXMgYSBAc3Vic2VjdGlvbiBub3QgYQogCQlAc3Vic3ViLgoKCSogZG9jL3RleGluZm8udHhpOiBEb2N1bWVudCBvcHRpb24gcmVuYW1lLgoJKiBtYWtlaW5mby9tYWtlaW5mby5jOiBSZW5hbWUgb3B0aW9uIHRvIGNvbW1hbmRzLWluLW5vZGUtbmFtZXMuCgoJKiBtYWtlaW5mby9pbmRleC5oIChpbmRleF9jb21wYXJlX2ZuKTogZGVjbGFyZS4KCSogbWFrZWluZm8vaW5kZXguYyAoaW5kZXhfZWxlbWVudF9jb21wYXJlKTogY2FsbCB0aHJvdWdoIG5ldwogCQl2YXJpYWJsZSBpbmRleF9jb21wYXJlX2ZuLCBhbmQgc2V0IGl0IHRvIHN0cmNvbGwgaWYKCSAJQGRvY3VtZW50bGFuZ3VhZ2Ugd2FzIHVzZWQgYW5kIExBTkcgIT0gZW4uCgkgCSNpbmNsdWRlIGxhbmcuaC4KClNhdCBBcHIgMTcgMTQ6NDY6NDcgMTk5OSAgS2FybCBCZXJyeSAgPGthcmxAZ251Lm9yZz4KCgkqIG1ha2VpbmZvL2luc2VydGlvbi5jIChjdXJyZW50X2l0ZW1fZnVuY3Rpb24sIGNtX2l0ZW0pOiByZXdyaXRlCiAJCXRvIHNraXAgYWxsIGNvbmRpdGlvbmFscy4KIAkoY21faXRlbSk6IHVzZSBjdXJyZW50X2l0ZW1fZnVuY3Rpb24gcmF0aGVyIHRoYW4gY3VycmVudF9pbnNlcnRpb25fdHlwZQoJdG8gY2hlY2sgd2hhdCB0byB1c2UgZm9yIEBpdGVtLCBzbyBAaWZzZXQgZXRjLiBjYW4gYmUgdXNlZCBhcm91bmQKCQlAaXRlbXMuCglSZXBvcnQgZnJvbTogIlcuIEwuIEVzdGVzIiA8d2xlc3Rlc0BicjIwOTIwLnVuY2cuZWR1Pi4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKGN1cnJlbnRfaW5zZXJ0aW9uX3R5cGUpOiBubyBuZWVkIHRvCiAJCWRlY2xhcmUuCgoJKiBtYWtlaW5mby9tYWtlaW5mby5jOiBBZGQgZXhhbXBsZXMgdG8gaGVscCBtZXNzYWdlLgoKCSogdXRpbC90ZXhpbmRleC5jICh1c2FnZSk6IFJlYXJyYW5nZSAtLWhlbHAsIGF2b2lkIGV4dHJhIG5ld2xpbmUuCgoJKiBpbmZvL2luZm8uYzogU29ydCAtLWhlbHAgaW4gdGhlIHVzdWFsIHBsYWNlLgoKCSogbWFrZWluZm8vbWFrZWluZm8uYzogUmVpbmRlbnQgaGVscCBtZXNzYWdlLCByZW5hbWUKCSAgICAgICAtLWV4cGVuc2l2ZS12YWxpZGF0aW9uIHRvIC0tY29tbWFuZHMtaW4tbm9kZXMuCgpGcmkgQXByIDE2IDE3OjUzOjQ4IDE5OTkgIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiBtYWtlaW5mby9jbWRzLmMgKGNtX2lnbm9yZV9hcmcpOiBuZXcgcm91dGluZS4KCShjbV9pZ25vcmVfbGluZV9ub19vcCk6IHJlbW92ZSwgY2FuIHVzZSBjbV9pZ25vcmVfbGluZS4KClR1ZSBBcHIgMTMgMTY6NDU6MzkgMTk5OSAgS2FybCBCZXJyeSAgPGthcmxAZ251Lm9yZz4KCgkqIGRvYy9pbmZvLXN0bmQudGV4aTogRnJvbnRtYXR0ZXIgY2hhbmdlcy4KCgkqIGRvYy9pbmZvLnRleGk6IFJlbW92ZSBhZHZhbmNlZCByZW1hcmsgaW4gZmlyc3Qgbm9kZS4KCgkqIGRvYy90ZXhpbmZvLnR4aTogVGV4aW5mby50ZXggZG9lcyBtYWNyb3Mgbm93LiBGcm9tIEVsaS4KCgkqIGRvYy90ZXhpbmZvLnR4aTogRG9jdW1lbnQgQHd7IH0gdG8gcHJvZHVjZSBhbiB1bmJyZWFrYWJsZSBzcGFjZS4KCgkqIHV0aWwvdGV4aTJkdmk6IFVwZGF0ZSBmcm9tIEFraW0sIGF2b2lkIFNvbGFyaXMgdWNiIGVjaG8gd2VpcmRuZXNzLgoKCSogaW5mby9pbmZvZG9jLmM6IFBhcmVudGhlc2l6ZSBmdW5jdGlvbiBjYWxscywgZG9uJ3QgZGVwZW5kIG9uCiAJCWdldHRleHQgYmVpbmcgdGhlcmUuICBSZXBvcnQgZnJvbTogRG91ZyBTZW1sZXIKIAkJPGRvdWdAc2Vhc3BhY2UuY29tPi4KCjE5OTktMDQtMTIgIEVsaSBaYXJldHNraWkgIDxlbGl6QGlzLmVsdGEuY28uaWw+CgoJKiBpbmZvL2luZm9tYXAuYyAoaW5pdGlhbGl6ZV92aV9saWtlX2tleW1hcHMpOiBJbml0aWFsaXplIHRoZSBlY2hvCglhcmUga2V5bWFwICpiZWZvcmUqIGl0IGlzIGZpbGxlZCB1cCB3aXRoIGtleXMuCgoxOTk5LTA0LTEwICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgoKCSogbWFrZWluZm8vbWFjcm8uYyAoZXhlY3V0ZV9tYWNybyk6IFJlc2V0IHRoZSBsaW5lIG51bWJlciB0byB3aGVyZQoJdGhlIG1hY3JvIGFyZ3VtZW5zdCBiZWdpbiwgYmVmb3JlIGV4ZWN1dGluZyBpdHMgZXhwYW5zaW9uLgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAoY21feHJlZik6IEV4cGFuZCB0aGUgbmFtZSBvZiBhcmd1bWVudHMKCWJlZm9yZSB3cml0aW5nIHRoZW0gaW4gSFRNTCBtb2RlLgoJKGhhbmRsZV9tZW51X2VudHJ5KTogRXhwYW5kIHRoZSBuYW1lIG9mIHRoZSBnbGVhbmVkIG5vZGUgYmVmb3JlCgl3cml0aW5nIGl0IGluIEhUTUwgbW9kZS4KCgkqIG1ha2VpbmZvL3NlY3Rpb25pbmcuYyAoc2VjdGlvbmluZ19odG1sKTogRXhwYW5kIHRoZSBuYW1lIG9mIHRoZQoJY3VycmVudCBub2RlIHdoZW4gcHJvZHVjaW5nIHRoZSA8YSBuYW1lPS4uLiBhbmNob3IuCgoJKiBtYWtlaW5mby9ub2RlLmMgKGNtX25vZGUpOiBFeHBhbmQgdGhlIG5hbWUgb2Ygbm9kZSBhbmQgaXRzIGxpbmtzCgliZWZvcmUgb3V0cHV0dGluZyB0aGVtIGluIEhUTUwgbW9kZS4KCgkqIG1ha2VpbmZvL2luZGV4LmMgKGNtX3ByaW50aW5kZXgpOiBFeHBhbmQgbm9kZSBuYW1lcyB0byB3aGljaCB0aGUKCWluZGV4IHBvaW50cy4KCgkqIG1ha2VpbmZvL2Zvb3Rub3RlLmMgKGNtX2Zvb3Rub3RlKTogQ2FsbCBleGVjdXRlX3N0cmluZyBpbnN0ZWFkCglvZiBhZGRfd29yZF9hcmdzLCBzaW5jZSBjdXJyZW50X25vZGUgbmVlZHMgdG8gYmUgZXhwYW5kZWQuICBFeHBhbmQKCXRoZSBuYW1lIG9mIHRoZSBGb290bm90ZXMgbm9kZSBiZWZvcmUgY2FsbGluZwoJcmVtZW1iZXJfbm9kZV9yZWZlcmVuY2UuCgoJKiBtYWtlaW5mby90ZXN0cy9ub2RlLWV4cGFuZC50eGk6IE5ldyB0ZXN0LCBmb3IgdGVzdGluZyBob3cgbm9kZQoJbmFtZXMgYXJlIGV4cGFuZGVkIGluIEBub2RlLCBAbWVudSwgY3Jvc3MtcmVmZXJlbmNlcywgYW5kCglpbmRpY2VzLgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAoYWRkX2NoYXIpOiBJZiB3ZSBvdXRwdXQgPHA+LCBhZGp1c3QgdGhlCglhZmZlY3RlZCBicmFjZSBwb3NpdGlvbnMgYnkgMywgc28gY21feHh4IGZ1bmN0aW9ucyBnZXQgd2hhdCB0aGV5CglleHBlY3QgaW4gU1RBUlQgYW5kIEVORC4KCShpbnNlcnRfaHRtbF90YWcpOiBMaWtld2lzZS4KCgkqIG1ha2VpbmZvL2NtZHMuYyAoY21fc2MpOiBSZW1vdmUgdGhlIGtsdWRnZSB0aGF0IGxvb2tzIGZvciB0aGUKCWJlZ2lubmluZyBvZiA8c21hbGw+LCBpdCBpcyBubyBsb25nZXIgbmVlZGVkLgoKCSogbWFrZWluZm8vbWFjcm8uYyAoY21fZGVmaW5mb2VuY2xvc2UpOiBEb24ndCBzdG9wIGF0IHRoZSBmaXJzdAoJYmxhbmsgYWZ0ZXIgdGhlIHNlY29uZCBjb21tYTogdGhlIGJsYW5rIG1heSBiZWxvbmcgdG8gdGhlIHNlY29uZAoJZGVsaW1pdGVyLgoKCSogbWFrZWluZm8vdGVzdHMvaHRtbHBhcmEudHhpOiBOZXcgdGVzdCwgZm9yIHRoZSBjb21tYW5kcyBhZmZlY3RlZAoJYnkgdGhlIDxwPiBvdXRwdXQgYXQgcGFyYWdyYXBoIGJlZ2lubmluZy4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmggKGV4cGVuc2l2ZV92YWxpZGF0aW9uKTogTmV3IG9wdGlvbi4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKGxvbmdfb3B0aW9ucyk6IEFkZCBleHBlbnNpdmVfdmFsaWRhdGlvbi4KCSh1c2FnZSk6IExpa2V3aXNlLgoKCSogbWFrZWluZm8vbm9kZS5jIChmaW5kX25vZGUpOiBJZiBOQU1FIGlzbid0IGZvdW5kIHZlcmJhdGltLCB0cnkKCWV4cGFuZGluZyBpdCBhbmQgZXZlcnkgbm9kZSBuYW1lIGluIHRhZyB0YWJsZSwgYmVmb3JlIGNvbXBhcmluZwoJdGhlbSwgYnV0IG9ubHkgaWYgZXhwZW5zaXZlX3ZhbGlkYXRpb24gaXMgbm9uLXplcm8uCgkoZmluZF9ub2RlX3JlZmVyZW5jZSk6IExpa2V3aXNlLgoJKGNtX25vZGUpOiBEb24ndCBleHBhbmQgbm9kZSBuYW1lIGFuZCBpdHMgbGlua3MgaGVyZS4KCSh2YWxpZGF0ZV9maWxlKTogSWYgZGlyZWN0IGNvbXBhcmlzb25zIGZhaWwsIHRyeSBleHBhbmRpbmcgdGhlCgljb21wYXJlZXMgYmVmb3JlIGdpdmluZyB1cCwgdW5sZXNzIGV4cGVuc2l2ZV92YWxpZGF0aW9uIGlzIHplcm8uCglTd2l0Y2ggdGhlIG9yZGVyIG9mIE5PREUgYW5kIFVQIGluIGVycm9yIG1lc3NhZ2UgYWJvdXQgYSBsYWNraW5nCgltZW51IGl0ZW0uCgoxOTk5LTA0LTA3ICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgoKCSogbWFrZWluZm8vaW5kZXguYyAoY21fcHJpbnRpbmRleCk6IERvbid0IG91dHB1dCAiTWVudSIgaGVhZGVyLgoKCSogbWFrZWluZm8vbm9kZS5jIChnZXRfbm9kZV90b2tlbik6IENvbGxhcHNlIHdoaXRlc3BhY2UgaW4gbm9kZQoJbmFtZXMuCgkoZ2xlYW5fbm9kZV9mcm9tX21lbnUsIGV4cGFuZF9ub2RlX25hbWUpOiBMaWtld2lzZS4KCgkqIGluZm8vaW5mb21hcC5jIChpbml0aWFsaXplX3ZpX2xpa2Vfa2V5bWFwcyk6IEJpbmQgYWxsIHRoZSAyNTYKCWtleXMgdG8gZWFfaW5zZXJ0LCBsaWtlIHRoZSBFbWFjcy1saWtlIGNhc2UgZG9lcy4KCgkqIGRvYy9pbmZvLXN0bmQudGV4aSAoSW52b2tpbmcgSW5mbyk6IERvY3VtZW50IHN1cHBvcnQgZm9yIGZpbGVzCgljb21wZXNzZWQgd2l0aCBiemlwMiwgYW5kIHRoZSAtLXZpLWtleXMgb3B0aW9uLgoJKE1hbnkgcGxhY2VzKTogRG9jdW1lbnQga2V5IGJpbmRpbmdzIHVuZGVyIC0tdmkta2V5cy4KCjE5OTktMDQtMDYgIEVsaSBaYXJldHNraWkgIDxlbGl6QGlzLmVsdGEuY28uaWw+CgoJKiBpbmZvL3Nlc3Npb24uYyAoaW5mb19sYXN0X25vZGUsIGluZm9fZmlyc3Rfbm9kZSk6IFdpdGggYSBudW1lcmljCglhcmd1bWVudCwgZ28gdG8gQVJHdGggbm9kZSBjb3VudGluZyBmcm9tIHRoZSBiZWdpbm5pbmcuICBTa2lwCglhbmNob3IgdGFncyB3aGVuIGxvb2tpbmcgZm9yIHRoZSB0YXJnZXQgbm9kZS0tdGhlIGxhc3QgdGFnIGNhbiBiZQoJYW4gYW5jaG9yLCBmb3IgZXhhbXBsZS4KCShsYXN0X3NlYXJjaF9kaXJlY3Rpb24sIGxhc3Rfc2VhcmNoX2Nhc2Vfc2Vuc2l0aXZlKTogTmV3Cgl2YXJpYWJsZXMuCgkobGFzdF9zZWFyY2hfZm9yX3N0cmluZyk6IFJlbW92ZSB2YXJpYWJsZS4KCShpbmZvX3NlYXJjaF9pbnRlcm5hbCk6IEFsd2F5cyBtb3ZlIHBvaW50IGJ5IG9uZSBub3RjaCBiZWZvcmUKCWJlZ2lubmluZyB0aGUgc2VhcmNoLCB0byBhdm9pZCBjb21wbGljYXRpb25zIGluIHJlcGVhdGVkIHNlYXJjaAoJY29tbWFuZHMuICBXaGVuIGxvb2tpbmcgZm9yIHRoZSBuZXh0IG5vZGUgdGFnLCBza2lwIGFueSBhbmNob3IKCXRhZ3MuCgkoaW5mb19zZWFyY2hfMSk6IEFjY2VwdCBhIDV0aCBhcmd1bWVudCBBU0tfRk9SX1NUUklORywgYW5kIG9ubHkKCXByb21wdCBmb3Igc2VhcmNoIHN0cmluZyBpZiBpdCdzIG5vbi16ZXJvLiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4KCUxvb2sgZm9yIHRoZSBDT1VOVHRoIG9jY3VyZW5jZSBvZiB0aGUgc3RyaW5nLgoJKGluZm9fc2VhcmNoLCBpbmZvX3NlYXJjaF9iYWNrd2FyZCwgaW5mb19zZWFyY2hfY2FzZV9zZW5zaXRpdmVseSk6CglTZXQgbGFzdF9zZWFyY2hfZGlyZWN0aW9uIGFuZCBsYXN0X3NlYXJjaF9jYXNlX3NlbnNpdGl2ZS4KCShpbmZvX3NlYXJjaF9uZXh0LCBpbmZvX3NlYXJjaF9wcmV2aW91cyk6IE5ldyBjb21tYW5kcywgcmVwZWF0CglsYXN0IHNlYXJjaCBpbiB0aGUgc2FtZSBvciByZXZlcnNlIGRpcmVjdGlvbiB3aXRob3V0IHByb21wdGluZyB0aGUKCXVzZXIgZm9yIHRoZSBzdHJpbmcuCgoJKiBpbmZvL2luZm9tYXAuYyAoaW5pdGlhbGl6ZV9lbWFjc19saWtlX2tleW1hcHMpOiBCaW5kIGBDLXggbicgdG8KCWluZm9fc2VhcmNoX25leHQgYW5kIGBDLXggTicgdG8gaW5mb19zZWFyY2hfcHJldmlvdXMuCgkoaW5pdGlhbGl6ZV92aV9saWtlX2tleW1hcHMpOiBCaW5kIGBuJyB0byBpbmZvX3NlYXJjaF9uZXh0IGFuZCBgTicKCXRvIGluZm9fc2VhcmNoX3ByZXZpb3VzLgoKMTk5OS0wNC0wNCAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKGdldF9yZXN0X29mX2xpbmUpOiBEb24ndCBleHBhbmQgbm9uLW1hY3JvcywKCXNvIHRoYXQgbWFjcm8tZXhwYW5kZWQgb3V0cHV0IHdpbGwgc3RpbGwgaGF2ZSB0aGVtLgoKMTk5OS0wNC0wMyAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCgkqIG1ha2VpbmZvL25vZGUuYyAoY21fbm9kZSk6IEV4cGFuZCB0aGUgbm9kZSBuYW1lIGFuZCBpdHMgbGlua3MKCWNvbXBsZXRlbHkgYmVmb3JlIHVzaW5nIHRoZW0sIHNvIHRoYXQgdGhleSBjb3VsZCB1c2UgZS5nLiBAdmFsdWV7fQoJZXRjLgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAocmVwbGFjZV93aXRoX2V4cGFuc2lvbik6IERvbid0CglyZW1lbWJlcl9pdGV4dCBpZiB3ZSBhcmUgZXhlY3V0aW5nX3N0cmluZy4KCgkqIG1ha2VpbmZvL3NlY3Rpb25pbmcuYyAoc2VjdGlvbmluZ19odG1sKTogUmVtb3ZlICNpZmRlZgoJSEFWRV9NQUNST1MuICBEb24ndCBjYWxsIG1lX2V4ZWN1dGVfc3RyaW5nIGlmIGFscmVhZHkKCWV4ZWN1dGluZ19zdHJpbmcuCgoJKiBtYWtlaW5mby90b2MuYyAodG9jX2FkZF9lbnRyeSk6IEV4cGFuZCBtYWNyb3MgaW4gVE9DTkFNRSByaWdodAoJaGVyZSwgc2luY2UgdGhlIG1hY3JvIGNhbiBiZSBsYXRlciByZWRlZmluZWQuCgkoY29udGVudHNfdXBkYXRlX2h0bWwsIGNvbnRlbnRzX3VwZGF0ZV9pbmZvLAoJc2hvcnRjb250ZW50c191cGRhdGVfaHRtbCwgc2hvcnRjb250ZW50c191cGRhdGVfaW5mbyk6IFVzZSBzdGRpbwoJZnVuY3Rpb25zIGZvciBvdXRwdXQgaW5zdGVhZCBvZiBhZGRfd29yZCBldGMuCgkocmV3cml0ZV90b3AsIGNvbnRlbnRzX3VwZGF0ZSwgc2hvcnRjb250ZW50c191cGRhdGUsIHRvY191cGRhdGUpOgoJTmV3IGZ1bmN0aW9ucywgcmVwbGFjZSB0aGUgVE9DIHBsYWNlYm8gd2l0aCB0aGUgYWN0dWFsIFRPQy4KCShjbV9jb250ZW50cyk6IE91dHB1dCBhIHBsYWNlYm8gaW5zdGVhZCBvZiB3cml0aW5nIHRoZSBUT0MuCgkoY21fc2hvcnRjb250ZW50cyk6IE91dHB1dCBhIHBsYWNlYm8gaW5zdGVhZCBvZiB3cml0aW5nIHRoZSBzaG9ydAoJVE9DLgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAoY29udmVydF9mcm9tX2xvYWRlZF9maWxlKTogQ2FsbCB0b2NfdXBkYXRlCglpZiBhcHByb3ByaWF0ZS4KCgkqIG1ha2VpbmZvL3NlY3Rpb25pbmcuYyAoY21fdG9wKTogRG9uJ3Qgb3V0cHV0IHRoZSBIVE1MIGhlYWRlcgoJaGVyZSwgc2luY2UgdGhlIFRvcCBub2RlIG1pZ2h0IGJlIHByZWNlZWRlZCBieSBvdGhlciBjb21tYW5kcywKCWxpa2UgQGNvbnRlbnRzLgoKCSogbWFrZWluZm8vY21kcy5jIChjbV9zZXR0aXRsZSk6IE91dHB1dCB0aGUgSFRNTCBoZWFkZXIgaGVyZS4KCgkqIG1ha2VpbmZvL25vZGUuYyAoc2V0X2N1cnJlbnRfb3V0cHV0X2ZpbGVuYW1lKTogTmV3IGZ1bmN0aW9uLAoJc2F2ZXMgdGhlIG5hbWUgb2YgdGhlIGFjdHVhbCBmaWxlIHdlIGFyZSBub3cgd3JpdGluZywgaW5jbHVkaW5nIGluCgl0aGUgY2FzZSBvZiBzcGxpdC1IVE1MIG91dHB1dC4KCShjbV9ub2RlKTogQ2FsbCBpdCB0byByZWNvcmQgdGhlIG5hbWUgb2Ygb3V0cHV0IGZpbGUuCgoJKiBtYWtlaW5mby9mb290bm90ZS5jIChmcmVlX3BlbmRpbmdfbm90ZXMpOiBSZS1pbml0aWFsaXplCgljdXJyZW50X2Zvb3Rub3RlX251bWJlciB0byAxLgoKCSogbWFrZWluZm8vaW5kZXguYyAoaW5kZXhfYWRkX2FyZyk6IFJlbW92ZSByZWR1bmRhbnQgeHN0cmR1cC4KCShjbV9wcmludGluZGV4KTogRG9uJ3QgZnJlZSBpbmRleC0+ZW50cnk6IGl0IGlzIGZyZWVkIGluCglmcmVlX2luZGV4LCBpZiwgZS5nLiwgdGhlcmUncyBtb3JlIHRoYW4gb25lIGZpbGUgdG8gY29udmVydC4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKGluaXRfaW50ZXJuYWxzKTogQ2FsbCB0b2NfZnJlZS4KCk1vbiBBcHIgIDUgMTY6NTM6MzMgMTk5OSAgS2FybCBCZXJyeSAgPGthcmxAZ251Lm9yZz4KCgkqIGRvYy9NYWtlZmlsZS5hbTogVGV4bWZfe3RleGluZm8sZHZpcHN9OiBkaXJzIG5vdCBmaWxlcy4gIEZyb20KIAkJS3VydCBIb3JuaWsuCgpXZWQgTWFyIDMxIDEzOjUwOjA5IDE5OTkgIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiBQcmV0ZXN0IDMuMTJoLgoKCSogbWFrZWluZm8vbm9kZS5jIChsYXN0X25vZGVfcCk6IG5ldyBmbi4KCShzcGxpdF9maWxlKTogY2FsbCBpdCwgaW5zdGVhZCBvZiBhc3N1bWluZyBubyBtb3JlIGVudHJpZXMgbWVhbnMKCQlubyBtb3JlIG5vZGVzLiAgKExvc2VzIHdpdGggYW5jaG9ycy4pCglSZXBvcnQgZnJvbTogIk9sZWcgUy4gVGlob25vdiIgPG9zdEBiZW5ldG5hc2guZmZrZS1jYW1wdXMubWlwdC5ydT4uCgoJKiBtYWtlaW5mby9pbmRleC5jIChzb3J0X2luZGV4KTogd2hldGhlciBhbiBlbnRyeSBpcyBAY29kZSBvciBub3QKCQlkZXBlbmRzIG9uIHRoZSBlbGVtZW50LCBub3QgdGhlIGluZGV4LCBiZWNhdXNlIG9mIHN5bmluZGV4LgoKCSogZG9jL01ha2VmaWxlLmFtIChpbnN0YWxsLXRleCk6IE11c3QgdXNlICQoVEVYTUYpLCBkbwoJCSQobWtpbnN0YWxsZGlycykgb24gdGV4IGRpcnMuCglGcm9tOiBOYXRoYW4gU2lkd2VsbCA8bmF0aGFuQGFjbS5vcmc+LgoKCSogZG9jL3RleGluZm8udHhpOiBEb2N1bWVudCBuZWVkIGZvciBibGFuayBsaW5lIGJlZm9yZSBAaW1hZ2UgaWYKIAkJeW91IHdhbnQgc3BhY2UuCgoJKiBJbnN0YWxsIGNoYW5nZXMgZnJvbSBFbGk6CgoJMTk5OS0wMy0wOSAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCgkqIGluZm8vaW5mb2RvYy5jIChpbmZvX2ludGVybmFsX2hlbHBfdGV4dCk6IFJlbW92ZSBoYXJkLXdpcmVkIGtleQoJbmFtZXMsIHVzZSAlLTEwcyBpbnN0ZWFkLgoJKGluZm9faGVscF9rZXlzX3RleHQpOiBOZXcgdmFyaWFibGUsIGhvbGRzIHR3byB2YXJpYW50cyBvZiBrZXlzCgl0aGF0IGludm9rZSBiYXNpYyBjb21tYW5kcywgaW5kZXhlZCBieSB2aV9rZXlzX3AuCgkoY3JlYXRlX2ludGVybmFsX2luZm9faGVscF9ub2RlKTogVXNlIGluZm9faGVscF9rZXlzX3RleHRbXS4KCgkqIGluZm8vd2luZG93LmMgKGJ1aWxkX21lc3NhZ2VfYnVmZmVyKTogU3VwcG9ydCBtb3JlIGdlbmVyYWwKCWZvcm1hdCBzdHJpbmdzLCBsaWtlICUtMTAuMTVzLCAlKzRkIGV0Yy4KCgkqIGluZm8vaW5mb21hcC5jIChpbml0aWFsaXplX3ZpX2xpa2Vfa2V5bWFwcyk6IEJpbmQgRVNDLWgsIEVTQy10LAoJQy14IExGRCBhbmQgQy14IFJFVC4KCgkxOTk5LTAzLTA4ICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgoKCSogdXRpbC9pbnN0YWxsLWluZm8uYyAob3V0cHV0X2RpcmZpbGUpOiBTb3J0IHRoZSBlbnRyaWVzIGFuZAoJb3V0cHV0IHRoZW0gaW4gYWxwaGFiZXRpYyBvcmRlci4gIE91dHB1dCBlYWNoIGVudHJ5IG9ubHkgaW4gdGhvc2UKCXNlY3Rpb25zIHdoZXJlIGl0IGJlbG9uZ3MuCgkocGFyc2VfaW5wdXQpOiBOZXcgZnVuY3Rpb24sIGNvZGUgbW92ZWQgZnJvbSBtYWluLiAgUHJvY2VzcwoJc2VjdGlvbnMgYW5kIGVudHJpZXMgaW4gYSBzaW5nbGUgbG9vcCwgYW5kIHJlY29yZCB3aXRoIGVhY2ggZW50cnkKCXRoZSBsaXN0IG9mIHNlY3Rpb25zIHdoZXJlIHRoYXQgZW50cnkgYmVsb25ncy4gIFJlY29yZCBlYWNoIGVudHJ5CglzZXBhcmF0ZWx5LCBub3QgYWxsIG9mIHRoZW0gdG9nZXRoZXIgYXMgYSBzaW5nbGUgYmxvY2suCgkocGFyc2VfZGlyX2ZpbGUpOiBOZXcgZnVuY3Rpb24sIGNvZGUgbW92ZWQgZnJvbSBtYWluLgoJKG1haW4pOiBNb3ZlIGNvZGUgdG8gcGFyc2VfaW5wdXQgYW5kIHBhcnNlX2Rpcl9maWxlLiAgUHV0IHRoZSBuZXcKCWVudHJpZXMgb25seSBpbnRvIHNlY3Rpb25zIHdoZXJlIHRoZXkgYmVsb25nLgoJKGNvbXBhcmVfZW50cmllc190ZXh0KTogTmV3IGZ1bmN0aW9uLCBjYWxsZWQgd2hlbiBzb3J0aW5nIG5ldwoJZW50cmllcy4KCgkqIGluZm8vaW5mb21hcC5jIChpbml0aWFsaXplX3ZpX2xpa2Vfa2V5bWFwcyk6IE5ldyBmdW5jdGlvbi4gIEJpbmQKCWtleXMgYS1sYSBMZXNzLCBpbmNsdWRpbmcgbmV3IGZ1bmN0aW9ucyBmcm9tIHNlc3Npb24uYyBiZWxvdy4KCShpbml0aWFsaXplX2VtYWNzX2xpa2Vfa2V5bWFwcyk6IE5ldyBmdW5jdGlvbiwgd2l0aCB0aGUgZ3V0cyBvZgoJaW5pdGlhbGl6ZV9pbmZvX2tleW1hcHMuCgoJKiBpbmZvL3Nlc3Npb24uYyAoaW5mb19zY3JvbGxfZm9yd2FyZCwgaW5mb19zY3JvbGxfYmFja3dhcmQpOiBJZgoJZGVmYXVsdF93aW5kb3dfc2l6ZSBpcyBub24tbmVnYXRpdmUsIHVzZSBpdCBhcyB0aGUgZGVmYXVsdCBudW1iZXIKCW9mIGxpbmVzIHRvIHNjcm9sbC4KCShpbmZvX3Njcm9sbF9mb3J3YXJkX3NldF93aW5kb3csIGluZm9fc2Nyb2xsX2JhY2t3YXJkX3NldF93aW5kb3csCglpbmZvX2Rvd25fbGluZSwgaW5mb191cF9saW5lLCBpbmZvX3Njcm9sbF9oYWxmX3NjcmVlbl9kb3duLAoJaW5mb19zY3JvbGxfaGFsZl9zY3JlZW5fdXAsIGluZm9fc2VhcmNoX2JhY2t3YXJkKTogTmV3IGZ1bmN0aW9ucywKCWZvciBMZXNzLWxpa2UgbG9vayBhbmQgZmVlbC4KClR1ZSBNYXIgMzAgMTY6NDQ6NTMgVVRDIDE5OTkgS2FybCBIZWlueiBNYXJiYWlzZSA8a2FtYUBoaXBwby5maWRvLmRlPgoKICAgICAgICAqIGRvYy90eGktZGUudGV4OgogICAgICAgICAgICAtIGFkZGVkIGFkZGl0aW9uYWwgcHV0d29yZGluCiAgICAgICAgKiBkb2MvdGV4aW5mby50eGk6CiAgICAgICAgICAgIC0gY2hhbmdlZCBkZWZpdmFyIGludG8gZGVmdHlwZWl2YXIKICAgICAgICAqIG1ha2VpbmZvL3NlY3Rpb25pbmcuYzoKICAgICAgICAgICAgLSBjaGFuZ2VkIG91dHB1dCBvZiBhbmNob3JzIGJhc2VkIG9uIHByb2JsZW1zIHdpdGggaWUuCiAgICAgICAgKiBtYWtlaW5mby9kZWZ1bi5jOgogICAgICAgICAgICAtIG91dHB1dCBpbiBIVE1MIG1vZGUgY2hhbmdlZCB0byBiZSBvbiBwcmV2aW91cyBzdGF0ZS4KICAgICAgICAqIG1ha2VpbmZvL2luc2VydGlvbi5jOgogICAgICAgICAgICAtIGZpeGVkIHVwIEhUTUwgb3V0cHV0IGZvciBkZWZ0eXBlaXZhci4KCjE5OTktMDMtMzAgIEFraW0gRGVtYWlsbGUgIDxkZW1haWxsZUBpbmYuZW5zdC5mcj4KCiAgICAgICAgKiB0ZXhpMmR2aSAoJHRtcGRpcik6IEF2b2lkIHNlY3VyaXR5IGhvbGVzLgoKRnJpIE1hciAyNiAxNzowNjo1NSAxOTk5ICBLYXJsIEJlcnJ5ICA8a2FybEBnbnUub3JnPgoKCSogbWFrZWluZm8vY21kcy5jIChjbV9leGRlbnQpOiByZXdyaXRlIHRvIHByZXNlcnZlIGJsYW5rIGxpbmVzLgoJQnVnIGZyb206ICJPbGVnIFMuIFRpaG9ub3YiIDxvc3RAYmVuZXRuYXNoLmZma2UtY2FtcHVzLm1pcHQucnU+LgoKCSogbWFrZWluZm8vY21kcy5jIChjbV9leGRlbnQpOiBhcmcgaXMgaW4gYHJvbWFuJy4KClRodSBNYXIgMjUgMTY6MjE6MjcgMTk5OSAgS2FybCBCZXJyeSAgPGthcmxAZ251Lm9yZz4KCgkqIG1ha2VpbmZvL2luc2VydGlvbi5jLAoJKiBtYWtlaW5mby9kZWZ1bi5jLAoJKiBtYWtlaW5mby9pbnNlcnRpb24uaCAoaW5zZXJ0aW9uX3R5cGUpOiBhZGQgZGVmdHlwZWl2YXIuCgkqIG1ha2VpbmZvL2RlZnVuLmggKGNtX2RlZnVuKTogZGVjbGFyZSBoZXJlLgoJKiBtYWtlaW5mby9jbWRzLmMgKGRlZnVuLmgpOiBpbmNsdWRlLgoJKiBkb2MvdGV4aW5mby50eGkgKGRlZnR5cGVpdmFyW3hdKTogbmV3IGNvbW1hbmRzLgoJKiBtYWtlaW5mby9jbWRzLmMgKGRlZnR5cGVpdmFyW3hdKTogbmV3IGNvbW1hbmRzLgoKCSogbWFrZWluZm8vY21kcy5jIChjbV9leGRlbnQpOiBzYXZlLCBzZXQgYW5kIHJlc3RvcmUKIAkJaW5fZml4ZWRfd2lkdGhfZm9udC4KCgkqIGRvYy90ZXhpbmZvLnR4aSAodXJlZik6IHJld3JpdGUuCgoJKiBpbmZvL2luZm8uYyAoaW5mb19zaG9ydF9oZWxwKTogbW9yZSBzcGFjZXMgZm9yIG5ldyBoZWxwMm1hbi4KCgkqIG1ha2VpbmZvL25vZGUuYyAoY21fbm9kZSk6IG91dHB1dCBub2RlIG5hbWUgaW4gaHRtbCwgY2hhbmdlCiAJCW5hdmJhciBwdW5jdHVhdGlvbi4KCgkqIGRvYy90ZXhpbmZvLjU6IEZpeCBVUkwuCgoJKiBGaW5hbGx5IGluc3RhbGxlZCB0aGlzOgoJMTk5OC0wNS0wMSAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uaW5mb3JtYXRpay51bmktZG9ydG11bmQuZGU+CgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKGNvbnZlcnRfZnJvbV9sb2FkZWRfZmlsZSk6IFdoZW4gdGhlIGZpbGUKCWNvbnRhaW5zIG5vIEBzZXRmaWxlbmFtZSB0aGVuIGFsd2F5cyBsb29rIGZvciBcaW5wdXQgKG5vdAoJXGluY2x1ZGUpIGluIHRoZSBmaXJzdCBsaW5lIGFuZCBza2lwIHRoYXQuICBEb24ndCBza2lwIHRoZSBmaXJzdAoJbGluZSBpZiBubyBcaW5wdXQgd2FzIGZvdW5kLgoKMTk5OS0wMy0yNCAgQWtpbSBEZW1haWxsZSAgPGRlbWFpbGxlQGluZi5lbnN0LmZyPgoKCSogY29uZmlndXJlLmluIChBQ19IRUFERVJfU1RBVCk6IEFkZGVkLgoJKiB1dGlsL3RleGluZGV4LmMgKG1haW4pOiBDaGVjayBpbmZpbGVzIGFyZSBub3QgZGlyZWN0b3JpZXMuCgoxOTk5LTAzLTI0ICBBa2ltIERlbWFpbGxlICA8ZGVtYWlsbGVAaW5mLmVuc3QuZnI+CgoJKiB0ZXhpMmR2aSAoaW5kZXhfZmlsZXMpOiBEb24ndCB1c2UgYCEnIHRvIHJ1biBzZWQgLWUgInMhZm9vJCEhIgogICAgICAgIHNpbmNlIHRoZSBzaGVsbCB3aWxsIGludGVycHJldCBgJCEnLgoKVHVlIE1hciAyMyAxNjo0MTowOCAxOTk5ICBLYXJsIEJlcnJ5ICA8a2FybEBnbnUub3JnPgoKCSogZG9jL3RleGluZm8udHhpICh1cmVmKTogcmV3cml0ZSB0byBtYWtlIEhUTUwgb3V0cHV0IHJlYWQgbW9yZQogCQluaWNlbHkuICBGcm9tIFRpbSBTLgoKCSogaW5mby9pbmZvLmMgKGluZm9fc2hvcnRfaGVscCk6IGluY2x1ZGUgZXhhbXBsZXMuCgoJKiBtYWtlaW5mby9tYWtlaW5mby5jIChjbG9zZV9wYXJhZ3JhcGhfd2l0aF9saW5lcyk6IG1vdmUgZWFybGllcgogCQlzbyBjYW4gYmUgc3RhdGljLgoKCSogbWFrZWluZm8vc2VjdGlvbmluZy5jLAoJKiBtYWtlaW5mby9ub2RlLmMsCgkqIG1ha2VpbmZvL21ha2VpbmZvLmgsCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMsCgkqIG1ha2VpbmZvL21hY3JvLmMsCgkqIG1ha2VpbmZvL2luc2VydGlvbi5jLAoJKiBtYWtlaW5mby9jbWRzLmMsCgkqIG1ha2VpbmZvL2ZpbGVzLmMsCgkqIG1ha2VpbmZvL2Zvb3Rub3RlLmMgKHNpemVfb2ZfaW5wdXRfdGV4dCk6IHJlbmFtZSB0bwogCQlpbnB1dF90ZXh0X2xlbmd0aC4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKGNtX3hyZWYpOiBtYWtlIHdyb25nLWNoYXItZm9sbG93aW5nIGEgd2FybmluZy4KIAkocmVwbGFjZV93aXRoX2V4cGFuc2lvbik6IHJlbW92ZSBib2d1cyBjb25kaXRpb25hbCB0aGF0IHdhcyBkdXBsaWNhdGVkCgl1bmNvbmRpdGlvbmFsbHkuCglGcm9tOiBIYW5zLUJlcm5oYXJkIEJyb2VrZXIgPGJyb2VrZXJAcGh5c2lrLnJ3dGgtYWFjaGVuLmRlPgoKTW9uIE1hciAyMiAxNDozOTo1OSAxOTk5ICBLYXJsIEJlcnJ5ICA8a2FybEBnbnUub3JnPgoKCSogZG9jL01ha2VmaWxlLmFtIChpbnN0YWxsLXRleCk6IHBhcmVudGhlc2l6ZS4KCgkqIE1ha2VmaWxlLmFtIChkaXN0LWhvb2spOiByZW1vdmUsIGl0IHVzZXMgaGFyZCBsaW5rcyBzbyB3ZSBjaG1vZAogCQlhbGwgb3VyIHNvdXJjZXMuCgoJKiBtYWtlaW5mby90b2MuYywKCSogbWFrZWluZm8vZGVmdW4uYywKCSogbWFrZWluZm8vc2VjdGlvbmluZy5jOiBVc2UgXywgbm90IE5fLgoKCSogaW5mby9NYWtlZmlsZS5hbSAoZ2luZm9fU09VUkNFUyk6IGluY2x1ZGUgJChCVUlMVF9TT1VSQ0VTKQogCQlleHBsaWNpdGx5LgoKCSogbWFrZWluZm8vbGFuZy5jLAoJKiBtYWtlaW5mby9sYW5nLmg6IElTTy02MzkgdXBkYXRlcy4KCgkqIG1ha2VpbmZvL2NtZHMuYzogZXhhbXBsZWluZGVudCBjaGFuZ2VzLgoKCSogaW5mby9pbmZvLmMgKGluZm9fc2hvcnRfaGVscCk6IHJlZm9ybWF0IHNvbWV3aGF0LCBhbmQgZG9uJ3Qgc2F5CgkJaW5mbyBpbmZvIG9wdGlvbnMgYW55IG1vcmUuCgoJKiBkb2MvaW5mby1zdG5kLnRleGkgKEludm9raW5nKTogbWFrZSBkZXNjcmlwdGlvbiBmb3JtYXQgc29tZXdoYXQKIAkJbW9yZSBzdGFuZGFyZC4KCgkqIGluZm8vaW5mb21hcC5jIChJbml0aWFsaXplX2luZm9fa2V5bWFwcyk6IGRvIGVhX2luc2VydCBiaW5kaW5ncwoJCWZpcnN0IHNvIHN1YnNlcXVlbnQgYmluZGluZ3MgKGUuZy4sIGZvciBFU0MpIG92ZXJyaWRlLgoKU3VuIE1hciAyMSAxNzozMTowMCAxOTk5ICBLYXJsIEJlcnJ5ICA8a2FybEBnbnUub3JnPgoKCSogbWFrZWluZm8vbXVsdGkuYyAob3V0cHV0X211bHRpdGFibGVfcm93KTogcmVtb3ZlIHVubmVjZXNzYXJ5Cgl0cmFpbGluZyB3aGl0ZXNwYWNlIGZyb20gb3V0cHV0LCBvdXRwdXQgYmxhbmsgcm93IGZvciBibGFuayBAaXRlbS4KCgkqIGRvYy90ZXhpbmZvLnR4aTogUmVtb3ZlIGV4dHJhIEBpdGVtIGluIGxhbmd1YWdlIG11bHRpdGFibGUuCgpTYXQgTWFyIDIwIDEyOjMwOjI1IDE5OTkgIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiBkb2MvdGV4aW5mby50eGk6IFVwZGF0ZSBsYW5ndWFnZSB0YWJsZSBmcm9tIElTTyA2Mzk6CglodHRwOi8vd3d3Lmlyby51bW9udHJlYWwuY2EvY29udHJpYi9wby9pc28tNjM5LiAgRnJvbSBrYW1hLgoKCSogZG9jL3RleGluZm8udHhpIChleGFtcGxlaW5kZW50KTogZG9jdW1lbnQuCgoJKiBkb2MvdGV4aW5mby50eGkgKENyZWF0aW5nIGFuIEluZm8gRmlsZSk6IHVzZSB0aGlzIGZvciB0aGUgbm9kZSBuYW1lLgoKCSogZG9jL2luZm8udGV4aTogTWFrZSBUZXhpbmZvIHJlZmVyZW5jZXMgY29uc2lzdGVudCwgZXRjLgoKMTk5OS0wMy0xOCAgWW9zaGlraSBIYXlhc2hpICA8Zzc0MDY4NUBrb21hYmEuZWNjLnUtdG9reW8uYWMuanA+CgoJKiBtYWtlaW5mby9tYWtlaW5mby5jIChzZXRfZGVmYXVsdF9pbmRlbnRhdGlvbl9pbmNyZW1lbnQpOiBuZXcKCXJvdXRpbmUuCgkqIG1ha2VpbmZvL2luc2VydGlvbi5jIChjbV9leGFtcGxlaW5kZW50KTogbmV3IHJvdXRpbmUuCglDYWxsIHNldF9kZWZhdWx0X2luZGVudGF0aW9uX2luY3JlbWVudC4KCk1vbiBNYXIgMTUgMTc6MDY6MTUgMTk5OSAgS2FybCBCZXJyeSAgPGthcmxAZ251Lm9yZz4KCgkqIGluZm8vTWFrZWZpbGUuYW0gKGdpbmZvX1NPVVJDRVMpOiBSZW1vdmUgZG9jLmMgYW5kIGZ1bnMuaCBpbgoJCWhvcGVzIHRoZXkgdGhlbiB3b24ndCBiZSBkaXN0cmlidXRlZC4gIFJlcG9ydCBmcm9tIEFuZHJlYXMuCgoJKiBtYWtlaW5mby9jbWRzLmMgKGNtX3NwKTogY2xvc2UgcGFyYWdyYXBoIGFuZCBkaXNhYmxlIGZpbGxpbmcgdG8KCQlwcm9kdWNlIGJsYW5rIGxpbmVzIGluIGluZm8uCglSZXBvcnQgZnJvbTogTWljaGFlbCBWYW5pZXIgPG12YW5pZXJAYmJiLmNhbHRlY2guZWR1Pi4KCgkqIGRvYy90ZXhpbmZvLnR4aTogQXR0ZW1wdCB0byBnZXQgRWRpdGlvbiBpbmZvIG9uIG9uZSBsaW5lLgoKCSogbWFrZWluZm8vbWFrZWluZm8uaCAoY3Jfb3Jfd2hpdGVzcGFjZSk6IHVzZSB3aGl0ZXNwYWNlIGFuZCBjaGVjawogCQlmb3IgXHIuCShza2lwX3doaXRlc3BhY2VfYW5kX25ld2xpbmVzLCBjb21tYW5kX2NoYXIpOiB1c2UgaXQuCiAJUmVwb3J0IGZyb20gYm9uemluaUBnbnUub3JnLgoKCSogbWFrZWluZm8vY21kcy5jIChjbV9jZW50ZXIpOiBzYXZlIGFuZCByZXN0b3JlIGZpbGxpbmdfZW5hYmxlZCwKIAkJc28gQGNlbnRlciBjYW4gYmUgdXNlZCBpbnNpZGUgYW4gQGV4YW1wbGUuICBCdWcgZnJvbSBrYW1hLgoKMTk5OS0wMy0xMyAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCgkqIG1ha2VpbmZvL2Zvb3Rub3RlLmMgKGNtX2Zvb3Rub3RlKTogSW4gc2VwYXJhdGUgZm9vdG5vdGUgc3R5bGUsCglnZW5lcmF0ZSBhIHJlZmVyZW5jZSB0byAiZm9vLUZvb3Rub3RlLU5OIiBmb3IgZWFjaCBmb290bm90ZS4KCShvdXRwdXRfcGVuZGluZ19ub3Rlcyk6IEluIHNlcGFyYXRlIGZvb3Rub3RlIHN0eWxlLCBnZW5lcmF0ZSBhbgoJYW5jaG9yICJmb28tRm9vdG5vdGUtTk4iIGZvciBlYWNoIGZvb3Rub3RlLCBzbyB0aGF0IHRoZSBsaW5rIGluCgl0aGUgcGFyZW50IG5vZGUgd291bGQgbGVhZCBkaXJlY3RseSB0byB0aGUgZm9vdG5vdGUuCgoJKiBpbmZvL2Zvb3Rub3Rlcy5jIChtYWtlX2Zvb3Rub3Rlc19ub2RlKTogUmVjb2duaXplIHRoZSBuZXcKCSJmb28tRm9vdG5vdGUtTk4iIHN0eWxlIG9mIGZvb3Rub3RlIHJlZmVyZW5jZXMuCgoxOTk5LTAzLTA5ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5jcy51bmktZG9ydG11bmQuZGU+CgoJKiBjb25maWd1cmUuaW4gKEFDX09VVFBVVCk6IFJlbW92ZSBjb21tYW5kIHRvIGNyZWF0ZSBwby9NYWtlZmlsZSwKCWFscmVhZHkgZG9uZSBieSBBTV9HTlVfR0VUVEVYVC4KClR1ZSBNYXIgIDkgMTc6NDg6NDYgMTk5OSAgS2FybCBCZXJyeSAgPGthcmxAZ251Lm9yZz4KCgkqIE1ha2VmaWxlLmFtIChkaXN0LWhvb2spOiBtYWtlIGRpc3RyaWJ1dGlvbiBkaXJlY3Rvcnkgd3JpdGFibGUuCgoJKiBJbnN0YWxsZWQgdGhlc2UgY2hhbmdlczoKCiAgMTk5OS0wMy0wNCAgQWtpbSBEZW1haWxsZSAgPGRlbWFpbGxlQGluZi5lbnN0LmZyPgoKCSAgICAqIHRleGkyZHZpIChiaWJ0ZXgpOiBBbGxvdyBzZXZlcmFsIHJ1bnMgb2YgYmlidGV4LCB0aGlzIGNhbiBiZQoJICAgIHVzZWQgaWYgYmliZW50cmllcyByZWZlcmVuY2Ugb3RoZXIgYmliZW50cmllcy4gIE1vcmVvdmVyLCBsb29raW5nCgkgICAgZm9yIGBDaXRhdGlvbicgaW4gdGhlIExPRyBzaG91bGQgYmUgZW5vdWdoIHRvIGF2b2lkIHVuZWxlc3MgcnVucy4KCiAgU3VuIE1hciAgNyAxNToxNTowMCAxOTk5IFVUQyBLYXJsIEhlaW56IE1hcmJhaXNlIDxrYW1hQGhpcHBvLmZpZG8uZGU+CgogICAgICAqIG1ha2VpbmZvL3NlY3Rpb25pbmcue2MsaH06CgkgICAgICAtIHVzaW5nIGRlZmluZXMgaW5zdGVhZCBvZiBsaXRlcmFscy4KCSAgICAgIC0gY2xlYW5lZCB1cCBzb21lIHN0eWxpc3RpYyBtYXR0ZXJzIGxpa2UgS2FybCBCZXJyeQoJCXN1Z2dlc3RlZC4gSGFuZGxpbmcgb2YgdGhpbmdzIGxpa2U6CgkJQHVubnVtYmVyZWQgLi4KCQlAc2VjdGlvbiAuLi4KCQlub3cgaXQgd29ya3MgY29ycmVjdC4KCiAgICAgICogbWFrZWluZm8vdG9jLntjLGh9CgkgICAgICAtIGFkZFRvY0VudHJ5LCBmcmVlVG9jIGNoYW5nZWQgaW50byB0b2NfYWRkX2VudHJ5CgkJdG9jX2ZyZWUuIHN0eWxpc3RpY3MgY2hhbmdlZC4KCiAgICAgICogbWFrZWluZm8vaXNvMmNodC5wbCxpc28tNjM5OiBzY3JpcHQsIHRhYmxlIGZyb20gdGhlIHdlYi4KCSAgICAgIC0gcGVybCBzY3JpcHQgY29udmVydGluZyB0aGUgaXNvLTYzOSB0YWJsZSBmcm9tIHRoZSB3ZWIKCQlpbnRvIHRoZSBhcHByb3BpYXRlIGZpbGVzIChpc29lbnVtLmgsIGlzb3RhYi5jIGFuZAoJCWlzby50ZXhpKSB3aGljaCBjYW4gYmUgaW5zZXJ0ZWQgZGlyZWN0bHkgaW50bwoJCWxhbmcuYywgbGFuZy5oIGFuZCB0ZXhpbmZvLnR4aS4KClR1ZSBNYXIgIDkgMTc6NDc6NTkgMTk5OSAgS2FybCBCZXJyeSAgPGthcmxAZ251Lm9yZz4KCgkqIGNvbmZpZ3VyZS5pbjogQnVtcCB0byAzLjEyZy4KClN1biBNYXIgIDcgMDc6MDE6MTkgMTk5OSAgS2FybCBCZXJyeSAgPGthcmxAZ251Lm9yZz4KCgkqIGluZm8vaW5mb21hcC5jOiBEb24ndCBkbyBpc3ByaW50LCBqdXN0IGJpbmQgZXZlcnl0aGluZy4KCkZyaSBNYXIgIDUgMTQ6MzE6NDIgMTk5OSAgS2FybCBCZXJyeSAgPGthcmxAZ251Lm9yZz4KCgkqIGRvYy90ZXhpbmZvLnR4aSwKCSogbWFrZWluZm8vbWFrZWluZm8uYzogRG9jdW1lbnQgdGhhdCAtLW5vLWhlYWRlcnMgd3JpdGVzIHRvIHN0ZG91dAogCQlieSBkZWZhdWx0LgoKCSogZG9jL3RleGluZm8udHhpOiBAc2V0Y2hhcHRlcm5ld3BhZ2UgZG9lc24ndCBjaGFuZ2UKCVxiaW5kaW5nb2Zmc2V0LCBqdXN0IGhlYWRlcnMuIFJlY29tbWVuZCBub3QgaW5jbHVkaW5nIGl0IGluIHRoZQoJCW1hbnVhbCBzb3VyY2UgYXQgYWxsLgoKCSogbWFrZWluZm8vbm9kZS5jICh3cml0ZV90YWdfdGFibGVfaW50ZXJuYWwpOiBzZXQKIAkJaW5fZml4ZWRfd2lkdGhfZm9udCB3aGlsZSBjb25zdHJ1Y3RpbmcgdGhpcyBzbyAtLS0gZG9lc24ndAogCQljb2xsYXBzZSB0byAtLSwgZXRjLiAgQnVnIHJlcG9ydCBmcm9tIFNlcmdpby4KCgkqIGRpci1leGFtcGxlOiBBZGQgYTJwcyBzdHVmZi4KCgkqIGluZm8vc2Vzc2lvbi5jOiBBbGxvdyBhbnkgY2hhcmFjdGVyIGluIHNlYXJjaCBzdHJpbmcuCgoJKiBpbmZvL2luZm9kb2MuYyAoZGVzY3JpYmVfa2V5KTogZG9uJ3QgYXNzdW1lIG5vbi1sYXRpbjEKIAkJY2hhcmFjdGVycyBhcmUgdW5kZWZpbmVkLgoKCSogaW5mby9pbmZvbWFwLmMgKGluaXRpYWxpemVfaW5mb19rZXltYXBzKTogbWFrZSBhbGwgY2hhcmFjdGVycwoJCWluc2VydGFibGUgYnkgZGVmYXVsdCBpbiBlY2hvIGFyZWEuICBGcm9tIEVsaS4KCgkqIEluc3RhbGxlZCB0aGVzZSBjaGFuZ2VzOgoKICBXZWQgRmViIDIzIDIyOjAwOjAwIDE5OTkgIEthcmwgSGVpbnogTWFyYmFpc2UgPGthbWFAaGlwcG8uZmlkby5kZT4KCiAgICAgICogbWFrZWluZm8vc2VjdGlvbmluZy57YyxofToKCSAgICAgIC0gYWRkZWQgdG8gaG9sZCBjb21wbGV0ZSBoYW5kbGluZyBvZiBzZWN0aW9uaW5nCgkJYSBsaXR0bGUgc3RlcCB0b3dhcmRzIG1vZHVsYXJpemF0aW9uIDstKQoKICAgICAgKiBtYWtlaW5mby9jbWRzLmM6CgkgICAgICAtIHNlY3Rpb25pbmdfYWxpc3QgbW92ZWQgdG8gc2VjdGlvbmluZy5jIGFuZAoJCWFkZGVkIGluZm9ybWF0aW9uIGFib3V0IGVudW1lcmF0ZWQgY2hhcHRlciwKCQlzZWN0aW9uIC4uLiwgYXBwZW5kaXggb3Igbm90LiBFdmVyeXRoaW5nCgkJd2hpY2ggaGFzIGFueSByZWxhdGlvbnNoaXAgd2l0aCBzZWN0aW9uaW5nCgkJbW92ZWQgdG8gc2VjdGlvbmluZy57YyxofSBJIGhvcGUgSSBoYXZlIGZvdW5kCgkJYWxsLgoKICAgICAgKiBtYWtlaW5mby90b2Mue2MsaH06CgkgICAgICAtIGFkZGVkIGZvciBjb21wbGV0ZSBoYW5kbGluZyBvZiAidGFibGUgb2YgY29udGVudHMiCgkJInNob3J0IGNvbnRlbnRzIi4gQmV0dGVyIEFTQ0lJIG9ubHkgc3VwcG9ydAoJCSgtLW5vLWhlYWRlcnMpIHNvIG5vIFRleHQgIk1lbnUiIGlzIHByaW50ZWQuCgkJTWF5IGJlIHdlIGNhbiBkbyBtb3JlLgoKICAgICAgKiBtYWtlaW5mby9tYWtlaW5mby57YyxofToKCSAgICAgIC0gYWRkZWQgbmV3IGNvbW1hbmQgbGluZSBzd2l0Y2ggLS1udW1iZXIgdG8gZW51bWVyYXRlCgkJY2hhcHRlciwgc2VjdGlvbnMgZXRjLgoKICAgICAgKiBkb2MvdGV4aW5mby50eGk6CgkgICAgICAtIC0tbnVtYmVyIG9wdGlvbiBkb2N1bWVudGVkLgoKICAxOTk5LTAyLTI4ICBZb3NoaWtpIEhheWFzaGkgIDxnNzQwNjg1QGtvbWFiYS5lY2MudS10b2t5by5hYy5qcD4KCgkgICogbWFrZWluZm8vaW5zZXJ0aW9uLmMgKGluX3BhcmFncmFwaCk6IE5ldyB2YXJpYWJsZS4KCSAgKGNtX2l0ZW0pOiBBZGQgPC9wPiBvbmx5IGlmIDxwPiBpcyBvcGVuLgoJICAqIG1ha2VpbmZvL21ha2VpbmZvLmMgKGhhbmRsZV9tZW51X2VudHJ5KTogRGl0dG8uCgoJICAqIG1ha2VpbmZvL2luc2VydGlvbi5jIChiZWdpbl9pbnNlcnRpb24pLAoJICAqIG1ha2VpbmZvL21ha2VpbmZvLmMgKGhhbmRsZV9tZW51X2VudHJ5KTogSWYgY29tbWVudGFyeQoJICBwcmVjZWRlcyBmaXJzdCBtZW51IGl0ZW0sIHB1dCB0aGVtIG91dHNpZGUgb2YgPHVsPi4KCSAgUHV0IDxwPiBhbmQgPC9wPiBjb3JyZWN0bHkuCgogIDE5OTktMDItMjcgIEVsaSBaYXJldHNraWkgIDxlbGl6QGlzLmVsdGEuY28uaWw+CgoJICAqIGluZm8vaW5mby5jIChpbmZvX3Nob3J0X2hlbHApOiBEb2N1bWVudCAtLXNob3ctb3B0aW9ucyBhbmQKCSAgLS11c2FnZS4KCiAgMTk5OS0wMi0yNiAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCgkgICogaW5mby9tYWtlZG9jLmMgKG1haW4pIFtTVFJJUF9ET1RfRVhFXTogU3RyaXAgdGhlIC5leGUgc3VmZml4LCBzbwoJICB0aGF0IGRvYy5jIHNheXMgIi4vbWFrZWRvYy5jIiwgbm90ICIuL21ha2Vkb2MuZXhlLmMiLgoKCSAgKiBpbmZvL2luZm8uYyAoZ290b19pbnZvY2F0aW9uX3ApOiBOZXcgdmFyaWFibGUuCgkgIChsb25nX29wdGlvbnMpOiBOZXcgb3B0aW9ucyAtLXNob3ctb3B0aW9ucyBhbmQgaXRzIGFsaWFzIC0tdXNhZ2UuCgkgIChtYWluKTogRG9uJ3QgdXBkYXRlIHRoZSBkaXNwbGF5IHVudGlsIHdlIGZpbmQgdGhlIGZpcnN0IG5vZGUgdG8KCSAgYmUgZGlzcGxheWVkLCB0byBhdm9pZCBmbHVzaGluZyBpbmNvcnJlY3QgZGlzcGxheS4gIElmIHVzZXIgd2FudHMKCSAgdG8gc2VlIHRoZSBjb21tYW5kLWxpbmUgb3B0aW9ucyBub2RlIHJpZ2h0IGF3YXksIGRpc3BsYXkgd2hhdGV2ZXIKCSAgaW5mb19pbnR1aXRfb3B0aW9uc19ub2RlIGZpbmRzLgoKCSAgKiBpbmZvL3Nlc3Npb24uYyAoaW5mb19pbnR1aXRfb3B0aW9uc19ub2RlKTogTmV3IGZ1bmN0aW9uLCB1c2VzCgkgIGhldXJpc3RpY3MgdG8gZmluZCB0aGUgbm9kZSB3aGljaCBkZXNjcmliZXMgcHJvZ3JhbSdzIGludm9jYXRpb24uCgkgIChpbmZvX2dvdG9faW52b2NhdGlvbl9ub2RlKTogTmV3IGNvbW1hbmQsIGFza3MgZm9yIGEgcHJvZ3JhbSdzCgkgIG5hbWUgYW5kIGRpc3BsYXlzIHRoZSBpbnZvY2F0aW9uIG5vZGUgb2YgdGhhdCBwcm9ncmFtLgoJICAoZW50cnlfaW5fbWVudSk6IE5ldyBmdW5jdGlvbiwgZnV6emlseSBsb29rcyBmb3IgYSBtZW51IGVudHJ5IGluIGEKCSAgbm9kZSdzIG1lbnUuCgkgIChwcm9ncmFtX25hbWVfZnJvbV9maWxlX25hbWUpOiBOZXcgZnVuY3Rpb24sIHN1Z2dlc3RzIGEgcHJvZ3JhbQoJICBuYW1lIGdpdmVuIGEgbmFtZSBvZiBpdHMgSW5mbyBmaWxlLgoJICAoaW5mb19zZWFyY2hfaW5fbm9kZSk6IEFjY2VwdCBhbiBhZGRpdGlvbmFsIGFyZ3VtZW50OiBhIGZsYWcgdG8KCSAgc2VhcmNoIGNhc2Utc2Vuc2l0aXZlbHk7IGFsbCBjYWxsZXJzIGNoYW5nZWQuICBJZiBjYXNlLXNlbnNpdGl2ZQoJICBzZWFyY2ggaXMgcmVxdWlyZWQsIGRvbid0IHR1cm4gb24gdGhlIGNhc2UtZm9sZCBmbGFnIGluIHRoZSBzZWFyY2gKCSAgYmluZGluZy4KCSAgKGluZm9fc2VhcmNoX2ludGVybmFsKTogQWNjZXB0IGFuIGFkZGl0aW9uYWwgYXJndW1lbnQ6IGEgZmxhZyB0bwoJICBzZWFyY2ggY2FzZS1zZW5zaXRpdmVseTsgYWxsIGNhbGxlcnMgY2hhbmdlZC4gIFNoYXJlIHRoZSBsYXN0CgkgIHNlYXJjaCBzdHJpbmcgYmV0d2VlbiBub3JtYWwgYW5kIGNhc2Utc2Vuc2l0aXZlIHNlYXJjaCBjb21tYW5kcy4KCSAgKGluZm9fc2VhcmNoXzEpOiBOZXcgZnVuY3Rpb24sIHdpdGggdGhlIGd1dHMgdGhhdCBwcmV2aW91c2x5CgkgIGJlbG9uZ2VkIHRvIGluZm9fc2VhcmNoLiAgSWYgdGhlIHNlYXJjaCBpcyBjYXNlLXNlbnNpdGl2ZSwKCSAgbWVudGlvbnMgdGhhdCBpbiB0aGUgcHJvbXB0IGZvciB0aGUgc2VhcmNoIHN0cmluZy4gIElmIHRoZSBzZWFyY2gKCSAgc3RyaW5nIGluY2x1ZGVzIHVwcGVyLWNhc2UgY2hhcmFjdGVycywgc2VhcmNoZXMgY2FzZS1zZW5zaXRpdmVseS4KCSAgKGluZm9fc2VhcmNoKTogQ2FsbHMgaW5mb19zZWFyY2hfMSB3aXRoIHplcm8gY2FzZS1zZW5zaXRpdml0eQoJICBmbGFnLgoJICAoaW5mb19zZWFyY2hfY2FzZV9zZW5zaXRpdmVseSk6IE5ldyBjb21tYW5kLCBjYWxscyBpbmZvX3NlYXJjaF8xCgkgIHdpdGggbm9uLXplcm8gY2FzZS1zZW5zaXRpdml0eSBmbGFnLgoJICAoaW5jcmVtZW50YWxfc2VhcmNoKTogSWYgdGhlIHNlYXJjaAoJICBzdHJpbmcgaW5jbHVkZXMgdXBwZXItY2FzZSBjaGFyYWN0ZXJzLCBzZWFyY2hlcyBjYXNlLXNlbnNpdGl2ZWx5LgoKCSAgKiBpbmZvL3NlYXJjaC5jIChzZWFyY2hfYmFja3dhcmQpOiBGaXggYnVnIGluIGNhc2Utc2Vuc2l0aXZlCgkgIHNlYXJjaC4KCgkgICogaW5mby9pbmZvbWFwLmMgKGluaXRpYWxpemVfaW5mb19rZXltYXBzKTogYC0nIGluIGluZm8gd2luZG93IG1hcAoJICBwcm9kdWNlcyBuZWdhdGl2ZSBhcmd1bWVudHMuICBgUycgaW52b2tlcyBjYXNlLXNlbnNpdGl2ZSBzZWFyY2guCgkgIGBPJyBhbmQgYEknIGludm9rZSBnb3RvLWludm9jYXRpb24uCgoJICAqIGRvYy9pbmZvLXN0bmQudGV4aSAoSW52b2tpbmcgSW5mbyk6IERvY3VtZW50IC0tc2hvdy1vcHRpb25zLgoJICAoTm9kZSBDb21tYW5kcyk6IERvY3VtZW50IGBPJywgZ290by1pbnZvY2F0aW9uLgoJICAoU2VhcmNoaW5nIENvbW1hbmRzKTogRG9jdW1lbnQgYFMnIGFuZCB0aGUgY2FzZS1zZW5zaXRpdmUgc2VhcmNoCgkgIHdoZW4gdGhlIHNlYXJjaCBzdHJpbmcgaW5jbHVkZXMgdXBwZXItY2FzZSBsZXR0ZXJzLiAgRG9jdW1lbnQgYC8nCgkgIGFzIGEgc3lub255bSBmb3IgYHMnLgoJICAoTWlzY2VsbGFuZW91cyBDb21tYW5kcyk6IERvY3VtZW50IGBNLS0nIGFuZCBgLScuCgogIDE5OTktMDItMjUgIEVsaSBaYXJldHNraWkgIDxlbGl6QGlzLmVsdGEuY28uaWw+CgoJICAqIGluZm8vaW5mby5jIChtYWluKTogVW5kZXIgLS1pbmRleC1zZWFyY2gsIHNlYXJjaCBpbmRpY2VzICphZnRlcioKCSAgZm9sbG93aW5nIG1lbnVzLCBzbyB0aGF0IHdlIGRvbid0IGxvb2sgZm9yIGFuIGluZGV4IGluIERJUi4KCgpXZWQgTWFyICAzIDE3OjIwOjA3IDE5OTkgIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiBtYWtlaW5mby9jbWRzLmM6IERvIG5vdCBvdXRwdXQgPHNtYWxsPiBpbiBpbmZvIG1vZGUuCglGcm9tOiBFbGkgWmFyZXRza2lpIDxlbGl6QGlzLmVsdGEuY28uaWw+LgoKCSogbWFrZWluZm8vaW5zZXJ0aW9uLmMgKGVudW1faHRtbCk6IFJlbW92ZSB1bnVzZWQgdmFyIHRlbXAuCglGcm9tOiBZb3NoaWtpIEhheWFzaGkgPGc3NDA2ODVAa29tYWJhLmVjYy51LXRva3lvLmFjLmpwPgoKCSogaW5mby9pbmZvZG9jLmM6IEF2b2lkIHRyYW5zbGF0aW9uIG9mIGJsYW5rIGxpbmVzLgoKCSogaW5mby90aWxkZS5jLAoJKiBpbmZvL21hbi5jLAoJKiBtYWtlaW5mby9pbmRleC5jIChpbmRleF9hZGRfYXJnKTogYXZvaWQgdXNlIG9mIGFsbG9jYS4KCgkqIGluZm8vZWNoby1hcmVhLmM6IERvbid0IHBhdXNlIGZvciBhbiBhZGRpdGlvbmFsIDc1IG1pY3Jvc2Vjb25kcy4KCU5vdGVkIGJ5IEVsaS4KCgkqIGNvbmZpZ3VyZS5pbjogQnVtcCB0byAzLjEyZi4KCgkqIGRvYy90ZXhpbmZvLnR4aTogZmluZGV4IGVuZGRvdHMuICBGcm9tIEVsaS4KCjE5OTktMDMtMDEgIFlvc2hpa2kgSGF5YXNoaSAgPGc3NDA2ODVAa29tYWJhLmVjYy51LXRva3lvLmFjLmpwPgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAoaW5zZXJ0X2h0bWxfdGFnKTogQWRkIDxwPiB3aGVuCglwYXJhZ3JhcGggaXMgbm90IG9wZW5lZC4KCShzZWN0aW9uaW5nX2h0bWwpOiBDYWxsIGNsb3NlX3BhcmFncmFwaCBzbyB0aGF0IHBhcmFncmFwaAoJd2lsbCBiZSBzdGFydGVkLgoKMTk5OS0wMi0yNiAgQWtpbSBEZW1haWxsZSAgPGRlbWFpbGxlQGluZi5lbnN0LmZyPgoKICAgICAgICAqIHRleGkyZHZpIChnZXRfeHJlZl9maWxlcyk6IFRha2UgJGZpbGVuYW1lX25vZXh0IGFzICQxLgogICAgICAgIChnZXRfeHJlZl9maWxlcyk6IExvb2sgZm9yICQxLmlkeCBvbmx5LCBub3QgKi5pZHguCiAgICAgICAgKGdldF94cmVmX2ZpbGVzKTogTG9vayBmb3IgJDEuY2IgZmlsZXMgKFx1c2VwYWNrYWdle2NoYW5nZWJhcn0pLgogICAgICAgICogdGV4aTJkdmk6IExvb2sgZm9yIHJlcnVuIHJlcXVlc3RzIGluIExPRyBmaWxlcyBpbiBhZGRpdGlvbiB0bwogICAgICAgIHhyZWYgZmlsZXMgY29tcGFyaXNvbi4KICAgICAgICAoYmlidGV4KTogUmVtb3ZlIHVzZWxlc3MgYC4vJyAoYWxyZWFkeSBhZGRlZCBpbgogICAgICAgIGNvbW1hbmRfbGluZV9maWxlbmFtZSkuCiAgICAgICAgKGZpbGVuYW1lX2Rpcik6IFNtYXJ0ZXIgc2VkIGV4cHJlc3Npb24gdGhhdCBoYW5kbGVzIGZpbGUgbmFtZXMKICAgICAgICB3aXRoIG5vIGRpcmVjdG9yeSBwYXJ0LgogICAgICAgICh0eGl2ZXJzaW9uKTogUmVtb3ZlZCB1c2VsZXNzICgpIChgYCBhbHJlYWR5IGd1YXJhbnRlZSBhIHN1YnNoZWxsKS4KCjE5OTktMDItMjUgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmNzLnVuaS1kb3J0bXVuZC5kZT4KCgkqIG1ha2VpbmZvL211bHRpLmMgKGZpbmRfdGVtcGxhdGVfd2lkdGgpOiBGaXggb3BlcmF0b3IgcHJlY2VkZW5jZS4KClR1ZSBGZWIgMjMgMTA6MzU6NTMgMTk5OSAgS2FybCBCZXJyeSAgPGthcmxAZ251Lm9yZz4KCgkqIGRpci1leGFtcGxlOiBjY21vZGUgbm90IGNjLW1vZGUuICBGcm9tIGhkcy4KCk1vbiBGZWIgMjIgMDc6MzQ6MDAgMTk5OSAgS2FybCBCZXJyeSAgPGthcmxAZ251Lm9yZz4KCgkqIG1ha2VpbmZvL2xhbmcuYywKCSogZG9jL3RleGluZm8udHhpOiBGaXgga2F6YWtoa2ggdHlwby4KCjE5OTktMDItMjEgIEVsaSBaYXJldHNraWkgIDxlbGl6QGlzLmVsdGEuY28uaWw+CgoJKiBkamdwcC9jb25maWcuc2VkOiBBZGQgcGN0ZXJtLmMgdG8gdGVybWluYWwubyBkZXBlbmRlbmNpZXMuCgoxOTk5LTAyLTIxICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5jcy51bmktZG9ydG11bmQuZGU+CgoJKiBtYWtlaW5mby9sYW5nLmMgKGNtX2FjY2VudF9nZW5lcmljKTogRW1pdCB0aGUgYWNjZW50IGNoYXJhY3RlcgoJb25seSBvbmNlLCBhZnRlciB0aGUgYXJndW1lbnQuCgpTdW4gRmViIDIxIDE2OjM2OjE0IDE5OTkgIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiBtYWtlaW5mby9tYWtlaW5mby5jIChoYW5kbGVfbWVudV9lbnRyeSk6IG5ldyByb3V0aW5lLgoJKHJlYWRlcl9sb29wKTogY2FsbCBpdCwgYWxsb3dpbmcgZm9yIGNvbW1lbnRzIGluIG1lbnVzLgoKCSogbWFrZWluZm8vbm9kZS5jOiBSZWFycmFuZ2UgZnVuY3Rpb25zIHRvIG1ha2Ugc3RhdGljLCBldGMuCgoJKiBkb2MvTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QsIGluc3RhbGwtdGV4KTogQWRkIHR4aS1jcyBhbmQgdHhpLW5vLgoKMTk5OS0wMi0yMCAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCgkqIHV0aWwvaW5zdGFsbC1pbmZvLmMgKG9wZW5fcG9zc2libHlfY29tcHJlc3NlZF9maWxlKTogT3V0cHV0CglleHBsaWNpdCBtZXNzYWdlIGFib3V0IGVtcHR5IGlucHV0IGZpbGVzLgoJKGluc2VydF9lbnRyeV9oZXJlKTogSW5zZXJ0IG11bHRpcGxlIGVudHJpZXMgaW4gYWxwaGFiZXRpY2FsIG9yZGVyLgoKRnJpIEZlYiAxOSAwOToxMzoyOCAxOTk5ICBLYXJsIEJlcnJ5ICA8a2FybEBnbnUub3JnPgoKCSogbWFrZWluZm8vaW5zZXJ0aW9uLmMgKGVudW1faHRtbCk6IG5ldyByb3V0aW5lLgoJKGJlZ2luX2luc2VydGlvbik6IGNhbGwgaXQuCglCYXNlZCBvbiBjb2RlIGZyb206IFlvc2hpa2kgSGF5YXNoaSA8Zzc0MDY4NUBrb21hYmEuZWNjLnUtdG9reW8uYWMuanA+LgoKCSogbGliL3hleGl0LmMgKEVYSVRfRkFJTFVSRSkgWyFkZWZpbmVkIEVYSVRfU1VDQ0VTUyAmJiBWTVNdOiB3ZWlyZAoJCWxvbmcgdmFsdWUuCglGcm9tOiBMYXJzIEhlY2tpbmcgPGxoZWNraW5nQG5tcmMudWNjLmllPgoKVGh1IEZlYiAxOCAxNjo0MjoxMCAxOTk5ICBLYXJsIEJlcnJ5ICA8a2FybEBnbnUub3JnPgoKCSogbWFrZWluZm8vbm9kZS5oIChyZW1lbWJlcl9ub2RlX3JlZmVyZW5jZSk6IGRlY2wuCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKGZpbmRfdW51c2VkX3JlZmVyZW5jZSk6IGR1bXAgdW51c2VkIGRlY2wuCgoxOTk5LTAyLTE4ICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgoKCSogbWFrZWluZm8vY21kcy5jIChjbV9kb3RzLCBjbV9lbmRkb3RzKTogRG9uJ3QgcHJvZHVjZSAmIzEzMzsgZm9yCglIVE1MLCBhcyB0b28gbWFueSBicm93c2VycyBkb24ndCBzdXBwb3J0IGl0OyB1c2UgIi4uLiIgaW4gYQoJc21hbGxlciBmb250ICh3aXRoIDxzbWFsbD4pLgoJKGNtX3RvcCk6IE91dHB1dCB0aGUgbGFuZz0gYXR0cmlidXRlIGluc2lkZSA8aHRtbD4uCgoJKiBtYWtlaW5mby9ub2RlLmMgKGNtX25vZGUpOiBPdXRwdXQgdGhlIGxhbmc9IGF0dHJpYnV0ZSBpbnNpZGUKCTxodG1sPi4KCgkqIG1ha2VpbmZvL2Zvb3Rub3RlLmMgKG91dHB1dF9wZW5kaW5nX25vdGVzKTogR2VuZXJhdGUgPG9sPgoJaW5zdGVhZCBvZiA8ZGwgY29tcGFjdD4uICBNYWtlIHRoZSB0ZXh0IG9mIGVhY2ggZm9vdG5vdGUgc3RhcnQgYQoJbmV3IHBhcmFncmFwaC4KCjE5OTktMDItMTcgIEVsaSBaYXJldHNraWkgIDxlbGl6QGlzLmVsdGEuY28uaWw+CgoJKiBtYWtlaW5mby9pbnNlcnRpb24uYyAoY21faXRlbSk6IFJlbW92ZSA8ZGQ+IHdoZW4gaW1tZWRpYXRlbHkKCWZvbGxvd2VkIGJ5IGEgPGR0Pi4gIEFkZCBhIDxicj4gYmVmb3JlIGV2ZXJ5IDxkdD4sIGV4Y2VwdCBpZiB3ZQoJYXJlIGNvbnZlcnRpbmcgQGl0ZW14LCBvciBpbiB0aGUgZmlyc3QgaXRlbSBhZnRlciA8ZGw+LgoJKGJlZ2luX2luc2VydGlvbik6IFVzZSA8ZGw+IGZvciB0YWJsZXMsIHRvIG1ha2UgaXQgbG9vayBjbG9zZXIgdG8KCXRoZSBJbmZvIG91dHB1dC4gIERvbid0IG91dHB1dCBhIG5ld2xpbmUgYWZ0ZXIgYSA8cHJlPi4KCjE5OTktMDItMTcgIEVsaSBaYXJldHNraWkgIDxlbGl6QGlzLmVsdGEuY28uaWw+CgoJKiBtYWtlaW5mby9tYWtlaW5mby5jIChoYW5kbGVfdmFyaWFibGUpOiBEb24ndCBiYWNrdXAgaW5wdXQKCXBvaW50ZXIgaWYgd2UgaGl0IHRoZSBlbmQgb2YgdGV4dCAodXN1YWxseSwgaW5zaWRlCglleGVjdXRlX3N0cmluZykuCgkqIG1ha2VpbmZvL2luc2VydGlvbi5jIChnZXRfaXRlbV9mdW5jdGlvbik6IExpa2V3aXNlLgoKV2VkIEZlYiAxNyAxNTowOTowNiAxOTk5ICBLYXJsIEJlcnJ5ICA8a2FybEBnbnUub3JnPgoKCSogZG9jL3RleGluZm8udHhpOiBCZXR0ZXIgaW5kZXhpbmcgb2Ygc3BhY2UgZW50cmllcy4KCgkqIG1ha2VpbmZvL211bHRpLmMgKGZpbmRfdGVtcGxhdGVfd2lkdGgpOiBuZXcgcm91dGluZSB0byByZWFsbHkKIAkJcGFyc2UgQG11bHRpdGFibGUgey4uLn0gdGVtcGxhdGVzLgogCShzZXR1cF9tdWx0aXRhYmxlX3BhcmFtZXRlcnMpOiBjYWxsIGl0LgoJQnVnIHJlcG9ydCBmcm9tOiBTZXJnaW8gUG9rcm92c2tpaiA8cG9rQG5ic3AubnNrLnN1Pi4KCgkqIGxpYi9zeXN0ZW0uaCAoc3Vic3RyaW5nKTogZGVjbGFyZS4KCgkqIGxpYi9NYWtlZmlsZS5hbSAobGlidHhpX2FfU09VUkNFUyk6IGFkZCBzdWJzdHJpbmcuYy4KCgkqIG1ha2VpbmZvL2RlZnVuLmM6IE1vdmUgc3Vic3RyaW5nIHRvIGxpYi4KCgkqIHV0aWwvdGV4aW5kZXguYyAodGVtcGNvcHkpOiBubyBsb25nZXIgdXNlZC4KICAgICAgCShtYWtldGVtcG5hbWUpOiBtYWtlIHN0YXRpYy4KCgkqIEluc3RhbGxlZCB0aGVzZSBjaGFuZ2VzOgoKMTk5OS0wMi0xMyAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCgkqIG1ha2VpbmZvL2NtZHMuYyAoY21fYWNyb255bSk6IE5ldyBmdW5jdGlvbiwgbWFrZXMgQGFjcm9ueW0KCXByb2R1Y2UgYSBzbWFsbGVyIGZvbnQgc2l6ZSBpbiBIVE1MIG1vZGUuCgkoY21fc2MpOiBQcm9kdWNlIHNtYWxsZXIgZm9udCBzaXplIGluIEhUTUwgbW9kZS4KCgkqIG1ha2VpbmZvL2Zvb3Rub3RlLmMgKGNtX2Zvb3Rub3RlKTogSW4gSFRNTCBvdXRwdXQsIG1ha2UgdGhlCglmb290bm90ZSBudW1iZXIgYmUgYSBzdXBlcnNjcmlwdDsgcmVtb3ZlIFtdIGFyb3VuZCB0aGUgbGluay4KCgkqIG1ha2VpbmZvL2NtZHMuYyAoY21fdmFyX3NjKTogU2VwYXJhdGVkIGludG8gdHdvIGZ1bmN0aW9uczoKCWNtX3ZhciBhbmQgY21fc2MsIHNpbmNlIEB2YXIgYW5kIEBzYyBoYXZlIGRpZmZlcmVudCBlZmZlY3RzIGluCglIVE1MIG91dHB1dC4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKGNtX3hyZWYsIGNtX2luZm9yZWYpOiBEb24ndCBwdXQgIltdIiBhcm91bmQKCUhUTUwgbGlua3MuCgoJKiBpbmZvL3BjdGVybS5jIChESkdQUF9rZXl0YWIpOiBBZGQgdHJhbnNsYXRpb24gZm9yIEFsdC1QZ1VwIGFuZAoJQWx0LVBnRG4sIHRvIHN1cHBvcnQgdGhlIG5ldyBNLXByaW9yIGtleS4KCldlZCBGZWIgMTcgMTE6NTA6NDYgMTk5OSAgS2FybCBCZXJyeSAgPGthcmxAZ251Lm9yZz4KCgkqIGRvYy90ZXhpbmZvLnR4aTogRG9uJ3QgbWVudGlvbiB0ZXhpMnJvZmYgc28gcHJvbWluZW50bHkuCgoJKiBtYWtlaW5mby9tYWtlaW5mby5jOiBQYXNzIGVuY2xvc2VfZXhwYW5kIHRvIHJlbWVtYmVyX2JyYWNlCiAJCXJhdGhlciB0aGFuIGVuY2xvc2VfY29tbWFuZC4gIEZyb20gRWxpLgoKCSogbWFrZWluZm8vbWFjcm8uYyAoY21fYWxpYXMsIGNtX2RlZmluZm9lbmNsb3NlKTogRXhwYW5kIG1hY3JvcyBpbgoJCWZpcnN0IGNhbGwgdG8gZ2V0X3VudGlsX2luX2xpbmUuICBGcm9tIEVsaS4KCgkqIGluZm8vbWFrZWRvYy5jLAoJKiBpbmZvL3Nlc3Npb24uYywKCSogaW5mby9tYW4uYywKCSogaW5mby90aWxkZS5jLAoJKiBpbmZvL2luZm8uYywKCSogbWFrZWluZm8vZmlsZXMuYywKCSogbWFrZWluZm8vbXVsdGkuYywKCSogbWFrZWluZm8vbm9kZS5jLAoJKiBtYWtlaW5mby9tYWtlaW5mby5jOiBVc2UgeGV4aXQuCgkqIG1ha2VpbmZvL21ha2VpbmZvLmggKE5PX0VSUk9SLCBGQVRBTCwgU1lOVEFYKTogcmVtb3ZlLgoKCSogaW5mby90ZXJtaW5hbC5jOiBBdm9pZCBzbGVlcCB1bmxlc3Mgb24gc3VuLWNtZCB0ZXJtaW5hbC4KCgkqIGxpYi94ZXhpdC5jIChFWElUX0ZBSUxVUkUpIFshRVhJVF9GQUlMVVJFXTogI2RlZmluZSB0byAxIHRvIGZpeAoJCVNvbnkgTkVXUy1PUyA0LjBDIGxvc3NhZ2UuICBGcm9tIEFraW0uCgoJKiBpbmZvL2luZm9kb2MuYzogVHJhbnNsYXRlIHdoZXJlIGlzIGRvYyBzdHJpbmcsIHVuZGVybGluZSBsaW5lcwogCQlpbiBoZWxwLgoJRnJvbTogVHJvbmQgRW5kcmVzdG9sIDx0cm9uZEBhZ2FtZW1ub24uZ3RmLm9sLm5vPgoKCSogbWFrZWluZm8vY21kcy5jIChjbV9kb3RzLCBjbV9lbmRkb3RzKTogZ28gYmFjayB0byAuLi4gYW5kIC4uLi4sCgkJJiMxMzM7IGFwcGFyZW50bHkgZG9lc24ndCB3b3JrIHdpZGVseSBlbm91Z2guCgpUdWUgRmViIDE2IDA3OjM3OjU0IDE5OTkgIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiBjb25maWd1cmUuaW4gKEFMTF9MSU5HVUFTKTogYWRkIGRlX0FULgoKCSogdXRpbC90ZXhpMmR2aTogUmVkaXJlY3QgY2Qgb3V0cHV0IHRvIC9kZXYvbnVsbCB3aGVuIGRldGVybWluaW5nCiAJCXR4aXZlcnNpb24uCgpNb24gRmViIDE1IDEzOjQzOjM3IDE5OTkgIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiB1dGlsL2luc3RhbGwtaW5mby5jLAoJKiB1dGlsL3RleGluZGV4LmM6IENhbGwgeGV4aXQgaW5zdGVhZCBvZiBleGl0LgoKCSogbGliL3N5c3RlbS5oICh4ZXhpdCk6IERlY2xhcmUuCgoJKiBsaWIvTWFrZWZpbGUuYW0gKGxpYnR4aV9hX1NPVVJDRVMpOiBBZGQgeGV4aXQuYy4KCgkqIGRvYy90ZXhpbmZvLnR4aTogRG9jdW1lbnQgdGhhdCBAZG9jdW1lbnRlbmNvZGluZyBpcyB1c2VkIGluIHRoZQogCQlIVE1MIG91dHB1dC4KCgkqIG1ha2VpbmZvL2NtZHMuYyAoY21fdG9wKTogdXNlIGRvY3VtZW50X2VuY29kaW5nIGlmIHNldC4KCShjb21tYW5kX3RhYmxlKTogY2FsbCBjbV9kb2N1bWVudGVuY29kaW5nIGluc3RlYWQgb2Ygbm8tb3AuCgkqIG1ha2VpbmZvL2xhbmcuYyAoZG9jdW1lbnRfZW5jb2RpbmcsIGNtX2RvY3VtZW50ZW5jb2RpbmcpOiBkZWZpbmUuCgkqIG1ha2VpbmZvL2xhbmcuaCAoZG9jdW1lbnRfZW5jb2RpbmcsIGNtX2RvY3VtZW50ZW5jb2RpbmcpOiBkZWNsYXJlLgoKCSogbWFrZWluZm8vaW5zZXJ0aW9uLmM6IFJlc3RvcmUgPC9wPiBiZWZvcmUgPGxpPi4KCgkqIHV0aWwvdGV4aTJkdmk6IElmIHRleGluZm8udGV4IHZlcnNpb24gaXMgdG9vIGxvdyBmb3IgbWFjcm9zLCB1c2UKIAkJbWFrZWluZm8uCgoJKiBtYWtlaW5mby9jbWRzLmMgKGNtX2NlbnRlcik6IHNhdmUgYW5kIHJlc3RvcmUgdmFsdWUgb2YKCSAgICAgICBpbmRlbnRlZF9maWxsLCBvdGhlcndpc2UgQGNlbnRlciB3aXRoaW4gYW4gQGVudW1lcmF0ZSAoc2F5KQoJICAgICAgIGFsc28gY2xvc2VzIHRoZSBpbmRlbnRhdGlvbi4KCUJ1ZyBmcm9tOiBTZXJnaW8gUG9rcm92c2tpaiA8cG9rQG5ic3AubnNrLnN1Pi4KClN1biBGZWIgMTQgMTU6MjU6MDIgMTk5OSAgS2FybCBCZXJyeSAgPGthcmxAZ251Lm9yZz4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmM6IERvYyBmaXguCgoJKiBkb2MvdGV4aW5mby50eGk6IEJlIGVudGh1c2lhc3RpYyBpZiBwZW9wbGUgd2FudCB0byBpbXBsZW1lbnQKCQltb3JlIG91dHB1dCBmb3JtYXRzLCBidXQgdXNlIG1ha2VpbmZvIHRvIGRvIHRoZSBqb2IuCgoJKiBtYWtlaW5mby9pbmRleC5jIChpbmRleF9lbGVtZW50X2NvbXBhcmUpOiBVc2Ugc3RyY29sbCBpZiBpdCdzCiAJCWF2YWlsYWJsZS4KCSogY29uZmlndXJlLmluOiBDYWxsIEFDX0ZVTkNfU1RSQ09MTC4KCSogbWFrZWluZm8vbWFrZWluZm8uYyAobWFpbik6IFVzZSBMQ19DVFlQRSBhbmQgTENfQ09MTEFURQogCQljYXRlZ29yaWVzLiAgU3VnZ2VzdGlvbiBmcm9tIE9sZWcuCgoJKiBsaWIvc3lzdGVtLmggKHNldGxvY2FsZSkgWyFIQVZFX1NFVExPQ0FMRV06ICNkZWZpbmUgYXdheS4KCVN1Z2dlc3Rpb24gZnJvbSBBa2ltLgoKCSogZG9jL3RleGluZm8udHhpOiBEb2N1bWVudCBAcGFyYWdyYXBoaW5kZW50IHdvcmtpbmcgaW4gVGVYIG5vdy4KCgkqIGRvYy90ZXhpbmZvLnR4aSwKCSogbWFrZWluZm8vbGFuZy5jLAoJKiBtYWtlaW5mby9sYW5nLmggKGxhbmd1YWdlX2NvZGVfdHlwZSk6IGFiYnJldiBjaGFuZ2VzIGZyb20gT2xlZy4KCgkqIG1ha2VpbmZvL2NtZHMuYywKCSogbWFrZWluZm8vbm9kZS5jOiBPbmx5IHRyYW5zbGF0ZSBgTmV4dDonLCBgUHJldmlvdXM6JywgYW5kIGBVcDonLAogCQlub3QgdGhlIHdob2xlIGhyZWYuICBGcm9tIEVsaS4KCgkqIGRvYy90ZXhpbmZvLnR4aTogRG9jdW1lbnQgdGhhdCBvbmx5IHVuc3BsaXQgaHRtbCBvdXRwdXQgaXMKIAkJc3VwcG9ydGVkIGluIHRoaXMgcmVsZWFzZS4KClNhdCBGZWIgMTMgMTc6NTU6MzAgMTk5OSAgS2FybCBCZXJyeSAgPGthcmxAZ251Lm9yZz4KCgkqIGNvbmZpZ3VyZS5pbjogQ2hlY2sgZm9yIHRlcm1saWIgYmVmb3JlIHRlcm1jYXAgZm9yIHNha2Ugb2YKIAkJU29sYXJpcyAoanVkZ2luZyBmcm9tIGxlc3MtMzMyIGNvbmZpZ3VyZS5pbikgYW5kIG1heWJlCiAJCUhQLVVYIDExLgoKCSogZG9jL3RleGluZm8udHhpIChGb290bm90ZSBjb21tYW5kcyk6IGluY29oZXJlbmN5IHJlcG9ydGVkIGJ5IEFoYXJvbi4KCUxhbmd1YWdlIHZzIGNvdW50cnkgZml4ZXMgZnJvbSBPbGVnLgoKMTk5OS0wMi0xMyAgS2FybCBFaWNod2FsZGVyICA8a2VAZ251LmZyYW5rZW4uZGU+CgoJKiBtYWtlaW5mby9ub2RlLmMgKGNtX25vZGUpOiBUYWcgbmF2aWdhdGlvbiBsaW5rcyBhcyB0cmFuc2xhdGFibGUuCgkqIG1ha2VpbmZvL2NtZHMuYyAoY21fdG9wKTogRGl0dG8uCgpXZWQgRmViIDEwIDIyOjAwOjAwIDE5OTkgIEthcmwgSGVpbnogTWFyYmFpc2UgPGthbWFAaGlwcG8uZmlkby5kZT4KCiAgICAqIG1ha2VpbmZvL2RlZnVuLmg6CiAgICAgICAgICAgIC0gbmV3IGJlY2F1c2Ugd2UgbmVlZCBnZXRfYmFzZV90eXBlLWZ1bmN0aW9uCiAgICAgICAgICAgICAgYWNjZXNzaWJsZSBpbiBpbnNlcnRpb24uYwoKICAgICogbWFrZWluZm8vZGVmdW4uYzoKICAgICAgICAgICAgLSBjb21wbGV0ZSBIVE1MIGhhbmRsaW5nIG9mIHRoZSBAZGVmLi4uIHRoaW5ncy4KCiAgICAqIG1ha2VpbmZvL01ha2VmaWxlLmFtOgogICAgICAgICAgICAtIGRlZnVuLmggYWRkZWQgYXMgcGFydCBvZiBtYWtlaW5mby4KCiAgICAqIG1ha2VpbmZvL21ha2VpbmZvLmM6CiAgICAgICAgICAgIC0gZGVmaW5lIGxvb2tpbmdfYXQgbW92ZWQgaW50byBoZWFkZXItZmlsZSwgYmVjYXVzZQogICAgICAgICAgICAgIHdlIG5lZWQgaXQgaW4gZGVmdW4uYwoKICAgICogbWFrZWluZm8vaW5zZXJ0aW9uLmM6CiAgICAgICAgICAgIC0gc29tZSBtaW5vciBjaGFuZ2VzIG1hZGUgdG8gc3VwcG9ydCB0aGUgQGRlZi4uLgogICAgICAgICAgICAgIHRoaW5ncyBpbiBIVE1MLgoKICAgICogbWFrZWluZm8vbGFuZy5jOiAoY21fYWNjZW50X2dlbmVyaWMpCiAgICAgICAgICAgIC0gYnVnIGZpeGVkLiBVc2luZyB1bWxhdXQgKGFjY2VudCAuLi4pCiAgICAgICAgICAgICAgd291bGQgcHJvZHVjZSAmQSBvbmx5IGlmIGFuIHVtbGF1dCBmb2xsb3dzCiAgICAgICAgICAgICAgYW4gZW1wdHkgbGluZS4KICAgICAgICAgICAgLSBidWcgZml4ZWQuIEJlY2F1c2UgdGhpbmdzIGxpa2UgJnRpbGRlOyAmZ3JhdmU7CiAgICAgICAgICAgICAgYW5kICZjaXJjOyBkbyBub3QgZXhpc3QgYXMgc3RhbmRhbG9uZSBjaGFyYWN0ZXJzCiAgICAgICAgICAgICAgaW4gSFRNTC4KICAgICAgICAgICAgLSBjbV9zcGVjaWFsX2NoYXIgbm93IHByb2R1Y2UgY29ycmVjdCBIVE1MIGZvcgogICAgICAgICAgICAgIEBPe30gYW5kIEBve30uCiAgICAgICAgICAgIC0gd2FybmluZyB1c2luZyBfKCJUZXh0IikgaW5zdGVhZCAiVGV4dCIgKGdldHRleHQpLgoKICAgICogbWFrZWluZm8vY21kcy5jOgogICAgICAgICAgICAtIEB1cmwgZml4ZWQuIERpc3BsYXkgdGhlIGdpdmVuIFRleHQuCgogICAgKiBkb2MvdGV4aW5mby50eGk6CiAgICAgICAgICAgIC0gY29ycmVjdGVkIHRoZSByZWZlcmVuY2VzIGZvciBAdXJlZiwgYmVjYXVzZQogICAgICAgICAgICAgIHRoZXkgd2VyZSBnaXZlbiBhcyAidXJsIiBpbnN0ZWFkIG9mICJ1cmVmIi4KICAgICAgICAgICAgICBAdXJlZiBoYXMgdGhyZWUgYXJndW1lbnRzLCBzbyBzaG93IHRoZW0gaW4KICAgICAgICAgICAgICBjb21tYW5kIGxpc3QuCgpXZWQgRmViIDEwIDE3OjI3OjU4IDE5OTkgIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiBkb2MvdGV4aW5mby50eGk6IFJld3JpdGUgZm9yIG92ZXJmdWxsIGJveC4KClR1ZSBGZWIgIDkgMTk6MDM6MTYgMTk5OSAgS2FybCBCZXJyeSAgPGthcmxAZ251Lm9yZz4KCgkqIGRvYy90ZXhpbmZvLnR4aTogRG9jdW1lbnQgbW9yZSBIVE1MIG91dHB1dCBzdHVmZi4gIEJhc2VkIG9uIGVzcgogCQljaGFuZ2VzLgoJKiBtYWtlaW5mby9tYWNyby5jLAoJKiBtYWtlaW5mby9tYWNyby5oLAoJKiBtYWtlaW5mby9tYWtlaW5mby5jOiBEbyBhbGlhcyBhbmQgZGVmaW5mb2VuY2xvc2UgZXhwYW5zaW9uLgogIAkJRnJvbSBlc3IuCgpNb24gRmViICA4IDE0OjQxOjA3IDE5OTkgIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiBtYWtlaW5mby9jbWRzLmM6IE5ldyBjb21tYW5kcyBAYWxpYXMgYW5kIEBkZWZpbmZvZW5jbG9zZS4KCUZyb206ICJFcmljIFMuIFJheW1vbmQiIDxlc3JAc25hcmsudGh5cnN1cy5jb20+LgoKCSogZG9jL3RleGluZm8udHhpOiBEb2N1bWVudCBAZG9jdW1lbnRsYW5ndWFnZSBhbmQKIAkJQGRvY3VtZW50ZW5jb2RpbmcuCgoJKiBtYWtlaW5mby9jbWRzLmM6IE1vdmUgYWNjZW50IHN1cHBvcnQgdG8gbGFuZy5jLgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAoYWRkX2NoYXIpOiBhZGQgJm5ic3A7IHJhdGhlciB0aGFuIGFuIDgtYml0CiAJCWNoYXIgZm9yIGh0bWwuCgoJKiBtYWtlaW5mby9NYWtlZmlsZS5hbSAobWFrZWluZm9fU09VUkNFUyk6IGFkZCBsYW5nLltjaF0uCgoJKiBkb2MvdGV4aW5mby50eGk6IEJlIGV2ZW4gbW9yZSBlbXBoYXRpYyB0aGF0IEB1cmwgaXMgbm90CgkJdHlwaWNhbGx5IHdoYXQgeW91IHdhbnQuCgkqIGRvYy90ZXhpbmZvLnR4aTogRG9jdW1lbnQgdGhhdCBtYWNybyBjYWxscyBtdXN0IHVzZSBlbXB0eQogCQlicmFjZXMuCgoJKiBpbmZvL3Nlc3Npb24uYzogRG8gbm90IHRyYW5zbGF0ZSBub2RlIHBvaW50ZXJzLiAgRnJvbSBLYXJsIEUuCgoJKiBtYWtlaW5mby9jbWRzLmMgKGNtX2Rmbik6IFVzZSA8ZGZuPi4gIFN1Z2dlc3Rpb24gZnJvbSBFbGkuCgpTdW4gRmViICA3IDA3OjAwOjA4IDE5OTkgIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiBtYWtlaW5mby9tYWtlaW5mby5jOiBNYWtlIC0taHRtbCBpbXBseSAtLW5vLXNwbGl0LgoKCSogbWFrZWluZm8vY21kcy5jIChjbV90b3ApOiBkb24ndCBjb3JlIGR1bXAgaWYgdGhlIHRvcCBub2RlIGhhcyBubwogCQluZXh0LgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAocmVwbGFjZV93aXRoX2V4cGFuc2lvbik6IGNvbXBhcmUgbGVuZ3RoCgkJYWZ0ZXIgZXhwYW5zaW9uIHdpdGggbGVuZ3RoIG9mIGZ1bGwgaW5wdXQgdGV4dCBiZWZvcmUKCQlleHBhbnNpb24sIG5vdCBqdXN0IHRoZSBsZW5ndGggb2YgdGhlIGV4cGFuZGVkIHRleHQuCiAgICAgICAgICAgICAgICBCdWcgKGNvbnRlbnRzMikgcmVwb3J0ZWQgYnkga2FtYS4KCgkqIGluZm8vaW5mb2RvYy5jIChjcmVhdGVfaW50ZXJuYWxfaW5mb19oZWxwX25vZGUpOiBnZXR0ZXh0IGNhbGxzCgkJdG8gaGVscCBtc2cgc3RyaW5ncy4gRnJvbSBVbHJpY2guCgpGcmkgRmViICA1IDE3OjM1OjEzIDE5OTkgIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiB1dGlsL3RleGkyZHZpOiBzZXQgbWFrZWluZm89IGZvciBsYXRleCBjYXNlLgoKCSogZG9jL3RleGluZm8udHhpIChAZGVmdHAgc3VtbWFyeSk6IHJlZiBEYXRhIFR5cGVzIG5vZGUgdGhhdAoJCWFjdHVhbGx5IGRlc2NyaWJlcyBpdC4gIEZyb20ga2FtYS4KClRodSBGZWIgIDQgMDc6Mzk6MTAgMTk5OSAgS2FybCBCZXJyeSAgPGthcmxAZ251Lm9yZz4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmM6IFRha2UgaXQgYmFjay4gIEVtYWNzIGluZm8gbmVlZHMgdGhhdCB0ZXh0CiAJCWJlZm9yZSB0aGUgQ1RSTC1fLgoJKiBtYWtlaW5mby9tYWtlaW5mby5jOiBEb24ndCBib3RoZXIgdG8gb3V0cHV0IHRoZSBoZWFkZXIgKFRoaXMgaXMKIAkJLSwgcHJvZHVjZWQgLi4uKSB0byBzdGRvdXQuCgoJKiBkb2MvdGV4aW5mby50eGkgKE90aGVyIEluZm8gRGlyZWN0b3JpZXMpOiBNZW50aW9uIHRoYXQgZGlyIGZpbGVzCiAJCW11c3QgYmUgbmFtZWQgZGlyLgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAoY21fdXJlZik6IGltcGxlbWVudCBvcHRpb25hbCB0aGlyZAogCQlhcmd1bWVudC4KCSogZG9jL3RleGluZm8udHhpICh1cmVmKTogZG9jdW1lbnQgaXQuCglTdWdnZXN0aW9uIGZyb206IENoYXJsZXMgS2FybmV5IDxrYXJuZXlAcHBwbC5nb3Y+CgoJKiBkb2MvTWFrZWZpbGUuYW0gKGluZm9fVEVYSU5GT1MpOiBwdXQgdGV4aW5mby50eGkgZmlyc3Qgc28KCQlVUERBVEVEIHJlZmxlY3RzIGl0cyBtb2R0aW1lLCByYXRoZXIgdGhhbiBpbmZvLXN0bmQncy4KCgkqIG1ha2VpbmZvL2ZpbGVzLmMgKGZ1bGxfcGF0aG5hbWUpIFshV0lOMzJdOiAjZW5kaWYgaW4gd3JvbmcgcGxhY2UuCglGcm9tOiBZb3NoaWtpIEhheWFzaGkgPGc3NDA2ODVAa29tYWJhLmVjYy51LXRva3lvLmFjLmpwPgoKCSogbWFrZWluZm8vY21kcy5jIChjbV91cmwpOiBSZW1vdmUgVVJMOiBmcm9tIG91dHB1dC4gIEl0J3MgdWdseS4KCldlZCBGZWIgIDMgMTY6MDU6MDMgMTk5OSAgS2FybCBCZXJyeSAgPGthcmxAZ251Lm9yZz4KCgkqIGluZm8vaW5mb2RvYy5jOiBEb2MgZml4LCB6ZXJvIG5vdCBvaC4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKGFkZF9jaGFyKTogZG9uJ3QgaWdub3JlIGlmCgkJb25seV9tYWNyb19leHBhbnNpb24sIGV2ZW4gaW4gbm9faGVhZGVycyBjYXNlLgoJCU90aGVyd2lzZSBtZW51IGl0ZW1zIGRvbid0IGdldCByZW1lbWJlcmVkIGFuZCBkZWZhdWx0aW5nCgkJZG9lc24ndCB3b3JrLiAgTWFjcm9zIHN1Y2shCgoJKiB1dGlsL3RleGkyZHZpIChjb21tb24pOiBpbmNsdWRlIG9yaWdfcHdkLgoJKGxhbmd1YWdlKTogcmVndWVzcyBmb3IgZWFjaCBmaWxlIGlmIG5vdCBleHBsaWNpdGx5IHNldC4KClR1ZSBGZWIgIDIgMTY6MjI6MzIgMTk5OSAgS2FybCBCZXJyeSAgPGthcmxAZ251Lm9yZz4KCgkqIGNvbmZpZ3VyZS5pbjogQnVtcCB0byAzLjEyZCBub3cuCgpNb24gRmViICAxIDE0OjQ2OjQ1IDE5OTkgIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiBtYWtlaW5mby9pbnNlcnRpb24uYyAoY21faXRlbSk6IEZvciBpdGVtaXplIGFuZCBlbnVtZXJhdGUsIGRvCgkJPC9wPiBiZWZvcmUgdGhlIDxsaT4gZm9yIGh0bWwuIEJ1ZyBmcm9tIEVsaS4KCgkqIG1ha2VpbmZvL2luZGV4LmM6IEluc3RhbGxlZCBjaGFuZ2UgaW4gaW5kZXguYzoKCU1vbiBEZWMgMjggMTI6NTA6MTQgMTk5OCAgTWF0dGhldyBGcmVkZXR0ZSAgPGZyZWRldHRlQG1pdC5lZHU+CgkJKiBtYWtlaW5mby5jIChpbmRleF9hZGRfYXJnKTogVXNlIHhzdHJkdXAgb24gaW5wdXRfZmlsZW5hbWUKCQl3aGVuIHNhdmluZyBpdCBpbiB0aGUgbmV3IGluZGV4IGVudHJ5LgoKCSogdXRpbC90ZXhpMmR2aTogY2QgLyBiZWZvcmUgY2QgJG9yaWdfcHdkIGluIGNhc2Ugb2YgRE9TIGRyaXZlCiAJCWNoYW5nZS4KClN1biBKYW4gMzEgMTY6Mzk6MDEgMTk5OSAgS2FybCBCZXJyeSAgPGthcmxAZ251Lm9yZz4KCgkqIHV0aWwvdGV4aTJkdmk6IFVzZWQgc2VkIHRvIGV4cGFuZCBvbmx5IHRoZSBAe2lmLH10ZXggcGFydHMgb2YKCXRoZSBzb3VyY2Ugc2luY2UgbWFrZWluZm8ncyBjb25kaXRpb25hbCBvcHRpb25zIGFyZW4ndCByZWFkeSB5ZXQKCQkoZnJvbSBBa2ltKS4KCUFsc28gdXNlICR7MSsiJEAifSBmb3IgRGlnaXRhbCBVbml4ICIkQCIgZXhwYW5zaW9uIGJ1ZyAoZnJvbSBOb2FoKS4KCgkqIHV0aWwvaW5zdGFsbC1pbmZvLmM6IERvYyBmaXggZnJvbSBFbGkuCgoJKiBkb2MvdGV4aW5mby50eGk6IE9vcHMsIHNhaWQgd2UgbG9va2VkIGZvciAucG5nIHR3aWNlLgoKU2F0IEphbiAzMCAxNzoxODoxNCAxOTk5ICBLYXJsIEJlcnJ5ICA8a2FybEBnbnUub3JnPgoKCSogaW5mby9zZXNzaW9uLmMgKGZvcndhcmRfbW92ZV9ub2RlX3N0cnVjdHVyZSk6IHJlbW92ZSB0YW5nbGVkCgljb2RlIHRvIG1lcmVseSBwcmludCB3b3JkcyBpbnN0ZWFkIG9mIG51bWJlcnM7IHRvbyBoYXJkIHRvIHRyYW5zbGF0ZS4KCgkqIGluZm8vc2Vzc2lvbi5jOiBNaXNzaW5nIF8ncyBmb3IgbW9yZSBpMThuLiAgRnJvbSBUcm9uZC4KCgkqIGRvYy9NYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEluY2x1ZGUgdHhpLW5vLnRleCBmcm9tIFRyb25kLgoKU3VuIEphbiAyNCAwOToyODoxMiAxOTk5ICBLYXJsIEJlcnJ5ICA8a2FybEBnbnUub3JnPgoKCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBVc2UgZGpncHAgYnkgaXRzZWxmIGluc3RlYWQgb2YgbGlzdGluZwoJCWVhY2ggZmlsZSBzZXBhcmF0ZWx5IChuZXcgZmVhdHVyZSBpbiBhdXRvbWFrZSAxLjQpLgoKCSogbWFrZWluZm8vaW5zZXJ0aW9uLmMgKGJlZ2luX2luc2VydGlvbik6IGZvciBxdW90YXRpb24sIGFsd2F5cwoJCWluY3JlbWVudCBjdXJyZW50X2luZGVudCBldmVuIGlmIGh0bWwgb3V0cHV0LCB3aHkgbm90LgoJCShPdGhlcndpc2UgbXVzdCBub3QgZGVjcmVtZW50IGN1cnJlbnRfaW5kZW50IGluIGVuZF9pbnNlcnRpb24uKQoKCSogZG9jL3RleGluZm8udHhpOiBNb3JlIG92ZXJmdWxsIGJveCBmaXhlcy4KCgkqIG1ha2VpbmZvL2luc2VydGlvbi5jOiBBZGQgc29tZSBhc3NlcnRpb25zIGFuZCB0aGUgYmVnaW5uaW5ncyBvZgogCQloYW5kbGluZyBAdGV4LgoKCSogZG9jL3RleGluZm8udHhpOiBGaXggb3ZlcmZ1bGwgYm94ZXMsIGJ1dCB0YWJsZXMgb2YgY29udGVudHMgYXQKIAkJdGhlIGZyb250LgoKCSogdXRpbC90ZXhpMmR2aTogQ2FuJ3QgcGFzcyAtLW5vLWlmaW5mbyAtLWlmdGV4IHRvIG1ha2VpbmZvIHlldCwKIAkJaXQncyBub3QgcmVhZHkuCgpTYXQgSmFuIDIzIDEwOjIyOjE2IDE5OTkgIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiB1dGlsL3RleGkyZHZpOiBQYXNzIC0tbm8taWZpbmZvIC0taWZ0ZXggdG8gbWFrZWluZm8uCgpGcmkgSmFuIDIyIDE5OjA5OjQ5IDE5OTkgIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiBkb2MvdGV4aW5mby50eGk6IEluY2x1ZGUgdmVyc2lvbi50ZXhpIGJlZm9yZSBAc2V0dGl0bGUgc28KIAkJQHZhbHVle1ZFUlNJT059IGdldHMgZXhwYW5kZWQgaW4gdGhlIGh0bWwgdGl0bGUuICBGcm9tIGthbWEuCgoJKiBUaGVzZSBwYXRjaGVzIGZyb20gVGltIFNpbmdsZXRhcnkgPHRhbG9uQGNsYXJrLm5ldD4uCgkqIG1ha2VpbmZvL21ha2VpbmZvLmM6IFNpbXBsaWZ5IGFuZCBpbXByb3ZlIGh0bWwgbWVudXMuCgkqIG1ha2VpbmZvL2luc2VydGlvbi5jIChiZWdpbl9pbnNlcnRpb24pOiBzaW1wbGlmeSBodG1sIG1lbnUgY2FzZQogCQlhbmQgc2V0IGhhZF9tZW51X2NvbW1lbnRhcnkuCgkqIG1ha2VpbmZvL2luc2VydGlvbi5oIChoYWRfbWVudV9jb21tZW50YXJ5KTogZGVjbGFyZSBuZXcgZ2xvYmFsLgoJKiBtYWtlaW5mby9ub2RlLmggKGdsZWFuX25vZGVfZnJvbV9tZW51KTogZGVjbGFyZS4KCSogbWFrZWluZm8vbm9kZS5jIChnbGVhbl9ub2RlX2Zyb21fbWVudSk6IG5ldyBhcmcgdG8gc3BlY2lmeSB3aGF0CiAJCXR5cGUgb2YgcmVmZXJlbmNlIHRvIHJlbWVtYmVyIGFzLgoKCURhdGU6IFN1biwgMjkgTm92IDE5OTggMDk6MjE6MDEgLTA1MDAgKEVTVCkKCUZyb206IFRpbSBTaW5nbGV0YXJ5IDx0c2luZ2xlQHRhbG9uLmNsYXJrLm5ldD4KCVRvOiB0ZXhpbmZvLXByZXRlc3RAdHVnLm9yZwoJU3ViamVjdDogZXhwbGFuYXRpb24gb2YgcHJldmlvdXMgcGF0Y2hlcwoKCT4gVGhlc2UgZGlmZnMgaW50cm9kdWNlIHNvbWUgbm9uLXRyaXZpYWwgY2hhbmdlcyBpbnRvIHZlcnkKCT4gc2Vuc2l0aXZlIHBhcnRzIG9mIG1ha2VpbmZvLCBhbmQgaXQgaXMgaGFyZCB0byBqdWRnZSB0aGVtIHdpdGhvdXQKCT4ga25vd2luZyB3aGF0IGV4YWN0bHkgZG8gdGhleSBzb2x2ZS4KCglBdCBhIGhpZ2ggbGV2ZWwsIHRoZXNlIHBhdGNoZXMgZml4IChvciBhdCBsZWFzdCBzaWduaWZpY2FudGx5IGltcHJvdmUpCgl0aGUgaHRtbCBjb252ZXJzaW9uIG9mIG1lbnVzLiAgU3BlY2lmaWNhbGx5LCB0aGV5IGZpeCBidWdzIGluIHRoZQoJY29udmVyc2lvbiBvZiBtZW51IGNvbW1lbnRhcnkgYW5kIGRldGFpbG1lbnUgZW50cmllcy4KCglUaGUgbWVudSBjb21tZW50YXJ5IGZpeGVzIHJlcXVpcmUgc29tZSBqdXN0aWZpY2F0aW9uOiAgVGhlIHVucGF0Y2hlZAoJbWFrZWluZm8gYXR0ZW1wdHMsIHdpdGggbWFueSBidWdzLCB0byBwbGFjZSBtZW51IGNvbW1lbnRhcnkgb3V0c2lkZQoJdGhlIDxtZW51PiBieSBhZGRpbmcgPC91bD4gYW5kIDx1bD4gdGFncy4gIFdoaWxlIEkgdW5kZXJzdGFuZCB0aGUKCW1vdGl2YXRpb24gZm9yIHRoaXMsIHRoYXQgdGhlcmUgbWlnaHQgYmUgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0Cgk8cD4gd2l0aGluIDxtZW51PiwgSSdtIG5vdCBhd2FyZSBvZiBhbnkgc3VjaCBicm93c2VyIGFuZCBkb24ndCBzZWUgYW55Cgljb21wZWxsaW5nIHJlYXNvbiB0byBjb250aW51ZSB0aGUgPC91bD4ga2x1ZGdlLgoKCUNlcnRhaW5seQoJCQk8bWVudT4KCQkJPGxpPkZpcnN0IHBhcmFncmFwaC4KCQkJIDxwPlNlY29uZCBwYXJhZ3JhcGguCgkJCTxsaT5TZWNvbmQgaXRlbS4KCQkJPC9tZW51PgoJaXMgdmFsaWQgaHRtbCEKCglBbnl3YXksIGhlcmUncyB3aGF0IG15IHBhdGNoZXMgZG86CgoJMSkgRGVsZXRlZCB0aGUgYDxoND5NZW51PC9oND4nIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBtZW51LiAgVXNpbmcKCSAgIGA8aDQ+JyBpcyB3cm9uZyBzaW5jZSBtZW51cyBkb24ndCB1c3VhbGx5IGNvbWUgYWZ0ZXIgYW4gYGgzJwoJICAgaGVhZGVyLiAgYDxiPicgbG9va3MgdGhlIHNhbWUgb24gbW9zdCBicm93c2VycywgYnV0IG15IG9waW5pb24gaXMKCSAgIHRoYXQgdGhlcmUncyBubyBuZWVkIGZvciBhbnkgaGVhZGVyIGF0IGFsbCEKCgkyKSBEZWxldGVkIHRoZSBgPGxpPicga2x1ZGdlIGF0IHRoZSBiZWdpbmluZyBvZiBlYWNoIG1lbnUuICBJdCdzIG5vCgkgICBsb25nZXIgbmVlZGVkIHNpbmNlIEknbSBkZWxldGluZyB0aGUgPC91bD4ga2x1ZGdlLgoKCTMpIFJlcGxhY2UgYGluX21lbnVfcGFyYScsIGRlY2xhcmVkIHN0YXRpYyBpbiBtYWtlaW5mby5jOmFkZF9jaGFyKCkKCSAgIHdpdGggYGhhZF9tZW51X2NvbW1lbnRhcnknLCBkZWNsYXJlZCBnbG9iYWxseS4gIE1vZGlmaWVkCgkgICBpbnNlcnRpb24uYzpiZWdpbl9pbnNlcnRpb24oKSB0byBpbml0aWFsaXplIGhhZF9tZW51X2NvbW1lbnRhcnkgdG8KCSAgIDEgd2hlbiBiZWdpbm5pbmcgYSBtZW51LiAgTm93IHRoZXJlJ3MgZW5vdWdoIHN0YXRlIGluZm9ybWF0aW9uIGZvcgoJICAgbWVudSBjb21tZW50YXJ5IHRvIGJlIHByb2Nlc3NlZCB3aXRoaW4gPG1lbnU+IC4uLiA8L21lbnU+OyB0aGUKCSAgIGNvbW1lbnRhcnkgY2FuIGJlIHNlcGVyYXRlZCBmcm9tIHRoZSByZXN0IG9mIHRoZSBtZW51IGJ5IGJyYWNrZXRpbmcKCSAgIGl0IGJldHdlZW4gPHA+J3MuCgoJICAgTm90ZSB0aGF0IHRoZSBmaXJzdCBwYXRjaCBoYWQgYSBidWcgaW5pdGlhbGl6aW5nCgkgICBoYWRfbWVudV9jb21tZW50YXJ5OyB0aGUgc2Vjb25kIHBhdGNoIGZpeGVzIHRoaXMgYnVnLgoKCTQpIENoYW5nZWQgdGhlIHNlbWFudGljcyBvZiB0aGUgYXJndW1lbnQgdG8KCSAgIG5vZGUuYzpnbGVhbl9ub2RlX2Zyb21fbWVudSgpLiAgUHJldmlvdXNseSwgZ2xlYW5fbm9kZV9mcm9tX21lbnUoKQoJICAgb25seSBjYWxsZWQgcmVtZW1iZXJfbm9kZV9yZWZlcmVuY2UoKSB3aGVuIHRoZSBhcmd1bWVudCB3YXMKCSAgIG5vbi16ZXJvLiAgQnV0IGFkZF9jaGFyKCkgZGlkbid0IGNhbGwgYGdsZWFuX25vZGVfZnJvbV9tZW51KDEpJwoJICAgd2hlbiBwcm9jZXNzaW5nIGRldGFpbG1lbnUgZW50cmllcy4gIEluIG90aGVyIHdvcmRzLCBkZXRhaWxtZW51CgkgICBlbnRyaWVzIGRpZG4ndCBnZXQgcmVnaXN0ZXJlZCBhcyByZWZlcmVuY2VzLCB3aGljaCBsZWFkIHRvIHRoZSBodG1sCgkgICBjb252ZXJzaW9uIG9mIGRldGFpbG1lbnUgZW50cmllcyBub3QgcHJvZHVjaW5nIHByb3BlciBocmVmcyEKCgkgICBUaGUgbmV3IHNlbWFudGljcyBhcmUgdGhhdCBnbGVhbl9ub2RlX2Zyb21fbWVudSBhbHdheXMgY2FsbHMKCSAgIHJlbWVtYmVyX25vZGVfcmVmZXJlbmNlKCksIGJ1dCBjYWxscyBpdCB3aXRoIGBtZW51X3JlZmVyZW5jZScgd2hlbgoJICAgdGhlIGZpcnN0IGFyZyB0byBnbGVhbl9ub2RlX2Zyb21fbWVudSgpIGlzIDEgYW5kIHdpdGgKCSAgIGBmb2xsb3dlZF9yZWZlcmVuY2UnIG90aGVyd2lzZS4gIE5vdywgZGV0YWlsbWVudSBlbnRyaWVzIGdldAoJICAgcmVnaXN0ZXJlZCBhcyBgZm9sbG93ZWRfcmVmZXJlbmNlJyAobm9ybWFsIG1lbnUgZW50cmllcyBzdGlsbCBnZXQKCSAgIHJlZ2lzdGVyZWQgYXMgYG1lbnVfcmVmZXJlbmNlJykgYW5kIHRoZSBodG1sIGNvbnZlcnNpb24gcHJvZHVjZXMKCSAgIHByb3BlciBocmVmcy4KCgk1KSBUaGUgYWJvdmUgY2hhbmdlcyBtYWRlIGl0IHBvc3NpYmxlIHRvIHN0cmVhbWxpbmUgdGhlIHNlY3Rpb24gb2YKCSAgIGFkZF9jaGFyKCkgdGhhdCBkZWFscyB3aXRoIGh0bWwgbWVudSB0ZXh0LgoKCTYpIEluIGFuIG90aGVyd2lzZSB1bnJlbGF0ZWQgY2hhbmdlLCByZXdyb3RlIGEgc2VjdGlvbiBvZgoJICAgZ2xlYW5fbm9kZV9mcm9tX21lbnUgdG8gbm8gbG9uZ2VyIHVzZSBgZ290byBzYXZlX25vZGU7Jy4KCgpUaHUgSmFuIDIxIDEyOjU1OjQyIDE5OTkgIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiBkb2MvaW5mby1zdG5kLnRleGk6IE9LLCBsZXQncyB0cnkgcmVzdG9yaW5nIHRoZSBAaW5jbHVkZQogCQl2ZXJzaW9uLnRleGkgd2l0aCB0aGUgbmV3IGF1dG9tYWtlLgoKCSogbWFrZWluZm8vY21kcy5jOiBJbXByb3ZlIEhUTUwgQHBvdW5kcywgQGJ1bGxldCwgZXRjLgoKCSogZG9jL01ha2VmaWxlLmFtIChpbnN0YWxsLXRleCk6IG5ldyB0YXJnZXQuCgkoRVhUUkFfRElTVCk6IEluY2x1ZGUgdHhpLT8/LnRleC4KCXR4aS1kZS50ZXg6IG5ldyBmaWxlIGZyb20ga2FtYS4KCgkqIE1ha2VmaWxlLmFtIChBVVRPTUFLRV9PUFRJT05TKTogQnVtcCB0byAxLjQuCgkoaW5zdGFsbC10ZXgpOiBuZXcgdGFyZ2V0LgoKCSogdXRpbC90ZXhpMmR2aTogUmVzdG9yZSAiJEAiIGZvciBleHBsaWNpdG5lc3MgaW4gbWFpbiBsb29wLgoKCSogZG9jL01ha2VmaWxlLmFtICgqLjEpIFtURVhJTkZPX01BSU5UXTogQ29uZGl0aW9uYWxpemUuCgoJKiBjb25maWd1cmUuaW4gKEFDX1BSRVJFUSk6IEJ1bXAgdG8gMi4xMy4KCShURVhJTkZPX01BSU5UKTogRGVmaW5lIHRoaXMgQU1fQ09ORElUSU9OQUwuCgoJKiBkb2MvdGV4aW5mby50eGk6IERvY3VtZW50IHRoYXQgdGhlIEhUTUwgb3V0cHV0IG5hbWUgaXMgZGVyaXZlZAogCQlmcm9tIEBzZXRmaWxlbmFtZS4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKGNvbnZlcnRfZnJvbV9sb2FkZWRfZmlsZSk6IFVzZSBAc2V0ZmlsZW5hbWUKCQlmb3IgYmFzZW5hbWUgb2YgaHRtbCBvdXRwdXQuCgoJKiBkb2MvdGV4aW5mby50eGkgKHVybCk6IFVzZSBleGFtcGxlLm9yZyBmb3IgdGhlIGV4YW1wbGUuCgoJKiBtYWtlaW5mby9jbWRzLmMgKGNtX3VybCk6IEB1cmwgc2hvdWxkIG5vdCBwcm9kdWNlIGEgbGluaywgc29ycnkKIAkJdG8gc2F5LgoKV2VkIEphbiAyMCAxNjozMTo1NSAxOTk5ICBLYXJsIEJlcnJ5ICA8a2FybEBnbnUub3JnPgoKCSogdXRpbC90ZXhpbmRleC5jLAoJKiB1dGlsL2luc3RhbGwtaW5mby5jLAoJKiBtYWtlaW5mby9tYWtlaW5mby5jLAoJKiBpbmZvL2luZm8uYzogSXQncyAxOTk5LgoKCSogZG9jL2luZm8udGV4aSAoQWR2YW5jZWQgaW5mbyBjb21tYW5kcyk6IEZpeCB0eXBvcyBmcm9tIEdpbGRlYS4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKGVuZF9vZl9zZW50ZW5jZV9wKTogZG9uJ3QgY2hlY2sgbmVnYXRpdmUKCQlhcnJheSBvZmZzZXQuCglGcm9tOiBFbnJpY28gU2Nob2x6IDxlbnJpY28uc2Nob2x6QHdpcnRzY2hhZnQudHUtY2hlbW5pdHouZGU+CgpTdW4gSmFuIDE3IDE2OjQyOjE2IDE5OTkgIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiB1dGlsL3RleGkyZHZpOiBSZXN0b3JlIC0tYmF0Y2gsIGhhbmRsZSBjaGFuZ2luZyBlc2NhcGUgY2hhcmFjdGVyCgkJbW9yZSBjbGVhbmx5LiAgRnJvbSBBa2ltIChhcyBhbHdheXMpLgoKVGh1IEphbiAxNCAxNjo0Nzo0MSAxOTk5ICBLYXJsIEJlcnJ5ICA8a2FybEBnbnUub3JnPgoKCSogY29uZmlndXJlLmluIChBTExfTElOR1VBUyk6IEFkZCBuby4KCUZyb206IFRyb25kIEVuZHJlc3RvbCA8dHJvbmRAYWdhbWVtbm9uLmd0Zi5vbC5ubz4KCgkqIHV0aWwvdGV4aTJkdmk6IERvYyBmaXggZnJvbSBBa2ltIGFuZCBkbyBub3QgYWx3YXlzIGV4aXQgMSBmcm9tIHRyYXAuCglBbmQgaXQncyAxOTk5LgoKCSogZG9jL3RleGluZm8udHhpIChpbWFnZSk6IERvY3VtZW50IGltYWdlbmFtZS5wZGYuCgoJKiBBcHBseSB0aGlzIGNoYW5nZSBmcm9tIEVsaToKCiAgMTk5OC0xMS0yMCAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCgkgICogbWFrZWluZm8vbWFrZWluZm8uaCAobWV0YV9jaGFyX3Bvcyk6IE5ldyB2YXJpYWJsZS4KCSAgKiBtYWtlaW5mby9tYWtlaW5mby5jIChpbml0X3BhcmFncmFwaCk6IEluaXRpYWxpemUgaXQuCgkgIChhZGRfY2hhcik6IFVzZSBNRVRBIHRvIGNyZWF0ZSBhIG5vbi1icmVha2FibGUgc3BhY2UgY2hhcmFjdGVyLgoJICAoYWRkX21ldGFfY2hhcik6IE5ldyBmdW5jdGlvbi4KCSAgKGVuZF9vZl9zZW50ZW5jZV9wKTogRG9uJ3QgaGFuZGxlIGNoYXJhY3RlcnMgYXQgbWV0YV9jaGFyX3BvcyBhcwoJICBub3JtYWwgc2VudGVuY2UgZW5kZXJzLgoJICAoZmx1c2hfb3V0cHV0KTogT25seSB1bk1FVEEgdGhlIG5vbi1icmVha2luZyBzcGFjZSBjaGFyYWN0ZXIuCgkgIFJlc2V0IG1ldGFfY2hhcl9wb3MgdG8gemVyby4KCSAgKGRvX2ZsdXNoX3JpZ2h0X2luZGVudGF0aW9uKTogQ2FsbCBhZGp1c3RfYnJhY2VzX2ZvbGxvd2luZy4KCSAgKGluZGVudCk6IExpa2V3aXNlLgoJICAoY21fdmFsdWUpOiBTYXZlIGFuZCByZXN0b3JlIHRoZSB2YWx1ZSBvZiBtZXRhX2NoYXJfcG9zLgoJICAoZXhwYW5zaW9uKTogTGlrZXdpc2UuCgkgICogbWFrZWluZm8vbWFjcm8uYyAobWVfZXhlY3V0ZV9zdHJpbmdfa2VlcF9zdGF0ZSk6IFNhdmUgYW5kCgkgIHJlc3RvcmUgdGhlIHZhbHVlIG9mIG1ldGFfY2hhcl9wb3MuCgkgICogbWFrZWluZm8vbm9kZS5jIChjbV9ub2RlKTogU2F2ZSBhbmQgcmVzdG9yZSB0aGUgdmFsdWUgb2YKCSAgbWV0YV9jaGFyX3Bvcy4KCSAgKiBtYWtlaW5mby9jbWRzLmMgKGNtX2FjY2VudCk6IE1ha2UgdGhlIGRvdCB3ZSBhZGQgZHVlIHRvCgkgIEBkb3RhY2NlbnQgYmUgYSBtZXRhLWNoYXJhY3Rlci4KCSAgKGNtX2NvZGUsIGNtX2Rmbik6IENhbGwgYWRkX21ldGFfY2hhciB0byBpbnNlcnQgdGhlIGNsb3NpbmcKCSAgcXVvdGUuCgkgIChjbV9jaXRlKTogQ2FsbCBhZGRfY2hhciBpbnN0ZWFkIG9mIGFkZF93b3JkLgoKVGh1IEphbiAgNyAxODowNDoyNiAxOTk5ICBLYXJsIEJlcnJ5ICA8a2FybEBnbnUub3JnPgoKCSogdXRpbC90ZXhpMmR2aTogSGFuZGxlIHBkZiBmaWxlcyBtb3JlIGNsZWFubHkuICBGcm9tIEFraW0uCgpXZWQgSmFuICA2IDE3OjQ5OjExIDE5OTkgIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiBtYWtlaW5mby9tYWtlaW5mby5jIChjbV9pbWFnZSk6IENoZWNrIGZvciAucG5nIGFsc28uCgpTdW4gRGVjIDIwIDA3OjU0OjQ3IDE5OTggIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiB1dGlsL3RleGkyZHZpOiBBZGQgLS1wZGYuCgoJKiB1dGlsL3RleGkyZHZpOiBOZXcgb3B0aW9uIC1AIHRvIHVzZSBAaW5wdXQgYW5kIEBub25zdG9wbW9kZSwgaW4KCQljYXNlIHRleGluZm8gaXMgcHJlbG9hZGVkLgoJRnJvbTogS2hpbWVua28gVmljdG9yIDxraGltQHNjaDU3Lm1zay5ydT4KCURhdGU6IFN1biwgMjAgRGVjIDE5OTggMDI6MDQ6MTIgKzAzMDAgKEVFVCkKClNhdCBEZWMgMTkgMTc6Mzc6MzcgMTk5OCAgS2FybCBCZXJyeSAgPGthcmxAZ251Lm9yZz4KCgkqIGRvYy90ZXhpbmZvLnR4aSAoTXVsdGl0YWJsZSBDb2x1bW4gV2lkdGhzKTogbGVhZGluZyB6ZXJvIG9rIGZvcgogCQlAY29sdW1uZnJhY3Rpb25zLgoKCSogdXRpbC90ZXhpMmR2aTogTmV3IHZlcnNpb24gZnJvbSBBa2ltLCBwbHVzIC0tcXVpZXQgaXMgbGlrZQogCQktLWJhdGNoLCBldGMuCgpGcmkgRGVjIDE4IDE3OjIyOjQ0IDE5OTggIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiBkb2MvdGV4aW5mby50eGk6IERvY3VtZW50IHRoYXQgdGhlIFRleGluZm8gc291cmNlIGNhbid0IGJlCglhcmJpdHJhcmlseSBvcmRlcmVkIChmb3IgcHJpbnQpIGV2ZW4gaWYgYWxsIHBvaW50ZXJzIGFyZSBzdXBwbGllZC4KCgkqIG1ha2VpbmZvL2luc2VydGlvbi5jIChlbmRfaW5zZXJ0aW9uKTogSW4gaXRlbWl6ZSBjYXNlLAoJCWNsb3NlX2luc2VydGlvbl9wYXJhZ3JhcGggc28gQGVuZCBpdGVtaXplIGNhdXNlIGEgbGluZSBicmVhay4KICAgICAgICBSZXBvcnQgZnJvbTogU2VyZ2VpIFBva3JvdnNreSA8cG9rQG5ic3AubnNrLnN1PgogICAgICAgIERhdGU6IFN1biwgMjIgTm92IDE5OTggMTk6NDU6MjEgKzA3MDAgKEdNVCkKClR1ZSBEZWMgMTUgMTY6MjE6NTEgMTk5OCAgS2FybCBCZXJyeSAgPGthcmxAZ251Lm9yZz4KCgkqIGRvYy90ZXhpbmZvLnR4aTogTW9yZSBmaXhlcyBmcm9tIE9sZWcuCgoJKiBjb25maWd1cmUuaW46IEJ1bXAgdmVyc2lvbiB0byAzLjEyYyBmb3IgbmV4dCBwcmV0ZXN0LgoKCSogdXRpbC9pbnN0YWxsLWluZm8uYyAob3Blbl9wb3NzaWJseV9jb21wcmVzc2VkX2ZpbGUpCgkJW1NUUklQX0RPVF9FWEVdOiBsb2dpYyBmb3IgY29tcHJlc3Npb25fcHJvZ3JhbSBhc3NpZ25tZW50CgkJd2FzIHJldmVyc2VkLgoJRnJvbTogd2xlc3Rlc0B3bGVzdGVzLnVuY2cuZWR1CgpTYXQgRGVjIDEyIDE4OjAyOjQ4IDE5OTggIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiBNZXJnZWQgdGhlc2UgY2hhbmdlcyBmcm9tIEFuZHJlYXM6CgoxOTk4LTEyLTA2ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5jcy51bmktZG9ydG11bmQuZGU+CgoJKiBtYWtlaW5mby9ub2RlLmMgKGNtX25vZGUpOiBXaGVuIHNlYXJjaGluZyBmb3IgQG1lbnUgZG9uJ3QKCXJlcXVpcmUgYSBzcGFjZSBhZnRlciBpdC4KCjE5OTgtMTItMDYgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmNzLnVuaS1kb3J0bXVuZC5kZT4KCgkqIG1ha2VpbmZvL2NtZHMuYyAoY21fdG9wKTogZnJlZSB0b3BfbmFtZSBvbmx5IGFmdGVyIGRvbmUgdXNpbmcgaXQuCgpTYXQgRGVjIDEyIDE1OjQwOjEzIDE5OTggIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiBkb2MvdGV4aW5mby50eGk6IFZhcmlvdXMgdHlwb3MgYW5kIGZpeGVzIGZyb20gT2xlZy4KCgkqIGRvYy90ZXhpbmZvLnR4aTogTW92ZSBAbm9kZSdzIG91dHNpZGUgb2YgQGlmaW5mbyBmb3IgdGhlIHNha2Ugb2YKIAkJSFRNTCBwcm9jZXNzaW5nLgoKCSogZG9jL3RleGluZm8udHhpICh0aXRsZXBhZ2UpOiBAcHhyZWYgd2FzIG5vdCBpbiBwYXJlbnMuICBGcm9tIE9sZWcuCgpTdW4gRGVjICA2IDE2OjQ5OjA5IDE5OTggIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiBkaXItZXhhbXBsZTogQW1kIGlzIG5vdyBhbS11dGlscy4KCgkqIGRvYy9NYWtlZmlsZS5hbTogUmVpbnN0YXRlIGhlbHAybWFuIGludm9jYXRpb25zIGZvciBkZXZlbG9wbWVudC4KCgkqIGRvYy90ZXhpbmZvLnR4aTogRG9jdW1lbnQgQHNldC4uLmNvbnRlbnRzYWZ0ZXJ0aXRsZXBhZ2UgKGZyb20ga2FtYSkuCglGaXggaW5jb3JyZWN0IHNlbnNlIGZvciBAaW1hZ2UgYW5kIEh1bmdhcmlhbSB0eXBvIChmcm9tIE9sZWcpLgoKCSogbGliL3N5c3RlbS5oOiAjaW5jbHVkZSBsaWJpbnRsLmggaGVyZSBpbnN0ZWFkIG9mIGFjY29uZmlnLmgsIHNvCgkJdGhlIHN5c3RlbSBpbmNsdWRlIGZpbGVzIGhhdmUgYSBjaGFuY2UgdG8gI2RlZmluZSBOVUxMCgkJYmVmb3JlIGl0IGRvZXMuCgkqIGFjY29uZmlnLmg6IFJlbW92ZSBsaWJpbnRsLmggYW5kICNkZWZpbmVzIGZyb20gaGVyZS4KCUZyb206ICJQaGlsaXBwZSBEZSBNdXl0ZXIiIDxwaGRtQG1hY3FlbC5iZT4KCURhdGU6IEZyaSwgNCBEZWMgMTk5OCAwMDo1NjoyNSArMDEwMCAoQ0VUKQoKCSogaW5mby9zaWduYWxzLmM6IFN0YXJ0ICNpZmRlZidzIGluIGNvbHVtbiBvbmUgZm9yIGNjIG9uIHN5c3Y2OAoJCShtNjhrLW1vdG9yb2xhLXN5c3YpLgoJRnJvbTogIlBoaWxpcHBlIERlIE11eXRlciIgPHBoZG1AbWFjcWVsLmJlPgoJRGF0ZTogRnJpLCA0IERlYyAxOTk4IDAwOjU2OjI1ICswMTAwIChDRVQpCgoJKiBpbmZvL2ZpbGVzeXMuYyAoaXNfZGlyX25hbWUpOiB1c2Ugc3RyY3B5IGluc3RlYWQgb2YgYXV0b21hdGljCgkJYXJyYXkgaW5pdGlhbGl6YXRpb24uCglGcm9tOiAiUGhpbGlwcGUgRGUgTXV5dGVyIiA8cGhkbUBtYWNxZWwuYmU+CglEYXRlOiBGcmksIDQgRGVjIDE5OTggMDA6NTY6MjUgKzAxMDAgKENFVCkKCgkqIGNvbmZpZ3VyZS5pbiAoQUxMX0xJTkdVQVMpOiBhZGQgcnUuCgpGcmkgRGVjICA0IDA4OjEyOjExIDE5OTggIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiBpbmZvL2luZm9kb2MuYzogR2V0dGV4dGl6ZSB0aGUgaGVscCBidWZmZXIgc3RyaW5nLgoKU3VuIE5vdiAyOSAxNzoxMjozNSAxOTk4ICBLYXJsIEJlcnJ5ICA8a2FybEBnbnUub3JnPgoKCSogZG9jL3RleGluZm8udHhpOiBVc2UgQGlmbm90dGV4IHJhdGhlciB0aGFuIEBpZmluZm8gZm9yIEB0b3AuCgkobWFrZWluZm8gdG9wKTogZG9jdW1lbnQgdGhpcy4KCgkqIGRvYy9pbmZvLXN0bmQudGV4aSwKCSogZG9jL2luZm8udGV4aTogVXNlIEBpZm5vdHRleCByYXRoZXIgdGhhbiBAaWZpbmZvIGZvciBAdG9wLgoKCSogbWFrZWluZm8vaW5zZXJ0aW9uLmMgKGNtX21lbnUpOiBJbXBsaWNpdGx5IGluc2VydCBAdG9wIGNvbW1hbmQKICAgICAgICBzbyB3ZSBjYW4gY29uc3RydWN0IHRoZSBub2RlIHRyZWUgYXMgdXN1YWwgd2hlbiB3ZSBzZWUgQG1lbnUKIAliZWZvcmUgQG5vZGUuICBQcm9iYWJseSB0aGlzIGlzIHdoZW4gdGhlIGlucHV0IHVzZXMKIAlAaWZpbmZvIGluc3RlYWQgb2YgQGlmbm90dGV4LCBhcyB2aXJ0dWFsbHkgYWxsIGV4aXN0aW5nCiAJbWFudWFscyBkby4KCgkqIG1ha2VpbmZvL2luc2VydGlvbi5jIChkaXNjYXJkX2luc2VydGlvbnMpOiBMZXQgYW55IGNvbmRpdGlvbmFsCgljcm9zcyBub2RlIGJvdW5kYXJ5LiAgKFNvIHRoZSBAdG9wIG5vZGUgY2FuIGJlIHdyYXBwZWQKCWluIEBpZm5vdHRleCwgZm9yIGV4YW1wbGUuKQoKCSogSW5zdGFsbGVkIHRoZXNlOgoKMTk5OC0xMS0yMSAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKGV4cGFuc2lvbik6IFNhdmUgYW5kIHJlc3RvcmUKCWxhc3RfaW5zZXJ0ZWRfY2hhcmFjdGVyIGFuZCBsYXN0X2NoYXJfd2FzX25ld2xpbmUuCgoJKiBtYWtlaW5mby9jbWRzLmMgKGNtX2RpcmNhdGVnb3J5KTogS2lsbCBhbnkgaW5kZW50YXRpb24gYmVmb3JlCglJTkZPLURJUi1TRUNUSU9OLiAgaW5zdGFsbC1pbmZvIHJlbGllcyBvbiB0aGlzLgoKMTk5OC0xMS0yMCAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCgkqIG1ha2VpbmZvL211bHRpLmMgKHN0cnVjdCBlbnYpOiBBZGQgbWV0YV9jaGFyX3BvcyBtZW1iZXIuCgkoc2VsZWN0X291dHB1dF9lbnZpcm9ubWVudCk6IFNhdmUgYW5kIHJlc3RvcmUgbWV0YV9jaGFyX3Bvcy4KCShvdXRfY2hhcik6IE91dHB1dCBjaGFyYWN0ZXJzIGJ5IHN3aXRjaGluZyBlbnZpcm9ubWVudCB0byAjMCBhbmQKCWNhbGxpbmcgaW5zZXJ0LiAgQ2FsbCBmbHVzaF9vdXRwdXQgd2hlbiBhIG5ld2xpbmUgaXMgb3V0cHV0LgoJKG91dHB1dF9tdWx0aXRhYmxlX3Jvdyk6IFVwZGF0ZSB0aGUgY3VycmVudCBlbnZpcm9ubWVudCdzCglvdXRwdXRfcGFyYWdyYXBoX29mZnNldCBhcyB3ZWxsLCBhZnRlciByZW1vdmluZyB0cmFpbGluZwoJd2hpdGVzcGFjZS4gIEZpeCB0eXBvIGluIGxvb3AgaW5kZXguCgkoZG9fbXVsdGl0YWJsZSk6IENhbGwgY2xvc2Vfc2luZ2xlX3BhcmFncmFwaC4KCShlbmRfbXVsdGl0YWJsZSk6IENhbGwgY2xvc2VfaW5zZXJ0aW9uX3BhcmFncmFwaC4gIERvbid0IG91dHB1dAoJYW4gZXh0cmEgbmV3bGluZS4KCjE5OTgtMTEtMjAgIEVsaSBaYXJldHNraWkgIDxlbGl6QGlzLmVsdGEuY28uaWw+CgoJKiBtYWtlaW5mby9tYWtlaW5mby5oIChtZXRhX2NoYXJfcG9zKTogTmV3IHZhcmlhYmxlLgoJKiBtYWtlaW5mby9tYWtlaW5mby5jIChpbml0X3BhcmFncmFwaCk6IEluaXRpYWxpemUgaXQuCgkoYWRkX2NoYXIpOiBVc2UgTUVUQSB0byBjcmVhdGUgYSBub24tYnJlYWthYmxlIHNwYWNlIGNoYXJhY3Rlci4KCShhZGRfbWV0YV9jaGFyKTogTmV3IGZ1bmN0aW9uLgoJKGVuZF9vZl9zZW50ZW5jZV9wKTogRG9uJ3QgaGFuZGxlIGNoYXJhY3RlcnMgYXQgbWV0YV9jaGFyX3BvcyBhcwoJbm9ybWFsIHNlbnRlbmNlIGVuZGVycy4KCShmbHVzaF9vdXRwdXQpOiBPbmx5IHVuTUVUQSB0aGUgbm9uLWJyZWFraW5nIHNwYWNlIGNoYXJhY3Rlci4KCVJlc2V0IG1ldGFfY2hhcl9wb3MgdG8gemVyby4KCShkb19mbHVzaF9yaWdodF9pbmRlbnRhdGlvbik6IENhbGwgYWRqdXN0X2JyYWNlc19mb2xsb3dpbmcuCgkoaW5kZW50KTogTGlrZXdpc2UuCgkoY21fdmFsdWUpOiBTYXZlIGFuZCByZXN0b3JlIHRoZSB2YWx1ZSBvZiBtZXRhX2NoYXJfcG9zLgoJKGV4cGFuc2lvbik6IExpa2V3aXNlLgoJKiBtYWtlaW5mby9tYWNyby5jIChtZV9leGVjdXRlX3N0cmluZ19rZWVwX3N0YXRlKTogU2F2ZSBhbmQKCXJlc3RvcmUgdGhlIHZhbHVlIG9mIG1ldGFfY2hhcl9wb3MuCgkqIG1ha2VpbmZvL25vZGUuYyAoY21fbm9kZSk6IFNhdmUgYW5kIHJlc3RvcmUgdGhlIHZhbHVlIG9mCgltZXRhX2NoYXJfcG9zLgoJKiBtYWtlaW5mby9jbWRzLmMgKGNtX2FjY2VudCk6IE1ha2UgdGhlIGRvdCB3ZSBhZGQgZHVlIHRvCglAZG90YWNjZW50IGJlIGEgbWV0YS1jaGFyYWN0ZXIuCgkoY21fY29kZSwgY21fZGZuKTogQ2FsbCBhZGRfbWV0YV9jaGFyIHRvIGluc2VydCB0aGUgY2xvc2luZwoJcXVvdGUuCgkoY21fY2l0ZSk6IENhbGwgYWRkX2NoYXIgaW5zdGVhZCBvZiBhZGRfd29yZC4KClN1biBOb3YgMjkgMTY6MzA6MDYgMTk5OCAgS2FybCBCZXJyeSAgPGthcmxAZ251Lm9yZz4KCgkqIGluZm8vaW5mby5oLAoJKiBpbmZvL2Zvb3Rub3Rlcy5oIChGT09UTk9URV9MQUJFTCksCgkqIGluZm8vaW5kaWNlcy5jIChBUFJPUE9TX05PTkUpOiBVc2UgTl8gcmF0aGVyIHRoYW4gXy4KCgkqIGluZm8vaW5mb2RvYy5jIChjcmVhdGVfaW50ZXJuYWxfaW5mb19oZWxwX25vZGUsCglmdW5jdGlvbl9kb2N1bWVudGF0aW9uKTogRG8gbm90IHRyYW5zbGF0ZSB0aGUgZW1wdHkgc3RyaW5nLgoJRGF0ZTogRnJpLCAyNSBTZXAgMTk5OCAxNTowOTo0MiArMDQwMAoJRnJvbTogIk9sZWcgUy4gVGlob25vdiIgPHRpaG9ub3ZAZmZrZS1jYW1wdXMubWlwdC5ydT4KCgkqIGRvYy9pbmZvLXN0bmQudGV4aTogTWVudGlvbiBQUklPUiBhcyBhbm90aGVyIGFsaWFzIGZvcgogCQlQUkVWSU9VUy9QYWdlVXAuCgoJKiBkb2MvdGV4aW5mby50eGk6IEBlbXBoIHByb2R1Y2VzIF9lbXBoXyBub3QgKmVtcGgqLiAgU3B1cmlvdXMKCQlqdW5rIGJlZm9yZSBtYWtlaW5mbyBiaXNvbiBleGFtcGxlLgoJRnJvbTogdGlob25vdkBmZmtlLWNhbXB1cy5taXB0LnJ1LgoKMTk5OC0xMS0xNiAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCgkqIG1ha2VpbmZvL2RlZnVuLmMgKGRlZnVuX2ludGVybmFsKTogRG9uJ3QgZXhwYW5kIHRoZSBhcmd1bWVudHMgdG8KCUBkZWZ1biBhbmQgaXRzIGlsay4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKGV4cGFuc2lvbik6IENvcHkgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnRseS0KCWV4ZWN1dGluZyBjb21tYW5kIGFuZCByZXN0b3JlIGl0IGFmdGVyIGV4cGFuc2lvbi4KClN1biBOb3YgMTUgMTc6NDA6NTEgMTk5OCAgS2FybCBCZXJyeSAgPGthcmxAZ251Lm9yZz4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmM6IFJlYXJyYW5nZSB1c2FnZSwgYWxsb3cgLXYgZm9yIHZlcmJvc2UsIG9ubHkKCQlvdXRwdXQgYE1ha2luZycgbGluZSB3aGVuIHZlcmJvc2UuCgkqIG1ha2VpbmZvL21ha2VpbmZvLmggKHByb2Nlc3NfaHRtbCwgcHJvY2Vzc19pbmZvLCBwcm9jZXNzX3RleCk6CiAJCWRlY2xhcmUuCgkqIG1ha2VpbmZvL2NtZHMuYzogVXNlIGNvbmRpdGlvbmFsIGNvbW1hbmRzLgoJKiBtYWtlaW5mby9pbnNlcnRpb24uYyAoZmluZF90eXBlX2Zyb21fbmFtZSk6IEhhbmRsZSByYXdodG1sIGFuZAogCQlyYXd0ZXguCgkoY29uZGl0aW9uYWwgY29tbWFuZHMpOiBBbGxvdyBpbmRpdmlkdWFsIHN3aXRjaGluZyBvbiBhbmQgb2ZmLgoKCSogbWFrZWluZm8vaW5zZXJ0aW9uLmg6IERlY2xhcmUgY29uZGl0aW9uYWxzLgoKMTk5OC0xMS0xNCAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCgkqIG1ha2VpbmZvL2luc2VydGlvbi5jIChiZWdpbl9pbnNlcnRpb24sIGVuZF9pbnNlcnRpb24pOiBVc2UgPHByZT4KCXRvIGNvbnZlcnQgQGRpc3BsYXkgYW5kIEBzbWFsbGRpc3BsYXkgaW50byBIVE1MLgoKCSogbWFrZWluZm8vY21kcy5jIChjbV9hc3Rlcmlzayk6IERvbid0IGluc2VydCBhbiBleHRyYSBuZXdsaW5lIGluCglIVE1MIG1vZGUsIHNpbmNlIGlucHV0IGluY2x1ZGVzIGEgbmV3bGluZSByaWdodCBhZnRlciB0aGUgQCouCgkoY21fc3ApOiBPdXRwdXQgIjxicj48cD5cbiIgYXMgbWFueSB0aW1lcyBhcyB0aGUgYXJndW1lbnQgc2F5cy4KCShjbV91cmwpOiBEb24ndCBpbmNsdWRlICI8YSBocmVmPSIgaW4gdGhlIGFuY2hvciB0ZXh0IGluIEhUTUwKCW91dHB1dC4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKGNtX3B4cmVmKTogRG9uJ3QgYWRkIGEgcGVyaW9kIGFmdGVyIEBweHJlZgoJaWYgaW4gSFRNTCBtb2RlLgoJKGdldF9yZXN0X29mX2xpbmUpOiBBY2NlcHQgYW4gYWRkaXRpb25hbCBhcmd1bWVudCBFWFBBTkQsIGFuZAoJZXhwYW5kIHRoZSByZXN0IG9mIGxpbmUgaWYgaXQncyBub24temVyby4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuCgkoY2xvc2VfcGFyYWdyYXBoKTogV2hlbiBpbiBIVE1MIG1vZGUsIGhvbm9yIHRoZSBmb3JtYXR0aW5nIG9mIHRoZQoJc291cmNlIHBhcmFncmFwaHMgYnkgZ2VuZXJhdGluZyAiPHA+IiBmb3IgZXZlcnkgY2xvc2VkIHBhcmFncmFwaDsKCWZvbGxvdyBpdCBieSBhcyBtYW55ICI8cD4iJ3MgYXMgcGFyYWdyYXBoX3NwYWNpbmcgc3BlY2lmaWVzLgoKU2F0IE5vdiAxNCAxNzozODoyNyAxOTk4ICBLYXJsIEJlcnJ5ICA8a2FybEBnbnUub3JnPgoKCSogbWFrZWluZm8vaW5zZXJ0aW9uLmM6IFVzZSA8dWwgY29tcGFjdD4gaW5zdGVhZCBvZiBkZXByZWNhdGVkIDxtZW51Pi4KCU9taXQgZXh0cmEgPGxpPiBhZnRlciB0aGUgbWVudSBiZWdpbm5pbmcuCgoJKiBtYWtlaW5mby9pbmRleC5jOiBVc2UgPHVsIGNvbXBhY3Q+IGluc3RlYWQgb2YgZGVwcmVjYXRlZCA8bWVudT4uCgpUaHUgTm92IDEyIDE2OjMzOjA5IDE5OTggIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IGFkZCBkamdwcC9jb25maWcuc2VkLgoKCSogaW5mby90ZXJtaW5hbC5jOiAjaW5jbHVkZSA8c3lzL2lvY3RsLmg+IHRvIGRlZmluZSBUSU9DR1dJTlNaCiAJCXVuZGVyIEx5bnhPUy4gIEZyb206IE1hcml1cyBHcm9lZ2VyIDxtYWdAc3lzZ28uZGU+LgoKMTk5OC0xMS0wNiAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uY3MudW5pLWRvcnRtdW5kLmRlPgoKCSogbWFrZWluZm8vaW5zZXJ0aW9uLmMgKGJlZ2luX2luc2VydGlvbik6IENvcnJlY3RseSBoYW5kbGUKCWlmbm90dGV4IGFuZCBpZm5vdGh0bWwuCgkoZW5kX2luc2VydGlvbik6IExpa2V3aXNlLgoKU3VuIE5vdiAgOCAxNzozMDoyMyAxOTk4ICBLYXJsIEJlcnJ5ICA8a2FybEBnbnUub3JnPgoKCSogbWFrZWluZm8vaW5kZXguYywKCSogbWFrZWluZm8vaW5zZXJ0aW9uLmM6IE1lbnUgaXMgc3BlY2lhbCB0byBJbmZvLgoJKiBtYWtlaW5mby9ub2RlLmM6IFRvcCBpcyBhIHNwZWNpYWwgbmFtZSwgZG9uJ3QgdHJhbnNsYXRlIGl0LgoJKiBpbmZvL3Nlc3Npb24uYyAoaW5mb190b3Bfbm9kZSk6IFRvcCBpcyBhIHNwZWNpYWwgbmFtZSwgZG9uJ3QKCQl0cmFuc2xhdGUgaXQuCglGcm9tOiAiT2xlZyBTLiBUaWhvbm92IiA8dGlob25vdkBmZmtlLWNhbXB1cy5taXB0LnJ1Pi4KCkZyaSBOb3YgIDYgMTc6MTg6NDMgMTk5OCAgS2FybCBCZXJyeSAgPGthcmxAZ251Lm9yZz4KCgkqIGNvbmZpZ3VyZS5pbjogVmVyc2lvbiAzLjEyYi4KCgkqIHV0aWwvdGV4aTJkdmk6IEZpeGVzIGZyb20gRWxpIGFuZCBDaHJpc3RvcGggTWFydGluLgoKCU1vbiBPY3QgIDUgMTM6NTg6NTMgMTk5OCAgRGF2ZSBHbG93YWNraSAgPGRnbG9Ac3NlYy53aXNjLmVkdT4KCSogdXRpbC9pbnN0YWxsLWluZm8uYzogRml4IG9mZi1ieS1vbmUgZXJyb3IgaW4gZmluZGxpbmVzKCkKCgkqIHV0aWwvdGV4aW5kZXguYyAodXNhZ2UpOiBhdm9pZCB0cmlncmFwaCB1bnRpbCBVbHJpY2ggZml4ZXMKIAkJcG8ydGJsLnNlZC5pbi4gIEZyb20gUGF1bCBFZ2dlcnQuCgoxOTk4LTExLTAzICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAoY21feHJlZik6IERvbid0IGJ5cGFzcyB0aGUgdGVzdCB0aGF0IGFuCgl4cmVmIGVuZHMgd2l0aCBhIHBlcmlvZCBvciBhIGNvbW1hIGlmIHRoZSByZWZlcmVuY2UgaGFzIGEgc2luZ2xlCglhcmd1bWVudC4KCjE5OTgtMTAtMzEgIEVsaSBaYXJldHNraWkgIDxlbGl6QGlzLmVsdGEuY28uaWw+CgoJKiBtYWtlaW5mby9pbnNlcnRpb24uYyAoZW5kX2luc2VydGlvbik6IERvbid0IGRlY3JlbWVudAoJaW5fZml4ZWRfd2lkdGhfZm9udCB3aGVuIGxlYXZpbmcgYSBtZW51LCB0aGUgcHJldmlvdXMgdmFsdWUgaXMKCXJlc3RvcmVkIGJ5IHBvcF9pbnNlcnRpb24uCgoJKiBtYWtlaW5mby9tYWtlaW5mby5jIChhZGRfY2hhcik6IERvbid0IGluY3JlbWVudCBvdXRwdXRfY29sdW1uCgl0d2ljZSB3aGVuIGEgbmV3bGluZSBpcyBpbnNlcnRlZCBpbnRvIHRoZSBvdXRwdXQuCgoJKiBkb2MvdGV4aW5mby50eGkgKGVtcGggJiBzdHJvbmcpOiBEb2N1bWVudCB0aGUgdXNlIG9mIHVuZGVyc2NvcmVzCglmb3IgQGVtcGggaW4gdGhlIEluZm8gb3V0cHV0LgoKMTk5OC0xMC0zMCAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCgkqIGRqZ3BwL2NvbmZpZy5iYXQ6IE1ha2Ugc3VyZSBpbnRsL3BvMnRibHNlZC5pbiBleGlzdHMgYmVmb3JlIHdlCgliZWdpbiB0aGUgY29uZmlndXJlIGJvb2dpZS4KCSogZGpncHAvY29uZmlnLnNlZDogU2VkIHNjcmlwdCwgdG8gYmUgcnVuIGJ5IGNvbmZpZy5iYXQuCgoJKiBkb2MvaW5mby1zdG5kLnRleGkgKE5vZGUgQ29tbWFuZHMpOiBEb2N1bWVudCB0aGUgbmV3IEcgY29tbWFuZC4KCgkqIGluZm8vc2Vzc2lvbi5jIChpbmZvX2ZvbGxvd19tZW51cyk6IFN0ZXAgb3ZlciBhIHBvc3NpYmxlIGxlYWRpbmcKCXNwYWNlIGluIGEgbWVudSBlbnRyeSBpbiBtZW51c1tdLgoJKHNwbGl0X2xpc3Rfb2Zfbm9kZW5hbWVzKTogUmVuYW1lZCBmcm9tIHNwbGl0X3dvcmRzLiAgU3BsaXQgdGhlCglzdHJpbmcgb24gY29tbWFzLCBub3Qgb24gc3BhY2VzLCBzaW5jZSBhIG1lbnUgZW50cnkgY2FuIGhhdmUKCWVtYmVkZGVkIHdoaXRlc3BhY2UuICBHZXQgcGFzdCB0aGUgbnVsbCBieXRlIGFmdGVyIGluc2VydGluZyBpdC4KCShpbmZvX21lbnVfc2VxdWVuY2UpOiBEb24ndCBjcmFzaCBpZiB0aGVyZSdzIG5vIERJUiBub2RlOyB0cnkKCXVzaW5nIFRvcCBvZiB0aGUgY3VycmVudCBJbmZvIGZpbGUsIGFuZCBpZiB0aGF0IGRvZXNuJ3Qgd29yawoJZWl0aGVyLCB0aHJvdyBhbiBlcnJvci4KCgkqIHV0aWwvdGV4aTJkdmk6IFVzZSAkcGF0aF9zZXAgaW4gVEVYSU5QVVRTLiAgRG9uJ3QgaW5jbHVkZSBhbnkKCWRvdHMgaW4gJHRtcGRpciwgOCszIGZpbGVzeXN0ZW1zIHdvbid0IGxpa2UgdGhhdC4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKHJlYWRlcl9sb29wKTogRXhwYW5kIGFueSBtYWNyb3MgaW4gYSBtZW51CgllbnRyeSB3aGVuIGNyZWF0aW5nIGEgPG1lbnU+IGl0ZW0gZm9yIEhUTUwuICBGaXggYW4gb2ZmLWJ5LW9uZQoJZXJyb3IgaW4gY291bnRpbmcgaW5wdXQgbGluZXMuCgoJKiBtYWtlaW5mby9maWxlcy5jIChleHBhbmRfZmlsZW5hbWUpOiBEb24ndCB0cmVhdCAuZm9vL2JhciBhcwoJYWJzb2x1dGUgZmlsZSBuYW1lLgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAoYWRkX2NoYXIpOiBVc2Ugc3RybmNweSBpbnN0ZWFkIG9mIG1lbWNweSwKCXNpbmNlIHRoZSBidWZmZXJzIG92ZXJsYXAuICBJZiB0aGUgbGluZSBiZWluZyByZWZpbGxlZCBpbmNsdWRlcwoJbm90aGluZyBidXQgdGhlIGluZGVudGF0aW9uIGFuZCB0aGUgd29yZCBiZWluZyBhZGRlZCwgZG8gTk9UIGFkZAoJYW4gZXh0cmEgbmV3bGluZS4KCgkqIHV0aWwvaW5zdGFsbC1pbmZvLmMgKHN0cmlwX2luZm9fc3VmZml4LCBtZW51X2l0ZW1fZXF1YWwsCglvcGVuX3Bvc3NpYmx5X2NvbXByZXNzZWRfZmlsZSkgW19fTVNET1NfX106IEFsbG93IC5pbnogYW5kIC5pZ3ogYXMKCXN1ZmZ1eGVzIGZvciBjb21wcmVzc2VkIGZpbGVzLgoJKG9wZW5fcG9zc2libHlfY29tcHJlc3NlZF9maWxlKTogUmV0dXJuIGFuIGluZGljYXRpb24gd2hldGhlciB3ZQoJb3BlbmVkIGEgZmlsZSBvciBhIHBpcGUuICBVc2UgRk9QRU5fUkJJTiBmcm9tIHN5c3RlbS5oLgoJW1NUUklQX0RPVF9FWEVdOiBVc2UgZ3ppcC5leGUgd2l0aCBhbiBleHBsaWNpdCAuZXhlIGV4dGVuc2lvbi4KCVtPX0JJTkFSWV06IElmIHRoZSBmaWxlIGlzIG5vdCBjb21wcmVzc2VkLCBzd2l0Y2ggaXRzIHN0cmVhbSB0bwoJdGV4dCBtb2RlLgoJKHJlYWRmaWxlKTogQ2xvc2UgdGhlIGZpbGUgb3IgdGhlIHBpcGUuCgkob3V0cHV0X2RpcmZpbGUpOiBDYWxsIHBjbG9zZSB0byBhY3R1YWxseSBydW4gdGhlIGNvbXByZXNzb3IuCgpUaHUgTm92ICA1IDA4OjMzOjA2IDE5OTggIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiBkb2MvdGV4aW5mby50eGk6IGVmZmVjdCAtPiBhZmZlY3QKCUZyb206IEVyaWMgSGFuY2hyb3cgPG9mZmJ5MUBibGFyZy5uZXQ+CgpUdWUgTm92ICAzIDE0OjI2OjU5IDE5OTggIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiBtYWtlaW5mby9tYWtlaW5mby5jIChjbV9pbWFnZSk6IEFsbG9jYXRlIGVub3VnaCBzcGFjZSBmb3IgdGhlCiAJCXplcm8gYnl0ZS4KCgkqIGRvYy90ZXhpbmZvLnR4aTogRG9jdW1lbnQgZXBzZi50ZXggc3RhbmRhcmQgbG9jYXRpb24uCgpUdWUgT2N0IDI3IDEwOjQ1OjQ3IDE5OTggIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiBNYWtlZmlsZS5hbSAoVEVYSU5GT19URVgpOiBhZGQgZGVmaW5pdGlvbi4KCgkqIGRvYy9pbmZvLXN0bmQudGV4aTogQXZvaWQgdW5uZWNlc3Nhcnkgb3ZlcmZ1bGwgYm94ZXMgZnJvbQogCQlleGFtcGxlcy4KCgkqIGRvYy9NYWtlZmlsZS5hbSAoaW5zdGFsbC1kYXRhLWxvY2FsKTogbWlzc2luZyAiLgoKCSogZG9jL01ha2VmaWxlLmFtOiBEb24ndCB0cnkgdG8gcnVuIGhlbHAybWFuIGluIGRpc3RyaWJ1dGlvbi4KCk1vbiBPY3QgMjYgMTM6NDM6NTMgMTk5OCAgS2FybCBCZXJyeSAgPGthcmxAZ251Lm9yZz4KCgkqIGNvbmZpZ3VyZS5pbiAoVEVYTUYpOiBsb3NlIHRoaXMgd2hvbGUgYmxvY2suICBJdCBpcyB0b28gcGFpbmZ1bAoJCXRvIG1haW50YWluIHdpdGggdGhlIGRpZmZlcmVudCB0ZXggaW5zdGFsbGF0aW9ucyBvdXQgdGhlcmUuCgoJKiB1dGlsL01ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogdXBkYXRlLWluZm8gcmVuYW1lZCB0bwogCQlmaXgtaW5mby1kaXIuCgoJKiBtYWtlaW5mby9mb290bm90ZS5oOiBEb2MgZml4LgoKCSogbWFrZWluZm8vbXVsdGkuYzogI2luY2x1ZGUgImluc2VydGlvbi5oIgoJKiBtYWtlaW5mby9jbWRzLmM6ICNpbmNsdWRlICJub2RlLmgiCgkqIG1ha2VpbmZvL21ha2VpbmZvLmgsCgkqIG1ha2VpbmZvL21ha2VpbmZvLmM6IE1vdmUgZ2xvYmFscywgZnVuY3Rpb25zIGZvciBpbnNlcnRpb25zIGFuZAogCQlub2Rlcy4KCSogbWFrZWluZm8vZGVmdW4uYzogI2luY2x1ZGUgImluc2VydGlvbi5oIgoJKiBtYWtlaW5mby9NYWtlZmlsZS5hbTogQWRkIGluc2VydGlvbi5bY2hdLCBub2RlLltjaF0uCgkqIG5vZGUuW2NoXSwgaW5zZXJ0aW9uLltjaF06IE5ldyBmaWxlcy4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMsCgkqIG1ha2VpbmZvL21ha2VpbmZvLmg6IE1vdmUgZ2xvYmFscyBmb3IgY21kcy5oLgoJKiBtYWtlaW5mby9pbmRleC5oOiBJbmNsdWRlIGNtZHMuaC4KCSogbWFrZWluZm8vTWFrZWZpbGUuYW0gKG1ha2VpbmZvX1NPVVJDRVMpOiBBZGQgY21kcy5oLCBjbWRzLmMuCgkqIGNtZHMuYywgY21kcy5oOiBOZXcgZmlsZXMuCgpTYXQgT2N0IDI0IDE3OjI4OjE0IDE5OTggIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiBtYWtlaW5mby9tYWtlaW5mby5jLAoJKiBtYWtlaW5mby9tYWtlaW5mby5oOiBHbG9iYWxzIGZvciBmaWxlcy5jLgoJKiBtYWtlaW5mby9NYWtlZmlsZS5hbSAobWFrZWluZm9fU09VUkNFUyk6IGFkZCBmaWxlcy5bY2hdLgoKVHVlIE9jdCAyMCAxNzowMzoxMCAxOTk4ICBLYXJsIEJlcnJ5ICA8a2FybEBnbnUub3JnPgoKCSogbWFrZWluZm8vTWFrZWZpbGUuYW0gKG1ha2VpbmZvX1NPVVJDRVMpOiBhZGQgbWFjcm8uYyBhbmQKIAkJbWFjcm8uaC4KCSogbWFrZWluZm8vbWFrZWluZm8uYzogTW92ZSBtYWNybyBjb2RlIHRvIG1hY3JvLmggYW5kIG1hY3JvLmMuCgkqIG1ha2VpbmZvL21ha2VpbmZvLmg6IE1vdmUgbWFjcm8gc3R1ZmYgdG8gbWFjcm8uaCwgZXhwb3NlIGdsb2JhbAoJCWxhc3RfY2hhcl93YXNfbmV3bGluZSBmb3IgbWFjcm8uYy4KCSogbWFrZWluZm8vaW5kZXguYywKCSogbWFrZWluZm8vZm9vdG5vdGUuYzogI2luY2x1ZGUgbWFjcm8uaC4KCldlZCBPY3QgIDcgMTY6MjQ6MDcgMTk5OCAgS2FybCBCZXJyeSAgPGthcmxAZ251Lm9yZz4KCgkqIGRvYy9pbmZvLXN0bmQudGV4aTogRm9yIG5vdyBkb24ndCBpbmNsdWRlIHZlcnNpb24udGV4aSBkdWUgdG8KIAkJYXV0b21ha2UgZXJyb3IuCgoJKiBtYWtlaW5mby9pbmRleC5oOiAjaW5jbHVkZSBtYWtlaW5mby5oIGZvciBzYWtlIG9mIENPTU1BTkQgdHlwZS4KCSogbWFrZWluZm8vaW5kZXguYzogTm8gbmVlZCB0byBpbmNsdWRlIG1ha2VpbmZvLmgsIGluZGV4LmggZG9lcwogCQlub3cuCgoJKiBtYWtlaW5mby9tYWtlaW5mby5jOiBNb3ZlIGZvb3Rub3RlIGNvZGUgdG8gZm9vdG5vdGUuYy4KCSogbWFrZWluZm8vbWFrZWluZm8uaDogR2xvYmFscyBmb3IgZm9vdG5vdGUuYy4KCSogbWFrZWluZm8vTWFrZWZpbGUuYW0gKG1ha2VpbmZvX1NPVVJDRVMpOiBhZGQgZm9vdG5vdGUuW2NoXS4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmM6IE1vdmUgZGVmdW4gY29kZSB0byBkZWZ1bi5jLCBuZWNlc3NhcnkKIAkJZ2xvYmFsIHRvIG1ha2VpbmZvLmguCgkqIG1ha2VpbmZvL21ha2VpbmZvLmggKGRlZmF1bHRfaW5kZW50YXRpb25faW5jcmVtZW50KTogbW92ZSBoZXJlCiAJCWZvciBkZWZ1bi5jLgoJKiBtYWtlaW5mby9NYWtlZmlsZS5hbSAobWFrZWluZm9fU09VUkNFUyk6IGFkZCBkZWZ1bi5jLgoKCSogTWFrZWZpbGUuYW06IERvYyBmaXguCgoJKiBjb25maWd1cmUuaW4gKEFDX09VVFBVVCk6IGdlbmVyYXRlIG1ha2VpbmZvL3Rlc3RzL01ha2VmaWxlLgoKCSogbWFrZWluZm8vbWFrZWluZm8uYywKCSogbWFrZWluZm8vbWFrZWluZm8uaCwKCSogbWFrZWluZm8vTWFrZWZpbGUuYW0gKG1ha2VpbmZvX1NPVVJDRVMpOiBhZGQgaW5kZXguW2NoXS4KCkZyaSBPY3QgIDIgMTc6NDI6MjYgMTk5OCAgS2FybCBCZXJyeSAgPGthcmxAZ251Lm9yZz4KCgkqIGxpYi9zeXN0ZW0uaCAoU1RSRVEpOiBuZXcgbWFjcm8uCgpUaHUgT2N0ICAxIDA5OjI2OjU3IDE5OTggIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiBkb2MvdGV4aW5mby50eGk6IERlbGV0ZSBzcGFyZSBjb3B5IHNpbmNlIG91dCBvZiBkYXRlLAoJYWRkIG1ha2VpbmZvIGh0bWwgdG8gbWVudSwKCWRldGFpbG1lbnUgZG9lc24ndCB0YWtlIGJyYWNlcyBpbiBzdW1tYXJ5LgoKV2VkIFNlcCAzMCAxNDozODoyMSAxOTk4ICBLYXJsIEJlcnJ5ICA8a2FybEBnbnUub3JnPgoKCSogbWFrZWluZm8vbWFrZWluZm8uYzogUmVtb3ZlICE9IE5VTEwgY29tcGFyaXNvbnMsCgl4bWFsbG9jL3hyZWFsbG9jIGNhc3RzLCBhc3NpZ25tZW50cyBpbiBpZiBzdGF0ZW1lbnRzLgoKV2VkIFNlcCAzMCAxNDoxNjowMSAxOTk4ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogbWFrZWluZm8vbWFrZWluZm8uYzogUmVtb3ZlIE5VTEwgY2FzdHMgYW5kIHBhcmVudGhlc2VzIGluIHJldHVybgogCQlzdGF0ZW1lbnRzLgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAoYWRkX2xpbmspOiBEb24ndCBhZGQgYSBsaW5rIGlmIHRoZSBub2RlIGlzIG51bGwuCiAJKHJlYWRlcl9sb29wKTogZG9uJ3QgZ2xlYW5fbm9kZV9mcm9tX21lbnUgaWYgZGV0YWlsbWVudSwgZXZlbiBpZiBodG1sLgoJVmFyaW91cyBmb3JtYXR0aW5nIGNoYW5nZXMuCgoJKiBkb2MvaGVscDJtYW46IEFsd2F5cyBleGl0IHN1Y2Nlc3NmdWxseS4KCgkqIG1ha2VpbmZvL01ha2VmaWxlLmFtIChTVUJESVJTKTogYWRkLgoJKG1ha2VpbmZvX1NPVVJDRVMpOiBubyBtb3JlIGh0bWwuaC4KCkZyaSBTZXAgMTEgMTg6NDc6MTUgMTk5OCAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmM6IEZpZGRsZSB3aXRoIGh0bWwgb3V0cHV0LgoKMTk5OC0wOS0wNyAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKG1heWJlX3VwZGF0ZV9leGVjdXRpb25fc3RyaW5ncyk6IE9ubHkKCXJlYWxsb2NhdGUgVEVYVCBpZiB0aGUgZXhpc3Rpbmcgc3RvcmFnZSBpcyB0b28gc21hbGwsIG90aGVyd2lzZQoJbGVhdmUgVEVYVCBhbG9uZS4KCShyZXBsYWNlX3dpdGhfZXhwYW5zaW9uKTogQ2FsbCBtYXliZV91cGRhdGVfZXhlY3V0aW9uX3N0cmluZ3MgdG8KCXJlYWxsb2NhdGUgaW5wdXRfdGV4dCBpZiB3ZSBhcmUgZXhlY3V0aW5nX3N0cmluZywgc2luY2Ugc3RvcmFnZQoJZm9yIGV4ZWN1dGlvbl9zdHJpbmcgaXMgYXNzdW1lZCB0byBiZSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBldmVyeQoJcG9zc2libGUgc3RyaW5nLgoJKG1lX2V4ZWN1dGVfc3RyaW5nKTogeHN0cmR1cCB0aGUgYXJndW1lbnQsIHNvIGNhbGxlZXMgY291bGQgZnJlZWx5CglyZWxvY2F0ZSBpdCBhcyBuZWVkZWQuCgoxOTk4LTA5LTA2ICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAocmVwbGFjZV93aXRoX2V4cGFuc2lvbik6IERvbid0IHJlbWVtYmVyCgltYWNyby1leHBhbnNpb24gcG9pbnRlcnMgaWYgd2UgYXJlIGV4ZWN1dGluZ19zdHJpbmcuCgoxOTk4LTA5LTA1ICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgoKCSogaW5mby9maWxlc3lzLmMgKGluZm9fc3VmZml4ZXMpOiBQdXQgdGhlIGVtcHR5IHN1ZmZpeCBsYXN0IGluIHRoZQoJbGlzdCwgc28gdGhhdCBgZm9vLmluZm8nIGlzIGZvdW5kIGJlZm9yZSBgZm9vJywgaWYgYm90aCBleGlzdC4KCjE5OTgtMDktMDUgIEVsaSBaYXJldHNraWkgIDxlbGl6QGlzLmVsdGEuY28uaWw+CgoJKiBtYWtlaW5mby9tYWtlaW5mby5jIChtYXliZV91cGRhdGVfZXhlY3V0aW9uX3N0cmluZ3MpOiBOZXcKCWZ1bmN0aW9uLCB1cGRhdGVzIGFuIGVudHJ5IGluIGV4ZWN1dGlvbl9zdHJpbmdzW10gYXJyYXkgYWZ0ZXIKCWlucHV0X3RleHQgaXMgcmVsb2NhdGVkIGJ5IHJlcGxhY2Vfd2l0aF9leHBhbnNpb24uCgkocmVwbGFjZV93aXRoX2V4cGFuc2lvbik6IENhbGwgaXQuCgoxOTk4LTA5LTA0ICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAoZXhwYW5kX21hY3JvKTogSWYgYSBtYWNybyBpcyBjYWxsZWQgd2l0aAoJdG9vIG1hbnkgYXJndW1lbnRzLCByZXR1cm4gTlVMTCBhbmQgcHJpbnQgdGhlIGxpbmUgbnVtYmVyIHdoZXJlCgl0aGUgY2FsbCBiZWdpbnMuCgkoZXhlY3V0ZV9tYWNybyk6IElmIGV4cGFuZF9tYWNybyByZXR1cm5zIE5VTEwsIHJldHVybgoJaW1tZWRpYXRlbHkuCgpTdW4gU2VwICA2IDE5OjExOjI4IDE5OTggIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiBtYWtlaW5mby9tYWtlaW5mby5jLAoJKiBtYWtlaW5mby9tYWtlaW5mby5oLAoJKiBtYWtlaW5mby9tdWx0aS5jOiBIdG1sIG91dHB1dC4gIFNwZWNpZmljYWxseSwgdGhlc2UgY2hhbmdlczoKCiAgICBGcmkgSnVsICA0IDIyOjU4OjI5IDE5OTcgIERhdmUgTG92ZSAgPGQubG92ZUBkbC5hYy51az4KCgkgICAgICogZG9jL21ha2VpbmZvLnRleGk6IERvY3VtZW50IEhUTUwgb3V0cHV0LgoKCSAgICAgKiBtYWtlaW5mby9tYWtlaW5mby5jOiBXcmFwIHN0cmluZ3MgaW4gXygpIGluIGJpdHMgY2hhbmdlZCBmb3IKCSAgICAgSFRNTC4KCSAgICAgKGNtX2ltYWdlKTogR2VuZXJhdGUgPGltZz4gZm9yIEhUTUwuCgogICAgU3VuIEp1biAyMiAyMjo1MDowNyAxOTk3ICBEYXZlIExvdmUgIDxkLmxvdmVAZGwuYWMudWs+CgoJICAgICogbWFrZWluZm8vbWFrZWluZm8uYyAoTkFNRURfTk9ERV9BTkNIT1JTKTogTmV3IGRlZmluZS4KCSAgICAodGl0bGUsIG91dHN0YW5kaW5nX25vZGUsIG5vZGVfbnVtYmVyLCBub2RlX25vZGVfcmVmZXJlbmNlcywKCSAgICAgZXNjYXBlX2h0bWwsIGlmaW5mb19hc19odG1sKTogTmV3IHZhcmlhYmxlcy4KCSAgICAodGVudHJ5Lm51bWJlciwgbm9kZV9yZWYubnVtYmVyLCBmbi5udW1iZXIpOiBOZXcgZmllbGRzLgoJICAgIChDb21tYW5kVGFibGUpOiBWYXJpb3VzIGFkZGl0aW9ucyBhbmQgYWx0ZXJhdGlvbnMgZm9yIEhUTUwuCgkgICAgKGxvbmdfb3B0aW9ucyk6IEFkZCBodG1sIGFuZCBuby1pbmZvLWFzLWh0bWwuCgkgICAgKG1haW4pOiBFeHRyYSBjb2RlIGZvciBIVE1MLgoJICAgICh1c2FnZSk6IEFkZCBIVE1MIHN0dWZmLgoJICAgIChleHBhbmRfZmlsZW5hbWUpOiBEZWFsIHdpdGggLmh0bWwuCgkgICAgKGVzY2FwZV9zdHJpbmcpOiBOZXcgcHJvY2VkdXJlLgoJICAgIChjb252ZXJ0X2Zyb21fbG9hZGVkX2ZpbGUpOiBFeHRyYSBjb2RlIGZvciBIVE1MLgoJICAgIChpbml0X2ludGVybmFscyk6IENhbGwgZnJlZV9ub2RlX3JlZmVyZW5jZXMsIGluaXRpYWxpemUKCSAgICBub2RlX251bWJlci4KCSAgICAocmVhZGVyX2xvb3ApOiBQcm9jZXNzIG1lbnUgaXRlbXMgZm9yIEhUTUwgaHlwZXJsaW5rcy4gIEVzY2FwZQoJICAgIEhUTUwgc3BlY2lhbCBjaGFyYWN0ZXJzLgoJICAgIChhZGRfY2hhcik6IENvZGUgZm9yIGxpbmUgYnJlYWtzIGFuZCBwYXJhZ3JhcGggaW5zZXJ0aW9ucyBpbgoJICAgIEhUTUwuCgkgICAgKGZsdXNoX291dHB1dCk6IERvbid0IFVOTUVUQSBmb3IgSFRNTC4KCSAgICAoaW5kZW50KTogRG8gbm90aGluZyBmb3IgSFRNTC4KCSAgICAoY3VycmVudF9pdGVtX2Z1bmN0aW9uKTogQ2FzZSBmb3IgaWZodG1sLgoJICAgIChiZWdpbl9pbnNlcnRpb24pOiBEZWFsIHdpdGggSFRNTCBpbiB2YXJpb3VzIGNhc2VzLgoJICAgIChpbnNlcnRfaHRtbF90YWcpOiBuZXcgcHJvY2VkdXJlLgoJICAgIChjbV9hc3RlcmlzaywgY21fY29weXJpZ2h0LCBjbV9hY2NlbnQsIGNtX2NvZGUsIGNtX2tiZCwKCSAgICBjbV9hbmdsZV9icmFja2V0cywgY21fdmFyLCBjbV9kZWZuLCBjbV92YXIsIGNtX2VtcGgsIGNtX3N0cmluZywKCSAgICBjbV9jaXRlLCBjbV90b3AsIGNtX3hyZWYsIGNtX2luZm9yZWYsIGNtX3VyZWYsIGNtX2RpcmVudHJ5LAoJICAgIGNtX2lmaW5mbywgY21faXRlbSwgcHJvY2Vzc19kZWZ1bl9hcmdzLCBkZWZ1bl9pbnRlcm5hbCwgY21fc3AsCgkgICAgY21fZGlyY2F0ZWdvcnksIGNtX2NlbnRlciwgY21fcmVzdWx0LCBjbV9leHBhbnNpb24sIGNtX2Vycm9yLAoJICAgIGNtX2V4ZGVudCwgaW5kZXhfYWRkX2FyZywgbWFrZV9pbmRleF9lbnRyaWVzX3VuaXF1ZSwKCSAgICBjbV9wcmludGluZGV4LCBjbV9mb290bm90ZSwgb3V0cHV0X3BlbmRpbmdfbm90ZXMsCgkgICAgbWVfZXhlY3V0ZV9zdHJpbmcpOiBDb2RlIGZvciBIVE1MLgoJICAgIChjbV9zaHlwaCk6IE5ldyBwcm9jZWR1cmUuCgkgICAgKGNtX3NwZWNpYWxfY2hhcik6IEFkZCBzdGFydCwgZW5kIGFyZ3MuICBDb2RlIGZvciBIVE1MLgoJICAgIChjbV9lbWFpbCwgY21fdXJsLCBjbV9pLCBjbV9iLCBjbV9yKTogTmV3IHByb2NlZHVyZXMuCgkgICAgKHNlY3Rpb25pbmdfaHRtbCk6IE5ldyBwcm9jZWR1cmUuCgkgICAgKHNlY3Rpb25pbmdfdW5kZXJzY29yZSk6IFVzZSBpdC4KCSAgICAoYWRkX2xpbmspOiBOZXcgcHJvY2VkdXJlLgoJICAgIChyZW1lbWJlcl9ub2RlKTogQWRkIG51bWJlciBmaWVsZCBhbmQgdXBkYXRlIG5vZGVfbnVtYmVyLiAgTm90ZQoJICAgIG5leHQsIGV0Yy4gbm9kZXMgZm9yIEhUTUwuCgkgICAgKGFkZF9lc2NhcGVkX2FuY2hvcl9uYW1lLCBhZGRfYW5jaG9yX25hbWUpOiBOZXcgcHJvY2VkdXJlcy4KCSAgICAoY21fbm9kZSk6IE5ldyBjb2RlIGZvciBIVE1MLiAgTW92ZSBzb21lIG90aGVyIGNvZGUgdG8gbW9yZQoJICAgIHVzZWZ1bCBwbGFjZS4KCSAgICAocmVtZW1iZXJfbm9kZV9yZWZlcmVuY2UpOiBBZGQgbnVtYmVyIGZpZWxkIGFuZCB1cGRhdGUKCSAgICBub2RlX251bWJlci4KCSAgICAocmVtZW1iZXJfbm9kZV9ub2RlX3JlZmVyZW5jZSwgZnJlZV9ub2RlX25vZGVfcmVmZXJlbmNlcywKCSAgICBudW1iZXJfb2Zfbm9kZSk6IE5ldyBwcm9jZWR1cmVzLgoJICAgIChjbV9pZmh0bWwsIGNtX2h0bWwpOiBOZXcgcHJvY2VkdXJlcy4KCSAgICAoZXhwYW5zaW9uKTogVGFrZSBjYXJlIG9mIEhUTUwgZXNjYXBpbmcuCgkgICAgKGNtX3NldHRpdGxlKTogTmV3IHByb2NlZHVyZS4KCSAgICAocmVtZW1iZXJfbm90ZSk6IFNldCBudW1iZXIgZmllbGQuCgoJICAgIERlY2xhcmUgdmFyaW91cyBwcm9jZWR1cmVzIGluIGFkdmFuY2UuCgoJKiBkb2MvdGV4aW5mby50eGk6IE1ha2VpbmZvIC0taHRtbCBkb2N1bWVudGF0aW9uIGZyb20gRGF2ZSBMb3ZlLgoJVHlwbyBmaXhlcyBmcm9tOiBQYXVsIER1Qm9pcyA8ZHVib2lzQHByaW1hdGUud2lzYy5lZHU+LgoKVGh1IFNlcCAgMyAxMToxMTowMSAxOTk4ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogbWFrZWluZm8vTWFrZWZpbGUuYW0gKG1ha2VpbmZvX1NPVVJDRVMpOiBhZGQgaHRtbC5bY2hdLgoKMTk5OC0wOC0yOCAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKGNtX3VyZWYsIGNtX2VtYWlsKTogVXNlIGdldF94cmVmX3Rva2VuIHRvCglnYXRoZXIgYXJndW1lbnRzLgoJKGdldF94cmVmX3Rva2VuKTogS2VlcCB0cmFjayBvZiBpbnB1dCBsaW5lIG51bWJlciB3aGVuIGV4cGFuZGluZwoJeHJlZiBhcmd1bWVudHMuCgpUdWUgQXVnIDI1IDE0OjM2OjQ0IDE5OTggIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiB1dGlsL3RleGkyZHZpOiBFeGl0IHRoZSBzY3JpcHQgaWYgVGVYIGV4aXRzIHdpdGggYmFkIHN0YXR1cy4KCjE5OTgtMDgtMTYgRWxpIFphcmV0c2tpaSA8ZWxpekBpcy5lbHRhLmNvLmlsPgoKCSogaW5mby9pbmRpY2VzLmMgKGluZm9faW5kZXhfYXByb3Bvcyk6IEluIHRoZSAqQXByb3BvcyoKCW1lbnUsIHByaW50IHRoZSBsYWJlbCBmaXJzdCwgdGhlbiB0aGUgSW5mbyBmaWxlIG5hbWUgYW5kCgl0aGUgbm9kZSBuYW1lLiAgTWFrZSB0aGUgSW5mbyBmaWxlIG5hbWUgcGFydCBvZiB0aGUgbWVudQoJZW50cnksIHNvIHRoYXQgYWxsIGVudHJpZXMgYXJlIGRpc3RpbmN0LgoJKGFwcm9wb3NfaW5fYWxsX2luZGljZXMpOiBTY2FuIGVhY2ggSW5mbyBmaWxlIG9ubHkgb25jZSwgdGh1cwoJYXZvaWRpbmcgbXVsdGlwbGUgaWRlbnRpY2FsIGVudHJpZXMgaW4gdGhlICpBcHJvcG9zKiBtZW51LgoJRnJlZSB4c3RyZHVwJ2VkIGJ1ZmZlciwgdG8gYXZvaWQgbGVha2luZyBtZW1vcnkuCgpUaHUgQXVnIDEzIDEyOjU0OjU4IDE5OTggIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiBjb25maWd1cmUuaW46IFNldCB2ZXJzaW9uIHRvIDMuMTJhLgoKCSogTWFrZWZpbGUuYW0gKEFVVE9NQUtFX09QVElPTlMpOiBidW1wIHJlcXVpcmVkIHZlcnNpb24gdG8gMS4zLAogCQlhZGQgcmVhZG1lLWFscGhhIG9wdGlvbi4KCgkqIHV0aWwvdGV4aW5kZXguYyAocHJvZ3JhbV9uYW1lKSwKCSogdXRpbC9pbnN0YWxsLWluZm8uYyAocHJvZ25hbWUpLAoJKiBpbmZvL2luZm8uYyAocHJvZ3JhbV9uYW1lKSwKCSogbWFrZWluZm8vbWFrZWluZm8uYyAocHJvZ25hbWUpOiBoYXJkd2lyZSBwZXIgY29kaW5nIHN0YW5kYXJkcy4KCSogZG9jL2hlbHAybWFuOiBSZW1vdmUgZ2luZm8gc3BlY2lhbCBjYXNlLgoKVHVlIEF1ZyAxMSAxNzo0MToxNSAxOTk4ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogdXRpbC9nZW4tZGlyLW5vZGU6IE5ldyB2ZXJzaW9uIGZyb20gZHJrQHNnaS5jb20uCgpNb24gQXVnIDEwIDEzOjU1OjM3IDE5OTggIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiBkaXItZXhhbXBsZTogQWRkIGVudHJpZXMgZnJvbSBMaW51eC4KCgkqIGluZm8vaW5mby11dGlscy5jIChnZXRfd2luZG93X29mX25vZGUpOiBOZXcgZm4uCgkqIGluZm8vaW5mby11dGlscy5oIChnZXRfd2luZG93X29mX25vZGUpOiBOZXcgZm4uCgkqIChzdHJjaHIsLi4uKSBbIUhBVkVfU1RSQ0hSXTogcmVtb3ZlIHRoZXNlICNkZWZpbmVzLgoJKiBpbmZvL2luZm9kb2MuYyAoaW5mb19maW5kX29yX2NyZWF0ZV9oZWxwX3dpbmRvdyk6IENhbGwKCQlnZXRfd2luZG93X29mX25vZGUgaW5zdGVhZCBvZiBnZXRfaW50ZXJuYWxfaW5mb193aW5kb3cuCglUaGlzIGlzIHNvIHByZXNzaW5nID8gcmVwZWF0ZWRseSB3aWxsIGFsd2F5cyBnZXQgdG8gdGhlIHNhbWUgSGVscAoJCXdpbmRvdyBpbnN0ZWFkIG9mIHBvcHBpbmcgdXAgbmV3IG9uZXMuCglGcm9tOiAiQnJpYW4gSi4gRm94IiA8YmZveEBwcm9zcGVyby5kYXRhd2F2ZS5uZXQ+CgoJKiBpbmZvL3NpZ25hbHMuYzogSWdub3JlIFNJR1dJTkNIIGlmIHdlJ3JlIGluIHRoZSBtaWRzdCBvZiBpdC4KCVdlIG1pZ2h0IGdldCBhIHdob2xlIGxvdCBvZiB0aGVtLiAgTm90aWNlZCBvbiBBZnRlcnN0ZXAuCglGcm9tOiAiQnJpYW4gSi4gRm94IiA8YmZveEBwcm9zcGVyby5kYXRhd2F2ZS5uZXQ+CgoxOTk4LTA3LTI1ICBCcnVubyBIYWlibGUgIDxicnVub0BsaW51aXgubWF0aC51LWJvcmRlYXV4LmZyPgoKICAgICAgICAqIGluc3RhbGwtaW5mby5jIChmaW5kbGluZXMpOiBBbGxvY2F0ZSByb29tIGZvciBvbmUgbW9yZSBsaW5lLAogICAgICAgIHRvIGF2b2lkIGNyYXNoIGlmIGRpciBmaWxlIGhhcyBleGFjdGx5IDUxMiBsaW5lcy4KClR1ZSBBdWcgIDQgMDc6MTQ6MzUgMTk5OCAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIGluZm8vaW5mby5jOiBJbXByb3ZlIGhlbHAgbWVzc2FnZS4KCgkqIGRpci1leGFtcGxlOiBBZGQgbXRvb2xzLgoKRnJpIEp1bCAzMSAxMzoyOTo1MiAxOTk4ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogZG9jL2hlbHAybWFuOiBWYXJpb3VzIGhhY2tzIGZvciB0ZXhpbmZvLgoKCSogZG9jL3RleGluZm8udHhpOiBNYWtlIGRpciBlbnRyaWVzIG1vcmUgY29uc2lzdGVudC4KCgkqIGRvYy9NYWtlZmlsZS5hbTogR2VuZXJhdGUgbWFuIHBhZ2VzIHdpdGggaGVscDJtYW4uCgoJKiB1dGlsL3RleGkyZHZpLAoJKiB1dGlsL2luc3RhbGwtaW5mby5jLAoJKiBtYWtlaW5mby9tYWtlaW5mby5jLAoJKiB1dGlsL3RleGluZGV4LmM6IEltcHJvdmUgaGVscCBtZXNzYWdlLgoKCSogZG9jL2luZm8uNTogSW5pdGlhbC4KCSogZG9jL3RleGluZm8uNTogU2VjdGlvbiA1LgoKVGh1IEp1bCAzMCAxNzozMTo0MiAxOTk4ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogZG9jL2luZm8tc3RuZC50ZXhpLAoJKiBkb2MvdGV4aW5mby50eGk6IFVzZSBBdXRvbWFrZS1zdGFuZGFyZCBWRVJTSU9OIGFuZCBVUERBVEVELgoKV2VkIEp1bCAyOSAxNzozNDo0MSAxOTk4ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogZG9jL3RleGluZm8udHhpOiBEZXNjcmliZSBtYWNybyBsaW1pdGF0aW9ucyBhIGJpdCBtb3JlLgoKCSogZGlyLWV4YW1wbGU6IENvcnJlY3QgbWFrZWluZm8gbGluay4KClR1ZSBKdWwgMjggMTY6NDQ6MDYgMTk5OCAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKHJlbWVtYmVyX2JyYWNlXzEpOiB4c3RyZHVwIGNvbW1hbmQsIHNpbmNlCiAJCXdlIGZyZWUgaXQgbGF0ZXIuCgpNb24gSnVsIDI3IDE2OjI3OjMwIDE5OTggIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiBpbmZvL3Nlc3Npb24uYyAobm9kZV9wcmludGVkX3JlcCk6IE5ldyBmbi4KCUNoYW5nZSBjYWxscy4KCgkqIGluZm8vc2Vzc2lvbi5jIChpbmZvX3NldF9ub2RlX29mX3dpbmRvdyk6IFNpbXBsaWZ5IGJ5IHRha2luZyBuZXcKCQlhcmd1bWVudCB0byBzYXkgd2hldGhlciB0byBjYWxsCgkJc2V0X3JlbWVtYmVyZWRfcGFnZXRvcF9hbmRfcG9pbnQuICBDaGFuZ2UgY2FsbHMuCgkqIGluZm8vaW5kaWNlcy5jOiBDaGFuZ2UgY2FsbC4KCgkqIGluZm8vaW5mby5jOiBSZXdyaXRlIGluaXRpYWwgbWVudS1zZXF1ZW5jZSBmb2xsb3dpbmcgc3R1ZmYgYXMgYQoJCWZ1bmN0aW9uIGluIHNlc3Npb24uYywgYW5kIGNhbGwgaXQuCgoJKiBpbmZvL2luZm9tYXAuYzogRGVmaW5lIGBHJyBhcyBpbmZvX21lbnVfc2VxdWVuY2UuCgkqIGluZm8vc2Vzc2lvbi5oIChpbmZvX21lbnVfc2VxdWVuY2UsIGluZm9fZm9sbG93X21lbnVzKTogZGVjbGFyZQogCQluZXcgZm5zLgoJKiBpbmZvL3Nlc3Npb24uYyAoaW5mb19mb2xsb3dfbWVudXMsIHNwbGl0X3dvcmRzLAoJCSogaW5mb19tZW51X3NlcXVlbmNlKTogTmV3IGZ1bmN0aW9ucyBmb3IgbmV3IGNvbW1hbmQuCgpUaHUgSnVsIDIzIDE2OjQ0OjQyIDE5OTggIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiBpbmZvL3Nlc3Npb24uYyAoaW5mb19zY3JvbGxfb3RoZXJfd2luZG93X2JhY2t3YXJkKTogbmV3IGNvbW1hbmQuCgkqIGluZm8vaW5mb21hcC5jIChpbml0aWFsaXplX2luZm9fa2V5bWFwcyk6IGJpbmQgTS1ERUwgYW5kIE0tcHJpb3IgdG8KCXNjcm9sbC1vdGhlci13aW5kb3ctYmFja3dhcmQuCglSZXBvcnQgZnJvbTogVmxhZGltaXIgQWxleGlldiA8dmxhZGltaXJAY3MudWFsYmVydGEuY2E+CglEYXRlOiAJVHVlLCAyIERlYyAxOTk3IDE0OjU0OjMwIC0wNzAwCgoJKiBpbmZvL2luZm8tdXRpbHMuYyAocHJpbnRlZF9yZXByZXNlbnRhdGlvbik6IElmIElTT19MYXRpbl9wLCBzaG93CgkJY2hhcmFjdGVycyBhcy1pcy4gIERvbid0IGFzc3VtZSBpc2NudHJsKHgpIHJldHVybnMgZmFsc2UKCQlmb3IgbWV0YSBjaGFyYWN0ZXJzLgogICAgICAgIFJlcG9ydCBmcm9tOiBGcmFuY29pcyBQaW5hcmQgPHBpbmFyZEBpcm8udW1vbnRyZWFsLmNhPgoJRGF0ZTogMTUgSmFuIDE5OTggMTc6NDg6NTEgLTA1MDAKCgkqIGluZm8vcGN0ZXJtLmMgKHBjX2luaXRpYWxpemVfdGVybWluYWwpOiBub3cgbm8gbmVlZCB0byBzZXQgaXQKIAkJaGVyZS4KCSogaW5mby9pbmZvLXV0aWxzLmMgKElTT19MYXRpbl9wKTogc2V0IHRvIDEgYnkgZGVmYXVsdC4KCgkqIGRvYy9pbmZvLXN0bmQudGV4aTogRG9jdW1lbnQgU1BDLCBhZGQgZ290by1ub2RlIGFuY2hvci4KCldlZCBKdWwgMjIgMTg6NTg6MzggMTk5OCAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIGluZm8vd2luZG93LmMgKG1lc3NhZ2VfYnVmZmVyX3RvX25vZGUpLAoJKiBpbmZvL3Nlc3Npb24uYyAoa2lsbF9ub2RlKSwKCSogaW5mby9ub2Rlcy5jIChpbmZvX2dldF9ub2RlX29mX2ZpbGVfYnVmZmVyLAogCQlpbmZvX25vZGVfb2ZfZmlsZV9idWZmZXJfdGFncyksCgkqIGluZm8vbWFuLmMgKG1hbnBhZ2Vfbm9kZV9vZl9maWxlX2J1ZmZlciksCgkqIGluZm8vZm9vdG5vdGVzLmMgKG1ha2VfZm9vdG5vdGVzX25vZGUpOiBzZXQgZGlzcGxheV9wb3MgbWVtYmVyCiAJCWluIG5ldyBub2RlLgoKVHVlIEp1bCAyMSAxNDowNDo1MiAxOTk4ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKICAgICAgICAoYWxsIG9mIHRoaXMgaXMgdG8gbWFrZSBTUEMvREVMIG5vdCBtb3ZlIG91dHNpZGUgdGhlIGN1cnJlbnQKCSAgICAgICAgZG9jdW1lbnQsIGkuZS4sIG5vdCB1cCB0aHJvdWdoIGRpcikKCSogaW5mby9pbmZvLXV0aWxzLmggKGluZm9fbGFiZWxfd2FzX2ZvdW5kKTogTW92ZSBmcm9tIGhlcmUuCgkqIChpbmZvX3ByZXZfbGFiZWxfb2Zfbm9kZSk6IERvbid0IHVzZSBpdCBhbnkgbW9yZS4KCSogaW5mby9zZXNzaW9uLmMgKElORk9fTEFCRUxfV0FTX0ZPVU5EKTogTW92ZSB0byBoZXJlLCBhZGQgdGVzdAogCQlmb3IgZmlsZW5hbWUgbm90IGRpci4KIAkoZm9yd2FyZF9tb3ZlX25vZGVfc3RydWN0dXJlKTogQ2hhbmdlIGNhbGxzLCBub3RpY2UgaWYgbm8gbW9yZSBub2Rlcy4KCShiYWNrd2FyZF9tb3ZlX25vZGVfc3RydWN0dXJlKTogQ2hlY2sgZm9yIG1vdmluZyBvdXRzaWRlIGN1cnJlbnQKCWRvY3VtZW50IHRvIGRpci4KCSogaW5mby9maWxlc3lzLmMgKGNvbXByZXNzaW9uX3N1ZmZpeGVzKTogQWRkIGJ6MiBmb3IgYnVuemlwMi4KCShpc19kaXJfbmFtZSk6IE5ldyBmbi4KCSogaW5mby9maWxlc3lzLmg6IERlY2xhcmUgaXQuCgkqIGluZm8vbm9kZXMuYyAoaW5mb19nZXRfbm9kZSwgaW5mb19maW5kX2ZpbGVfaW50ZXJuYWwpOiBVc2UgaXQuCgoJKiBtYWtlaW5mby9tYWtlaW5mby5jOiBTZXQgaW5fZml4ZWRfd2lkdGhfZm9udCB0byBhdm9pZCBtdW5naW5nCiAJCW5vZGUgbmFtZXMuCgpTYXQgSnVsIDE4IDE3OjE0OjEwIDE5OTggIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiBpbmZvL21hbi5jIChyZWFwX2NoaWxkcmVuKTogQ2FsbCB3YWl0IChOVUxMKSwgc2luY2Ugd2UgZG9uJ3QKCQlhY3R1YWxseSB1c2UgdGhlIHJldHVybiBzdGF0dXMgZm9yIGFueXRoaW5nLiAgTkVYVFNURVAgMy4zCgkJZG9lc24ndCBsaWtlIGFuIGludCAqIGV2ZW4gdGhvdWdoIHRoYXQgaXMgdGhlIFBPU0lYCgkJc3BlY2lmaWNhdGlvbi4KCURhdGU6IEZyaSwgMjIgQXVnIDE5OTcgMTM6NTU6NDIgKzAyMDAKCUZyb206ICJGZWxpeCBILiBHYXR6ZW1laWVyIiA8ZnhnQGltaWIucnd0aC1hYWNoZW4uZGU+CglWaWE6IFRob21hcyBFc3NlciA8dGVAaW5mb3JtYXRpay51bmktaGFubm92ZXIuZGU+CgoJKiBpbmZvL3Nlc3Npb24uYyAoa2lsbF9ub2RlKTogUmVzdG9yZSBwb2ludCB3aGVuIHdlIGdvIGJhY2suCgpUaHUgSnVsIDE2IDE4OjU0OjA0IDE5OTggIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiBtYWtlaW5mby9tYWtlaW5mby5jIChCUkFDRV9FTEVNRU5UKTogQWRkIGBjb21tYW5kJyB0byB0aGUgc2F2ZQogCQlzdGFjay4KIAkoTUFZQkVfQlJBQ0VfQVJHUyk6IE5ldyBwb3NzaWJpbGl0eSwgc29tZXdoYXQgbGlrZSBUZVgncwoJICBuZXh0LXRva2VuLWFzLWFyZ3VtZW50LgoJKGNvbW1hbmRfdGFibGUpOiBVc2UgY21fYWNjZW50IGFuZCBNQVlCRV9CUkFDRV9BUkdTIGZvciBhbGwgYWNjZW50cy4KCShyZWFkX2NvbW1hbmQpOiBJbXBsZW1lbnQgTUFZQkVfQlJBQ0VfQVJHUy4KCShpbml0X2JyYWNlX3N0YWNrKTogc2F2ZSBjdXJyZW50IGNvbW1hbmQuCgkocG9wX2FuZF9jYWxsX2JyYWNlKTogcmVzdG9yZSBjdXJyZW50IGNvbW1hbmQuCgkoY21fYWNjZW50KTogbW92ZSBhbG1vc3QgYWxsIGFjY2VudCBjaGFyYWN0ZXJzIHRvIGFmdGVyIHRoZSBhcmd1bWVudC4KCVN1Z2dlc3RlZCBieSBGcmFuLGNvaXMuCgoJKiBpbmZvL2luZm8uYyAodmVyc2lvbl9zdHJpbmcpOiBSZW1vdmUgZGVmbi4KCUNoYW5nZSBjYWxsIGZvciAtLXZlcnNpb24gb3B0aW9uLgoJKiBpbmZvL3Nlc3Npb24uYyAoZGlzcGxheV9zdGFydHVwX21lc3NhZ2VfYW5kX3N0YXJ0KTogSnVzdCB1c2UKIAkJVkVSU0lPTi4KCSogaW5mby9pbmZvLmggKHZlcnNpb25fc3RyaW5nKTogUmVtb3ZlIGRlY2wuCgpUdWUgSnVsIDE0IDE2OjQ2OjU4IDE5OTggIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiBtYWtlaW5mby9tYWtlaW5mby5oOiBEb2MgZml4LgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAodmFsaWRhdGVfZmlsZSk6IERvbid0IGNvbXBsYWluIGFib3V0CiAJCXVucmVmZXJlbmNlZCBhbmNob3JzLgoKCSogZG9jL3RleGluZm8udHhpOiBEb2N1bWVudCBAYW5jaG9yLgoKU3VuIEp1bCAxMiAxNDoxNDo1MCAxOTk4ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAocmVtZW1iZXJfbm9kZSk6IE9ubHkgc2V0IGBjdXJyZW50X25vZGUnIGlmCiAJCXRoaXMgaXMgbm90IGFuIGFuY2hvci4KCgkqIGluZm8vbm9kZXMuYyAoZ2V0X3RhZ3Nfb2ZfaW5kaXJlY3RfdGFnc190YWJsZSk6IERvbid0IHNldAoJbm9kZWxlbiB0byAtMSB3aGVuIGZpeGluZyB1cCB0aGUgc3ViZmlsZSBlbnRyaWVzLCBpdCBtaWdodCBiZSAwCglmcm9tIGFuIGFuY2hvci4KCgkqIGluZm8vbm9kZXMuYyAoZmluZF9ub2RlX29mX2FuY2hvcik6IE9mZnNldCBkaXNwbGF5X3BvcyBmb3IKCWFuY2hvciB0YWdzIGJ5IHRoZSBhbW91bnQgdGhhdCBub2RlIHJlZmVyZW5jZXMgYXJlIG9mZiBieSAoLSAxKS4KClNhdCBKdWwgMTEgMTc6Mzc6MTggMTk5OCAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKGNtX2FuY2hvcik6IEFkZCBvdXRwdXRfY29sdW1uIGZvciBhbmNob3JzCiAJCWVtYmVkZGVkIGluIGEgbGluZS4KCkZyaSBKdWwgMTAgMTY6Mjg6MjEgMTk5OCAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIGluZm8vc2Vzc2lvbi5jIChpbmZvX21lbnVfb3JfcmVmX2l0ZW0pOiBEb24ndCBzZWFyY2ggZm9yIHRoZQoJCXhyZWYgdGV4dCBpZiBpdCdzIGFuIGFuY2hvci4KCSogaW5mby9ub2Rlcy5oIChOX0Zyb21BbmNob3IpOiBOZXcgTk9ERSBmbGFnLgoJKiBpbmZvL25vZGVzLmMgKGZpbmRfbm9kZV9vZl9hbmNob3IpOiBOZXcgZm4uCgkoaW5mb19ub2RlX29mX2ZpbGVfYnVmZmVyX3RhZ3MpOiBIYW5kbGUgYW5jaG9yIGNhc2UuCgpXZWQgSnVsICA4IDE3OjQ4OjU5IDE5OTggIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiBpbmZvL3dpbmRvdy5jICh3aW5kb3dfc2V0X25vZGVfb2Zfd2luZG93KTogU2V0IHdpbmRvdy0+cG9pbnQgdG8KCQlub2RlLT5kaXNwbGF5X3Bvcy4KCVJlbW92ZSB1bm5lZWRlZCBjYXN0cy4KClR1ZSBKdWwgIDcgMDg6MDY6MTQgMTk5OCAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKGFkZF93b3JkX2FyZ3MpIFshVkFfU1BSSU5URl06IFVzZSBidWZmZXIsCgkJbm90IHRoZSB1bmRlY2xhcmVkIHRlbXBfc3RyaW5nLgoJRnJvbTogICAgIFRvYmlhcyBOYWVocmluZyA8bmFlaHJpbmdAZWVldHczLmV0LnR1LWRyZXNkZW4uZGU+CglUbzogICAgICAgZWdjcy1idWdzQGN5Z251cy5jb20KCURhdGU6ICAgICBNb24sIDYgSnVsIDk4IDEzOjUxOjU1ICswMjAwCgpNb24gSnVsICA2IDE3OjQzOjI1IDE5OTggIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiBpbmZvL25vZGVzLmggKE5PREUpOiBBZGQgZGlzcGxheV9wb3MgbWVtYmVyLgoKU3VuIEp1bCAgNSAwODoxNzo0MyAxOTk4ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogaW5mby9ub2Rlcy5oIChJTkZPX1JFRl9MQUJFTCk6IERlZmluZS4KCgkqIHV0aWwvdGV4aTJkdmk6IFJhdGlvbmFsaXplIHVzZSBvZiBgaW5kZXgnIHZzLiBtb3JlIGdlbmVyYWwKIAkJYHhyZWYnLgoKVGh1IEp1bCAgMiAxODo1Mzo0MyAxOTk4ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogbWFrZWluZm8vbWFrZWluZm8uYzogRG9uJ3QgdHJhbnNsYXRlIC1Gb290bm90ZXMsIGl0J3MgYSBtYWdpYwogCQljb29raWUuICBGcm9tIEVsaS4KCldlZCBKdWwgIDEgMDg6NDI6NDEgMTk5OCAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIGRvYy90ZXhpbmZvLnR4aSAodXJsKTogTWlzc2luZyB3b3JkIGBjb21tYW5kJy4KClR1ZSBKdW4gMzAgMTA6MzU6NDggMTk5OCAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIGluZm8vaW5mby5jOiBNaXNzaW5nIFxuIGluIHRyeSAtLWhlbHAgbXNnLgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAoY21fYW5jaG9yKTogTmV3IGZuIGZvciBuZXcgY21kLgoJKFRBR19GTEFHX0FOQ0hPUik6IE5ldyBmbGFnIGZvciB0YWcgZW50cmllcy4KCSh3cml0ZV90YWdfdGFibGVfaW50ZXJuYWwpOiBIYW5kbGUgYW5jaG9yIGNhc2UuCgkoVEFHX0ZMQUdfe3tQUkVWLE5FWFQsVVB9X0VSUk9SLE5PX1dBUk4sSVNfVE9QfSk6IEFkZCBUQUdfRkxBR18gcHJlZml4Cglmb3IgY2xhcml0eSwgY2hhbmdlIHVzZXMuCgoJKiBkb2MvdGV4aW5mby50eGk6IFJlbW92ZSB3YXJuaW5nIGFib3V0IGZvb3Rub3RlcyB3aXRoIEBpdGVtLCB0aGF0CiAJCXdvcmtzIG5vdy4KCk1vbiBKdW4gMjkgMTA6MTc6NTAgMTk5OCAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIGNvbmZpZ3VyZS5pbiAoQU1fQ09ORklHX0hFQURFUik6IFVzZSBzZWNvbmQgYXJndW1lbnQgdG8gYmUgOC4zCgkJY29tcGxpYW50LgoJKiBjb25maWcuaC5pbjogUmVuYW1lIHRvIGNvbmZpZy5pbi4KCgkqIGluZm8vTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpLAoJKiBpbmZvL3Rlcm1pbmFsLmMgW19fTVNET1NfX106IENoYW5nZSAjaW5jbHVkZSB0byBwY3Rlcm0uYyBhbmQKCQlyZW5hbWUgZmlsZS4KClN1biBKdW4gMjggMTQ6Mjk6MjcgMTk5OCAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIGluZm8vTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBBZGQgcGNfdGVybS5jLgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAoSEFWRV9NQUNST1MpOiBSZW1vdmUgdGhpcyBjb25kaXRpb25hbCwgd2UKIAkJYWx3YXlzIHdhbnQgbWFjcm9zIG5vdy4KCgkqIGluZm8vaW5kaWNlcy5jOiBDb3B5cmlnaHQuCgoxOTk4LTA2LTI2ICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgoKCSogbWFrZWluZm8vbWFrZWluZm8uYzogKG9ubHlfbWFjcm9fZXhwYW5zaW9uKTogTmV3IHZhcmlhYmxlLAoJc3VwcHJlc3NlcyBhbGwgZXhwYW5zaW9ucyBleGNlcHQgbWFjcm9zLgoJKHJlcGxhY2Vfd2l0aF9leHBhbnNpb24pOiBOZXcgZnVuY3Rpb24sIHJlcGxhY2VzIGEgcG9ydGlvbiBvZgoJaW5wdXQgdGV4dCB3aXRoIGl0cyBleHBhbnNpb24uICBBdm9pZHMgbW92aW5nIHRoZSB0ZXh0IGFyb3VuZCBpZgoJd2UgYXJlIHBvc2l0aXZlIGl0IHdpbGwgZXhwYW5kIGludG8gaXRzZWxmLiAgSWYgdGhlIGxlbmd0aCBvZiB0aGUKCWV4cGFuZGVkIHRleHQgaXMgdGhlIHNhbWUgYXMgdGhlIGxlbmd0aCBvZiB0aGUgb3JpZ2luYWwgdGV4dCwganVzdAoJcmVwbGFjZXMgdGhlIG9yaWdpbmFsIHRleHQgd2l0aG91dCBtb3ZpbmcgdGhlIHJlc3QuICBSZXN5bmNzIHRoZQoJcmVtZW1iZXJlZCB0ZXh0IHBvaW50ZXJzIHdpdGggdGhlIHJlYWxsb2MnZWQgaW5wdXRfdGV4dCwgd2hlbiBpdAoJaXMgcmVhbGxvYydlZC4KCShyZWFkZXJfbG9vcCk6IFdoZW4gb25seV9tYWNyb19leHBhbnNpb24gaXMgbm9uLXplcm8sIG9ubHkgaGFuZGxlCgltYWNyb3MsIGJ1dCBsZWF2ZSB0aGUgcmVzdCBvZiBpbnB1dCBpbnRhY3QuCgkocmVhZF9jb21tYW5kKTogTm93IHJldHVybnMgYW4gaW50LCB6ZXJvIG1lYW5zIG5vIGtub3duIGNvbW1hbmQgb3IKCW1hY3JvIGlzIGZvdW5kIGFmdGVyIHRoZSBwcmVmaXggY2hhcmFjdGVyOyBhbGwgY2FsbGVycyBjaGFuZ2VkLgoJU3VwcG9ydCBvcGVyYXRpb24gdW5kZXIgbm9uLXplcm8gb25seV9tYWNyb19leHBhbnNpb24uCgkoY21fbm9kZSk6IEV4cGFuZCBvbmx5IHRoZSBtYWNyb3MgaW4gdGhlIEBub2RlIGxpbmUuICBBbGxvY2F0ZSBhbmQKCWdlbmVyYXRlIHRoZSBtYWNyby1leHBhbmRlZCBAbm9kZSBsaW5lIGluIG9uZSBzd2VsbCB3aG9vcC4KCShnbGVhbl9ub2RlX2Zyb21fbWVudSk6IEV4cGFuZCBtYWNyb3MgaW4gbWVudSBlbnRyaWVzLgoJKGdldF94cmVmX3Rva2VuKTogQSBuZXcgYXJndW1lbnQgRVhQQU5ELCB3aGVuIG5vbi16ZXJvLCBtZWFucwoJZXhwYW5kIG1hY3JvcyBpbiB0aGUgZW50aXJlIGJyYWNlLWRlbGltaXRlZCBhcmd1bWVudCBiZWZvcmUKCWxvb2tpbmcgZm9yIHRoZSBuZXh0IGNvbW1hOyBhbGwgY2FsbGVycyBjaGFuZ2VkLgoJKGV4cGFuc2lvbik6IFNhdmUgYW5kIHJlc3RvcmUgYWRkaXRpb25hbCBzdGF0ZSB2YXJpYWJsZXMgaW1wb3J0YW50Cglmb3Igb3V0cHV0IGdlbmVyYXRpb24gbWFjaGluZXJ5LiAgRGlzYWJsZSBpbmRlbnRhdGlvbiBhbmQgZmlsbGluZwoJZHVyaW5nIHRoZSByZWN1cnNpdmUgZXhwYW5zaW9uLCBzbyB0aGF0IHRoZSBvdXRwdXQgYnVmZmVyIG9mZnNldAoJaXMgbm90IGludmFsaWRhdGVkIGJ5IGZpbGxpbmcuCgkobWVfZXhlY3V0ZV9zdHJpbmdfa2VlcF9zdGF0ZSk6IE5ldyBmdW5jdGlvbiwgY2FsbHMKCW1lX2V4ZWN1dGVfc3RyaW5nLCBidXQgc2F2ZXMgYW5kIHJlc3RvcmVzIHN0YXRlIHZhcmlhYmxlcwoJaW1wb3J0YW50IGZvciBvdXRwdXQgZ2VuZXJhdGlvbiwgc28gdGhhdCAtRSBkb2Vzbid0IGNoYW5nZSB0aGUKCWdlbmVyYXRlZCBJbmZvIG91dHB1dC4KCShpbmRleF9hZGRfYXJnLCBjbV9mb290bm90ZSk6IENhbGwgbWVfZXhlY3V0ZV9zdHJpbmdfa2VlcF9zdGF0ZS4KCShleHBhbmRfbWFjcm8pOiBOZXcgZnVuY3Rpb24sIHJldHVybnMgdGhlIG1hY3JvIGV4cGFuc2lvbiBhcyBhCgltYWxsb2MnZWQgc3RyaW5nLgoJKGV4ZWN1dGVfbWFjcm8pOiBDYWxsIGV4cGFuZF9tYWNyby4KCShtZV9leGVjdXRlX3N0cmluZyk6IEF2b2lkIG1lbW9yeSBsZWFrIGJ5IGZyZWVpbmcgaW5wdXRfZmlsZW5hbWUuCgkoZ2V0X3VudGlsX2luX2JyYWNlcywgcmVwbGFjZV93aXRoX2V4cGFuc2lvbiwgYWRkX2NoYXIsCgljbV9mb290bm90ZSwgY21fbWFjcm8sIGNtX3VubWFjcm8sIGdldF9icmFjZV9hcmdzLAoJZXh0cmFjdF9jb2xvbl91bml0KTogVXNlIHRoZSBmYXN0ZXIgbWVtY3B5L21lbW1vdmUgaW5zdGVhZCBvZgoJc3RybmNweS4KClNhdCBKdW4gMjcgMTQ6MTg6NTQgMTk5OCAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIGRvYy9pbmZvLnRleGk6IFVzZSBAc3Vic3Vic2VjdGlvbiBpbnN0ZWFkIG9mCgkJQHVubnVtYmVyZWRzdWJzdWJzZWN0aW9uLCBzaW5jZSBpdCdzIGluIGEgbnVtYmVyZWQgY2hhcHRlci4KCgkqIFN0YXJ0ZWQgaW5zdGFsbGF0aW9uIG9mIGZvbGxvd2luZyBET1MgcGF0Y2hlcyBmcm9tIEVsaS4KPjE5OTgtMDUtMTYgIEVsaSBaYXJldHNraWkgIDxlbGl6QGlzLmVsdGEuY28uaWw+Cj4KPgkqIGluZm8vc2Vzc2lvbi5jIChpbmZvX2dvdG9fbm9kZSk6IERvbid0IHNob3cgdGhlIG5vZGVzIG9mIHRoZQo+CWN1cnJlbnQgSW5mbyBmaWxlIHR3aWNlIGluICpDb21wbGV0aW9ucyouCj4JKiBpbmZvL2VjaG8tYXJlYS5jIChlYV9wb3NzaWJsZV9jb21wbGV0aW9ucyk6IEFjdHVhbGx5IHBhc3MgdGhlCj4JbnVtYmVyIG9mIGNvbXBsZXRpb25zIHRvIHByaW50Zl90b19tZXNzYWdlX2J1ZmZlci4KPgo+CSogaW5mby9tYW4uYyAobWFucGFnZV9ub2RlX29mX2ZpbGVfYnVmZmVyKTogeHN0cmR1cCB0aGUgbm9kZW5hbWUKPgltZW1iZXIgb2YgbWFucGFnZSBub2Rlcywgc2luY2UgdGhlIHRhZ3MgYXJlIGZyZWVkIGFuZCByZWNvbXB1dGVkCj4Jd2hlbiBhIG5ldyBtYW4gcGFnZSBpcyBhZGRlZCB0byAqbWFucGFnZXMqIGZpbGVfYnVmZmVyLgo+CShnZXRfbWFucGFnZV9ub2RlKTogUmVjb21wdXRlIGluZm9fd2luZG93c1tdLT5ub2Rlc1tdIGZvciBhbGwKPgl3aW5kb3dzIHNob3dpbmcgdGhlIG1hbiBwYWdlcyBhZnRlciBub2Rlc1tdLT5jb250ZW50cyBhcmUKPglpbnZhbGlkYXRlZCBieSByZWFsbG9jYXRpb24gb2YgZmlsZV9idWZmZXItPmNvbnRlbnRzLgo+Cj4xOTk4LTA1LTE1ICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgo+Cj4JKiBsaWIvc3lzdGVtLmggKERFRkFVTFRfSU5GT19QUklOVF9DT01NQU5EKSBbX19NU0RPU19fXTogRGVmaW5lIHRvCj4JIj5QUk4iLgo+CSogaW5mby9zZXNzaW9uLmMgKHByaW50X25vZGUpOiBTdXBwb3J0ICI+cHJpbnRlciIgaW4KPglJTkZPX1BSSU5UX0NPTU1BTkQsIHRvIG1lYW4gd3JpdGUgdG8gdGhlIG5hbWVkIGZpbGUvZGV2aWNlIGluc2VhZAo+CW9mIHBpcGluZyB0byBpdCBhcyBhIHByb2dyYW0uCj4JKGtpbGxfbm9kZSk6IENvbXBhcmUgd2luZG93IGluIGFkZGl0aW9uIHRvIHRoZSBub2RlbmFtZSwgd2hlbgo+CWxvb2tpbmcgZm9yIHRoZSBub2RlIHRvIGtpbGwuCj4KPjE5OTgtMDUtMDkgIEVsaSBaYXJldHNraWkgIDxlbGl6QGlzLmVsdGEuY28uaWw+Cj4KPgkqIGxpYi9zeXN0ZW0uaCAoU0VUX1NDUkVFTl9TSVpFX0hFTFBFUikgW19fTVNET1NfX106IERlZmluZSBhIG5ldwo+CW1hY3JvLgo+CSogaW5mby9tLXguYyAoc2V0X3NjcmVlbl9oZWlnaHQpOiBVc2UgU0VUX1NDUkVFTl9TSVpFX0hFTFBFUiwgaWYKPglkZWZpbmVkLiAgSWYgdGhlIHNjcmVlbiBzaXplIGRpZCduIGNoYW5nZSwgcmVkaXNwbGF5IHRoZSBwcmV2aW91cwo+CXNjcmVlbiBjb250ZW50cy4KPgo+CSogaW5mby9pbmZvbWFwLmMgKGluaXRpYWxpemVfaW5mb19rZXltYXBzKSBbX19NU0RPU19fXTogQmluZCBERUwKPgl0byBlYV9kZWxldGUgaW4gdGhlIGVjaG8tYXJlYSBrZXltYXAuCj4JKiBpbmZvL3Nlc3Npb24uYyAoaW5jcmVtZW50YWxfc2VhcmNoKTogSWYgdGhlIGtleSBpcwo+CWlzZWFyY2hfdGVybWluYXRlX3NlYXJjaF9rZXksIGJ1dCBidWZmZXJlZCBpbnB1dCBpcyBwZW5kaW5nLCBkb24ndAo+CWdvYmJsZSB0aGUgRVNDIGtleS4KPgo+CSogaW5mby9pbmZvLmMgKG1haW4pOiBTd2l0Y2ggdGhlIG9yZGVyIHRoZXQgdGVybWluYWxfcHJlcF90ZXJtaW5hbAo+CWFuZCB0ZXJtaW5hbF9jbGVhcl9zY3JlZW4gYXJlIGNhbGxlZCwgdG8gbWFrZSBpdCBjb25zaXN0ZW50IHdpdGgKPgl3aGF0IGluaXRpYWxpemVfaW5mb19zZXNzaW9uIGRvZXMgd2hlbiBjYWxsZWQgd2l0aCBub24temVybyBzZWNvbmQKPglhcmd1bWVudC4gIENhbGwgdGVybWluYWxfdW5wcmVwX3Rlcm1pbmFsIGxhc3QsIGFmdGVyIG1vdmluZyB0aGUKPgljdXJzb3IgdG8gdGhlIGJvdHRvbSBvZiB0aGUgc2NyZWVuLiAgSWYgdXNlcl9maWxlbmFtZSBpcyBvZiB0aGUKPglmb3JtICJkOmZvbyIsIGFkZCAiZDouIiB0byB0aGUgSU5GT1BBVEgsIG5vdCAiZDoiLgo+Cj4JKiBpbmZvL3NpZ25hbHMuYyAoaW5pdGlhbGl6ZV9pbmZvX3NpZ25hbF9oYW5kbGVyKTogU2F2ZSBvbGQKPglTSUdVU1IxIGhhbmRsZXIuCj4JKGluZm9fc2lnbmFsX2hhbmRsZXIpOiBIYW5kbGUgU0lHVVNSMS4KPgo+CSogaW5mby9pbmRpY2VzLmMgKGluZm9fYXByb3Bvcyk6IFByaW50IHRoZSByZXN1bHRzIHRvIHN0ZG91dC4KPgo+MTk5OC0wNS0wMiAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KPgo+CSogbWFrZWluZm8vbWFrZWluZm8uYyAoQUxTT19OVUxMX0RFVklDRSk6IE5ldyBtYWNybywgZm9yIGFsdGVybmF0ZQo+CW51bGwgZGV2aWNlIG5hbWUuCj4KPgkqIGluZm8vbWFuLmMgKGdldF9tYW5wYWdlX2NvbnRlbnRzKTogUmVkaXJlY3Qgc3RkZXJyIG9mIHRoZSBtYW4KPglwYWdlIGZvcm1hdHRlciB0byB0aGUgbnVsbCBkZXZpY2UuCj4JKGV4ZWN1dGFibGVfZmlsZV9pbl9wYXRoKTogVXNlIElTX1NMQVNILgo+Cj4JKiBpbmZvL3Nlc3Npb24uYyAoaW5mb19nYXRoZXJfdHlwZWFoZWFkKSBbX19ESkdQUF9fXTogQ2FsbAo+CXBjX3Rlcm1fY2hhcnNfYXZhaWwgdG8gZ2V0IHRoZSBudW1iZXIgb2YgcGVuZGluZyBjaGFyYWN0ZXJzLgo+Cj4JKiBpbmZvL2ZpbGVzeXMuYyAoY29udmVydF9lb2xzKTogTmV3IGZ1bmN0aW9uLCBjb252ZXJ0cyBET1Mtc3R5bGUKPglFT0xzIHRvIGEgc2luZ2xlIE5ld2xpbmUuCj4JKGZpbGVzeXNfcmVhZF9pbmZvX2ZpbGUsIGZpbGVzeXNfcmVhZF9jb21wcmVzc2VkKTogQ2FsbCBpdC4KPgkoZmlsZXN5c19yZWFkX2NvbXByZXNzZWQpIFtTVFJJUF9ET1RfRVhFXTogVXNlIGV4cGxpY2l0IC5leGUKPglzdWZmaXguCj4JKGZpbGVzeXNfcmVhZF9jb21wcmVzc2VkKTogQ2hlY2sgcmV0dXJuIHN0YXR1cyBvZiBgcGNsb3NlJy4KPgo+MTk5OC0wNS0wMSAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KPgo+CSogaW5mby9maWxlc3lzLmMgKGZpbGVzeXNfcmVhZF9pbmZvX2ZpbGUpOiBBZGQgYWRkaXRpb25hbAo+CXBhcmFtZXRlcjogaXNfY29tcHJlc3NlZC4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuCj4KPgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKGNvbnZlcnRfZnJvbV9sb2FkZWRfZmlsZSk6IENvbXBhcmUgZmlsZQo+CW5hbWVzIHdpdGggRklMRU5BTUVfQ01QLiAgVXNlIE5VTExfREVWSUNFLgo+CShjbV9ub2RlKTogQ29tcGFyZSBmaWxlIG5hbWVzIHdpdGggRklMRU5BTUVfQ01QLgo+CSogaW5mby90aWxkZS5jICh0aWxkZV9maW5kX3N1ZmZpeCwgdGlsZGVfZXhwYW5kX3dvcmQpOiBVc2UKPglJU19TTEFTSC4KPgo+CSogaW5mby9wY190ZXJtLmM6IE5ldyBmaWxlLCBoYW5kbGVzIHRoZSBQQyB0ZXJtaW5hbCBvbiBNUy1ET1MgYW5kCj4JTVMtV2luZG93cy4KPgkqIGluZm8vdGVybWluYWwuYyBbX19NU0RPU19fXTogSW5jbHVkZSBwY190ZXJtLmMuCj4JKiBpbmZvL01ha2VmaWxlLmluIChnaW5mb19TT1VSQ0VTKTogQWRkIHBjX3Rlcm0uYwo+CUFkZCBwY190ZXJtLmMgdG8gZGVwZW5kZW5jaWVzIG9mIHRlcm1pbmFsLm8uCj4KPgkqIGluZm8vc2Vzc2lvbi5jIChpbmZvX2dldF9pbnB1dF9jaGFyKTogUmVhc3NpZ24gdHR5IGFmdGVyIEVPRgo+CWZyb20gYSBub24tc3RkaW4gaW5wdXQgc3RyZWFtLgo+Cj4xOTk4LTA0LTMwICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgo+Cj4JKiBpbmZvL3Nlc3Npb24uYyAoaW5mb19zZXRfaW5wdXRfZnJvbV9maWxlKTogVXNlIGJpbmFyeSBpbnB1dC4KPgkoaW5mb19nY19maWxlX2J1ZmZlcnMpOiBDb21wYXJlIGZpbGUgbmFtZXMgd2l0aCBGSUxFTkFNRV9DTVAuCj4JKiBpbmZvL3NlYXJjaC5jIChza2lwX3doaXRlc3BhY2VfYW5kX25ld2xpbmVzKTogVXNlCj4Jd2hpdGVzcGFjZV9vcl9uZXdsaW5lIG1hY3JvIGluc3RlYWQgb2YgcmVpbnZlbnRpbmcgdGhlIHdoZWVsLgo+CSogaW5mby9ub2Rlcy5jIChpbmZvX2ZpbmRfZmlsZV9pbnRlcm5hbCk6IFVzZSBJU19BQlNPTFVURSBhbmQKPglGSUxFTkFNRV9DTVAuCj4JKGluZm9fbG9hZF9maWxlX2ludGVybmFsKTogQ2FsbCBmaWxlbmFtZV9ub25fZGlyZWN0b3J5IHRvIGZpbmQgb3V0Cj4Jd2hlcmUgdGhlIGJhc2VuYW1lIGJlZ2lucy4KPgkoZ2V0X3RhZ3Nfb2ZfaW5kaXJlY3RfdGFnc190YWJsZSk6IENhbGwgZmlsZW5hbWVfbm9uX2RpcmVjdG9yeS4KPgljb250YWluaW5nX2RpciBvZiAiZDpmb28iIGlzICJkOi4iLCBub3QgImQ6Ii4KPgkoZm9yZ2V0X2luZm9fZmlsZSk6IENvbXBhcmUgZmlsZSBuYW1lcyB3aXRoIEZJTEVOQU1FX0NNUC4KPgkqIGluZm8vbm9kZW1lbnUuYyAoZ2V0X3Zpc2l0ZWRfbm9kZXMpOiBVc2UgRklMRU5BTUVfQ01QIHRvIGZpbmQKPglkdXBsaWNhdGUgbGluZXMuCj4KPgkqIGxpYi9zeXN0ZW0uaCAoUElQRV9VU0VfRk9SSyk6IE5ldyBtYWNyby4KPgkqIGluZm8vbWFuLmMgKGdldF9tYW5wYWdlX2NvbnRlbnRzKTogVXNlIGl0IHRvIGRldGVybWluZSB3aGV0aGVyCj4JdG8gY2FsbCBwaXBlL2ZvcmsvZXhlYyBvciBwb3Blbi9wY2xvc2UgdG8gcnVuIHRoZSBtYW4gcGFnZQo+CWZvcm1hdHRlci4KPgkoZXhlY3V0YWJsZV9maWxlX2luX3BhdGgpOiBTZWFyY2ggZm9yIHRoZSBmaWxlIHdpdGggc2V2ZXJhbCBrbm93bgo+CWV4dGVuc2lvbnMgc3VjaCBhcyAuZXhlLCB3aGVyZSBhcHByb3ByaWF0ZS4KPgo+CSogbGliL3N5c3RlbS5oIChOVUxMX0RFVklDRSk6IEEgbmV3IG1hY3JvLgo+CSogaW5mby9tYWtlZG9jLmMgKG1haW4pOiBVc2UgaXQuCj4JKG1heWJlX2R1bXBfdGFncyk6IFN3aXRjaCBvdXRwdXQgc3RyZW0gdG8gYmluYXJ5IG1vZGUgd2hlbgo+CWFwcHJvcHJpYXRlLgo+CShwcm9jZXNzX29uZV9maWxlKTogVXBkYXRlIGZpbGVfc2l6ZSBhZnRlciByZWFkaW5nIHRoZSBmaWxlLgo+Cj4JKiBpbmZvL2luZm9kb2MuYzogQWRkIFRBQiwgUkVULCBhbmQgYGknIHRvIHRoZSBsaXN0IG9mIGltcG9ydGFudAo+CWNvbW1hbmRzIGluIGluZm9faW50ZXJuYWxfaGVscF90ZXh0Lgo+Cj4JKiBpbmZvL2luZm8uYyAobWFpbik6IFN1cHBvcnQgdGhlIC0tc3BlZWNoLWZyaWVuZGx5IG9wdGlvbi4gIFVzZQo+CVBBVEhfU0VQIHRvIHNlcGFyYXRlIGRpcmVjdG9yaWVzLgo+CShpbmZvX3Nob3J0X2hlbHApIFtfX01TRE9TX19dOiBNZW50aW9uIHRoZSAtLXNwZWVjaC1mcmllbmRseQo+CW9wdGlvbi4KPgo+CSogaW5mby9pbmZvLXV0aWxzLmMgKGZpbGVuYW1lX25vbl9kaXJlY3RvcnkpOiBVc2UgSEFWRV9EUklWRSBhbmQKPglJU19TTEFTSC4KPgkqIGluZm8vaW5kaWNlcy5jIChkb19pbmZvX2luZGV4X3NlYXJjaCwgaW5kZXhfZW50cnlfZXhpc3RzKTogVXNlCj4JRklMRU5BTUVfQ01QIHRvIGNvbXBhcmUgZmlsZSBuYW1lcy4KPgkqIGluZm8vZmlsZXN5cy5jOiBBZGQgIi5pbmYiIHRvIHRoZSBsaXN0IG9mIGtub3duIGV4dGVuc2lvbnMuCj4JTG9vayBmb3IgLnogYmVmb3JlIC5aLCBmb3IgdGhlIHNha2Ugb2YgY2FzZS1pbnNlbnNpdGl2ZQo+CWZpbGVzeXN0ZW1zLiAgQWRkIERPUy1zcGVjaWZpYyBleHRlbnNpb25zIHRvIHdvcmsgYXJvdW5kIDgrMwo+CW5hbWVzcGFjZSByZXN0cmljdGlvbnMuCj4JKGluZm9fYWJzb2x1dGVfZmlsZSk6IE5ldyBmdW5jdGlvbi4KPgkoaW5mb19maW5kX2Z1bGxwYXRoKTogQ2FsbCBpdCBmb3IgY2FuZGlkYXRlcyB3aGljaCBhcmUgYWJzb2x1dGUKPglmaWxlIG5hbWVzLiAgVXNlIElTX1NMQVNIIGFuZCBJU19BQlNPTFVURS4KPgkoaW5mb19maWxlX2luX3BhdGgpOiBVc2UgSVNfU0xBU0guCj4JKGV4dHJhY3RfY29sb25fdW5pdCwgaW5mb19hZGRfcGF0aCk6IFVzZSBQQVRIX1NFUCBpbnN0ZWFkIG9mICI6Ii4KPgkobG9va3VwX2luZm9fZmlsZW5hbWUpOiBDb21wYXJlIGZpbGUgbmFtZXMgd2l0aCBGSUxFTkFNRV9DTVAuCj4JKGZpbGVzeXNfcmVhZF9pbmZvX2ZpbGUpOiBSZWFkIEluZm8gZmlsZXMgaW4gYmluYXJ5IG1vZGUuCj4JKGZpbGVzeXNfZGVjb21wcmVzc29yX2Zvcl9maWxlKTogUmVhZCBJbmZvIGZpbGVzIGluIGJpbmFyeSBtb2RlLgo+CUNvbXBhcmUgZmlsZSBuYW1lcyB3aXRoIEZJTEVOQU1FX0NNUC4gIE9uIE1TLURPUywgYWxsb3cgZmlsZXMKPgl3aG9zZSBuYW1lcyBlbmQgd2l0aCBhIGB6JyBiZSBkZWNvbXByZXNzZWQgd2l0aCBndW56aXAuCj4JKiBpbmZvL2RyaWJibGUuYyAob3Blbl9kcmliYmxlX2ZpbGUpOiBPcGVuIGRyaWJibGUgZmlsZSBpbgo+CUZPUEVOX1dCSU4gbW9kZS4KPgkqIGluZm8vZGlyLmMgKG1heWJlX2J1aWxkX2Rpcl9ub2RlKTogVXNlIElTX1NMQVNILgo+CSogdXRpbC90ZXhpbmRleC5jIChtYWtldGVtcG5hbWUpOiBQdXQgdGhlIG51bWVyaWMgc3VmZml4IGFmdGVyIHRoZQo+CWRvdCwgdG8gc2FsdmFnZSAzIG1vcmUgY2hhcmFjdGVycyBvbiA4KzMgZmlsZXN5c3RlbXMuCj4KPjE5OTgtMDQtMjkgIEVsaSBaYXJldHNraWkgIDxlbGl6QGlzLmVsdGEuY28uaWw+Cj4KPgkqIHV0aWwvdGV4aW5kZXguYyAobWFpbik6IFVzZSBJU19TTEFTSCB0byBmaW5kIHRoZSBiYXNlbmFtZSBvZgo+CWFyZ3ZbMF0uICBMb3NlIHRoZSAuZXhlIHN1ZmZpeCwgaWYgYW55Lgo+CShkZWNvZGVfY29tbWFuZCk6IExvb2sgYXQgJFRFTVAgYW5kICRUTVAgaW4gYWRkaXRpb24gdG8gJFRNUERJUi4KPglVc2UgREVGQVVMVF9UTVBESVIuCj4JKiB1dGlsL3RleGkyZHZpOiBVc2UgZWl0aGVyIGA6JyBvciBgOycgYXMgZGlyZWN0b3J5IHNlcGFyYXRvciBpbgo+CVRFWElOUFVUUywgY29tcHV0ZWQgYXQgcnVuIHRpbWUuICBTYXZlIHByZXZpb3VzIHZlcnNpb25zIG9mIGluZGV4Cj4JZmlsZXMgaW4gYSBzZXBhcmF0ZSBiYWNrdXAgZGlyZWN0b3J5Lgo+CSogdXRpbC9pbnN0YWxsLWluZm8uYyAobWFpbik6IFN1cHBvcnQgYmFja3NsYXNoZXMgaW4gZmlsZSBuYW1lcyBieQo+CXVzaW5nIElTX1NMQVNILiAgQXZvaWQgcmVjb21wdXRpbmcgbGVuZ3RoIG9mIGluZmlsZV9iYXNlbmFtZQo+CXVubmVjZXNzYXJpbHkuICBVc2UgRklMRU5BTUVfQ01QIGZvciBjb21wYXJpbmcgZmlsZSBuYW1lcwo+CWNhc2UtaW5zZW5zaXRpdmVseSwgd2hlcmUgYXBwcm9wcmlhdGUuICBBbGxvdyBmb28uaW5mIGFzIHdlbGwgYXMKPglmb28uaW5mbyB0byBiZSBhbiBJbmZvIGZpbGUgbmFtZS4KPgkqIGxpYi9zeXN0ZW0uaCAoUEFUSF9TRVAsIFNUUklQX0RPVF9FWEUsIEZJTEVOQU1FX0NNUE4sCj4JREVGQVVMVF9UTVBESVIpOiBOZXcgbWFjcm9zLgo+Cj4xOTk4LTA0LTI1ICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgo+Cj4JKiBsaWIvc3lzdGVtLmggKE9fQklOQVJZLCBTRVRfQklOQVJZLCBGT1BFTl9SQklOLCBGT1BFTl9XQklOLAo+CUlTX1NMQVNILCBIQVZFX0RSSVZFLCBJU19BQlNPTFVURSwgRklMRU5BTUVfQ01QLCBQQVRIX1NFUCwKPglIQVZFX0xPTkdfRklMRU5BTUVTKTogTmV3IG1hY3Jvcy4KPgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKGZpbmRfYW5kX2xvYWQpOiBVc2UgT19CSU5BUlkgdG8gZGVjaWRlIHdoZW4KPglyZWFkIHJldHVybmluZyBhIHZhbHVlIGRpZmZlcmVudCBmcm9tIHdoYXQgc3Rfc2l6ZSBzYXlzIGlzIG5vdCBhbgo+CWVycm9yLiAgUmVhbGxvYyB0aGUgYnVmZmVyIGFmdGVyIHdlJ3ZlIHJlYWQgdGhlIGZpbGUuCj4JKHNraXBfZGlyZWN0b3J5X3BhcnQpOiBOZXcgZnVuY3Rpb24sIHNraXBzIGxlYWRpbmcgZGlyZWN0b3J5IGluIGEKPgl3YXkgdGhhdCB3b3JrcyBvbiBET1NJU0ggc3lzdGVtcy4KPgkoZmlsZW5hbWVfbm9uX2RpcmVjdG9yeSwgcGF0aG5hbWVfcGFydCk6IENhbGwgaXQuCj4JKGZpbGVuYW1lX3BhcnQpOiBDYWxsIGZpbGVuYW1lX25vbl9kaXJlY3RvcnkuCj4JKGV4cGFuZF9maWxlbmFtZSwgZnVsbF9wYXRobmFtZSk6IFVzZSBJU19BQlNPTFVURSBhbmQgSVNfU0xBU0guCj4JKGNvbnZlcnRfZnJvbV9maWxlKTogQ2hlY2sgLnR4aSBleHRlbnNpb24gZmlyc3QuCj4JKHNwbGl0X2ZpbGUpOiBTdXBwb3J0IHNwbGl0dGluZyBvdXRwdXQgZmlsZXMgb24gOCszIGZpbGVzeXN0ZW1zLgo+CShtYWluLCBleHRyYWN0X2NvbG9uX3VuaXQpOiBVc2UgUEFUSF9TRVAgaW5zdGVhZCBvZiAnOicuCj4JKGdldF9maWxlX2luZm9faW5fcGF0aCk6IFVzZSBJU19BQlNPTFVURSBhbmQgSVNfU0xBU0guCgoKCSogZG9jL3RleGluZm8udHhpOiBDaGFuZ2VzIGZyb20gRWxpIGZvciBNUy1ET1Mgc3R1ZmYuCgkqIGRvYy9pbmZvLXN0bmQudGV4aTogRml4ZXMgZnJvbSBFbGk6IGhlIGRvY3VtZW50ZWQgYWxsIHRoZQogCQltaXNzaW5nIGtleXMgYW5kIGNvbW1hbmQtbGluZSBvcHRpb25zLCBjb3JyZWN0ZWQKIAkJaW5hY2N1cmFjaWVzIChwcm9iYWJseSBsZWZ0LW92ZXJzIGZyb20gcHJldmlvdXMgdmVyc2lvbnMpLAogCQlhbmQgYWRkZWQgc29tZSBjbGFyaWZpY2F0aW9ucyB3aGVyZSBJIHRob3VnaHQgdGhlIG1hbnVhbAogCQl3YXMgbm90IGNsZWFyIGVub3VnaC4KCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBBZGQgZGpncHAgZmlsZXMuCgoJKiBtYWtlaW5mby9tYWtlaW5mby5jOiBOZXcgbm8tb3AgY29tbWFuZHMgQHNldGNvbnRlbnRzYWZ0ZXJ0aXRsZXBhZ2UKCWFuZCBAc2V0c2hvcnRjb250ZW50c2FmdGVydGl0bGVwYWdlLgoJKiBkb2MvdGV4aW5mby50eGk6IERvY3VtZW50IHRoZSBuZXcgQHNldHssc2hvcnR9Y29udGVudHNhZnRlcnRpdGxlcGFnZQoJY29tbWFuZHMgYW5kIHRoZSBwb3NzaWJpbGl0eSBvZiBwdXR0aW5nIEBjb250ZW50cyBhbmQKICAgICAgICBAc2hvcnRjb250ZW50cyBhZnRlciBAZW5kIHRpdGxlcGFnZS4KCgkqIHV0aWwvdGV4aTJkdmk6IENoZWNrIHRoYXQgdGhlIHRvYyBmaWxlIGhhcyBub3QgY2hhbmdlZCAoYXMgd2VsbAogCQlhcyAuYXV4IGFuZCAuPz8pLgoKVGh1IEp1biAyNSAxNjo1ODo0NiAxOTk4ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogZG9jL3RleGluZm8udHhpOiBEb2N1bWVudCBuZXcgY29tbWFuZHMgQGVudiwgQGNvbW1hbmQsIEBvcHRpb24uCgoJKiBtYWtlaW5mby9tYWtlaW5mby5jIChvcHRpb24sIGNvbW1hbmQsIGVudik6IE5ldyBtYXJrdXAgY29tbWFuZHMsIHNhbWUKIAkJYXMgQGNvZGUgaW4gaW5mby4KCldlZCBKdW4gMjQgMTU6Mzk6MzggMTk5OCAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmM6IE5ldyBuby1vcCBjb21tYW5kIEBhY3JvbnltLgoKCSogZG9jL3RleGluZm8udHhpOiBEb2N1bWVudCBuZXcgY29tbWFuZCBAYWNyb255bS4KCgkqIHV0aWwvaW5zdGFsbC1pbmZvLmMgKHN0cmlwX2luZm9fc3VmZml4LCBtZW51X2l0ZW1fZXF1YWwpOiBOZXcgZm5zLgogCShtYWluKTogQ2FsbCB0aGVtIGluc3RlYWQgb2YgZG9pbmcgdGhlIGZpbGVuYW1lIHRlc3QgaW5saW5lOyBhbGwgdGhlCgkuaW5mbyB2YXJpYXRpb25zIGFyZSB0b28gY29uZnVzaW5nIHRvIHdyaXRlIG91dCB0d2ljZS4KClR1ZSBKdW4gMjMgMTg6MDE6NDAgMTk5OCAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIGRvYy90ZXhpbmZvLnR4aTogRml4IHNvbWUgb3ZlcmZ1bGwgYm94ZXMuCgpNb24gSnVuIDIyIDE5OjIyOjE3IDE5OTggIEthcmwgQmVycnkgIDxrYXJsQG5vcnRoPgoKCSogY29uZmlndXJlLmluOiBSZW1vdmUgQUNfTElOS19GSUxFUyBjYWxsLCB0aGF0IHdhcyBhbiBvbGQgZ2V0dGV4dAogCQl0aGluZywgbm8gbG9uZ2VyIG5lY2Vzc2FyeSwgYW5kIGNhdXNlcyBwcm9ibGVtcyB3aXRoIEF1dG9jb25mLgoKU3VuIEp1biAxNCAwNzowMDoxNSAxOTk4ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogdXRpbC90ZXhpMmR2aTogSW5kZW50IG9wdGlvbnMgc28gaGVscDJtYW4gd2lsbCB3b3JrLiAgRnJvbSBBa2ltLgoKU2F0IEp1biAxMyAxMDo0NToyNSAxOTk4ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogY29uZmlndXJlLmluIChBTExfTElOR1VBUyk6IEFkZCBubC4KCgkqIHV0aWwvdGV4aTJkdmk6IEF2b2lkIHRhYnMuCgpXZWQgSnVuIDEwIDE3OjM4OjIxIDE5OTggIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiBtYWtlaW5mby9tYWtlaW5mby5jIChnZW5fZGVmaW5kZXgpOiBVc2UgeG1hbGxvYyBpbnN0ZWFkIG9mIGFsbG9jYS4KCVRoaXMgd2FzIG91ciBvbmx5IHVzZSBvZiBhbGxvY2EsIHNvIGFsc28gcmVtb3ZlIGFsbCB0aGUgI2lmIGp1bmsKCWF0IHRoZSBiZWdpbm5pbmcgdG8gZGVmaW5lIGl0LgoKCSogbWFrZWluZm8vbWFrZWluZm8uYzogRml4IGdyYW1tYXIgaW4gbXVsdGlwbHktZGVmaW5lZC1ub2RlIGVycm9yCgkJbWVzc2FnZS4KClR1ZSBKdW4gIDkgMTc6NTM6NTQgMTk5OCAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIGRvYy90ZXhpbmZvLnR4aTogRG9jdW1lbnQgbmV3IGNvbW1hbmRzIEBzbWFsbGZvcm1hdCwKIAkJQHNtYWxsZGlzcGxheS4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmM6IE5ldyBjb21tYW5kcyBAc21hbGxkaXNwbGF5IGFuZCBAc21hbGxmb3JtYXQuCglTdWdnZXN0aW9uIGZyb206IEVsaSBaYXJldHNraWkgPGVsaXpAaXMuZWx0YS5jby5pbD4uCgoJKiBtYWtlaW5mby9tYWtlaW5mby5oIChpbnNlcnRpb25fdHlwZSwgaW5zZXJ0aW9uX3R5cGVfbmFtZXMpOgoJRGVjbGFyZSBzbWFsbGRpc3BsYXkgYW5kIHNtYWxsZm9ybWF0LgoKTW9uIEp1biAgOCAwNzo1Nzo1MiAxOTk4ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogZG9jL3RleGluZm8udHhpOiBEb2N1bWVudCBwb3NzaWJpbGl0eSBvZiBjb21iaW5pbmcgQHRpdGxlZm9udAogCQlhbmQgQHRpdGxlLiAgRnJvbSBFbGkuCgoJKiB1dGlsL3RleGkyZHZpOiBTZXQgdmVyYm9zZSB0byA6IGluc3RlYWQgb2YgZmFsc2UgYnkgZGVmYXVsdC4KCgkqIHV0aWwvdGV4aTJkdmk6IE1pc3NpbmcgXFwgZm9yIHNlZCB3aXRoIC10IHRleHQuICBGcm9tIEFraW0uCgpTdW4gSnVuICA3IDEzOjAyOjEzIDE5OTggIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiBkb2MvdGV4aW5mby50eGk6IERvY3VtZW50IEBwYWdlc2l6ZXMgYW5kIHRleGlkdmkgLXQuCgoJKiBtYWtlaW5mby9tYWtlaW5mby5jOiBEZWZpbmUgbm8tb3AgQHBhZ2VzaXplcyBhbmQgQGFmb3VycGFwZXIuCgkobWFqb3JfdmVyc2lvbiwgbWlub3JfdmVyc2lvbik6IFJlbW92ZSB0aGVzZSBnbG9iYWxzLCBqdXN0IHVzZSB0aGUKCVRleGluZm8gcGFja2FnZSB2ZXJzaW9uLgoJKHByaW50X3ZlcnNpb25faW5mbyk6IERpdHRvLgoKRnJpIEp1biAgNSAxNzo1NDoxNiAxOTk4ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogZG9jL3RleGluZm8udHhpOiBDaGFuZ2UgdGV4aTJkdmkgZG9jdW1lbnRhdGlvbiBhIGJpdC4KCgkqIHV0aWwvdGV4aTJkdmk6IEhhbmRsZSAtLW9wdGlvbj1hcmd1bWVudCBzdHlsZSBvZiBzcGVjaWZ5aW5nCiAJCWFyZ3VtZW50cy4KClNhdCBNYXkgMzAgMTQ6MDE6MzcgMTk5OCAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIGRvYy90ZXhpbmZvLnR4aTogTW9yZS4KCgkqIHV0aWwvaW5zdGFsbC1pbmZvLmMgKG9wZW5fcG9zc2libHlfY29tcHJlc3NlZF9maWxlKTogRmluaXNoCiAJCWltcGxlbWVudGF0aW9uLgoKCSogZG9jL3RleGluZm8udHhpOiBEb2N1bWVudCBpbnN0YWxsLWluZm8gY29tcHJlc3Npb24gc3VwcG9ydC4KCkZyaSBNYXkgMjkgMDg6MDE6NDMgMTk5OCAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIHV0aWwvaW5zdGFsbC1pbmZvLmMgKG9wZW5fcG9zc2libHlfY29tcHJlc3NlZF9maWxlKTogSW5pdGlhbAogCQlpbXBsZW1lbnRhdGlvbi4KCgkqIHV0aWwvaW5zdGFsbC1pbmZvLmMgKG91dHB1dF9kaXJmaWxlKTogQXR0ZW1wdCB0byB3cml0ZSBkaXIuZ3ogaWYKIAkJdGhhdCdzIHdoYXQgd2UgcmVhZC4KIAkocmVhZGZpbGUpOiBQYXNzIGJhY2sgdGhlIGFjdHVhbCBvcGVuZWQgZmlsZW5hbWUsIHRvby4KCgkqIGluZm8vaW5kaWNlcy5jOiBDaGVjayBpbiBFbGkncyBwYXRjaC4KClRodSBNYXkgMjggMTc6MDk6NDUgMTk5OCAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIHV0aWwvaW5zdGFsbC1pbmZvLmMgKHJlYWRmaWxlKTogU2V0IHVwIHRvIGhhbmRsZSBjb21wcmVzc2VkCglpbnB1dCAoYW5kIG91dHB1dCkgZmlsZXMuIENoYW5nZSBjYWxsZXJzLgoJUmVhcnJhbmdlIGZ1bmN0aW9uIG9yZGVyIHRvIGF2b2lkIGZvcndhcmQgZGVjbGFyYXRpb25zLgoKCSogY29uZmlndXJlLmluOiBSZW1vdmUgY2hlY2sgZm9yIGxpYnosIHdlJ2xsIGZvcmsgZ3ppcCBpbnN0ZWFkLgoKVHVlIE1heSAyNiAxODowMToxMyAxOTk4ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogdXRpbC9pbnN0YWxsLWluZm8uYyAocHJpbnRfaGVscCk6IE1pc3NpbmcgXG5cIGluIGhlbHAgc3RyaW5nLgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAoUE9TVF9TRU5URU5DRSk6IFJlbmFtZSBmcm9tIHBvc3Rfc2VudGVuY2UuCiAgCUNoYW5nZSBjYWxscy4KCShmbHVzaF9vdXRwdXQpOiBTdHJpcCA4dGggYml0IGlmIHBvc3Rfc2VudGVuY2UgY2hhciBhcyB3ZWxsIGFzIHNwYWNlLgoJKGNtX2NvZGUsIGV0Yy4pOiBDaGFuZ2UgYWRkX2NoYXIgY2FsbHMgZm9yIHBvc3Rfc2VudGVuY2UgY2hhcnMgdG8gc2V0Cgk4dGggYml0LgoKMTk5OC0wNS0yMyAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCgkqIGluZm8vaW5kaWNlcy5jIChpbmZvX25leHRfaW5kZXhfbWF0Y2gpOiBDYWxsCglpbmZvX3NldF9ub2RlX29mX3dpbmRvdyB0byBkaXNwbGF5IHRoZSBub2RlLCBzbyB0aGF0IGZvb3Rub3RlcyBhcmUKCWRpc3BsYXllZCBhcyB3ZWxsLgoKVGh1IE1heSAyMSAxMTowNTo1MCAxOTk4ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogdXRpbC9pbnN0YWxsLWluZm8uYyAob3V0cHV0X2RpcmZpbGUpOiBOZXcgZnVuY3Rpb24sIGV4dHJhY3RlZAogCQlmcm9tIHRoZSBlbmQgb2YgbWFpbi4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKGJlZ2luX2luc2VydGlvbik6IElnbm9yZSBAZ3JvdXAgaW4gYWxsIHRoZQoJZXhhbXBsZS1saWtlIGVudmlyb25tZW50cywgbm90IGp1c3QgQGV4YW1wbGUuICBPdGhlcndpc2UgdGhlIGZpcnN0CglsaW5lIGluIHRoZSBlbnZpcm9ubWVudCBpcyBub3QgaW5kZW50ZWQgY29ycmVjdGx5LiBSZXBvcnRlZCBieSBybXMuCgpXZWQgTWF5IDIwIDE3OjQ0OjM4IDE5OTggIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiB1dGlsL2luc3RhbGwtaW5mby5jOiBEb2MgZml4ZXMuCgoJKiB1dGlsL2luc3RhbGwtaW5mby5jOiBIYW5kbGUgWEVtYWNzLXN0eWxlIGRpciBlbnRyaWVzOgoJKiBGSUxFTkFNRTo6UFJPR1JBTSAgREVTQ1JJUFRJT04uCglEYXRlOiBXZWQsIDEzIE1heSAxOTk4IDEzOjU4OjI4ICswOTAwCglGcm9tOiBLSVJJWUFNQSBLYXp1aGlrbyA8a2lyaUBraXJpLnRvYmEtY210LmFjLmpwPgoKCUFsc28sIGRvIG5vdCBzZXQgc29tZXRoaW5nX2RlbGV0ZWQgb24gY29udGludWF0aW9uIGxpbmVzOyB0aGV5IGFyZSBvbmx5CglkZWxldGVkIGlmIHRoZSBlbnRyeSB3YXMgZGVsZXRlZC4KClR1ZSBNYXkgMTkgMTc6MjI6NTAgMTk5OCAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIHV0aWwvaW5zdGFsbC1pbmZvLmM6IERvIG5vdCByZWFkIHRoZSBkaXIgZmlsZSBpZiB3ZSBhcmUgb25seQoJZGVsZXRpbmcgLS0gaXQgbWlnaHQgbm90IGV4aXN0LCBhbmQgd2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCBpdC4KCUZyb206IERhdmlkIEthZWxibGluZyA8ZHJrQHNnaS5jb20+CglEYXRlOiBUdWUsIDEyIE1heSAxOTk4IDExOjA1OjI2IC0wNDAwCgoJKiB1dGlsL2dlbi1kaXItbm9kZToKCUZyb206IERhdmlkIEthZWxibGluZyA8ZHJrQHNnaS5jb20+CglEYXRlOiBUdWUsIDEyIE1heSAxOTk4IDE2OjA1OjE2IC0wNDAwIC0KCS0gVGhlICJkaXIiIG1vb2JsZXIgaGVhZGVyIGlzIHNsaWdodGx5IGRpZmZlcmVudCBmcm9tIHRoZSBkZWZhdWx0CgkJZGlyIGZpbGUuCgktIElmIGFsbCBmaWxlcyBpbiAke2luZm9maWxlc30gYXBwZWFyIGluIHRoZSBza2VsZXRvbiB0aGUgbGFzdCBvbmUKIAkJaXMgcHJvY2Vzc2VkIHR3aWNlLgogCS0gSU5GTy1ESVItU0VDVElPTiBkYXRhIGlzIGlnbm9yZWQuCiAgCS0gRG9uJ3QgZ2VuZXJhdGUgZW50cmllcyBmb3IgZGlyZWN0b3JpZXMuCgpTYXQgTWF5IDE2IDE3OjE2OjU2IDE5OTggIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiBtYWtlaW5mby9tYWtlaW5mby5jIChjbV9ub3ZhbGlkYXRlKTogTmV3IGZuIGZvciBuZXcgY29tbWFuZAogCQlAbm92YWxpZGF0ZSwgbGlrZSAtLW5vLXZhbGlkYXRlLgoKVGh1IE1heSAxNCAxODowMjozMSAxOTk4ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogZG9jL3RleGluZm8udHhpOiBEb2N1bWVudCB0aGUgQG5vdmFsaWRhdGUgY29tbWFuZC4KCldlZCBNYXkgMTMgMTc6NDc6MjAgMTk5OCAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIGRvYy90ZXhpbmZvLnR4aTogRG9jdW1lbnQgbGltaXRhdGlvbiBvbiBAc2V0L0B2YWx1ZSBuYW1lcyBpbgogCQlpbmRleCBjb21tYW5kcy4KCkZyaSBNYXkgIDEgMTQ6MTI6MTUgMTk5OCAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIGRvYy90ZXhpbmZvLnR4aSAoQ29tbWFuZCBMaXN0KTogQGRlZnR5cGV2YXIgb3V0IG9mIG9yZGVyLgoKCSogY29uZmlndXJlLmluIChBTExfTElOR1VBUyk6IEFkZCBjcy4KClR1ZSBBcHIgMjggMDk6MzM6NDEgMTk5OCAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKHN0cmNhc2VjbXApOiBUaGlzIGlzIGluIGxpYiBub3cuCgoxOTk4LTA0LTI2IFJpY2hhcmQgU3RhbGxtYW4gPHJtc0Bwc2lsb2Npbi5nbnUub3JnPgoKCSogdXRpbC9pbnN0YWxsLWluZm8uYyAocHJpbnRfaGVscCk6IERvYyBjbGFyaWZpY2F0aW9ucy4KClN1biBBcHIgMTkgMTU6NTU6MTAgMTk5OCAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIGxpYi9zeXN0ZW0uaCAoc3RyY2FzZWNtcCwgc3RybmNhc2VjbXApIFshSEFWRV9TVFJbTl1DQVNFQ01QXToKIAkJRGVjbGFyZSB0aGVzZS4KCgkqIGluZm8vc2VhcmNoLmggKHN0cltuXWNhc2VjbXApOiBSZW1vdmUgZGVjbCBmcm9tIGhlcmUuCgoJKiBjb25maWd1cmUuaW4gKEFDX1JFUExBQ0VfRlVOQ1MpOiBDaGVjayBmb3Igc3RyY2FzZWNtcCBhbmQKIAlzdHJuY2FzZWNtcCBoZXJlLgoJKEFDX0NIRUNLX0ZVTkNTKTogSW5zdGVhZCBvZiBqdXN0IHN0cmNhc2VjbXAgaGVyZS4KCgkqIGNvbmZpZ3VyZS5pbiAodGV4Y29uZmlnKTogVXNlIFRFWE1GTUFJTiBpbiBwcmVmZXJlbmNlIHRvIFRFWE1GCiAJCWZvciBwb3N0LTAuNCB0ZVRlWC4KCldlZCBBcHIgMTUgMTc6MjA6MzEgMTk5OCAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIGRvYy90ZXhpbmZvLnR4aSAoUmVwb3J0aW5nIEJ1Z3MpOiBOZXcgc2VjdGlvbi4KCVN1Z2dlc3Rpb24gZnJvbTogQW5kcmV3IFNoYXBpcmEgPHNoYXBpcmFhQGNzLnJwaS5lZHU+CglEYXRlOiBNb24sIDQgQXVnIDE5OTcgMTk6MDY6MDYgLTA0MDAgKEVEVCkKCgkqIGluZm8vaW5mb21hcC5jOiBEZWZpbmUgLyB0byBiZSBpbmZvX3NlYXJjaC4KCVN1Z2dlc3Rpb24gZnJvbTogRWdpbCBLdmFsZWJlcmcgPGVnaWxAa3ZhbGViZXJnLm5vPgoJRGF0ZTogRnJpLCAxIEF1ZyAxOTk3IDA4OjE2OjQ1ICswMjAwIChNRVQgRFNUKQoKCSogZG9jL3RleGluZm8udHhpICh1cmVmKTogRG9jdW1lbnQgcmVhc29uIGZvciBub3QgdXNpbmcgPFVSTDogZm9ybWF0LgoJQWxzbyB1c2UgZnRwLmdudS5vcmcgaW5zdGVhZCBvZiBmdHAuZ251LmFpLm1pdC5lZHUgdGhyb3VnaG91dC4KClR1ZSBBcHIgMTQgMTA6NDM6MzkgMTk5OCAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkxOTk4LTA0LTA1IEthcmwgRWljaHdhbGRlciA8a2VAc3VzZS5kZT4KCSogbWFrZWluZm8vbWFrZWluZm8uYyAoYmVnaW5faW5zZXJ0aW9uKTogTm8gbmVlZCB0bwogCWdldHRleHQ7IGl0J3MgYSBrZXl3b3JkLiAgRnJvbSBjYXJsLWZyaWVkcmllY2guc3BpbGNrZS1saXNzQGVuc2FlLmZyLgogCShjbV9wcmludGluZGV4KTogZGl0dG8uCgoJKiB1dGlsL3RleGkyZHZpOiBBbHdheXMgcmVtb3ZlIHRoZSAkdG1wX2RpcidzLgoJRnJvbTogRGVhbiBHYXVkZXQgPGRnYXVkZXRAYXJjdGljLm9yZz4KCURhdGU6IFR1ZSwgMTQgQXByIDE5OTggMDA6NTU6MzYgLTA3MDAgKFBEVCkKCk1vbiBBcHIgMTMgMTg6MDI6NTcgMTk5OCAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIGNvbmZpZ3VyZS5pbjogSW5jbHVkZQoJQU1fU1lTX1BPU0lYX1RFUk1JT1MKCUFNX0hFQURFUl9USU9DR1dJTlNaX05FRURTX1NZU19JT0NUTAoJdG8gYXZvaWQgd2luZG93IHJlc2l6aW5nIGJlaW5nIGlnbm9yZWQgdW5kZXIgZ2xpYmMyIHN5c3RlbXMsCgllLmcuLCBSZWQgSGF0IExpbnV4IDUuMC4gIEFjdHVhbGx5IGFueSBzeXN0ZW0gd2hlcmUgdGhlIGlvY3RscyBhcmUgbm90CglkZWZpbmVkIGluIDx0ZXJtaW9zLmg+LgoJU2VlIGFsc28gaHR0cDovL3d3dy1nbmF0cy5nbnUub3JnOjgwODAvY2dpLWJpbi93d3dnbmF0cy5wbC9mdWxsLzIwNi4KCSogYWNjb25maWcuaCAoR1dJTlNaX0lOX1NZU19JT0NUTCk6IE5ldyAjdW5kZWYgZm9yIGF1dG9oZWFkZXIuCgkqIGluZm8vdGVybWRlcC5oIFtHV0lOU1pfSU5fU1lTSU9DVExdOiAjaW5jbHVkZSA8c3lzL2lvY3RsPiBpZgogCQl0aGlzIGlzIGRlZmluZWQuCglGcm9tOiBNYXJrIEplZmZlcnlzIDxtamVmZmVyeUBjc2Uub2dpLmVkdT4KCURhdGU6IFRodSwgOSBBcHIgMTk5OCAxMjozODoyNyAtMDcwMCAoUERUKQoKRnJpIEFwciAgMyAwMToxODoyMiAxOTk4ICBQaGlsaXBwZSBEZSBNdXl0ZXIgIDxwaGRtQG1hY3FlbC5iZT4KCgkqIGluZm8vaW5mby5jIChtYWluKTogVXNlIDAsIG5vdCBOVUxMLCBhcyA/IDogYWx0ZXJuYXRpdmUuCgpUdWUgTWFyICAzIDEzOjI5OjE3IDE5OTggIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiBjb25maWd1cmUuaW46IFZlcnNpb24gMy4xMi4KCgkqIHBvL2RlLnBvOiBOZXcgdmVyc2lvbi4KCgkqIHBvL1BPVEZJTEVTLmluOiBEbyBub3QgaW5jbHVkZSBkb2MuYzsgdGhhdCBnZXRzIGJ1aWx0IGF0CglydW50aW1lLCB0aHVzIGNhdXNpbmcgdGV4aW5mby5wb3QgdG8gdHJ5IHRvIGdldCByZWJ1aWx0LiAgQmVzaWRlcywKCWl0IGRvZXNuJ3QgaGF2ZSBhbnkgdHJhbnNsYXRhYmxlIHN0cmluZ3MuCgpTdW4gTWFyICAxIDEwOjM4OjQ3IDE5OTggIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiB1dGlsL2luc3RhbGwtaW5mby5jOiBObyBuZWVkIGZvciBpMThuIG9uIHZlcnNpb24gbWVzc2FnZS4gIEZyb20KIAkJa2VAc3VzZS5kZS4KCkZyaSBGZWIgMjcgMTY6MDY6MjMgMTk5OCAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIGNvbmZpZ3VyZS5pbjogUnVuIHRleGNvbmZpZyBjb25mIGluc3RlYWQgb2YgY29uZmFsbC4KCgkqIGRvYy9NYWtlZmlsZS5hbSAoSU5TVEFMTF9JTkZPKTogTmV3IHZhcmlhYmxlLgoJKGluc3RhbGwtaW5mby1hbSk6IFVzZSBpbnN0YWxsLWluZm8gZnJvbSBvdXIgZGlzdHJpYnV0aW9uLgoKCSogaW5mby9pbmZvLmMgKGluZm9fbWlub3JfdmVyc2lvbik6IEluY3JlbWVudC4KCSogKGluZm9fcGF0Y2hfbGV2ZWwpLAoJKiBpbmZvL2luZm8uaCAoaW5mb19wYXRjaF9sZXZlbCk6IFJlbW92ZS4KCgkqIGluZm8vaW5mby5jIChwcm9ncmFtX25hbWUpOiBNb3ZlIGRlY2wuCgoJKiB1dGlsL2luc3RhbGwtaW5mby5jIChlbnN1cmVfZGlyZmlsZV9leGlzdHMpOiBVc2UgY29tbWFzIGFuZCBcdAoJIGluc3RlYWQgb2YgYW4gZXhwbGljaXQgdGFiLCB3aGljaCBtYWtlIGRpc3QgZXhwYW5kcy4KCgkqIGRvYy90ZXhpbmZvLnR4aTogQHByZXAuYWkubWl0LmVkdSAtPiBAZ251Lm9yZy4KCgkqIGluZm8vaW5mby5jOiBNYWtlIGhlbHAgbWVzc2FnZXMgY29uc2lzdGVudCB3aXRoIG90aGVycy4KCgkqIHV0aWwvaW5zdGFsbC1pbmZvLmMgKHByaW50X2hlbHApOiBGb3JtYXQgY29uc2lzdGVudGx5LgoKCShyZWFkZmlsZSk6IFN1cHBvcnQgZ3ppcHBlZCBmaWxlcyB2aWEgbGliei4KCUZyb206IEVsbGlvdCBMZWUgPHNvcHdpdGhAcmVkaGF0LmNvbT4KCURhdGU6IE1vbiwgMSBTZXAgMTk5NyAyMzozNzoxNCAtMDQwMCAoRURUKQoKVGh1IEZlYiAyNiAxNjoxMzoxNCAxOTk4ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogaW5mby9lY2hvLWFyZWEuYzogV2hvb3BzLCBfIG1pZ2h0IG5vdCBzdGFydCB3aXRoIHBhcmVucy4KCgkqIGNvbmZpZ3VyZS5pbjogQ2hlY2sgZm9yIGxpYnouCglEbyBub3Qgb3V0cHV0IGVtYWNzL01ha2VmaWxlLgoKCSogTWFrZWZpbGUuYW0gKEFVVE9NQUtFX09QVElPTlMpOiBTZXQgdG8gMS4yZi4KCgkqIHV0aWwvdGV4aTJkdmk6IEFsd2F5cyByZW1vdmUgdGVtcG9yYXJ5IGRpcmVjdG9yaWVzLiAoRnJvbSBBa2ltLikKCUZvcm1hdHRpbmcgY2hhbmdlcy4KCldlZCBGZWIgMjUgMTU6MjY6MjYgMTk5OCAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIHV0aWwvdGV4aTJkdmk6IE5ldyBvcHRpb25zIC0tYmF0Y2gsIC0tY2xlYW4uCglGcm9tOiBBa2ltIERlbWFpbGxlIDxkZW1haWxsZUBpbmYuZW5zdC5mcj4KCURhdGU6IDE1IEF1ZyAxOTk3IDE4OjA1OjMzICswMjAwCgkqIGRvYy90ZXhpbmZvLnR4aSAoRm9ybWF0IHdpdGggdGV4aTJkdmkpOiBNZW50aW9uIC0taGVscC4KCglBcHBsaWVkIHRoaXM6CjE5OTctMDgtMDkgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmluZm9ybWF0aWsudW5pLWRvcnRtdW5kLmRlPgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAobWVfZXhlY3V0aW5nX3N0cmluZyk6IE5ldyB2YXJpYWJsZS4KCShtZV9leGVjdXRlX3N0cmluZyk6IFVzZSBpdCBpbnN0ZWFkIG9mIGV4ZWN1dGluZ19zdHJpbmcuCgkocG9wZmlsZSk6IENoZWNrIGZvciBtZV9leGVjdXRpbmdfc3RyaW5nIGFzIHdlbGwgYXMKCWV4ZWN1dGluZ19zdHJpbmcuCgkoZ2V0X3VudGlsX2luX2xpbmUpOiBMaWtld2lzZS4KCShpbnNlcnRfYW5kX3VuZGVyc2NvcmUpOiBEbyBub3Qgd3JpdGUgYW55IGV4cGFuc2lvbiBvdXRwdXQgaWYKCWV4ZWN1dGluZyBhIHN0cmluZy4KCShjbV9ub2RlLCBjbV9pbmNsdWRlLCBpbmRleF9hZGRfYXJnLCBjbV9mb290bm90ZSwgZXhlY3V0ZV9tYWNybywKCWNtX21hY3JvLCBjbV91bm1hY3JvKTogTGlrZXdpc2UuCgkoY21fZm9vdG5vdGUpOiBJbmNsdWRlIHRoZSBmb290bm90ZSBtYXJrZXIgaW4gdGhlIGV4cGFuc2lvbgoJb3V0cHV0LgoJKGFwcGVuZF90b19leHBhbnNpb25fb3V0cHV0KTogRG8gbm90aGluZyBpZiB0aGUgaW5wdXRfdGV4dCB3YXNuJ3QKCWEgcmVtZW1iZXJlZCB0ZXh0LgoJKGRlZnVuX2ludGVybmFsKTogTWFrZSB0aGUgaW5kZXggZW50cnkgZXZlbiBpZiBleHBhbmRpbmcgbWFjcm9zLgoJKGV4cGFuc2lvbik6IERvbid0IHJlc2V0IG1hY3JvX2V4cGFuc2lvbl9vdXRwdXRfc3RyZWFtIGFyb3VuZCBjYWxsCgl0byBleGVjdXRlX3N0cmluZy4KCShhcHBseSk6IEZpeCB0eXBvLgoKVHVlIEZlYiAyNCAxNzozMzo0NCAxOTk4ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCTE5OTctMTEtMTAgQW5kcmVhcyBTY2h3YWIgPHNjaHdhYkBpc3Nhbi5pbmZvcm1hdGlrLnVuaS1kb3J0bXVuZC5kZT4KCSogbWFrZWluZm8vbWFrZWluZm8uYyAoZ2V0X3VudGlsX2luX2xpbmUpOiBEb24ndCB1c2UgeHN0cmR1cCBvbgoJCXRoZSB1bnRlcm1pbmF0ZWQgaW5wdXRfdGV4dC4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmM6IERvbid0IGFzc3VtZSBhbGwgXCdzIGluIG1hY3JvIGJvZGllcyBhcmUKCQlhcmd1bWVudHMuCglGcm9tOiBNYXRoaWFzLkhlcmJlcnRzQGlyaXNhLmZyIChNYXRoaWFzIEhlcmJlcnRzKQoJRGF0ZTogVHVlLCA2IEphbiAxOTk4IDE4OjU0OjI2ICswMTAwCgoJKiBjb25maWd1cmUuaW46IENoZWNrIGZvciBzaWdibG9jayBpbiBsaWJjIGJlZm9yZSBsaWJic2QuCgkqIEZyb206IGhqbEBsdWNvbi5vcmcgKEguSi4gTHUpCgkqIERhdGU6IEZyaSwgMjMgSmFuIDE5OTggMjE6NTA6MjUgLTA4MDAgKFBTVCkKCk1vbiBGZWIgMjMgMTY6MjY6MzEgMTk5OCAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIGluZm8vd2luZG93LmMgKGNoYXJhY3Rlcl93aWR0aCk6IElmIElTT19MYXRpbl9wIGlzIHNldCwgbWFrZQoJCXByaW50YWJsZV9saW1pdCAyNTUsIG5vdCAxNjAuICBJU08gTGF0aW4gMSB1c2VzCgkJZXNzZW50aWFsbHkgYWxsIG9mIHRoZSAyNTYgY2hhcmFjdGVycy4KCVJlcG9ydGVkIGJ5OiBNYXJpdXMgR3JvZWdlciA8bWFnQHN5c2dvLmRlPgoJRGF0ZTogV2VkLCAxNyBEZWMgMTk5NyAxNjowNToyNyArMDEwMAoKCSogaW5mby9pbmZvLmM6IEltcHJvdmUgaGVscCBtZXNzYWdlLgoKU3VuIEZlYiAyMiAxNzozODozMiAxOTk4ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogTWFrZWZpbGUuYW0gKFNVQkRJUlMpOiBSZW1vdmUgZW1hY3M7IHdlJ2xsIGp1c3QgZGlzdHJpYnV0ZSB0aGUKCQlFbGlzcCBmaWxlcyB3aXRoIEVtYWNzLgoKCSogZG9jL01ha2VmaWxlLmFtIChpbmZvX1RFWElORk9TLCB0ZXhpbmZvKTogUmVuYW1lIG1hbnVhbCB0bwoJCXRleGluZm8udHhpIHRvIGF2b2lkIERPUyBmaWxlbmFtZSBjbGFzaCB3aXRoIHRleGluZm8udGV4LgoKCSogaW5mby90aWxkZS5jOiBDb3B5IHNsaWdodGx5IHVwZGF0ZWQgYWxsb2NhIHN0dWZmIGZyb20gbWFrZWluZm8uCgoJKiB1dGlsL3RleGluZGV4LmMgKG1haW4pOiBEZWNsYXJlIGFzIHJldHVybmluZyBpbnQgdG8gcGxhY2F0ZQogCQl3YXJuaW5ncy4KCgkqIGluZm8vTWFrZWZpbGUuYW06IFVuY29tbWVudCBCVUlMVF9TT1VSQ0VTIHN0dWZmIGFuZCBhZGQgbWlzc2luZyBfLgoJRnJvbTogIkpvZWwgTi4gV2ViZXIgSUkiIDxkZXZudWxsQGdudS5vcmc+CglEYXRlOiBGcmksIDMwIEphbiAxOTk4IDE3OjIxOjM4IC0xMDAwCgoJKiB1dGlsL3RleGluZGV4LmMsCgkqIHV0aWwvaW5zdGFsbC1pbmZvLmMsCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMsCgkqIGluZm8vaW5mby5jOiBDaGFuZ2UgaGVscCBhZGRyZXNzIHRvIEBnbnUub3JnLgoKCTE5OTgtMDEtMjIgQW5kcmVhcyBTY2h3YWIgPHNjaHdhYkBpc3Nhbi5pbmZvcm1hdGlrLnVuaS1kb3J0bXVuZC5kZT4KCSogbWFrZWluZm8vbWFrZWluZm8uYyAodXNhZ2UpOiBGaXggb3JkZXIgb2YgYXJndW1lbnRzIHRvIGhlbHAKCQlmb3JtYXQgc3RyaW5nLgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAoY21fdG9wKTogRXJyb3IgbWVzc2FnZSB3b3JkaW5nLgoKCSogZG9jL3RleGluZm8udGV4aSAoRnVuY3Rpb25zIGluIFR5cGVkIExhbmd1YWdlcyk6IFJlbW92ZQoJCWR1cGxpY2F0ZSBkZXNjcmlwdGlvbiBvZiBAZGVmdHlwZW1ldGhvZC4KCUZyb206IEtITWFyYmFpc2VAcDY5LmtzLmZpZG8uZGUgKEthcmwgSGVpbnogTWFyYmFpc2UpCglEYXRlOiBXZWQsIDA3IEphbiAxOTk4IDExOjExOjUwICswMTAwCgoJKiBpbmZvL3Nlc3Npb24uYyAoaW5mb19nZXRfaW5wdXRfY2hhcikgW0VJTlRSXTogS2VlcCByZWFkaW5nIGlmIHdlCgkJZ2V0IEVJTlRSLgoJRnJvbTogQW5kcmVhcyBTY2h3YWIgPHNjaHdhYkBpc3Nhbi5pbmZvcm1hdGlrLnVuaS1kb3J0bXVuZC5kZT4KCURhdGU6IDIyIERlYyAxOTk3IDEwOjMyOjUzICswMTAwCgpTYXQgRmViIDIxIDE3OjQxOjI2IDE5OTggIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiBtYWtlaW5mby9tYWtlaW5mby5jIChmaW5kX2FuZF9sb2FkKTogTWFsbG9jIGVub3VnaCByb29tIGZvciB0aGUKCQludWxsIGFzIHdlbGwgYXMgdGhlIG5ld2xpbmUuCglGcm9tOiAiSm9obiBXLiBFYXRvbiIgPGp3ZUBiZXZvLmNoZS53aXNjLmVkdT4KCURhdGU6IFR1ZSwgMzAgU2VwIDE5OTcgMjE6MTI6MDEgLTA1MDAKCgkqIHV0aWwvdGV4aW5kZXguYyAoLS12ZXJzaW9uKSwKCSogbWFrZWluZm8vbWFrZWluZm8uYyAoY21fdG9kYXkpLAoJKiBtYWtlaW5mby9tYWtlaW5mby5jIChwcmludF92ZXJzaW9uX2luZm8pOiBWZXJzaW9uIHN0cmluZ3MgZXRjLiBkbyBub3QKCQluZWVkIHRyYW5zbGF0aW9uLgoJRnJvbTogS2FybCBFaWNod2FsZGVyIDxrZUBzdXNlLmRlPgoJRGF0ZTogMTMgU2VwIDE5OTcgMTY6MjA6MDIgKzAyMDAKCgkqIGluZm8vZWNoby1hcmVhLmM6IFJld3JpdGUgcGx1cmFsaXphdGlvbiB0byBiZSB0cmFuc2xhdGFibGUuCglGcm9tOiBLYXJsIEVpY2h3YWxkZXIgPGtlQHN1c2UuZGU+CglEYXRlOiAxMyBTZXAgMTk5NyAxNjoyMDowMiArMDIwMAoKCSogdXRpbC90ZXhpbmRleC5jLAoJKiBpbmZvL2luZm8uYywKCSogbWFrZWluZm8vbWFrZWluZm8uYywKCSogdXRpbC9pbnN0YWxsLWluZm8uYzogLS12ZXJzaW9uOiBHaXZlIHllYXIgYXMgYXJndW1lbnQgdG8gcHJpbnRmLAoJCXRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIHRyYW5zbGF0aW9ucyBuZWVkZWQuCglGcm9tOiBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBpcGQuaW5mby51bmkta2FybHNydWhlLmRlPgoJRGF0ZTogMDIgU2VwIDE5OTcgMTg6MDE6MjYgKzAyMDAKCgkqIHV0aWwvdGV4aW5kZXguYzogUmVtb3ZlIHRoZSBmbmN0bC5oIGFuZCBzeXMvZmlsZS5oIGNvbmRpdGlvbmFsICNpbmNsdWRlcywgdGhleSBhcmUKCWFscmVhZHkgaW4gbGliL3N5c3RlbS5oLgoJRnJvbTogIlBoaWxpcHBlIERlIE11eXRlciIgPHBoZG1AbWFjcWVsLmJlPgoJRGF0ZTogVGh1LCAyMSBBdWcgMTk5NyAyMDoxNjo0OSArMDIwMCAoTUVUIERTVCkKCgkqIGluZm8vdGVybWluYWwuYyAodGVybWluYWxfYmVnaW5fdXNpbmdfdGVybWluYWwsCiAJICB0ZXJtaW5hbF9lbmRfdXNpbmdfdGVybWluYWwpOiAjaWZkZWYgU0lHV0lOQ0ggc2V0dGluZ3MgZm9yCgkgCSAgbTY4ay1tb3Rvcm9sYS1zeXN2LgoJRnJvbTogIlBoaWxpcHBlIERlIE11eXRlciIgPHBoZG1AbWFjcWVsLmJlPgoJRGF0ZTogVGh1LCAyMSBBdWcgMTk5NyAyMDoxNjo0OSArMDIwMCAoTUVUIERTVCkKCgkqIGluZm8vZmlsZXN5cy5jIChpbmZvX3N1ZmZpeGVzKTogQWRkIC9pbmRleCBhcyBhIHBvc3NpYmlsaXR5IGZvcgoJCXN1YmRpcmVjdG9yaWVzLgoJRnJvbTogTWF0dGhldyBXaWxjb3ggPHdpbGx5QG9kaWUuYmFybmV0LmFjLnVrPgoJRGF0ZTogV2VkLCA2IEF1ZyAxOTk3IDE1OjU1OjE2ICswMTAwIChCU1QpCgoJKiBjb25maWd1cmUuaW46IFJlZGlyZWN0IHRleGNvbmZpZyBpbnB1dCBmcm9tIC9kZXYvbnVsbCB0byBhdm9pZAoJCXN0b3BwYWdlLgoJRnJvbTogVGhvbWFzIEVzc2VyIDx0ZUBpbmZvcm1hdGlrLnVuaS1oYW5ub3Zlci5kZT4KCURhdGU6IE1vbiwgNCBBdWcgMTk5NyAxODoxNTo0OSArMDIwMAoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAoZmluZF9hbmRfbG9hZCk6IE51bGwtdGVybWluYXRlIHRoZSBpbnB1dCB0ZXh0LgoJRnJvbTogS2VubmV0aCBTdGFpbGV5IDxrc3RhaWxleUBkaXNjbG9zdXJlLmNvbT4uCgoJKiBpbmZvL01ha2VmaWxlLmFtIChJTkNMVURFUyk6IEFkZCAtSS4uIC1JJChzcmNkaXIpLgoKRnJpIEF1ZyAyMiAxNjoyNDo1OSAxOTk3ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogZG9jL3RleGluZm8udGV4aTogQWRqdXN0IElTQk4sIGVkaXRpb24gbnVtYmVyIGZvciBwcmludCBydW4uCgpNb24gQXVnICA0IDE2OjEyOjQyIDE5OTcgIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiBpbmZvL2luZm8uYyAobWFpbikgW0lORk9ESVJdOiBBZGQgdGhpcyB0byBpbmZvcGF0aCwgaWYgc2V0LgoJKiBpbmZvL01ha2VmaWxlLmFtIChERUZTKTogTmV3IGRlZmluZSwgaW5jbHVkZSAtRElORk9ESVIuCglGcm9tOiBMYXJyeSBTY2h3aW1tZXIgPHJvc2VidWRAY3ljbG9uZS5TdGFuZm9yZC5FRFU+LgoKCSogdXRpbC9pbnN0YWxsLWluZm8uYyAoZW5zdXJlX2RpcmZpbGVfZXhpc3RzKTogVXNlIHRhYnMgaW5zdGVhZCBvZgogCQlzcGFjZXMgb24gdGhlIEZpbGU6IGRpciBsaW5lLgogCUJ1ZyBmcm9tOiBEYXZlIExvdmUgPGQubG92ZUBkbC5hYy51az4uCgpTYXQgQXVnICAyIDEyOjQzOjU3IDE5OTcgIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiBtYWtlaW5mby9tYWtlaW5mby5jIChjbV92YWx1ZSwgY21fZW1haWwsIGNtX3VyZWYpOiBIYXZlIHRvIGNhc3QKIAkJZnJvbSB1bnNpZ25lZCBjaGFyICogdG8gY2hhciAqIG9yIElSSVggY2MgY29tcGxhaW5zLgoJRnJvbTogIkthdmVoIFIuIEdoYXppIiA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4uCgpGcmkgQXVnICAxIDE0OjA1OjEwIDE5OTcgIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IFJlbW92ZSBSRUFETUUtYWxwaGEuCglGcm9tOiAiaXIuIE1hcmsgTS5fS2V0dGVuaXMiIDxrZXR0ZW5pc0BwaHlzLnV2YS5ubD4uCgoxOTk3LTA3LTMxIEFuZHJlYXMgU2Nod2FiIDxzY2h3YWJAaXNzYW4uaW5mb3JtYXRpay51bmktZG9ydG11bmQuZGU+CgoJKiBjb25maWd1cmUuaW46IFVzZSBBQ19DSEVDS19IRUFERVJTLCBub3QgQUNfQ0hFQ0tfSEVBREVSLgoKVGh1IEp1bCAzMSAxMTo1Nzo0NiAxOTk3ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogIFZlcnNpb24gMy4xMS4KCgkqIGluZm8vbWFuLmMgKHJlYXBfY2hpbGRyZW4pOiBEZWNsYXJlIHN0YXR1cyBhcyBpbnQsIG5vdCB1bnNpZ25lZCwKCQlzaW5jZSB0aGF0J3Mgd2hhdCBQT1NJWCBzYXlzIHRoZSBhcmcgdG8gd2FpdCBzaG91bGQgYmUuCgoJKiBtYWtlaW5mby9tYWtlaW5mby5jIChjbV91cmVmLCBjbV9lbWFpbCk6IFJld3JpdGUgdG8gZG8gbWFjcm8KIAkJZXhwYW5zaW9uIGluIHRoZSBhcmd1bWVudHMuCgoJKiBtYWtlaW5mby9tYWtlaW5mby5jIChtYWluKTogc2V0bG9jYWxlIExDX01FU1NBR0VTIGFuZCBMQ19USU1FLAoJCWluc3RlYWQgb2YgTENfQUxMLgoJRnJvbTogQWtpbSBEZW1haWxsZSA8ZGVtYWlsbGVAaW5mLmVuc3QuZnI+LgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAoY21fdG9kYXkpOiBMZXQgdGhlICVkICVzICVkIGJlIHRyYW5zbGF0ZWQsCgkJc28gb3RoZXIgbGFuZ3VhZ2VzIGNhbiBjaGFuZ2UgdGhlIG9yZGVyIG9mIGRheS9tb250aC95ZWFyLgoJRnJvbTogQWtpbSBEZW1haWxsZSA8ZGVtYWlsbGVAaW5mLmVuc3QuZnI+LgoKCSogaW5mby9pbmZvbWFwLmM6IERvYyBmaXguCgoJKiBsaWIvc3lzdGVtLmggWyFPX1JET05MWV06IFByZWZlciA8ZmNudGwuaD4gdG8gPHN5cy9mY250bC5oPi4KCgkqIGNvbmZpZ3VyZS5pbiAoQUNfQ0hFQ0tfSEVBREVSUyk6IENoZWNrIGZvciBmY250bC5oLgoKCSogZG9jL01ha2VmaWxlLmFtIChpbnN0YWxsLWRhdGEtbG9jYWwpOiBTdWdnZXN0IHRleC9nZW5lcmljL2R2aXBzCgkJZm9yIGVwc2YudGV4LgoJRnJvbTogVGltIE1vb25leSA8bW9vbmV5QGRvZ2JlcnQuY2MubmRzdS5Ob0Rhay5lZHU+LgoKCSogY29uZmlndXJlLmluIChURVhNRik6IE1vdmUgY2hlY2sgdG8gYmxvY2sgd2l0aCBvdGhlciBwcm9ncmFtCiAJCWNoZWNrcy4KCldlZCBKdWwgMzAgMTE6MjA6MzcgMTk5NyAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKGRlZnVuX2ludGVybmFsKTogQWxsb3cgZXh0cmEgdGV4dCBhZnRlcgoJCW1vc3QgQGRlZi4uLiBjb21tYW5kcywgZm9yIHR6bmFtZVsyXSBpbiBsaWJjLnRleGluZm8uCgoJKiBpbmZvL2luZm8uYzogSW5jbHVkZSBpbmRpY2VzLmguCgkqIGNvbmZpZ3VyZS5pbiAoQUNfQ0hFQ0tfSEVBREVSUyk6IFRlc3QgZm9yIHN5cy93YWl0LmgsIGluZm8vbWFuLmMKIAkJdXNlcyBpdC4KCUZyb206IEVyaWNrIEJyYW5kZXJob3JzdCA8RXJpY2suQnJhbmRlcmhvcnN0QGFzbWwubmw+LgoKVHVlIEp1bCAyOSAxNTo1NToxOSAxOTk3ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogY29uZmlndXJlLmluOiBWZXJzaW9uIDMuOWouCgoJKiBpbmZvL3Rlcm1pbmFsLmMgKG91dHB1dF9jaGFyYWN0ZXJfZnVuY3Rpb24pOiBSZXR1cm4gaW50ICh0aGUKIAkJYXJnKSwgbm90IHZvaWQuCgoJKiBpbmZvL2luZm9tYXAuYzogRG9uJ3QgZGVmaW5lIHRlcm1fa1AgYXMgJ3YnLCBzaW5jZSB0aGF0J3MgdW5kZWZpbmVkLgoJRnJvbTogVG9tIEhhZ2VtYW4gPHRvbUBiYXNpbC5pY2NlLnJ1Zy5ubD4uCgoJKiBtYWtlaW5mby9tYWtlaW5mby5jOiBQYXJhbWV0ZXJpemUgc29tZSBtZXNzYWdlcyB0byBhdm9pZAogCQlkdXBsaWNhdGUgdHJhbnNsYXRpb25zLgoKCSogaW5mby90ZXJtaW5hbC5jOiBPbmx5IHRyeSB0byBkZWNsYXJlIG9zcGVlZCwgUEMsIHRwdXRzLCBldGMuIGlmCgkJd2UgZG9uJ3QgaGF2ZSA8bmN1cnNlcy5oL3Rlcm1jYXAuaD4gb3IgPHRlcm1jYXAuaD4uCgoJKiBtYWtlaW5mby9tYWtlaW5mby5jIChjbV9lbWFpbCk6IE5ldyBmdW5jdGlvbiwgbGlrZSBjbV91cmVmLgoKU3VuIEp1bCAyNyAxNzowOToyMCAxOTk3ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogY29uZmlndXJlLmluOiBPbmx5IGNoZWNrIGZvciA8bmN1cnNlcy90ZXJtY2FwLmg+IGlmIHdlJ3JlIHVzaW5nCgkJLWxuY3Vyc2VzLgoJRnJvbTogQm8gSm9oYW5zc29uIDxiby5qb2hhbnNzb25AbWJveDIuc3dpcG5ldC5zZT4uCgoJKiBpbmZvL2Rpci5jIChuZXdfZGlyX2ZpbGVfcCk6IEF2b2lkIGF1dG9tYXRpYyBzdHJ1Y3QKCQlpbml0aWFsaXphdGlvbiwgU3VuT1MgNCBldGMuIGNjIGNhbid0IGhhbmRsZSBpdC4KCUZyb206ICJLYXZlaCBSLiBHaGF6aSIgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+LgoKU2F0IEp1bCAyNiAxNTowODoxMyAxOTk3ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogVmVyc2lvbiAzLjlpLgoKCSogY29uZmlndXJlLmluOiBDaGVjayBmb3IgdGVybWNhcC5oIGFuZCBuY3Vyc2VzL3Rlcm1jYXAuaC4KCUZyb206IGJvLmpvaGFuc3NvbkBtYm94Mi5zd2lwbmV0LnNlLgoKRnJpIEp1bCAyNSAxNDowOTowNSAxOTk3ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogZG9jL3RleGluZm8udGV4aTogRG9jdW1lbnQgbmV3IHNlY29uZCBvcHRpb25hbCBhcmcgdG8gZW1haWwuCgoJKiBpbmZvL2luZm9kb2MuYzogRG9jdW1lbnQgQ1RSTC14IDAgYXMgdGhlIHdheSB0byBnZXQgb3V0IG9mIGhlbHAuCgoJKiBpbmZvL2Rpci5jIChtYXliZV9idWlsZF9kaXJfbm9kZSk6IFJlYWxseSBjaGVjayBmb3IgdGhlIHNhbWUgZGlyCgkJZmlsZSB0d2ljZSwgbm90IGp1c3QgYnkgbmFtZS4KCShuZXdfZGlyX2ZpbGVfcCk6IE5ldyBmdW5jdGlvbi4KCgkqIHV0aWwvaW5zdGFsbC1pbmZvLmM6IFRlbGwgdGhlbSBhYm91dCAtLWhlbHAgaW4gZG9jIHN0cmluZ3MuCgpUaHUgSnVsIDI0IDE0OjI1OjQ0IDE5OTcgIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiB1dGlsL3RleGluZGV4LmMgKG1lbW9yeV9lcnJvcik6IE1vdmUgdG8gYXZvaWQgaW5jb3JyZWN0IGltcGxpY2l0CiAJCWRlY2wuCgoJKiBtYWtlaW5mby9tYWtlaW5mby5jLAoJKiBtYWtlaW5mby9tdWx0aS5jLAoJKiB1dGlsL2luc3RhbGwtaW5mby5jLAoJKiB1dGlsL3RleGluZGV4LmMsCgkqIGluZm8vdGlsZGUuYywKCSogaW5mby9tYW4uYywKCSogaW5mby9nYy5jLAoJKiBpbmZvL3Nlc3Npb24uYyAoaW5mb19yZXBsYWNlX2tleV90b190eXBlYWhlYWQpOiBSZW1vdmUgdW51c2VkCiAgICAgICAgIGZ1bmN0aW9uLAoJKiBpbmZvL25vZGVtZW51LmMsCgkqIGluZm8vbWFuLmMsCgkqIGluZm8vbS14LmMsCgkqIGluZm8vZm9vdG5vdGVzLmMKCSogaW5mby9pbmZvLmMKCSogaW5mby9pbmRpY2VzLmMsCgkqIGluZm8vZmlsZXN5cy5jOiBQYXJlbnRoZXNpemUgdG8gYXZvaWQgLVdhbGwgd2FybmluZ3MKCXJlbW92ZSB1bnVzZWQgdmFyaWFibGVzLAoJbWFrZSByZXR1cm4gdHlwZXMgZXhwbGljaXQsCglwcmludGYgdHlwZSBjb3JyZWN0aW9ucy4KCgkqIGxpYi9zeXN0ZW0uaDogPGN0eXBlLmg+OiBJbmNsdWRlIHRoaXMuCgkqIHV0aWwvdGV4aW5kZXguYywKCSogbWFrZWluZm8vbWFrZWluZm8uYywKCSogaW5mby9lY2hvLWFyZWEuYywKCSogaW5mby9kaXNwbGF5LmM6IGN0eXBlLmg6IEluY2x1ZGVkIGluIHN5c3RlbS5oIG5vdy4KCgkqIGluZm8vZWNoby1hcmVhLmM6IFBhcmVudGhlc2l6ZSB0byBhdm9pZCAtV2FsbCB3YXJuaW5ncy4KICAgICAgICAoY3R5cGUuaCk6ICNpbmNsdWRlIGZvciBpc3ByaW50LgoJKGVjaG9fYXJlYV9zdGFja19kZXB0aCk6IFJlbW92ZSB1bnVzZWQgZnVuY3Rpb24uCgkqIGluZm8vZGlzcGxheS5jOiBQYXJlbnRoZXNpemUgdG8gYXZvaWQgLVdhbGwgd2FybmluZ3MuCiAgICAgICAgKGN0eXBlLmgpOiAjaW5jbHVkZSBmb3IgaXNwcmludC4KCSogaW5mby9kaXIuYzogUGFyZW50aGVzaXplIHRvIGF2b2lkIC1XYWxsIHdhcm5pbmdzLgoJKGJ1aWxkX2Rpcl9ub2RlX2ludGVybmFsKTogUmVtb3ZlIGRlY2xhcmF0aW9uIG9mIG5vbmV4aXN0ZW50IGZ1bmN0aW9uLgoJRnJvbTogRXJpY2sgQnJhbmRlcmhvcnN0IDxFcmljay5CcmFuZGVyaG9yc3RAYXNtbC5ubD4uCgoJKiBjb25maWd1cmUuaW4gKFRFWE1GKTogQ2FsbCB0ZXhjb25maWcgdG8gZGlzY292ZXIgdGhlIGRlZmF1bHQgdmFsdWUsCglmb3IgdGhlIHNha2Ugb2YgdGhlIHdhcm5pbmcgaW4gZG9jL01ha2VmaWxlLgoJRnJvbTogVGltIE1vb25leSA8bW9vbmV5QGRvZ2JlcnQuY2MubmRzdS5Ob0Rhay5lZHU+LgoKCSogZG9jL01ha2VmaWxlLmFtIChURVhNRik6IE5ldyB2YXJpYWJsZS4KICAgICAgICAoaW5zdGFsbC1kYXRhLWxvY2FsKTogVXNlIGl0IGluIHdhcm5pbmcuCglGcm9tOiBUaW0gTW9vbmV5IDxtb29uZXlAZG9nYmVydC5jYy5uZHN1Lk5vRGFrLmVkdT4uCgoJKiBpbmZvL3Nlc3Npb24uYyAoaW5pdGlhbGl6ZV9pbmZvX3Nlc3Npb24pOiBPbmx5IGNhbGwKCXRlcm1pbmFsX3ByZXBfdGVybWluYWwgaWYgY2xlYXJfc2NyZWVuIGlzIHRydWUuICBPdGhlcndpc2UsIGZhaWxlZAogICAgICAgIC0taW5kZXgtc2VhcmNoZXMgcHJlcCB0aGUgdGVybWluYWwgYnV0IGRvIG5vdCB1bnByZXAgaXQuCglGcm9tOiBXaWxsaWFtIEVkd2FyZCBXZWJiZXIgPHdld0B5YWxsYXJhLmNzLnJtaXQuRURVLkFVPi4KCgkqIGluZm8vbm9kZW1lbnUuYzogRG9jIGZpeC4KCk1vbiBKdWwgMjEgMTc6MTE6MDkgMTk5NyAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIGRvYy90ZXhpbmZvLnRleGk6IENvbW1lbnQgb3V0IEBzbWFsbGJvb2sgYW5kIEBzZXQgc21hbGxib29rIHNvCiAJCXBlb3BsZSBhdCBvdGhlciBzaXRlcyBjYW4gcHJpbnQgaXQgdGhlIHdheSB0aGV5IHdhbnQuCglGcm9tOiBUaG9tYXMgV2FsdGVyIDx3YWx0ZXJAcGN0Yy5jaGVtaWUudW5pLWVybGFuZ2VuLmRlPgoKU3VuIEp1bCAyMCAwNzo1MjoyNSAxOTk3ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogY29uZmlndXJlLmluOiAzLjloLgoKCSogZG9jL01ha2VmaWxlLmFtIChpbnN0YWxsLWluZm8tYW0sIGRpc3RjbGVhbi1hbWluZm8pOiBOZXcgdGFyZ2V0cwoJCXRvIGF2b2lkIGFzc3VtaW5nIGluZm8gZmlsZXMgYXJlIGluIHNyY2Rpci4KCgkqIGxpYi9zeXN0ZW0uaCAoeHN0cmR1cCk6IFJldHVybnMgY2hhciAqLCBub3Qgdm9pZCAqLgoKCSogZG9jL01ha2VmaWxlLmFtICgudGV4aS5pbmZvKSwKCSogZG9jL01ha2VmaWxlLmFtICh0ZXhpbmZvKTogRG9uJ3QgcnVuIGluICQoc3JjZGlyKS4KCgkqIHV0aWwvaW5zdGFsbC1pbmZvLmMgKG1haW4pOiBSZW1vdmUgdW5uZWNlc3NhcnkgZGVjbCBvZiBzdHJyY2hyLgoKCSogaW5mby90aWxkZS5jOiBJbmNsdWRlIGluZm8uaCAoZm9yIGNvbmZpZy5oKSBiZWZvcmUgYWxsb2NhIHN0dWZmLgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAodmFsaWRhdGVfZmlsZSk6IFJlbmFtZSBgdmFsaWQnIHRvIGB2YWxpZF9wJwoJCXRvIGF2b2lkIGNvbmZsaWN0IHdpdGggU3VuT1MgNCBoZWFkZXIgZmlsZXMuCglGcm9tOiAiS2F2ZWggUi4gR2hhemkiIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1Pi4KCgkqIGluZm8vc2Vzc2lvbi5jIChpbml0aWFsaXplX2luZm9fc2Vzc2lvbik6IENhbGwKICAgICAgICAgIHRlcm1pbmFsX3ByZXBfdGVybWluYWwgaGVyZSAoYmVmb3JlIGNhbGxpbmcgdGVybWluYWxfY2xlYXJfc2NyZWVuKS4KCShpbmZvX3Nlc3Npb24pOiBJbnN0ZWFkIG9mIGhlcmUuCglGcm9tOiBXaWxsaWFtIEVkd2FyZCBXZWJiZXIgPHdld0B5YWxsYXJhLmNzLnJtaXQuRURVLkFVPi4KCgkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRkIFJFQURNRS1hbHBoYS4KClNhdCBKdWwgMTkgMTM6NTA6MjcgMTk5NyAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIGluZm8vdGVybWluYWwuYzogVXNlIGBrZXlwYWQgdHJhbnNtaXQnIHNlcXVlbmNlIGlmIGl0J3MgZGVmaW5lZDoKCSh0ZXJtX2tleXBhZF9vbiwgdGVybV9rZXlwYWRfb2ZmKTogTmV3IHN0YXRpY3MuCgkodGVybWluYWxfYmVnaW5fdXNpbmdfdGVybWluYWwpOiBJZiB0ZXJtX2tleXBhZF9vbiwgc2VuZCBpdC4KCSh0ZXJtaW5hbF9lbmRfdXNpbmdfdGVybWluYWwpOiBJZiB0ZXJtX2tleXBhZF9vZmYsIHNlbmQgaXQuCgkodGVybWluYWxfaW5pdGlhbGl6ZV90ZXJtaW5hbCk6IExvb2sgdXAga3MgYW5kIGtlIHRlcm1jYXAgc3RyaW5ncy4KCUZyb206IFdpbGxpYW0gRWR3YXJkIFdlYmJlciA8d2V3QHlhbGxhcmEuY3Mucm1pdC5FRFUuQVU+LgoKCSogaW5mby9pbmZvbWFwLmMgKGluaXRpYWxpemVfaW5mb19rZXltYXBzKTogSW5pdGlhbGl6ZSBoYXJkd2lyZWQKIAkJY2FzZXMgZm9yIGFycm93IGtleXMgYSBsYSByZWFkbGluZS4gIEZvdW5kIGJ5IEpvaG4gRWF0b24sCiAJCWp3ZUBiZXZvLmNoZS53aXNjLmVkdS4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKG91dHB1dF9wZW5kaW5nX25vdGVzKTogUmVtb3ZlIGZvb3Rub3RlCiAgICAgICAgbWFjcm8gZXhwYW5zaW9uIGNvZGUgSSAjaWYgMCdkIG91dCBzb21lIHRpbWUgYWdvLiAgQW5kIGRvYyBmaXhlcy4KCgkqIEFwcGxpZWQgdGhpcyBwYXRjaDoKClNhdCBKdWwgMTkgMTY6Mjk6MDEgMTk5NyAgS2FybCBFaWNod2FsZGVyICA8a2VAc3VzZS5kZT4KCgkqIGluZm8vaW5mby5jIChtYWluKTogc2V0bG9jYWxlLCBiaW5kdGV4dGRvbWFpbiwgYW5kIHRleHRkb21haW4uCgpGcmkgSnVsIDE4IDEwOjAyOjE4IDE5OTcgIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiBkb2MvTWFrZWZpbGUuYW0gKGluc3RhbGwtZGF0YS1sb2NhbCksCgkqIGVtYWNzL01ha2VmaWxlLmFtIChpbnN0YWxsLWRhdGEtbG9jYWwpOiBHaXZlIHN1YmRpciBpbiB3YXJuaW5nLgoKCSogY29uZmlndXJlLmluOiBWZXJzaW9uIDMuOWYuCgoJKiBkb2MvdGV4aW5mby50ZXhpOiBDb3JyZWN0IFxeIHRvIEBeLgoJRnJvbSBBbmRyZWFzIFMuCgoJKiBNZXJnZWQgdGhlc2UgY2hhbmdlczoKCjE5OTctMDctMTcgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmluZm9ybWF0aWsudW5pLWRvcnRtdW5kLmRlPgoKCSogaW5mby9kaXNwbGF5LmMgKGRpc3BsYXlfY3Vyc29yX2F0X3BvaW50KTogRmx1c2ggb3VwdXQuCgoxOTk3LTA3LTE3ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5pbmZvcm1hdGlrLnVuaS1kb3J0bXVuZC5kZT4KCgkqIGluZm8vc2Vzc2lvbi5jIChyZW1lbWJlcl93aW5kb3dfYW5kX25vZGUpOiBEb24ndCBjcmFzaCB3aGVuIHRoZQoJY3VycmVudCB3aW5kb3cgaGFzIG5vIGN1cnJlbnQgbm9kZS4KCjE5OTctMDctMTcgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmluZm9ybWF0aWsudW5pLWRvcnRtdW5kLmRlPgoKCSogdXRpbC90ZXhpbmRleC5jICh1c2FnZSk6IFRyYW5zbGF0ZSB0aGUgZG9jIHN0cmluZ3MuCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKGNtX3RvZGF5KTogVHJhbnNsYXRlIHRoZSBtb250aCBuYW1lcy4KCSogaW5mby92YXJpYWJsZXMuYyAoZGVzY3JpYmVfdmFyaWFibGUpOiBUcmFuc2xhdGUgdGhlIGRvYyBzdHJpbmdzLgoJKiBpbmZvL25vZGVzLmg6IERvbid0IHRyYW5zbGF0ZSB0aGUgc3RyaW5ncyBkZWZpbmluZyB0aGUgaW5mbyBmb3JtYXQuCgoxOTk3LTA3LTE3ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5pbmZvcm1hdGlrLnVuaS1kb3J0bXVuZC5kZT4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKGdldF9pdGVtX2Z1bmN0aW9uKTogUmVtb3ZlIHN1cGVyZmx1b3VzIGNhbGwKCXRvIGNhbm9uX3doaXRlIGFmdGVyIGdldF9yZXN0X29mX2xpbmUuCgkoY21fZW5kKTogTGlrZXdpc2UuCgkoaGFuZGxlX3ZhcmlhYmxlKTogTGlrZXdpc2UuCgkoY21faXRlbSk6IExpa2V3aXNlLgoJKGNtX3VubWFjcm8pOiBMaWtld2lzZS4KCjE5OTctMDctMTcgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmluZm9ybWF0aWsudW5pLWRvcnRtdW5kLmRlPgoKCSogaW5mby9ub2RlbWVudS5jIChsaXN0X3Zpc2l0ZWRfbm9kZXMpOiBEb24ndCBjbGVhciB0aGUgaW50ZXJuYWwKCWZsYWcsIHRoaXMgYW5kIG90aGVyIGZ1bmN0aW9ucyBkZXBlbmQgb24gaXQuICBEb24ndCBpbnNpc3Qgb24KCWRpc3BsYXlpbmcgdGhlIG1lbnUgYmVsb3cgdGhlIGN1cnJlbnQgd2luZG93LgoKMTk5Ny0wNy0xNyAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uaW5mb3JtYXRpay51bmktZG9ydG11bmQuZGU+CgoJKiBtYWtlaW5mby9tYWtlaW5mby5jIChjbV91cmVmKTogRml4IG1lbW9yeSBsZWFrcy4KCShjbV9pbmZvcmVmKTogTGlrZXdpc2UuICBIYW5kbGUgZW1wdHkgY3Jvc3MgcmVmZXJlbmNlIG5hbWUuCgoxOTk3LTA3LTE3ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5pbmZvcm1hdGlrLnVuaS1kb3J0bXVuZC5kZT4KCgkqIGluZm8vZWNoby1hcmVhLmMgKGVhX3Bvc3NpYmxlX2NvbXBsZXRpb25zKTogQ2hlY2sgdGhhdCB0aGUKCWN1cnJlbnQgd2luZG93IGNhbiBhY3R1YWxseSBiZSBzcGxpdC4KClRodSBKdWwgMTcgMTc6MTk6MzQgMTk5NyAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgoJKiBlbWFjcy9NYWtlZmlsZS5hbSAoKmNsZWFuLWxpc3ApOiBEZWZpbmUsIGFzIEF1dG9tYWtlIGRpZG4ndC4KCUZyb206IEtlbm5ldGggU3RhaWxleSA8a3N0YWlsZXlAZGlzY2xvc3VyZS5jb20+LgoKCSogZG9jL01ha2VmaWxlLmFtOiBEbyBub3QgZGlzdHJpYnV0ZSBpbmZvLjEuCgkqIG1ha2VpbmZvL21hY3JvczogRG8gbm90IGRpc3RyaWJ1dGUgdGhpcyBkaXJlY3RvcnksIGl0J3MgbWVyZ2VkCgkJaW50byB0aGUgbWFpbiBkb2N1bWVudGF0aW9uLgoJKiBkb2MvbWFrZWluZm8udGV4aTogRG9uJ3QgZGlzdHJpYnV0ZSB0aGlzIGVpdGhlciwgaXQncyBpbiB0aGUKCQltYWluIG1hbnVhbC4KCgkqIHV0aWwvaW5zdGFsbC1pbmZvLmM6IFVzZSBcblwgZm9yIG11bHRpbGluZSBzdHJpbmcgY29uc3RhbnQuCiAgCQlGcm9tOiBUaW0gTW9vbmV5IDxtb29uZXlAZG9nYmVydC5jYy5uZHN1Lk5vRGFrLmVkdT4uCgpXZWQgSnVsIDE2IDE1OjI5OjUwIDE5OTcgIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiBkb2MvdGV4aW5mby50ZXhpOiBAc2V0IG11c3QgYmUgYWZ0ZXIgQHNldGZpbGVuYW1lLCBJIGd1ZXNzLgoJTm90ZWQgYnkgRXJpY2sgQnJhbmRlcmhvcnN0LgoKCSogQXBwbGllZCB0aGlzIGNoYW5nZToKClR1ZSBOb3YgMTIgMjI6MjA6MjIgMTk5NiAgSm9obiBFYXRvbiAgPGp3ZUBiZXZvLmNoZS53aXNjLmVkdT4KCgkqIG1ha2VpbmZvLmMgKElOREVYX0FMSVNUKTogVXNlIHR3byBpbmRpY2VzLCByZWFkX2luZGV4IGFuZAoJd3JpdGVfaW5kZXgsIGluc3RlYWQgb2YganVzdCBvbmUuCgkoZmluZF9pbmRleF9vZmZzZXQpOiBJZiBhIG1hdGNoIGlzIGZvdW5kLCByZXR1cm4gaW5kZXggdG8gdGhlCgljdXJyZW50IElOREVYX0FMSVNUIHN0cnVjdCwgbm90IHRoZSBpbmRleCBwb2ludGluZyB0byB0aGUgbGlzdCBvZgoJaW5kZXggZW50cmllcy4KCSh0cmFuc2xhdGVfaW5kZXgpOiBSZXR1cm4gcmVhZF9pbmRleCBmcm9tIHRoZSBtYXRjaGluZwoJSU5ERVhfQUxJU1QuCgkodW5kZWZpbmRleCk6IERlbGV0ZSB0aGUgbGlzdCBvZiBpbmRleCBlbGVtZW50cyBwb2ludGVkIHRvIGJ5CglyZWFkX2luZGV4IGZyb20gdGhlIElOREVYX0FMSVNUIHRoYXQgbWF0Y2hlcyBuYW1lLgoJKGRlZmluZGV4KTogSW5pdGlhbGl6ZSByZWFkX2luZGV4IGFuZCB3cml0ZV9pbmRleC4KCShpbmRleF9hZGRfYXJnKTogQWRkIGVudHJpZXMgdG8gdGhlIGxpc3QgcG9pbnRlZCB0byBieSB3cml0ZV9pbmRleAoJZnJvbSB0aGUgSU5ERVhfQUxJU1QgbWF0Y2hpbmcgbmFtZS4KCShpbmRleF9hcHBlbmQpOiBEZWxldGUgdW51c2VkIGZ1bmN0aW9uLgoJKGNtX3N5bmluZGV4KTogRG9uJ3QgbWVyZ2UgaW5kY2llcywganVzdCBtYWtlIHRoZSB3cml0ZV9pbmRleCBmb3IKCXJlZGlyZWN0ZWUgdGhlIHNhbWUgYXMgdGhlIHdyaXRlX2luZGV4IGZvciByZWRpcmVjdG9yLgoKVHVlIEp1bCAxNSAwOTozMjowNCAxOTk3ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogZG9jL3RleGluZm8udGV4aTogQnVtcCBlZGl0aW9uIG51bWJlciBmb3IgMi4yNC4KCgkqIHV0aWwvTWFrZWZpbGUuYW0gKGxvY2FsZWRpcik6IERlZmluZS4KCgkqIGluZm8vd2luZG93Lmg6IFJlbmFtZSBfX3dpbmRvd19fIHRvIHdpbmRvd19zdHJ1Y3QuCgoJKiBpbmZvL3dpbmRvdy5oLAoJKiBpbmZvL3ZhcmlhYmxlcy5oLAoJKiBpbmZvL3NlYXJjaC5oLAoJKiBpbmZvL21hbi5oLAoJKiBpbmZvL2luZm8tdXRpbHMuaCwKCSogaW5mby9nYy5oLAoJKiBpbmZvL2Zvb3Rub3Rlcy5oLAoJKiBpbmZvL2ZpbGVzeXMuaCwKCSogaW5mby9lY2hvLWFyZWEuaCwKCSogaW5mby9kaXNwbGF5Lmg6IEF2b2lkIGxlYWRpbmcgXyBpbiAjZGVmaW5lIGZvciAjaW5jbHVkZSBwcm90ZWN0aW9uLgoKCSogbWFrZWluZm8vbWFrZWluZm8uYzogVmVyc2lvbiAxLjY4LgoJKiBpbmZvL2luZm8uYzogVmVyc2lvbiAyLjE3LgoKCSogTW9zdCBhbGwgZmlsZXM6IFVudGFiaWZ5LgoKCSogZG9jL01ha2VmaWxlLmFtICh0ZXhpbmZvKTogQWRkIGV4cGxpY2l0IHRhcmdldC4KCgkqIGVtYWNzL01ha2VmaWxlLmFtIChub2luc3RfTElTUCk6IFJlbW92ZSB0aGUgb2Jzb2xldGUKCQlkZXRleGluZm8uZWwgKG1ha2VpbmZvIC0tbm8taGVhZGVycyBpcyBiZXR0ZXIpIGFuZAoJICAgICAgICB0ZXhuZm8tdGV4LmVsIChub3cgaGFuZGxlZCBieSBUZVggbW9kZXMgaW4gZ2VuZXJhbCkuCgpNb24gSnVsIDE0IDE1OjIxOjAzIDE5OTcgIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiB1dGlsL3RleGkyZHZpOiBVcGRhdGUgUkNTIGZpbGUgZnJvbSAzLjkgZGlzdHJpYnV0aW9uLgoKCSogdXRpbC9NYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkZCB1cGRhdGUtaW5mbywgZnJvbQogCQlyaGF3ZXNAZG1hcHViLmRtYS5vcmcKClN1biBKdWwgMTMgMTc6MDU6MDMgMTk5NyAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIGluZm8vc2lnbmFscy5jOiBVc2UgUkVUU0lHVFlQRSBpbnN0ZWFkIG9mIGhhcmR3aXJpbmcgdm9pZC4KCUZyb206ICJKZWZmZXJ5IEwuIEpUIFZvZ3QiIDxsZm1AYXR3LmVhcnRocmVhY2guY29tPi4KCgkqIGluZm8vc2Vzc2lvbi5jIChpbmZvX2hpc3Rvcnlfbm9kZSk6IFJld3JpdGUgYXMKICAJICAgICAgaW5mb19raWxsX25vZGUgKGN1cnJlbnRfbm9kZSkuCiAgICAgICAgKGtpbGxfbm9kZSwgcmVhZF9ub2RlbmFtZV90b19raWxsKTogTmV3IGZ1bmN0aW9ucyBmcm9tIGluZm9fa2lsbF9ub2RlLgoJKGluZm9fa2lsbF9ub2RlKTogTm93IHRoaXMganVzdCBjYWxscyB0aGVtLgoKRnJpIEp1bCAxMSAxMTo1Njo1OCAxOTk3ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogZG9jL3RleGluZm8udGV4aTogRml4IGBDb25kaXRpb25hbHMnIHhyZWYuCgpUaHUgSnVsIDEwIDE3OjU4OjEyIDE5OTcgIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiBkb2MvaW5mby50ZXhpOiBEb24ndCBzYXkgU1BDIGNsZWFycyA/IHNjcmVlbi4KClN1biBKdWwgIDYgMTY6MjY6NDEgMTk5NyAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIGRvYy9pbmZvLXN0bmQudGV4aTogRG9jdW1lbnQgLS1pbmRleC1zZWFyY2guCgoJKiBpbmZvL3RpbGRlLmMsCgkqIGluZm8vc2Vzc2lvbi5jOiBSZW1vdmUgcmVkdW5kYW50IGdldGVudiBkZWNsLgoKCSogSW5zdGFsbGVkIGZvbGxvd2luZyBjaGFuZ2U6ClR1ZSBOb3YgMTIgMTQ6NDQ6MDAgMTk5NiAgSm9obiBXLiBFYXRvbiAgPGp3ZUBiZXZvLmNoZS53aXNjLmVkdT4KCgkqIGluZm8vaW5mby5jIChtYWluKTogSGFuZGxlIG5ldyBvcHRpb24sIC0taW5kZXgtc2VhcmNoIFNUUklORy4KCShpbmRleF9zZWFyY2hfcCwgaW5kZXhfc2VhcmNoX3N0cmluZyk6IE5ldyBzdGF0aWMgdmFyaWFibGVzLCB1c2VkCgl0byBoYW5kbGUgLS1pbmRleC1zZWFyY2ggb3B0aW9uLgoKCSogaW5mby9zZXNzaW9uLmMgKGluaXRpYWxpemVfaW5mb19zZXNzaW9uKTogTmV3IGFyZywKCWNsZWFyX3NjcmVlbi4gIENoYW5nZSBhbGwgY2FsbGVycy4KCgkqIGluZm8vaW5kaWNlcy5oIChkb19pbmZvX2luZGV4X3NlYXJjaCwgaW5kZXhfaW50cnlfZXhpc3RzKToKCVByb3ZpZGUgZGVjbGFyYXRpb25zIGhlcmUuCgoJKiBpbmZvL2luZGljZXMuYyAoZG9faW5mb19pbmRleF9zZWFyY2gpOiBOZXcgZnVuY3Rpb24sIGV4dHJhY3RlZAoJZnJvbSBpbmZvX2luZGV4X3NlYXJjaC4KCShpbmZvX2luZGV4X3NlYXJjaCk6IFNpbXBseSBjYWxsIGRvX2luZm9faW5kZXhfc2VhcmNoKCkgd2l0aAoJc2VhcmNoX3N0cmluZyBzZXQgdG8gTlVMTC4KCShpbmRleF9lbnRyeV9leGlzdHMpOiBOZXcgZnVuY3Rpb24uCgpTYXQgSnVsICA1IDE3OjE3OjE0IDE5OTcgIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiBkb2MvdGV4aW5mby50ZXhpOiBEb2N1bWVudCBAa2JkaW5wdXRzdHlsZS4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKGtiZGlucHV0c3R5bGUpOiBOZXcgY29tbWFuZC4KCShjbV9ub19vcF9saW5lX2FyZyk6IE5ldyBmdW5jdGlvbi4KCgkqIGluZm8vdGVybWRlcC5oIChIQVZFX1RFUk1JT1NfSCkgW05lWFRdOiAjdW5kZWYuCglGcm9tOiBHcmVnb3IgSG9mZmxlaXQgPGZsaWdodEBtYXRoaS51bmktaGVpZGVsYmVyZy5kZT4gZXQgYWwuCgpGcmkgSnVsICA0IDE0OjE4OjA4IDE5OTcgIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiBpbmZvL01ha2VmaWxlLmFtIChFWFRSQV9ESVNUKSwKCSogdXRpbC9NYWtlZmlsZS5hbSAoRVhUUkFfRElTVCksCgkqIG1ha2VpbmZvL01ha2VmaWxlLmFtIChFWFRSQV9ESVNUKSwKCSogbGliL01ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogSW5jbHVkZSBSRUFETUUuCgoJKiBkb2MvdGV4aW5mby50ZXhpIChtYWtlaW5mbyBvcHRpb25zKTogRG9jdW1lbnQgLS1wYXJhZ3JhcGgtaW5kZW50CiAJCXZhbHVlcyBtb3JlIGNvbXBsZXRlbHkuCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKHNldF9wYXJhZ3JhcGhfaW5kZW50KTogQWxsb3cgdHJhbnNsYXRlZAogCQlhc2lzIG9yIG5vbmUsIGltcHJvdmUgZG9jLgogCUZyb20ga2UuCgoJKiBkb2MvTWFrZWZpbGUuYW0gKGRpc3QtaW5mbyk6IE5ldyBlbXB0eSB0YXJnZXQgc28gdGhhdCB3ZSBkbyBub3QKIAkJZGlzdHJpYnV0ZSBpbmZvIGZpbGVzLgogCUZyb20gRXJpY2sgQnJhbmRlcmhvcnN0LgoKCSogZG9jL3RleGluZm8udGV4aSAoSW52b2tpbmcgaW5zdGFsbC1pbmZvKTogRG9jdW1lbnQgdGhhdCB0aGUgZGlyCgkJZmlsZSBpcyBjcmVhdGVkIG5vdyBpZiBuZWVkIGJlLgoJKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IE5vIGxvbmdlciBuZWVkIGRpci4KCSogdXRpbC9pbnN0YWxsLWluZm8uYyAoZW5zdXJlX2RpcmZpbGVfZXhpc3RzKTogTmV3IHJvdXRpbmUuCgkobWFpbik6IENhbGwgaXQgYmVmb3JlIHRyeWluZyB0byBvcGVuIGRpcmZpbGUgZm9yIHJlYWRpbmcuCgoJKiBkb2MvdGV4aW5mby50ZXhpOiBEb2N1bWVudCBpbnN0YWxsLWluZm8gLS1kZWxldGUgYSBsaXR0bGUgYmV0dGVyLgoJKiB1dGlsL2luc3RhbGwtaW5mby5jOiBTZXQgc29tZXRoaW5nX2RlbGV0ZWQgd2hlbiB3ZSBkZWxldGUgYQogCQlub3JtYWwgbGluZS4KCUJ1ZyBmcm9tOiBEZW5pcyBLb3N5Z2luIDxka29zeWdpbkBtYXRoLlByaW5jZXRvbi5FRFU+LgoKCSogdXRpbC9pbnN0YWxsLWluZm8uYzogSWYgbm8gaW5mbyBkaXIgZW50cnksIGdpdmUgd2FybmluZyBhbmQgZXhpdCAwLgoKV2VkIEp1bCAgMiAwNjozNToxNyAxOTk3ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogY29uZmlndXJlLmluIChBTExfTElOR1VBUyk6IEFkZCBmci4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmggKGluc2VydGlvbl90eXBlLCBpbnNlcnRpb25fdHlwZV9uYW1lcyk6IEFkZAoJCWlmbm90Li4uIGVudHJpZXMuIEFscGhhYmV0aXplLgoKVHVlIEp1bCAgMSAxNzoyMTo1NCAxOTk3ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAoc29ydF9pbmRleCk6IFNldCBkZWZpbmluZ19saW5lIGFuZAoJCWlucHV0X2ZpbGVuYW1lIHNvIGVycm9ycyBpbiBpbmRleCBlbnRyaWVzIGFyZSByZXBvcnRlZCBhdAoJCXRoZSBjb3JyZWN0IGxvY2F0aW9uLiAgRnJvbSBybXMuCgoJKiBtYWtlaW5mby9tYWtlaW5mby5jIChjbV9pZm5vdGh0bWwsIGV0Yy4pOiBSb3V0aW5lcyBmb3IgbmV3CiAJCWNvbW1hbmRzLgoKU3VuIEp1biAyOSAwOTo0NDowMSAxOTk3ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogZG9jL3RleGluZm8udGV4aTogRG9jdW1lbnQgbmV3IEBpZm5vdC4uLiBjb21tYW5kcywgZXRjLgoJKiBkb2MvdGV4aW5mby50ZXhpOiBEb2N1bWVudCBAaW1hZ2UsIGV0Yy4KClRodSBKdW4gMjYgMTc6NTc6MzcgMTk5NyAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKGNtX2ltYWdlKTogTmV3IHJvdXRpbmUgZm9yIG5ldyBjb21tYW5kIEBpbWFnZS4KCShjbV9lbmQpOiBNb3ZlIHRvIGJldHRlciBwbGFjZSwgZG9lc24ndCBuZWVkIGl0cyBvd24gcGFnZS4KCURvYyBmaXhlcy4KCk1vbiBKdW4gMjMgMTY6NTQ6MDMgMTk5NyAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIE1ha2VmaWxlLmFtIChTVUJESVJTKTogRG8gaW50bCBmaXJzdC4KCgkqIGRvYy9NYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEluY2x1ZGUgZXBzZi50ZXguCgkoaW5zdGFsbC1kYXRhLWxvY2FsKTogU3VnZ2VzdCBwb3NzaWJsZSBpbnN0YWxsYXRpb24gZGlyZWN0b3J5LgoJKiBlcHNmLnRleDogTmV3IGZpbGUuCgpXZWQgSnVuIDE4IDE3OjUxOjUyIDE5OTcgIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiBkb2MvdGV4aW5mby50ZXhpOiBEb2N1bWVudCB0ZXhpbmZvLmNuZi4KClN1biBKdW4gMTUgMTQ6Mzc6NTggMTk5NyAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIGRvYy90ZXhpbmZvLnRleGkgKENvbW1hbmQgTGlzdCk6IFZhcmlvdXMgY29tbWFuZHMgbWlzc2luZyBvcgoJCWVycm9uZW91cy4KCUZyb206IEthcmxfSGVpbnpfTWFyYmFpc2VAcDY5LmtzLmZpZG8uZGUuCgoJKiBtYWtlaW5mby9tYWtlaW5mby5jOiBPb3BzLCBmYWlsZWQgdG8gYnJlYWsgb3V0IG9mIGxvb3AuCgoJKiB1dGlsL3RleGluZGV4LmM6IFVzZSA8Z2V0b3B0Lmg+IG5vdCAiZ2V0b3B0LmgiLgoKCSogQWxsIHNvdXJjZSBmaWxlczogTWVyZ2UgZ2V0dGV4dCBjaGFuZ2VzIGZyb20gS2FybCBFLjsKCWhpcyBDaGFuZ2VMb2cgZW50cmllcyBiZWxvdy4KClNhdCBKdW4gMTQgMTc6MDQ6MjggMTk5NyAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIE1ha2VmaWxlLmFtLAoJKiBtYWtlaW5mby9NYWtlZmlsZS5hbTogRG9jIGZpeC4KCSogdXRpbC9NYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkZCB0ZXhpMmR2aS4gIEZyb20gS2FybCBFLgoKRnJpIEp1biAxMyAxNzozOTozNCAxOTk3ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyBbV0lOMzJdOiBIYW5kbGUgcmVhZCBib2dvc2l0eSBhbmQgYzpcCgkJYWJzb2x1dGUgcGF0aHMuCglGcm9tOiBFcmljIEhhbmNocm93IDxlcmljaEBNSUNST1NPRlQuY29tPi4KCgkqIGNvbmZpZ3VyZS5pbiAoQUNfQ0hFQ0tfSEVBREVSUyk6IENoZWNrIGZvciBwd2QuaC4KCSogaW5mby90aWxkZS5jIChwd2QuaCk6IE1vdmUgI2luY2x1ZGUgdG8gc3lzdGVtLmguCgoJKiBtYWtlaW5mby9tYWtlaW5mby5jIChtYWluKTogTmV3IG9wdGlvbiAtUCB0byBwcmVwZW5kIHRvIHNlYXJjaCBwYXRoLgoJRnJvbTogS2VubmV0aCBTdGFpbGV5IDxrc3RhaWxleUBjdnMub3BlbmJzZC5vcmc+LgoKCSogZG9jL3RleGluZm8udGV4aSAoSW52b2tpbmcgbWFrZWluZm8pLAoJKiBkb2MvbWFrZWluZm8udGV4aTogTWVudGlvbiAtUC4KClRodSBKdW4gMTIgMTY6MjU6NDAgMTk5NyAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIGluZm8vc2lnbmFscy5oIChTSUdDSExEKTogI2RlZmluZSBhcyBTSUdDTEQgaWYgdW5kZWZpbmVkLCBmb3Igc3lzVjY4LgoJRnJvbTogIlBoaWxpcHBlIERlIE11eXRlciIgPHBoZG0lbGFiYXV0bzFAdWxiLmFjLmJlPi4KCgkqIHV0aWwvaW5zdGFsbC1pbmZvLmMgKE9fUkRPTkxZKTogUmVtb3ZlIHRoaXMgc3R1ZmYsIGl0J3MgaW4gc3lzdGVtLmguCiAJKG1haW4pOiBIYW5kbGUgZXhpc3RpbmcgZW50cnkgaW4gZGlyIGZpbGUgaGF2aW5nIC5pbmZvIGV4dGVuc2lvbi4KCUZyb206ICJCcmFkbGV5IEMuIEt1c3ptYXVsIiA8YnJhZGxleUBHUkFOSVRFLlNZU1RFTVNYLkNTLllBTEUuRURVPi4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKGdldF9jaGFyX2xlbik6IERvbid0IGNvdW50IDgtYml0IGNoYXJhY3RlcnMKCQlhcyB0d28gY2hhcnMgaW4gdGhlIG91dHB1dC4KCUZyb206IFN1bmctSHl1biBOYW0gPG5hbXNoQGFtdW5hLnJtcy5sZ2ljLmNvLmtyPi4KCldlZCBKdW4gMTEgMTY6MzY6NTEgMTk5NyAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIGRvYy90ZXhpbmZvLnRleGkgKE90aGVyIEluZm8gRGlyZWN0b3JpZXMpOiBEb2N1bWVudCBuZXcgdHJhaWxpbmcKIAkJOiBpbiBJTkZPUEFUSCBmZWF0dXJlLgoKCSogaW5mby9pbmZvLmMgKG1haW4pOiBIYXZlIHRyYWlsaW5nIDogaW4gSU5GT1BBVEggZXhwYW5kIHRvIHRoZQogCQlkZWZhdWx0IHBhdGguCgpGcmkgSnVuICA2IDEzOjIyOjAyIDE5OTcgIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiBkb2MvdGV4aW5mby50ZXhpICh1cmVmKTogTmV3IG5vZGUgZm9yIG5ldyBjb21tYW5kLgoKVGh1IEp1biAgNSAxODoxMzo0OCAxOTk3ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAoY21fdXJlZik6IE5ldyBmdW5jdGlvbiB0byBhY2NlcHQgb3B0aW9uYWwKCQlzZWNvbmQgYXJndW1lbnQuICBDYWxsIGl0IGluIGNvbW1hbmQgdGFibGUuCgpTYXQgSnVuIDE0IDEwOjU0OjE2IDE5OTcgIEthcmwgRWljaHdhbGRlciAgPGtlQHN1c2UuZGU+CgoJKiBta2luc3RhbGxkaXJzOiBVcGRhdGUgZnJvbSBhdXRvbWFrZS0xLjFwLgoKCSogY29uZmlndXJlLmluOiBUb3VjaCBwby9DaGFuZ2VMb2cgKGdldHRleHQgbmVlZHMgaXQpLgoKVGh1IEp1biAxMiAwODozNzo1MiAxOTk3ICBLYXJsIEVpY2h3YWxkZXIgIDxrZUBrZS5DZW50cmFsLkRFPgoKCSogdXRpbC90ZXhpbmRleC5jOiBJbmNsdWRlIHN5c3RlbS5oLCByZW1vdmUgY29uZmlnLmguCgoJKiBwby9QT1RGSUxFUy5pbjogRmlsbCBpdC4KCgkqIG1ha2VpbmZvL211bHRpLmM6IEluY2x1ZGUgc3lzdGVtLmguCgoJKiBpbmZvL01ha2VmaWxlLmFtOgoJKiBtYWtlaW5mby9NYWtlZmlsZS5hbToKCSogdXRpbC9NYWtlZmlsZS5hbToKIAkobG9jYWxlZGlyKTogU2V0LgoJKElOQ0xVREVTKTogQWRkIGludGwvIGFuZCBMT0NBTEVESVIuCgkoTERBREQpOiBBZGQgQElOVExMSUJTQC4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKG1haW4pOgoJKiB1dGlsL3RleGluZGV4LmMgKG1haW4pOgoJKiB1dGlsL2luc3RhbGwtaW5mby5jIChtYWluKToKIAlzZXRsb2NhbGUsIGJpbmR0ZXh0ZG9tYWluLCBhbmQgdGV4dGRvbWFpbi4KCgkqIGxpYi9zeXN0ZW0uaDogSW5jbHVkZSBsb2NhbGUuaCBhbmQgbGliaW50bC5oLgoKCSogYWNjb25maWcuaDogSW5jbHVkZSBsaWJpbnRsLmguCgkoXywgTl8pOiBEZWZpbmUuCglBZGQgRU5BQkxFX05MUywgSEFWRV9DQVRHRVRTLCBIQVZFX0dFVFRFWFQsIEhBVkVfTENfTUVTU0FHRVMsCglIQVZFX1NUUENQWSBmb3IgbGliaW50bC4KCUFkZCBAVE9QQCBhbmQgQEJPVFRPTUAuCgoJKiBjb25maWd1cmUuaW4gKEFNX0dOVV9HRVRURVhUKTogQWRkLgoJKEFDX09VVFBVVCk6IFByb2Nlc3MgTWFrZWZpbGVzIGluIGludGwvIGFuZCBwby8uCgkoQUxMX0xJTkdVQVMpOiBBdmFpbGFibGUgbGFuZ3VhZ2VzLgoKCSogTWFrZWZpbGUuYW0gKEFVVE9NQUtFX09QVElPTlMpOiBOb3cgdXNlIDEuMXAuCgpXZWQgSnVuIDExIDE3OjA1OjM3IDE5OTcgIEthcmwgRWljaHdhbGRlciAgPGtlQGtlLkNlbnRyYWwuREU+CgoJKiBNYWtlZmlsZS5hbSAoU1VCRElSUyk6IEFkZCBpbnRsLyBhbmQgcG8vIGZvciBOTFMuCgoJKiBydW4gYGdldHRleHRpemUgLWMnIHRvIGdldCB0aGUgaTE4biBza2VsZXRvbi4KCldlZCBKdW4gIDQgMTc6NTE6MDggMTk5NyAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKHVyZWYpOiBOZXcgY29tbWFuZCwgYW5vdGhlciBhbGlhcyBmb3IgQGNvZGUKIAkJZm9yIG5vdy4KCldlZCBKdW4gIDQgMDI6MDI6MzMgMTk5NyAgTWlsZXMgQmFkZXIgIDxtaWxlc0BnbnUuYWkubWl0LmVkdT4KCiAgICAgICAgKiBkb2MvdGV4aW5mby50ZXhpIChlbWFpbCk6IHsgYW5kIH0gbmVlZCBAIGVzY2FwZXMuCgpTdW4gSnVuICAxIDE2OjM0OjEyIDE5OTcgIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiBkb2MvdGV4aW5mby50ZXhpIChpdGVteCk6IEBpdGVteCBzaG91bGQgYWx3YXlzIGZvbGxvdyBAaXRlbS4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKGNtX2l0ZW0pOiBJbnNlcnQgYmxhbmsgbGluZSBpZiB0d28KCQljb25zZWN1dGl2ZSBAaXRlbSdzLgoJRnJvbTogS2FybCBFaWNod2FsZGVyIDxrZUBrZS5jZW50cmFsLmRlPi4KCUFsc28gdmFyaW91cyBkb2MgZml4ZXMuCgpUdWUgTWF5IDI3IDE3OjIwOjQ0IDE5OTcgIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiBkb2MvdGV4aW5mby50ZXhpICh2YXJpb3VzKTogRG9jdW1lbnQgQGRlZnR5cGVtZXRob2QuCgkoZW1haWwpOiBAIHNob3VsZCBoYXZlIGJlZW4gQEAgaW4gdGhlIGV4YW1wbGUuCglGcm9tOiBNYXRlIFdpZXJkbCA8bXdAd2llcmRsbXBjLm1zY2kubWVtcGhpcy5lZHU+CgpNb24gTWF5IDI2IDE2OjU2OjI2IDE5OTcgIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiBtYWtlaW5mby9tdWx0aS5jIChzZXR1cF9tdWx0aXRhYmxlX3BhcmFtZXRlcnMpOiBBdm9pZCB1c2Ugb2YgJW4KCQlmb3Igc2FrZSBvZiBtNjhrLWhwLWJzZC4KCUZyb206IERlcmVrIEwgRGF2aWVzIDxkZGF2aWVzQHdvcmxkLnN0ZC5jb20+LgoKCSogaW5mby90ZXJtaW5hbC5jICh0ZXJtaW5hbF9iZWdpbl91c2luZ190ZXJtaW5hbCwKICAgICAgICB0ZXJtaW5hbF9lbmRfdXNpbmdfdGVybWluYWwpOiBDYWxsIGZmbHVzaCBhbmQgc2xlZXAgdG8gaGFuZGxlCgljbWR0b29sL3NoZWxsdG9vbCB3aXRoIHNjcm9sbGJhcnMuICBBbHNvIGlnbm9yZQogCVNJR1dJTkNIIHNvIHdlIGRvIG5vdCBwcmVtYXR1cmVseSBleGl0LiAgTW92ZSBjYWxsLgoJKHRlcm1pbmFsX3ByZXBfdGVybWluYWwpOiBEaXNhYmxlIExORVhUIChDVFJMLVYpLgoJRnJvbTogc3RydWJlQHBoeXNpazMuZ3dkZy5kZSAoSGFucyBXZXJuZXIgU3RydWJlKS4KCgkqIGNvbmZpZ3VyZS5pbiAoQUNfVFlQRV9TSUdOQUwpOiBDaGVjayB0aGlzLgoKU3VuIE1heSAyNSAxNjo0OTo1OCAxOTk3ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAoZGlzY2FyZF9pbnNlcnRpb25zKTogVGFrZSBhcmcgc2F5aW5nCiAJCXdoZXRoZXIgaWZpbmZvL2lmc2V0L2V0Yy4gYXJlIG9rLgogICAgICAgIChjb252ZXJ0X2Zyb21fbG9hZGVkX2ZpbGUpOiBBdCBgZmluaXNoZWQnLCBjYWxsIGRpc2NhcmRfaW5zZXJ0aW9ucy4KCShoYW5kbGVfdmFyaWFibGVfaW50ZXJuYWwpOiBDb21wbGFpbiBpZiB3ZSByZWFjaCBlb2YgYmVmb3JlIHRoZQoJCUBlbmQgZm9yIGEgZmFsc2UgY29uZGl0aW9uLgoJRnJvbTogSEVSQkVSVEBib2V2bTQudm5ldC5pYm0uY29tLgoKCSogaW5mby9NYWtlZmlsZS5hbSAoZ2luZm9fU09VUkNFUyk6IEFkZCBkb2MuaC4KCSogbGliL01ha2VmaWxlLmFtIChsaWJ0eGlfYV9TT1VSQ0VTKTogQWRkIHN5c3RlbS5oLgoKU2F0IE1heSAyNCAxODowODoyNyAxOTk3ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogbWFrZWluZm8vbWFrZWluZm8uYzogQ2hlY2sgdGhhdCB3ZSBoYXZlIG1hY3JvX2V4cGFuc2lvbl9maWxlbmFtZQogCQliZWZvcmUgdXNpbmcgc3RyY21wLgoKVGh1IE1heSAyMiAxNzo1OTo0NiAxOTk3ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogZG9jL21ha2VpbmZvLnRleGk6IE1pbmltYWxseSBkb2N1bWVudCAtLWZvcmNlLgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAoLS1mb3JjZSk6IE5ldyBvcHRpb24uCgkoLUUpOiBBbGxvdyBzdGRvdXQgdmlhIGAtJy4KCShjb252ZXJ0X2Zyb21fbG9hZGVkX2ZpbGUpOiBVbmxpbmsgb3V0cHV0IGZpbGVzIGlmIGVycm9ycyBhbmQgIWZvcmNlLgoKVHVlIE1heSAyMCAxNzo0ODo0MiAxOTk3ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogbWFrZWluZm8vbWFrZWluZm8uYzogQ2hhbmdlIGFsbCBzdHJkdXAgY2FsbHMgdG8geHN0cmR1cC4KCSh4bWFsbG9jLCB4cmVhbGxvYywgbWVtb3J5X2Vycm9yKTogUmVtb3ZlIHRoZXNlIGZ1bmN0aW9ucywgdGhleSdyZQoJCWluIGxpYi4KCShzZXRfcGFyYWdyYXBoX2luZGVudCwgY21fcGFyYWdyYXBoX2luZGVudCk6IE1vdmUgdG8gbWlzYyBwYWdlLgoJKGNtX2Zvb3Rub3RlKTogRXhwYW5kIG1hY3JvcyBpbiB0aGUgYXJnIGZvciB0aGUgbWFjcm8gZXhwYW5zaW9uIG91dHB1dC4KCkZyaSBNYXkgMTYgMTc6MjY6NTkgMTk5NyAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKGNtX21hY3JvKTogQWxsb2NhdGUgYW4gZW1wdHkgYm9keSBpZiB0aGUKIAkJbWFjcm8gd2FzIGVtcHR5LgogCShjbV91bm1hY3JvKTogQWxsb2NhdGUgb25lIG1vcmUgYnl0ZSBmb3IgdGhlIG51bGwuCglGcm9tOiBSb2JlcnQgSG9laG5lIDxyb2JlcnQuaG9laG5lQE1hdGhlbWF0aWsuVFUtQ2hlbW5pdHouREU+LgoKU3VuIE1heSAxMSAxNzo1MToyMSAxOTk3ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5pbmZvcm1hdGlrLnVuaS1kb3J0bXVuZC5kZT4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKGNtX3ByaW50aW5kZXgpOiBGaXggY2FsY3VsYXRpb24gb2YgdGhlCglsZW5ndGggb2YgYW4gaW5kZXggbGluZS4KClN1biBNYXkgMTEgMTQ6NDc6NDIgMTk5NyAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAobWFpbik6IERvbid0IHVuY29uZGl0aW9uYWxseSBydW4gdXNhZ2Ugd2hlbgoJLWUgc3BlY2lmaWVkLgoKU3VuIE1heSAxMSAxNzo0Nzo0MiAxOTk3ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAoaW5pdF9pbmRpY2VzKTogRnJlZSB0aGUgc291cmNlIGZvciBhbiBAc3luaW5kZXguCgkodW5kZWZpbmRleCk6IERvIG5vdCBnbyBmdXJ0aGVyIGlmIHRoZSB0YXJnZXQgd2FzIGFscmVhZHkgZnJlZWQuCgkoZnJlZV9pbmRleCk6IERvIG5vdCBmcmVlIHRoZSBub2RlIG5hbWVzLCBhcyBpbml0X3RhZ3MgYWxyZWFkeSBkaWQuCgkoY21fc3luaW5kZXgsIGluZGV4X2FkZF9hcmcpOiBJbXByb3ZlIGVycm9yIG1lc3NhZ2UuCgkocHJvZ3JhbV9pbmRleCwgZnVuY3Rpb25faW5kZXgsIGV0Yy4pOiBSZW1vdmUgdGhlc2UgdW51c2VkICNkZWZpbmVzLgoKVHVlIE1heSAgNiAxNzo1MzozNyAxOTk3ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAoaW5pdF9pbnRlcm5hbHMpOiBEbyBub3QgZnJlZSBjdXJyZW50X25vZGUsCiAgICAgICAgaXQgYWxyZWFkeSBpcywgYXQgbGVhc3Qgd2hlbiBtdWx0aXBsZSBpbnB1dCBmaWxlcyBhcmUgc3BlY2lmaWVkLgoJRnJvbTogS2FybCBFaWNod2FsZGVyIDxrZUBrZS5jZW50cmFsLmRlPi4KCk1vbiBNYXkgIDUgMTY6MTQ6MzkgMTk5NyAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIGRvYy90ZXhpbmZvLnRleGk6IE1lbnRpb24gYm90aCBhbGlnbm1lbnQgYW5kIG5vbi1hbGlnbm1lbnQgb2YKIAkJY29udGludWF0aW9uIGRlc2NyaXB0aW9uIGxpbmVzIGluIG1lbnVzIChBcm5vbGQpLgoKU3VuIEFwciAyNyAxNjoxMjo0NCAxOTk3ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAoYXBwbHkpOiBIYW5kbGUgYm9keSBiZWluZyBgXHN0cmluZycuCglBbHNvLCBhdm9pZCBkZXJlZmVyZW5jaW5nIGEgbnVsbCBwb2ludGVyIHdoZW4gYSBtYWNybyBoYXMgbm8gbmFtZWQKCXBhcmFtZXRlcnMuCglGcm9tOiBFbGkgWmFyZXRza2lpIDxlbGl6QGlzLmVsdGEuY28uaWw+LgoKCSogbWFrZWluZm8vbWFrZWluZm8uYzogV29yZGluZyBjaGFuZ2VzL2ZpeGVzIGluIHdhcm5pbmdzLgoKCSogaW5mby9zZXNzaW9uLmMgKGluZm9fZ2V0X2lucHV0X2NoYXIpOiBEbyBub3QgbWl4IHN0ZGlvIHdpdGggcmF3IEkvTy4KCUZyb206IEVnaWwgS3ZhbGViZXJnIDxlZ2lsa0Bzbi5ubz4uCgoJRnJvbSBUb20gSGFnZW1hbiA8dG9tQGJhc2lsLmljY2UucnVnLm5sPi4gIFRoZXNlIGNoYW5nZXMgbWFrZQogICAgICAgIGFycm93IGtleXMgd29yazoKCSogaW5mby9pbmZvbWFwLmM6IEFkZCBhcnJvdyBrZXkgYmluZGluZ3MuCiAgICAgICAgKGtleW1hcF9iaW5kX2tleXNlcSk6IE5ldyBzdXBwb3J0IGZ1bmN0aW9uLgoJKGluaXRpYWxpemVfaW5mb19rZXltYXBzKTogVXNlIGl0LgoJKHRlcm1fa3UsdGVybV9rZCx0ZXJtX2tsLHRlcm1fa3IpOiBSZW1vdmUgZXhwbGljaXQgZGVjbGFyYXRpb25zOwoJdXNlICNpbmNsdWRlICJ0ZXJtaW5hbC5oIiBpbnN0ZWFkLgoJKiBpbmZvL3Nlc3Npb24uYyAoaW5pdGlhbGl6ZV9pbmZvX3Nlc3Npb24pOiBVbmJ1ZmZlciBzdGRpbi4KCShpbmZvX2dldF9hbm90aGVyX2lucHV0X2NoYXIpOiBGaXggYnVnIGluIGByZWFkeScgbG9naWMuCgkqIGluZm8vdGVybWluYWwuaCwKCSogaW5mby90ZXJtaW5hbC5jICh0ZXJtX2tQLCB0ZXJtX2tOKTogTmV3IHZhcmlhYmxlcyB0byBob2xkCiAJCVBhZ2VVcCwgUGFnZURvd24ga2V5IHNlcXVlbmNlcy4KCSAgKHRlcm1pbmFsX2luaXRpYWxpemVfdGVybWluYWwpOiBTZXQgdGhlbS4KCgkqIHV0aWwvdGV4aW5kZXguYyAobWFpbiksCgkqIHV0aWwvaW5zdGFsbC1pbmZvLmMgKG1haW4pLAoJKiBtYWtlaW5mby9tYWtlaW5mby5jIChwcmludF92ZXJzaW9uX2luZm8pLAoJKiBpbmZvL2luZm8uYyAobWFpbik6IFVzZSBQQUNLQUdFIGFuZCBWRVJTSU9OIGZyb20gQXV0b21ha2UgZm9yCiAJCXByaW50aW5nIHZlcnNpb24gbnVtYmVyLgoKU2F0IEFwciAyNiAxOToxOTo0NiAxOTk3ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAoZ2V0X3VudGlsX2luX2xpbmUpOiBEbyBub3QgZXhwYW5kIGlmCgkJZXhlY3V0aW5nX3N0cmluZy4KCUFsc28sIGZyZWUgdGVtcG9yYXJ5IHN0cmluZ3MuCglBbHNvLCB1bnRhYmlmeSBlbnRpcmUgZmlsZS4KCgkqIGRvYy90ZXhpbmZvLnRleGk6IE1hbnkgY29ycmVjdGlvbnMgZnJvbSBBcm5vbGQuCgpUaHUgQXByIDI0IDE2OjMxOjA5IDE5OTcgIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiBtYWtlaW5mby9tdWx0aS5jIChkcmF3X2hvcml6b250YWxfc2VwYXJhdG9yKTogQWNjb3VudCBmb3IgaW5kZW50CiAJCWhlcmUgYWxzby4gIEZyb20gVWxyaWNoLgoKV2VkIEFwciAyMyAxNToxNTozNCAxOTk3ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAoY21fdG9kYXkpOiBVc2UgdGltZV90IGluc3RlYWQgb2YgbG9uZzsKIAkJZXZlcnlvbmUgZWxzZSBkb2VzLgogCShMT0NBTFRJTUVfQ0FTVCk6IFJlbW92ZSBrbHVkZ2UsIHdlJ2xsIGFsd2F5cyB1c2UgdGltZV90IG5vdy4KCgkqIGluZm8vTWFrZWZpbGUuYW0gKGdpbmZvX1NPVVJDRVMpOiBSZW1vdmUgZ2VuZXJhbC5oLCB0aGF0IGdvdAogCQltZXJnZWQgaW50byBzeXN0ZW0uaC4KCk1vbiBBcHIgMjEgMTc6MTM6MjUgMTk5NyAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIG1ha2VpbmZvL211bHRpLmMgKG91dHB1dF9tdWx0aXRhYmxlX3Jvdyk6IEFjY291bnQgZm9yCiAJY29sdW1uX2luZGVudCwgYm90aCB0aGUgZ2xvYmFsIG9uZSBhbmQgZm9yIGVhY2ggY29sdW1uLgoJKHNldHVwX211bHRpdGFibGVfcGFyYW1ldGVycyk6IEFjY291bnQgZm9yIGNvbHVtbl9pbmRlbnQgaW4gdGhlIHRhYmxlCgl3aWR0aCBpbiB0aGUgY29sdW1uZnJhYyBjYXNlLCBidXQgZG9uJ3QgYm90aGVyIHdpdGggdGhlIHRlbXBsYXRlCiAJCWNhc2UgZm9yIG5vdy4KClN1biBBcHIgMjAgMTY6MzI6MDAgMTk5NyAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKG91dHB1dF9zdHJlYW0pOiBSZW1vdmUgcmVkdW5kYW50CiAgICAgICAgZGVmaW5pdGlvbjsgaXQncyBpbiBtYWtlaW5mby5oLAoJYW5kIGEgdmF4c3RhdGlvbi11bHRyaXg0LjMgZmFpbHMgdG8gbGluayBiZWNhdXNlIG9mIHRoZSB0d28gZGVmbnMuCglGcm9tOiBBbmRlcnMgT2xvZnNzb24gPGFuZGVyc0BraWQwMjUuZXJpY3Nzb24uc2U+LgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAoZXhwYW5zaW9uKTogSW5oaWJpdCBhcHBlbmRpbmcgdG8gdGhlIG1hY3JvCiAJCWV4cGFuc2lvbiBzdHJlYW0uCiAJKGdldF91bnRpbF9pbl9saW5lKTogUG9zc2libHkgZXhwYW5kIHRoZSB0ZXh0LgoJQ2hhbmdlIGNhbGxlciBpbiBnZXRfbm9kZV90b2tlbiB0byBkbyB0aGUgZXhwYW5zaW9uLAoJYWxsIG90aGVyIGNhbGxzIHRvIHJlbWFpbiB0aGUgc2FtZS4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKGNtX25vZGUpOiBObyBuZWVkIHRvIGNhbGwgc3RybGVuIHRvIGNoZWNrCiAJCWZvciB0aGUgZW1wdHkgc3RyaW5nLgoKCSogZG9jL3RleGluZm8udGV4aTogUmVzdG9yZSBtaXNzaW5nIEBjIGZvciBpbml0aWFsIGNvbW1lbnQuCgpGcmkgQXByIDE4IDE3OjQxOjM2IDE5OTcgIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiBkb2MvdGV4aW5mby50ZXhpOiBNZW50aW9uIHRoYXQgLmluZm8gaXMgdW5uZWNlc3NhcnkgaW4gdGhlIGluZm8KCQlmaWxlIG5hbWUgYXJndW1lbnQgb2YgYW4geHJlZi4KCgkqIGRvYy90ZXhpbmZvLnRleGk6IE1lbnRpb24gdGV4aTJkdmkgLXQgaW5zdGVhZCBvZiBlbWJlZGRpbmcKIAkJQHNtYWxsYm9vayBvciBAYWZvdXJwYXBlciBpbiB0aGUgZG9jdW1lbnQgc291cmNlLgoKU3VuIEFwciAxMyAxNToxOTowOCAxOTk3ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogbGliL3N5c3RlbS5oIChfR05VX1NPVVJDRSk6ICNkZWZpbmUuCgpNb24gQXByICA3IDE2OjMwOjExIDE5OTcgIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiBkb2MvaW5mby50ZXhpLAoJKiBkb2MvaW5mby1zdG5kLnRleGksCgkqIGRvYy90ZXhpbmZvLnRleGk6IERvIG5vdCBtYWtlIChkaXIpIHRoZSBwcmV2aW91cyBwdHIgZnJvbSB0aGUgdG9wIG5vZGUsCglhbmQgdGVsbCBwZW9wbGUgbm90IHRvIGRvIHRoYXQgaW4gdGhlIG1hbnVhbC4KCUZyb206IHJtZWRpbmFAa2Fub2pvLml2aWMudmUgKFJvZHJpZ28gTWVkaW5hKSwKCWNvbmZpcm1lZCBieSBybXMuCgpGcmkgQXByICA0IDE2OjMwOjMzIDE5OTcgIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiBtYWtlaW5mby9tYWtlaW5mby5jOiBNb3ZlIGVycm9yIHBhZ2UgdG8gdG9wIHRvIGF2b2lkCglwcm90b3R5cGVzLCBhbmQgZG8gYWRkIHByb3RvdHlwZXMgZm9yIGFkZF93b3JkX2FyZ3MgYW5kIGV4ZWN1dGVfc3RyaW5nLAoJc28gd2UgY2FuIHVzZSA8c3RkYXJnLmg+LgoKCSogaW5mby9tYWtlZG9jLmMsCgkqIGluZm8vbm9kZW1lbnUuYzogVXNlICVsZCBpbnN0ZWFkIG9mICVkIGZvciBmaWxlIG9mZnNldHMuCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKGRlbGV0ZV9tYWNybyk6IERlY3JlbWVudCBtYWNyb19saXN0X2xlbi4KCShnZXRfbWFjcm9fYXJncyk6IERlY3JlbWVudCBsaW5lIG51bWJlciBpZiBzZWUgXG4uCgkqIHV0aWxzL3RleGluZGV4LmMgKGluZGV4aWZ5KTogVXNlIGZwdXRzIGluc3RlYWQgb2YgZnByaW50ZgoJZm9yIGNvbnN0YW50IHN0cmluZy4KCUZyb206IEVsaSBaYXJldHNraWkgPGVsaXpAaXMuZWx0YS5jby5pbD4uCgpUaHUgQXByICAzIDE3OjQwOjUyIDE5OTcgIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiBjb25maWd1cmUuaW4gKEFDX0NIRUNLX0hFQURFUlMpOiBObyBuZWVkIHRvIGNoZWNrIGZvciB2YXJhcmcuaAoJaGVyZSwgQUNfRlVOQ19WUFJJTlRGIGRvZXMgaXQuCgkoQUNfQ0hFQ0tfRlVOQ1MpOiBMaWtld2lzZSBmb3IgdnNwcmludGYgYW5kIHZmcHJpbnRmLgoJKiBtYWtlaW5mby9tYWtlaW5mby5jIChhZGRfd29yZF9hcmdzLCBleGVjdXRlX3N0cmluZyk6IFJld3JpdGUKCWxpa2UgdGhlIGVycm9yIGZ1bmN0aW9ucy4KCldlZCBBcHIgIDIgMTc6NDY6MjggMTk5NyAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIGNvbmZpZ3VyZS5pbjogQWRkIEFDX0ZVTkNfVlBSSU5URi4KCSogbWFrZWluZm8vbWFrZWluZm8uYyAoZXJyb3IsIGxpbmVfZXJyb3IsIHdhcm5pbmcpOiBSZXdyaXRlIGEgbGEKICAgICAgICBlcnJvci5jIGZyb20gdGhlICp1dGlscyB0byB1c2UgPHN0ZGFyZy5oPiBpZiBhdmFpbGFibGUuCgpUdWUgQXByICAxIDExOjQ4OjQwIDE5OTcgIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiBkb2MvdGV4aW5mby50ZXhpOiBUYWJzIGFyZSBhIGJhZCBpZGVhLgoKCSogZG9jL3VzZXJkb2MudGV4aSwKCSogZG9jL2luZm8udGV4aTogVW50YWJpZnkuCgpTdW4gTWFyIDMwIDE3OjM2OjQ3IDE5OTcgIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiBtYWtlaW5mby9tYWtlaW5mby5jIChlbmRfb2Zfc2VudGVuY2VfcCk6IE5ldyBmdW5jdGlvbi4KCShhZGRfY2hhcik6IENhbGwgaXQsIGluc3RlYWQgb2Ygc2ltcGx5IHNlbnRlbmNlX2VuZGVyLgoJKHBvc3Rfc2VudGVuY2UpOiBOZXcgbWFjcm8uCglBbHNvLCByZW1vdmUgc29tZSAjaW5jbHVkZSdzIG5vdyBpbiBzeXN0ZW0uaC4KCSogbGliL3N5c3RlbS5oIFtWTVNdOiAjaW5jbHVkZSA8cGVycm9yLmg+LCBmcm9tIG1ha2VpbmZvLgoKVGh1IE1hciAyNyAxNzo0MTowMyAxOTk3ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogaW5mby9zZWFyY2guYyAoc2tpcF9ub2RlX2NoYXJhY3RlcnMpOiBEbyBub3QgYXJiaXRyYXJpbHkKCXN0cmlwIHRyYWlsaW5nIHBlcmlvZCBmcm9tIGVuZCBvZiBub2RlIG5hbWU7IHRoaXMgaXMgdmFsaWQuCgpNb24gTWFyIDI0IDE2OjQ0OjQyIDE5OTcgIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiBjb25maWd1cmUuaW4gKEFDX09VVFBVVCk6IERvbid0IG5lZWQgdG8gY3JlYXRlIHN0YW1wLWggaGVyZSwKCXRyb21leSBzYXlzIEFNX0NPTkZJR19IRUFERVIgd2lsbCBkbyBpdC4KCgkqIGluZm8vTWFrZWZpbGUuYW0sIHV0aWwvTWFrZWZpbGUuYW0sIG1ha2VpbmZvL01ha2VmaWxlLmFtIChJTkNMVURFUyk6CiAgICAgICAgRG9uJ3QgbmVlZCAtSS4uIChmb3IgY29uZmlnLmgpIG9yIC1JJChzcmNkaXIpLCBzYXlzIHRyb21leS4KICAgICAgICBBdXRvbWFrZSBpbmNsdWRlcyB0aG9zZSBhbHJlYWR5LgoKRnJpIE1hciAxNCAxNTowNToxNyAxOTk3ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogaW5mby9NYWtlZmlsZS5hbTogQnVpbGQgYXMgZ2luZm8sIGluc3RhbGwgYXMgaW5mbywKCXRvIGF2b2lkIGNvbmZsaWN0IHdpdGggdGhlIHN0YW5kYXJkIGluZm8gdGFyZ2V0LgoKCSogbGliL3N5c3RlbS5oOiBOZXcgZmlsZS4KCSogbWFrZWluZm8vbWFrZWluZm8uYyAoc3RyZXJyb3IpOiBSZW1vdmUgZGVjbGFyYXRpb24sCglpbmNsdWRlIHN5c3RlbS5oLCByZW1vdmUgb3RoZXIgcmVkdW5kYW50ICNpZiBzdHVmZi4KCSogaW5mby9nZW5lcmFsLmg6IEluY2x1ZGUgc3lzdGVtLmggaW5zdGVhZCBvZiBkb2luZyBjb21tb24gc3R1ZmYuCgkqIHV0aWwvaW5zdGFsbC1pbmZvLmMgKG15X3N0cmVycm9yKTogUmVtb3ZlIHRoaXMsIHVzZSBzdHJlcnJvciwKCWluY2x1ZGUgc3lzdGVtLmguCgoJKiBpbmZvL3Rlcm1pbmFsLmMgKHRlcm1pbmFsX3ByZXBfdGVybWluYWwpOiBPbmx5IHVzZSBPQ1JOTCBhbmQKCQlPTkxDUiBpZiB0aGV5IGFyZSBkZWZpbmVkLiAgUmVwb3J0ZWQgYnkgbWFueSBwZW9wbGUuCgoJKiBJbnN0YWxsZWQ6CgoJU3VuIERlYyAgMSAxOToyMzo1NCAxOTk2ICBLYXJsIEVpY2h3YWxkZXIgIDxrZUBrZS5DZW50cmFsLkRFPgoKCQkqIGNvbmZpZ3VyZS5pbiAoVEVSTUxJQlMpOiBBZGQgbmN1cnNlcy4KClRodSBNYXIgMTMgMTM6NTk6NDUgMTk5NyAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIGxpYi9NYWtlZmlsZS5hbSAobGlidHhpX2FfU09VUkNFUyk6IEFkZCB4c3RyZHVwLmMuCgkqIGluZm8vKi5jOiBVc2UgeHN0cmR1cCBpbnN0ZWFkIG9mIHN0cmR1cCBldmVyeXdoZXJlLgoKCSogaW5mby90aWxkZS5jOiBEbyBub3QgaW5jbHVkZSBjbGliLmgsIG1vdmUgc3RkbGliLmggaW5jbHVkZSB0bwoJKiBpbmZvL2dlbmVyYWwuaDogaGVyZS4KCgkqIGNvbmZpZ3VyZS5pbiAoQUNfQ09ORklHX0hFQURFUik6IFVzZSB0aGlzLAoJdG8gYXZvaWQgaHVnZWx5IGxvbmcgY29tcGlsZSBsaW5lIHdpdGggYWxsIHRoZSAtRCdzLgoJKiBpbmZvL2dlbmVyYWwuaDogSW5jbHVkZSA8Y29uZmlnLmg+LgoKCSogZW1hY3MvTWFrZWZpbGUuYW0gKGluc3RhbGwsIGluc3RhbGwtZGF0YSk6IERvIEBlY2hvCgl0byB0ZWxsIHRoZSB1c2VyIHRvIGNvbXBpbGUvaW5zdGFsbCB0aGUgZWxpc3AgbWFudWFsbHkuCgoJKiBjb25maWd1cmUuaW4gKEFDX1JFUExBQ0VfRlVOQ1MpOiBNb3ZlIHN0cmVycm9yIGNoZWNrIHRvIGhlcmUuCgkoQUNfQ0hFQ0tfRlVOQ1MpOiBGcm9tIGhlcmUuCgoJKiBsaWIvc3RyZXJyb3IuYzogTmV3IGZpbGUsIGZyb20gZW5zY3JpcHQgKGV0IGFsLikgZGlzdHJpYnV0aW9uLgoKVHVlIE1hciAxMSAxNjozNjoyNSAxOTk3ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogaW5mby9NYWtlZmlsZS5hbSAoaW5mb19TT1VSQ0VTKTogQWRkIGRvYy5jLCBkcmliYmxlLmMsIGluZm9kb2MuYy4KCShMREFERCk6IEFkZCBAVEVSTUxJQlNALgoKCSogaW5mby9pbmZvLmg6IEhBTkRMRV9NQU5fUEFHRVMsIE5BTUVEX0ZVTkNUSU9OUzogRGVmaW5lIHRoZXNlLgoKCSogaW5mby9maWxlc3lzLmg6IFNwdXJpb3VzICEgd2hlbiBERUZBVUxUX0lORk9QQVRIIGlzIG5vdCBkZWZpbmVkLgoKCSogY29uZmlndXJlLmluIChBQ19PVVRQVVQpOiBEbyBsaWIgZmlyc3QgYW5kIGRvYyBsYXN0LgoKCSogaW5mby9lY2hvLWFyZWEuYywKCSogaW5mby9lY2hvLWFyZWEuaCwKCSogaW5mby9pbmZvLmg6IFJlbmFtZSBlY2hvX2FyZWEgdG8gZWNoby1hcmVhLgoKTW9uIE1hciAxMCAxNzo1OTowNSAxOTk3ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogKi9NYWtlZmlsZS5hbTogV3JpdGUgTWFrZWZpbGUuYW0gZmlsZXMgZm9yIEF1dG9tYWtlLgoJKiBkb2M6IE5ldyBzdWJkaXJlY3RvcnksIG1vdmUgYWxsIG1hbnVhbHMgYW5kIHRleGluZm8udGV4IHRoZXJlLgoJKiBBVVRIT1JTLCBUSEFOS1MsIGNvbmZpZy5ndWVzcywgY29uZmlnLnN1YiwgbWtpbnN0YWxsZGlyczogTmV3IGZpbGVzLAoJcmVxdWlyZWQgYnkgQXV0b21ha2UuCgkqIGxpYi94bWFsbG9jLmM6IE1vdmUgZnJvbSBpbmZvLy4KCkZyaSBPY3QgIDQgMDc6NDk6NDkgMTk5NiAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIFZlcnNpb24gMy45LgoKCSogTWFrZWZpbGUuaW4gKGluc3RhbGwpOiBTYXkgdG8gaW5zdGFsbCB0ZXhpbmZvLnRleCBtYW51YWxseS4KCgkqIHV0aWwvdGV4aTJkdmksCgkqIHV0aWwvdGV4aW5kZXguYywKCSogbWFrZWluZm8vbWFrZWluZm8uYywKCSogaW5mby9pbmZvLmM6IEluY2x1ZGUgb25seSB0aGUgY3VycmVudCB5ZWFyIGluIHRoZSBjb3B5cmlnaHQgbWVzc2FnZS4KCgkqIHV0aWwvdGV4aTJkdmk6IEV4aXQgc3VjY2Vzc2Z1bGx5LgoJRnJvbTogQW5kcmVhcyBTY2h3YWIgPHNjaHdhYkBpc3Nhbi5pbmZvcm1hdGlrLnVuaS1kb3J0bXVuZC5kZT4uCgpUaHUgT2N0ICAzIDEyOjU4OjMyIDE5OTYgIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiBSZW5hbWUgaW5zdGFsbC5zaCB0byB0aGUgcHJlZmVycmVkIGluc3RhbGwtc2guCgoJKiBNYWtlZmlsZS5pbiAoVkVSU0lPTiksCgkqIHV0aWwvdGV4aTJkdmksCgkqIHV0aWwvdGV4aW5kZXguYywKCSogdXRpbC9pbnN0YWxsLWluZm8uYywKCSogbWFrZWluZm8vbWFrZWluZm8uYyAobWlub3JfdmVyc2lvbiwgcHJpbnRfdmVyc2lvbl9pbmZvKSwKICAgICAJKiBpbmZvL2luZm8uYzogVXBkYXRlIHZlcnNpb24gbnVtYmVyLgoKCSogdXRpbC90ZXhpMmR2aTogT25seSBzaG93IGRpZmYgaWYgdmVyYm9zZS4KCgkqIHV0aWwvaW5zdGFsbC1pbmZvLmMgKG1haW4pOiBDaGVjayBmb3IgYSBtaXNzaW5nIGRpciBmaWxlIGFzIHdlbGwKIAlhcyBhIG1pc3NpbmcgaW5mbyBmaWxlcy4KCShtYWluKTogQXQgc3RhcnQgb2YgYSBub2RlLCBjb21wbGV0ZWx5IGluaXRpYWxpemUgdGhlIG5ld2x5LW1hbGxvY2VkCglub2RlIHN0cnVjdHVyZS4KCgkqIHRleGluZm8udGV4aTogRml4IGluY29ycmVjdCB1c2VzIG9mIEBrZXksCglpbnNlcnQgbWlzc2luZyBuZXdsaW5lIGluIEluc3RhbGxpbmcgRGlyIEVudHJpZXMnIEBtZW51IGl0ZW0sCglkb2N1bWVudCBpbnN0YWxsLWluZm8gaW52b2NhdGlvbi4KCgkqIE1ha2VmaWxlLmluIChESVNURklMRVMpOiBEbyBub3QgcHV0IC5nZGJpbml0J3MgaW4gZGlzdHJpYnV0aW9uLgoJKGRpc3QpOiBVc2UgfHwgaW5zdGVhZCBvZiAmJiAoYW5kIGludmVydCBzZW5zZSkgc28gbWFrZSBkb2Vzbid0IHRoaW5rCgl0aGUgY29tbWFuZCBmYWlsZWQuCgkoZGlzdCk6IEV4Y2x1ZGUgbW9yZSBqdW5rLgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAoY21feHJlZik6IEJhY2sgb3V0IHBhdGNoIGZyb20gVG9tIFQuLCBzaW5jZQogICAgICAgIHdlIGdlbmVyYXRlIGEgZ29vZC1lbm91Z2ggZXJyb3IgbWVzc2FnZSB0aGF0IGlzIHN1cHByZXNzaWJsZQogICAgICAgIHdpdGhvdXQgaXQuCgoJKiB1dGlsL2dlbi1kaXItbm9kZTogVGhlIHJlY29tbWVuZGVkIG5hbWUgZm9yIHRoZSB0b3AtbGV2ZWwgaW5mbwogCWZpbGUgaXMgZGlyLCBub3QgZGlyLmluZm8uCgoJKiB1dGlsL2luc3RhbGwtaW5mby5jIChtYWluKTogQXQgYE1hcmsgdGhlIGVuZCBvZiB0aGUgVG9wIG5vZGUnLAogICAgICAgIG1ha2Ugc3VyZSB0aGUgbm9kZSBuYW1lIGlzIG5vbi1OVUxMIGJlZm9yZSBjb21wYXJpbmcgaXQuIEZyb20KICAgICAgICBsdmlyZGVuQGNhcy5vcmcuCgoJKiBjb25maWd1cmUuaW4gKEFDX1JFUExBQ0VfRlVOQ1MpOiBVc2UgdGhpcyBmb3IgbWVtY3B5LCBtZW1tb3ZlLAoJYW5kIHN0cmR1cC4KICAgICAgICAoQUNfQ0hFQ0tfRlVOQ1MpOiBJbnN0ZWFkIG9mIHRoaXMuCglCZWNhdXNlIGJvdGggYmNvcHkgYW5kIG1lbW1vdmUgYXJlIG1pc3Npbmcgb24gdGhlIDNiMiwgYXMgcmVwb3J0ZWQgYnkKCUdheWxlbiBNaWxsZXIgPGdheWxlbkBwcm9heGlzLmNvbT4sIGhlbmNlIHdlIG11c3QgcHJvdmlkZSBvdXIgb3duLgoJKiBsaWJ0eGkvTWFrZWZpbGUuaW4gKExJQk9CSlMpOiBOZXcgdmFyaWFibGUuCgkoT0JKUyk6IEluY2x1ZGUgaXQuCgkqIGxpYnR4aS9tZW1jcHkuYywgbGlidHhpL21lbW1vdmUuYywgbGlidHhpL3N0cmR1cC5jOiBOZXcgZmlsZXMsCgl0YWtlbiBmcm9tIGZpbGV1dGlscyAzLjEzLgoJKiBtYWtlaW5mby9tYWtlaW5mby5jLAoJKiBpbmZvL2NsaWIuYyAoc3RyZHVwKTogTW92ZSB0byBsaWJ0eGkuCgpXZWQgT2N0ICAyIDE4OjIzOjMwIDE5OTYgIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiBpbmZvL2luZm8tdXRpbHMuaCAobWVtY3B5KSBbIUhBVkVfTUVNQ1BZXSwKCSogaW5mby90ZXJtZGVwLmggKG1lbWNweSkgWyFIQVZFX01FTUNQWV0sCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKG1lbW1vdmUpIFshSEFWRV9NRU1NT1ZFXTogUmVtb3ZlIHRoaXMKICAgICAgICAjaWZkZWYsIGFzIHdlIG5vdyBpbmNsdWRlIGl0IGluIGxpYnR4aSBpZiBtaXNzaW5nLgoKVHVlIE9jdCAgMSAxNzo0MTo1MiAxOTk2ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogbWFrZWluZm8vTWFrZWZpbGUuaW4gKGluc3RhbGwpLAoJKiBpbmZvL01ha2VmaWxlLmluIChpbnN0YWxsKSwKCSogTWFrZWZpbGUuaW4gKGluc3RhbGwpOiBVc2UgbmV3IG9wdGlvbiBuYW1lIC0taW5mby1kaXIgaW5zdGVhZCBvZgogCS0taW5mb2Rpci4KCgkqIG1ha2VpbmZvL211bHRpLmMgKG91dF9jaGFyKTogTmV3IGZuLiAgUmVwbGFjZSBhbGwgY2FsbHMgdG8KCXB1dGMvZnByaW50ZiB3aXRoIGNhbGxzIHRvIHRoaXMuCgoJKiB1dGlsL2luc3RhbGwtaW5mby5jOiBSZW5hbWUgLS1pbmZvZGlyIHRvIGluZm8tZGlyLgoKTW9uIFNlcCAzMCAxMDowNzoyMSAxOTk2ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogVmVyc2lvbiAzLjguCgoJKiB0ZXhpbmZvLnRleDogVW50YWJpZnkuCgoJKiB0ZXhpbmZvLnRleCAoXHB0ZXhsLCBccHRleEwpOiBEbyBub3Qgc2F2ZSwgd2UgaGF2ZSBvdXIgb3duCgljb21tYW5kcyBub3cuCgkoXG9uZXBhZ2VvdXQpOiBSZWZvcm1hdCBmb3IgcmVhZGFiaWxpdHksIGFuZCBjYWxsIFxpbmRleGR1bW1pZXMKCXRvIGF2b2lkIGV4cGFuc2lvbiBvZiBUZXhpbmZvIGNvbW1hbmRzIChlLmcuLCBhY2NlbnRzKSBpbiBcd3JpdGUncy4KCShcLCwgXGRvdGFjY2VudCwgXHJpbmdhY2NlbnQsIFx0aWVhY2NlbnQsIFx1YmFyYWNjZW50LCB1ZG90YWNjZW50LAoJXHF1ZXN0aW9uZG93biwgXGV4Y2xhbWRvd24sIFxkb3RsZXNzKTogTmV3IG1hY3Jvcy4KCShcbCk6IExldCBwbGFpbiBUZVggZGVmaW5pdGlvbiByZW1haW4sIGluc3RlYWQgb2Ygc3dpdGNoaW5nCgl0byBgYGxpc3AnJyBmb250LgoJKFxtdWx0aXRhYmxlKTogRW5zdXJlIHNwYWNlIGJldHdlZW4gdGhlIGNvbHVtbnMsCglpbnNlcnQgc3RydXRzIHRvIG1ha2UgaW50ZXJsaW5lIHNwYWNpbmcgY29uc3RhbnQsCgl1c2UgcmVhbCBzdHJ1dCBpbnN0ZWFkIG9mIGEgYm94IGNvbnRhaW5pbmcgYFh5Jy4KCShcaW5kZXhkdW1taWVzKTogRG8gbm90IGRlZmluZSBccm0sIFxjaGFyLCBidXQKCWRvIGRlZmluZSBcQCwgXHssIFx9LCBcZG90bGVzcywgYW5kIFwsLiAgQW5kIFx0IHNob3VsZCBnZW5lcmF0ZQoJXHQsIG5vdCBcci4KCShcaW5kZXhub2ZvbnRzKTogRGVmaW5lIFwsIGFuZCBcZG90bGVzcyBhcyBcaW5kZXhkdW1teWZvbnQsCglhbmQgbGV0IFxAIGJlIEAuCgkoXGRvaW5kKTogUmVmb3JtYXQgZm9yIHJlYWRhYmlsaXR5LCBhbmQgdXNlIHRlbXAgY29udHJvbCBzZXF1ZW5jZQoJbmFtZXMgdGhhdCBhY3R1YWxseSBtYWtlIHNlbnNlLgoJKFxkb3VibGVjb2x1bW5vdXQsIFxwYWdlc29mYXIsIFxlbmRkb3VibGVjb2x1bW5zKTogUmVzdG9yZQoJS251dGgncyBvcmlnaW5hbCBjb2RlIHRvIGF2b2lkIHNwdXJpb3VzIG92ZXJmdWxsIHZib3ggbWVzc2FnZXMuCgkoTm8gYm94ZXMgYXJlIGFjdHVhbGx5IG92ZXJmdWxsKS4KCShcc2hvcnRjb250ZW50cyk6IERvIG5vdCBhbGxvdyBoeXBoZW5hdGlvbnMuCgkoXGRvY2hhcGVudHJ5LCBcdG9jZW50cnkpOiBNYWtlIGdsdWUgYWJvdmUgYW5kIGJlbG93IGZsZXhpYmxlLCB0byBhbGxvdwoJYmV0dGVyIHBhZ2UgYnJlYWtzLgoJKFx0ZXgpOiBSZXNldCBcLCB0byBpdHMgcGxhaW4gVGVYIG1lYW5pbmcsCglhbmQgZG8gbm90IHJlc2V0IFxsLgoKCSogQ09QWUlORzogVXBkYXRlIGZvciBuZXcgRlNGIGFkZHJlc3MgKGZyb20gZ2NjIGRpc3QpLgoKCSogbGlidHhpL01ha2VmaWxlLmluOiBWYXJpb3VzIHNpbXBsaWZpY2F0aW9ucy4KClN1biBTZXAgMjkgMTI6NTg6NDQgMTk5NiAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIHV0aWwvdGV4aTJkdmk6IFVzZSAkcHJvZ25hbWUgaW5zdGVhZCBvZiAkMCBmb3IgLS12ZXJzaW9uLgoKCSogdXRpbC9pbnN0YWxsLWluZm8uYyAoeG1hbGxvYywgeHJlYWxsb2MpOiBEZWNsYXJlIG1hbGxvYyBhbmQKCXJlYWxsb2MgYXMgcmV0dXJuaW5nIHZvaWQgKiwKCXRvIGF2b2lkIHB0ci9pbnQgcHJvYmxlbXMgb24gRGlnaXRhbCBVbml4LgoKCSogaW5mby90aWxkZS5jICh0aWxkZV9leHBhbmRfd29yZCk6IERlY2xhcmUgZ2V0ZW52IGFzIHJldHVybmluZyBjaGFyICosCgl0byBhdm9pZCB3YXJuaW5nIG9uIERpZ2l0YWwgVW5peC4KCgkqIG1ha2VpbmZvL211bHRpLmMgKG11bHRpdGFibGVfYWN0aXZlKTogRGVjbGFyZSBleHRlcm4gaGVyZSB0bwogCWF2b2lkIGxkIHdhcm5pbmcgb24gcnM2MDAwLgoKCSogdXRpbC90ZXhpbmRleC5jICh1c2FnZSk6IEF2b2lkID8/JyB0cmlncmFwaC4KCgkqIHV0aWwvaW5zdGFsbC1pbmZvLmM6IEluY2x1ZGUgPHN5cy9mY250bC5oPiBvciA8Zm5jdGwuaD4sCglhY2NvcmRpbmcgdG8gSEFWRV9TWVNfRkNOVExfSCwKCWFuZCBvbmx5IGluY2x1ZGUgPHN5cy9maWxlLmg+IGlmIEhBVkVfU1lTX0ZJTEVfSC4KCShyZWFkbGluZXMpOiBPb3BzLCBoYWQgTlVMTCdzIGFuZCAwJ3MgcmV2ZXJzZWQgZm9yIHB0ci9pbnQgbWVtYmVycy4KCgkqIGluZm8vdGVybWluYWwuYyAodGVybWluYWxfZ290b194eSk6IFJlbW92ZSBzcHVyaW91cyBleHRyYSA7LgoKCSogdXRpbC9pbnN0YWxsLWluZm8uYzogVW50YWJpZnkuCShpbnB1dF9zZWN0aW9ucyk6IEluaXRpYWxpemUuCgkoZmluZF9saW5lcyk6IEluaXRpYWxpemUgdGhlIHRlcm1pbmF0aW5nIGVsZW1lbnQgb2YgdGhlIGFycmF5LgoJKHByaW50X2hlbHApOiBEb2N1bWVudCAtLWluZm9kaXIuCgkobWFpbik6IENvbXBhcmUgdGhlIGJhc2VuYW1lIG9mIGluZmlsZSBzYW5zIC5pbmZvIHRvIHRoZSBkaXIgZW50cnksCglub3QgaW5maWxlIGl0c2VsZi4KCSogdXRpbC9NYWtlZmlsZS5pbiAoY2xlYW4pOiBSZW1vdmUgdGhlIGluc3RhbGwtaW5mbyBiaW5hcnkuCgoJKiBpbmZvL01ha2VmaWxlLmluIChkaXN0Y2xlYW4pOiBSZW1vdmUgKi5pbmZvKiBmaWxlcy4KCgkqIE1ha2VmaWxlLmluIChpbnN0YWxsKSwKCSogaW5mby9NYWtlZmlsZS5pbiAoaW5zdGFsbCksCgkqIG1ha2VpbmZvL01ha2VmaWxlLmluIChpbnN0YWxsKTogVXNlIC0taW5mb2RpciBpbnN0ZWFkIG9mIC0taW5mby1maWxlLgoKCSogaW5mby9pbmZvLmMsCgkqIG1ha2VpbmZvL21ha2VpbmZvLmM6IEF2b2lkIG5ld2xpbmVzIGluIHN0cmluZyBjb25zdGFudHMgZm9yIHRoZQogCQlzYWtlIG9mIFN1bk9TIGNjLgoKCSogbWFrZWluZm8vbXVsdGkuYzogRG8gbm90IGFzc3VtZSBBTlNJIEMuCgoJKiBpbmZvL2luZm8udGV4aTogT29wcywgbmVlZCBAZW5kIHZ0YWJsZSBmb3IgYSBAdnRhYmxlLgoKU2F0IFNlcCAyOCAxNjozMToyOCAxOTk2ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogTWFrZWZpbGUuaW4gKHRleGluZm8pOiBEbyBub3QgZGVwZW5kIG9uIHN1Yi1hbGwsIGFzIHRoZW4KICAgICAgICBtYWtlaW5mbyBpcyBhbHdheXMgcnVuLiAgSW5zdGVhZCwgZGVwZW5kIG9uIHRleGluZm8udGV4aS4KCgkqIG1ha2VpbmZvL01ha2VmaWxlLmluIChpbmZvLCBkdmkpOiBOZXcgdGFyZ2V0cy4KCW1ha2VpbmZvLmluZm8sIG1ha2VpbmZvLmR2aTogRG8gbm90IGRlcGVuZCBvbiBtYWNyby50ZXhpIGZvciBub3cuCgoJKiBpbmZvL01ha2VmaWxlLmluIChpbnN0YWxsKTogTXVzdCBjYWxsIGluc3RhbGwtaW5mbyB0d2ljZS4KCgkqIGluZm8vaW5mby1zdG5kLnRleGksCgkqIGluZm8vaW5mby50ZXhpLAoJKiBtYWtlaW5mby9tYWtlaW5mby50ZXhpOiBJbmNsdWRlIGRpcmVudHJ5LgoKCSogZW1hY3MvTWFrZWZpbGUuaW46IFVzZSAmJiBhZnRlciBjZCwgZXRjLgoKCSogdGV4aW5mby50ZXhpOiBLbHVkZ2VzIHNvIG1ha2VpbmZvIC1FIHdpbGwgbm90IGNyZWF0ZSBzcHVyaW91cwogICAgICAgIGRpZmZlcmVuY2VzLiAgQWRkIG5ldyBkaXJlbnRyaWVzLgoKCSogdXRpbC9pbnN0YWxsLWluZm8uYywKCSogdXRpbC90ZXhpbmRleC5jLAoJKiBtYWtlaW5mby9tYWtlaW5mby5jLAoJKiBpbmZvL2luZm8uYzogU3RhbmRhcmRpemUgLS12ZXJzaW9uIG91dHB1dC4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKGRlZnVuX2ludGVybmFsKTogRG9uJ3QgaW5zZXJ0IGluZGV4IGNvbW1hbmQKIAlpZiBleHBhbmRpbmcgbWFjcm9zLgoJKGNtX2Zvb3Rub3Rlc3R5bGUpOiBEb24ndCBjaGFuZ2UgdGhlIGZvb3Rub3RlIHN0eWxlIGlmIGl0IHdhcyBzZXQKCW9uIHRoZSBjb21tYW5kIGxpbmUuCgoJKiB1dGlsL3RleGkyZHZpOiBSZWNvbXB1dGUgb3JpZ2luYWwgaW5kZXggZmlsZXMgZWFjaCB0aW1lIHRocm91Z2ggbG9vcC4KCU1ha2UgaW5kZW50YXRpb24gdW5pZm9ybS4KCVVzZSBzYW1lIGJhc2VuYW1lIGZvciB0aGUgdGVtcCBpbnB1dCBmaWxlcy4KCVN0YW5kYXJkaXplIC0tdmVyc2lvbiBvdXRwdXQuCgoJKiBpbmZvL01ha2VmaWxlLmluIChpbnN0YWxsKSwKCSogbWFrZWluZm8vTWFrZWZpbGUuaW4gKGluc3RhbGwpOiBJbnNlcnQgJChQT1NUX0lOU1RBTEwpLgoKRnJpIFNlcCAyNyAxMzoyNzozMCAxOTk2ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogdGV4aW5mby50ZXhpIChGb3JtYXQgd2l0aCB0ZXhpMmR2aSk6IFJld3JpdGUgbm93IHRoYXQgdGhlIHNjcmlwdAogCXJ1bnMgaW4gYSBsb29wLgoKCSogaW5mby9NYWtlZmlsZS5pbiAoTUFLRUlORk8pOiBTaW1wbGlmeSB0byAuLi9tYWtlaW5mby9tYWtlaW5mby4KCkZyaSBTZXAgMjcgMDA6MjY6MDMgMTk5NiAgTWlsZXMgQmFkZXIgIDxtaWxlc0BnbnUuYWkubWl0LmVkdT4KCgkqIGluZm8vdGVybWluYWwuYyBbSEFWRV9URVJNSU9TX0hdICh0ZXJtaW5hbF9wcmVwX3Rlcm1pbmFsLAoJdGVybWluYWxfdW5wcmVwX3Rlcm1pbmFsKTogQWRkIGNvZGUgZm9yIHRlcm1pb3MuCglbSEFWRV9URVJNSU9TX0hdIChvcmlnaW5hbF90ZXJtaW9zLCB0dHlidWZmKTogTmV3IHZhcmlhYmxlcy4KCSogaW5mby90ZXJtZGVwLmg6IFtIQVZFX1RFUk1JT1NfSF06IEFkZCBpbmNsdWRlIG9mIDx0ZXJtaW9zLmg+LgoJKiBjb25maWd1cmUuaW46IEFkZCBjaGVjayBmb3IgPHRlcm1pb3MuaD4uCgpUaHUgU2VwIDI2IDEwOjQ2OjM0IDE5OTYgIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiBlbWFjcy90ZXhuZm8tdXBkLmVsLAoJKiBlbWFjcy90ZXhpbmZvLmVsLAoJKiBlbWFjcy90ZXhpbmZtdC5lbDogVXBkYXRlIGZyb20gYm9iIGZvciBuZXcgVGV4aW5mbyBjb21tYW5kcywgZXRjLgoKCSogZW1hY3MvaW5mby5lbCwgZW1hY3MvaW5mb3JtYXQuZWwsIGVtYWNzL21ha2VpbmZvLmVsLAoJZW1hY3MvdGV4bmZvLXRleC5lbDogVXBkYXRlIGZyb20gRW1hY3MgMTkuMzQgZGlzdC4KCgkqIGVtYWNzL2VsaXNwLWNvbXA6IFVzZSBUTVBESVIgaWYgc2V0LgoKCSogdXRpbC9NYWtlZmlsZS5pbiAobGliZGlyKTogUmVtb3ZlLgoKCSogbWFrZWluZm8vTWFrZWZpbGUuaW4gKGluc3RhbGwpLAoJKiBNYWtlZmlsZS5pbiAoaW5zdGFsbCksCgkqIGluZm8vTWFrZWZpbGUuaW4gKGluc3RhbGwpOiBSdW4gaW5zdGFsbC1pbmZvLgoJKGxpYmRpcik6IFJlbW92ZS4KCgkqIHRleGluZm8udGV4aTogVmFyaW91cyBmaXhlcyBhcyBJIG1ha2UgdGhpcyBnbyB0aHJvdWdoIFRlWC4KCgkqIHV0aWwvaW5zdGFsbC1pbmZvLmM6IFF1b3RlIG5ld2xpbmVzIGluIGhlbHAgbWVzc2FnZS4KCgkqIHV0aWwvdGV4aTJkdmkgKHRleGkyZHZpKTogUnVuIFRlWCB1bnRpbCB0aGUgYXV4L2luZGV4IGZpbGVzCiAgICAgICAgc3RhYmlsaXplLCBpbnN0ZWFkIG9mIGp1c3QgdHdpY2UuICBGcm9tOiBEYXZpZCBTaGF3CiAgICAgICAgPGRhdmVzQGdzbXMwMS5hbGNhdGVsLmNvbS5hdT4uCgpUdWUgU2VwIDI0IDE0OjQzOjAzIDE5OTYgIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiBkaXI6IEJsYW5rIGRpciBmaWxlIGZvciBpbnN0YWxsYXRpb24gb24gbmV3IHN5c3RlbXMuCgpNb24gU2VwIDIzIDEyOjE4OjQzIDE5OTYgIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiBtYWtlaW5mby9tYWtlaW5mby5jIChhcmdzX2Zyb21fc3RyaW5nKTogRG8gbm90IGJhY2sgdXAgYXQgYSB9OwogCQl0aGF0IGxlYWRzIHRvIGFuIGluZmluaXRlIGxvb3AuCgpTYXQgU2VwIDIxIDE3OjQ4OjA0IDE5OTYgIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiBtYWtlaW5mby9tYWtlaW5mby5jIChjbV94cmVmKTogRG8gbm90IHNlZyBmYXVsdCBpZiBvdXRzaWRlIG9mCiAJYW55IG5vZGUuICBGcm9tOiBUb20gVHJvbWV5IDx0cm9tZXlAY3JlY2hlLmN5Z251cy5jb20+LgoJKGNtX2N0cmwpOiBNYWtlIG9ic29sZXRlLgoKVHVlIFNlcCAxNyAxMzozMDowOCAxOTk2ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogdGV4aW5mby50ZXggKFxpbmZvcmVmKTogTW92ZSB0byBtb3JlIGFwcHJvcHJpYXRlIHBsYWNlLgoJKFxwb3VuZHMpOiBSZW1vdmUgc3B1cmlvdXMgZXh0cmEgJC4KCShcZW1haWwpOiBUeXBlc2V0IGFyZ3VtZW50IGluIGFuZ2xlIGJyYWNrZXRzLgoJKFxtYWNybyk6IFVzZSBcZG9pZ25vcmUgZm9yIHJvYnVzdG5lc3MsIGluc3RlYWQgb2YganVzdCBsZXR0aW5nIFRlWAoJcGFyc2UgdGhlIGFyZ3VtZW50LgoJKFx1bm1hY3JvKTogRGVmaW5lLgoKU2F0IFNlcCAxNCAxNjoxNzozNSAxOTk2ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogdGV4aW5mby50ZXhpOiBEb2N1bWVudCBtdWx0aXRhYmxlcywgbmV3IElTQk4gbnVtYmVyLgoKV2VkIFNlcCAxMSAxODowMToyNCAxOTk2ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogbWFrZWluZm8vbXVsdGkuYyAoc3RydWN0IGVudik6IFJlbW92ZSB1bnVzZWQgb3V0cHV0X3Bvc2l0aW9uCiAgICAgICAgZmllbGQ7IHRoaXMgbmVlZHMgdG8gYmUgZ2xvYmFsLgogICAgICAgIChzZXR1cF9tdWx0aXRhYmxlX3BhcmFtZXRlcnMpOiBJbXBsZW1lbnQgdGVtcGxhdGUtZGVmaW5lZCBtdWx0aXRhYmxlcy4KCShvdXRwdXRfbXVsdGl0YWJsZV9yb3cpOiBSZW1vdmUgdHJhaWxpbmcgd2hpdGVzcGFjZS4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKF9SRUFEX0JVRkZFUl9HUk9XVEgsIHN0cnVjdCBfZGVmaW5lcyk6CglSZW1vdmUgbGVhZGluZyB1bmRlcnNjb3JlIGZvciBQT1NJWC9BTlNJIHBlZGFudHMuCgkoaW5pdF9jb252ZXJzaW9uKTogSW5pdGlhbGl6ZSBvdXRwdXRfcG9zaXRpb24gaGVyZS4KCShpbml0X3BhcmFncmFwaCk6IEluc3RlYWQgb2YgaGVyZSwgd2hlcmUgaXQgbG9zZXMgd2l0aCB0aGUKCW11bHRpdGFibGUgY2FsbHMsIGV2ZW50dWFsbHkgcmVzdWx0aW5nIGluIG5lZ2F0aXZlIGNvdW50cyB0byB0aGUKCXdyaXRlIGNhbGwgd2hlbiB0aGUgb3V0cHV0IGZpbGUgaXMgc3BsaXQuCgoJKiB0ZXhpbmZvLnRleGk6IEZpcnN0IGN1dCBhdCBtYWNybyBkb2N1bWVudGF0aW9uLgoJQ2hhbmdlIGFjY2VudCBkb2MgdG8gdXNlIHRhYmxlcy4KCVJlbW92ZSB3aGl0ZXNwYWNlIGV4cGVyaW1lbnRzLCB0aGV5IGFyZSBub3cgdGhlIGRlZmF1bHQuCgpNb24gU2VwICA5IDE0OjE2OjI0IDE5OTYgIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiBtYWtlaW5mby9tYWtlaW5mby5jOiBVc2UgcHV0YyBpbnN0ZWFkIG9mIGZwcmludGYgd2hlcmUgcG9zc2libGUuCiAgICAgICAgKGNtX2FjY2VudCk6IFB1dCBfIGZyb20gQHViYXJhY2NlbnQgYWZ0ZXIgYXJndW1lbnQuCgoJKiB1dGlsL3RleGluZGV4LmMgKHN0cmVycm9yKSBbIXN0cmVycm9yXTogQ29uZGl0aW9uYWxpemUKIAkJZGVjbGFyYXRpb24uCgpTYXQgU2VwICA3IDE0OjEzOjI0IDE5OTYgIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiBtYWtlaW5mby9tYWtlaW5mby5jIChjb21tYW5kVGFibGUpOiBPYnNvbGV0ZSBAc2V0Y2hhcHRlcnN0eWxlLgoKVGh1IFNlcCAgNSAxNTo0NToxMSAxOTk2ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAoY29udmVydF9mcm9tX2xvYWRlZF9maWxlKTogT29wcywgZml4CiAJCXdvcmRpbmcgb2YgaW5pdGlhbCBvdXRwdXQgY29tbWVudC4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKGNtX2FuZ2xlX2JyYWNrZXRzKTogUmVuYW1lIGZyb20gY21fa2V5LgogICAgICAgIChjb21tYW5kVGFibGUpOiBAZW1haWwgc2hvdWxkIHByb2R1Y2UgYW5nbGUgYnJhY2tldHMuCglAa2V5OiBDaGFuZ2UgbmFtZS4KClR1ZSBTZXAgIDMgMTQ6NTI6MTcgMTk5NiAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIHRleGluZm8udGV4IChcaHNpemUpOiBEZWNyZWFzZS4KICAgICAgICAoXGhvZmZzZXQpOiBJbmNyZWFzZS4KCShcc2V0bGVhZGluZyk6IERlY3JlYXNlIGRyYW1hdGljYWxseS4KCVRoaXMgY2hhbmdlIGFmZmVjdHMgOC41eDExIGZvcm1hdCBvbmx5LgoKCSogdGV4aW5mby50ZXhpOiBEb2N1bWVudCBhY2NlbnQgY29tbWFuZHMuCgpNb24gU2VwICAyIDExOjEwOjQ5IDE5OTYgIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiBtYWtlaW5mby9tYWtlaW5mby5jIChjb21tYW5kVGFibGUpOiBEZXByZWNhdGUgQGljaGFwdGVyIGFuZAoJQHRpdGxlc3BlYy4KCU1vdmUgYWxsIHRoZSBkZXByZWNhdGVkIEBpPHNlY3Rpb24+IGNvbW1hbmRzIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QuCgoJKiB0ZXhpbmZvLnRleGk6IERvY3VtZW50IEBwb3VuZHN7fSBhbmQgQGNlbnRlcmNoYXB7fS4KCgkqIHRleGluZm8udGV4IChcY2VudGVyY2hmcGxhaW4pOiBSZXdyaXRlIHRvIHVzZSBcY2hmcGxhaW4sIGFuZCB0bwogCWFjdHVhbGx5IGNlbnRlci4KCShcdW5uY2hmcGxhaW4pOiBKdXN0IGNhbGwgXGNoZnBsYWluLgoJKFxjaGZwbGFpbik6IFJld3JpdGUgdG8gYmUgZ2VuZXJhbGx5IGNhbGxhYmxlLgoJKFxjZW50ZXJwYXJhbWV0ZXJzbWF5YmUpOiBIb29rLCBhIG5vLW9wIGV4Y2VwdCB3aXRoIEBjZW50ZXJjaGFwLgoKU3VuIFNlcCAgMSAxNTowMTo0OSAxOTk2ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogdGV4aW5mby50ZXhpOiBEb2N1bWVudCBAPHdoaXRlc3BhY2U+LCByZWFycmFuZ2Ugc3BhY2luZyBzZWN0aW9uLgoKCSogbWFrZWluZm8uYyAoY29tbWFuZFRhYmxlKTogTWFrZSBALiBAPyBAISBpbnNlcnQgdGhlbXNlbHZlcywKIAlub3QgYmUgc2VudGVuY2Utbm9uLWVuZGVycy4gIFRoZXkgYXJlIHNlbnRlbmNlICplbmRlcnMqLiAgQWxzbywKIAltYWtlIEBcdCBhbmQgQFxuIGluc2VydCBhIG5vcm1hbCBzcGFjZSBjaGFyYWN0ZXIsIG5vdCB0aGVtc2VsdmVzLgogIAlBbHNvLCBkZWZpbmUgQGh5cGhlbmF0aW9uLgoJKGluc2VydF9zcGFjZSk6IE5ldyBmdW5jdGlvbi4KCShjbV9pZ25vcmVfc2VudGVuY2VfZW5kZXIpOiBSZW1vdmUgdGhpcy4KCShmbHVzaF9vdXRwdXQpOiBDaGVjayBvbmx5IGZvciBNRVRBLVNQQywgbm90IE1FVEEtPHNlbnRlbmNlLWVuZGVyPi4KCkZyaSBBdWcgMzAgMTg6NTU6MzAgMTk5NiAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIHRleGluZm8udGV4aTogRG9jdW1lbnQgQC0gYW5kIEBoeXBoZW5hdGlvbnt9LgoJTWlzY2VsbGFub3VzIGZpeGVzLgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAoY29tbWFuZFRhYmxlKTogRGVmaW5lIEAtIGFzIGNtX25vX29wLCBzaW5jZQogCW1ha2VpbmZvIGRvZXNuJ3QgZG8gaHlwaGVuYXRpb24uCgpUaHUgQXVnIDI5IDEzOjA1OjM4IDE5OTYgIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiB0ZXhpbmZvLnRleCAoXGtleSk6IERvIG5vdCB1cHBlcmNhc2UgdGhlIGFyZ3VtZW50OyBrZXkgbmFtZXMKCWNhbiBiZSBtaXhlZCBjYXNlLCBlLmcuLCBgQ29udHJvbCcuCgoJKiBtYWtlaW5mby9tYWtlaW5mby5jOiBAaW5mb3RvcCwgQGluZm91bm51bWJlcmVkLAoJQGluZm91bm51bWJlcmVkc2VjLCBAaW5mb3VubnVtYmVyZWRzdWJzZWMsCglAaW5mb3VubnVtYmVyZWRzdWJzdWJzZWMsIEBpbmZvYXBwZW5kaXgsIEBpbmZvYXBwZW5kaXhzZWMsCglAaW5mb2FwcGVuZGl4c3Vic2VjLCBAaW5mb2FwcGVuZGl4c3Vic3Vic2VjLCBAaW5mb2NoYXB0ZXIsCglAaW5mb3NlY3Rpb24sIEBpbmZvc3Vic2VjdGlvbiwgQGluZm9zdWJzdWJzZWN0aW9uOgoJICBSZW1vdmUgdGhlc2UgbG9uZy1zaW5jZSBvYnNvbGV0ZSBjb21tYW5kcy4KCUBpYXBwZW5kaXgsIEBpYXBwZW5kaXhzZWN0aW9uLCBAaWFwcGVuZGl4c2VjLCBAaWFwcGVuZGl4c3Vic2VjLAoJQGlhcHBlbmRpeHN1YnN1YnNlYywgQGljaGFwdGVyLCBAaXNlY3Rpb24sIEBpc3Vic2VjdGlvbiwKCUBpc3Vic3Vic2VjdGlvbiwgQGl1bm51bWJlcmVkLCBAaXVubnVtYmVyZWRzZWMsIEBpdW5udW1iZXJlZHN1YnNlYywKCUBpdW5udW1iZXJlZHN1YnN1YnNlYzoKIAkgIERlcHJlY2F0ZSB0aGVzZS4KCUBpbmZvaW5jbHVkZToKCSAgT2Jzb2xldGUgdGhpcy4KCUAsOiBIYXZlIHRvIHRha2UgYW4gYXJndW1lbnQsIHNpbmNlIGhhdmUgdG8gZG8gQCx7Y30gbm90IGNALDsgY2FuJ3QKCWZlYXNpYmx5IGltcGxlbWVudCB0aGUgbGF0dGVyIGluIFRlWC4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmM6IFJlbmFtZSBAZCB0byBAdWRvdGFjY2VudCwgc2luY2UgdGhpcyBpcwogCQlyZWxhdGl2ZWx5IGluZnJlcXVlbnRseSB1c2VkLgoKVHVlIEF1ZyAyNyAxNDo1ODo1NiAxOTk2ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogaW5mby9pbmZvLmMgKHByaW50X3Nob3J0X2hlbHApLAoJKiB1dGlsL2luc3RhbGwtaW5mby5jIChwcmludF9oZWxwKSwKCSogdXRpbC90ZXhpMmR2aSwKCSogbWFrZWluZm8vbWFrZWluZm8uYyAodXNhZ2UpIEluY2x1ZGUgYnVnIHJlcG9ydGluZyBhZGRyZXNzLgoKTW9uIEF1ZyAyNiAxNToyNzoxNyAxOTk2ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAoY29tbWFuZFRhYmxlKTogUmVtb3ZlIEBpbnB1dCwgQG1lZGJyZWFrLAogCQlAc21hbGxicmVhaywgQG92ZXJmdWxscnVsZSwgQGJyLgoKU3VuIEF1ZyAyNSAxNzoyNTo0OCAxOTk2ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAoY29tbWFuZFRhYmxlKTogVW5pZnkgY29tbWFuZHMgdGhhdCBwZXJmb3JtCiAgICAgICAgdGhlIHNhbWUgb3BlcmF0aW9uLCBzdWNoIGFzIGNtX2ZpbGUsIGNtX3NhbXAsIGNtX2VtYWlsLAogICAgICAgIGV0Yy4sIHdoaWNoIGFsbCBkbyBjbV9jb2RlLgoKCSogdGV4aW5mby50ZXhpOiBEb2N1bWVudCBAaWZodG1sIC4uLiBAZW5kIGlmaHRtbC4gIENoYW5nZQoJYFBsYWluVGVYJyB0byBgcGxhaW4gVGVYJy4KCkZyaSBBdWcgMjMgMTY6MDM6MTYgMTk5NiAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIHRleGluZm8udGV4IChccG91bmRzKTogTmV3IFRleGluZm8gY29tbWFuZCBAcG91bmRze30uCgkoXHBhcnNraXApOiBOZXcgc21hbGxlciB2YWx1ZS4KCShcY2hhcGhlYWRpbmdza2lwLCBcc2VjaGVhZGluZ3NraXAsIFxzdWJzZWNoZWFkaW5nc2tpcCk6IE5ldyBzbWFsbGVyCgl2YWx1ZXMsIGJvdGggZm9yIDguNXgxMSBhbmQgQHNtYWxsYm9vayBmb3JtYXRzLiBGcm9tIEJvYi4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKGNtX3NwZWNpYWxfY2hhcik6IEBwb3VuZHN7fSBwcmludHMgYSAjLgoJKGNvbW1hbmRUYWJsZSk6IEFkZCBuZXcgY29tbWFuZCBAcG91bmRzLgoKVHVlIEF1ZyAyMCAxMzo0NzoyMCAxOTk2ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAoQ29tbWFuZFRhYmxlKTogUmVzdG9yZSAiISIsIGFjY2lkZW50YWxseQogICAgICAgIHJlbW92ZWQgcHJldmlvdXNseS4KCgkqIHRleGluZm8udGV4IChca2V5KTogVHlwZXNldCBhIGxvemVuZ2UgYXJvdW5kIHRoZSBhcmd1bWVudCAoZnJvbQoJZ2lsZGVhQGludG91Y2hzeXMuY29tKS4KCSogbWFrZWluZm8vbWFrZWluZm8uYyAoY21fa2V5KTogU3Vycm91bmQgYXJnIHdpdGggPC4uLj4gdG8gbWF0Y2gKICAgICAgICBuZXcgbG96ZW5nZSBzdHlsZSBpbiBUZVguCgpXZWQgQXVnIDE0IDE2OjU5OjIzIDE5OTYgIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiB0ZXhpbmZvLnRleGk6IFByb3BhZ2F0ZSBjaGFuZ2UgZnJvbSBybXMuCgpUdWUgQXVnIDEzIDExOjMzOjI3IDE5OTYgIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiB0ZXhpbmZvLnRleGk6IFByb3BhZ2F0ZSBjaGFuZ2UgZnJvbSBybXMuCgoJKiB0ZXhpbmZvLnRleGk6IERvY3VtZW50IG90aGVyIEBoZWFkaW5ncyBvcHRpb25zLgoKU3VuIEF1ZyAxMSAxMzoxOTo0MiAxOTk2ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAoY21fYWNjZW50LCBjbV9zcGVjaWFsX2NoYXIsIGNtX2RvdGxlc3MpOgoJTmV3IGZ1bmN0aW9ucy4KCShDb21tYW5kVGFibGUpOiBBZGQgbmV3IGNvbW1hbmRzIGZvciBhbGwgb2YgcGxhaW4udGV4J3MKCWFjY2VudHMgYW5kIG5vbi1FbmdsaXNoIGNoYXJhY3RlcnMuCgpGcmkgQXVnICA5IDE0OjEyOjA3IDE5OTYgIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiBtYWtlaW5mby9tYWtlaW5mby5jIChjb252ZXJ0X2Zyb21fbG9hZGVkX2ZpbGUpOiBTYXkgd2UncmUgbWFraW5nCiAJYGB0ZXh0JycgZmlsZSBpZiBub19oZWFkZXJzLiAgQWxzbywgdXNlIGBpbnB1dF9maWxlbmFtZScgaW5zdGVhZAogCW9mIGp1c3QgYG5hbWUnIGZvciBjbGFyaXR5LgoJKHN1ZmZpeGVzKTogQ2hlY2sgZm9yIG5vIHN1ZmZpeCBsYXN0LCBpLmUuLCBwcmVmZXIgYGZvby50ZXhpJyBhcyBhbgoJaW5wdXQgZmlsZSB0byBgZm9vJy4gIChUaGUgbGF0dGVyIGlzIHByb2JhYmx5IGEgYmluYXJ5LikKCk1vbiBBdWcgIDUgMTM6NTI6MzkgMTk5NiAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIHRleGluZm8udGV4IChcaGVhZGluZywgXHN1YmhlYWRpbmcsIFxzdWJzdWJoZWFkaW5nKTogQ2FuIG5vCiAJbG9uZ2VyIGNhbGwgdGhlIG5vbmV4aXN0ZW50IFwqc2VjaGVhZGluZ2kgc2VyaWVzLiBJbnN0ZWFkLCBjYWxsCiAJXHBsYWluKnNlY2hlYWRpbmcuCgkoXHBsYWluc3Vic2VjaGVhZGluZywgXHBsYWluc3Vic3Vic2VjaGVhZGluZyk6IE5ldyBtYWNyb3MsIGJ5IGFuYWxvZ3kKCXdpdGggXHBsYWluc2VjaGVhZGluZy4KCShcdW5udW1iZXJlZHN1YnNlY3p6eiwgXHVubnVtYmVyZWRzdWJzdWJzZWN6enopOiBDYWxsIHRoZW0uCgpTdW4gQXVnICA0IDE2OjQ2OjEwIDE5OTYgIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiBtYWtlaW5mby9tYWtlaW5mby5jIChmbHVzaF9vdXRwdXQpOiBNYXNrIG91dCBlaWdodGggYml0LCB0aGF0IHdlCiAJdHVybmVkIG9uIGluIG5vbi1zZW50ZW5jZSBlbmRlcnMuCgpTYXQgQXVnICAzIDE0OjAzOjEwIDE5OTYgIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiB0ZXhpbmZvLnRleCAoXEhFQURJTkdTZG91YmxlLCBcSEVBRElOR1NzaW5nbGUsCiAJSEVBRElOR1Nkb3VibGVhZnRlciwgXEhFQURJTkdTc2luZ2xlYWZ0ZXIsIFxDSEFQUEFHb2ZmLAogCVxDSEFQUEFHb24sIFxDSEFQUEFHb2RkKTogU2V0IFxjb250ZW50c2FsaWdubWFjcm8sIGFuYWxvZ291cyB0bwogCVxwYWdlYWxpZ25tYWNyby4KCShcc3RhcnRjb250ZW50cyk6IENhbGwgXGNvbnRlbnRzYWxpZ25tYWNybyBpbnN0ZWFkIG9mIFxwYWdlYWxpZ25tYWNyby4KCk1vbiBKdWwgMjkgMTQ6NDQ6MzMgMTk5NiAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIHRleGluZm8udGV4IChcaW5kZXhmb250cyk6IE1ha2UgbGVhZGluZyBiZSAxMnB0LiBPdGhlcndpc2UsIGl0J3MKIAl0b28gY3JhbW1lZC4KCShcc21hbGxsaXNweCk6IFJlbW92ZSBcc2V0bGVhZGluZ3sxMHB0fS4gVGhhdCB3YXMgdG9vIHNtYWxsLgoJKFxkb3ByaW50aW5kZXgpOiBEbyBub3QgY2FsbCBcdGV4IC4uLiBcRXRleC4gIEluZGV4IGZpbGVzIGFyZSBUZXhpbmZvCglzb3VyY2UsIG5vdCBUZVggc291cmNlLCBleGNlcHQgZm9yIHVzaW5nIFwgaW5zdGVhZCBvZiBAIGFzIHRoZQogCWVzY2FwZSBjaGFyYWN0ZXIgKGZvciBub3cpLgoKU3VuIEp1bCAyOCAxMzozNzowNSAxOTk2ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogdGV4aW5mby50ZXggKHBhcmFncmFwaGluZGVudCk6IE1vdmUgdG8gbW9yZSByZWFzb25hYmxlIHBsYWNlIGluCiAgICAgICAgdGhlIHNvdXJjZSBmaWxlLgogICAgICAgIChjaGFwZm9udHMsIHNlY2ZvbnRzLCBzdWJzZWNmb250cywgaW5kZXhmb250cyk6IENhbGwgXHNldGxlYWRpbmcuCgkoXGNoZnBsYWluLCBcc2VjaGVhZGluZywgXHBsYWluc2VjaGVhZGluZywgXHN1YnNlY2hlYWRpbmcsCgkgXHN1YnN1YmhlYWRpbmcpOiBSZXdyaXRlIHRvIHByb3Blcmx5IFxoYW5naW5kZW50IHRoZSB0aXRsZS4KICAgICAJKFxzZWN0aW9uaGVhZGluZyk6IE5ldyBnZW5lcmljIG1hY3JvIHRvIHByaW50IHNlY3Rpb24gdGl0bGVzLgoKCSogdGV4aW5mby50ZXhpOiBVcGRhdGUgdGhlIGBPYnRhaW5pbmcgVGVYJyBub2RlLgoKRnJpIEp1bCAyNiAxNDoxMTo0OCAxOTk2ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogdXRpbC90ZXhpMmR2aTogRG8gbWFjcm8gZXhwYW5zaW9uIHdpdGggbWFrZWluZm8gYmVmb3JlIHJ1bm5pbmcgVGVYLgoJVmFyaW91cyBleHBhbnNpb24gc2FmZXR5IG1lYXN1cmVzIGFkZGVkIGZvciB0ZXN0OyBhdm9pZCB1c2Ugb2YgLW8uCgoJKiBtYWtlaW5mby9tYWtlaW5mby5jICh1c2FnZSk6IE1vcmUgdXNhZ2UgbWVzc2FnZSB0d2Vha3MuCgpGcmkgSnVsIDI2IDExOjU1OjM3IDE5OTYgIEthcmwgQmVycnkgIDxrYXJsQGxhdXJpZT4KCgkqIHV0aWwvdGV4aTJkdmk6IEZvcm1hdCB1c2FnZSBtZXNzYWdlIHRvIGNvbmZvcm0gdG8gdGhlIG90aGVyICp1dGlscy4KClRodSBKdWwgMjUgMTc6MDU6NDcgMTk5NiAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIGVtYWNzL01ha2VmaWxlLmluOiBEbyBub3QgY29tcGlsZSB0aGUgRWxpc3AgYnkgZGVmYXVsdC4gIFdlCglkb24ndCBpbnN0YWxsIGl0LCBzbyBpdCBjb25mdXNlcyBwZW9wbGUgdG8gY29tcGlsZSBpdC4KClN1biBKdWwgMjEgMDc6MjA6MDkgMTk5NiAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIHV0aWwvTWFrZWZpbGUuaW4gKGluc3RhbGwtaW5mbyk6IERlcGVuZGVuY3kgc2hvdWxkIGJlCiAJICBpbnN0YWxsLWluZm8ubywgbm90IGluc3RhbGwtaW5mby4gQWxzbywgdXBkYXRlIGNvcHlyaWdodCB5ZWFycy4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKGNtX3ByaW50aW5kZXgpOiBEb24ndCBjYWxsIGV4ZWN1dGVfc3RyaW5nCiAgICAgICAgdG8gcHJpbnQgaW5kZXggZW50cmllcywgd2UndmUgYWxyZWFkeSBkb25lIHRoZSBleHBhbnNpb24gbm93LgoKCSogbWFrZWluZm8vbWFrZWluZm8uaDogQWRkIGNvcHlyaWdodC4gIEZpbmlzaCBtZXJnZSBvZiBybXMgY2hhbmdlcy4KCSogbWFrZWluZm8vbWFrZWluZm8uYzogRmluaXNoIG1lcmdlLCBhZGQgbXkgZXhwYW5zaW9uIGNoYW5nZXMgYWdhaW4uCgkqIG1ha2VpbmZvL211bHRpLmM6IEFkZCBjb3B5cmlnaHQgbWVzc2FnZS4KCkZyaSBKdWwgMTkgMTA6MzU6MjIgMTk5NiAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIGluZm8vaW5mby5jOiBVcGRhdGUgY29weXJpZ2h0IGRhdGUuCgoJKiBpbmZvL2luZm8udGV4aSwKCSogdXRpbC9pbnN0YWxsLWluZm8uYywKCSogZW1hY3MvTWFrZWZpbGUuaW4sCgkqIGVtYWNzL3RleG5mby10ZXguZWwsCgkqIGVtYWNzL01ha2VmaWxlLmluOiBDaGFuZ2UgRlNGIGFkZHJlc3MuCgoJKiBNZXJnZWQgY2hhbmdlcyBmcm9tIGJmb3ggLS0gYmVsb3csIHBsdXMgbXVsdGl0YWJsZSBjaGFuZ2VzLCBwbHVzCglsb3RzIG1vcmUuCgoJICAgIFN1biBBcHIgMTQgMDg6NDk6NTAgMTk5NiAgQnJpYW4gSi4gRm94ICA8YmZveEBuaXJ2YW5hLnNhbXNhcmEuY29tPgoKCQkgICAgKiBtYWtlaW5mby9tYWtlaW5mby5jIChyZW1lbWJlcl9ub2RlX3JlZmVyZW5jZSk6IE51bWVyb3VzIGNvbW1hbmRzCgkJICAgIGNhbGwgcmVtZW1iZXJfbm9kZV9yZWZlcmVuY2UuICBJZiBhIG5vZGUgaGFzIG5vdCB5ZXQgYmVlbiBkZWZpbmVkLAoJCSAgICB1c2UgdGhlIGVtcHR5IHN0cmluZyBhcyB0aGUgY3VycmVudCBub2RlIGZvciB0aG9zZSBjYXNlcy4KCgkgICAgTW9uIEZlYiAxMiAxNzozNTozOCAxOTk2ICBCcmlhbiBKLiBGb3ggIDxiZm94QG5pcnZhbmEuc2Ftc2FyYS5jb20+CgoJCSAgICAqIG1ha2VpbmZvL21ha2VpbmZvLmMgKHB1c2hfbm9kZV9maWxlbmFtZSk6IENsZWFuIHVwIGNhbGxzIHRvCgkJICAgIHhtYWxsb2MgYW5kIHhyZWFsbG9jLiAgT25seSBoYXZlIHRvIGNhbGwgeHJlYWxsb2MuCgoJICAgIEZyaSBKYW4gMjYgMDg6MDA6MzggMTk5NiAgQnJpYW4gSi4gRm94ICA8YmZveEBuaXJ2YW5hLnNhbXNhcmEuY29tPgoKCQkgICAgKiBpbmZvL3Nlc3Npb24uYyAoaW5mb19pbnB1dF9idWZmZXJfc3BhY2VfYXZhaWxhYmxlKTogRml4IHR5cG8KCQkgICAgd2hpY2ggZm9yY2VkIHRoZSBsaW1pdGF0aW9uIG9mIHRoZSBzaXplb2YgKGludCkgaW5zdGVhZCBvZiBzaXplb2YKCQkgICAgKGJ1ZmZlcikuCgoJCSAgICAqIE1ha2VmaWxlLmluIChQQUNLVkVSKTogbm93IGF0IDMuOC4gIEFkZCBURVJNSU9TIHN1cHBvcnQgdG8KCQkgICAgSW5mby4gIE1pbm9yIGJ1Z3MgZml4ZWQgaW4gTWFrZWluZm8uCgpTYXQgSnVsIDEzIDExOjU4OjU3IDE5OTYgIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiB0ZXhpbmZvLnRleGkgKGZ0YWJsZSB2dGFibGUpOiBNZW50aW9uIGV4YW1wbGUuCgpTdW4gSnVuIDMwIDE0OjU5OjUxIDE5OTYgIEthcmwgQmVycnkgIDxrYXJsQGdvbGRtYW4uZ251LmFpLm1pdC5lZHU+CgogICAgICAgICogbWFrZWluZm8vbWFrZWluZm8uYyAoY21fZW1haWwpOiBOZXcgZnVuY3Rpb24gZm9yIG5ldyBAZW1haWwgY29tbWFuZC4KCSogdGV4aW5mby50ZXhpIChlbWFpbCk6IE5ldyBub2RlIGRvY3VtZW50aW5nIGl0LgoKV2VkIEFwciAxNyAxODowNzozNCAxOTk2ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+CgoJKiBtYWtlaW5mby9tYWtlaW5mby5jIChjbV9rYmQpOiBEbyBub3RoaW5nIGlmIGluIEBleGFtcGxlIG9yIEBjb2RlLgoJKHN0cnVjdCBicmFjZV9lbGVtZW50KTogTmV3IGZpZWxkIGluX2ZpeGVkX3dpdGhfZm9udC4KCShyZW1lbWJlcl9icmFjZV8xKTogU2F2ZSBpbl9maXhlZF93aXRoX2ZvbnQuCgkocG9wX2FuZF9jYWxsX2JyYWNlKTogUmVzdG9yZSBpbl9maXhlZF93aXRoX2ZvbnQuCgkoY21fY29kZSk6IERvbid0IGRlY3JlbWVudCBpbl9maXhlZF93aXRoX2ZvbnQgYXQgZW5kIG9mIGNvbnN0cnVjdC4KCShzdHJ1Y3QgaXN0YWNrX2VsdCk6IE5ldyBmaWVsZCBpbl9maXhlZF93aXRoX2ZvbnQuCgkocHVzaF9pbnNlcnRpb24sIHBvcF9pbnNlcnRpb24pOiBTYXZlIGFuZCByZXN0b3JlIGluX2ZpeGVkX3dpdGhfZm9udC4KCShlbmRfaW5zZXJ0aW9uKTogRG9uJ3QgZGVjcmVtZW50IGluX2ZpeGVkX3dpdGhfZm9udCBoZXJlLgoJKG5vdF9maXhlZF93aWR0aCk6IE5ldyBmdW5jdGlvbi4KCShjbV9zYywgY21fdmFyLCBjbV9pdGFsaWMsIGNtX3JvbWFuLCBjbV90aXRsZWZvbnQpOgoJVXNlIG5vdF9maXhlZF93aWR0aC4KClNhdCBBcHIgMTMgMjM6MjI6MDUgMTk5NiAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgoKCSogdXRpbC9pbnN0YWxsLWluZm8uYyAobWFpbik6IEZhdGFsIGVycm9yIGlmIG5vIGlucHV0IGZpbGUgc3BlYydkLgoJTG9vayBmb3IgU1RBUlQtSU5GTy1ESVItRU5UUlksIG5vdCBCRUdJTi1JTkZPLURJUi1FTlRSWS4KClRodSBBcHIgMTEgMTg6MjE6NTAgMTk5NiAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAoY21fZW5kZG90cyk6IE5ldyBmdW5jdGlvbi4KCShzZWxmX2RlbGltaXRpbmcpOiBBY2NlcHQgLSwgXiBhbmQgIi4KCShDb21tYW5kVGFibGUpOiBBZGQgY29tbWFuZHMgLSwgXiwgIiwgZW5kZG90cywgY2VudGVyY2hhcC4KClN1biBNYXIgMjQgMTI6MTg6MzIgMTk5NiAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAoZW51bSBpbnNlcnRpb25fdHlwZSk6IEFkZCBgZGlyZW50cnknLgoJKGluc2VydGlvbl90eXBlX25hbWVzKTogQWRkICJkaXJlbnRyeSIuCgkoY21fZGlyY2F0ZWdvcnkpOiBOZXcgZnVuY3Rpb24uCgkoY21fZGlyZW50cnkpOiBOZXcgZnVuY3Rpb24uCgkoQ29tbWFuZFRhYmxlKTogQWRkICJkaXJjYXRlZ29yeSIgYW5kICJkaXJlbnRyeSIuCgkoaW5zZXJ0X3N0cmluZyk6IE5ldyBmdW5jdGlvbi4KCShlbmRfaW5zZXJ0aW9uKTogSGFuZGxlIGRpcmVudHJ5LgoJKGJlZ2luX2luc2VydGlvbik6IEhhbmRsZSBkaXJlbnRyeS4KClN1biBNYXIgMjQgMTE6MTA6MDUgMTk5NiAgS2FybCBCZXJyeSAgPGthcmxAc3BpZmYuZ251LmFpLm1pdC5lZHU+CgogICAgICAgICogbWFrZWluZm8vbWFrZWluZm8uYyAoY21fdXJsKTogTmV3IGZ1bmN0aW9uIGZvciBuZXcgQHVybCBjb21tYW5kLgoKRnJpIEZlYiAyMyAyMToxNDo0MCAxOTk2ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+CgoJKiBpbmZvL01ha2VmaWxlLmluIChpbnN0YWxsLCB1bmluc3RhbGwpOiBVc2UgbWFucHJlZml4LgoKRnJpIEZlYiAyMyAxOTo1MDoxOCAxOTk2ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQHdoaXotYmFuZy5nbnUuYWkubWl0LmVkdT4KCgkqIHV0aWwvTWFrZWZpbGUuaW4gKGluc3RhbGwtaW5mbywgaW5zdGFsbC1pbmZvLm8pOiBOZXcgdGFyZ2V0cy4KCShhbGwpOiBEZXBlbmQgb24gaW5zdGFsbC1pbmZvLgoJKGluc3RhbGwsIHVuaW5zdGFsbCk6IE9wZXJhdGUgb24gaW5zdGFsbC1pbmZvLgoKCSogaW5zdGFsbC1pbmZvLmM6IE5ldyBmaWxlLgoKV2VkIEphbiAgMyAxMDowMTo0NSAxOTk2ICBCcmlhbiBKLiBGb3ggIDxiZm94QG5pcnZhbmEuZGF0YXdhdmUubmV0PgoKICAgICAgICAqIG1ha2VpbmZvL21ha2VpbmZvLmMgKG1ha2VfaW5kZXhfZW50cmllc191bmlxdWUpOiBCZSBhIGxpdHRsZSBiaXQKCXN0cmljdGVyIGFib3V0IHdoYXQgbWFrZXMgdHdvIGluZGV4IGVudHJpZXMgaWRlbnRpY2FsLgoKRnJpIERlYyAyOSAxMzowMDoyNCAxOTk1ICBCcmlhbiBKLiBGb3ggIDxiZm94QHdpemFyZC5kYXRhd2F2ZS5uZXQ+CgoJKiBtYWtlaW5mby9tYWtlaW5mby5jIChXaG9sZSBGaWxlKTogQWRkIEBkZXRhaWxtZW51IGZvciBhbGxvd2luZwoJZGV0YWlsZWQgbWVudSBsaXN0aW5ncyB0byBhcHBlYXIgd2hpbGUgc3RpbGwgZGVmYXVsdGluZyBub2Rlcy4KCldlZCBEZWMgMjcgMTM6NTQ6MzAgMTk5NSAgQnJpYW4gRm94ICA8YmZveEBhbGJlcnQuZ251LmFpLm1pdC5lZHU+CgoJKiBtYWtlaW5mby9tYWtlaW5mby5jIChjbV9jb2RlKTogQWx3YXlzIG5vdGljZSB0aGF0IHdlIGFyZSBpbgoJZml4ZWRfd2lkdGhfZm9udCwgZXZlbiBpZiBvdGhlciBmb3JtYXR0aW5nIGNoYW5nZXMgYXJlIG5vdCB0byB0YWtlCglwbGFjZS4KClNhdCBEZWMgMjMgMTE6NDg6NDMgMTk5NSAgQnJpYW4gSi4gRm94ICA8YmZveEB3aXphcmQuZGF0YXdhdmUubmV0PgoKCSogaW5mby9tYW4uYzogKGNsZWFuX21hbnBhZ2UpIFJlbW92ZSBeTCdzIGZyb20gcGFnZS4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKGdldF9icmFjZV9hcmdzKTogQ2hhbmdlIHNvbWUgbWVtY3B5J3MgdG8KCW1lbW1vdmVzLgoKCSogaW5mby9pbmZvLmMgKG1haW4pOiBQcmVmZXIgY2FzZWxlc3MgbWF0Y2hlcyBvdmVyIHBhcnRpYWwKCW1hdGNoZXMuCgoJKiBNYWtlZmlsZS5pbiAoQWxsIFN1YmRpciBUYXJnZXRzKTogQ2hhbmdlIHN1Z2dlc3RlZCBieSBEZWJpYW4KCXBlb3BsZSB3aGljaCBhbGxvd3MgZXJyb3JzIGluIHJlY3Vyc2l2ZSBtYWtlcyB0byBraWxsIHRoZQoJdG9wLWxldmVsIG1ha2UuCgoJKiBtYWtlaW5mby9NYWtlZmlsZS5pbiAobWFrZWluZm8uZHZpKTogTmV3IHRhcmdldC4KCgkqIGluZm8vaW5mby5jIChtYWluKTogUHJpbnQgdmVyc2lvbiBvZiBjb250YWluaW5nIHRleGluZm8gcGFja2FnZS4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKGZsdXNoX291dHB1dCk6IERvbid0IHN0cmlwIGhpZ2gtYml0IGZyb20KCXNlbnRlbmNlX2VuZGVycy4KCVByaW50IHRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgY29udGFpbmluZyB0ZXhpbmZvIHBhY2thZ2UuCgoJKiBpbmZvL21hbi5jIChsb2NhdGVfbWFucGFnZV94cmVmKTogQ291bnQgdGhlIDB0aCBlbnRyeS4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKGNtX21lbnUpOiBJZiBhIG1lbnUgaXMgc2VlbiBiZWZvcmUgYSBub2RlCgloYXMgYmVlbiBkZWZpbmVkLCB3YXJuLCBhbmQgY3JlYXRlIHRoZSBub2RlIGBUb3AnLgoKV2VkIEp1biAyMSAwMzoxOTozOSAxOTk1ICBCcmlhbiBGb3ggIDxiZm94QGFsYmVydC5nbnUuYWkubWl0LmVkdT4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKGNtX2luZm9pbmNsdWRlKTogQ2xlYW4gdXAgYWZ0ZXIgcHJpbnRpbmcKCWVycm9yIGlmIHRoZSBmaWxlIGNvdWxkbid0IGJlIGluY2x1ZGVkLgoJKGRpc2NhcmRfYnJhY2VzKTogUHJpbnQgZXJyb3JzIG9ubHkgZm9yIHRob3NlIHVubWF0Y2hlZCBvcGVuCglicmFjZXMgdGhhdCBiZWxvbmcgdG8gYSB0ZXhpbmZvIGNvbW1hbmQuCgoJKiAqL01ha2VmaWxlLmluOiBVc2UgQENGTEFHU0AgYW5kIEBMREZMQUdTQC4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmM6IEVuZCBgbm9kZV9zZWFyY2hfc3RyaW5nJyBhbmQgZnJpZW5kcyB3aXRoIGEKCXRlcm1pbmF0aW5nIG51bGwgY2hhcmFjdGVyLgoKV2VkIEp1biAyMSAwMToyMzo0OSAxOTk1ICBKaW0gTWV5ZXJpbmcgKG1leWVyaW5nQGNvbWNvLmNvbSkKCgkqIG1ha2VpbmZvL21ha2VpbmZvLmM6IENsb3NlIGNvbW1lbnQgYWZ0ZXIgI2VuZGlmLgoKVHVlIEp1biAyMCAwNDo1ODoyNiAxOTk1ICBCcmlhbiBGb3ggIDxiZm94QGFsYmVydC5nbnUuYWkubWl0LmVkdT4KCgkqIGVtYWNzL01ha2VmaWxlLmluIChpbnN0YWxsKTogRml4IHR5cG86ICJmbGUiIC0+ICJmaWxlIi4KCgkqIE1ha2VmaWxlLmluIChWRVJTSU9OKTogQnVtcCB0byAzLjYKCgkqIGluZm8vY2xpYi5jOiBJbmNsdWRlIGdlbmVyYWwuaCBmb3IgYGluZm9fdG91cHBlcicgYW5kIGZyaWVuZHMuCgoJKiBpbmZvL2NsaWIuaDogc3RybmNtcCBhbmQgc3RybmNhc2NtcCByZXR1cm4gYW4gaW50LiAgV2hhdCBraW5kIG9mCglkcnVncyB3YXMgSSBvbj8KCk1vbiBKdW4gMTkgMjM6MzQ6NDcgMTk5NSAgQnJpYW4gRm94ICA8YmZveEBhbGJlcnQuZ251LmFpLm1pdC5lZHU+CgoJKiBtYWtlaW5mby9tYWtlaW5mby5jIChtYWtlX2luZGV4X2VudHJpZXNfdW5pcXVlKTogQ29weSB0aGUgbGFzdAoJaW5kZXggZW50cnkuCgpNb24gSnVuIDE5IDIxOjU1OjQ5IDE5OTUgIE5vYWggRnJpZWRtYW4gIDxmcmllZG1hbkBwcmVwLmFpLm1pdC5lZHU+CgogICAgICAgICogdXRpbC90ZXhpMmR2aSAoLS12ZXJzaW9uKTogTmV3IG9wdGlvbi4KICAgICAgICBDb3NtZXRpYyBjaGFuZ2VzLgoKTW9uIEp1biAxOSAxNjowNjo0MCAxOTk1ICBCcmlhbiBGb3ggIDxiZm94QGFsYmVydC5nbnUuYWkubWl0LmVkdT4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKGNtX21hY3JvKTogRml4IHR5cG8uICBgeCAhPSB5JyBpcyBub3QgdGhlCglzYW1lIGFzIGB4IHw9IHknLgoKCSogaW5mby9NYWtlZmlsZS5pbiAoZXhlY19wcmVmaXgpOiBVc2UgQGV4ZWNfcHJlZml4QCBub3QgJChwcmVmaXgpLgoJKiBtYWtlaW5mby9NYWtlZmlsZS5pbiAoZXhlY19wcmVmaXgpOiBVc2UgQGV4ZWNfcHJlZml4QCBub3QgJChwcmVmaXgpLgoJKiB1dGlsL01ha2VmaWxlLmluIChleGVjX3ByZWZpeCk6IFVzZSBAZXhlY19wcmVmaXhAIG5vdCAkKHByZWZpeCkuCgkqIGxpYnR4aS9NYWtlZmlsZS5pbiAoZXhlY19wcmVmaXgpOiBVc2UgQGV4ZWNfcHJlZml4QCBub3QgJChwcmVmaXgpLgoKCSogZW1hY3MvTWFrZWZpbGUuaW4gKHVuaW5zdGFsbCk6IE5ldyB0YXJnZXQuCgkoaW5zdGFsbCk6IFVzZSB0aGUgZGVmaW5pdGlvbiBvZiAkKGxpc3BkaXIpLCBkb24ndCBkeW5hbWljYWxseQoJZmluZCBpdC4gIFVzZSBJTlNUQUxMX0RBVEEgbm90IGNwLgoJKGV4ZWNfcHJlZml4KTogdXNlIEBleGVjX3ByZWZpeEAgbm90ICQocHJlZml4KS4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKGFwcGx5KTogSWYgdGhlcmUgaXNuJ3QgYW4gYWN0dWFsIGFyZ3VtZW50Cglmb3IgYSBuYW1lZCBhcmd1bWVudCwgZGVmYXVsdCBpdCB0byAiIi4KCgkqIE1ha2VmaWxlLmluIChWRVJTSU9OKTogTm93IGF0IDMuNS4KCSh0ZXhpbmZvKTogTWFrZSAuL21ha2VpbmZvL21ha2VpbmZvIGRlcGVuZCBvbiBzdWItYWxsIGZvciBwYXJhbGxlbAoJbWFrZXMuCgoJKiBlbWFjcy9NYWtlZmlsZS5pbiAoRUxJU1BfT0JKUyk6IEV4cGxpY3RseSBkZWNsYXJlIC5lbCBhbmQgLmVsYwoJaW4gdGhlIFNVRkZJWEVTIGxpc3QuCgoJKiBtYWtlaW5mby9tYWtlaW5mby5jIChjbV90b2RheSk6IFNwZWNpYWwgY2FzZSBmb3IgbG9zaW5nIGFscGhhLgoJKiAobWlub3JfdmVyc2lvbik6IEluY3JlYXNlIHRvIDYzLgoKCSogaW5mby9pbmZvLmMgKHZlcnNpb25fc3RyaW5nKTogTm93IGF0IDIuMTQuCgkqIGluZm8vdGlsZGUuYzogRGVjbGFyZSBnZXRlbnYgdG8gcmV0dXJuIChjaGFyICopLgoJKiBpbmZvL3dpbmRvdy5jIChidWlsZF9tZXNzYWdlX2J1ZmZlcik6IEp1bXAgdGhyb3VnaCBob29wcyB0byBrZWVwCglERUMgQWxwaGEncyBoYXBweS4KCgkqIGluZm8veG1hbGxvYy5jOiBEZWNsYXJlIG1hbGxvYyBhbmQgcmVhbGxvYyBhcyAodm9pZCAqKSByZXR1cm5pbmcKCWZ1bmN0aW9ucy4KClN1biBKdW4gMTggMTI6NDc6MjEgMTk5NSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgoKCSogZW1hY3MvZGV0ZXhpbmZvLmVsIChkZXRleGluZm8tbGluZS1jbWRzLXdpdGhvdXQtYXJnKToKCUhhbmRsZSBpZmh0bWwuCgpGcmkgSnVuIDE2IDEzOjQ4OjE0IDE5OTUgIEJyaWFuIEZveCAgPGJmb3hAYWxiZXJ0LmdudS5haS5taXQuZWR1PgoKCSogdXRpbC90ZXhpbmRleC5jOiBVcGRhdGUgVEVYSU5ERVhfVkVSU0lPTl9TVFJJTkcgZm9yIHRleGluZm8gMy40CgoJKiAoQWxsICouYyAqLmggKi5pbik6IENoYW5nZSBGU0Ygb2xkIGFkZHJlc3MgdG8gbmV3LgoJKiB0ZXhpbmZvLnRleGkgKE9idGFpbmluZyBUZVgpOiBDaGFuZ2UgRlNGIG9sZCBhZGRyZXNzIHRvIG5ldwoJYWRkcmVzcy4gIENoYW5nZSBPbGQgcGhvbmUgbnVtYmVycyB0byBuZXcgcGhvbmUgbnVtYmVycy4KCgkqIE1ha2VmaWxlLmluIChWRVJTSU9OKTogQ2hhbmdlIHRvIDMuNC4KClRodSBKdW4gMTUgMjI6NDk6MDcgMTk5NSAgUm9iZXJ0IEouIENoYXNzZWxsICA8Ym9iQGhpbGwuZ251LmFpLm1pdC5lZHU+CgogICAgICAgICogdGV4aW5mby50ZXhpLCBlbWFjcy89ZGV2ZWxvcG1lbnQvY292ZXIudGV4aTogdXBkYXRlCiAgICAgICAgICBUZXhpbmZvIGRpc3RyaWJ1dGlvbiBwYWNrYWdlIHZlcnNpb24gbnVtYmVyCgpUaHUgSnVuIDE1IDA5OjIzOjAyIDE5OTUgIEJyaWFuIEouIEZveCAgPGJmb3hAd2l6YXJkLmRhdGF3YXZlLm5ldD4KCgkqIGluZm8vaW5mby5jOiAobWlub3JfdmVyc2lvbik6IFNldCB0byAxMy4KCgkqIGluZm8vY2xpYi5jLGg6IE5ldyBmaWxlcyBnYXRoZXIgdG9nZXRoZXIgcmVwbGFjZW1lbnQgZnVuY3Rpb25zCglmb3IgdGhvc2UgUE9TSVgtc3R5bGUgQyBsaWJyYXJ5IGZ1bmN0aW9ucyB0aGF0IGFyZSBub3QgcHJlc2VudCBvbgoJdGhlIHRhcmdldCBzeXN0ZW0uCgoJKiBpbmZvL01ha2VmaWxlLmluIChTUkNTKTogQWRkIGNsaWIuYyBhbmQgY2xpYi5oLiAgbWFrZWRvYyBub3cKCW5lZWRzIGNsaWIubyB0byBidWlsZCBvbiBzeXN0ZW1zIG1pc3NpbmcgdmFyaW91cyBzdHJpbmcuaCBzdHVmZi4KCgkqIGluZm8vdmFyaWFibGVzLmMgKHdob2xlIGZpbGUpOiBDYWxsIHN0cmR1cCwgbm90IHNhdmVzdHJpbmcuCgkqIGluZm8vdGlsZGUuYyAod2hvbGUgZmlsZSk6IENhbGwgc3RyZHVwLCBub3Qgc2F2ZXN0cmluZy4KCSogaW5mby9zZWFyY2guYyAod2hvbGUgZmlsZSk6IENhbGwgc3RyZHVwLCBub3Qgc2F2ZXN0cmluZy4KCSogaW5mby9ub2Rlcy5jICh3aG9sZSBmaWxlKTogQ2FsbCBzdHJkdXAsIG5vdCBzYXZlc3RyaW5nLgoJKiBpbmZvL25vZGVtZW51LmMgKHdob2xlIGZpbGUpOiBDYWxsIHN0cmR1cCwgbm90IHNhdmVzdHJpbmcuCgkqIGluZm8vbWFuLmMgKHdob2xlIGZpbGUpOiBDYWxsIHN0cmR1cCwgbm90IHNhdmVzdHJpbmcuCgkqIGluZm8vbWFrZWRvYy5jICh3aG9sZSBmaWxlKTogQ2FsbCBzdHJkdXAsIG5vdCBzYXZlc3RyaW5nLgoJKiBpbmZvL20teC5jICh3aG9sZSBmaWxlKTogQ2FsbCBzdHJkdXAsIG5vdCBzYXZlc3RyaW5nLgoJKiBpbmZvL2luZm8uYyAod2hvbGUgZmlsZSk6IENhbGwgc3RyZHVwLCBub3Qgc2F2ZXN0cmluZy4KCSogaW5mby9pbmRpY2VzLmMgKHdob2xlIGZpbGUpOiBDYWxsIHN0cmR1cCwgbm90IHNhdmVzdHJpbmcuCgkqIGluZm8vZWNob19hcmVhLmMgKHdob2xlIGZpbGUpOiBDYWxsIHN0cmR1cCwgbm90IHNhdmVzdHJpbmcuCgkqIGluZm8vc2Vzc2lvbi5jICh3aG9sZSBmaWxlKTogQ2FsbCBzdHJkdXAsIG5vdCBzYXZlc3RyaW5nLgoJKiBpbmZvL2ZpbGVzeXMuYyAod2hvbGUgZmlsZSk6IENhbGwgc3RyZHVwLCBub3Qgc2F2ZXN0cmluZy4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKG1pbm9yX3ZlcnNpb24pOiBDaGFuZ2UgdG8gMS42Mi4KCSogbWFrZWluZm8vbWFrZWluZm8uYyAoZ2V0X2V4ZWN1dGlvbl9zdHJpbmcpOiBJbml0aWFsaXplIGBpJyB0byAwCglpbiBjYXNlIHRoZXJlIGFyZSBubyBleGVjdXRpb25fc3RyaW5ncy4KCldlZCBKdW4gMTQgMTc6NDg6MDYgMTk5NSAgQnJpYW4gSi4gRm94ICA8YmZveEB3aXphcmQuZGF0YXdhdmUubmV0PgoKCSogdGV4aW5mby50ZXhpOiBpbmNsdWRlICJ0ZXhpbmZvLnRleCIsIG5vdCAidGV4aW5mbyIuCgkqIGluZm8vc2Vzc2lvbi5jIChmb3JnZXRfd2luZG93X2FuZF9ub2Rlcyk6IFBsYWNlIGEgc2VxdWVuY2UgcG9pbnQKCWluIGJldHdlZW4gImluZm9fd2luZG93c1tpXSA9IGluZm9fd2luZG93c1srK2ldOyIgYXMgcGVyIHZhcmlvdXMKCWNvbXBpbGVyIGV4cGVydHMuCgoJKiBtYWtlaW5mby9tYWtlaW5mby5jIChzdHJkdXApOiBDcmVhdGUgdGhpcyBmdW5jdGlvbiBpZiB0aGUgc3lzdGVtCglkb2Vzbid0IGhhdmUgaXQuCgkoZGlzY2FyZF9pbnNlcnRpb25zKTogVXNlIHRoZSBpbnNlcnRpb24ncyBmaWxlbmFtZSwgbm90IHRoZQoJY3VycmVudCBpbnB1dCBmaWxlLgoJKHB1c2hfaW5zZXJ0aW9uKTogUmVtZW1iZXIgdGhlIGN1cnJlbnQgaW5wdXQgZmlsZSB3aXRoIGVhY2gKCWluc2VydGlvbi4KCShwb3BfaW5zZXJ0aW9uKTogRnJlZSBzdG9yYWdlIHVzZWQgYnkgcmVtZW1iZXJlZCBpbnB1dCBmaWxlLgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAod2hvbGUgZmlsZSk6IFVzZSBgc3RyZHVwJyBpbnN0ZWFkIG9mCglgc2F2ZXN0cmluZycuCgkqIGNvbmZpZ3VyZS5pbjogQ2hlY2sgZm9yIGBzdHJkdXAnLgoKV2VkIEp1biAxNCAxNTo1ODo1MSAxOTk1ICBCcmlhbiBGb3ggIDxiZm94QGFsYmVydC5nbnUuYWkubWl0LmVkdT4KCiAgICAgICAgKiBsaWJ0eGkvTWFrZWZpbGUuaW4gKHByZWZpeCk6IFVzZSBAcHJlZml4QCwgbm90IC91c3IvbG9jYWwvCgpXZWQgSnVuIDE0IDEwOjUwOjU3IDE5OTUgIEJyaWFuIEouIEZveCAgPGJmb3hAd2l6YXJkLmRhdGF3YXZlLm5ldD4KCgkqIE1ha2VmaWxlLmluIChESVNURklMRVMpOiBEb24ndCBpbmNsdWRlICouZWxjIGZpbGVzIGluIHRoZSBsaXN0CgkgIG9mIGZpbGVzIHRvIGRpc3RyaWJ1dGUuCgkgIChpbnN0YWxsZGlycyk6IEluY2x1ZGUgYGVtYWNzJyBpbiB0aGUgbGlzdCBvZiBzdWItZGlycyB3aXRoCgkgIE1ha2VmaWxlLmluJ3MuCgoJKiBlbWFjcy9lbGlzcC1jb21wOiBTaGVsbCBzY3JpcHQgd2hpY2ggYmF0Y2ggY29tcGlsZXMgdGhlICouZWwgZmlsZXMuCgkqIGVtYWNzL01ha2VmaWxlLmluOiBOZXcgZmlsZSBjb250YWlucyB0YXJnZXRzIHRvIGJ1aWxkIHRoZSBlbGMgZmlsZXMuCgkqIGNvbmZpZ3VyZS5pbjogQWRkIGBlbWFjcy9NYWtlZmlsZScgdG8gdGhlIGxpc3Qgb2YgY3JlYXRlZCBtYWtlZmlsZXMuCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKHdob2xlIGZpbGUpOiBHaXZlIGV2ZXJ5IGZ1bmN0aW9uIGEgcmV0dXJuCgkgIHR5cGUuICBBbGwgY21feHh4IGZ1bmN0aW9ucyBhcmUgbm93IHZvaWQuICBBZGQgZGVjbGFyYXRpb25zIGZvcgoJICBmdW5jdGlvbnMgdG8gdG9wIG9mIGZpbGUuCgpNb24gSnVuIDEyIDEyOjAwOjU3IDE5OTUgIEJyaWFuIEouIEZveCAgPGJmb3hAd2l6YXJkLmRhdGF3YXZlLm5ldD4KCgkqIGluZm8vbWFuLmMgKHJlZmVyZW5jZV9zZWN0aW9uX3N0YXJ0ZXJzKTogQWRkIHZlcnNpb25zIG9mICJTRUUKCUFMU08iIGFuZCAiUkVMQVRFRCBJTkZPUk1BVElPTiIgd2l0aCB0YWJzIGluc3RlYWQgb2Ygc3BhY2VzIGFzCgl3ZWxsLgoKCSogdXRpbC90ZXhpbmRleC5jOiBCYWNrIG91dCBjaGFuZ2VzIGZvciBPRkZfVC4gIEV4cGxpY2l0eSBjb2VyY2UKCXRoZSByZXN1bHQgb2YgbHNlZWsgdG8gYSBsb25nLCBhbmQgdXNlIGxvbmdzIGV2ZXJ5d2hlcmUuCgoJKiB0ZXhpbmZvLnRleGk6IENoYW5nZSAiQGVuZCBzaG9ydHRpdGxlcGFnZSIgdG8gIkBlbmQgdGl0bGVwYWdlIi4KCSogbWFrZWluZm8vbWFrZWluZm8uYzogTWFrZSBAc2hvcnR0aXRsZXBhZ2UgaWdub3JlIHRoZSByZXN0IG9mIHRoZQoJbGluZS4KCgkqIHV0aWwvdGV4aW5kZXguYyAoc3RycmNocik6IENyZWF0ZSBpZiBub3QgcHJlc2VudC4KCVRlc3QgZm9yIEhBVkVfU1RSQ0hSIGFuZCBIQVZFX1NUUklOR19ILgoJKG1haW4pOiBNYWtlIFBST0dSQU1fTkFNRSBiZSBqdXN0IHRoZSBsYXN0IHBhdGggY29tcG9uZW5ldCBvZiBhcmd2WzBdLgoJKGRlY29kZV9jb21tYW5kKTogUmV3cml0ZS4KCSh1c2FnZSk6IFJld3JpdGUuICBOb3cgdGV4aW5kZXggaGFuZGxlcyAtLXZlcnNpb24uCgoJKiBtYWtlaW5mby9tYWtlaW5mby5jIChtYWtlX2luZGV4X2VudHJpZXNfdW5pcXVlKTogUmV3cml0ZSBmcm9tCglzY3JhdGNoLgoKCSogRG9uJ3QgZGlzdHJpYnV0ZSBjcmVhdGVkIGluZm8gZmlsZXMgd2l0aCB0ZXhpbmZvLiAgQWZ0ZXIgYWxsLAoJdGhlIHVzZXIgd2lsbCBoYXZlIHRoZSB0b29scyBuZWNlc3NhcnkgdG8gY3JlYXRlIHRoZW0sIHllcz8KCgkqIE1ha2VmaWxlLmluIChkaXN0Y2xlYW4pOiBSZW1vdmUgKi5sb2cKCgkqIGluZm8vbWFuLmMgKHJlYWRfZnJvbV9mZCk6IENoYW5nZSB0aW1lb3V0IHZhbHVlIGZvciBzZWxlY3QgdG8gMTUKCXNlY29uZHMuICBTb21lIHN5c3RlbXMgKGUuZy4sIGFsYmVydC5haS5taXQuZWR1KSBhY3R1YWxseSBuZWVkCgltb3JlIHRoYW4gMTAgc2Vjb25kcyB0byBmb3JtYXQgYSBtYW4gcGFnZS4KCgkqIGluZm8vdGlsZGUuYzogRml4IHR5cG8gaW4gZGVjbGFyYXRpb24gZm9yCglgdGlsZGVfZXhwYW5zaW9uX2ZhaWx1cmVfaG9vaycuCgpXZWQgSnVuICA3IDEzOjM2OjUzIDE5OTUgIEJyaWFuIEZveCAgPGJmb3hAYWxiZXJ0LmdudS5haS5taXQuZWR1PgoKCSogaW5mby90aWxkZS5oOiBDaGFuZ2UgdHlwZSBvZiB0aWxkZV9leHBhbnNpb25fZmFpbHVyZV9ob29rIHRvCglhIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiByZXR1cm5pbmcgYSAoY2hhciAqKS4KCSogaW5mby90aWxkZS5jOiBDaGFuZ2UgdHlwZSBvZiB0aWxkZV9leHBhbnNpb25fZmFpbHVyZV9ob29rIHRvIGEKCXBvaW50ZXIgdG8gZnVuY3Rpb24gcmV0dXJuaW5nIGEgKGNoYXIgKikuCgoJKiBtYWtlaW5mby9tYWtlaW5mby5jIChnZXRfZXhlY3V0aW9uX3N0cmluZyk6IERvbid0IHVzZSBgaScgaW4gdGhlCglsYXR0ZXIgYXNzaWdubWVudCwgdXNlIGBleGVjdXRpb25fc3RyaW5nc19pbmRleCcgaW5zdGVhZC4KCgkqIGluZm8vbWFuLmMgKHJlYWRfZnJvbV9mZCk6IENoYW5nZSBsb2dpYyB0byBhdm9pZCB1c2luZyBGSU9OUkVBRC4KCgkqIGluZm8veG1hbGxvYy5jICh4cmVhbGxvYyk6IFVzZSAodm9pZCAqKSwgbm90IChjYWRkcl90ICopLgoJKiBpbmZvL3htYWxsb2MuYyAoeG1hbGxvYyk6IFVzZSAodm9pZCAqKSwgbm90IChjYWRkcl90ICopLgoKCSogTWFrZWZpbGUuaW4gKERJU1RGSUxFUyk6IERvbid0IGZpbmQgUkNTIG5vICI9IiBkaXJlY3Rvcmllcy4KCgkqIHV0aWwvTWFrZWZpbGUuaW4gKHByZWZpeCk6IFVzZSBAcHJlZml4QCBhcyB0aGUgdmFsdWUuCgkqIGluZm8vTWFrZWZpbGUuaW4gKHByZWZpeCk6IFVzZSBAcHJlZml4QCBhcyB0aGUgdmFsdWUuCgkqIG1ha2VpbmZvL01ha2VmaWxlLmluIChwcmVmaXgpOiBVc2UgQHByZWZpeEAgYXMgdGhlIHZhbHVlLgoKV2VkIEp1biAgNyAxMjoyOToyOCAxOTk1ICBSb2JlcnQgSi4gQ2hhc3NlbGwgIDxib2JAaGlsbC5nbnUuYWkubWl0LmVkdT4KCiAgICAgICAgKiB0ZXhpbmZvLnRleGk6IENvcnJlY3QgbWlub3IgdHlwb3MuCgogICAgICAgICogZW1hY3MvdGV4aW5mbXQuZWw6ICBEb24ndCByZXF1aXJlIEBzaG9ydHRpdGxlcGFnZSB0byBiZSBpbnNpZGUKICAgICAgICAgIG9mIEBpZnRleCAuLi4gQGVuZCBpZnRleAoKTW9uIE1heSAgOCAxODozMzo1MiAxOTk1ICBCcmlhbiBKLiBGb3ggIDxiZm94QHdpemFyZC5kYXRhd2F2ZS5uZXQ+CgoJKiBpbmZvL25vZGVzLmM6ICNpbmNsdWRlICJtYW4uaCIgaWYgSEFORExFX01BTl9QQUdFUy4KCShpbmZvX2dldF9ub2RlX29mX2ZpbGVfYnVmZmVyKTogSWYgdGhlIGZpbGUgYnVmZmVyIGlzIG9uZQoJYXNzb2NpYXRlZCB3aXRoIG1hbnBhZ2VzLCBjYWxsIHRoZSBtYW5wYWdlIG5vZGUgZmluZGluZwoJZnVuY3Rpb24gaW5zdGVhZC4KCShpbmZvX2ZpbmRfZmlsZV9pbnRlcm5hbCk6IElmIHRoZSBmaWxlIGJ1ZmZlciBpcyBvbmUgYXNzb2NpYXRlZAoJd2l0aCBtYW5wYWdlcywgYXZvaWQgZG9pbmcgYW55IGZpbGUgSS9PLgoJKGluZm9fcmVsb2FkX2ZpbGVfYnVmZmVyX2NvbnRlbnRzKTogRGl0dG8uCgkoaW5mb19maW5kX2ZpbGVfaW50ZXJuYWwpOiBDYWxsIGNyZWF0ZV9tYW5wYWdlX2ZpbGVfYnVmZmVyIGluc3RlYWQKCW9mIGluZm9fbG9hZF9maWxlX2ludGVybmFsLgoKCSogaW5mby9pbmZvLmM6ICNpbmNsdWRlICJtYW4uaCIgaWYgSEFORExFX01BTl9QQUdFUy4KCShtYWluKTogSWYgdGhlIGluaXRpYWwgbm9kZSBjYW5ub3QgYmUgZm91bmQsIHBlcmhhcHMgZmluZCBpdCBhcyBhCgltYW5wYWdlLgoJKiBpbmZvL2luZm8tdXRpbHMuYzogI2luY2x1ZGUgIm1hbi5oIiBpZiBIQU5ETEVfTUFOX1BBR0VTLgoJKGluZm9feHJlZnNfb2Zfbm9kZSk6IElmIGhhbmRsaW5nIG1hbiBwYWdlcywgYW5kIHRoaXMgaXMgYSBtYW5wYWdlCglub2RlLCB1c2UgeHJlZnNfb2ZfbWFucGFnZS4KCgkqIGluZm8vc2Vzc2lvbi5jIChpbmZvX3NldF9pbnB1dF9mcm9tX2ZpbGUpOiBPbmx5IGZjbG9zZSAoc3RyZWFtKQoJaWYgaXQgaXMgbm9uLW51bGwgYW5kIG5vdCBzdGRpbi4KCSNpbmNsdWRlICJtYW4uaCIgaWYgSEFORExFX01BTl9QQUdFUy4KCShpbmZvX21lbnVfb3JfcmVmX2l0ZW0pOiBJZiBoYW5kbGluZyBtYW4gcGFnZXMsIGFuZCB0aGlzIGlzIGEKCW1hbnBhZ2Ugbm9kZSwgZ2V0IHRoZSB4cmVmcyBmcm9tIG1hbnBhZ2VfeHJlZnNfaW5fYmluZGluZy4KCShpbmZvX21hbik6IENvbXBpbGUgaW4gZm9yIE0teCBtYW4gaWYgaGFuZGxpbmcgbWFuIHBhZ2VzLgoJKGluZm9fbW92ZV90b194cmVmKTogSWYgaGFuZGxpbmcgbWFuIHBhZ2VzLCBhbmQgdGhlIGN1cnJlbnQgbm9kZQoJaXMgYSBtYW5wYWdlIG5vZGUsIHVzZSBsb2NhdGVfbWFucGFnZV94cmVmIHRvIGdldCB4cmVmcy4KClRodSBNYXkgIDQgMDg6NTU6MjMgMTk5NSAgQnJpYW4gSi4gRm94ICA8YmZveEB3aXphcmQuZGF0YXdhdmUubmV0PgoKCSogaW5mby9pbmZvLmMgKG1haW4pOiBJZiB0aGUgb3V0cHV0IGRldmljZSBpcyBub3QgYSB0ZXJtaW5hbCwgYW5kCglubyBvdXRwdXQgZmlsZW5hbWUgaGFzIGJlZW4gc3BlY2lmaWVkLCBtYWtlIHVzZXJfb3V0cHV0X2ZpbGVuYW1lCgliZSAiLSIsIHNvIHRoYXQgdGhlIGluZm8gaXMgd3JpdHRlbiB0byBzdGRvdXQsIGFuZCB0dXJuIG9uIHRoZQoJZHVtcGluZyBvZiBzdWJub2Rlcy4KClRodSBBcHIgMTMgMTg6MDU6MDYgMTk5NSAgRGFuaWVsIEhhZ2VydHkgIDxoYWdAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIHRleGluZm8udGV4aTogRml4ZWQgQGVuZCB0aXRsZXBhZ2UvQGVuZCBzaG9ydHRpdGxlcGFnZQoKU2F0IEFwciAgOCAxMjo1MTo0OSAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyBbISBIQVZFX1NUUkVSUk9SXSAoc3RyZXJyb3IpOiBOZXcgZnVuY3Rpb24sCiAJc25hcmZlZCBmcm9tIC4uL2luZm8vZmlsZXN5cy5jLgoJKGNtX2luZm9pbmNsdWRlKTogVXNlIHN0cmVycm9yIGluc3RlYWQgb2Ygc3lzX2Vycmxpc3QuCgpUdWUgQXByICA0IDE4OjQ0OjAwIDE5OTUgIEJyaWFuIEouIEZveCAgPGJmb3hAd2l6YXJkLmRhdGF3YXZlLm5ldD4KCgkqIHV0aWwvdGV4aW5kZXguYyAoc29ydF9vZmZsaW5lKTogQ2hhbmdlIFRPVEFMIHRvIGJlIGFuIG9mZl90LgoJKiB1dGlsL3RleGluZGV4LmMgKHNvcnRfaW5fY29yZSk6IENoYW5nZSBUT1RBTCB0byBiZSBhbiBvZmZfdC4KCSogdXRpbC90ZXhpbmRleC5jIChNQVhfSU5fQ09SRV9TT1JUKTogQ2FzdCB0byBvZmZfdC4KClN1biBBcHIgIDIgMTY6MjA6MTMgMTk5NSAgQnJpYW4gSi4gRm94ICA8YmZveEB3aXphcmQuZGF0YXdhdmUubmV0PgoKCSogaW5mby9NYWtlZmlsZS5pbjogRGVmaW5lIERFRkFVTFRfSU5GT1BBVEggaW4gY2FzZSB3ZSBhcmUKCWNvbXBpbGluZyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuCgkqIGluZm8vTWFrZWZpbGUuaW4gKGluZm8ubyk6IEFkZCBmaWxlc3lzLmggYmVjYXVzZSBvZiBERUZBVUxUX0lORk9QQVRILgoJKiBpbmZvLyhzZWFyY2guYyxoLCBub2Rlcy5jIGluZm8tdXRpbHMuYykgVXNlIHN0cmNhc2VjbXAgYW5kCglzdHJuY2FzZWNtcCBpbnN0ZWFkIG9mIHN0cmljbXAgYW5kIHN0cm5pY21wLiAgRGVmaW5lIHN0cmNhc2VjbXAKCWFuZCBzdHJuY2FzZWNtcCBpbiBzZWFyY2guYyBpZiAhSEFWRV9TVFJDQVNFQ01QLgoJKiBpbmZvL3NlYXJjaC5jOiBJZiBIQVZFX1NUUklOR19IIGluY2x1ZGUgaXQuCgkqIGluZm8vbm9kZXMuYzogSWYgSEFWRV9TVFJJTkdfSCBpbmNsdWRlIGl0LgoJKiBpbmZvL2luZm8tdXRpbHMuYzogSWYgSEFWRV9TVFJJTkdfSCBpbmNsdWRlIGl0LgoJKiBpbmZvL2luZm8uaDogSWYgSEFWRV9TVFJJTkdfSCBpbmNsdWRlIGl0LgoJKiBjb25maWd1cmUuaW4gKEFDX0hBVkVfRlVOQ1MpOiBDaGVjayBmb3Igc3RyY2FzZWNtcC4KCSogbWFrZWluZm8vbWFrZWluZm8uYyAoc3RyY2FzZWNtcCk6IERlZmluZSBpZiAhSEFWRV9TVFJDQVNFQ01QLgoJKiBtYWtlaW5mby9tYWtlaW5mby5jIChlbnRpcmUgZmlsZSk6IFVzZSBgc3RyY2FzZWNtcCcgaW5zdGVhZCBvZgoJYHN0cmljbXAnLgoJKiBtYWtlaW5mby9tYWtlaW5mby5jIChjbV9pZmVxKTogTmV3IGNvbW1hbmQgdGFrZXMgdGhyZWUgYXJncy4KCUNvbXBhcmVzIGZpcnN0IHR3bywgZXhlY3V0ZXMgcmVtYWluZGVyIGlmIHRoZSBmaXJzdCB0d28gYXJlCglzdHJpbmctd2lzZSBlcS4KCSogbWFrZWluZm8vbWFrZWluZm8uYyAoaWZodG1sKTogQWRkIHRvIGNvbW1hbmQgbGlzdC4gIFNob3VsZG4ndCBiZQoJdXNlZCwgYnV0IGl0IGlzIGJ5IHBlb3BsZSB3aG8gZG9uJ3Qgd2FudCB0byBoYWNrIG1hY3Jvcy4KClNhdCBBcHIgIDEgMDk6MjA6MTQgMTk5NSAgQnJpYW4gSi4gRm94ICA8YmZveEB3aXphcmQuZGF0YXdhdmUubmV0PgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAoYmVnaW5faW5zZXJ0aW9uKTogRml4IHJldmVyc2VkIGFyZ3VtZW50cyB0bwoJbGluZV9lcnJvci4KCgkqIGluZm8vaW5mby1zdG5kLnRleGk6IFVzZSAiZW5kIiBmb290bm90ZSBzdHlsZSBpbnN0ZWFkIG9mICJzZXBhcmF0ZSIuCgoJKiBpbmZvL01ha2VmaWxlLmluOiBDaGFuZ2UgInJtIC1mIiB0byAkKFJNKS4KCgkqIGluZm8vZ2VuZXJhbC5oOiBEZWZpbmUgemVyb19tZW0gaW4gdGVybXMgb2YgbWVtc2V0IGlmIHdlIGhhdmUKCWl0LCBlbHNlIGluIHRlcm1zIG9mIGJ6ZXJvIGlmIHdlIGhhdmUgdGhhdCwgZWxzZSBhcyBpbmxpbmUgY29kZS4KCgkqIGluZm8vTkVXUzogVXBkYXRlZCB0byByZWZsZWN0IGNoYW5nZXMgaW4gMi4xMS4KCkZyaSBNYXIgMzEgMjI6Mzg6MzEgMTk5NSAgQnJpYW4gSi4gRm94ICA8YmZveEB3aXphcmQuZGF0YXdhdmUubmV0PgoKCSogTWFrZWZpbGUgKERJU1RGSUxFUyk6IERvbid0IGluY2x1ZGUgKi5hLCAqb3JpZywgbm9yICouZQoJZmlsZXMuCgkoRElTVEZJTEVTKToKClNhdCBNYXIgIDQgMTI6MTY6MjkgMTk5NSAgQnJpYW4gSi4gRm94ICA8YmZveEB3aXphcmQuZGF0YXdhdmUubmV0PgoKCSogTWFrZWZpbGUuaW46IFVzZSBAcHJlZml4QCBpbnN0ZWFkIG9mIGhhcmR3aXJlZCBgL3Vzci9sb2NhbCcuCgkgIENsZWFuIHVwIG1ha2VmaWxlIHJ1bGVzIHdoaWNoIG1ha2UgaW4gc3ViZGlycy4KCSAgKEFMTF9TVUJESVJTKTogQWRkIG1ha2VpbmZvL21hY3JvcyB0byBsaXN0IG9mIHN1YmRpcmVjdG9yaWVzLgoKCSogY29uZmlndXJlLmluIChBQ19DSEVDS19GVU5DUyk6IEFkZCBgYmNvcHknIHRvIGxpc3Qgb2YgdGhpbmdzIHRvCgljaGVjayBmb3IuCgpGcmkgTWFyICAzIDEzOjU0OjEwIDE5OTUgIFJvYmVydCBKLiBDaGFzc2VsbCAgPGJvYkBoaWxsLmdudS5haS5taXQuZWR1PgoKICAgICAgICAqIHRleGluZm8udGV4aTogTWlub3IgY2hhbmdlcyBmb3IgaW5jcmVtZW50YWwgbmV3IGVkaXRpb24gMi4yMC4KCkZyaSBNYXIgIDMgMTk6MDE6MzYgMTk5NSAgQnJpYW4gSi4gRm94ICA8YmZveEB3aXphcmQuZGF0YXdhdmUubmV0PgoKCSogZmlsZXN5cy5jIChmaWxlc3lzX3JlYWRfaW5mb19maWxlKTogTG9jYWwgdmFyaWFibGUgU1RfU0laRSBpcyBhCglsb25nIHdoaWNoIGhhcyB0aGUgdmFsdWUgb2YgZmluZm8tPnN0X3NpemUgY2FzdGVkIHRvIGl0LgoJKiBub2Rlcy5jICh3aG9sZSBmaWxlKTogU2ltaWxhciBjaGFuZ2VzLgoKCVRoZXNlIGNoYW5nZXMgYW5kIHRoZSBmb2xsb3dpbmcgZm9yIG1ha2Vkb2MuYyB3ZXJlIHJlcXVpcmVkIGZvcgoJcHJvcGVyIG9wZXJhdGlvbiBvbiBIUG02OGsgTmV0QlNELgoKTW9uIEZlYiAyNyAxNToxNjoyNyAxOTk1ICBCcmlhbiBKLiBGb3ggIDxiZm94QHdpemFyZC5kYXRhd2F2ZS5uZXQ+CgoJKiBtYWtlZG9jLmMgKHByb2Nlc3Nfb25lX2ZpbGUpOiBMb2NhbCB2YXJpYWJsZSBGSUxFX1NJWkUgaXMgYSBsb25nCgl3aGljaCBoYXMgdGhlIHZhbHVlIG9mIGZpbmZvLnN0X3NpemUgY2FzdGVkIHRvIGl0LgoKCkZyaSBNYXIgIDMgMTg6NTg6MzggMTk5NSAgQnJpYW4gSi4gRm94ICA8YmZveEB3aXphcmQuZGF0YXdhdmUubmV0PgoKCSogbWFrZWluZm8uYyAoZmluZF9hbmRfbG9hZCk6IENhc3QgZmlsZWluZm8uc3Rfc2l6ZSB0byBhIGxvbmcgZm9yCglpbnRlcm5hbCB1c2UuICBUaGlzIG1ha2VzIHRoaW5ncyB3b3JrIG9uIE5ldEJTRC4KCgpGcmkgTWFyICAzIDEzOjU0OjEwIDE5OTUgIFJvYmVydCBKLiBDaGFzc2VsbCAgPGJvYkBoaWxsLmdudS5haS5taXQuZWR1PgoKICAgICAgICAqIHRleGluZm8udGV4aTogTWlub3IgY2hhbmdlcyBmb3IgaW5jcmVtZW50YWwgbmV3IGVkaXRpb24gMi4yMC4KCkZyaSBNYXIgIDMgMDk6NDE6MzkgMTk5NSAgQnJpYW4gSi4gRm94ICA8YmZveEB3aXphcmQuZGF0YXdhdmUubmV0PgoKCSogY29uZmlndXJlLmluIChURVJNTElCUyk6IFVzZSBBQ19DSEVDS19MSUIgaW5zdGVhZCBvZgoJQUNfSEFWRV9MSUJSQVJZLgoKTW9uIEphbiAgOSAxNjo1NTozMSAxOTk1ICBCcmlhbiBGb3ggIDxiZm94QGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBNYWtlZmlsZS5pbiAoRElTVEZJTEVTKTogQWRkIHRoZSBkaXJlY3RvcnkgRU1BQ1MtQkFDS1VQUyB0byB0aGUKCWxpc3Qgb2YgdGhpbmdzIHRvIGF2b2lkIGRpc3RyaWJ1dGluZy4KClR1ZSBOb3YgMjkgMTc6NDg6MzcgMTk5NCAgRGF2aWQgSi4gTWFjS2VuemllICA8ZGptQGR1YWxpdHkuZ251LmFpLm1pdC5lZHU+CgoJKiBjb25maWd1cmUuaW46IENoZWNrIGZvciBvZmZfdC4KCSogdXRpbC90ZXhpbmRleC5jIChtYWluKTogVXNlIGl0LgoKRnJpIE5vdiAxMSAxNDo0NjoyOCAxOTk0ICBEYXZpZCBKLiBNYWNLZW56aWUgIDxkam1AZHVhbGl0eS5nbnUuYWkubWl0LmVkdT4KCgkqIGNvbmZpZ3VyZS5pbjogVXBkYXRlIGZvciBBdXRvY29uZiB2Mi4KClRodSBPY3QgMTMgMDI6MTc6MzggMTk5NCAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgoKCSogZW1hY3MvZGV0ZXhpbmZvLmVsIChkZXRleGluZm8pOiBIYW5kbGUgQCEsIEA/LCBAXiwgQCIuCgpNb24gQXVnICAxIDAzOjI2OjEzIDE5OTQgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KCgkqIHRleGluZGV4LmM6IE1vdmUgdGhlIG1lbXNldCBkZWZpbmUgZG93biBwYXN0IHN0cmluZy5oIGluY2x1ZGUuCgpUdWUgSnVuIDI4IDE0OjIxOjQzIDE5OTQgIERhdmlkIEouIE1hY0tlbnppZSAgKGRqbUBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogbWFrZWluZm8vbWFrZWluZm8uYzogQWRkIC0taGVscCBvcHRpb24uCgkodXNhZ2UpOiBUYWtlIGFyZ3MgZm9yIHN0cmVhbSBhbmQgZXJyb3IgY29kZS4KCUNoYW5nZSBjYWxsZXJzLgoJKHByaW50X3ZlcnNpb25faW5mbyk6IFdyaXRlIHRvIHN0ZG91dCwgbm90IHN0ZGVyci4KCldlZCBNYXkgMTggMTg6NTU6MjQgMTk5NCAgQnJpYW4gSi4gRm94ICAoYmZveEBhaS5taXQuZWR1KQoKCSogaW5mby9zZXNzaW9uLmMgKGZvcmdldF93aW5kb3dfYW5kX25vZGVzKTogTmVnYXRlIHRlc3QgZm9yCglpbnRlcm5hbF9pbmZvX25vZGVfcC4gIFdlIG9ubHkgd2FudCB0byBmcmVlIHRoZSB0ZXh0IGlmIGl0IGlzCglub3QgYW4gaW50ZXJuYWwgbm9kZS4KClRodSBNYXIgMTAgMDM6MDc6MTggMTk5NCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQoKCSogdGV4aW5kZXguYyAobWVtc2V0KTogRml4IGludmFsaWQgcGFybSBuYW1lICh3YXMgMCkuCgpUaHUgRmViIDEwIDEyOjU2OjUyIDE5OTQgIE5vYWggRnJpZWRtYW4gIChmcmllZG1hbkBwcmVwLmFpLm1pdC5lZHUpCgogICAgICAgICogbWFrZWluZm8vbWFrZWluZm8uYyAoY3VycmVudF9pdGVtX2Z1bmN0aW9uKTogRG9uJ3QgbG9vcCBpZiBlbHQKICAgICAgICBpcyBOVUxMLgoKV2VkIEZlYiAgOSAxMjoyMTowOSAxOTk0ICBCcmlhbiBKLiBGb3ggIChiZm94QGFpLm1pdC5lZHUpCgoJKiBtYWtlaW5mby9tYWtlaW5mby5jIChtaW5vcl92ZXJzaW9uKTogUmVsZWFzZSBub3cgYXQgMS42MC4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKGV4cGFuZF9maWxlbmFtZSk6IEFkZGl0aW9uYWwgZml4ZXMuICBOb3cKCXdoZW4gY2FsbGVkIHdpdGggTlVMTCBmaWxlbmFtZSwgbWFrZXMgYW4gb3V0cHV0IGZpbGVuYW1lIGZyb20gdGhlCglpbnB1dCBmaWxlbmFtZS4KCShjb252ZXJ0X2Zyb21fbG9hZGVkX2ZpbGUpOiBJZiBSRVFVSVJFX1NFVEZJTEVOQU1FIGlzICNkZWZpbmVkIChubwoJbG9uZ2VyIHRoZSBkZWZhdWx0IGNhc2UpIHRoZW4gZXJyb3IgaWYgbm8gQHNldGZpbGVuYW1lIHdhcyBmb3VuZAoJaW4gdGhlIGZpbGUuICBJZiBSRVFVSVJFX1NFVEZJTEVOQU1FIGlzIG5vdCAjZGVmaW5lZCwgdGhlIGlucHV0CglmaWxlIHN0YXJ0cyBlaXRoZXIgYXQgdGhlIGZpcnN0IGxpbmUsIG9yIGF0IHRoZSBzZWNvbmQgbGluZSBpZiB0aGUKCWZpcnN0IGxpbmUgY29udGFpbnMgdGhlIHRleHQgIlxpbnB1dCIsIGFuZCB0aGUgb3V0cHV0IGZpbGVuYW1lIGlzCgl0aGUgaW5wdXQgZmlsZSBuYW1lIHdpdGhvdXQgZGlyZWN0b3J5IGFuZCB3aXRoICIuaW5mbyIgcmVwbGFjaW5nCglhbnkgZXh0ZW5zaW9uIGZvdW5kLgoJKGNvbnZlcnRfZnJvbV9sb2FkZWRfZmlsZSk6IEZpeGVkIGJ1ZyBpbiBzZWFyY2ggZm9yIGZpcnN0CglvY2N1cmVuY2Ugb2YgIkBzZXRmaWxlbmFtZSIuCgpUdWUgRmViICA4IDE0OjE2OjU4IDE5OTQgIE5vYWggRnJpZWRtYW4gIChmcmllZG1hbkBwcmVwLmFpLm1pdC5lZHUpCgogICAgICAgICogY29uZmlndXJlLmluOiBDaGVjayBmb3Igc3lzL2ZpbGUuaC4KICAgICAgICBpbmZvL2Rpci5jLCBpbmZvL2ZpbGVzeXMuYywgaW5mby9tYWtlZG9jLmMsIGluZm8vbm9kZXMuYywKICAgICAgICBpbmZvL3Nlc3Npb24uYywgaW5mby90ZXJtZGVwLmgsIG1ha2VpbmZvL21ha2VpbmZvLmMKICAgICAgICBbSEFWRV9TWVNfRklMRV9IXTogSW5jbHVkZSA8c3lzL2ZpbGUuaD4uCgogICAgICAgICogbWFrZWluZm8vbWFrZWluZm8uYyAoY29udmVydF9mcm9tX2xvYWRlZF9maWxlKTogUHJpbnQKICAgICAgICByZWFsX291dHB1dF9maWxlbmFtZSBpbnN0ZWFkIG9mIG91dHB1dF9maWxlbmFtZSwgc28gdXNlciBrbm93cwogICAgICAgIGV4YWN0bHkgd2hlcmUgb3V0cHV0IGZpbGUgaXMgZ29pbmcuCgogICAgICAgIEZyaSBKdW4gMTEgMTQ6MzQ6MzAgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQogICAgICAgCSogY29uZmlndXJlLmluOiBDaGVjayBmb3Igc2lncHJvY21hc2sgYW5kIHNpZ3NldG1hc2suCgkqIGluZm8vc2lnbmFscy5oIChIQVZFX1NJR1NFVE1BU0spOiBEb24ndCBkZWZpbmUuCgkoSEFWRV9TSUdQUk9DTUFTSyk6IFVzZSBpbnN0ZWFkIG9mIF9QT1NJWF9WRVJTSU9OLgoJKEJMT0NLX1NJR05BTCwgVU5CTE9DS19TSUdOQUwpOiBJZiBuZWl0aGVyIEhBVkVfU0lHUFJPQ01BU0sgbm9yCglIQVZFX1NJR1NFVE1BU0sgaXMgZGVmaW5lZCwgZGVmaW5lIHRoZXNlIHRvIGRvIG5vdGhpbmcuCgkqIGluZm8vc2lnbmFscy5jIChzaWdwcm9jbWFzayk6IERvbid0IGNvbXBpbGUgaWYgSEFWRV9TSUdTRVRNQVNLCglpcyBub3QgZGVmaW5lZC4KCgkqIGluZm8vdGVybWluYWwuYyAodGVybWluYWxfcHJlcF90ZXJtaW5hbCk6IERvbid0IGNsb2JiZXIgVklOVFIKCWFuZCBWUVVJVCBpbiBjb25kaXRpb25hbHMuCgpNb24gRmViICA3IDE4OjEwOjIyIDE5OTQgIEJyaWFuIEouIEZveCAgKGJmb3hAYWkubWl0LmVkdSkKCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKGZ1bGxfcGF0aG5hbWUpOiBDb3JyZWN0IHRvIHJlYWxseSByZXR1cm4KCXRoZSBmdWxsIHBhdGhuYW1lIG9mIHRoZSBpbnB1dCBhcmd1bWVudC4gIE5vdyBtYWtlaW5mbwoJL2Zvby9iYXIudGV4aSwgd2hlcmUgL2Zvby9iYXIudGV4aSBjb250YWlucyAiQHNldGZpbGVuYW1lCgliYXIuaW5mbyIsIGNvcnJlY3RseSBsZWF2ZXMgdGhlIG91dHB1dCBmaWxlIGluICIuL2Jhci5pbmZvIi4KCU5vdGUgdGhhdCAiQHNldGZpbGVuYW1lIC4uL2Jhci5pbmZvIiBzdGlsbCB3b3JrczsgdGhpcyBpcyBhbHJlYWR5CglhbiBhYnNvbHV0ZSBwYXRobmFtZS4KClNhdCBGZWIgIDUgMTM6MDQ6MDUgMTk5NCAgQnJpYW4gSi4gRm94ICAoYmZveEBhaS5taXQuZWR1KQoKCSogbWFrZWluZm8vbWFrZWluZm8uYzogVmVyc2lvbiAxLjU5IHJlbGVhc2VkLgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAod2hvbGUgZmlsZSk6ICBMYXJnZSBudW1iZXIgb2YgY2hhbmdlcyBhbGxvdwoJdGhlICItRSBmaWxlbmFtZSIgb3B0aW9uIHRvIGJlIHVzZWQgdG8gd3JpdGUgYSBtYWNybyBleHBhbmRlZAoJb3V0cHV0IGZpbGUuICBPbiBhIGZpbGUgd2hpY2ggY29udGFpbnMgbm8gQGluY2x1ZGUncyBhbmQgbm8KCUBtYWNybydzLCB0aGUgb3V0cHV0IGZpbGUgaXMgaWRlbnRpY2FsIHRvIHRoZSBpbnB1dCBmaWxlLgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAoZGVjbGFyYXRpb25zKTogUmVtb3ZlIGNtX3RleCAoKS4gIEl0IGlzCgluZXZlciB1c2VkIHNpbmNlIGl0IGlzIGltcGxlbWVudGVkIHdpdGggYGNvbW1hbmRfbmFtZV9jb25kaXRpb24nLgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAoYWRkX2NoYXIpOiBTaGlmdCBicmFjZXMgZm9sbG93aW5nIHRoZQoJY3VycmVudCBicmVhayBwb2ludCBpZiB3ZSBoYXZlIGRlbGV0ZWQgYW55IGNoYXJhY3RlcnMuCgkoYWRqdXN0X2JyYWNlc19mb2xsb3dpbmcpOiBOZXcgZnVuY3Rpb24gYWRqdXN0cyBhbGwgb2YgdGhlIG1hcmtlcnMKCWluIHRoZSBicmFjZSBzdGFjayB3aGljaCBmb2xsb3cgSEVSRSBieSBBTU9VTlQuICBUaGlzIGZpeGVzIGEgYnVnCgl3aGVyZSAoZm9yIGV4YW1wbGUpIEB2YXJ7fSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgYSBsaW5lIGJyZWFrCgl3aGljaCBpcyB0aGUgZW5kIG9mIGEgc2VudGVuY2UgbW9kaWZpZWQgdGhlIG91dHB1dCBpbmNvcnJlY3RseS4KCldlZCBGZWIgIDIgMTQ6MTQ6MDMgMTk5NCAgQnJpYW4gSi4gRm94ICAoYmZveEBhaS5taXQuZWR1KQoKCSogbWFrZWluZm86IFZlcnNpb24gMS41OC4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKGNtX25vZGUpOiBBZGQgZXh0cmEgaGFpciB0byBhbGxvdwoJYmFja3RyYWNraW5nIHRocm91Z2ggZXhlY3V0aW9uIHN0cmluZ3MuICBBZGQgZXh0cmEgaGFpciB0byBhbGxvdwoJdGhlIGZpcnN0IG5vZGUgc2VlbiBhZnRlciBhIEB0b3Agbm9kZSBpcyBzZWVuIHRvIGFkanVzdCB0aGUKCXNlY3Rpb25pbmcgbGV2ZWwgb2YgdGhlIEB0b3Agbm9kZSBhbmQgYXNzb2NpYXRlZCBtZW51cy4KCUZpeCBhIGZldyB0eXBvcy4KCUFkZCBmYWNpbGl0eSBmb3IgbWFjcm9zIHRvIGludm9rZSB0aGUgb3JpZ2luYWwgZGVmaW5pdGlvbi4gIFRoaXMKCXdvcmtzIGJ5IG5vdCBhbGxvd2luZyBhIHNpbmdsZSBtYWNybyB0byByZWN1cnNlLiAgTXV0dWFsIHJlY3Vyc2lvbgoJaXMgYWxzbyBkaXNhbGxvd2VkIHdpdGggdGhpcyBwbGFuLgoKCSogbWFrZWluZm8vbWFjcm9zOiBOZXcgZGlyZWN0b3J5IGNvbnRhaW5zIHNoaXBwYWJsZSBtYWNyb3MuCgkqIG1ha2VpbmZvL21hY3Jvcy9zaW1wbGVkb2MudGV4aTogTWFjcm9zIHdoaWNoIHNpbXBsaWZ5IHRoZSBtb3N0Cgljb21tb24gdXNlcyBvZiBUZVhpbmZvLiAgU2VlIHRoZSBleGFtcGxlIGZpbGUuCglNYWNyb3MgYXJlIG5vdyBhIHJlYXNvbmFibGUgd2F5IHRvIGdldCBwZW9wbGUgc3RhcnRlZCB1c2luZwoJVGVYaW5mby4KCk1vbiBKYW4gMzEgMTI6NTQ6MzYgMTk5NCAgQnJpYW4gSi4gRm94ICAoYmZveEBhaS5taXQuZWR1KQoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAobWlub3JfdmVyc2lvbik6IEluY3JlYXNlIHRvIDU3LgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAoY21fbm9kZSk6IENhbGwgZXhlY3V0ZV9zdHJpbmcgb24gdGhlIG5vZGUsCgluZXh0LCBwcmV2LCBhbmQgdXAgcG9pbnRlcnMuCgkocmVhZGVyX2xvb3ApOiBDaGFuZ2UgbG9naWMgZm9yIGBAYnllJy4gIE5vIGxvbmdlciByZXF1aXJlZCBhdCB0aGUKCWVuZHMgb2YgZXhlY3V0ZWQgc3RyaW5ncy4KCShleGVjdXRlX3N0cmluZyk6IERvIG5vdCBhcHBlbmQgYEBieWUnIHRvIHRoZSBzdHJpbmcgdG8gZXhlY3V0ZS4KCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKHdob2xlIGZpbGUpOiBVc2UgQ09NTUFORF9QUkVGSVggaW5zdGVhZCBvZgoJaGFyZGNvZGluZyBgQCcgY2hhcmFjdGVyIGluIHN0cmluZ3MgYW5kIHNlYXJjaGVzLgoKCSogbWFrZWluZm8vbWFrZWluZm8uYyAocmVhZF9jb21tYW5kKTogSWYgSEFWRV9NQUNST1MgaXMgZGVmaW5lZCwKCXRoZW4gcmVjb2duaXplIGFuZCBleGVjdXRlIG1hY3JvcyBoZXJlLgoJKENvbW1hbmRUYWJsZSk6IEFkZCAibWFjcm8iIGFuZCAidW5tYWNybyIgdG8gdGFibGUgaWYgSEFWRV9NQUNST1MKCWlzIGRlZmluZWQuCgoJKiBtYWtlaW5mby9tYWtlaW5mby5jIChjbV9tYWNybywgY21fdW5tYWNybywgZXhlY3V0ZV9tYWNybykKCSAgbWFrZWluZm8vbWFrZWluZm8uYyAoZ2V0X21hY3JvX2FyZ3MsIGZpbmRfbWFjcm8sIGFkZF9tYWNybykKCSAgbWFrZWluZm8vbWFrZWluZm8uYyAoZGVsZXRlX21hY3JvLCBhcnJheV9sZW4sIGFwcGx5KToKCSAgTmV3IGZ1bmN0aW9ucyBpbXBsZW1lbnQgbWFjcm8gZmFjaWxpdHkgaWYgSEFWRV9NQUNST1MgaXMKCSAgZGVmaW5lZC4KCgkqIG1ha2VpbmZvL21hY3JvLnRleGkgKG5ldyBmaWxlKTogRXhhbXBsZXMgb2YgdXNpbmcgdGhlIG5ldyBtYWNybwoJZmFjaWxpdHkuCgpNb24gSmFuIDMxIDEwOjI0OjUyIDE5OTQgIE5vYWggRnJpZWRtYW4gIChmcmllZG1hbkBwcmVwLmFpLm1pdC5lZHUpCgogICAgICAgICogbWFrZWluZm8vbWFrZWluZm8uYyAoZXhlY3V0aW5nX3N0cmluZyk6IFJlc3RvcmUgZ2xvYmFsCiAgICAgICAgZGVjbGFyYXRpb24uCgpNb24gSmFuIDI0IDIzOjQ4OjI2IDE5OTQgIE5vYWggRnJpZWRtYW4gIChmcmllZG1hbkBwcmVwLmFpLm1pdC5lZHUpCgogICAgICAgICogdGV4aW5mby50ZXhpOiBWYXJpb3VzIHR5cG8gZml4ZXMgZnJvbSBCb2IgQ2hhc3NlbGwKICAgICAgICA8Ym9iQGdudS5haS5taXQuZWR1Pi4KClRodSBKYW4gIDYgMTM6MzQ6MjEgMTk5NCAgTm9haCBGcmllZG1hbiAgKGZyaWVkbWFuQHByZXAuYWkubWl0LmVkdSkKCiAgICAgICAgKiB0ZXhpbmZvLnRleGk6IFR1cm5lZCBvbiBzbWFsbGJvb2sgZm9ybWF0IGFuZCBAc2V0IHNtYWxsYm9vay4KCldlZCBEZWMgMTUgMjA6MDg6NDMgMTk5MyAgTm9haCBGcmllZG1hbiAgKGZyaWVkbWFuQHByZXAuYWkubWl0LmVkdSkKCiAgICAgICAgKiBpbmZvL2ZpbGVzeXMuaCAoREVGQVVMVF9JTkZPUEFUSCk6IEFkZGVkIC91c3IvbG9jYWwvaW5mbywKICAgICAgICAvb3B0L2dudS9pbmZvLCAvdXNyL3NoYXJlL2luZm8sIGFuZCAvdXNyL2xvY2FsL3NoYXJlL2luZm8uCgpUdWUgRGVjIDE0IDE5OjEwOjIwIDE5OTMgIE5vYWggRnJpZWRtYW4gIChmcmllZG1hbkBwcmVwLmFpLm1pdC5lZHUpCgogICAgICAgICogbGlidHhpL01ha2VmaWxlLmluIChBTExPQ0EpOiBEZWZpbmUgZnJvbSBjb25maWd1cmUuCgpGcmkgRGVjIDEwIDA0OjMzOjEyIDE5OTMgIE5vYWggRnJpZWRtYW4gIChmcmllZG1hbkBwcmVwLmFpLm1pdC5lZHUpCgogICAgICAgICogdXRpbC90ZXhpMmR2aTogUHV0IHVuZGVyIFJDUyBjb250cm9sLgoKU3VuIERlYyAyNiAxMTo1NTo0NiAxOTkzICBCcmlhbiBKLiBGb3ggIChiZm94QGFpLm1pdC5lZHUpCgoJKiBpbmZvL3Nlc3Npb24uYyAoaW5mb19udW1lcmljX2RpZ2l0X2FyZ19sb29wKTogRml4IGRvYyBzdHJpbmcuCgoJKiBpbmZvL2luZm9kb2MuYyAoY3JlYXRlX2ludGVybmFsX2luZm9faGVscF9ub2RlKTogUHJpbnQgb3V0IGxpc3QKCW9mIGZ1bmN0aW9ucyB3aGljaCBoYXZlIHRvIGtleXN0cm9rZSBlcXVpdmFsZW50IGlmIHdlIHN1cHBvcnQKCU5BTUVEX0ZVTkNUSU9OUy4KCgkqIGluZm8vZmlsZXN5cy5jIChjb21wcmVzc19zdWZmaXhlcyk6IEFkZCAiLmd6IiBmb3IgImd1bnppcCIgdG8KCWFsaXN0LgoKCSogaW5mby9mb290bm90ZXMuYyAobWFrZV9mb290bm90ZXNfbm9kZSk6IElmIHJlZnNbaV0gZG9lc24ndCBoYXZlCglhIG5vZGVuYW1lLCB0aGVuIGl0IGNvdWxkbid0IGJlIGEgcmVmZXJlbmNlIHRvIGEgZm9vdG5vdGUuCgoJKiBpbmZvL25vZGVtZW51LmMgKGdldF92aXNpdGVkX25vZGVzKTogSGFuZGxlIHRoZSBjYXNlIHdoZXJlCglmaWx0ZXJfZnVuYyBoYXMgbGVmdCBubyBwb3NzaWJsZSBidWZmZXJzIHRvIHNlbGVjdC4KClNhdCBEZWMgMjUgMTA6MzU6NTYgMTk5MyAgQnJpYW4gSi4gRm94ICAoYmZveEBhaS5taXQuZWR1KQoKCSogaW5mby9pbmZvZG9jLmMgKGNyZWF0ZV9pbnRlcm5hbF9pbmZvX2hlbHBfbm9kZSk6IENvbmRpdGlvbmFsaXplCglnZW5lcmF0aW9uIG9mIHRoZSBoZWxwIG5vZGUgYmFzZWQgb24gdGhlICNkZWZpbmUKCUhFTFBfTk9ERV9HRVRTX1JFR0VORVJBVEVELiAgV2hlbiB0aGlzIGlzIG5vdCBzZXQgKHRoZSBkZWZhdWx0KQoJdGhlIGhlbHAgbm9kZSBpcyBnZW5lcmF0ZWQgZXhhY3RseSBvbmNlLCBhbmQgaXMgbm90IGdjJ2FibGUuCglPdGhlcndpc2UsIGEgbmV3IG5vZGUgaXMgYWx3YXlzIGNyZWF0ZWQgZm9yIHRoZSBoZWxwIHdpbmRvdywgYW5kCgl0aGUgb2xkIG5vZGUgZ2V0cyBnYXJiYWdlIGNvbGxlY3RlZCBieSB0aGUgZ2Mgc3lzdGVtLgoJKGluZm9fZmluZF9vcl9jcmVhdGVfaGVscF93aW5kb3cpOiBDb25kaXRpb25hbGl6ZSB3aW5kb3cgbm9kZQoJc2VsZWN0ZWQgYmFzZWQgb24gdGhlICNkZWZpbmUgSEVMUF9OT0RFX0dFVFNfUkVHRU5FUkFURUQuCgoJKiBpbmZvL2Rpci5jIChhZGRfbWVudV90b19maWxlX2J1ZmZlcik6IFBsYWNlIGV4YWN0bHkgb25lIGJsYW5rCglsaW5lIGJldHdlZW4gZGlyZWN0b3J5IGVudHJpZXMuCgoJKiBpbmZvL2luZm8uYyAodmVyc2lvbl9zdHJpbmcpOiBVcGRhdGUgbWlub3IgdmVyc2lvbiB0byAiMTEiLgoKCSogaW5mby9pbmZvLmg6IFVwZGF0ZSBjb21tZW50IHRvICIyLjExIi4KCgkqIGluZm8vZGlyLmMgKG1heWJlX2J1aWxkX2Rpcl9ub2RlKTogT25seSBhZGQgdGhlIGNvbnRlbnRzIG9mIGEKCW5ldyBmaWxlIGlmIGl0IGlzIG5vdCBpZGVudGljYWwgdG8gdGhlIGZpbGUgb2YgdGhlIERJUiBidWZmZXIuCgoJKiBpbmZvL25vZGVzLmMgKGluZm9fZ2V0X25vZGUpOiBDYWxsIGBtYXliZV9idWlsZF9kaXJfbm9kZScgb24KCSJkaXIiIGFzIHdlbGwgYXMgImxvY2FsZGlyIiB0byBtaW1pYyBlbWFjcy0xOS4yMiAiZGlyIiBtZXJnaW5nCgliZWhhdmlvdXIuCgpGcmkgRGVjICAzIDEzOjQxOjQ0IDE5OTMgIEJyaWFuIEouIEZveCAgKGJmb3hAYWkubWl0LmVkdSkKCgkqIGluZm8vaW5mby11dGlscy5jIChjYW5vbmljYWxpemVfd2hpdGVzcGFjZSk6IFN1cHByZXNzIHdoaXRlc3BhY2UKCWZvdW5kIGF0IHRoZSBzdGFydCBvZiBTVFJJTkcuCgpTYXQgTm92IDIwIDE0OjAwOjUwIDE5OTMgIEJyaWFuIEouIEZveCAgKGJmb3hAaGlwcGllKQoKCSogaW5mby9pbmRpY2VzLmMgKERFQ0xBUkVfSU5GT19DT01NQU5EKTogRml4IHR5cG8gaW4gYXNzaWdubWVudCB0bwoJYG9sZF9vZmZzZXQnICg9IGluc3RlYWQgb2YgPT0pLgoKVHVlIE5vdiAgMiAxMjoyMjo0MCAxOTkzICBCcmlhbiBKLiBGb3ggIChiZm94QGFpLm1pdC5lZHUpCgoJKiBtYWtlaW5mby9tYWtlaW5mby5jIChtYWtlX2luZGV4X2VudHJpZXNfdW5pcXVlKTogTmV3IGZ1bmN0aW9uCgltYWtlcyBhIHNvcnRlZCBhcnJheSBoYXZlIGFsbCB1bmlxdWUgZW50cmllcyBieSBhcHBlbmRpbmcgbnVtYmVycwoJdG8gdGhlIGVuZHMgb2Ygc3RyaW5ncy4KCShzb3J0X2luZGV4KTogQ2FsbCBgbWFrZV9pbmRleF9lbnRyaWVzX3VuaXF1ZScuCgpNb24gU2VwIDIwIDEyOjA0OjA1IDE5OTMgIEJyaWFuIEouIEZveCAgKGJmb3hAYWkubWl0LmVkdSkKCgkqIG1ha2VpbmZvL21ha2VpbmZvLmMgKGdldF9leGVjdXRpb25fc3RyaW5nKTogTmV3IEZ1bmN0aW9uIHJldHVybnMKCWEgcG9pbnRlciB0byBhbiAgRVhFQ1VUSU9OX1NUUklORyBzdHJ1Y3R1cmUuCgkoZXhlY3V0ZV9zdHJpbmcpOiBObyBsb25nZXIgdXNlcyBhIHN0YXRpYyBzdHJpbmc7IGNhbGwKCWBnZXRfZXhlY3V0aW9uX3N0cmluZycgaW5zdGVhZCBpbiBvcmRlciB0byBnZXQgYSBmcmVlIGJ1ZmZlciBmb3IKCWNvbnNpbmcuCgpTdW4gTWF5IDIzIDA3OjAwOjIwIDE5OTMgIE5vYWggRnJpZWRtYW4gIChmcmllZG1hbkBwcmVwLmFpLm1pdC5lZHUpCgogICAgICAgICogVGV4aW5mbyAzLjEgcmVsZWFzZWQuCgpTYXQgTWF5IDIyIDE4OjIxOjI3IDE5OTMgIE5vYWggRnJpZWRtYW4gIChmcmllZG1hbkBwcmVwLmFpLm1pdC5lZHUpCgogICAgICAgICogaW5mby9pbmZvLmMgKGluZm9fcGF0Y2hfbGV2ZWwpOiBJbmNyZW1lbnQgY29uc3RhbnQgdG8gMS4KCiAgICAgICAgKiBpbmZvL01ha2VmaWxlLmluIChERUZBVUxUX0lORk9QQVRIKTogRGVmYXVsdCBkZWZpbml0aW9uIGRlbGV0ZWQuCiAgICAgICAgTWFrZWZpbGUuaW46IFB1dCBpdCBoZXJlIGluc3RlYWQuCiAgICAgICAgKiBNYWtlZmlsZS5pbiAoTURFRklORVMpOiBBZGQgREVGQVVMVF9JTkZPUEFUSC4KCiAgICAgICAgKiBjb25maWd1cmUuaW46IGNoZWNrIGZvciB2ZnByaW50ZiBhbmQgdnNwcmludGYuCgogICAgICAgICogbWFrZWluZm8vbWFrZWluZm8uYzogVmVyc2lvbiAxLjU1LgoKICAgICAgICAqIG1ha2VpbmZvL21ha2VpbmZvLmMgKGFkZF93b3JkX2FyZ3MsIGV4ZWN1dGVfc3RyaW5nKSBbSEFWRV9WQVJBUkdTX0hdOgogICAgICAgIERvbid0IHVzZSB0aGlzIGRlZmluaXRpb24gdW5sZXNzIEhBVkVfVlNQUklOVEYgaXMgYWxzbyBkZWZpbmVkLgogICAgICAgIChlcnJvciwgbGluZV9lcnJvciwgd2FybmluZykgW0hBVkVfVkFSQVJHU19IXTogRG9uJ3QgdXNlIHRoaXMKICAgICAgICBkZWZpbml0aW9uIHVubGVzcyBIQVZFX1ZGUFJJTlRGIGlzIGFsc28gZGVmaW5lZC4KICAgICAgICBSZW1vdmUgaW5kZW50YXRpb24gb2YgYWxsIGNwcCBkaXJlY3RpdmVzLCBleGNlcHQgZm9yICNwcmFnbWEuCgpGcmkgTWF5IDIxIDE0OjM0OjI0IDE5OTMgIE5vYWggRnJpZWRtYW4gIChmcmllZG1hbkBwcmVwLmFpLm1pdC5lZHUpCgogICAgICAgICogdGV4aW5mby50ZXhpOiBSZW5hbWUgdG8gdGV4aS50ZXhpLgogICAgICAgIENoYW5nZSBAc2V0ZmlsZW5uYW1lIGFuZCBTVEFSVC1JTkZPLURJUi1FTlRSWSB0byBgdGV4aS5pbmZvJy4KCiAgICAgICAgKiBNYWtlZmlsZS5pbiAoTURFRklORVMpOiBQYXNzIExERkxBR1MgdG8gc3ViLW1ha2VzLgogICAgICAgIChyZWFsY2xlYW4pOiBEZWxldGUgYGNvbmZpZ3VyZScuCiAgICAgICAgQ2hhbmdlZCBhbGwgcmVmZXJlbmNlcyB0byB0ZXhpbmZvLmluZm8gdG8gdGV4aS5pbmZvCgogICAgICAgICogY29uZmlndXJlLmluOiBBZGQgQUNfUFJPR19SQU5MSUIsIGFuZCBBQ19DT05TVC4KICAgICAgICBDaGVjayBmb3IgYHJpbmRleCcgZnVuY3Rpb24uCiAgICAgICAgQ2hlY2sgZm9yIHZhcmFyZ3MuaC4KICAgICAgICBDbGVhbiB1cCBzeW1ib2wgbmFtZXMgZm9yIGhlYWRlciBmaWxlcyBzbyBhIHNpbmdsZSBBQ19IQVZFX0hFQURFUlMKICAgICAgICBjYW4gYmUgdXNlZC4KICAgICAgICAoQUNfSU5JVCk6IFVzZSB0ZXhpLnRleGkgaW5zdGVhZCBvZiBtYWtlaW5mby9tYWtlaW5mby5jCgogICAgICAgICogaW5mby9pbmZvLXV0aWxzLmg6IENvcHkgZGVmaW5pdGlvbnMgb2YgYmNvcHksIGluZGV4LCBhbmQgcmluZGV4CiAgICAgICAgKHdpdGggYXBwcm9wcmlhdGUgI2lmZGVmIHdyYXBwZXJzKSBmcm9tIHRlcm1kZXAuaC4gIFRoZXNlIGFyZQogICAgICAgIGluY2x1ZGVkIGJ5IGEgbXV0dWFsbHkgZXhjbHVzaXZlIHNldCBvZiBmaWxlcy4KCiAgICAgICAgKiBpbmZvL3Rlcm1kZXAuaCBbSEFWRV9TWVNfUFRFTV06IFVzZSBIQVZFX1NZU19QVEVNX0ggaW5zdGVhZC4KCiAgICAgICAgKiBpbmZvL3Rlcm1pbmFsLmMsIGluZm8vdGVybWRlcC5oIFtIQVZFX1RFUk1JT106IFVzZSBIQVZFX1RFUk1JT19ICiAgICAgICAgaW5zdGVhZC4KCiAgICAgICAgKiBpbmZvL21ha2Vkb2MuYywgaW5mby9maWxlc3lzLmMgWyFPX1JET05MWV06IEluY2x1ZGUgZmNudGwuaCBvcgogICAgICAgIHN5cy9mbmN0bC5oLCBkZXBlbmRpbmcgb24gd2hldGhlciBIQVZFX1NZU19GQ05UTF9IIGlzIHNldC4KCiAgICAgICAgKiBpbmZvL3Rlcm1kZXAuaDogUmVtb3ZlIGFsbCBpbmRlbnRhdGlvbiBpbiAjLWV4cHJzLgogICAgICAgIFJlbW92ZSBvbGQgYXNzdW1wdGlvbnMgYWJvdXQgYmNvcHksIGluZGV4LCBhbmQgcmluZGV4LgogICAgICAgIFtIQVZFX0JDT1BZXTogRGVmaW5lIGJjb3B5LgogICAgICAgIFtIQVZFX1JJTkRFWF06IERlZmluZSBpbmRleCBhbmQgcmluZGV4LgoKICAgICAgICAqIGluZm8vbm9kZXMuYyAoaW5mb19nZXRfbm9kZSk6IERvbid0IGNhbGwgc3RyaWNtcCBpZiBub2RlbmFtZSBpcwogICAgICAgIE5VTEwuIFJlbW92ZSBpbmRlbnRhdGlvbiBpbiAjLWV4cHJzLgoKICAgICAgICAqIGluZm8vZWNob19hcmVhLmMgKGVjaG9fYXJlYV9zdGFja19kZXB0aCk6IERlY2xhcmUgc3RhdGljLgoKICAgICAgICAqIGluZm8vTWFrZWZpbGUuaW4gKERFRkFVTFRfSU5GT1BBVEgpOiBNYWtlIHNlcGFyYXRlIE1ha2VmaWxlCiAgICAgICAgdmFyaWFibGUgc28gaXQgY2FuIGJlIG92ZXJyaWRkZW4gbW9yZSBlYXNpbHkgYnkgdGhlIHVzZXIuICBBZGQgYC4nCiAgICAgICAgdG8gYmVnaW5uaW5nIG9mIHBhdGguCiAgICAgICAgKGNsZWFuKTogRGVsZXRlIGNvcmUuKiAoMzg2YnNkIGNvcmUgZmlsZXMpLgogICAgICAgIChNQUtFRE9DKTogVmFyaWFibGUgcmVtb3ZlZC4gIFJlZmVyIHRvIGBtYWtlZG9jJyBleHBsaWNpdGx5LgogICAgICAgIChmdW5zLmgpOiBBZGQgYDonIGNvbW1hbmRzIGFmdGVyIGlmLCB0byBhdm9pZCBzcHVyaW91cyBub256ZXJvCiAgICAgICAgZXhpdCBzdGF0dXNlcy4KCiAgICAgICAgKiBpbmZvL3VzZXJkb2MudGV4aTogSW1wcm92ZWQgY29tbWVudHMgZXhwbGFpbmluZyBpdHMgcHVycG9zZS4KCiAgICAgICAgKiBtYWtlaW5mby9tYWtlaW5mby5jIFtIQVZFX1ZBUkFSR1NfSF06IEluY2x1ZGUgdmFyYXJncy5oLgogICAgICAgIChlcnJvciwgbGluZV9lcnJvciwgd2FybmluZywgYWRkX3dvcmRfYXJncywKICAgICAgICAgIGV4ZWN1dGVfc3RyaW5nKVtIQVZFX1ZBUkFSR1NfSF06IE5ldyB2ZXJzaW9ucyB0aGF0CiAgICAgICAgdXNlIHZhcmFyZ3MuICBGcm9tIGJmb3guCgogICAgICAgICogbWFrZWluZm8vTWFrZWZpbGUuaW4gKGNsZWFuKTogRGVsZXRlIGNvcmUuKiAoMzg2YnNkIGNvcmUgZmlsZXMpLgoKICAgICAgICAqIHV0aWwvTWFrZWZpbGUuaW4gKGNsZWFuKTogUmVtb3ZlIGNvcmUuKiAoMzg2YnNkIGNvcmUgZmlsZXMpLgoKICAgICAgICAqIGxpYnR4aS9NYWtlZmlsZS5pbjogUmVtb3ZlIGFsbCByZWZlcmVuY2VzIHRvICQoY29tbW9uKS4KICAgICAgICAoUkFOTElCKTogTmV3IHZhcmlhYmxlLCBzZXQgZnJvbSBhdXRvY29uZi4KICAgICAgICAobGlidHhpLmEpOiBVc2UgJChSQU5MSUIpIGluc3RlYWQgb2YgYHJhbmxpYicgaW4gdGFyZ2V0IHJ1bGVzLgogICAgICAgIChjbGVhbik6IERlbGV0ZSBjb3JlLiogKDM4NmJzZCBjb3JlIGZpbGVzKS4KClR1ZSBNYXkgMTggMTI6MDg6MjQgMTk5MyAgUm9iZXJ0IEouIENoYXNzZWxsIChib2IgYXQgZ3JhY2tsZS5zdG9ja2JyaWRnZS5tYS51cykKCiAgICAgICAgKiBlbWFjcy90ZXhpbmZtdC5lbCAodGV4aW5mby1mb3JtYXQtcmVmaWxsKTogRG8gbm90IGZpbGwgYSBzZWN0aW9uCiAgICAgICAgdGl0bGUgbGluZSB3aXRoIHRoZSBhc3Rlcmlza3MsIGh5cGhlbnMsIGV0Yy4gdGhhdCB1bmRlcmxpbmUKICAgICAgICBpdCBpbiBhbnkgY2lyY3Vtc3RhbmNlLgoKU3VuIE1heSAxNiAxMzo1Mzo0MyAxOTkzICBOb2FoIEZyaWVkbWFuICAoZnJpZWRtYW5AcHJlcC5haS5taXQuZWR1KQoKICAgICAgICAqIHV0aWwvbWtpbnN0YWxsZGlyczogaGFuZGxlIHJlbGF0aXZlIHBhdGhuYW1lcy4KCkZyaSBNYXkgMTQgMjA6MTg6NDkgMTk5MyAgTm9haCBGcmllZG1hbiAgKGZyaWVkbWFuQHByZXAuYWkubWl0LmVkdSkKCiAgICAgICAgKiB1dGlsL21raW5zdGFsbGRpcnM6IGluaXRpYWxpemUgSUZTIGlmIHVuc2V0LgoKVHVlIE1heSAxMSAwNjozMzoxNCAxOTkzICBOb2FoIEZyaWVkbWFuICAoZnJpZWRtYW5AcHJlcC5haS5taXQuZWR1KQoKICAgICAgICAqIG1ha2VpbmZvL21ha2VpbmZvLmMgKGNtX2l0ZW0pOiBkb24ndCBkZXJlZmVyZW5jZSBpdGVtX2Z1bmMgaWYgTlVMTC4KCk1vbiBNYXkgMTAgMTQ6NTA6MzEgMTk5MyAgTm9haCBGcmllZG1hbiAgKGZyaWVkbWFuQHByZXAuYWkubWl0LmVkdSkKCiAgICAgICAgKiBUZXhpbmZvIDMuMCByZWxlYXNlZC4KCiAgICAgICAgKiBNYWtlZmlsZS5pbiAoQUxMT0NBKTogUHJvdmlkZSBmb3Igc3Vic3RpdHV0aW9uLgoKTW9uIE1heSAxMCAxMDoxMjo1MyAxOTkzICBOb2FoIEZyaWVkbWFuICAoZnJpZWRtYW5AcHJlcC5haS5taXQuZWR1KQoKICAgICAgICAqIGVtYWNzL3RleGluZm10LmVsICh0ZXhpbmZtdC12ZXJzaW9uKTogVXBkYXRlZCB5ZWFyLgoKRnJpIEFwciAxNiAwNDo0ODowMyAxOTkzICBOb2FoIEZyaWVkbWFuICAoZnJpZWRtYW5AcHJlcC5haS5taXQuZWR1KQoKICAgICAgICAqIG1ha2VpbmZvL21ha2VpbmZvLmM6IFZlcnNpb24gMS41NCBmcm9tIGJmb3guCgogICAgICAgICogdXRpbC9maXhmb250czogUmVwbGFjZSBpbnN0YW5jZXMgb2YgYFsuLl0nIHdpdGggYHRlc3QnLgogICAgICAgIFVzZSBtb3JlIHBvcnRhYmxlIGB0ZXN0JyBhcmd1bWVudHM6IGB6JGZvbyA9IHonIGluc3RlYWQgb2YgYCEgJGZvbycuCiAgICAgICAgUm9idXN0aWZ5IHF1b3RpbmcgaW4gZXZhbCBhc3NpZ25tZW50cy4KICAgICAgICAodGV4dGZtZGlyLCB0ZXhwa2RpciwgdGV4Z2ZkaXIpOiBEb24ndCBvdmVycmlkZSBkZWZpbml0aW9uIGZyb20KICAgICAgICBlbnZpcm9ubWVudCwgaWYgYW55LgogICAgICAgIFRyYXAgRVhJVCwgU0lHSFVQLCBTSUdJTlQsIFNJR1FVSVQsIFNJR1RFUk0gdG8gZGVsZXRlIHRlbXAgZmlsZXMKICAgICAgICBpbnN0ZWFkIG9mIHRyeWluZyB0byByZW1vdmUgdGhlbSBleHBsaWNpdGx5IGJlZm9yZSBjYWxsaW5nIGV4aXQuCiAgICAgICAgV2hlbiBjaGFuZ2luZyBjd2QsIGRvIHNvIGluIHN1YnNoZWxsLCBpbiBjYXNlIHZhcmlvdXMgdGV4KmRpcgogICAgICAgIHZhcmlhYmxlcyBhcmUgcmVsYXRpdmUuCiAgICAgICAgRG9uJ3QgdXNlIGBoZWFkJywgYGRpcm5hbWUnLCBvciBgYmFzZW5hbWUnLiAgVGhlc2UgZG9uJ3QgYmVoYXZlCiAgICAgICAgY29uc2lzdGVudGx5IGFuZC9vciBkb24ndCBldmVuIGV4aXN0IG9uIHNvbWUgc3lzdGVtcy4gIFRoZXkgY2FuCiAgICAgICAgYWxsIGJlIGVtdWxhdGVkIHdpdGggYHNlZCcgYW55d2F5LgogICAgICAgICh0ZW1wZmlsZTJfbGluZTEpOiBOZXcgdmFyaWFibGUuICBVc2UgaXQgaW5zdGVhZCBvZiBydW5uaW5nCiAgICAgICAgcHJvY2VzcyB0byBleHRyYWN0IGZpcnN0IGxpbmUgb3V0IG9mIHRlbXBmaWxlMiBtdWx0aXBsZSB0aW1lcy4KICAgICAgICBFbGltaW5hdGUgc29tZSBncmF0dWl0b3VzIHVzZXMgb2YgJHRlbXBmaWxlMiwgc3VjaCBhcyBpbiBmb3IgbG9vcHMuCgpGcmkgTWFyIDI2IDIzOjI1OjEzIDE5OTMgIE5vYWggRnJpZWRtYW4gIChmcmllZG1hbkBwcmVwLmFpLm1pdC5lZHUpCgogICAgICAgICogdGV4aW5mby50ZXhpOiBAc2V0ZmlsZW5hbWUgdGV4aW5mby5pbmZvLgoKICAgICAgICAqIG1ha2VpbmZvL21ha2VpbmZvLmMgKHJlYWRlcl9sb29wLCBlbmRfaW5zZXJ0aW9uKTogRml4IHR5cG9zIGluCiAgICAgICAgY29tbWVudHMuCiAgICAgICAgKGhhbmRsZV92YXJpYWJsZV9pbnRlcm5hbCk6IEhhbmRsZSB0aGUgY2FzZSB0aGF0IHRoZXJlIGZ1cnRoZXIKICAgICAgICBtZW51IHRleHQgYWZ0ZXIgYSBmYWxzZSBpZnNldC9pZmNsZWFyLgoKICAgICAgICAqIHV0aWwvdGV4aTJkdmk6IFZlcnNpb24gMC40CiAgICAgICAgUmVwbGFjZSBhbGwgaW5zdGFuY2VzIG9mIGBbIC4uLiBdJyB3aXRoIGB0ZXN0Jy4KICAgICAgICBVcGRhdGVkIGJ1Zy1yZXBvcnRpbmcgYWRkcmVzcy4KClRodSBNYXIgMjUgMTI6MzE6MzAgMTk5MyAgTm9haCBGcmllZG1hbiAgKGZyaWVkbWFuQHByZXAuYWkubWl0LmVkdSkKCiAgICAgICAgKiBpbmZvL01ha2VmaWxlLmluIChpbnN0YWxsKTogSW5zdGFsbCBpbmZvLjEgbWFuIHBhZ2UuCiAgICAgICAgKHVuaW5zdGFsbCk6IFJlbW92ZSBpbnN0YWxsZWQgaW5mby4xIG1hbiBwYWdlLgoKICAgICAgICAqIGluZm8vaW5mb21hbi50ZXhpOiBTdGFuZGFsb25lIG1hbnVhbCByZW5hbWVkIHRvIGluZm8tc3RuZC50ZXhpLgogICAgICAgIE1ha2VmaWxlLmluOiBUYXJnZXRzIHVwZGF0ZWQgYXBwcm9wcmlhdGVseS4KCiAgICAgICAgKiBpbmZvL01ha2VmaWxlLmluIChMREVGUyk6IE5ldyB2YXJpYWJsZS4gIFVzZSBpdCBmb3IgaW5mby1sb2NhbAogICAgICAgIG1hY3Jvcywgc2luY2UgREVGUyB3aWxsIGJlIGluaGVyaXRlZCBmcm9tIHBhcmVudCBtYWtlIGFuZCBhbnkKICAgICAgICBsb2NhbCBkZWZpbml0aW9ucyB3aWxsIGdldCBjbG9iYmVyZWQuCgogICAgICAgICogaW5mby9SRUxFQVNFOiBSZW5hbWVkIHRvIGluZm8vTkVXUy4KCiAgICAgICAgKiBSRUFETUU6IE5ldyBmaWxlLgoKICAgICAgICAqIE1ha2VmaWxlLmluICh0b3BjbGVhbik6IE5ldyB0YXJnZXQuCgogICAgICAgICogR2V0dGluZy1zdGFydGVkOiBSZW5hbWVkIHRvIElOVFJPRFVDVElPTi4gIEZvcm1lciBuYW1lIGlzIHRvbwogICAgICAgICAgbG9uZyAob3ZlciAxNCBjaGFycykuCgogICAgICAgICogTmV3LWZlYXR1cmVzOiBSZW5hbWVkIHRvIE5FV1MuCgogICAgICAgICogTWFrZWZpbGUuaW4gKE1ERUZJTkVTKTogU2V0IGl0LgoKICAgICAgICAqIE1ha2VmaWxlLmluIChkaXN0KTogVXNlIC0tZ3ppcCBvcHRpb24gdG8gdGFyIHRvIG1ha2Ugc3VyZQogICAgICAgICAgcmVzdWx0aW5nIGZpbGUgaXMgY29tcHJlc3NlZCB3aXRoIGd6aXAuICBDaGFuZ2UgdGFyIGZpbGUKICAgICAgICAgIGV4dGVuc2lvbiBmcm9tIGAuWicgdG8gYC56Jy4KCiAgICAgICAgKiBNYWtlZmlsZS5pbiAoRElTVEZJTEVTKTogRmlsdGVyIG91dCBhbnkgZmlsZSBvciBkaXJlY3RvcnkgbmFtZXMKICAgICAgICAgIHN0YXJ0aW5nIHdpdGggYD0nLgoKICAgICAgICAqIGZpeGZvbnRzOiBNb3ZlZCB0byB1dGlsL2ZpeGZvbnRzLgoKICAgICAgICAqIFJFTEVBU0U6IERlbGV0ZWQuCgogICAgICAgICogbWFrZWluZm8vTWFrZWZpbGUuaW4gKFZQQVRIKTogVXNlICQoc3JjZGlyKSwgbm90IEBzcmNkaXJALgogICAgICAgIChjb21tb24pOiBVc2UgLi4vbGlidHhpLCBub3QgLi4vY29tbW9uLgogICAgICAgIChtYWtlaW5mby5pbik6IFJ1biBtYWtlaW5mbyB3aXRoIC0tbm8tc3BsaXQuCgogICAgICAgICogbWFrZWluZm8vbWFrZWluZm8udGV4aTogQ2hhbmdlcyBmcm9tIGJvYi4KCiAgICAgICAgKiB1dGlsL01ha2VmaWxlLmluIChWUEFUSCk6IFVzZSAkKHNyY2RpciksIG5vdCBAc3JjZGlyQC4KICAgICAgICAoY29tbW9uKTogVXNlIC4uL2xpYnR4aSwgbm90IC4uL2NvbW1vbi4KCiAgICAgICAgKiB1dGlsL2ZpeGZvbnRzOiBNb3ZlZCBmcm9tIHRvcC1sZXZlbCBkaXJlY3RvcnkuCgpXZWQgTWFyIDI0IDEwOjIxOjMxIDE5OTMgIFJvYmVydCBKLiBDaGFzc2VsbCAgKGJvYiBhdCBncmFja2xlKQoKICAgICAgICAqIGVtYWNzL3RleGluZm10LmVsICh0ZXhpbmZvLWZvcm1hdC1yZWdpb24pOiBEbyBub3QgcmVxdWlyZQogICAgICAgIGBAc2V0ZmlsZW5hbWUnIGxpbmU7IGRlbGV0ZSBgXGlucHV0IHRleGluZm8nIGxpbmUgaWYgcGFydCBvZgogICAgICAgIHJlZ2lvbi4KCiAgICAgICAgKiBlbWFjcy90ZXhpbmZtdC5lbCAodGV4aW5mby1yYWlzZS1sb3dlci1zZWN0aW9ucyk6IFJhaXNlIG9yIGxvd2VyIHRoZQogICAgICAgIGhpZXJhcmNoaWNhbCBsZXZlbCBvZiBjaGFwdGVycywgc2VjdGlvbnMsIGV0Yy4gYWNjb3JkaW5nIHRvCiAgICAgICAgYEByYWlzZXNlY3Rpb25zJyBhbmQgYEBsb3dlcnNlY3Rpb25zJyBjb21tYW5kcy4KClRodSBNYXIgMTggMTY6MDI6MjcgMTk5MyAgUm9iZXJ0IEouIENoYXNzZWxsICAoYm9iIGF0IGdyYWNrbGUpCgogICAgICAgICogZW1hY3MvdGV4aW5mby5lbCAodGV4aW5mby1zaG93LXN0cnVjdHVyZSk6IEluZGVudCAqT2NjdXIqIGJ1ZmZlcgogICAgICAgIGFjY29yZGluZyB0byB0aGUgc3RydWN0dXJlIG9mIHRoZSBmaWxlLgoKU2F0IE1hciAgNiAwNToxNjo0NCAxOTkzICBOb2FoIEZyaWVkbWFuICAoZnJpZWRtYW5AcHJlcC5haS5taXQuZWR1KQoKICAgICAgICAqIHV0aWwvdGV4aTJkdmk6IHVzZSAkezErIiRAIn0sIG5vdCBqdXN0ICIkQCIuCgpUdWUgRmViICAyIDA4OjM4OjA2IDE5OTMgIE5vYWggRnJpZWRtYW4gIChmcmllZG1hbkBwcmVwLmFpLm1pdC5lZHUpCgogICAgICAgICogaW5mby9NYWtlZmlsZS5pbjogUmVwbGFjZSBhbGwgIi0tbm9zcGxpdCIgYXJndW1lbnRzIHRvIG1ha2VpbmZvCiAgICAgICAgd2l0aCAiLS1uby1zcGxpdCIKClN1biBKYW4gMzEgMTg6MTY6NTggMTk5MyAgTm9haCBGcmllZG1hbiAgKGZyaWVkbWFuQHByZXAuYWkubWl0LmVkdSkKCiAgICAgICAgKiB1dGlsL3RleGkyZHZpOiBEb24ndCBwdXQgLmR2aSBhbmQgcmVsYXRlZCBhdXhpbGxhcnkgZmlsZXMgaW4gc2FtZQogICAgICAgIGRpcmVjdG9yeSBhcyBzb3VyY2UgZmlsZXMuICBQdXQgdGhlbSBpbiBjdXJyZW50IGRpcmVjdG9yeSBpbnN0ZWFkLgogICAgICAgIChURVhJTlBVVFNfb3JpZyk6IE5ldyB2YXJpYWJsZS4KICAgICAgICAoZmlsZV90ZXhpKTogVmFyaWFibGUgcmVtb3ZlZC4KICAgICAgICAoZmlsZW5hbWVfdGV4aSk6IE5ldyB2YXJpYWJsZS4KICAgICAgICAoY29tbWFuZF9saW5lX2ZpbGVuYW1lKTogVXNlIHRoaXMgd2hlcmV2ZXIgcmVmZXJlbmNlcyB0byBmaWxlX3RleGkKICAgICAgICBvY2N1cmVkIGV4Y2VwdCBpbiBzZXR0aW5nIGZpbGVuYW1lX25vZXh0LgogICAgICAgIChURVhJTlBVVFMpOiBDdXJyZW50IGRpcmVjdG9yeSBhbmQgc291cmNlIGRpcmVjdG9yeSB3aGVyZSBpbnB1dAogICAgICAgIGZpbGUgcmVzaWRlcyBwcmVwZW5kZWQgdG8gc3RhbmRhcmQgcGF0aCBiZWZvcmUgaW52b2tpbmcgVGVYLgoKV2VkIEphbiAyNyAxNjoyNDozNyAxOTkzICBOb2FoIEZyaWVkbWFuICAoZnJpZWRtYW5AcHJlcC5haS5taXQuZWR1KQoKICAgICAgICAqIHV0aWwvTWFrZWZpbGUuaW46IG92ZXJoYXVsZWQuCgpUdWUgSmFuIDI2IDIxOjA0OjIzIDE5OTMgIE5vYWggRnJpZWRtYW4gIChmcmllZG1hbkBwcmVwLmFpLm1pdC5lZHUpCgogICAgICAgICogTWFrZWZpbGUuaW4sIGluZm8vTWFrZWZpbGUuaW4sIG1ha2VpbmZvL01ha2VmaWxlLmluOiBPdmVyaGF1bGVkLgoKICAgICAgICAqIGNvbmZpZ3VyZS5pbjogUmVuYW1lZCBmcm9tIHRleGluZm8uaW4uCiAgICAgICAgICBJbmNvcnBvcmF0ZWQgbWFrZWluZm8vbWFrZWluZm8uaW4sIGluZm8vaW5mby5pbiwgYW5kCiAgICAgICAgICB1dGlsL3V0aWwuaW4uICBDcmVhdGUgYWxsIGNoaWxkIE1ha2VmaWxlcy4KCiAgICAgICAgKiBtYWtlaW5mby9tYWtlaW5mby5pbiwgaW5mby9pbmZvLmluOiBEZWxldGVkIChpbmNvcnBvcmF0ZWQgaW50bwogICAgICAgIHRvcCBjb25maWd1cmUuaW4pLgoKICAgICAgICAqIHV0aWwvdXRpbC5pbjogRGVsZXRlZCAoaW5jb3Jwb3JhdGVkIGludG8gLi4vY29uZmlndXJlLmluKS4KCk1vbiBKYW4gMjUgMTA6NTk6NDkgMTk5MyAgQnJpYW4gRm94ICAoYmZveEBjdWJpdCkKCiAgICAgICAgKiBpbmZvL2luZm8uYzogTmV3IHZlcnNpb24gMi45OyBuZXcgdmFyaWFibGUgSU5GT19QQVRDSF9MRVZFTAogICAgICAgIGFwcGVhcnMgaW4gdGhlIHZlcnNpb24gc3RyaW5nIGlmIGl0IGlzIG5vbi16ZXJvLiAgTmV3IGZ1bmN0aW9uCiAgICAgICAgdmVyc2lvbl9zdHJpbmcgKCkgcHJvZHVjZXMgdGhlIGN1cnJlbnQgdmVyc2lvbiBzdHJpbmcsIGFzIGluIDIuOC1wMS4KCiAgICAgICAgKiBpbmZvL2Rpci5jOiBOZXcgZmlsZSBpbXBsZW1lbnRzIEdpbGxlc3BpZXMgYGxvY2FsZGlyJyBoYWNrcy4KCiAgICAgICAgKiBpbmZvL25vZGVzLmMgKGluZm9fZ2V0X25vZGUpOiBOb3cgY2FsbHMgbWF5YmVfYnVpbGRfZGlyX25vZGUgKCkKICAgICAgICBpZiB0aGUgZmlsZSBuYW1lIHRvIGxvb2sgZm9yIGlzICJkaXIiLgoKICAgICAgICAqIGluZm8vbm9kZXMuaDogTmV3IGZsYWcgTl9DYW5ub3RHQyB1bmNvbmRpdGlvbmFsbHkgcHJldmVudHMgZ2FyYmFnZQogICAgICAgIGNvbGxlY3Rpb24gb2YgYSBmaWxlIGJ1ZmZlcidzIGNvbnRlbnRzLiAgVXNlZCB3aGVuICJkaXIiIGlzIG1hZGUKICAgICAgICBmcm9tIGF0IGxlYXN0IG9uZSAibG9jYWxkaXIiLgoKRnJpIEphbiAyMiAxMTozNjo0MiAxOTkzICBCcmlhbiBGb3ggIChiZm94QGN1Yml0KQoKICAgICAgICAqIGluZm8vZm9vdG5vdGVzLmM6IERvIG5vdCBkZWNsYXJlIGF1dG9fZm9vdG5vdGVzX3AgYXMgImV4dGVybiIgaW4KICAgICAgICB0aGlzIGZpbGUuCgpUaHUgSmFuIDIxIDA4OjU3OjA4IDE5OTMgIEJyaWFuIEZveCAgKGJmb3hAY3ViaXQpCgogICAgICAgICogaW5mby9pbmZvLmM6IE5ldyB2ZXJzaW9uIDIuOC4KCiAgICAgICAgKiBpbmZvL3VzZXJkb2MudGV4aSwgaW5mby9pbmZvbWFuLnRleGksIGluZm8vaW5mby50ZXhpOiBGdWxseQogICAgICAgIGRvY3VtZW50IEluZm87IGNyZWF0ZSBib3RoIG9ubGluZSBhbmQgcHJpbnRlZCBtYW51YWwgdmVyc2lvbnMuCiAgICAgICAgInVzZXJkb2MudGV4aSIgY29udGFpbnMgZXhhY3RseSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgR05VIEluZm8gMi54LgogICAgICAgICJpbmZvbWFuLnRleGkiIGlzIGEgd3JhcHBlciBmb3IgdGhhdCBmaWxlOyBpdCBpcyBtZWFudCB0byBwcm9kdWNlCiAgICAgICAgcHJpbnRlZCBkb2N1bWVudGF0aW9uLiAiaW5mby50ZXhpIiBoYXMgdGhlIHVzZXIgZG9jdW1lbnRhdGlvbiBhcyBhCiAgICAgICAgY29tcGxldGUgY2hhcHRlciB3aXRoaW4gaXRzZWxmLCBidXQgY29udGludWVzIHRvIGNvbnRhaW4gdGhlIEluZm8KICAgICAgICB0dXRvcmlhbC4KCiAgICAgICAgKiBpbmZvL21ha2Vkb2MuYzogQ29udmVydCAiZWFfIiBpbnRvICJlY2hvX2FyZWFfIiB3aGVuIGNyZWF0aW5nIHRoZQogICAgICAgIGNvbW1hbmQgbmFtZS4KCkZyaSBKYW4gMTUgMTY6NTA6MzUgMTk5MyAgQnJpYW4gRm94ICAoYmZveEBjdWJpdCkKCiAgICAgICAgKiBpbmZvL3NlYXJjaC5jIChza2lwX25vZGVfY2hhcmFjdGVycyk6IE5ldyBhcmd1bWVudCBORVdMSU5FU19PS0FZIGlmCiAgICAgICAgbm9uLXplcm8gc2F5cyB0aGF0IG5ld2xpbmVzIHNob3VsZCBiZSBza2lwcGVkIG92ZXIgZHVyaW5nIHBhcnNpbmcuCgogICAgICAgICogaW5mby9pbmZvLXV0aWxzLmMgKGluZm9fcGFyc2Vfbm9kZSk6IE5ldyBhcmd1bWVudCBORVdMSU5FU19PS0FZIGlmCiAgICAgICAgbm9uLXplcm8gc2F5cyB0aGF0IG5ld2xpbmVzIHNob3VsZCBiZSBza2lwcGVkIHdoaWxlIHBhcnNpbmcgb3V0CiAgICAgICAgdGhlIG5vZGVuYW1lIHNwZWNpZmljYXRpb24uCgpXZWQgSmFuIDEzIDE0OjQyOjMzIDE5OTMgIEJyaWFuIEZveCAgKGJmb3hAY3ViaXQpCgogICAgICAgICogaW5mby9tYWtlZG9jLmM6IFJlbW92ZSAiaW5mb18iIGZyb20gdGhlIGZyb250IG9mIHRoZSBjb21tYW5kIG5hbWUKICAgICAgICBiZWZvcmUgaW5zdGFsbGluZyBpdC4KCiAgICAgICAgKiBpbmZvL3Nlc3Npb24uYyAoaW5mb19tZW51X29yX3JlZl9pdGVtKTogQSBsYWJlbCBvZiAiTWVudSIgaXMgb2theSBpZgogICAgICAgIHRoZSBidWlsZGVyIGlzIG5vdCBpbmZvX21lbnVfb2Zfbm9kZSAoKTsKCiAgICAgICAgKiBpbmZvL20teC5jOiBOZXcgZnVuY3Rpb24gcmVwbGFjZV9pbl9kb2N1bWVudGF0aW9uICgpIHJlcGxhY2VzIFxcW2Zvb10KICAgICAgICB3aXRoIHRoZSBrZXlzdHJva2VzIHlvdSB0eXBlIHRvIGdldCB0aGF0IGNvbW1hbmQuICBOb3cgdXNlZCBpbgogICAgICAgIGluZGljZXMuYywgaW5mby5jLCBpbmZvZG9jLmMuCgpNb24gSmFuIDExIDEwOjI3OjQxIDE5OTMgIEJyaWFuIEZveCAgKGJmb3hAY3ViaXQpCgogICAgICAgICogaW5mby92YXJpYWJsZXMuYywgaDogTmV3IGZpbGVzIGNvbnRhaW4gZGVzY3JpYmUtdmFyaWFibGUgYW5kIHN0dWZmCiAgICAgICAgbW92ZWQgb3V0IG9mIG0teC5jLgoKICAgICAgICAqIGluZm8vbS14LmM6IE1vdmUgVkFSSUFCTEVfQUxJU1QgYW5kIHZhcmlhYmxlIGZ1bmN0aW9ucyBpbnRvCiAgICAgICAgdmFyaWFibGVzLmMuICBBZGQgZG9jdW1lbnRhdGlvbiBzdHJpbmcgdG8gdmFyaWFibGUgZGVmaW5pdGlvbi4KCiAgICAgICAgKiBpbmZvL2VjaG9fYXJlYS5jIChwdXNoX2VjaG9fYXJlYSk6IFplcm8gdGhlIGNvbnRlbnRzIG9mCiAgICAgICAgZWNob19hcmVhX2NvbXBsZXRpb25faXRlbXMgYWZ0ZXIgcHVzaGluZyB0aGUgdmFycy4KClNhdCBKYW4gIDkgMTE6NTk6NDcgMTk5MyAgQnJpYW4gRm94ICAoYmZveEBjdWJpdCkKCiAgICAgICAgKiBpbmZvL01ha2VmaWxlLmluOiBBZGQgZm9vdG5vdGVzLmMsaCxvIHRvIHRoZSBhcHByb3ByaWF0ZSBNYWtlZmlsZQogICAgICAgIHZhcmlhYmxlcy4KCiAgICAgICAgKiBpbmZvL3dpbmRvdy5jICh3aW5kb3dfdGlsZV93aW5kb3dzKTogTmV3IGZ1bmN0aW9uIGRpdmlkZXMgdGhlCiAgICAgICAgYXZhaWxhYmxlIHNwYWNlIGFtb25nIHRoZSB2aXNpYmxlIHdpbmRvd3MuCgogICAgICAgICogaW5mby9zZXNzaW9uLmMgKGluZm9fdGlsZV93aW5kb3dzKTogTmV3IGZ1bmN0aW9uIGNhbGxzCiAgICAgICAgd2luZG93X3RpbGVfd2luZG93cy4KCiAgICAgICAgKiBpbmZvL2Zvb3Rub3Rlcy5jLCBmb290bm90ZXMuaDogTmV3IGZpbGUgaW1wbGVtZW50cyBmdW5jdGlvbnMgZm9yCiAgICAgICAgYWlkaW5nIGF1dG9tYXRpYyBmb290bm90ZSBkaXNwbGF5IHdoZW4gZW50ZXJpbmcgYSBub2RlIHdoaWNoIGhhcwogICAgICAgIGZvb3Rub3Rlcy4KCiAgICAgICAgKiBpbmZvL20teC5jOiBOZXcgdXNlci12YXJpYWJsZSAiYXV0b21hdGljLWZvb3Rub3RlcyIuCgogICAgICAgICogaW5mby93aW5kb3cuYyAod2luZG93X3BoeXNpY2FsX2xpbmVzKSBOZXcgZnVuY3Rpb24gY291bnRzIHRoZQogICAgICAgIGNhcnJpYWdlIHJldHVybnMgZm91bmQgaW4gTk9ERS4KCldlZCBKYW4gIDYgMTE6MjQ6MTkgMTk5MyAgQnJpYW4gRm94ICAoYmZveEBjdWJpdCkKCiAgICAgICAgKiBpbmZvL2dlbmVyYWwuaDogI2luY2x1ZGUgPHVuaXN0ZC5oPiBpZiB3ZSBoYXZlIGl0LgoKVHVlIEphbiAgNSAxMToxMjozMyAxOTkzICBCcmlhbiBGb3ggIChiZm94QGN1Yml0KQoKICAgICAgICAqIGluZm8vaW5mby11dGlscy5jIChpbmZvX2NvbmNhdGVuYXRlX3JlZmVyZW5jZXMpOiBJZiBlaXRoZXIgYXJnIGlzCiAgICAgICAgTlVMTCwgcmV0dXJuIHRoZSBvdGhlciBhcmcuCgogICAgICAgICogaW5mby9pbmRpY2VzLmMgKGluZm9faW5kaWNlc19vZl9maWxlX2J1ZmZlcik6IFNpbXBsaWZpZWQgYW5kCiAgICAgICAgY29ycmVjdGVkIGxvb3AgdGhyb3VnaCB0YWdzL25vZGVzIG9mIGZpbGUgYnVmZmVyIGxvb2tpbmcgZm9yCiAgICAgICAgaW5kaWNlcy4KCiAgICAgICAgKiBpbmZvL3NlYXJjaC5jIChza2lwX25vZGVfY2hhcmFjdGVycyk6IFJld3JpdGUgImlmIiBzdGF0ZW1lbnQgZm9yCiAgICAgICAgY2xhcmlmaWNhdGlvbiBhbmQgY29uY2lzZW5lc3MuCgpGcmkgSmFuICAxIDAzOjE4OjI2IDE5OTMgIEJyaWFuIEZveCAgKGJmb3hAY3ViaXQpCgogICAgICAgICogaW5mby9pbmZvLmluOiBDaGVjayBmb3Igc2V0dmJ1ZiAoKSwgYW5kIGNoZWNrIHRvIHNlZSB3aGV0aGVyIHRoZSBhcmdzCiAgICAgICAgYXJlIHJldmVyc2VkLgoKICAgICAgICAqIGluZm8vZHJpYmJsZS5jIChvcGVuX2RyaWJibGVfZmlsZSkgQ2hlY2sgSEFWRV9TRVRWQlVGIGFuZAogICAgICAgIFNFVFZCVUZfUkVWRVJTRUQgd2hlbiBzZXR0aW5nIHRoZSBidWZmZXJpbmcgb24gaW5mb19kcmliYmxlX2ZpbGUuCgpUaHUgRGVjIDMxIDIwOjE0OjEzIDE5OTIgIEJyaWFuIEZveCAgKGJmb3hAY3ViaXQpCgogICAgICAgICogaW5mby9zZXNzaW9uLmMgKGluZm9fc2VsZWN0X3JlZmVyZW5jZSkgSWYgdGhlIG5vZGUgY291bGRuJ3QgYmUgZm91bmQsCiAgICAgICAgbG9vayBmb3IgdGhlIGxhYmVsIGFzIGEgZmlsZW5hbWUgKGkuZS4sICIoTEFCRUwpVG9wIikuCgpXZWQgRGVjIDMwIDAxOjU3OjUwIDE5OTIgIEJyaWFuIEZveCAgKGJmb3hAY3ViaXQpCgogICAgICAgICogTmV3IFZlcnNpb24gMi43IEJldGEuCgogICAgICAgICogaW5mby9lY2hvX2FyZWEuYzogTnVtZXJvdXMgZnVuY3Rpb25zIG5vdyBkbyBzb21ldGhpbmcgd2l0aCB0aGUKICAgICAgICBudW1lcmljIGFyZ3VtZW50LiAgS2lsbCByaW5nIGltcGxlbWVudGVkLCBhcyB3ZWxsIGFzIHlhbmsgYW5kCiAgICAgICAgeWFua19wb3AuICBBbHNvIHRyYW5zcG9zZS1jaGFycy4KCiAgICAgICAgKiBpbmZvL3dpbmRvdy5jICh3aW5kb3dfbWFrZV9tb2RlbGluZSk6IENoZWNrIG5vZGUtPmZsYWdzIGZvcgogICAgICAgIE5fSXNDb21wcmVzc2VkIGFuZCBkaXNwbGF5ICJ6eiIgaW4gdGhlIG1vZGVsaW5lIGlmIHRoZSBub2RlIGNvbWVzCiAgICAgICAgZnJvbSBhIGZpbGUgd2hpY2ggaXMgY29tcHJlc3NlZCBvbiBkaXNrLgoKTW9uIERlYyAyOCAxNzozMzoxMiAxOTkyICBCcmlhbiBGb3ggIChiZm94QGN1Yml0KQoKICAgICAgICAqIGluZm8vZmlsZXN5cy5jLCBpbmZvL25vZGVzLmM6IE5ldyBtZW1iZXIgb2YgRklMRV9CVUZGRVIgIkZJTEVTSVpFIgogICAgICAgIGNvbnRhaW5zIHRoZSBzaXplIG9mIGZpbGVfYnVmZmVyLT5jb250ZW50cy4gIGZpbmZvLnN0X3NpemUgaXMgbm8KICAgICAgICBsb25nZXIgcmVsaWVkIHVwb24gdG8gcmVhZCB0aGUgY29udGVudHMgb2YgZmlsZXMsIHNpbmNlIHRoZSBuZXcKICAgICAgICBmdW5jdGlvbiAoZmlsZXN5c19yZWFkX2luZm9fZmlsZSkgY2FuIHJlYWQgY29tcHJlc3NlZCBmaWxlcy4KCiAgICAgICAgKiBpbmZvL2ZpbGVzeXMuYyAoaW5mb19maW5kX2Z1bGxwYXRoKSBJZiBhIGZpbGUgc3RhcnRzIHdpdGggYSBzbGFzaCAob3IKICAgICAgICB0aWxkZSBleHBhbnNpb24gY2F1c2VzIGl0IHRvIHN0YXJ0IHdpdGggYSBzbGFzaCkgc3RpbGwgY2FsbAogICAgICAgIGluZm9fZmluZF9maWxlX2luX3BhdGggKCkgb24gaXQgc28gdGhhdCB3ZSBjYW4gZmluZCBmaWxlcyB3aXRoCiAgICAgICAgY29tcHJlc3Npb24gc3VmZml4ZXMuCgogICAgICAgICogaW5mby9tLXguYzogTmV3IHZhcmlhYmxlICJnYy1jb21wcmVzc2VkLWZpbGVzIi4KClR1ZSBEZWMgMjIgMDM6NDU6MjggMTk5MiAgQnJpYW4gRm94ICAoYmZveEBjdWJpdCkKCiAgICAgICAgKiBpbmZvL2luZm8uYzogVmVyc2lvbiAyLjYgQmV0YS4KCiAgICAgICAgKiBpbmZvL2luZGljZXMuYyAoaW5mb19pbmRleF9uZXh0KTogSW1wcm92ZSB0aGUgZmluYWwgc2VhcmNoIGZvciB0aGUKICAgICAgICBtYXRjaGVkIGluZGV4IGVudHJ5LgoKICAgICAgICAqIGluZm8vc2Vzc2lvbi5jIChtb3ZlX3RvX3NjcmVlbl9saW5lKTogTmV3IGZ1bmN0aW9uIGltcGxlbWVudHMgYE0tcicuCiAgICAgICAgR2l2ZW4gYSBudW1lcmljIGFyZ3VtZW50LCBtb3ZlIHBvaW50IHRvIHRoZSBzdGFydCBvZiB0aGF0IGxpbmUgaW4KICAgICAgICB0aGUgY3VycmVudCB3aW5kb3c7IHdpdGhvdXQgYW4gYXJnLCBtb3ZlIHRvIHRoZSBjZW50ZXIgbGluZS4KICAgICAgICAqIGluZm9tYXAuYzogUHV0IG1vdmVfdG9fc2NyZWVuX2xpbmUgKCkgb24gYE0tcicuCgogICAgICAgICogaW5mby9ub2Rlcy5jIChhZGp1c3Rfbm9kZXN0YXJ0KTogRG9uJ3Qgc2V0IE5fVXBkYXRlVGFncyB1bmxlc3MgdGhlCiAgICAgICAgbm9kZSBjYW1lIGZyb20gYSB0YWdzIHRhYmxlLgoKICAgICAgICAqIGluZm8vbm9kZXMuYyAoaW5mb19maW5kX2ZpbGVfaW50ZXJuYWwpOiBJZiB0aGUgZmlsZW5hbWUgYmVpbmcgbG9va2VkCiAgICAgICAgZm9yIGRvZXNuJ3Qgc3RhcnQgd2l0aCBhIGAvJywgdGhlbiBhZGRpdGlvbmFsbHkgY29tcGFyZSB0aGUKICAgICAgICBmaWxlbmFtZSBhZ2FpbnN0IHRoZSBmdWxscGF0aCBvZiB0aGUgZmlsZSBidWZmZXIgc2FucyB0aGUKICAgICAgICBkaXJlY3RvcnkgbmFtZS4gIFRoaXMgY2FuIGhhcHBlbiB3aGVuIHNlbGVjdGluZyBub2RlbWVudSBpdGVtcy4KCk1vbiBEZWMgMjEgMTA6MDc6MTggMTk5MiAgQnJpYW4gRm94ICAoYmZveEBjdWJpdCkKCiAgICAgICAgKiBpbmZvL3Nlc3Npb24uYywgaW5mby9kaXNwbGF5LmM6IFJlbW92ZSBhbGwgcmVmZXJlbmNlcyB0bwogICAgICAgIGFjdGl2ZV93aW5kb3dfY2gsIGFjdGl2ZV93aW5kb3dfY3YsIGN1cnNvcl9oLCBhbmQgY3Vyc29yX3YuICBUaGUKICAgICAgICBzaW5nbGUgZnVuY3Rpb24gZGlzcGxheV9jdXJzb3JfYXRfcG9pbnQgKCkgaXMgdXNlZCBmb3IgYWxsIGN1cnNvcgogICAgICAgIG1vdmVtZW50LCBhbmQgdG8gcGxhY2UgdGhlIHRlcm1pbmFsJ3MgY3Vyc29yIGF0IHRoZSByaWdodCBsb2NhdGlvbgogICAgICAgIG9uIHRoZSBzY3JlZW4uCgpTYXQgRGVjIDE5IDEyOjAxOjMzIDE5OTIgIEJyaWFuIEZveCAgKGJmb3hAY3ViaXQpCgogICAgICAgICogaW5mby9ub2RlbWVudS5jOiBOZXcgZmlsZSBpbXBsZW1lbnRzIGEgZmV3IGZ1bmN0aW9ucyBmb3IgbWFuaXB1bGF0aW5nCiAgICAgICAgcHJldmlvdXNseSB2aXNpdGVkIG5vZGVzLiAgYGxpc3QtdmlzaXRlZC1ub2RlcycgcHJvZHVjZXMgYSBtZW51IG9mCiAgICAgICAgdGhlIG5vZGVzIHRoYXQgY291bGQgYmUgcmVhY2hlZCBieSBpbmZvX2hpc3Rvcnlfbm9kZSAoKSBpbiBzb21lCiAgICAgICAgd2luZG93LiAgYHNlbGVjdC12aXNpdGVkLW5vZGUnIGlzIHNpbWlsYXIgdG8gYGxpc3QtdmlzaXRlZC1ub2RlJwogICAgICAgIGZvbGxvd2VkIGJ5IGBpbmZvLW1lbnUtaXRlbScsIGJ1dCBkb2Vzbid0IGRpc3BsYXkgYSB3aW5kb3cgd2l0aAogICAgICAgIHRoZSB2aXNpdGVkIG5vZGVzIG1lbnUuCgogICAgICAgICogaW5mby9zZXNzaW9uLmMgKGluZm9fbnVtZXJpY19hcmdfZGlnaXRfbG9vcCk6IElmIHJlZGlzcGxheSBoYWQgYmVlbgogICAgICAgIGludGVycnVwdGVkLCB0aGVuIHJlZGlzcGxheSBhbGwgb2YgdGhlIHdpbmRvd3Mgd2hpbGUgd2FpdGluZyBmb3IKICAgICAgICBpbnB1dC4KCiAgICAgICAgKiBpbmZvL2Rpc3BsYXkuYyAoZGlzcGxheV93YXNfaW50ZXJydXB0ZWRfcCk6IE5ldyB2YXJpYWJsZSBrZWVwcyB0cmFjawogICAgICAgIG9mIGludGVycnVwdGVkIGRpc3BsYXkuICBVc2VkIGluCiAgICAgICAgaW5mby9zZXNzaW9uLmM6aW5mb19udW1lcmljX2FyZ19kaWdpdF9sb29wICgpLgoKICAgICAgICAqIGluZm8vc2Vzc2lvbi5jIChpbmZvX2dsb2JhbF9uZXh0LCBpbmZvX2dsb2JhbF9wcmV2KTogVXNlIHRoZSBudW1lcmljCiAgICAgICAgYXJndW1lbnQgcGFzc2VkIHRvIGRldGVybWluZSBob3cgbWFueSBub2RlcyB0byBtb3ZlLgoKICAgICAgICAqIGluZm8vc2Vzc2lvbi5jIChpbmZvX3Njcm9sbF9mb3J3YXJkLCBpbmZvX3Njcm9sbF9iYWNrd2FyZCk6IElmIHRoZQogICAgICAgIGludm9raW5nIGtleSBpcyBub3QgU1BDIG9yIERFTCBvbmx5IGRvIFBhZ2UgT25seSBzY3JvbGxpbmcuCgpUaHUgRGVjIDE3IDAxOjM0OjIyIDE5OTIgIEJyaWFuIEZveCAgKGJmb3hAY3ViaXQpCgogICAgICAgICogaW5mby9kaXNwbGF5LmMgKGRpc3BsYXlfdXBkYXRlX29uZV93aW5kb3cpOiBBbGxvdyBXX05vV3JhcCB0byBhZmZlY3QKICAgICAgICB3aW5kb3cgZGlzcGxheS4KCiAgICAgICAgKiBpbmZvL3dpbmRvdy5jIChjYWxjdWxhdGVfbGluZV9zdGFydHMpOiBOb3cgdGFrZXMgYSBXSU5ET1cgKiBhcyBhbgogICAgICAgIGFyZ3VtZW50LCBhbmQgc2ltcGx5IGRvZXMgdGhlIGNhbGN1bGF0aW9uLCBwbGFjaW5nIHRoZSByZXN1bHRzCiAgICAgICAgaW50byB3aW5kb3ctPmxpbmVfc3RhcnRzIGFuZCB3aW5kb3ctPmxpbmVfY291bnQuICBJdCBhbHNvIGhhbmRsZXMKICAgICAgICBXX05vV3JhcCBpbiB3aW5kb3ctPmZsYWdzLgoKTW9uIERlYyAxNCAwMjoxODo1NSAxOTkyICBCcmlhbiBGb3ggIChiZm94QGN1Yml0KQoKICAgICAgICAqIGluZm8vc2Vzc2lvbi5jIChpbmZvX2JhY2t3YXJkX3Njcm9sbCk6IERvbid0IHRyeSB0byBnZXQgcHJldmlvdXMgbm9kZQogICAgICAgIGlmIHRoZSB0b3Agb2YgdGhlIG5vZGUgaXNuJ3QgY3VycmVudGx5IGJlaW5nIGRpc3BsYXllZC4KCiAgICAgICAgKiBpbmZvL3dpbmRvdy5jICh3aW5kb3dfYWRqdXN0X3BhZ2V0b3ApIFVzZSBuZXcgdmFyaWFibGUKICAgICAgICAid2luZG93X3Njcm9sbF9zdGVwIiB0byBhdHRlbXB0IHRvIGNvbnRyb2wgdGhlIGFtb3VudCB3aGljaCB0aGUKICAgICAgICB3aW5kb3cgc2Nyb2xscy4KCiAgICAgICAgKiBpbmZvL20teC5jIChpbmZvX3ZhcmlhYmxlcykgQWRkICJzY3JvbGwtc3RlcCIgdG8gdGhlIGxpc3QuCgpUaHUgRGVjIDEwIDA4OjUyOjEwIDE5OTIgIEJyaWFuIEZveCAgKGJmb3hAY3ViaXQpCgogICAgICAgICogaW5mby9tLXguYzogTmV3IHZhcmlhYmxlIGVudHJ5IHNob3ctaW5kZXgtbWF0Y2hlcy4gIFdoZW4gc2V0IHRvCiAgICAgICAgbm9uLXplcm8gdGhlIG1hdGNoZWQgcG9ydGlvbiBvZiB0aGUgc2VhcmNoIHN0cmluZyBpcyBpbmRpY2F0ZWQKICAgICAgICB3aXRoIGAgYW5kICcuICBQZXJoYXBzIEkgc2hvdWxkIHVzZSBgfCcgaW5zdHxlYXxkPwoKICAgICAgICAqIGluZm8vZWNob19hcmVhLmMgKGVhX3Bvc3NpYmxlX2NvbXBsZXRpb25zKTogQWx3YXlzIGJ1aWxkIGNvbXBsZXRpb25zCiAgICAgICAgYmVmb3JlIGNoZWNraW5nIHRvIHNlZSBob3cgbWFueSB0aGVyZSB3ZXJlLgoKICAgICAgICAqIGluZm8vaW5mby11dGlscy5jOiAoaW5mb19jb25jYXRlbmF0ZV9yZWZlcmVuY2VzKTogTmV3IHV0aWxpdHkKICAgICAgICBmdW5jdGlvbiBjb25jYXRlbmF0ZXMgcmVmZXJlbmNlcy4KCiAgICAgICAgKiBpbmZvL01ha2VmaWxlLmluOiBBZGQgaW5kaWNlcy5jIGFuZCBpbmRpY2VzLmggdG8gU1JDUyBhbmQgSERSUy4KICAgICAgICAgIEFkZCBpbmRpY2VzLmMgdG8gQ01ERklMRVMuCgogICAgICAgICogaW5mby9pbmRpY2VzLmMsIGluZm8vaW5kaWNlcy5oOiBOZXcgZmlsZSBpbXBsZW1lbnRzIGBpJyBhbmQgYCwnCiAgICAgICAgY29tbWFuZHMgb2YgaW5mbywgYW5kIHByb3ZpZGVzIGluZGV4IHNlYXJjaGluZyBjYXBhYmlsaXRpZXMuCgogICAgICAgICogaW5mby9lY2hvX2FyZWEuYyAoaW5mb19yZWFkX2NvbXBsZXRpbmdfaW5fZWNob19hcmVhKTogIFNwbGl0IG9mZiBpbnRvCiAgICAgICAgc2VwYXJhdGUgY2FsbGFibGUgZnVuY3Rpb24gaW5mb19yZWFkX2NvbXBsZXRpbmdfaW50ZXJuYWwgKCkuCgogICAgICAgICogaW5mby9lY2hvX2FyZWEuYyAoaW5mb19yZWFkX21heWJlX2NvbXBsZXRpbmcpOiBOZXcgZnVuY3Rpb24gY2FsbHMKICAgICAgICBpbmZvX3JlYWRfY29tcGxldGluZ19pbnRlcm5hbCAoKSB3aXRoIG5vbi1mb3JjaW5nIGFyZ3VtZW50LgoKICAgICAgICAqIGluZm8vc2Vzc2lvbi5jOiBSZW5hbWUgZG93bl9uZXh0X3VwbmV4dF9vcl9lcnJvciAoKSBhbmQKICAgICAgICBwcmV2X3VwX29yX2Vycm9yICgpIHRvIGZvcndhcmRfbW92ZV9ub2RlX3N0cnVjdHVyZSAoKSwgYW5kCiAgICAgICAgYmFja3dhcmRfbW92ZV9ub2RlX3N0cnVjdHVyZSAoKS4gIEltcGxlbWVudCBuZXcgY29tbWFuZHMKICAgICAgICBpbmZvX2dsb2JhbF9uZXh0ICgpIGFuZCBpbmZvX2dsb2JhbF9wcmV2ICgpLgoKICAgICAgICAqIGluZm8vaW5mb21hcC5jIChpbml0aWFsaXplX2luZm9fa2V5bWFwcyk6IEJpbmQgYFsnIGFuZCBgXScgdG8KICAgICAgICBiYWNrd2FyZF8sIGZvcndhcmRfbW92ZV9ub2RlX3N0cnVjdHVyZSAoKSByZXNwZWN0aXZlbHkuCgogICAgICAgICogaW5mby9zZXNzaW9uLmMgKGluZm9fbWVudV9kaWdpdCk6IENhbGxlZCB3aXRoICIwIiBhcyBhcmcsIHNlbGVjdCB0aGUKICAgICAgICBsYXN0IG1lbnUgaXRlbS4KCiAgICAgICAgKiBpbmZvL2luZm9tYXAuYyAoaW5pdGlhbGl6ZV9pbmZvX2tleW1hcHMpOiAiMCIgY2FsbHMKICAgICAgICBpbmZvX21lbnVfZGlnaXQgKCkuCgogICAgICAgICogaW5mby9zZXNzaW9uLmMgKGluZm9fbW92ZV90b194cmVmKTogVGFrZSBkaXIgaW50byBhY2NvdW50IHdoZW4gdGhlcmUKICAgICAgICBhcmUgeHJlZnMgYW5kIG1lbnUgaXRlbXMgaW4gdGhlIG5vZGUgYW5kIHdlIGFyZSB3cmFwcGluZwogICAgICAgIGJhY2t3YXJkcy4KClR1ZSBEZWMgIDggMDk6NTc6NTggMTk5MiAgQnJpYW4gRm94ICAoYmZveEBjdWJpdCkKCiAgICAgICAgKiBpbmZvL2luZm8uYzogVmVyc2lvbiAyLjUgQmV0YS4KCiAgICAgICAgKiBpbmZvL3Rlcm1pbmFsLmMgKHRlcm1pbmFsX2luc2VydF9saW5lcywgdGVybWluYWxfZGVsZXRlX2xpbmVzKSBEbyBub3QKICAgICAgICBleHBlY3QgdGdvdG8gdG8gcmV0dXJuIGEgbmV3IHN0cmluZzsgaXQgcmV0dXJucyB0aGUgYWRkcmVzcyBvZiBhCiAgICAgICAgc3RhdGljIGJ1ZmZlci4KCiAgICAgICAgKiBpbmZvL2luZm9kb2MuYyAoaW5mb19maW5kX29yX2NyZWF0ZV9oZWxwX3dpbmRvdykgQ29ycmVjdCBjaGVjayBmb3IKICAgICAgICBwcmlvciBleGlzdGluZyBoZWxwIG5vZGUuCgogICAgICAgICogaW5mby9tLXguYyAoc2V0X3ZhcmlhYmxlKTogQWxsb3cgdmFyaWFibGVzIHRvIGhhdmUgYSBsaXN0IG9mIGNob2ljZXMuCiAgICAgICAgQWRkIG5ldyB2YXJpYWJsZSBzY3JvbGwtYmVoYXZpb3VyLgoKICAgICAgICAqIGluZm8vc2Vzc2lvbi5jIChkb3duX25leHRfdXBuZXh0X29yX2Vycm9yLCBwcmV2X3VwX29yX2Vycm9yKSBOZXcKICAgICAgICBmdW5jdGlvbnMgaW1wbGVtZW50IHVzZXItY29udHJvbGxlZCBiZWhhdmlvdXIgd2hlbiBhdHRlbXB0aW5nIHRvCiAgICAgICAgc2Nyb2xsIHBhc3QgdGhlIGJvdHRvbSBvciB0b3Agb2YgYSBub2RlLiAgTmV3IHZhcmlhYmxlCiAgICAgICAgaW5mb19zY3JvbGxfYmVoYXZpb3VyIGlzIHVzZXIgdmlzaWJsZSBhcyAic2Nyb2xsLWJlaGF2aW91ciIuCgogICAgICAgICogaW5mby9zZXNzaW9uLmMgKGluZm9fc2Nyb2xsX2ZvcndhcmQsIGluZm9fc2Nyb2xsX2JhY2t3YXJkKSBDYWxsIG5ldwogICAgICAgIGZ1bmN0aW9ucyBmb3IgdXNlci1jb250cm9sbGVkIHNjcm9sbCBiZWhhdmlvdXIuCgogICAgICAgICogaW5mby90ZXJtaW5hbC5jICh0ZXJtaW5hbF9pbml0aWFsaXplX3Rlcm1pbmFsKSBTZXQgUEMgZnJvbSBCQyBub3QKICAgICAgICBmcm9tIEJVRkZFUi4KCk1vbiBEZWMgIDcgMTE6MjY6MTIgMTk5MiAgQnJpYW4gRm94ICAoYmZveEBjdWJpdCkKCiAgICAgICAgKiB1dGlsL3RleGluZGV4LmM6IENoYW5nZSBFWElUX1NVQ0NFU1MgYW5kIEVYSVRfRkFUQUwgdG8gVElfTk9fRVJST1IKICAgICAgICBhbmQgVElfRkFUQUxfRVJST1IgcmVzcGVjdGl2ZWx5LiAgVGhpcyBhdm9pZHMgbmFtZXNwYWNlIGNvbmZsaWN0cwogICAgICAgIG9uIE5lWFQgMi4wLgoKU2F0IERlYyAgNSAwMDowNzo1OSAxOTkyICBCcmlhbiBGb3ggIChiZm94QGN1Yml0KQoKICAgICAgICAqIGluZm8vaW5mby5jOiBOZXcgb3B0aW9uICItLXN1Ym5vZGVzIiBzYXlzIHRvIHJlY3Vyc2l2ZWx5IGR1bXAgdGhlCiAgICAgICAgbWVudXMgb2YgdGhlIG5vZGVzIHRoYXQgeW91IHdpc2ggdG8gZHVtcC4gIE1lbnUgaXRlbXMgd2hpY2ggcG9pbnQKICAgICAgICB0byBleHRlcm5hbCBub2RlcyBhcmUgbm90IGR1bXBlZCwgYW5kIG5vIG5vZGUgaXMgZHVtcGVkIHR3aWNlLgoKVGh1IERlYyAgMyAxNjoxMTowMiAxOTkyICBCcmlhbiBGb3ggIChiZm94QGN1Yml0KQoKICAgICAgICAqIGluZm8vc2Vzc2lvbi5jIChpbmZvX2Vycm9yKSBEb24ndCByaW5nIHRoZSBiZWxsIGlmCiAgICAgICAgaW5mb19lcnJvcl9yaW5nc19iZWxsX3AgaXMgemVyby4gIChpbmZvX2Fib3J0X2tleSkgUmluZyB0aGUgYmVsbAogICAgICAgIGlmIHByaW50aW5nICJRdWl0IiBpbiB0aGUgZWNobyBhcmVhIHdvdWxkbid0IGRvIGl0LgoKICAgICAgICAqIGluZm8vbS14LmMgKHNldF92YXJpYWJsZSkgTmV3IGZ1bmN0aW9ucyBhbGxvd3Mgc2V0dGluZyBvZgogICAgICAgIHZhcmlhYmxlcyBpbiB0aGUgZWNobyBhcmVhLiAgQ3VycmVudGx5LCBvbmx5IHZpc2lsYmxlLWJlbGwgYW5kCiAgICAgICAgZXJyb3JzLXJpbmctYmVsbCBhcmUgaW1wbGVtZW50ZWQuCgpXZWQgRGVjICAyIDEzOjExOjM3IDE5OTIgIEJyaWFuIEZveCAgKGJmb3hAY3ViaXQpCgogICAgICAgICogaW5mby9ub2Rlcy5jLCBpbmZvL21ha2Vkb2MuYzogSWYgT19SRE9OTFkgaXMgbm90IGRlZmluZWQgYnkKICAgICAgICBzeXMvZmlsZS5oLCBpbmNsdWRlIHN5cy9mY250bC5oLgoKICAgICAgICAqIGluZm8vZmlsZXN5cy5jIChpbmZvX2ZpbGVfaW5fcGF0aCk6IEV4cGFuZCBsZWFkaW5nIHRpbGRlcyBmb3VuZAogICAgICAgIHdpdGhpbiBkaXJlY3RvcnkgbmFtZXMuCgogICAgICAgICogaW5mby90ZXJtaW5hbC5jICh0ZXJtaW5hbF9pbml0aWFsaXplX3Rlcm1pbmFsKSBTZXQgb3NwZWVkIHRvIDEzIGlmCiAgICAgICAgbm90IHNldHRhYmxlIGFueSBvdGhlciB3YXkuICBJdCBpcyBhbiBpbmRleCBpbnRvIGFuIGFycmF5IG9mCiAgICAgICAgb3V0cHV0IHNwZWVkcy4KCiAgICAgICAgKiBpbmZvL2Rpc3BsYXkuYyAoZnJlZV9kaXNwbGF5KSBEbyBub3QgZnJlZSBhIE5VTEwgZGlzcGxheS4KCiAgICAgICAgKiBpbmZvL2Rpc3BsYXkuYyAoc3RyaW5nX3dpZHRoKTogTmV3IGZ1bmN0aW9ucyByZXR1cm5zIHRoZSB3aWR0aCBvZgogICAgICAgIFNUUklORyB3aGVuIHByaW50ZWQgYXQgSFBPUy4KClN1biBOb3YgMjkgMDE6MjQ6NDIgMTk5MiAgQnJpYW4gRm94ICAoYmZveEBjdWJpdCkKCiAgICAgICAgKiBpbmZvL2luZm8uYzogTmV3IHZlcnNpb24gMi40IGJldGEuCgogICAgICAgICogaW5mby9nZW5lcmFsLmg6ICNkZWZpbmUgaW5mb190b3VwcGVyIGFuZCBpbmZvX3RvbG93ZXIgd2hpY2ggY2hlY2sKICAgICAgICB0aGVpciBhcmd1bWVudHMgYmVmb3JlIHBlcmZvcm1pbmcgYW55IGNvbnZlcnNpb24uCgogICAgICAgICogaW5mby9zZWFyY2guYywgaW5mby9lY2hvX2FyZWEuYzogVXNlIGluZm9fdG91cHBlci4KClNhdCBOb3YgMjggMTQ6MjM6MjQgMTk5MiAgQnJpYW4gRm94ICAoYmZveEBjdWJpdCkKCiAgICAgICAgKiBpbmZvL3Nlc3Npb24uYyAoaW5mb19zY3JvbGxfZm9yd2FyZCwgaW5mb19zY3JvbGxfYmFja3dhcmQpIElmIGF0CiAgICAgICAgbGFzdC9maXJzdCBwYWdlIG9mIHRoZSBub2RlLCBhbmQgdGhlIGxhc3QgY29tbWFuZCB3YXMKICAgICAgICBmb3J3YXJkL2JhY2t3YXJkLCBkbyBpbmZvX25leHQvcHJldi9fbm9kZS4KCiAgICAgICAgKiBpbmZvL3Nlc3Npb24uYzogTmV3IGZ1bmN0aW9uIGluZm9fc2VsZWN0X3JlZmVyZW5jZV90aGlzX2xpbmUgZ2V0cwogICAgICAgIG1lbnUgb3IgY3Jvc3MgcmVmZXJlbmNlIGltbWVkaWF0ZWx5LgoKICAgICAgICAqIGluZm8vaW5mb21hcC5jIChpbml0aWFsaXplX2luZm9fa2V5bWFwcyk6IEFkZCBpbmZvX2tleW1hcFtMRkRdIHRvCiAgICAgICAgaW52b2tlIGluZm9fc2VsZWN0X3JlZmVyZW5jZV90aGlzX2xpbmUgKCkuCgogICAgICAgICogaW5mby9zZXNzaW9uLmMgKGluZm9fbGFzdF9yZWZlcmVuY2UpIFJlbmFtZSB0bwogICAgICAgIGluZm9faGlzdG9yeV9yZWZlcmVuY2UuICBXcm90ZSBpbmZvX2xhc3RfcmVmZXJlbmNlLCBhbmQKICAgICAgICBpbmZvX2ZpcnN0X3JlZmVyZW5jZSB3aGljaCBnbyB0byB0aGUgbGFzdCBvciBmaXJzdCBub2RlIG9mIGFuIGluZm8KICAgICAgICBmaWxlLgoKRnJpIE5vdiAyNyAwMDo1OTowMiAxOTkyICBCcmlhbiBGb3ggIChiZm94QGN1Yml0KQoKICAgICAgICAqIGluZm8vaW5mby5jOiBOZXcgdmVyc2lvbiAyLjMuICBDb21wbGV0ZWQgaW1wbGVtZW50aW5nIGNvbnRlbnRzIG9mCiAgICAgICAgVE9ETyBmaWxlLgoKICAgICAgICAqIGluZm8vc2Vzc2lvbi5jIChpbmZvX3JlZHJhd19kaXNwbGF5KTogRml4IEMtbCB3aXRoIG51bWVyaWMgYXJnLgoKVGh1IE5vdiAyNiAyMDoxNDoxOCAxOTkyICBCcmlhbiBGb3ggIChiZm94QGN1Yml0KQoKICAgICAgICAqIGluZm8vbS14LmM6IE5ldyBmaWxlIGltcGxlbWVudHMgcmVhZGluZyBuYW1lZCBjb21tYW5kcyBpbiB0aGUgZWNobwogICAgICAgIGFyZWEsIGFsb25nIHdpdGggYSBuZXcgZnVuY3Rpb24gImluZm8tc2V0LXNjcmVlbi1oZWlnaHQiLgogICAgICAgIENvbXBpbGF0aW9uIG9mIHRoaXMgZmlsZSBhbmQgc29tZSBjb2RlIGluIG90aGVycyBjb250cm9sbGVkIGJ5IHRoZQogICAgICAgIE1ha2VmaWxlIHZhcmlhYmxlIE5BTUVEX0NPTU1BTkRTIChzZXQgdG8gLUROQU1FRF9DT01NQU5EUykuCgogICAgICAgICogaW5mby93aW5kb3cuYyAod2luZG93X25ld19zY3JlZW5fc2l6ZSkgUmV3cml0ZSBmcm9tIHNjcmF0Y2gsIGFsbG93aW5nCiAgICAgICAgY2xlYW4gZ3Jvd3RoIGFuZCBzaHJpbmthZ2Ugb2YgdGhlIHNjcmVlbi4gIE5ldyB2YXJpYWJsZQogICAgICAgIHdpbmRvd19kZWxldGlvbl9ub3RpZmllciBpcyBhIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiB0byBjYWxsIHdoZW4KICAgICAgICB0aGUgc2NyZWVuIGNoYW5nZXMgc2l6ZSwgYW5kIHNvbWUgd2luZG93cyBoYXZlIHRvIGdldCBkZWxldGVkLgogICAgICAgIFRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCB0aGUgd2luZG93IHRvIGJlIGRlbGV0ZWQgYXMgYW4KICAgICAgICBhcmd1bWVudCwgYW5kIGl0IHNob3VsZCBjbGVhbiB1cCBkYW5nbGluZyByZWZlcmVuY2VzIHRvIHRoYXQKICAgICAgICB3aW5kb3cuCgogICAgICAgICogaW5mby9zZXNzaW9uLmMgKGluaXRpYWxpemVfaW5mb19zZXNzaW9uKTogU2V0CiAgICAgICAgd2luZG93X2RlbGV0aW9uX2Z1bmN0aW9uIHRvIGZvcmdldF93aW5kb3dfYW5kX25vZGVzLgoKICAgICAgICAqIGluZm8vZGlzcGxheS5jIChkaXNwbGF5X3VwZGF0ZV9vbmVfd2luZG93KTogSWYgdGhlIGZpcnN0IHJvdyBvZiB0aGUKICAgICAgICB3aW5kb3cgdG8gZGlzcGxheSB3b3VsZG4ndCBhcHBlYXIgaW4gdGhlX3NjcmVlbiwgZG9uJ3QgdHJ5IHRvCiAgICAgICAgZGlzcGxheSBpdC4gIFRoaXMgaGFwcGVucyB3aGVuIHRoZSBzY3JlZW4gaGFzIGJlZW4gbWFkZQogICAgICAgIHVucmVhc29uYWJseSBzbWFsbCwgYW5kIHdlIGF0dGVtcHQgdG8gZGlzcGxheSB0aGUgZWNobyBhcmVhLgoKVHVlIE5vdiAyNCAwMDo0NzoyMCAxOTkyICBCcmlhbiBGb3ggIChiZm94QGN1Yml0KQoKICAgICAgICAqIFJlbGVhc2UgSW5mbyAyLjIuCgogICAgICAgICogaW5mby9zZXNzaW9uLmM6IE5ldyBmdW5jdGlvbnMgaW1wbGVtZW50IHJlYWRpbmcgdHlwZWFoZWFkIGFuZAogICAgICAgIGltcGxlbWVudCBDLWcgZmx1c2hpbmcgdHlwZWQgYWhlYWQgY2hhcmFjdGVycy4KICAgICAgICAoaW5mb19zZWFyY2hfaW50ZXJuYWwpOiBhbGxvd3MgQy1nIHRvIGV4aXQgbXVsdGktZmlsZSBzZWFyY2hlcy4KCk1vbiBOb3YgMjMgMDE6NTM6MzUgMTk5MiAgQnJpYW4gRm94ICAoYmZveEBjdWJpdCkKCiAgICAgICAgKiBpbmZvL25vZGVzLmM6IFJlbW92ZSBjYWxscyB0byBzc2NhbmYgKCksIHJlcGxhY2luZyB0aGVtIHdpdGggY2FsbHMgdG8KICAgICAgICBhdG9sICgpLCBzaW5jZSB0aGF0IGlzIG11Y2ggZmFzdGVyLgogICAgICAgIChnZXRfbm9kZXNfb2ZfdGFnc190YWJsZSkgT25seSBjaGVjayBmb3IgIihJbmRpcmVjdCkiIGlmIHdlCiAgICAgICAgaGF2ZW4ndCBwYXJzZWQgYW55IG5vZGVzIG91dCBvZiB0aGUgdGFncyB0YWJsZS4gIEluY3JlYXNlIHRoZQogICAgICAgIGFtb3VudCB0aGF0IGZpbGVfYnVmZmVyLT5ub2RlcyBncm93cyB0byAxMDAgZnJvbSA1MC4gIFRoZXNlIHR3bwogICAgICAgIHRvZ2V0aGVyIHN1ZmZpY2llbnRseSBzcGVlZCB1cCB0aGUgcGFyc2luZyBwcm9jZXNzLgoKICAgICAgICAqIGluZm8vbm9kZXMuYzogaW5mb19nZXRfbm9kZV9vZl9maWxlX2J1ZmZlcl90YWdzICgpLAogICAgICAgIGluZm9fZ2V0X25vZGVfb2ZfZmlsZV9idWZmZXJfbm9kZXMgKCk6IFNlYXJjaCB0aGUgYXBwcm9wcmlhdGUgbGlzdAogICAgICAgIGFuZCByZXR1cm4gYSBub2RlLiAgVGhpcyB3YXMgc2ltcGx5IGEgY3V0IGFuZCBwYXN0ZSBlZGl0IHRvCiAgICAgICAgZnVuY3Rpb25hbGl6ZSB0aGUgY29kZS4KCiAgICAgICAgKiBpbmZvL1RPRE86IFJlbW92ZSBzdWdnZXN0aW9uIGZvciBwYXJ0aWFsIHRhZyBwYXJzaW5nLCBzaW5jZSB0YWcKICAgICAgICBwYXJzaW5nIGlzIG11Y2ggZmFzdGVyIG5vdy4KClNhdCBOb3YgMjEgMDI6NDg6MjMgMTk5MiAgQnJpYW4gRm94ICAoYmZveEBjdWJpdCkKCiAgICAgICAgKiBpbmZvL21ha2Vkb2MuYzogTmV3IEZpbGUgcmVwbGFjZXMgbWFrZWRvYy5zaCBzaGVsbCBzY3JpcHQuCgogICAgICAgICogaW5mby9pbmZvbWFwLmM6IEluc3RhbGwgaW5mb19pc2VhcmNoIChvbiBDLXMpIGFuZAogICAgICAgIGluZm9fcmV2ZXJzZV9pc2VhcmNoIChvbiBDLXIpIGZvciBJbmZvIHdpbmRvd3MuCgogICAgICAgICogaW5mby9zZXNzaW9uLmMgKGluY3JlbWVudGFsX3NlYXJjaCwgaW5mb19pc2VhcmNoLAogICAgICAgIGluZm9fcmV2ZXJzZV9pc2VhcmNoKSBOZXcgZnVuY3Rpb25zIGltcGxlbWVudCBpbmNyZW1lbnRhbAogICAgICAgIHNlYXJjaGluZy4KCkZyaSBOb3YgMjAgMDA6MDE6MzUgMTk5MiAgQnJpYW4gRm94ICAoYmZveEBjdWJpdCkKCiAgICAgICAgKiBpbmZvL3Rlcm1pbmFsLmMgKHRlcm1pbmFsX2luaXRpYWxpemVfdGVybWluYWwpOiBEZWNsYXJlIGFuZCBzZXQgdXAKICAgICAgICBgb3NwZWVkJy4gIFR1cm4gb2ZmIEMtcyBhbmQgQy1xIHByb2Nlc3NpbmcuCgogICAgICAgICogaW5mby9zZXNzaW9uLmMgKGluZm9fc2hvd19wb2ludCkgV2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCwgdGhlCiAgICAgICAgZGVzaXJlZCByZXN1bHQgaXMgdG8gc2hvdyB0aGUgcG9pbnQgaW1tZWRpYXRlbHkuICBTbyBub3cgaXQgY2FsbHMKICAgICAgICBzZXRfd2luZG93X3BhZ2V0b3AgKCkgaWYgdGhlIG5ldyBwYWdldG9wIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGUKICAgICAgICBvbGQgb25lLiAgVGhpcyBtZWFucyB0aGF0IGluZm9fcHJldl9saW5lICgpLCBpbmZvX25leHRfbGluZSAoKSwKICAgICAgICBpbmZvX2ZvcndhcmRfd29yZCAoKSwgYW5kIGluZm9fYmFja3dhcmRfd29yZCAoKSBjYW4gYWxsIHNjcm9sbCB0aGUKICAgICAgICB3aW5kb3cgaWYgdGhleSBoYXZlIHRvLgoKVGh1IE5vdiAxOSAxMjoyNzowNyAxOTkyICBCcmlhbiBGb3ggIChiZm94QGN1Yml0KQoKICAgICAgICAqIGluZm8vc2Vzc2lvbi5jIChzZXRfd2luZG93X3BhZ2V0b3ApOiBBZGQgc2Nyb2xsaW5nIHRvIG1ha2UgdGhpcwogICAgICAgIGZhc3Rlci4KCiAgICAgICAgKiBpbmZvL2VjaG9fYXJlYS5jIChwdXNoL3BvcF9lY2hvX2FyZWEpOiBSZW1lbWJlciB0aGUgbGlzdCBvZiBpdGVtcyB0bwogICAgICAgIGNvbXBsZXRlIG92ZXIuCgogICAgICAgICogaW5mby9zZXNzaW9uLmMgKGluZm9fZm9yd2FyZF9jaGFyKTogRG9uJ3QgbGV0IHBvaW50IGdldCBlcXVhbCB0bwogICAgICAgIG5vZGVsZW4sIG9ubHkgdG8gbm9kZWxlbiAtIDEuCgogICAgICAgICogaW5mby9kaXNwbGF5LmM6IE5ldyBmdW5jdGlvbiBkaXNwbGF5X3Njcm9sbF9kaXNwbGF5ICgpIHNjcm9sbHMgdGhlCiAgICAgICAgcm1lbWJlcmVkIGRpc3BsYXkgYXMgd2VsbCBhcyB0aGUgdGV4dCBvbiB0aGUgYWN0dWFsIGRpc3BsYXkuCgogICAgICAgICogaW5mby90ZXJtaW5hbC5jOiBOZXcgZnVuY3Rpb25zIHRlcm1pbmFsX3Njcm9sbF90ZXJtaW5hbCAoKSwKICAgICAgICB0ZXJtaW5hbF9zY3JvbGxfZG93biAoKSwgYW5kIHRlcm1pbmFsX3Njcm9sbF91cCAoKS4gIEFsbAogICAgICAgIGltcGxlbWVudGVkIHVzaW5nICJhbCIgYW5kICJkbCIgdGVybWNhcCBjYXBhYmlsaXRpZXMuIChpLmUuLAogICAgICAgIGluc2VydCBhbmQgZGVsZXRlIGxpbmUpLgoKV2VkIE5vdiAxOCAxNTowNToxNCAxOTkyICBCcmlhbiBGb3ggIChiZm94QGN1Yml0KQoKICAgICAgICAqIGluZm8vdGVybWRlcC5oOiBPbmx5IGRlZmluZSBIQVZFX0ZDTlRMX0ggaWYgIWFpeCBhbmQgIXVsdHJpeC4KClR1ZSBOb3YgMTcgMjA6MzU6MDggMTk5MiAgQnJpYW4gRm94ICAoYmZveEBjdWJpdCkKCiAgICAgICAgKiBGaXJzdCBCZXRhIFJlbGVhc2Ugb2YgSW5mbyAyLjAuCgpTdW4gTm92ICAxIDAyOjIxOjA1IDE5OTIgIE5vYWggRnJpZWRtYW4gIChmcmllZG1hbkBwcmVwLmFpLm1pdC5lZHUpCgogICAgICAgICogdXRpbC90ZXhpMmR2aSAoLS1mb3JjZSk6IE9wdGlvbiByZW1vdmVkLiAgQWx3YXlzIHJ1biB0ZXggYXQgbGVhc3QKICAgICAgICBvbmNlLCBkb24ndCBib3RoZXIgY2hlY2tpbmcgaWYgLmR2aSBmaWxlIGlzIG5ld2VyIHRoYW4gc291cmNlLgoKRnJpIE9jdCAzMCAwMjoxNjoyOCAxOTkyICBOb2FoIEZyaWVkbWFuICAoZnJpZWRtYW5AcHJlcC5haS5taXQuZWR1KQoKICAgICAgICAqIHV0aWwvdGV4aTJkdmkgKC1EKTogZGVidWdnaW5nIG9wdGlvbiByZW5hbWVkIGZyb20gJy1kJy4KICAgICAgICBNYWRlIGNoZWNrIHRvIGVuYWJsZSBkZWJ1Z2dpbmcgbW9yZSB0ZXJzZS4KICAgICAgICBXaGVuIGNoZWNraW5nIGlmIGluZGV4IGZpbGVzIGhhdmUgY2hhbmdlZCwgdXNlCiAgICAgICAgdmFyaWFibGUgJHRoaXNfZmlsZSBpbnN0ZWFkIG9mICRmaWxlIGluIGZvciBsb29wLgogICAgICAgIChmaWxlX3RleGkpOiB3aGVyZXZlciB0aGUgdmFyaWFibGUgJGZpbGUgd2FzIHVzZWQgdG8gcmVmZXJlbmNlCiAgICAgICAgdGhlIHRleGluZm8gZmlsZSwgc3Vic3RpdHV0ZWQgJGZpbGVfdGV4aS4KClNhdCBPY3QgMTcgMDc6MzA6MzQgMTk5MiAgQnJpYW4gSi4gRm94ICAoYmZveEBoZWxpb3MpCgogICAgICAgICogdXRpbC90ZXhpbmRleC5jOiBSZW1vdmUgcmVmZXJlbmNlcyB0byBVU0cgcmVwbGFjaW5nIHRoZW0gd2l0aCBhCiAgICAgICAgZGVmaW5lIGRlY2xhcmluZyB0aGUgYWN0dWFsIGZlYXR1cmUgcmVxdWlyZWQgb3IgbWlzc2luZy4KClRodSBPY3QgMTUgMTY6MTc6NDcgMTk5MiAgUm9iZXJ0IEouIENoYXNzZWxsICAoYm9iQG51dHJpbWF0LmdudS5haS5taXQuZWR1KQoKICAgICAgICAqIGVtYWNzL3RleGluZm10LmVsICh0ZXhpbmZvLWZvcm1hdC1zZXRmaWxlbmFtZSk6IFJlbW92ZSBkYXRlIGZyb20KICAgICAgICBJbmZvIGZpbGUgaGVhZGVyIHNvIHJlZ3Jlc3Npb24gdGVzdGluZyBpcyBlYXNpZXIuCgpUdWUgU2VwIDE1IDE2OjI4OjM1IDE5OTIgIFJvYmVydCBKLiBDaGFzc2VsbCAgKGJvYiBhdCBncmFja2xlKQoKICAgICAgICAqIGVtYWNzL3RleGluZm10LmVsICh0ZXhpbmZtdC12ZXJzaW9uKTogTmV3IHZhcmlhYmxlLgogICAgICAgICh0ZXhpbmZvLWZvcm1hdC1zZXRmaWxlbmFtZSk6IEluY2x1ZGUgZGF0ZSBhbmQKICAgICAgICB2ZXJzaW9uIGluIEluZm8gZmlsZSBoZWFkZXIuCiAgICAgICAgQmV0dGVyIGRvY3VtZW50YXRpb24gZm9yIEBkZWZpbmZvZW5jbG9zZQogICAgICAgIEhhbmRsZSB3aGl0ZXNwYWNlIGFmdGVyIEBlbmQgaWZ0ZXgsIGV0Yy4KClRodSBTZXAgIDMgMDk6MjU6MzcgMTk5MiAgUm9iZXJ0IEouIENoYXNzZWxsICAoYm9iIGF0IGdyYWNrbGUpCgogICAgICAgICogZW1hY3MvdGV4bmZvLXVwZC5lbDogRml4IHR5cG8gcmUgYHRleGluZm8tc2VxdWVudGlhbC1ub2RlLXVwZGF0ZS4nCgpUdWUgQXVnIDE4IDA4OjU2OjI0IDE5OTIgIFJvYmVydCBKLiBDaGFzc2VsbCAgKGJvYiBhdCBncmFja2xlKQoKICAgICAgICAqIGVtYWNzL3RleGluZm10LmVsICh0ZXhpbmZvLXZhbHVlKTogUmV2aXNlIHN5bnRheC4KCiAgICAgICAgKiBlbWFjcy90ZXhuZm8tdXBkLmVsICh0ZXhpbmZvLXN0YXJ0LW1lbnUtZGVzY3JpcHRpb24pOgogICAgICAgIE5ldyBmdW5jdGlvbiB0byBpbnNlcnQgdGl0bGUgYXMgZGVzY3JpcHRpb24gaW4gYSBtZW51LgogICAgICAgICh0ZXhpbmZvLW1ha2UtbWVudS1saXN0KTogUmVtb3ZlIGF1dG9tYXRpYyB0aXRsZSBpbnNlcnRpb24uCgogICAgICAgICogZW1hY3MvdGV4aW5mby5lbCAodGV4aW5mby1tb2RlLW1hcCk6IEFkZCBrZXliaW5kaW5nIGZvcgogICAgICAgIHRleGluZm8tc3RhcnQtbWVudS1kZXNjcmlwdGlvbi4KCldlZCBKdWwgMjkgMTE6NTg6NTMgMTk5MiAgUm9iZXJ0IEouIENoYXNzZWxsICAoYm9iIGF0IGdyYWNrbGUpCgogICAgICAgICogZW1hY3MvdGV4aW5mbXQuZWwgKHRleGluZm8tc2V0KTogUmV2aXNlIHRvIHNldCBhIHN0cmluZyB0byB0aGUgZmxhZy4KICAgICAgICAodGV4aW5mby12YWx1ZSk6IEB2YWx1ZXtmbGFnfTogTmV3IGNvbW1hbmQgd2hpY2ggaW5zZXJ0cyB0aGUKICAgICAgICBzdHJpbmcgdG8gd2hpY2ggdGhlIGZsYWcgaXMgc2V0LgoKVHVlIEp1bCAgNyAxNToxMDo1MiAxOTkyICBSb2JlcnQgSi4gQ2hhc3NlbGwgIChib2IgYXQgZ3JhY2tsZSkKCiAgICAgICAgKiBlbWFjcy90ZXhuZm8tdXBkLmVsICh0ZXhpbmZvLW1hc3Rlci1tZW51KTogRXJyb3IgbWVzc2FnZSBpZiBmaWxlCiAgICAgICAgY29udGFpbnMgdG9vIGZldyBub2RlcyBmb3IgYSBtYXN0ZXIgbWVudS4KICAgICAgICAodGV4aW5mby1pbnNlcnQtbWFzdGVyLW1lbnUtbGlzdCk6IE9ubHkgYXR0ZW1wdCB0byBpbnNlcnQgZGV0YWlsZWQKICAgICAgICBtYXN0ZXIgbWVudSBpZiB0aGVyZSBpcyBvbmUuCgpXZWQgSnVuIDEwIDE1OjI2OjE4IDE5OTIgIFJvYmVydCBKLiBDaGFzc2VsbCAgKGJvYiBhdCBncmFja2xlKQoKICAgICAgICAqIGVtYWNzL3RleGluZm10LmVsICh0ZXhpbmZvLWFwcGVuZC1yZWZpbGwpOiBSZWZpbGwgcHJvcGVybHkgd2hlbiBsaW5lcwogICAgICAgIGJlZ2luIHdpdGggd2l0aGluLXBhcmFncmFwaCBALWNvbW1hbmRzLgoKVHVlIEp1biAgOSAxMjoyODoxMSAxOTkyICBSb2JlcnQgSi4gQ2hhc3NlbGwgIChib2IgYXQgZ3JhY2tsZSkKCiAgICAgICAgKiBlbWFjcy90ZXhpbmZtdC5lbDogQWRkIGB0ZXhpbmZvLWRlZmZuLWZvcm1hdHRpbmctcHJvcGVydHknIGFuZAogICAgICAgIGB0ZXhpbmZvLWRlZnVuLWluZGV4aW5nLXByb3BlcnR5JyB0byBAZGVmZm4gY29tbWFuZHMuCgpNb24gSnVuICA4IDExOjUyOjAxIDE5OTIgIFJvYmVydCBKLiBDaGFzc2VsbCAgKGJvYiBhdCBncmFja2xlKQoKICAgICAgICAqIGVtYWNzL3RleG5mby11cGQuZWw6IFJlcGxhY2UgYChtYXJrLXdob2xlLWJ1ZmZlciknIHdpdGgKICAgICAgICBgKHB1c2gtbWFyayAocG9pbnQtbWF4KSB0KSAoZ290by1jaGFyIChwb2ludC1taW4pKScKICAgICAgICB0byBhdm9pZCBgTWFyayBzZXQnIG1lc3NhZ2VzLgoKRnJpIEp1biAgNSAxNToxNToxNiAxOTkyICBSb2JlcnQgSi4gQ2hhc3NlbGwgIChib2JAa3JvcG90a2luLmdudS5haS5taXQuZWR1KQoKICAgICAgICAqIGVtYWNzL3RleG5mby11cGQuZWwgKHRleGluZm8tY2hlY2stZm9yLW5vZGUtbmFtZSk6IE9mZmVyIHNlY3Rpb24KICAgICAgICB0aXRsZSBhcyBwcm9tcHQuCiAgICAgICAgKHRleGluZm8tY29weS1uZXh0LXNlY3Rpb24tdGl0bGUpOiBDb3B5IHRpdGxlIGNvcnJlY3RseS4KClRodSBNYXkgMjggMjA6MzQ6MTcgMTk5MiAgUm9iZXJ0IEouIENoYXNzZWxsICAoYm9iQGhpbGwuZ251LmFpLm1pdC5lZHUpCgogICAgICAgICogZW1hY3MvdGV4aW5mbXQuZWw6IEB2dGFibGUgZGVmaW5lZCwgcGFyYWxsZWwgdG8gQGZ0YWJsZSwgZm9yCiAgICAgICAgdmFyaWFibGVzLgogICAgICAgICh0ZXhpbmZvLWFwcGVuZC1yZWZpbGwpOiBzZXQgY2FzZS1mb2xkLXNlYXJjaCBuaWwgc28gQFRlWCBpcyBub3QKICAgICAgICBjb25mdXNlZCB3aXRoIEB0ZXguCgpUaHUgTWFyIDI2IDIxOjM2OjQxIDE5OTIgIFJvYmVydCBKLiBDaGFzc2VsbCAgKGJvYkBrcm9wb3RraW4uZ251LmFpLm1pdC5lZHUpCgogICAgICAgICogZW1hY3MvbWFrZWluZm8uZWw6IFJlbmFtZSB0ZW1wIGJ1ZmZlciBmcm9tIGAqTWFrZWluZm8qJyBiYWNrIHRvCiAgICAgICAgYCpjb21waWxhdGlvbionIHNvIGBuZXh0LWVycm9yJyB3b3JrczsgdW5mb3J0dW5hdGVseSwKICAgICAgICBgKmNvbXBpbGF0aW9uKicgaXMgd3JpdHRlbiBpbnRvIHRoZSBjb2RlIGFzIHRoZSBuYW1lCiAgICAgICAgYG5leHQtZXJyb3InIG5lZWRzLgogICAgICAgIFJlbmFtZSBgbWFrZWluZm8tcmVjZW50ZXItbWFrZWluZm8tYnVmZmVyJyBiYWNrIHRvCiAgICAgICAgYG1ha2VpbmZvLXJlY2VudGVyLW1ha2VpbmZvLWJ1ZmZlcicKClRodSBNYXkgMTQgMjE6MTQ6MjUgMTk5MiAgTm9haCBGcmllZG1hbiAgKGZyaWVkbWFuQHByZXAuYWkubWl0LmVkdSkKCiAgICAgICAgKiB1dGlsL2ZpeGZvbnRzOiBFbmNsb3NlZCBtb3N0IHZhcmlhYmxlIHJlZmVyZW5jZXMgd2l0aCAiIiB0byBwcmV2ZW50CiAgICAgICAgcG90ZW50aWFsIGdsb2JiaW5nIGFuZCBvdGhlciB3ZWlyZG5lc3MuICBFbGltaW5hdGVkIHVzZXMgb2YKICAgICAgICAke3Zhci12YWx1ZX0sIHdoaWNoIHVuZm9ydHVuYXRlbHkgaXNuJ3QgcG9ydGFibGUuCgogICAgICAgICogdXRpbC90ZXhpMmR2aTogcmV3cml0dGVuIGZyb20gc2NyYXRjaC4KClNhdCBBcHIgMTggMjM6NDY6MjUgMTk5MiAgQ2hhcmxlcyBIYW5udW0gIChteWNyb2Z0QGhhbC5nbnUuYWkubWl0LmVkdSkKCiAgICAgICAgKiB1dGlsL2ZpeGZvbnRzOiBSZS1ldmFsdWF0ZSBwcmVmaXggYW5kIGxpYmRpciBpZiBpbmhlcml0ZWQgKHRvIHJlc29sdmUKICAgICAgICB2YXJpYWJsZSByZWZlcmVuY2VzIGZyb20gbWFrZSkuCiAgICAgICAgKHRleGxpYmRpcik6IERvbid0IGFkZCAnL3RleCcsIHNpbmNlIGl0J3MgYWxyZWFkeSB0aGVyZS4KCkZyaSBBcHIgMTAgMTQ6NTE6MjMgMTk5MiAgTm9haCBGcmllZG1hbiAgKGZyaWVkbWFuQHByZXAuYWkubWl0LmVkdSkKCiAgICAgICAgKiB1dGlsL2ZpeGZvbnRzOiBzZXQgcHJlZml4IGFuZCBsaWJkaXIgb25seSBpZiB0aGV5IGFyZSBub3QgYWxyZWFkeQogICAgICAgIGRlZmluZWQgKGkuZS4gbm90IGluaGVyaXRlZCBmcm9tIHRoZSBlbnZpcm9ubWVudCkuCiAgICAgICAgQ2hhbmdlZCBkZWZhdWx0IHBhdGggZm9yIGxpYmRpciB0byBiZSBjb25zaXN0ZW50IHdpdGggTWFrZWZpbGUuCgpUdWUgTWFyICAzIDEzOjE3OjQyIDE5OTIgIFJvYmVydCBKLiBDaGFzc2VsbCAgKGJvYiBhdCBncmFja2xlKQoKICAgICAgICAqIGVtYWNzL3RleG5mby11cGQuZWwgKHRleGluZm8taW5zZXJ0LW1hc3Rlci1tZW51LWxpc3QpOiBJbnNlcnQgYQogICAgICAgIG1hc3RlciBtZW51IG9ubHkgYWZ0ZXIgYFRvcCcgbm9kZSBhbmQgYmVmb3JlIG5leHQgbm9kZS4KICAgICAgICAodGV4aW5mby1jb3B5LW1lbnUpOiBFcnJvciBtZXNzYWdlIGlmIG1lbnUgZW1wdHkuCgpNb24gRmViIDI0IDE1OjQ3OjQ5IDE5OTIgIFJvYmVydCBKLiBDaGFzc2VsbCAgKGJvYiBhdCBncmFja2xlKQoKICAgICAgICAqIGVtYWNzL3RleGluZm10LmVsICh0ZXhpbmZvLWZvcm1hdC1yZWdpb24pOiBNYWtlIHN1cmUgcmVnaW9uIGVuZHMgaW4gYQogICAgICAgIG5ld2xpbmUuCiAgICAgICAgKHRleGluZm8taXRlbWl6ZS1pdGVtKTogUmVjb2duaXplIGFsbCBub24td2hpdGVzcGFjZSBvbiBzYW1lIGxpbmUKICAgICAgICBhcyBAaXRlbSBjb21tYW5kLgoKU2F0IEZlYiAyMiAwMjoxNTowMCAxOTkyICBCcmlhbiBGb3ggIChiZm94IGF0IGdudXdlc3QuZnNmLm9yZykKCiAgICAgICAgKiB1dGlsL3RleGluZGV4LmM6IE5ldyB2ZXJzaW9uIDEuNDUgaGFzIGNsZWFudXBzLCBzaG91bGQgY29tcGlsZSB1bmRlcgogICAgICAgIFZNUyBxdWlldGx5LgoKV2VkIEZlYiAxMiAxMDo1MDo1MSAxOTkyICBSb2JlcnQgSi4gQ2hhc3NlbGwgIChib2IgYXQgZ3JhY2tsZSkKCiAgICAgICAgKiBlbWFjcy9tYWtlaW5mby5lbDogUmVuYW1lIHRlbXAgYnVmZmVyIGFzICpNYWtlaW5mbyouCiAgICAgICAgUmVuYW1lIGBtYWtlaW5mby1yZWNlbnRlci1jb21waWxhdGlvbi1idWZmZXInLgogICAgICAgIChtYWtlaW5mby1idWZmZXIpOiBPZmZlciB0byBzYXZlIGJ1ZmZlciBpZiBpdCBpcyBtb2RpZmllZC4KICAgICAgICAobWFrZWluZm8tY29tcGlsZSk6IERvIG5vdCBvZmZlciB0byBzYXZlIG90aGVyIGJ1ZmZlcnMuCiAgICAgICAgKG1ha2VpbmZvLWNvbXBpbGF0aW9uLXNlbnRpbmVsKTogU3dpdGNoIHRvIEluZm8gZmlsZS4KClR1ZSBGZWIgIDQgMTM6MDc6MzkgMTk5MiAgUm9iZXJ0IEouIENoYXNzZWxsICAoYm9iIGF0IGdyYWNrbGUpCgogICAgICAgICogZW1hY3MvdGV4aW5mbXQuZWwgKHRleGluZm8tcHJpbnQtaW5kZXgpOiBGb3JtYXQgc28gdGhhdCBub2RlIG5hbWVzIGluCiAgICAgICAgdGhlIGluZGV4IGFyZSBsaW5lZCB1cC4KCk1vbiBGZWIgIDMgMDk6MDg6MTQgMTk5MiAgUm9iZXJ0IEouIENoYXNzZWxsICAoYm9iIGF0IGdyYWNrbGUpCgogICAgICAgICogZW1hY3MvdGV4aW5mbXQuZWwgKHRleGluZm8taXRlbWl6ZS1pdGVtKTogRm9ybWF0IGVudHJ5IHdoZW4gdGV4dAogICAgICAgIGlzIG9uIHRoZSBzYW1lIGxpbmUgYXMgQGl0ZW0gY29tbWFuZC4gIEFsc28sIGhhbmRsZSBALWNvbW1hbmRzLgogICAgICAgICh0ZXhpbmZvLWZvcm1hdC1yZWdpb24sIHRleGluZm8tZm9ybWF0LWJ1ZmZlci0xKTogU2V0IGZpbGwgY29sdW1uCiAgICAgICAgdG8gbG9jYWwgdmFsdWUgb2YgVGV4aW5mbyBidWZmZXIuCgogICAgICAgICogZW1hY3MvdGV4bmZvLXVwZC5lbCAodGV4aW5mby1wb2ludGVyLW5hbWUpOiAgRmluZCBvbmx5IHRob3NlCiAgICAgICAgc2VjdGlvbiBjb21tYW5kcyB0aGF0IGFyZSBhY2NvbXBhbmllZCBieSBgQG5vZGUnIGxpbmVzLgoKVHVlIEphbiAxNCAxNjoxMDoxNiAxOTkyICBSb2JlcnQgSi4gQ2hhc3NlbGwgIChib2IgYXQgZ3JhY2tsZSkKCiAgICAgICAgKiBlbWFjcy90ZXhuZm8tdXBkLmVsOiBFbnN1cmUgdGhhdCBubyBjb21tYW5kcyBkZXBlbmQgb24gdGhlIHZhbHVlIG9mCiAgICAgICAgY2FzZS1mb2xkLXNlYXJjaC4KCkZyaSBKYW4gMTAgMTU6MTM6NTUgMTk5MiAgUm9iZXJ0IEouIENoYXNzZWxsICAoYm9iIGF0IGtyb3BvdGtpbikKCiAgICAgICAgKiBlbWFjcy90ZXhpbmZtdC5lbCAodGV4aW5mby1hcHBlbmQtcmVmaWxsKTogUmVwbGFjZSB1c2Ugb2YKICAgICAgICB1bnN1cHBvcnRlZCBmdW5jdGlvbiBgbG9va2luZy1hdC1iYWNrd2FyZCcgd2l0aAogICAgICAgIGByZS1zZWFyY2gtYmFja3dhcmQnLgoKTW9uIERlYyAyMyAyMzo0Njo0MiAxOTkxICBEYXZpZCBKLiBNYWNLZW56aWUgIChkam0gYXQgd29va3Vtei5nbnUuYWkubWl0LmVkdSkKCiAgICAgICAgKiB1dGlsL3RleGluZGV4LmM6IENoYW5nZSBQT1NJWCBpZmRlZnMgdG8gSEFWRV9VTklTVERfSCBhbmQKICAgICAgICBfUE9TSVhfVkVSU0lPTi4KCk1vbiBEZWMgMTYgMTU6MDE6MzYgMTk5MSAgUm9iZXJ0IEouIENoYXNzZWxsICAoYm9iIGF0IGdyYWNrbGUpCgogICAgICAgICogZW1hY3MvdGV4aW5mbXQuZWwgKHRleGluZm8tYXBwZW5kLXJlZmlsbCk6IE5ldyBmdW5jdGlvbiBhcHBlbmRzCiAgICAgICAgQHJlZmlsbCB0byBhbGwgYXBwcm9wcmlhdGUgcGFyYWdyYXBocyBzbyB5b3Ugbm8gbG9uZ2VyIG5lZWQgdG8KICAgICAgICBhcHBlbmQgQHJlZmlsbCBjb21tYW5kIHlvdXJzZWxmLgogICAgICAgICh0ZXhpbmZvLWZvcm1hdC1yZWdpb24sIHRleGluZm8tZm9ybWF0LWJ1ZmZlci0xLAogICAgICAgIHRleGluZm8tZm9ybWF0LWluY2x1ZGUpOiBDYWxsIGB0ZXhpbmZvLWFwcGVuZC1yZWZpbGwnLgoKRnJpIERlYyAgNiAwMToyNTowOSAxOTkxICBEYXZpZCBKLiBNYWNLZW56aWUgIChkam0gYXQgd29va3Vtei5nbnUuYWkubWl0LmVkdSkKCiAgICAgICAgKiB1dGlsL3RleGluZGV4LmM6IENvbmRpdGlvbmFsaXplIG9uIF9BSVggKHdoaWNoIGlzIHByZWRlZmluZWQpIGluc3RlYWQKICAgICAgICBvZiBBSVgsIGp1c3QgbGlrZSBtYWtlaW5mbyBkb2VzLgoKVHVlIE5vdiAyNiAxMDoyMTowNCAxOTkxICBSb2JlcnQgSi4gQ2hhc3NlbGwgIChib2IgYXQgZ3JhY2tsZSkKCiAgICAgICAgKiBlbWFjcy90ZXhuZm8tdXBkLmVsICh0ZXhpbmZvLXNlY3Rpb24tdHlwZXMtcmVnZXhwKTogYEBzdWJ0aXRsZScgbm8KICAgICAgICBsb25nZXIgdHJlYXRlZCBhcyBzdWJzZWN0aW9uLgoKU2F0IE5vdiAxNiAwODoyNzo0MiAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCgogICAgICAgICogdXRpbC9maXhmb250czogTmV3IGZpbGUsIGZyb20gS2FybCBCZXJyeS4KClR1ZSBOb3YgMTIgMTY6MTM6MjQgMTk5MSAgUm9iZXJ0IEouIENoYXNzZWxsICAoYm9iIGF0IGdyYWNrbGUpCgogICAgICAgICogZW1hY3MvdGV4aW5mbXQuZWw6IENyZWF0ZSBAZW5kIHNtYWxsbGlzcC4KCk1vbiBOb3YgMTEgMTY6NTA6MTMgMTk5MSAgUm9iZXJ0IEouIENoYXNzZWxsICAoYm9iIGF0IGdyYWNrbGUpCgogICAgICAgICogZW1hY3MvdGV4aW5mby5lbCAodGV4aW5mby1lbnZpcm9ubWVudC1yZWdleHApOiBBZGQgYWxsIG90aGVyIGJsb2NrCiAgICAgICAgZW5jbG9zaW5nIFRleGluZm8gY29tbWFuZHMuCgpUaHUgTm92ICA3IDEwOjIzOjUxIDE5OTEgIFJvYmVydCBKLiBDaGFzc2VsbCAgKGJvYiBhdCBncmFja2xlKQoKICAgICAgICAqIGVtYWNzL3RleGluZm8uZWwgKHRleGluZm8taW5zZXJ0LUBlbmQpOiBBdHRlbXB0IHRvIGluc2VydCBjb3JyZWN0IGVuZAogICAgICAgIGNvbW1hbmQgc3RhdGVtZW50LCBlZywgQGVuZCB0YWJsZS4gIEZhaWxzIHdpdGggbmVzdGVkIGxpc3RzLgogICAgICAgICAodGV4aW5mby1pbnNlcnQtKik6IEFjY2VwdCBwcmVmaXggYXJnIHRvIHN1cnJvdW5kIGZvbGxvd2luZyBOCiAgICAgICAgIHdvcmRzIHdpdGggYnJhY2VzIGZvciBjb21tYW5kLgoKVGh1IE9jdCAzMSAyMTozMTo0MSAxOTkxICBSb2JlcnQgSi4gQ2hhc3NlbGwgIChib2IgYXQga3JvcG90a2kpCgogICAgICAgICogZW1hY3MvdGV4aW5mbXQuZWwgKHRleGluZm8tY2xlYXIpOiBDbGVhciBmbGFnIGV2ZW4gaWYgZmxhZyBub3QKICAgICAgICBwcmV2aW91c2x5IHNldC4KCldlZCBPY3QgMjMgMTE6MTU6NTggMTk5MSAgUm9iZXJ0IEouIENoYXNzZWxsICAoYm9iIGF0IGdyYWNrbGUpCgogICAgICAgICogZW1hY3MvdGV4aW5mby5lbCAodGV4aW5mby1tb2RlKTogcGFnZS1kZWxpbWl0ZXIgbm93IGZpbmRzIHRvcCBub2RlIGFzCiAgICAgICAgd2VsbCBhcyBjaGFwdGVycy4KClR1ZSBPY3QgMjIgMTE6NDY6MTIgMTk5MSAgUm9iZXJ0IEouIENoYXNzZWxsICAoYm9iIGF0IGdyYWNrbGUpCgogICAgICAgICogZW1hY3MvdGV4aW5mbXQuZWwgKHRleGluZm8tZG8tZmx1c2hyaWdodCk6IFRlc3Qgd2hldGhlciBhIGxpbmUgaXMgdG9vCiAgICAgICAgbG9uZyBmb3IgdGhlIGZsdXNoIHJpZ2h0IGNvbW1hbmQgKGxpbmUgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuCiAgICAgICAgdGhlIHZhbHVlIG9mIGZpbGwgY29sdW1uKS4KCiAgICAgICAgKiBlbWFjcy90ZXhuZm8tdGV4LmVsICh0ZXhpbmZvLXRleC1idWZmZXIpOiBQcm9tcHQgZm9yIG9yaWdpbmFsIGZpbGUKICAgICAgICBldmVuIGlmIHBvaW50IG1vdmVkIHRvICp0ZXhpbmZvLXRleC1zaGVsbCouCiAgICAgICAgdGV4aW5mby10ZXgtb3JpZ2luYWwtZmlsZTogdmFyaWFibGUgdG8gaG9sZCBmaWxlIG5hbWUuCgpXZWQgT2N0IDE2IDA4OjMyOjA1IDE5OTEgIFJvYmVydCBKLiBDaGFzc2VsbCAgKGJvYiBhdCBncmFja2xlKQoKICAgICAgICAqIGVtYWNzL3RleGluZm10LmVsICh0ZXhpbmZvLWZvcm1hdC1jZW50ZXIpOiBFeHBhbmQgc3RyaW5nIGJlZm9yZQogICAgICAgIGNlbnRlcmluZyBzbyBALWNvbW1hbmRzIG5vdCBpbmNsdWRlZC4KClRodSBPY3QgMTAgMjI6MDE6NDcgMTk5MSAgUm9iZXJ0IEouIENoYXNzZWxsICAoYm9iIGF0IGtyb3BvdGtpKQoKICAgICAgICAqIGVtYWNzL3RleG5mby10ZXguZWwgKHRleGluZm8tc2hvdy10ZXgtcHJpbnQtcXVldWUpOiBEbyBub3Qga2lsbCBhCiAgICAgICAgcnVubmluZyBwcm9jZXNzOyBkbyBzdGFydCBhIHByb2Nlc3Mgbm9uZSBleGlzdHMuCgpUaHUgU2VwIDI2IDIxOjU4OjQ3IDE5OTEgIFJvYmVydCBKLiBDaGFzc2VsbCAgKGJvYiBhdCBrcm9wb3RraSkKCiAgICAgICAgKiB1dGlsL3RleGkyZHZpOiBNaXNjLiBidWdzIGZpeGVkLgoKICAgICAgICAqIGVtYWNzL3RleGluZm8uZWw6IFJlbW92ZSBleHRyYW5lb3VzIHJlZmVyZW5jZXMgdG8gVGVYLgoKVGh1IFNlcCAxOSAyMDo0NToyOSAxOTkxICBSb2JlcnQgSi4gQ2hhc3NlbGwgIChib2IgYXQga3JvcG90a2kpCgogICAgICAgICogZW1hY3MvdGV4aW5mbXQuZWw6IGFkZCBAY2FydG91Y2hlIGFzIGEgbm9vcCAobWFrZXMgYm94IHdpdGggcm91bmRlZAogICAgICAgIGNvcm5lcnMgaW4gVGVYKQoKVHVlIFNlcCAxMCAyMDo0NDo1NyAxOTkxICBSb2JlcnQgSi4gQ2hhc3NlbGwgIChib2IgYXQgZ3JhY2tsZSkKCiAgICAgICAgKiBlbWFjcy90ZXhuZm8tdXBkLmVsICh0ZXhpbmZvLW1ha2Utb25lLW1lbnUpOiBDb3B5IG5vZGUtbmFtZSBjb3JyZWN0bHkKICAgICAgICBmb3IgbWVzc2FnZS4KClRodSBBdWcgMjkgMTc6NTQ6MDcgMTk5MSAgUm9iZXJ0IEouIENoYXNzZWxsICAoYm9iIGF0IGtyb3BvdGtpKQoKICAgICAgICAqIGVtYWNzL3RleG5mby10ZXguZWwgKHRleGluZm8tcXVpdC10ZXgtam9iKTogRG8gbm90IHNldCBtYXJrLgoKV2VkIEF1ZyAyMSAxMDozNjoyMSAxOTkxICBSb2JlcnQgSi4gQ2hhc3NlbGwgIChib2IgYXQgZ3JhY2tsZSkKCiAgICAgICAgICogZW1hY3MvdGV4bmZvLXVwZC5lbDogKHRleGluZm8tY29weS1tZW51LXRpdGxlKTogQ29weSB0aXRsZSBhcyBpdAogICAgICAgICBzaG91bGQgcmF0aGVyIHRoYW4gbm9kZSBsaW5lLgoKTW9uIEF1ZyAgNSAxNToyNzoxMiAxOTkxICBSb2JlcnQgSi4gQ2hhc3NlbGwgIChib2IgYXQgZ3JhY2tsZSkKCiAgICAgICAgICogZW1hY3MvdGV4aW5mbXQuZWwgKHRleGluZm8tZm9ybWF0LWNvbnZlcnQpOiBDaGFuZ2VkIHJlZ2V4cCB0aGF0CiAgICAgICAgIGxvb2tzIGZvciB0aHJlZSBoeXBoZW5zIGluIGEgcm93IHRvIGZpbmQgdGhvc2UgYmV0d2VlbiB3b3JkCiAgICAgICAgIGNvbnN0aXR1ZW50IGNoYXJhY3RlcnMsIGFzIG5vdywgZm9yIE94Zm9yZCBVbml2LiBzdHlsZSBkYXNoZXMgYW5kCiAgICAgICAgIGFsc28gYmV0d2VlbiBzcGFjZXMsIGZvciBDYW1icmlkZ2UgVW5pdi4gUHJlc3Mgc3R5bGUgZGFzaGVzLgoKICAgICAgICAqIGVtYWNzL3RleG5mby10ZXguZWwgKHRleGluZm8tdGV4LXN0YXJ0LXNoZWxsKTogUnVucyAiL2Jpbi9zaCIgc28KICAgICAgICBgZXhwbGljaXQtc2hlbGwtZmlsZS1uYW1lJyBpcyBub3Qgc2V0IGdsb2JhbGx5LgoKICAgICAgICAqIGVtYWNzL3RleG5mby11cGQuZWw6IFJld3JpdGUgbWVzc2FnZXMuCiAgICAgICAgKHRleGluZm8tZmluZC1oaWdoZXItbGV2ZWwtbm9kZSk6IFN0b3Agc2VhcmNoIGF0IGxpbWl0LgogICAgICAgICh0ZXhpbmZvLWNvcHktbWVudS10aXRsZSk6IFJld3JpdGUgdG8gaGFuZGxlIG91dGVyIGluY2x1ZGUgZmlsZXMuCiAgICAgICAgKHRleGluZm8tbXVsdGktZmlsZS11cGRhdGUpOiBVcGRhdGUgYWxsIG5vZGVzIHByb3Blcmx5OwogICAgICAgIHJld3JpdGUgZG9jIHN0cmluZyBhbmQgaW50ZXJhY3RpdmUuCgpTYXQgQXVnICAzIDEwOjQ2OjEzIDE5OTEgIFJvYmVydCBKLiBDaGFzc2VsbCAgKGJvYiBhdCBncmFja2xlKQoKICAgICAgICAqIGVtYWNzL3RleG5mby11cGQuZWwgKHRleGluZm8tYWxsLW1lbnVzLXVwZGF0ZSk6IEZpeGVkIHR5cG8gdGhhdAogICAgICAgIGNhdXNlZCB0aGUgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbWFzdGVyIG1lbnUgd2hlbiBpdCBzaG91bGRuJ3QuCgogICAgICAgICogZW1hY3MvdGV4aW5mby5lbCAodGV4aW5mby1tb2RlKTogTWFrZSBgaW5kZW50LXRhYnMtbW9kZScgYSBsb2NhbAogICAgICAgIHZhcmlhYmxlIGFuZCBzZXQgdG8gbmlsIHRvIHByZXZlbnQgVEFCcyB0cm91YmxlcyB3aXRoIFRlWC4KCldlZCBKdWwgMzEgMTE6MDc6MDggMTk5MSAgUm9iZXJ0IEouIENoYXNzZWxsICAoYm9iIGF0IGdyYWNrbGUpCgogICAgICAgICogZW1hY3MvdGV4bmZvLXRleC5lbCAodGV4aW5mby1xdWl0LXRleC1qb2IpOiBOZXcgZnVuY3Rpb246IHF1aXQKICAgICAgICBjdXJyZW50bHkgcnVubmluZyBUZVggam9iLCBieSBzZW5kaW5nIGFuIGB4JyB0byBpdC4KICAgICAgICAodGV4aW5mby10ZXgtc2hlbGwtc2VudGluZWwpOiBOZXcgZnVuY3Rpb24gdG8KICAgICAgICByZXN0YXJ0IHRleGluZm8tdGV4LXNoZWxsIGFmdGVyIGl0IGlzIGtpbGxlZC4KICAgICAgICAodGV4aW5mby1raWxsLXRleC1qb2IpOiBSZXdyaXRlIHRvIHVzZSBraWxsLXByb2Nlc3MgcmF0aGVyIHRoYW4KICAgICAgICBxdWl0LXByb2Nlc3M7IHVzZXMgYHRleGluZm8tdGV4LXNoZWxsLXNlbnRpbmVsJyB0byByZXN0YXJ0CiAgICAgICAgdGV4aW5mby10ZXgtc2hlbGwgYWZ0ZXIgaXQgaXMga2lsbGVkLgogICAgICAgICh0ZXhpbmZvLXRleC1yZWdpb24sIHRleGluZm8tdGV4LWJ1ZmZlcik6IFJlcGxhY2UKICAgICAgICB0ZXhpbmZvLWtpbGwtdGV4LWpvYiB3aXRoIHF1aXQtcHJvY2Vzcy4KCiAgICAgICAgKiBlbWFjcy90ZXhpbmZvLmVsICh0ZXhpbmZvLWRlZmluZS1jb21tb24ta2V5cyk6IEFkZCBrZXliaW5kaW5nIGZvcgogICAgICAgIHRleGluZm8tcXVpdC10ZXgtam9iCgpXZWQgSnVsIDEwIDE1OjE1OjAzIDE5OTEgIFJvYmVydCBKLiBDaGFzc2VsbCAgKGJvYiBhdCBncmFja2xlKQoKICAgICAgICAqIGVtYWNzL3RleGluZm10LmVsOiBOZXcgY29tbWFuZHMgQHNldCwgQGNsZWFyLCBAaWZzZXQuLi5AZW5kCiAgICAgICAgaWZzZXQsIGFuZCBAaWZjbGVhci4uLkBlbmQgaWZjbGVhci4KICAgICAgICBEZWZpbml0aW9uIGZ1bmN0aW9ucyByZXdyaXR0ZW4gdG8gbWFrZSB0aGVtIGVhc2llciB0bwogICAgICAgIG1haW50YWluLgoKV2VkIEp1bCAgMyAxOTozNzowNCAxOTkxICBSb2JlcnQgSi4gQ2hhc3NlbGwgIChib2IgYXQga3JvcG90a2kpCgogICAgICAgICogZW1hY3MvdGV4aW5mbXQuZWwgKHRleGluZm8tZm9ybWF0LWRlZnR5cGVmbi1pbmRleCk6IFJlbW92ZSByZWZlcmVuY2UKICAgICAgICB0byBkYXRhLXR5cGUgdG8gbWFrZSBjb25zaXN0ZW50IHdpdGggdGV4aW5mby50ZXggYW5kIG1ha2VpbmZvLgogICAgICAgIHRleGluZm8uZWw6IEZpeCBwYWdlLWRlbGltaXRlciBhbmQgdGV4aW5mby1jaGFwdGVyLWxldmVsLXJlZ2V4cAogICAgICAgIHZhcmlhYmxlcy4KClRodSBKdW4gMjcgMTg6MzU6MzYgMTk5MSAgUm9iZXJ0IEouIENoYXNzZWxsICAoYm9iIGF0IG51dHJpbWF0KQoKICAgICAgICAqIGVtYWNzL3RleGluZm10LmVsOiBBZGQgQGRtbiBhcyBgdGV4aW5mby1mb3JtYXQtbm9vcCcuCiAgICAgICAgdGV4aW5mbzIudGV4aTogRG9jdW1lbnQgQGRtbi4KICAgICAgICB0ZXhpbmZtdC5lbCAodGV4aW5mb3ssLWVuZH0te2VsZXRlcmF0ZSxlY2FwaXRhdGV9IHJlbmFtZWQKICAgICAgICB7YWxwaGFlbnVtZXJhdGUsIGNhcHNlbnVtZXJhdGV9LgoKRnJpIEp1biAxNCAxMjo0NjozMiAxOTkxICBSb2JlcnQgSi4gQ2hhc3NlbGwgIChib2IgYXQgY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCiAgICAgICAgKiBlbWFjcy90ZXhpbmZtdC5lbCAodGV4aW5mby1mb3JtYXQtZGVmdW4tMSk6IEBkZWZpdmFyIHByaW50cyBuYW1lCiAgICAgICAgY29ycmVjdGx5LgoKVGh1IEp1biAgNiAyMTozODozMyAxOTkxICBSb2JlcnQgSi4gQ2hhc3NlbGwgIChib2IgYXQgY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCiAgICAgICAgKiBlbWFjcy90ZXhpbmZvLmVsICh0ZXhpbmZvLW1vZGUpOiBTZXQgcGFnZSBkZWxpbWl0ZXIgdG8KICAgICAgICAndGV4aW5mby1jaGFwdGVyLWxldmVsLXJlZ2V4cCcgc28gdGhhdCBwYWdlIGNvbW1hbmRzIHdvcmsgYnkKICAgICAgICBjaGFwdGVyIG9yIGVxdWl2YWxlbnQuCgogICAgICAgICogZW1hY3MvdGV4aW5mbXQuZWwgKHRleGluZm8tZm9ybWF0LWRlZnVuLTEpOiBAZGVmb3AgcHJpbnRzIG5hbWUKICAgICAgICBjb3JyZWN0bHkuCiAgICAgICAgKGJhdGNoLXRleGluZm8tZm9ybWF0KTogcmVwbGFjZSB1bnN1cHBvcnRlZAogICAgICAgICdidWZmZXItZGlzYWJsZS11bmRvJyB3aXRoICdidWZmZXItZmx1c2gtdW5kbycKCkZyaSBBcHIgIDUgMTU6MTc6MTcgMTk5MSAgUm9iZXJ0IEouIENoYXNzZWxsICAoYm9iIGF0IHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCgogICAgICAgICogZW1hY3MvbWFrZWluZm8uZWwgKG1ha2VpbmZvLWNvbXBpbGF0aW9uLXNlbnRpbmVsKTogQ2hlY2sgZm9yCiAgICAgICAgZXhpc3RhbmNlIG9mIG1ha2VpbmZvLXRlbXAtZmlsZSB0byBhdm9pZCBoYXJtbGVzcyBlcnJvciBtZXNzYWdlLgogICAgICAgIHRleGluZm8yLnRleGk6IE1pbm9yIHR5cG9zIGZpeGVkLgoKVGh1IE1hciAyOCAxOToxMzoyNCAxOTkxICBSb2JlcnQgSi4gQ2hhc3NlbGwgIChib2IgYXQgcG9nby5nbnUuYWkubWl0LmVkdSkKCiAgICAgICAgKiB1dGlsL3RleGkyZHZpOiBSZXZpc2VkLgoKTW9uIE1hciAxMSAxMjozNTo1MSAxOTkxICBSb2JlcnQgSi4gQ2hhc3NlbGwgIChib2IgYXQgZ3JhY2tsZSkKCiAgICAgICAgKiBlbWFjcy90ZXhpbmZtdC5lbDogKEBmb290bm90ZXN0eWxlKTogTmV3IGNvbW1hbmQgdG8gc2V0CiAgICAgICAgZm9vdG5vdGVzdHlsZS4KICAgICAgICAoQHBhcmFncmFwaGluZGVudCk6IE5ldyBjb21tYW5kIHRvIHNldCBpbmRlbnRhdGlvbi4KICAgICAgICAodGV4aW5mby1mb3JtYXQtcmVmaWxsKTogQWRkIGluZGVudGF0aW9uIGZlYXR1cmUgc28gYXMgdG8KICAgICAgICBpbmRlbnQgcGFyYWdyYXBoIG9yIGxlYXZlIGluZGVudGF0aW9uIGFzaXMgYmVmb3JlIHJlZmlsbGluZwogICAgICAgIGFjY29yZGluZyB0byB2YWx1ZSBzZXQgYnkgQHBhcmFncmFwaGluZGVudCBjb21tYW5kLgogICAgICAgICh0ZXhpbmZvLWZvcm1hdC1yZWdpb24pOiBJbnNlcnQgaGVhZGVyLCBpZiBhbnksIGludG8gSW5mbyBidWZmZXIuCiAgICAgICAgKHRleGluZm8tZm9ybWF0LXNlcGFyYXRlLW5vZGUsIHRleGluZm8tZm9ybWF0LWVuZC1ub2RlKTogUnVuCiAgICAgICAgdGV4aW5mby1mb3JtYXQtc2NhbiBvbiBmb290bm90ZSB0ZXh0IG9ubHkgb25jZS4KICAgICAgICAodGV4aW5mby1mb3JtYXQtc2Nhbik6IFNob3J0ZW4gYC0tLScgdG8gYC0tJy4KCiAgICAgICAgKiBlbWFjcy90ZXhpbmZvLmVsOiBEZWZpbmUga2V5IGZvciBgdGV4aW5mby1tYXN0ZXItbWVudSc7IGRlZmluZQogICAgICAgIHN0YXJ0IGFuZCBlbmQgb2YgaGVhZGVyIGV4cHJlc3Npb25zLgoKICAgICAgICAqIGVtYWNzL3RleG5mby11cGQuZWwgKHRleGluZm8tYWxsLW1lbnVzLXVwZGF0ZSk6IFVwZGF0ZQogICAgICAgIHByZS1leGlzdGluZyBtYXN0ZXIgbWVudSwgaWYgdGhlcmUgaXMgb25lLgoKRnJpIE1heSAxMSAxNDozNjowNyAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCgogICAgICAgICogdXRpbC90ZXhpbmRleC5jOiBSZW5hbWUgYGxpbmVzJyB0byBgbmxpbmVzJy4KICAgICAgICAoYnplcm8pOiBQYXNzIGFyZyB0byBsaWIkbW92YzUgdGhyb3VnaCBub24tcmVnaXN0ZXIgdmFyLgogICAgICAgIChwZXJyb3Jfd2l0aF9maWxlLCBwZmF0YWxfd2l0aF9maWxlKTogTW92ZSBleHRlcm4gZGVjbHMgYW5kIGluY2x1ZGVzCiAgICAgICAgdG8gdG9wIG9mIGZpbGUuCiAgICAgICAgW1ZNU106IElmIG5vdCB1c2luZyBWTVMgQywgZGVmaW5lIGF3YXkgYG5vc2hhcmUnIGtleXdvcmQuCiAgICAgICAgSW5jbHVkZSBwZXJyb3IuaC4KCk1vbiBKdWwgMTEgMTg6MDI6MjkgMTk4OCAgQ2hyaXMgSGFuc29uICAoY3BoIGF0IGtsZXBoKQoKICAgICAgICAqIHV0aWwvdGV4aW5kZXguYyAoaW5kZXhpZnkpOiB3aGVuIGNvbXBhcmluZyB0byBpbml0aWFsIHN0cmluZ3MgdG8KICAgICAgICBkZWNpZGUgd2hldGhlciB0byBjaGFuZ2UgdGhlIGhlYWRlciwgbXVzdCB1c2UgYHN0cm5jbXAnIHRvIGF2b2lkCiAgICAgICAgY29tcGFyaW5nIGVudGlyZSBzdHJpbmdzIG9mIHdoaWNoIGluaXRpYWxzIGFyZSBhIHN1YnN0cmluZy4KClN1biBKdW4gMjYgMTg6NDY6MTYgMTk4OCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQoKICAgICAgICAqIHV0aWwvdGV4aW5kZXguYyAoc29ydF9pbl9jb3JlLCBzb3J0X29mZmxpbmUsIHBhcnNlZmlsZSk6CiAgICAgICAgR2l2ZSB1cCBvbiBpbnB1dCBmaWxlIGlmIGFueSBsaW5lIGRvZXNuJ3Qgc3RhcnQgd2l0aCBiYWNrc2xhc2guCgwKLyogY2hhbmdlbG9nIGZvciB0ZXhpbmZvLnRleCBiZWZvcmUgMTlqdW4wMS4gICovCgoyMDAxLTA1LTI0ICAgIDxrYXJsQGdudS5vcmc+CgoJKiB0ZXhpbmZvLnRleCAoXHNtYWxsYnJlYWssIFxtZWRicmVhaywgXGJpZ2JyZWFrKTogYWRkIGNoZWNrIGZvcgoJXGlmbnVtXGxhc3RwZW5hbHR5IHRvIHBsYWluIHRleCBkZWZpbml0aW9ucywgc28gdGhhdCB3ZSB3b24ndAoJaW5zZXJ0IHNwYWNlIHJpZ2h0IGFmdGVyIGEgc2VjdGlvbiB0aXRsZS4KCShcYWJvdmVlbnZicmVhayk6IHNpbWlsYXIgY2hlY2sgb2YgXGxhc3RwZW5hbHR5LgoKMjAwMS0wNS0yMSAgICA8a2FybEBnbnUub3JnPgoKCSogdGV4aW5mby50ZXggKFxwZGZ1cmwpOiBcbGV0XHZhbHVlPVxleHBhbmRhYmxldmFsdWUsIHNvIGF0IGxlYXN0Cglzb21lIGNhc2VzIGNhbiBiZSBwcm9wZXJseSBoYW5kbGVkLgoKMjAwMS0wMy0yOCAgICA8a2FybEBnbnUub3JnPgoKCSogdGV4aW5mby50ZXg6IENvcHlyaWdodC4KCgkqIHRleGluZm8udGV4IChccGRmbWtkZXN0KTogcmVtb3ZlIHRyYWlsaW5nIEAgaW4gdGFyZ2V0IG5hbWVzOwoJc3VnZ2VzdGlvbiBmcm9tOiBSZWluZXIgU2NobG90dGUgPFIuU2NobG90dGVAc2NpZW5jZS1jb21wdXRpbmcuZGU+LgoJKFxpbWFnZXh4eCk6IGNhbGwgXG5vcm1hbHR1cm5vZmZhY3RpdmUgc28gXyAoYW1vbmcgb3RoZXJzKSB3aWxsIGJlCglhbGxvd2VkIGluIGZpbGVuYW1lczsgcmVwb3J0IGZyb20gYXJub2xkQHNrZWV2ZS5jb20uCgoyMDAxLTAyLTAyICAgIDxrYXJsQGdudS5vcmc+CgoJKiB0ZXhpbmZvLnRleCAoXHNlY29uZGFyeSk6IGhhbmRsZSBwZGYgY2FzZS4KCShcZG9zdWJpbmQpOiBzZWNvbmRhcnkgaW5kZXggZW50cnkgbm90IHdyaXR0ZW4gYXMgc2VwYXJhdGUgYXJnIGZvcgoJCXRleGluZGV4LgoJRnJvbTogVHJldmluIEJlYXR0aWUgPHRyZXZpbkBleXJpbmcuY29tPgoJRGF0ZTogVHVlLCAyMSBNYXIgMjAwMCAxMzowNDowNiAtMDcwMAoKMjAwMS0wMS0xMiAgICA8a2FybEBnbnUub3JnPgoKCSogdGV4aW5mby50ZXggKFxkb3BkZmltYWdlKTogZGlmZmVyZW50IHN5bnRheCBmb3IgZmlsZW5hbWUKCWluY2x1c2lvbiAoZm9vIHZzIHtmb299KS4gIEZyb206IDxLdXJ0Lkhvcm5pa0BjaS50dXdpZW4uYWMuYXQ+LAoJMjJkZWM5OS4KCjIwMDEtMDEtMDggICAgPGthcmxAZ251Lm9yZz4KCgkqIHRleGluZm8udGV4IChcYWZpdmVwYXBlcik6IG5ldyBjb21tYW5kIGZyb20gSm9zZSBSb21pbGRvCglNYWxhcXVpYXMgPHJvbWlsZG9AdXJhbm8uaWNlYi51Zm9wLmJyPi4KCjIwMDAtMTItMTIgICAgPGthcmxAZ251Lm9yZz4KCgkqIHRleGluZm8udGV4OiBvb3BzLCBoYWQgb3V0c2lkZSBwYWdlIHJldmVyc2VkLgoKMjAwMC0xMi0xMSAgICA8a2FybEBnbnUub3JnPgoKCSogdGV4aW5mby50ZXggKFxpbm1hcmdpbik6IGFsbG93IGxlZnR0ZXh0IGFuZCByaWdodHRleHQgYXMgYXJncy4KCjIwMDAtMTEtMTAgICAgPGthcmxAZ251Lm9yZz4KCgkqIHRleGluZm8udGV4OiBpbXBsZW1lbnRhdGlvbiBvZiBuZXcgY29tbWFuZHMgQHZlcmJhdGltLCBAdmVyYiwKCWFuZCBAdmVyYmF0aW1pbmNsdWRlIGZyb20gamFubmVrZUBnbnUub3JnLgoKMjAwMC0xMS0wOSAgICA8a2FybEBnbnUub3JnPgoKCSogdGV4aW5mby50ZXggKFxpbm1hcmdpbik6IHJld3JpdGUgdG8gYWxsb3cgZm9yIHBsYWNpbmcgdGhlCgltYXRlcmlhbCBlaXRoZXIgaW4gdGhlIHJpZ2h0IG9yIGxlZnQgbWFyZ2luLgoKMjAwMC0xMC0yNyAgICA8a2FybEBnbnUub3JnPgoKCSogdGV4aW5mby50ZXggKFxkb3N5bmluZGV4KTogbmV3IG1hY3JvIHN1YnJvdXRpbmUsIGRvIG5vdAoJXGNsb3Nlb3V0IHR3aWNlIHRoZSBpbmRleCBiZWluZyByZWRpcmVjdGVkLgoJKFxzeW5pbmRleCwgXHN5bmNvZGVpbmRleCk6IGNhbGwgaXQuCgoyMDAwLTEwLTE4ICAgIDxrYXJsQGdudS5vcmc+CgoJKiB0ZXhpbmZvLnRleCAoXGlubWFyZ2luKTogcmV3cml0ZSB0byBhbGxvdyBhcmd1bWVudCB0byBiZSB2bW9kZQoJbWF0ZXJpYWwsIHN1Y2ggYXMgYSBib3ggZnJvbSBhbiBpbWFnZS4KCjIwMDAtMDktMDYgICAgPGthcmxAZ251Lm9yZz4KCgkqIHRleGluZm8udGV4IChcZG91YmxlY29sdW1ub3V0KTogbXVzdCBzdWJ0cmFjdCBcaHRccGFydGlhbHBhZ2UKCWhlcmUsIG5vdCBpbiBcYmVnaW5kb3VibGVjb2x1bW5zLiAgT3RoZXJ3aXNlIHRoZSBccGFydGlhbHBhZ2Ugb24KCXRoZSBmaXJzdCBwYWdlIG9mIGRvdWJsZSBjb2x1bW5zIGFmZmVjdHMgZXZlcnkgc3Vic2VxdWVudCBwYWdlLAoJZS5nLiwgaWYgQHNldGNoYXB0ZXJuZXdwYWdlIG9mZi4gIFJlcG9ydGVkIGJ5IEFoYXJvbiBSb2JiaW5zCgk8YXJub2xkQHNrZWV2ZS5jb20+IGZvciBzdGFuZGFyZHMudGV4aS4KCjIwMDAtMDUtMjggICAgPGthcmxAZ251Lm9yZz4KCgkqIHRleGluZm8udGV4IChcbGlua2NvbG9yKTogcmVwbGFjZSBDeWFuIHdpdGggQmx1ZS4KCShcb3V0cHV0KTogZG8gXHBkZm1rZGVzdCBhdCB0b3AuCgkoXHBkZm1ha2VvdXRsaW5lcyk6IHNldCBcXyB0byBcbm9ybWFsdW5kZXJzY29yZS4KCUZyb206IFRyZXZpbiBCZWF0dGllIDx0cmV2aW5AZXlyaW5nLmNvbT4uCgoyMDAwLTA1LTI3ICAgIDxrYXJsQGdudS5vcmc+CgoJKiB0ZXhpbmZvLnRleCAoXHRvZGF5KTogb25seSBkZWZpbmUgaWYgdW5kZWZpbmVkLgoJRnJvbTogU3RlcGFuIEthc2FsIDxrYXNhbEBzdXNlLmN6Pi4KCjIwMDAtMDUtMTYgICAgPGthcmxAZ251Lm9yZz4KCgkqIHRleGluZm8udGV4IChcZGVmdHlwZWl2YXJoZWFkZXIpOiBuZWVkIGRlZmhlYWRlcnhjb25kLiAgRnJvbToKCU1hcmNlbCB2YW4gZGVyIEJvb20gPG1hcmNlbEBoc2Rldi5jb20+LgoKMTk5OS0xMC0wMSAgS2FybCBCZXJyeSAgPGthcmxAZ251Lm9yZz4KCgkqIHRleGluZm8udGV4IChcYWZvdXJ3aWRlKTogaGFkIGhzaXplIGFuZCB2c2l6ZSByZXZlcnNlZC4KCUZyb206IFBhc2NhbCBPYnJ5IDxwYXNjYWxfb2JyeUBjc2kuY29tPgoKMTk5OS0wOS0yNSAgS2FybCBCZXJyeSAgPGthcmxAZ251Lm9yZz4KCgkqIHRleGluZm8udGV4IChcYWxpYXMpOiBmaXggZnJvbSBBbmRyZWFzLgoKMTk5OS0wOS0xOSAgS2FybCBCZXJyeSAgPGthcmxAZ251Lm9yZz4KCgkqIHRleGluZm8udGV4IChca2V5KTogcmVuYW1lIHRoZSBcc21hbGxybSBhbmQgXHNtYWxsc3kgaGVyZS4KCgkqIHRleGluZm8udGV4IChcaW5kZXhmb250cyk6IHJlbmFtZSB0byBcc21hbGxmb250cywgYWxvbmcgd2l0aAoJCVxpbmRybSwgZXRjLgoJRGVmaW5lIGFsbCB0aGUgZm9udHMsIHRvby4KCShcZm9vdG5vdGV6enopOiB1c2UgXHNtYWxsZm9udHMuCgoJKiB0ZXhpbmZvLnRleCAoXG5lZWR4KTogZ2V0IGJldHRlciBsZWFkaW5nOyBkbyBub3RoaW5nIGlmIEBuZWVkCgkgICAgICAgdmFsdWUgaXMgbGVzcyB0aGFuIG9uZSBsaW5lc3BhY2UuICBGcm9tIEFybm9sZC4KCShcZG91cmVmLCBceHJlZlgsIFxkb2VtYWlsIFtwZGZdKTogbWFrZSBzcGFjZXMgbm9ybWFsIGFnYWluLCBzbyBvdXIKCVxpZ25vcmVzcGFjZXMgY29tbWFuZHMgYXJlIGVmZmVjdGl2ZSBldmVuIGluIGFuIEBkaXNwbGF5LgoKCSogdGV4aW5mby50ZXggKFxmaW5pc2h0aXRsZXBhZ2UpOiByZW1vdmUgRklOSVNIIFRJVExFIGRlYnVnZ2luZwoJCW1lc3NhZ2UuCgoJKiB0ZXhpbmZvLnRleCAoXGFuY2hvcik6IHJld3JpdGUgdG8gYWx3YXlzIFxpZ25vcmVzcGFjZXMuCglCdWcgZnJvbSBlc2tlbi4KCgkqIHRleGluZm8udGV4IChcaW5kZXhub2ZvbnRzKTogZHVtbXkgdXAgXGFjcm9ueW0uCglGcm9tOiBUaG9tYXMgRXNrZW4gPGVza2VuQG5tbGFiLmluZm9ybWF0aWsuZmgtZG9ydG11bmQuZGU+CgoxOTk5LTA5LTA2ICBLYXJsIEJlcnJ5ICA8a2FybEBnbnUub3JnPgoKCSogdGV4aW5mby50ZXggKFx0ZXhpbmZvdmVyc2lvbik6IHVwZGF0ZS4KCgkqIHRleGluZm8udGV4OiBBdm9pZCBtdWx0aXBhcmFncmFwaCBjZWxscyBsb3NpbmcgbGluZXNwYWNlIGJldHdlZW4KCXBhcmFncmFwaHMuICBGcm9tOiBBbmRyZWFzIFNjaHdhYiA8c2Nod2FiQHN1c2UuZGU+LgoJQnVnIGZyb206IExhbG8gTWFydGlucyA8bGFsb0B3ZWJjb20uY29tPi4KCjE5OTktMDgtMTkgIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiB0ZXhpbmZvLnRleCAoXHNob3J0Y2hhcGxhYmVsKTogbW92ZSBjb21wdXRhdGlvbiBvZiB3aWR0aCBvZgoJIkFwcGVuZGl4IiBpbnNpZGUsIGluIGNhc2UgaXQncyBiZWVuIGNoYW5nZWQgYnkgYSBsYW5ndWFnZS4KCk1vbiBBdWcgIDkgMTY6MzE6NTUgMTk5OSAgS2FybCBCZXJyeSAgPGthcmxAZ251Lm9yZz4KCgkqIHRleGluZm8udGV4OiBwZGYgdXBkYXRlcyBmcm9tIEhhbi4KCkZyaSBBdWcgIDYgMTM6NDg6MjIgMTk5OSAgS2FybCBCZXJyeSAgPGthcmxAZ251Lm9yZz4KCgkqIHRleGluZm8udGV4IChcY2hhcmNvZGUpOiByZW1vdmUgdW51c2VkIGNvdW50ZXIuCglGcm9tOiBBa2lyYSBLQUtVVE8gPGtha3V0b0Bmc2NpLmZ1ay5raW5kYWkuYWMuanA+LgoKVGh1IEp1bCAyMiAxOTowODoxOSAxOTk5ICBLYXJsIEJlcnJ5ICA8a2FybEBnbnUub3JnPgoKCSogdGV4aW5mby50ZXg6IFVwZGF0ZSBmcm9tIEhhbi4KClR1ZSBKdWwgMjAgMTc6MTM6MTYgMTk5OSAgS2FybCBCZXJyeSAgPGthcmxAZ251Lm9yZz4KCgkqIHRleGluZm8udGV4OiBNb3JlIHBkZiBpbXByb3ZlbWVudHMgZnJvbSBIYW4uCgpNb24gSnVsIDE5IDE2OjMzOjMxIDE5OTkgIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiB0ZXhpbmZvLnRleDogQmV0dGVyIHBkZiBzdXBwb3J0IGZyb206IEhhbiBUaGUgVGhhbmgKIAkJPHRoYW5oQGluZm9ybWF0aWNzLm11bmkuY3o+LgoKU3VuIEp1bCAxOCAxNDoyMTowMyAxOTk5ICBLYXJsIEJlcnJ5ICA8a2FybEBnbnUub3JnPgoKCSogdGV4aW5mby50ZXg6IHBkZmltYWdlIHRha2VzIGJyYWNlcy4KClR1ZSBKdWwgIDYgMTk6NDA6MTQgMTk5OSAgS2FybCBCZXJyeSAgPGthcmxAZ251Lm9yZz4KCgkqIHRleGluZm8udGV4IChcZGVmdHlwZW9wKTogTmV3IGNvbW1hbmQuCgpNb24gSnVsICA1IDE3OjE3OjMzIDE5OTkgIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiB0ZXhpbmZvLnRleCAoXGNvbnRlbnRzKTogY2FsbCBccGRmbWFrZW91dGxpbmVzIGhlcmUgaW5zdGVhZCBvZgogCWlubGluZSAoISkuCgkoXHBkZm1ha2VvdXRsaW5lcyk6IGNhbGwgXGluZGV4bm9mb250cyBpbnN0ZWFkIG9mIG1ha2luZyBhIHNlcGFyYXRlCglhdHRlbXB0IGF0IGl0LgoKVHVlIE1heSAyNSAwNjoxNjowNiAxOTk5ICBLYXJsIEJlcnJ5ICA8a2FybEBnbnUub3JnPgoKCSogdGV4aW5mby50ZXggKHRpbWUtc3RhbXAtZm9ybWF0KTogdXNlICUwMkguCgoJKiB0ZXhpbmZvLnRleDogSGFkIFBERiBhbmQgRFZJIHRyYW5zcG9zZWQuCgpTdW4gQXByIDI1IDE1OjMwOjAwIDE5OTkgIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiB0ZXhpbmZvLnRleCAoXGFwcGVuZGl4bGV0dGVyKTogcmVzdG9yZSBcdGhlLCBuZWNlc3NhcnkgZm9yIC50b2MuCgpUaHUgQXByIDIyIDE5OjIyOjEyIDE5OTkgIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiB0ZXhpbmZvLnRleCAoXGVtZXJnZW5jeXN0cmV0Y2gpOiBJbmNyZWFzZSB0byAuMTVcaHNpemUuCgpUdWUgQXByIDIwIDA1OjExOjA0IDE5OTkgIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiB0ZXhpbmZvLnRleCAoXGRlZnVuYXJncyk6IHVzZSBcdGVuc2xcaHlwaGVuY2hhclxmb250IHRvIHdvcmsKCQliZXR0ZXIgd2l0aCBHaWxkZWEncyBQb3N0U2NyaXB0IHZlcnNpb24uCgoJKiB0ZXhpbmZvLnRleCAoXHRhYik6IENoYW5nZSBiYWNrIHRvIGp1c3QgJi4KCUZyb206IE5hdGhhbiBTaWR3ZWxsIDxuYXRoYW5AYWNtLm9yZz4uCgoJKiB0ZXhpbmZvLnRleDogTm8gXGZpLgoKTW9uIEFwciAxOSAxNzozODo1NCAxOTk5ICBLYXJsIEJlcnJ5ICA8a2FybEBnbnUub3JnPgoKCSogdGV4aW5mby50ZXggKFxwZGZsaW5rKSBbIVxpZnBkZl06IGRlZmluZSB0byBpZ25vcmUgYXJnLgoKCSogdGV4aW5mby50ZXg6IEFkZCBwZGYgc3VwcG9ydC4gIE1lcmdlIGZyb206IEt1cnQgSG9ybmlrCiAJCTxLdXJ0Lkhvcm5pa0BjaS50dXdpZW4uYWMuYXQ+LgoKV2VkIE1hciAzMSAxMzoyNDoxNiAxOTk5ICBLYXJsIEJlcnJ5ICA8a2FybEBnbnUub3JnPgoKCSogdGV4aW5mby50ZXggKFxkZWZvcGhlYWRlcik6IG1pc3Npbmcgd29yZCBzcGFjZSBiZWZvcmUgYG9uJy4KICAJCVJlcG9ydCBmcm9tOiBDaHJpcyBIYW5zb24gPGNwaEBtYXJ0aWdueS5haS5taXQuZWR1Pi4KCkZyaSBNYXIgMjYgMTc6MDA6NDEgMTk5OSAgS2FybCBCZXJyeSAgPGthcmxAZ251Lm9yZz4KCgkqIHRleGluZm8udGV4IChcaW1hZ2V4eHgpOiBFcXVhbGl6ZSBzcGFjZSBhYm92ZSBhbmQgYmVsb3cgaWYgaW4KIAkJdm1vZGUuICBGcm9tIHJtcy4KClRodSBNYXIgMjUgMjA6MDA6MDAgMTk5OSAgS2FybCBCZXJyeSAgPGthcmxAZ251Lm9yZz4KCgkqIHRleGluZm8udGV4IChcZGVmdHlwZWl2YXIpOiBuZXcgY29tbWFuZC4KClR1ZSBNYXIgMjMgMTc6NTM6MzcgMTk5OSAgS2FybCBCZXJyeSAgPGthcmxAZ251Lm9yZz4KCgkqIHRleGluZm8udGV4ICgmKTogYmUgc3VyZSBhY3RpdmUgJiBpcyBkZWZpbmVkIGZvciBAZGVmdHlwZWZuCgkJb3BlcmF0b3ImLgoJUmVwb3J0IGZyb206IE5hdGhhbiBTaWR3ZWxsIDxuYXRoYW5AYWNtLm9yZz4uCgpTYXQgTWFyIDIwIDEyOjMxOjUzIDE5OTkgIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiB0ZXhpbmZvLnRleCAoXGV4YW1wbGVpbmRlbnQpOiBuZXcgY29tbWFuZC4gIEZyb20gWW9zaGlraS4KCgkqIHRleGluZm8udGV4OiBDaGFuZ2VzIGZyb20gQW5kcmVhcyB0byB1c2UgXHNsXCQgaW5zaWRlIGl0YWxpY3MKCQlhbmQgdG8gYXZvaWQgZXh0cmEgc3BhY2VzIGFyb3VuZCBAYW5jaG9yLgoKCSogdGV4aW5mby50ZXggKFxpbWFnZSwgXGltYWdleHgpOiBtb3ZlIHBkZiB0ZXN0IHRvIGltYWdleHh4IGZvcgogCQljb3JyZWN0IGZpbGVuYW1lIHBhcnNpbmcuCgpNb24gTWFyIDE1IDE2OjUxOjIwIDE5OTkgIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiB0ZXhpbmZvLnRleCAoXGltYWdleHh4KTogcmVzZXQgY2F0Y29kZSBeXk0gaW4gY2FzZSB3ZSdyZSBpbnNpZGUKIAkJaW4gYW4gZXhhbXBsZS4gIFJlcG9ydCBmcm9tIGthbWEuCgoJKiB0ZXhpbmZvLnRleCAoXHB1dHdvcmRpbik6IG5ldyBtYWNybyBmb3Igd29yZCBgaW4nLgoJKFx4cmVmWCk6IHVzZSBpdC4KCVJlcG9ydCBmcm9tOiAiQWxleGV5IEEuIE5pa2lmb3JvdiIgPEEuQS5OaWtpZm9yb3ZAaW5wLm5zay5zdT4KClN1biBGZWIgMjEgMTY6NDc6MjggMTk5OSAgS2FybCBCZXJyeSAgPGthcmxAZ251Lm9yZz4KCgkqIHRleGluZm8udGV4OiBFeHBhbmQgdGFicy4KClN1biBGZWIgMTQgMTY6MDI6MjkgMTk5OSAgS2FybCBCZXJyeSAgPGthcmxAZ251Lm9yZz4KCgkqIHRleGluZm8udGV4IChccGFyYWdyYXBoaW5kZW50KTogaW1wbGVtZW50LgoJU3VnZ2VzdGlvbiBmcm9tOiBQYXVsIER1Qm9pcyA8ZHVib2lzQHByaW1hdGUud2lzYy5lZHU+LgoKVHVlIEZlYiAgOSAwNzoyNTowNyAxOTk5ICBLYXJsIEJlcnJ5ICA8a2FybEBnbnUub3JnPgoKCSogdGV4aW5mby50ZXggKFxhbGlhcyk6IHVzZSBkZWYgcmF0aGVyIHRoYW4gXGxldC4KCUNoYW5nZSB0aW1lc3RhbXAgZm9ybWF0IHRvIGluY2x1ZGUgaG91cnMuCgoJKiB0ZXhpbmZvLnRleDogTmV3IGNvbW1hbmRzIEBhbGlhcyBhbmQgQGRlZmluZm9lbmNsb3NlLgoJRnJvbTogIkVyaWMgUy4gUmF5bW9uZCIgPGVzckBzbmFyay50aHlyc3VzLmNvbT4uCgpNb24gRmViICA4IDE0OjQ2OjU2IDE5OTkgIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiB0ZXhpbmZvLnRleCAoXHNjYW5tYWNybyk6IFVzZSBcZW5kaW5wdXQgdG8gYXZvaWQgc3B1cmlvdXMgc3BhY2UsCiAJCWFuZCB2YXJpb3VzIG90aGVyIHNwYWNlIGZpeGVzLiAgRnJvbTogQW5kcmVhcyBTY2h3YWIKIAkJPHNjaHdhYkBsczUuaW5mb3JtYXRpay51bmktZG9ydG11bmQuZGU+LgoKVGh1IEZlYiAgNCAxNToyNDo0MCAxOTk5ICBLYXJsIEJlcnJ5ICA8a2FybEBnbnUub3JnPgoKCSogdGV4aW5mby50ZXggKFx1cmVmKTogaW1wbGVtZW50IG9wdGlvbmFsIHRoaXJkIGFyZy4KCgkqIHRleGluZm8udGV4IChcZG9zdWJpbmQpOiBJbmNsdWRlIGluZGV4IGVudHJ5IGluIHRoaXJkIGFyZyB0bwoJCVxlbnRyeSBpbnN0ZWFkIG9mIHdyaXRpbmcgYXMgYm9ndXMgZm91cnRoIGFyZy4KCVJlcG9ydCBmcm9tOiBrYW1hQGhpcHBvLmZpZG8uZGUgKEthcmwgSGVpbnogTWFyYmFpc2UpLgoKCSogdGV4aW5mby50ZXggKFxzZXRlbWVyZ2VuY3lzdHJldGNoKTogSW5jcmVhc2Ugc29tZXdoYXQuCgoJKiB0ZXhpbmZvLnRleCAoXHB1dHdvcmRvZik6IHJlbmFtZSBmcm9tIFxwdXR3b3JkT2YuCgkqIHRleGluZm8udGV4IChkZWZpdmFyaGVhZCwgXGRlZmN2YXJoZWFkZXIpOiBVc2UgXHB1dHdvcmRvZi4KClR1ZSBGZWIgIDIgMTY6NTc6MDAgMTk5OSAgS2FybCBCZXJyeSAgPGthcmxAZ251Lm9yZz4KCgkqIHRleGluZm8udGV4IChcZG9jdW1lbnRsYW5ndWFnZSwgXGRvY3VtZW50ZW5jb2RpbmcpOiBuZXcKCWNvbW1hbmRzLiAgXGRvY3VtZW50bGFuZ3VhZ2UgYmFzZWQgb24gYW4gaW1wbGVtZW50YXRpb24gYnkga2FtYS4KClNhdCBKYW4gMzAgMTc6MjM6NDUgMTk5OSAgS2FybCBCZXJyeSAgPGthcmxAZ251Lm9yZz4KCgkqIHRleGluZm8udGV4IChccHV0d29yZE1NYWkpOiBTaG91bGQgYmUgTU1heS4gIEZyb20gVHJvbmQuCgpGcmkgSmFuIDI5IDE3OjUyOjE2IDE5OTkgIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiB0ZXhpbmZvLnRleDogRml4IEBtYWNybyBleHBhbnNpb24gaW5zaWRlIEBzZWN0aW9uLiAgUGF0Y2ggZnJvbQogCUFuZHJlYXM6CgoJRnJvbTogQW5kcmVhcyBTY2h3YWIgPHNjaHdhYkBsczUuaW5mb3JtYXRpay51bmktZG9ydG11bmQuZGU+CgoJVGhlIGdlbmVyYWwgaWRlYSBpcyB0byBjb25zdHJ1Y3QgYSBsaXN0IGEgYWxsIGRlZmluZWQgbWFjcm9zIGluCiAJCXRoZSBmb3JtIFxkb1xtYWNybzFcZG9cbWFjcm8yLi4uLCB0aGVuIHRlbXBvcmFyaWx5IGRlZmluZQogCQlcZG8gdG8gc29tZXRoaW5nIGFwcHJvcHJpYXRlIGFuZCBleGVjdXRlIHRoZSBsaXN0IHRvIGRvCiAJCXdoYXRldmVyIGlzIG5lZWRlZC4gIEhlcmUgaXMgYSBwYXRjaCwgYW5kIGkgaGF2ZSBhbHNvCiAJCWZpeGVkIGEgZmV3IG90aGVyIGJ1Z3MgdGhhdCBpIGZvdW5kIHdoaWxlIGJyb3dzaW5nIHRocm91Z2gKIAkJdGhlIEBtYWNybyBpbXBsZW1lbnRhdGlvbi4gIEFkZGl0aW9uYWxseSBpIGhhdmUgYWRkZWQgYQogCQljaGVjayB0byBwcmV2ZW50IHRoZSB1c2VyIGZyb20gZG9pbmcgc2lsbHkgdGhpbmdzIGxpa2UKIAkJQG1hY3JvIHNoaXBvdXQuCgpTdW4gSmFuIDI0IDA5OjU5OjQyIDE5OTkgIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiB0ZXhpbmZvLnRleCAoXG9ic3RleHdhcm4pOiBEb24ndCB1c2UgKioqIGluIG1lc3NhZ2UsIGl0CiAJCWludGVyZmVyZXMgd2l0aCBtYWtlIG91dHB1dCBwYXJzaW5nLgoKVGh1IEphbiAyMSAxNTo0NToyMCAxOTk5ICBLYXJsIEJlcnJ5ICA8a2FybEBnbnUub3JnPgoKCSogdGV4aW5mby50ZXg6IEludGVybmF0aW9uYWxpemF0aW9uIGltcHJvdmVtZW50cyBmcm9tIGthbWEuCgpXZWQgSmFuIDIwIDE3OjEyOjUyIDE5OTkgIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiB0ZXhpbmZvLnRleCAoXGNvbnRlbnRzLCBcc2hvcnRjb250ZW50cyk6IFJ1biBcY29udGVudHNwYWdlYWxpZ25tYWNyby4KIAlGcm9tOiBUcm9uZCBFbmRyZXN0b2wgPHRyb25kQGFnYW1lbW5vbi5ndGYub2wubm8+CgpUaHUgSmFuIDE0IDE2OjUzOjQzIDE5OTkgIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiB0ZXhpbmZvLnRleCAoXGJlZ2luZG91YmxlY29sdW1ucyk6IFNoaXAgb3V0IFxwYXJ0aWFscGFnZQoJaW1tZWRpYXRlbHkgaWYgaXQgaXMgbm9udm9pZCwgaW5zdGVhZCBvZiBzYXZpbmcgaXQuICBUaGlzIGF2b2lkcyBhCglidWcgd2hlcmUgdGhlIGluZGV4IGNvdWxkIGVuZCB1cCBwcmludGluZyBvbmUgbGluZSBwZXIgcGFnZSAoc2VlCgl0aGUgaW5kZXhzcHJlYWQudGV4IHRlc3QpLgoJRnJvbTogQW5kcmVhcyBTY2h3YWIgPHNjaHdhYkBpc3Nhbi5pbmZvcm1hdGlrLnVuaS1kb3J0bXVuZC5kZT4KCgkqIHRleGluZm8udGV4IChcaW1hZ2UpOiBJZiBydW5uaW5nIHBkZnRleCwgZG8gXHBkZmltYWdle2ltYWdlZmlsZS5wZGZ9LgogCUZyb206IFNhbXVlbCBUYXJkaWV1IDxzYW1AaW5mLmVuc3QuZnI+CgogCUFsc28sIHVwZGF0ZSBjb3B5cmlnaHQgeWVhci4KClR1ZSBKYW4gIDUgMTc6NTA6NDUgMTk5OSAgS2FybCBCZXJyeSAgPGthcmxAZ251Lm9yZz4KCgkqIHRleGluZm8udGV4IChcZW5kZG91YmxlY29sdW1ucyk6IE1vdmUgXHBhZ2Vnb2FsIHJlc2V0IHRvIGFmdGVyCiAJCXRoZSBcZW5kZ3JvdXAgc28gd2UgZ2V0IHRoZSByZXN0b3JlZCBzaW5nbGUtY29sdW1uIFx2c2l6ZQogCQlhcyBpbnRlbmRlZC4KClN1biBEZWMgMjAgMTc6NTc6MjIgMTk5OCAgS2FybCBCZXJyeSAgPGthcmxAZ251Lm9yZz4KCgkqIHRleGluZm8udGV4IChcaW5kZXhkdW1taWVzKTogU2V0IFx7IGFuZCBcfSB0byBcbXlsYnJhY2UgYW5kCglcbXlicmFjZSB0byBhdm9pZCBicmFjZXMgaW4gdGhlIGluZGV4IGZpbGUsIHdoaWNoCgl0ZXhpbmRleCBjYW4ndCBoYW5kbGUuCgpTYXQgRGVjIDE5IDE4OjEzOjE2IDE5OTggIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiB0ZXhpbmZvLnRleCAoXHBpY2t1cHdob2xlZnJhY3Rpb24pOiBJZ25vcmUgd2hvbGUtbnVtYmVyIHBhcnQuCgkoXHNldHVwdGFibGUpOiBBbHdheXMgcGFzcyB3aG9sZS1udW1iZXIgcGFydCBhbmQgZGVjaW1hbCBwb2ludC4gIFRoaXMKCWFsbG93cyBsZWFkaW5nIHplcm9lcy4KCVN1Z2dlc3Rpb24gZnJvbTogQmVuIEJ1bGxvY2sgPGJlbkBoYXlhbWFzYS5kZW1vbi5jby51az4uCglEYXRlOiBGcmksIDIxIEF1ZyAxOTk4IDE0OjA2OjUwICswMTAwIChCU1QpCgpUdWUgRGVjIDE1IDE2OjM4OjA3IDE5OTggIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiB0ZXhpbmZvLnRleCAoXGluZGV4ZHVtbWllcyk6IHNldCBceyBhbmQgXH0gdG8gXGxicmFjZWNtZCBhbmQKICAgICAgICBccmJyYWNlY21kIHRvIGF2b2lkIGxvc3NhZ2UgaWYgQHRleCBpcyBhY3RpdmUgZHVyaW5nIFxzaGlwb3V0LgoJUmVwb3J0IGZyb206ICJQZXRlciBLYWJhbCIgPEthYmFsQGVjZS5tY2dpbGwuY2E+LgoKU3VuIERlYyAgNiAxNzoxMToxNyAxOTk4ICBLYXJsIEJlcnJ5ICA8a2FybEBnbnUub3JnPgoKCSogdGV4aW5mby50ZXg6IERvYyBmaXguCgoxOTk4LTExLTExICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5jcy51bmktZG9ydG11bmQuZGU+CgoJKiBkb2MvdGV4aW5mby50ZXggKFxvbmVwYWdlb3V0KTogUHV0IHRoZSBjcm9wbWFya3MgaW4gdmJveGVzIG9mCgl6ZXJvIGhlaWdodCBzbyB0aGF0IHRoZXkgZG9uJ3QgY29udHJpYnV0ZSBzcGFjZSB0aGVtc2VsdmVzLgoJQ29tcGVuc2F0ZSBmb3IgXHRvcGFuZGJvdHRvbW1hcmdpbi4KCShcaW50ZXJuYWxwYWdlc2l6ZXMpOiBBZHZhbmNlIFxvdXRlcnZzaXplIGJ5IDJcdG9wYW5kYm90dG9tbWFyZ2luLAoJbm90IG9ubHkgMC42aW4uCgpGcmkgTm92ICA2IDE3OjI3OjU3IDE5OTggIEthcmwgQmVycnkgIDxrYXJsQGdudS5vcmc+CgoJKiB0ZXhpbmZvLnRleDogVXNlIHN0YW5kYXJkIHRpbWUtc3RhbXAuZWwgcGFja2FnZSBpbnN0ZWFkIG9mCiAJCXVwZGF0ZS1kYXRlLmVsLgoKU2F0IE9jdCAzMSAxOToyMzowMiAxOTk4ICBLYXJsIEJlcnJ5ICA8a2FybEBnbnUub3JnPgoKCSogdGV4aW5mby50ZXggKFxpbmRleG5vZm9udHMsXGluZGV4ZHVtbWllcyk6IGFkZCBcdXJsIGFuZCBcdXJlZiB0bwogCQlsaXN0LgoKRnJpIE9jdCAzMCAwODoxNjoyMyAxOTk4ICBLYXJsIEJlcnJ5ICA8a2FybEBnbnUub3JnPgoKCSogdGV4aW5mby50ZXggKFxleHBhbmRhYmxldmFsdWUpOiBEZWxldGUgc3B1cmlvdXMgYHYnIGNoYXJhY3Rlci4KClR1ZSBPY3QgMjcgMTE6MTg6NDAgMTk5OCAgS2FybCBCZXJyeSAgPGthcmxAZ251Lm9yZz4KCgkqIHRleGluZm8udGV4IChAZW52LCBAY29tbWFuZCwgQG9wdGlvbik6IE11c3QgZGlzYWJsZSBmb3IgaW5kZXgKIAkJYW5kIHhyZWYgY29tbWFuZHMuICBBbHNvLCBcaW5wdXQgcGxhaW4gaWYgbmVjZXNzYXJ5IGJlZm9yZQogCQl1c2luZyB7fSBpbiB0aGUgdmVyc2lvbiBudW1iZXIuCgpXZWQgU2VwIDMwIDExOjQwOjM2IDE5OTggIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiB0ZXhpbmZvLnRleDogVXNlIGRhdGUgYXMgdmVyc2lvbiBudW1iZXIgaW5zdGVhZCBvZiBSQ1MsIGFuZAogCQl1cGRhdGUtZGF0ZSB0byB1cGRhdGUgaXQuCgpUaHUgU2VwIDE3IDEzOjIyOjQ0IDE5OTggIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiB0ZXhpbmZvLnRleDogRml4IEBtYWNybyBleHBhbnNpb24gb2YgQGNvZGUgd2l0aCBfIGluIHRoZQogCQlhcmd1bWVudC4KIAlGcm9tOiBaYWNrIFdlaW5iZXJnIDx6YWNrQHJhYmkuY29sdW1iaWEuZWR1Pi4KCkZyaSBBdWcgMjggMTA6MzA6MjkgMTk5OCAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIHRleGluZm8udGV4IChcaXRlbXp6eik6IHRha2UgXGl0ZW1tYXJnaW4gaW50byBhY2NvdW50IHdoZW4KIAkJdW5oYm94aW5nLiAgUmVwb3J0ZWQgYnkgQm9iLgoKRnJpIEF1ZyAxNCAxNjo1Njo1OCAxOTk4ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogdGV4aW5mby50ZXg6IENoYW5nZSBAZGVmdW4gZW52aXJvbm1lbnRzIHNvIHRoYXQgcmlnaHQgbWFyZ2luIGlzCiAJCW5vdCBjaGFuZ2VkLCBhbmQgaW5zdGVhZCB0aGUgZGVmdW4gdHlwZSBsYWJlbCBpcyBvdXRkZW50ZWQKIAkJaW50byB0aGUgbWFyZ2luLgoKVGh1IEF1ZyAxMyAxMzozMTo0MSAxOTk4ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogdGV4aW5mby50ZXggKFxzbWFydHNsYW50ZWQpOiBkZWZpbmUgdGhpcyBzZXBhcmF0ZWx5IGZyb20KIAlcc21hcnRpdGFsaWMuCgkoXGVtcGgsIFxpKTogdXNlIFxzbWFydGl0YWxpYyBmb3IgdHJ1ZSBpdGFsaWNzLgoKTW9uIEF1ZyAxMCAxMTo1MToxMyAxOTk4ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogdGV4aW5mby50ZXggKFx2YWx1ZSk6IGhhbmRsZSBhY3RpdmUgXyBvciAtIGluIGFyZ3VtZW50IChoYXBwZW5zCiAJCWlmIGNhbGxlZCBmcm9tIEBjb2RlKS4KIAlSZXBvcnQgZnJvbTogRGF2ZSBMb3ZlIDxkLmxvdmVAZGwuYWMudWs+LgoKU3VuIEp1bCAxOSAwOTo0OToyMyAxOTk4ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogdGV4aW5mby50ZXggKFxkb3N1YmluZCk6IERvbid0IGRvIFx2c2tpcCB0byBwcmVzZXJ2ZSBcbGFzdHNraXAKIAkJdW5sZXNzIHdlIGFyZSBpbiB2ZXJ0aWNhbCBtb2RlLiAgT3RoZXJ3aXNlIHdlIG1pZ2h0IGVuZCBhCiAJCXBhcmFncmFwaCBwcmVtYXR1cmVseSwgYW5kIFxmb2xpbyB3b24ndCBnZXQgZXhwYW5kZWQgYnkKIAkJXG91dHB1dC4KIAlSZXBvcnQgZnJvbTogIlJpY2hhcmQgRS4gU3RvbmUiIDxyZXNAcnN0b25lLm1uLm9yZz4KClRodSBKdWwgMTYgMTU6MzM6MzcgMTk5OCAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIHRleGluZm8udGV4OiBLZWVwIHRyYWNrIG9mIGhvdyBuZWdhdGl2ZSB0aGUgcGFnZSBudW1iZXJzIGhhdmUKIAlnb3R0ZW46CgkoXGxhc3RuZWdhdGl2ZXBhZ2Vubyk6IE5ldyBcY291bnQgcmVnaXN0ZXIuCgkoXHN0YXJ0Y29udGVudHMpOiBVc2UgaXQuCgkoXGNvbnRlbnRzLCBcc3VtbWFyeWNvbnRlbnRzKTogc2V0IGl0LgoKTW9uIEp1bCAxMyAxNjo1ODoxMSAxOTk4ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogdGV4aW5mby50ZXggKFxpbWFnZXh4eCk6IEFkZCBzb21lIHNwYWNlIGFyb3VuZCB0aGUgaW1hZ2UgaWYgaXQncwogCQlieSBpdHNlbGYuCgoxOTk4LTA3LTA5ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5pbmZvcm1hdGlrLnVuaS1kb3J0bXVuZC5kZT4KCgkqIHRleGluZm8udGV4IChjaGFwdGVyenp6KTogUHV0IGEgc3BhY2UgYmVmb3JlIHRoZSBjaGFwdGVyIG51bWJlcgoJaW4gdGhlIG1lc3NhZ2UuCgkoYXBwZW5kaXh6enopOiBVc2UgXHB1dHdvcmRBcHBlbmRpeCBpbiB0aGUgbWVzc2FnZS4KClRodSBKdWwgIDkgMDg6Mzk6NTMgMTk5OCAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIHRleGluZm8udGV4IChcbWFjcm8pOiBHbG9iYWxpemUgYXNzaWdubWVudHMgc2luY2UgaXQncyBkb25lCgkJaW5zaWRlIGEgZ3JvdXAuICBGcm9tIFphY2suCgpNb24gSnVsICA2IDE3OjIxOjI1IDE5OTggIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiB0ZXhpbmZvLnRleCAoXGNvbW1lbnQpOiBTcGVlZCB1cC4KCShcbG9nZ2luZ2FsbCk6IFR1cm4gb24gZVRlWCdzIGV4dGVuZGVkIHRyYWNpbmcuCglNb3JlIG1hY3JvIGZpeGVzLgoJRGF0ZTogU2F0LCAwNCBKdWwgMTk5OCAxNDo1MTo0OSAtMDQwMAoJRnJvbTogWmFjayBXZWluYmVyZyA8emFja0ByYWJpLnBoeXMuY29sdW1iaWEuZWR1PgoKVGh1IEp1bCAgMiAxMDoyMDozMiAxOTk4ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogdGV4aW5mby50ZXggKFxjb250ZW50cywgXHN1bW1hcnljb250ZW50cywgXHN0YXJ0Y29udGVudHMpOiBVc2UKIAkJcm9tYW4gbnVtZXJhbHMgZm9yIHRvYywgYXJhYmljIG91dHNpZGUsIGV2ZW4gd2hlbiB0b2MgaXMKIAkJYXQgdGhlIGJlZ2lubmluZy4KCk1vbiBKdW4gMjkgMTA6MDU6MjggMTk5OCAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIHRleGluZm8udGV4IChcYW5jaG9yKTogTmV3IGNvbW1hbmQgQGFuY2hvci4KCShceHJlZlgpOiBBdm9pZCBkb3VibGUgc3BhY2Ugd2hlbiB4cmVmIHRvIGFuIEBhbmNob3Igb3IgYW4gQHVubnVtYmVyZWQuCgoJKiB0ZXhpbmZvLnRleCAoXGl0ZW16enopOiBVc2Uga2VybnMgYW5kIFx1bmhib3ggd2hlbiBpdGVtIHRleHQKCQlmaXRzIGluIHRoZSBzcGFjZSwgc28gZm9vdG5vdGVzIGNhbiB3b3JrLgoKCSogdGV4aW5mby50ZXggKFxzZXRyZWYpOiBUYWtlIGFkZGl0aW9uYWwgYXJndW1lbnQgZm9yIHRoZSAtc250CiAJeHJlZi4gIENhbGwgXGluZGV4ZHVtbWllcy4KCShcZG9ub2RlcmVmLCBcYXBwZW5kaXhub2RlcmVmLCBcdW5udW1ibm9kZXJlZik6IENoYW5nZSBcc2V0cmVmIGNhbGxzLgoKU2F0IEp1biAyNyAxOToxNjozNCAxOTk4ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogdGV4aW5mby50ZXggKFxjb250ZW50cywgXHN1bW1hcnljb250ZW50cyk6IE11c3Qgbm90IGJlIFxvdXRlci4KCkZyaSBKdW4gMjYgMTY6MTU6MTQgMTk5OCAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIHRleGluZm8udGV4IChcd3JpdGV0b2NlbnRyeSk6IE5ldyBtYWNyby4KCShcY2hhcHRlcm5vZm9udHMpOiBObyBsb25nZXIgbmVlZGVkLgoJKFxjaGFwdGVyLCAuLi4sIFx1bm51bWJlcmVkc3Vic3Vic2VjKTogQ2hhbmdlIGFsbCB0aGUgc2VjdGlvbmluZwoJCWNvbW1hbmRzIHRvIGNhbGwgXHdyaXRldG9jZW50cnkgaW5zdGVhZCBvZiBkb2luZyBpdCBpbmxpbmUuCglBbHNvLCBkbyBub3QgY2FsbCBcY2hhcHRlcm5vZm9udHMsIHdlIGF2b2lkIGV4cGFuc2lvbiB3aXRoCgkJXHRoZVx0b2tzIGluc3RlYWQuCgkoXG9wZW5jb250ZW50cyk6IE5vIGxvbmdlciBuZWVkZWQsIGluc3RlYWQgXHdyaXRldG9jZW50cnkgb3BlbnMKCQl0aGUgZmlsZSB3aGVuIG5lY2Vzc2FyeS4KCShcc2V0ZmlsZW5hbWUpOiBEb24ndCBjYWxsIFxvcGVuY29udGVudHMuCgkoXGlmc2V0Y29udGVudHNhZnRlcnRpdGxlcGFnZSwgXGlmc2V0c2hvcnRjb250ZW50c2FmdGVydGl0bGVwYWdlKToKCQlOZXcgY29uZGl0aW9uYWxzLgoJKFxFdGl0bGVwYWdlKTogQ2FsbCBcY29udGVudHMgYW5kL29yIFxzaG9ydGNvbnRlbnRzIGlmCgkJY29uZGl0aW9uYWxzIGFyZSBzZXQuCgoJR2xvYmFsOiB1c2UgXG5vYnJlYWsgaW5zdGVhZCBvZiBccGVuYWx0eSAxMDAwMCBmb3IgZXBzaWxvbiBlZmZpY2llbmN5LgoKVGh1IEp1biAyNSAwODoyOTozMiAxOTk4ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogdGV4aW5mby50ZXggKFxvcHRpb24sXGVudixcY29tbWFuZCk6IE5ldyBtYXJrdXAgY29tbWFuZHMuCglTdWdnZXN0ZWQgYnkgYXJub2xkQGdudS5vcmcuCgoJKiB0ZXhpbmZvLnRleCAoXGFmb3VycGFwZXIpOiBNb3JlIHJlYXNvbmFibGUgbWFyZ2lucy4KCUZyb206IFdpbGhlbG0gTXVlbGxlciA8bXVld2lAaGIuc2VuYnZzNDMudW5pLWJyZW1lbi5kZT4KCURhdGU6IFRodSwgMjUgSnVuIDE5OTggMTA6NDg6MTMgKzAyMDAgKE1FVCBEU1QpCgpXZWQgSnVuIDI0IDE3OjQ2OjQzIDE5OTggIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiB0ZXhpbmZvLnRleCAoXGFjcm9ueW0pOiBOZXcgVGV4aW5mbyBjb21tYW5kLgoKVHVlIEp1biAyMyAxNzozNjozOSAxOTk4ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogdGV4aW5mby50ZXggKFxkb3RzLCBcZW5kZG90cyk6IE1pc3NpbmcgXGxlYXZldm1vZGUuCglSZXBvcnQgZnJvbTogVGhvbWFzIEVza2VuIDxlc2tlbkBubWxhYi5pbmZvcm1hdGlrLmZoLWRvcnRtdW5kLmRlPgoJRGF0ZTogVHVlLCAyMyBKdW4gMTk5OCAxNDoyMjoyNyArMDIwMCAoTUVUIERTVCkKCk1vbiBKdW4gMjIgMTY6MDA6NTMgMTk5OCAgS2FybCBCZXJyeSAgPGthcmxAbm9ydGg+CgoJKiB0ZXhpbmZvLnRleDogUmV3cml0ZSBvZiBpbmRleCBzdHVmZiB0byBkbyBiZXR0ZXIgY29sdW1uIGJyZWFraW5nCglhbmQgYmFsYW5jaW5nLgoJVGhlIG9sZCBjb2RlIGZhaWxlZCBtaXNlcmFibHkgd2hlbiB0aGUgaW5kZXggd2FzIGp1c3QgdGhlIHdyb25nIHNpemUsCgllLmcuLCB0aGUgQXV0b2NvbmYgbWFudWFsIHdpdGggQGFmb3VycGFwZXIuCglCdWcgcmVwb3J0IGZyb206IFdpbGhlbG0gTXVlbGxlciA8bXVld2lAaGIuc2VuYnZzNDMudW5pLWJyZW1lbi5kZT4KCURhdGU6IEZyaSwgMTIgSnVuIDE5OTggMTY6MzQ6NDkgKzAyMDAgKE1FVCBEU1QpCgkoXGluaXRpYWwpOiBBZGQgbW9yZSBnbHVlIGFyb3VuZCB0aGUgaW5pdGlhbCwgYW5kIG1ha2UgaXQgYQoJCW11bHRpcGxlIG9mIFxiYXNlbGluZXNraXAuCgkoXGVudHJ5KTogQWRkIGdsdWUgYmVmb3JlIGVhY2ggZW50cnkgc28gdGhlIGNvbHVtbnMgY2FuIGFsd2F5cyBiZSB0aGUKCSBzYW1lIGhlaWdodC4KCShcZG91YmxlY29sdW1ub3V0KTogQXZhaWxhYmxlIHNwYWNlIG5vIGxvbmdlciBuZWVkcyB0byBoYW5kbGUKCSBccGFydGlhbHBhZ2Ugc3BlY2lhbGx5LgoJKFxwYWdlc29mYXIpOiBUYWtlIFxodFxwYXJ0aWFscGFnZSBpbnRvIGFjY291bnQgd2l0aCBcdnNpemUuCgkoXGVuZGRvdWJsZWNvbHVtbnMpOiBSZXNldCBcb3V0cHV0IHRvIGF2b2lkIGNhbGxpbmcKCQlcYmFsYW5jZWNvbHVtbnMgdHdpY2UKCShcYmFsYW5jZWNvbHVtbnMpOiBGb3JtYXQgZm9yIHJlYWRhYmlsaXR5LgoJKFxpbml0aWFsc2tpcGFtb3VudCk6IE5vIGxvbmdlciBuZWVkZWQsIHJlbW92ZS4KCgkoXGhiYWRuZXNzKTogSW5jcmVhc2UgYSBiaXQsIGJveGVzIHRoYXQgYXJlIGEgbGl0dGxlIHVuZGVyZnVsbCBsb29rIG9rLgoKU3VuIEp1biAyMSAxNjo0ODozOCAxOTk4ICBLYXJsIEJlcnJ5ICA8a2FybEBub3J0aD4KCgkqIHRleGluZm8udGV4IChcbmluZXR0c2wpOiBjbXNsdHQxMCBpcyBub3Qgc3RhbmRhcmQsIHNvIHVzZQoJCWNtc2x0dDEwIHNjYWxlZCA5MDAuCiAJRGF0ZTogTW9uLCAxNSBKdW4gMTk5OCAxMjozNTo0MSArMDIwMCAoTUVUIERTVCkKIAlGcm9tOiBXZXJuZXIgU3RydWNrbWFubiA8c3RydWNrQGlwcy5jcy50dS1icy5kZT4uCgpUaHUgSnVuIDE4IDA4OjMyOjE1IDE5OTggIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiB0ZXhpbmZvLnRleDogQG1hY3JvIGZpeGVzIGZyb20gWmFjayBXZWluYmVyZwogIAkgICAgIDx6YWNrQHJhYmkucGh5cy5jb2x1bWJpYS5lZHU+LgogCS0gQGlmYmxhaCBkaWQgbm90IHdvcmsgaW5zaWRlIEBtYWNybwogICAgICAgIC0gc3BhY2VzIGluIHBhcmFtZXRlciBsaXN0cyBpbiBtYWNybyBkZWZpbml0aW9ucyBjYXVzZWQgZXJyb3JzCiAgICAgICAgLSBsZWFkaW5nIHNwYWNlcyBpbiBwYXJhbWV0ZXIgbGlzdHMgaW4gbWFjcm8gaW52b2NhdGlvbnMgd2VyZQoJICBwcmVzZXJ2ZWQgaW5hcHByb3ByaWF0ZWx5LgoKV2VkIEp1biAxMCAxNjo1MDo1MyAxOTk4ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogdGV4aW5mby50ZXggKFxzbWFsbGZvcm1hdHgsIFxzbWFsbGRpc3BsYXl4KTogTmV3IG1hY3Jvcy4KCShcc21hbGxib29rKTogQXJyYW5nZSB0byB1c2UgdGhlbS4KCShcZGlzcGxheSwgXGZsdXNobGVmdCwgZXRjLik6IFJld3JpdGUgdG8gYXZvaWQgZHVwbGljYXRpb24uCgpTdW4gSnVuICA3IDE4OjEzOjQ1IDE5OTggIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiB0ZXhpbmZvLnRleCAoXHBhZ2VzaXplcyk6IFJlbmFtZSB0byBcaW50ZXJuYWxwYWdlc2l6ZXMuCgkoXGN1c3RvbXBhcGVyKTogUmVuYW1lIHRvIFxwYWdlc2l6ZXMuCgpTYXQgSnVuICA2IDEzOjE2OjMyIDE5OTggIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiB0ZXhpbmZvLnRleDogUmV3cml0ZSBwYXBlciBzaXplIGRlZmluaXRpb25zLCBhZGQgQGN1c3RvbXBhcGVyLgoKCSogdGV4aW5mby50ZXg6IEZpeCBmb3IgbWFjcm9zIGluIGFyZ3VtZW50cyB0byBvdGhlciBjb21tYW5kcy4KICAJCUZyb20gWmFjay4KClRodSBKdW4gIDQgMTE6MjE6MDcgMTk5OCAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIHRleGluZm8udGV4OiBCZXR0ZXIgQG1hY3JvIGltcGxlbWVudGF0aW9uLgoJRnJvbTogWmFjayBXZWluYmVyZyA8emFja0ByYWJpLnBoeXMuY29sdW1iaWEuZWR1Pi4KClR1ZSBNYXkgMjYgMTc6NDM6MjEgMTk5OCAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIHRleGluZm8udGV4IChcaW1hZ2V4eHgpOiBDZW50ZXIgaW1hZ2UgaWYgaXQgaXMgbm90IHBhcnQgb2YgYQogCQlwYXJhZ3JhcGguCgpUdWUgTWF5IDE5IDE3OjE3OjEyIDE5OTggIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiB0ZXhpbmZvLnRleDogXGxpbmtzdHJ1ZSBieSBkZWZhdWx0LgoJQWxzbywgZmlyc3QgaW1wbGVtZW50YXRpb24gb2YgQG1hY3JvOyBjYW4gb25seSBoYW5kbGUgc29tZSBjYXNlcywKIAkJYnV0IHRoYXQgaXMgYmV0dGVyIHRoYW4gbm90aGluZy4KCUZyb206IFphY2sgV2VpbmJlcmcgPHphY2tAcmFiaS5waHlzLmNvbHVtYmlhLmVkdT4KClRodSBNYXkgMTQgMTc6MzI6NDcgMTk5OCAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIHRleGluZm8udGV4OiBOZXcgY29tbWFuZCBAbm92YWxpZGF0ZSBhbG9uZyB0aGUgbGluZXMgb2YgbWFrZWluZm8KCQktLW5vLXZhbGlkYXRlLgoJRGF0ZTogU3VuLCAyNiBPY3QgMTk5NyAxODo1NDo0NyAtMDUwMAoJRnJvbTogWmFjayBXZWluYmVyZyA8emFja0ByYWJpLnBoeXMuY29sdW1iaWEuZWR1PgoKVHVlIE1heSAxMiAxNjoxOTozNSAxOTk4ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogdGV4aW5mby50ZXggKFx2YWx1ZXh4eCk6IFNwbGl0IHVwIGludG8gZXhwYW5kYWJsZSBhbmQKIAkJbm9uLWV4cGFuZGFibGUgcGFydHMuCgkoXGV4cGFuZGFibGV2YWx1ZSk6IE5ldyBtYWNyby4KCShcaW5kZXhkdW1taWVzKTogXGxldFx2YWx1ZSA9IFxleHBhbmRhYmxlIHZhbHVlLgoKCSogdGV4aW5mby50ZXg6IERvYyBmaXhlcy4KCgkqIHRleGluZm8udGV4IChcZG9pbmQpOiBKdXN0IGNhbGwgXGRvc3ViaW5kIHdpdGggZW1wdHkgdGhpcmQgYXJnLgoJKFxkb3N1YmluZCk6IFJlcGxhY2Ugd2l0aCBcZG9pbmQgZGVmaW5pdGlvbiBhbmQgc3VpdGFibGUgY29kZSB0byBoYW5kbGUKCXBvc3NpYmxlIHRoaXJkIGFyZy4gIEFuZCBwcm9wYWdhdGUgZ2x1ZSBwYXN0IHRoZSB3aGF0c2l0IGZyb20gdGhlCiAJXHdyaXRlIHNvIGluZGV4IGVudHJpZXMgZG9uJ3QgY2F1c2UgZXh0cmEgc3BhY2UgYmV0d2VlbgogCUBkZWZ1bnMgKGZvciBleGFtcGxlKS4KCldlZCBNYXkgIDYgMTI6NTE6MjcgMTk5OCAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIHRleGluZm8udGV4IChcZGVmdHlwZW1ldGhwYXJzZWJvZHkpOiBIYW5kbGUgdGhlIGV4dHJhIGFyZyBpbgogCUBkZWZ0eXBlbWV0aG9keCwgdG9vLgoJKFxkZWZ0eXBlZnVueCk6IEVycm9yIGRlZmluaXRpb24gd2FzIG1pc3NwZWxsZWQgYXMgXGRlZnR5cGV1bnguCgpGcmkgTWF5ICAxIDE3OjMxOjU4IDE5OTggIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiB0ZXhpbmZvL3RleGluZm8udGV4IChccHV0d29yZG9uLCBccHV0d29yZE1ldGhvZG9uKTogTmV3IG1hY3Jvcy4KICAJVXNlIGluIFxkZWYuLi4gY29tbWFuZHMuCgkoXGluZGV4ZHVtbWllcyk6IG1ha2UgYFwgJyBiZSBqdXN0IGAgJyBmb3Igc29ydGluZy4KCShcZGVmdHlwZW1ldGhwYXJzZWJvZHkpOiBOZXcgbWFjcm8uCgkoXGRlZm1ldGhvZCk6IENhbGwgaXQuCglWYXJpb3VzIGRvYyBmaXhlcy4KCVJlcG9yZWQgYnk6IEtITWFyYmFpc2VAcDY5LmtzLmZpZG8uZGUgKEthcmwgSGVpbnogTWFyYmFpc2UpCglEYXRlOiBXZWQsIDA3IEphbiAxOTk4IDEwOjE5OjQyICswMTAwCgpGcmkgQXByIDEwIDE2OjU0OjQ4IDE5OTggIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiB0ZXhpbmZvLnRleDogQGNhcnRvdWNoZTogQWxpZ24gcmlnaHQgc2lkZSBjb3JyZWN0bHkuCglGcm9tOiBkYWxlLnNtaXRoQGJlbGxob3cuY29tIChEYWxlIFNtaXRoKQoJRGF0ZTogRnJpLCAwNiBNYXIgMTk5OCAxNDo0NzowMiBHTVQKClN1biBBcHIgIDUgMTc6MTk6MDMgMTk5OCAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIHRleGluZm8udGV4IChcZG9zZXRxKTogVXNlIFxub3JtYWx0dXJub2ZmYWN0aXZlIGluc3RlYWQgb2YganVzdAogCVx0dXJub2ZmYWN0aXZlLCBzbyBcJ3MgaW4gbm9kZSBuYW1lcyBhcmUgaGFuZGxlZCBwcm9wZXJseS4KCShcdGllKTogTW92ZSBkZWZpbml0aW9uIHRvIG1vcmUgcmF0aW9uYWwgcG9zaXRpb24gaW4gdGhlIGZpbGUuCgkoXEAsIFx7LCBldGMuKTogVXNlIGRlY2ltYWwgbnVtYmVycyBpbiBhbGwgY2FzZXMsIHRvIGF2b2lkIHVzZSBvZiAnLgoJUGFyYW5vaWEgb25seS4KCShcKyk6IFR1cm4gb2ZmIG9uY2UgYW5kIGZvciBhbGwgYXQgdGhlIGJlZ2lubmluZywgYW5kIGRlZmluZSBhcwoJXHRhYmFsaWduIGluIEB0ZXguCgpUdWUgTWFyIDMxIDE5OjMzOjMxIDE5OTggIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiB0ZXhpbmZvLnRleCAoXHN5bmluZGV4LCBcc3luY29kZWluZGV4KTogXGNsb3Nlb3V0IHRoZSByZWRpcmVjdGVkCgkJaW5kZXguCglGcm9tOiBKYWtvYiBTdG9rbHVuZCBPbGVzZW4gPHN0b2tsdW5kQG1pLmFhdS5kaz4KCgkqIHRleGluZm8udGV4IChcZG9pZ25vcmUpOiBJZ25vcmUgZXZlcnl0aGluZyBhZnRlciBgYycsIHNvIEBlbmQKIAlpZmluZm8gYW5kIHRoZSBsaWtlIGNhbiBiZSBjb21tZW50ZWQgb3V0LgoJKFxtYWNyb2NzbmFtZSk6IE5ldyBtYWNyby4KCVJlcG9ydGVkIGJ5OiAiSmFtZXMgQS4gTHVwbyIgPGx1cG9qYUBmZXlubWFuLm1sLndwYWZiLmFmLm1pbD4KCldlZCBGZWIgMjUgMTU6NDg6NTEgMTk5OCAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIHRleGluZm8udGV4IChcZG9wcmludGluZGV4KTogQ2hhbmdlIGNhdGNvZGUgb2YgQCBiZWZvcmUgXHJlYWQsCgkJaW4gY2FzZSBvZiBcaW5pdGlhbHtAfSBiZWluZyB0aGUgbGluZSB0aGF0IGlzIHJlYWQuCglSZXBvcnRlZCBieTogRHJldyBDc2lsbGFnIDxkcmV3X2NzaWxsYWdAZ2VvY2l0aWVzLmNvbT4KCgkqIHRleGluZm8udGV4IChcZG90YWJsZSk6IEFkZCBcbGVmdHNraXAgdG8gXGhzaXplIGluIHRoZSBmaXJzdCBjb2x1bW4uCglEb24ndCBpbmhlcml0IFxyaWdodHNraXAgZnJvbSBzdXJyb3VuZGluZyBlbnZpcm9ubWVudC4KCVNldCBcaXRlbSB0byBcY3JjciB0byBhdm9pZCBlbXB0eSBmaXJzdCByb3cuCiAgICAgICAgUHJlcGVuZCBccGFyc2tpcCBnbHVlIGJlZm9yZSB0YWJsZS4KICAgICAgICBTZXQgXGV2ZXJ5Y3IgbG9jYWxseSBvdXRzaWRlIG9mIGFsaWdubWVudCwgZG9uJ3QgcmVzZXQgaXQKCSAgICAgICAgZXhwbGljaXRseSBpbiBcRW11bHRpdGFibGUuCglBbGwgZnJvbSBBbmRyZWFzIFNjaHdhYiwgdG8gYXZvaWQgb3ZlcmZ1bGwgaGJveGVzLgoKCUFsc28sIHdvcmsgb24gbGVhZGluZyBjb21tZW50YXJ5IGluIGZpbGUgYSBiaXQuCgpUdWUgRmViIDI0IDE3OjQ4OjI5IDE5OTggIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiB0ZXhpbmZvLnRleDogXCE6IFNhdmUgYW5kIHJlc3RvcmUgdGhpcyBmb3IgQHRleC4KCUZyb206IEplYW4tUGllcnJlIE1vcmVhdSA8anBtb3JlYXVAY2lmcmFtZWRpY2FsLmNvbT4KCURhdGU6IEZyaSwgMjIgQXVnIDE5OTcgMTY6NDc6MzYgLTA0MDAKCgkqIHRleGluZm8udGV4IChcYW5nbGVsZWZ0LCBcYW5nbGVyaWdodCk6IE5ldyBtYWNyb3MuCgkoXHJlZngsIFxlbWFpbCwgXGtleSk6IFVzZSB0aGVtLgoJRnJvbTogU3RlcGhlbiBHaWxkZWEgPGdpbGRlYUBpbnRvdWNoc3lzLmNvbT4KCURhdGU6IEZyaSwgMjYgRGVjIDE5OTcgMTE6NDM6MzIgRVNUCgpNb24gRmViIDIzIDE3OjM0OjIzIDE5OTggIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJMTk5Ny0wOC0yOCBBbmRyZWFzIFNjaHdhYiA8c2Nod2FiQGlzc2FuLmluZm9ybWF0aWsudW5pLWRvcnRtdW5kLmRlPgoJKiBkb2MvdGV4aW5mby50ZXggKHhyZGVmKTogUmVhZCB0aGUgc2Vjb25kIGFyZ3VtZW50IHdpdGggXAogCWFzIGFuIGVzY2FwZSBjaGFyYWN0ZXIuCgoxOTk4LTAxLTIyICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5pbmZvcm1hdGlrLnVuaS1kb3J0bXVuZC5kZT4KCgkqIHRleGluZm8udGV4IChcdG9jZW50cnkpOiBEb24ndCBcdHVybm9mZmFjdGl2ZSBiZWZvcmUgdHlwZXNldHRpbmcKCQl0aGUgYXJndW1lbnRzLCBpdCBjYXVzZXMgc3BlY2lhbCBjaGFyYWN0ZXJzIHRvIGJlIHByaW50ZWQKCQlpbmNvcnJlY3RseS4KCk1vbiBKYW4gMTkgMTA6NTg6MjUgMTk5OCAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIHRleGkyaHRtbDogQ29ycmVjdCB2ZXJzaW9uIG51bWJlciwgaG9tZSBwYWdlIHJlZmVyZW5jZS4KClNhdCBKYW4gMTcgMTU6MTI6MDMgMTk5OCAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIHRleGkyaHRtbDogVmVyc2lvbiAxLjU0LiAgSGFuZGxlIEBpbWFnZSBiZXR0ZXIsIGV0Yy4KCSogRnJvbTogQm9iIEZyaWVzZW5oYWhuIDxiZnJpZXNlbkBzaW1wbGUuZGFsbGFzLnR4LnVzPi4KCldlZCBEZWMgMjQgMTM6NTk6MDcgMTk5NyAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIHRleGluZm8udGV4IChcZG90cywgXGVuZGRvdHMpOiBVc2UgY3VycmVudCBmb250IGluc3RlYWQgb2YKIAkJYWx3YXlzIHVzaW5nIG1hdGggaXRhbGljLiAgRnJvbSBTdGVwaGVuIEdpbGRlYS4KClR1ZSBEZWMgMjMgMTE6MzM6MDcgMTk5NyAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIHRleGluZm8udGV4OiBTcHVyaW91cyB4ZXBzZi50ZXggc2hvdWxkIGJlIGVwc2YudGV4LgoKTW9uIE9jdCAxMyAxNTo0OToyOCAxOTk3ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogdGV4aW5mby50ZXggKFx0aXRsZWZvbnQpOiBFeHBsaWNpdGx5IHNldCBccm0uCgpTYXQgSnVsIDI2IDE1OjEyOjM3IDE5OTcgIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiB0ZXhpbmZvLnRleCAoXGVtYWlsKTogTGV0IHRvIFx1cmVmIGluc3RlYWQgb2YgXGNvZGUsIGFzIGEgc2Vjb25kCiAJCW9wdGlvbmFsIGFyZ3VtZW50IG1ha2VzIHNlbnNlIGZvciB0aGlzLCB0b28uCgpNb24gSnVsIDE0IDEzOjQzOjQzIDE5OTcgIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiB0ZXhpbmZvLnRleCAoXGluZGV4ZHVtbWllcyk6IEFkZCBcdmFsdWUuCgpUaHUgSnVsIDEwIDEzOjM0OjMwIDE5OTcgIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiB0ZXhpbmZvLnRleCAoXGF1dGhvcnJtKTogTXVzdCB1c2UgXGRlZiBpbnN0ZWFkIG9mIFxsZXQsIGFzCiAJCVxzZWNybSBpcyBub3QgeWV0IGRlZmluZWQuCgoxOTk3LTA3LTA5ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQHBzaWxvY2luLmdudS5haS5taXQuZWR1PgoKCSogdGV4aW5mby50ZXggKFx0aXRsZWZvbnQpOiBEZWZpbmUgYWdhaW4sIHVzaW5nIFx0aXRsZWZvbnRzLgoKV2VkIEp1bCAgOSAxNjo0NTozMCAxOTk3ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogdGV4aW5mby50ZXggKFxzdGFydGNvbnRlbnRzKTogTGVhdmUgXiBjYXRjb2RlIGFzIG90aGVyLgoKU2F0IEp1bCAgNSAxNzoxNjo0MCAxOTk3ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogdGV4aW5mby50ZXggKFx0aXRsZWZvbnRzKTogTmV3IG1hY3JvIHRvIHNldCB0aXRsZSBmb250IHN0eWxlcywKIAlzbyBpdGFsaWMgZXRjLiB3b3JrIGluIEB0aXRsZS4KCShcdGl0bGVmb250KTogTm8gbG9uZ2VyIG5lZWRlZC4KCShcdGl0bGVwYWdlKTogQ2FsbCBcdGl0bGVmb250cyBpbnN0ZWFkIG9mIFx0aXRsZWZvbnQuCgkoXGNoYXBzZiwgXHNzZWNzeSwgXHNzZWN0dHNsKTogQ29ycmVjdCBtYWdzdGVwIHZhbHVlcy4KCUZyb206IFN0ZXBoZW4gR2lsZGVhIDxnaWxkZWFAaW50b3VjaHN5cy5jb20+LgoKCSogdGV4aW5mby50ZXggKFxvbmVwYWdlb3V0KTogQmFjayB1cCB0byAyXGJhc2VsaW5lc2tpcCBwZXIgU3RlcGhlbi4KCShca2JkaW5wdXRzdHlsZSk6IE5ldyBjb21tYW5kLgoKMTk5Ny0wNC0wMyAgMDA6MDc6MjggMTk5NyAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0BnbnUuYWkubWl0LmVkdT4KCgkqIHRleGluZm8udGV4IChca2JkZm9udCwgXGtiZGV4YW1wbGVmb250KTogTmV3IG1hY3JvcywgcGFybXMgdGhhdAoJdGVsbCBAQGtiZCB3aGF0IHRvIGRvLgoJKFxzZXRrYmRpbnB1dGRpc3RpbmN0LCBcc2V0a2JkaW5wdXRleGFtcGxlKTogTmV3IGNvbW1hbmRzIHNldCB0aGVtLgoJKFxrYmQpOiBVc2UgdGhvc2UgcGFybXMuCgpUaHUgSnVsICAzIDE2OjUyOjM5IDE5OTcgIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiB0ZXhpbmZvLnRleCAoXG9uZXBhZ2VvdXQpOiBMZWF2ZSBvbmx5IG9uZSBsaW5lIHNwYWNlIGFib3ZlIHRoZQogCWZvb3RsaW5lLCB0byBiZSBtb3JlIGxpa2UgcGxhaW4uICBTdWdnZXN0ZWQgYnkgU3RlcGhlbiBHaWxkZWEuCgkoXGV2ZW5mb290bGluZSk6IExlZnQgb25lIHRvbyBtYW55IGxpbmUgc3BhY2VzIGhlcmUsIHNvIHJlZHVjZSBieSB0d28uCgoJKFxpZm5vdHRleCk6IEFub3RoZXIgaWdub3JlIGNvbW1hbmQuCgkoXGlmbm90aHRtbCxcaWZub3RpbmZvKTogTmV3IGNvbW1hbmRzLgoJKFxkb2lnbm9yZSk6IElnbm9yZSBicmFjZSBjaGFyYWN0ZXJzLCBzbyBtaXNtYXRjaGVkIGJyYWNlcyBpbiBpZ25vcmVkCgl0ZXh0IGRvIG5vdCBjYXVzZSBjb21wbGFpbnRzLgoKRnJpIEp1biAyNyAxNTowOToxNiAxOTk3ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogdGV4aW5mby50ZXggKFxpbWFnZSk6IE5ldyBkZWZpbml0aW9uIGZvciBuZXcgQGltYWdlIGNvbW1hbmQuCgpXZWQgSnVuIDE4IDE1OjU4OjIwIDE5OTcgIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiB0ZXhpbmZvLnRleCAoXG9kZGZvb3Rpbmd4eHgpLAoJKFxvbmVwYWdlb3V0KTogTGVhdmUgc3BhY2UgZm9yIHRoZSBmb290bGluZSBpZiBwcmVzZW50LgoJKFxldmVyeWZvb3Rpbmd4eHgsIFxldmVyeWhlYWRpbmd4eHgpOiBDYWxsIFxvZGRmb290aW5neHh4IGFuZAoJXGV2ZW5mb290aW5neHh4IGluc3RlYWQgb2YgcmVwZWF0aW5nIHRoZWlyIGNvZGUuICBGcm9tOiBTdGVwaGVuCiAJR2lsZGVhIDxnaWxkZWFAaW50b3VjaHN5cy5jb20+LgoKCShcc2V0ZmlsZW5hbWUpOiBSZWFkIHRleGluZm8uY25mIGlmIHByZXNlbnQuCgoJKFxpbmRleGR1bW1pZXMsIFxpbmRleG5vZm9udHMpOiBOby1vcCBhZGRpdGlvbmFsIGNvbW1hbmRzIEByZXN1bHQgQGVxdWl2CglAZXhwYW5zaW9uIEBwcmludCBAZXJyb3IgQHBvaW50LiAgRnJvbTogRGF2ZSBCb2RlbnN0YWIKIAkJPGltZGF2ZUBhaXMubmV0PiAoZm9yIHRleGkyd3d3IGRvYykuCgpGcmkgSnVuICA2IDEwOjMxOjM0IDE5OTcgIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiB0ZXhpbmZvLnRleCAoXHNldG11bHRpdGFibGVzcGFjaW5nKTogUmVzdG9yZSBiYWQgdHlwaW5nIG1pc3Rha2UKIAkJZnJvbSB5ZXN0ZXJkYXkuCgpUaHUgSnVuICA1IDE4OjA0OjI2IDE5OTcgIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiB0ZXhpbmZvLnRleCAoXHVyZWYpOiBXcml0ZSByZWFsIGRlZmluaXRpb24sIHRha2luZyBvbmUgbWFuZGF0b3J5CgkJYXJndW1lbnQgYW5kIG9uZSBvcHRpb25hbCBvbmUuCgpXZWQgSnVuICA0IDE3OjE2OjA5IDE5OTcgIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiB0ZXhpbmZvLnRleCAoXG1haW5tYWdzdGVwKTogRGVmaW5lIHRoaXMgYXMgYSBcY291bnQgdmFyaWFibGUKIAlpbnN0ZWFkIG9mIHdpdGggXGxldCwgdG8gbWFrZSBjaGFuZ2luZyB0byBcbWFnc3RlcDEgbW9yZSB0cmFuc3BhcmVudC4KIAlGcm9tOiBIRVJCRVJUQGJvZXZtNC52bmV0LmlibS5jb20uCgkoXHVyZWYpOiBOZXcgY29tbWFuZCBhIGxhIFx1cmwuCgpTYXQgTWF5IDI0IDE4OjA2OjQxIDE5OTcgIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiB0ZXhpbmZvLnRleCAoXGRlZnR5cGVtZXRob2QsIFxkZWZ0eXBlbWV0aG9kaGVhZGVyKTogTmV3IG1hY3JvcwoJCXRvIGltcGxlbWVudCBuZXcgY29tbWFuZHMgQGRlZnR5cGVtZXRob2QgYW5kIEBkZWZ0eXBlbWV0aG9keC4KCVN1Z2dlc3Rpb24gZnJvbTogS0hNYXJiYWlzZUBwNjkua3MuZmlkby5kZSAoS2FybCBIZWlueiBNYXJiYWlzZSkuCgpXZWQgTWF5IDIxIDE3OjE3OjUyIDE5OTcgIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiB0ZXhpbmZvLnRleCAoXG9wbnIsIFxjbG5yKTogSW5jcmVtZW50L2RlY3JlbWVudCBccGFyZW5jb3VudCwgZm9yCiAgIAkgIEBkZWZ1biBsaW5lcyB3aXRoIG5lc3RlZCBwYXJlbnMuICBGcm9tIEJpbGwgU2NoZWx0ZXIKIAkgIDx3ZnNAZmlyZWFudC5tYS51dGV4YXMuZWR1Pi4KCShcaXRlbWl6ZWl0ZW0pOiBDb3JyZWN0IFxlcnJtZXNzYWdlLgoKTW9uIE1heSAxOSAxNzozNDo0MCAxOTk3ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogdGV4aW5mby50ZXggKFxjb2RldW5kZXIpOiBVc2UgXF8gYW5kIFxpZnVzaW5ndHQgdG8gYXZvaWQKIAlkb3RhY2NlbnQgZnJvbSBfIGluIHJvbWFuIGZvbnRzLCBlLmcuLCBAZGVmdHlwZWZuLgoJKFx0ZXgpOiBSZW1vdmUgc3B1cmlvdXMgc3BhY2VzIGF0IHRoZSBlbmQgb2Ygc3ViZGVmaW5pdGlvbnMuCglGcm9tOiAiSm9obiBXLiBFYXRvbiIgPGp3ZUBiZXZvLmNoZS53aXNjLmVkdT4uCgkoXHVybCwgXGVtYWlsKTogXGxldCB0byBcY29kZTsgbm8gcXVvdGVzIG9yIGFuZ2xlIGJyYWNrZXRzLgoKTW9uIE1heSAgNSAxNzowNjozNSAxOTk3ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKCSogdGV4aW5mby50ZXggKFxvbmVwYWdlb3V0KTogXGlmY3JvcG1hcmtzLCBjZW50ZXIgdGhlIHBhZ2UgYm9keS4KICAJTG9zdCB0aGlzIHdoZW4gbWVyZ2VkIFxjcm9wcGFnZW91dCB3aXRoIFxvbmVwYWdlb3V0LiAgRm91bmQgYnkKIAlBcm5vbGQuCgoJKFxkb3ByaW50aW5kZXgpOiBEbyBub3QgYm90aGVyIHRvIGdvIGludG8gZG91YmxlIGNvbHVtbiBtb2RlIHVubGVzcwoJdGhlcmUgYWN0dWFsbHkgaXMgYSBub24tZW1wdHkgaW5kZXguCgoJKFxiZWdpbmRvdWJsZWNvbHVtbnMpOiBJbmNsdWRlIGFueSBleGlzdGluZyBccGFydGlhbHBhZ2UgaW4gdGhlIG5ldyBvbmUsCglsZXN0IHdlIGxvc2UgYSB3aG9sZSBwYWdlIG9mIG91dHB1dC4gIEZvdW5kIGJ5IE0gSiBNb3JsZXkKIAk8bWptQHNjcy5sZWVkcy5hYy51az4uCgoJKFxjaGFwdGVybm9mb250cyk6IFJlbW92ZSBzcHVyaW91cyBzcGFjZXMsIGJvdGggaW4gdGhlIGRlZmluaXRpb25zIHRoYXQKCWdldCBvdXRwdXQgdG8gdGhlIGF1eCBmaWxlKHMpIGFuZCBpbiB0aGlzIG1hY3JvLgoKCUZpeCBjb21tZW50cyBhbmQgcmF0aW9uYWxpemUgd2hpdGVzcGFjZSBpbiB2YXJpb3VzIG90aGVyIHBsYWNlcy4KClN1biBBcHIgMjcgMTU6NDE6MTYgMTk5NyAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIHRleGluZm8udGV4IChcY2hhcHRlciwgZXRjLik6IEF2b2lkIGV4cGFuc2lvbiBvZiBzZWN0aW9uIHRpdGxlCiAgICAgICAgd2hlbiB3cml0aW5nIHRoZSB0b2MuCgpUaHUgQXByIDI0IDE2OjM1OjQ2IDE5OTcgIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgoJKiB0ZXhpbmZvLnRleCAoXG9uZXBhZ2VvdXQpOiBJbnRlZ3JhdGUgY3JvcG1hcmtzIGNhc2UgaGVyZSwKCWluc3RlYWQgb2YgaGF2aW5nIGEgY29tcGxldGVseSBkaWZmZXJlbnQgcm91dGluZS4KCShcY3JvcHBhZ2VvdXQpOiBSZW1vdmUgdGhpcy4KClN1biBKdW4gIDkgMTQ6MjY6NDIgMTk5NiAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCgkqIHRleGluZm8udGV4IChcaWdub3JlbW9yZWNvbW1hbmRzKTogSWdub3JlIFxkZWZjb2RlaW5kZXgsIGFuZCBkbwogICAgICAgIG5vdCBpZ25vcmUgXG1lc3NhZ2UuCgpUaHUgQXByIDExIDEyOjU5OjQyIDE5OTYgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KCgkqIHRleGluZm8udGV4IChcbWFjcm8pOiBOZXcgbWFjcm8uCgkoXGVuZGRvdHMsIFxlbmRsZG90cyk6IE5ldyBtYWNyb3MuCgkoXGNlbnRlcmNoYXAsIFxjZW50ZXJjaGFweXl5KTogTmV3IG1hY3Jvcy4KCShcY2VudGVyY2hmcGxhaW4sIFxjZW50ZXJjaGZvcGVuKTogTmV3IG1hY3Jvcy4KCShcQ0hBUEZwbGFpbiwgXENIQVBGb3Blbik6IFNldCBcY2VudGVyY2hhcG1hY3JvLgoKV2VkIE1hciAxMyAxMTo0MjoxNyAxOTk2ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKICAgICAgICAqIHRleGluZm8udGV4IChcdXJsKTogTmV3IG1hY3JvLCBsaWtlIFxzYW1wIGZvciBub3cuCgpTdW4gTWFyIDEwIDEzOjA1OjA4IDE5OTYgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KCgkqIHRleGluZm8udGV4OiBDaGFuZ2VzIGluIEBtdWx0aXRhYmxlIGNvZGUuCglDaGFuZ2UgbWVhbmluZyBvZiBAbXVsdGl0YWJsZWxpbmVzcGFjZS4KClR1ZSBNYXIgIDUgMTg6NTY6MDggMTk5NiAgRGF2ZSBMb3ZlICA8ZC5sb3ZlQGRsLmFjLnVrPgoKCSogdGV4aW5mby50ZXggKFxzZXQpOiBTZXQgY2F0Y29kZSBvZiBzcGFjZSBleHBsaWNpdGx5IChpbnNpZGUgYQogCWdyb3VwKSB0byBhdm9pZCBsb3NpbmcgaW5zaWRlIEBleGFtcGxlLCBzYXkuCgpTdW4gTWFyICAzIDE3OjAxOjI3IDE5OTYgIEthcmwgQmVycnkgIDxrYXJsQGNzLnVtYi5lZHU+CgogICAgICAgICogdGV4aW5mby50ZXggKFxpdGVteHBhcik6IFByb3RlY3QgdGhlIFx2c2tpcCBoZXJlIHdpdGggXG5vYnJlYWssCiAgICAgICAgdG8gYXZvaWQgYSBwb3NzaWJsZSBwYWdlIGJyZWFrIGF0IGFuIEBpdGVteC4KClN1biBGZWIgMjUgMTQ6NTM6MTUgMTk5NiAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCiAgICAgICAgKiB0ZXhpbmZvLnRleCAoXG9ic3RleHdhcm4pOiBVc2UgXGdsb2JhbCB0byBhdm9pZCBldmVyIGdldHRpbmcgdGhlCiAgICAgICAgd2FybmluZyB0d2ljZS4KCiAgICAgICAgKiB0ZXhpbmZvLnRleCAoXGluY2x1ZGUpOiBBbGxvdyB1bmRlcnNjb3JlcyBhbmQgb3RoZXIgc3VjaAogICAgICAgIGNoYXJhY3RlcnMgd2UgbWFkZSBhY3RpdmUgaW4gdGhlIGZpbGUgbmFtZSBhcmd1bWVudC4KClR1ZSBGZWIgIDYgMTU6MDY6MjcgMTk5NiAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgoKCSogdGV4aW5mby50ZXggKFxhZm91cmxhdGV4KTogRGVsZXRlIHRoZSBvbGQgZHVwbGljYXRlIGRlZmluaXRpb24KCW9mIFxhZm91cmxhdGV4LgoKU3VuIEZlYiAgNCAxNToyMDoxNiAxOTk2ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+CgoJKiB0ZXhpbmZvLnRleCAoXHRhYik6IE5ldyBkZWZpbml0aW9uLgoJKFxzZXR1cHRhYmxlKTogRml4IHByZXZpb3VzIGNoYW5nZS4KCShcbXVsdGl0YWJsZWNvbHNwYWNlKTogUmVuYW1lZCBmcm9tIFxtdWx0aXRhYmxlY29sbWFyZ2luLgoJKFxtdWx0aXRhYmxlbGluZXNwYWNlKTogUmVuYW1lZCBmcm9tIFxtdWx0aXRhYmxlbGluZXNraXAuCgpGcmkgRmViICAyIDAyOjIwOjE2IDE5OTYgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KCgkqIHRleGluZm8udGV4IChcbXVsdGl0YWJsZXBhcnNraXApOiBSZW5hbWVkIGZyb20gXGludGFibGVwYXJza2lwLgoJQWxsb2NhdGUgd2l0aCBcbmV3c2tpcC4KCShcbXVsdGl0YWJsZXBhcmluZGVudCk6IFJlbmFtZWQgZnJvbSBcaW50YWJsZXBhcmluZGVudC4gIFVzZSBcbmV3c2tpcC4KCShcbXVsdGl0YWJsZWxpbmVza2lwKTogUmVuYW1lZCBmcm9tIFxzcGFjZWJldHdlZW5saW5lcy4gIFVzZSBcbmV3c2tpcC4KCShcbXVsdGl0YWJsZWNvbG1hcmdpbik6IFJlbmFtZWQgZnJvbSBcc3BhY2ViZXR3ZWVuY29scy4KCShcY29sdW1uZnJhY3Rpb25zKTogUmVuYW1lZCBmcm9tIFxwZXJjZW50b2Zoc2l6ZS4KCSh4Y29sdW1uZnJhY3Rpb25zKTogUmVuYW1lZCBmcm9tIFx4cGVyY2VudG9maHNpemUuCgoJKiB0ZXhpbmZvLnRleCAoXHNldHVwdGFibGUpOiBIYW5kbGUgPjEgZGlnaXRzIGFmdGVyIEBwZXJjZW50b2ZzaXplLgoJKFxwaWNrdXB3aG9sZXBlcmNlbnQpOiBOZXcgbWFjcm8uCgpTdW4gSmFuIDI4IDIxOjE0OjQ2IDE5OTYgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KCgkqIHRleGluZm8udGV4IChca2V5LCBca2JkZm9vKTogVXNlIFx0dHNsIHVuY29uZGl0aW9uYWxseS4KCShcc2V0a2V5Zm9udCk6IERlZmluaXRpb24gZGVsZXRlZC4KClR1ZSBKYW4gMjMgMTQ6NTc6MjMgMTk5NiAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCiAgICAgICAgKiB0ZXhpbmZvLnRleDogQGtiZCB3aXRoaW4gQGV4YW1wbGUgc2VsZWN0cyBzbGFudGVkIHR0eSBmb250OgoJKFx0dHNsLCBcdHRzbHNoYXBlKTogRGVmaW5lIHRoaXMgbmV3IGZvbnQgc2hhcGUuCiAgICAgICAgKFxrYmRmb28pOiBTZXQgdGhlIGZvbnQgdG8gXHR0c2wgaWYgYWxyZWFkeSB1c2luZyBcdHQuCiAgICAgICAgKFxzZXRrZXlmb250LCBcaWZtb25vc3BhY2UpOiBOZXcgbWFjcm9zLgoKV2VkIEphbiAxNyAyMzo1Nzo0OCAxOTk2ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+CgoJKiB0ZXhpbmZvLnRleCAoXGNoYW5nZXBhZ2VzaXplcyk6IEFkZGl0aW9uYWwgYXJnIGZvciB0b3Bza2lwLgoJKFxhZm91cmxhdGV4KTogVG90YWwgcmV3cml0ZS4KCShcYWZvdXJ3aWRlKTogUGFzcyBuZXcgYXJnIHRvIFxjaGFuZ2VwYWdlc2l6ZXMuCgpXZWQgSmFuICAzIDE3OjE1OjAwIDE5OTYgIFN0ZXBoZW4gR2lsZGVhICA8Z2lsZGVhQHgub3JnPgoKICAgICAgICAqIHRleGluZm8udGV4IChcc2xic2hhcGUsIFxpdGJzaGFwZSk6IFVzZSBib2xkIHNsYW50IGFuZCBhbmQKCWJvbGQgaXRhbGljIGluIHRpdGxlcyB0byBtYXRjaCB0aGUgYm9sZCByb21hbi4gIERvIG5vdCB1c2UKICAgICAgICBib2xkIHNmIG9yIGJvbGQgdHQsIHdoaWNoIHdvdWxkIGJlIHRvbyBoZWF2eS4KCiAgICAgICAgKiB0ZXhpbmZvLnRleCAoXHNldGZvbnQpOiBQYXNzIGZvbnQgbmFtZSBpbiBtb3JlIHBpZWNlcy4KICAgICAgICAoXCpzaGFwZSk6IE5ldyBtYWNyb3MgZGVmaW5pbmcgc3ltYm9saWMgbmFtZXMgZm9yIGFsbCBmb250CglzaGFwZXMgc28gY2FuIHVzZSBvdGhlciBmb250IGZhbWlsaWVzIHdpdGggZGlmZmVyZW50IG5hbWluZwoJY29udmVudGlvbnMuCgpXZWQgSmFuICAzIDE1OjUyOjE4IDE5OTYgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KCgkqIHRleGluZm8udGV4IChcaWdub3JlbW9yZWNvbW1hbmRzKTogVHVybiBvZmYgQGV2ZXJ5aGVhZGluZyBhbmQKCWZyaWVuZHMsIEBoZWFkaW5ncywgQHNldGNoYXB0ZXJuZXdwYWdlLCBAc2V0Y2hhcHRlcnN0eWxlLgoKU2F0IERlYyAzMCAxNzoyMDo0OCAxOTk1ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKICAgICAgICAqIHRleGluZm8udGV4IChcaW5tYXJnaW4pOiBEb24ndCBhbGxvdyBhIGJyZWFrIGJlZm9yZSB0aGUgdmVydGljYWwKICAgICAgICBrZXJuLiAgRG8gYWxsb3cgYSB3aG9sZSBwYXJhZ3JhcGggb2YgbWFyZ2luYWwgdGV4dCwgbm90IGp1c3Qgb25lIGxpbmUuCglVc2UgXGlubWFyZ2luc3BhY2luZy4KClRodSBEZWMgMjggMjM6MjI6MDggMTk5NSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgoKCSogdGV4aW5mby50ZXggKFxpbm1hcmdpbik6IE5ldyBjb21tYW5kIEBpbm1hcmdpbi4KCShcZGlyY2F0ZWdvcnkpOiBJZ25vcmUgQGRpcmNhdGVnb3J5LgoKVHVlIERlYyAxMiAxNzoyNTozNiAxOTk1ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKICAgICAgICAqIHRleGluZm8udGV4IChcbHZ2bW9kZSk6IFJlbW92ZSB0aGlzOyB1c2UgXGxlYXZldm1vZGUgYXMgdXN1YWwsCiAgICAgICAgc28gc3BhY2VzL3VuZGVyc2NvcmVzIGF0IGJlZ2lubmluZ3Mgb2YgbGluZXMgaW5zaWRlIEBleGFtcGxlIHdvcmsuCiAgICAgICAgQm9ndXMgaW5kZXggZW50cmllcyBzaG91bGQgYmUgKGFuZCBub3cgYXJlLCBJIHRoaW5rKSBoYW5kbGVkIGluCiAgICAgICAgb3RoZXIgd2F5cy4KCk1vbiBOb3YgMTMgMTY6MDc6MDkgMTk5NSAgS2FybCBCZXJyeSAgPGthcmxAY3MudW1iLmVkdT4KCiAgICAgICAgKiB0ZXhpbmZvLnRleCAoXHhyZWZYKTogVGVzdCBmb3IgeHJlZi1hdXRvbWF0aWMtc2VjdGlvbi10aXRsZQogICAgICAgIGJlaW5nIEBzZXQgY29ycmVjdGx5LCBhbmQgcmVtb3ZlIHNwdXJpb3VzIHJlZGVmaW5pdGlvbiBvZgogICAgICAgIFxwcmludGVkbm9kZW5hbWUgaW4gdGhhdCBjYXNlLgoKTW9uIE9jdCAxNiAxNToxNjozNCAxOTk1ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKICAgICAgICAqIHRleGluZm8udGV4IChcdW5zZXBzcGFjZXMpOiBOZXcgbWFjcm8gdG8gbWFrZSBhY3RpdmUgc3BhY2UKICAgICAgICBleHBhbmQgaW50byBhIG5vcm1hbCBzcGFjZSBjaGFyIGluIGluZGV4IGVudHJpZXMuCgkoXGluZGV4ZHVtbWllcyk6IFVzZSBcdW5zZXBzcGFjZXMuCgpUaHUgT2N0IDEyIDE0OjU2OjUyIDE5OTUgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KCgkqIHRleGluZm8udGV4IChcdGllKTogVXNlIFxsdnZtb2RlLCBub3QgXGxlYXZldm1vZGUuCglEb24ndCB1c2UgXEBNIGRpcmVjdGx5IGVpdGhlci4KClN1biBBdWcgMjcgMjE6MTc6MDkgMTk5NSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CgoJKiB0ZXhpbmZvLnRleCAoXGFwcGVuZGl4c2VjdGlvbik6IEZpeCBtaXNzcGVsbGVkIGRlZm4uCgpNb24gSnVsIDMxIDIzOjU3OjU3IDE5OTUgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KCgkqIHRleGluZm8udGV4IChcdHRmb250KTogRG9uJ3QgY2FsbCBcbm9oeXBoZW5hdGlvbi4KClN1biBKdWwgMzAgMTg6MzA6NDcgMTk5NSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgoKCSogdGV4aW5mby50ZXggKFx0b2NlbnRyeSk6IFVzZSBcdHVybm9mZmFjdGl2ZS4KClN1biBGZWIgIDUgMDU6MzQ6MTMgMTk5NSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Bwb2dvLmdudS5haS5taXQuZWR1PgoKCSogdGV4aW5mby50ZXggKFxib2xkYnJheG5vYW1wKTogTmV3IGZ1bmN0aW9uLgoJKFxkZWZ0eXBlZnVuYXJncyk6IFVzZSB0aGF0LCBub3QgXGJvbGRicmF4LgoKVHVlIEphbiAzMSAxMjoxNToyOCAxOTk1ICBLYXJsIEJlcnJ5ICA8a2FybEBjcy51bWIuZWR1PgoKICAgICAgICAqIHRleGluZm8udGV4IChcc2V0KTogVXNlIFxnZGVmLCBub3QgXHhkZWYuCgpTYXQgSmFuIDIxIDE2OjM5OjM2IDE5OTUgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAcG9nby5nbnUuYWkubWl0LmVkdT4KCgkqIHRleGluZm8udGV4OiBJbml0aWFsbHkgbWFrZSBfIGFuZCArIFxhY3RpdmUsCgl0aGVuIGxhdGVyIG1ha2UgdGhlbSBcb3RoZXIuCgkoXG90aGVyaWZ5YWN0aXZlKTogTmV3IGNvbW1hbmQuCgpUaHUgSmFuIDE5IDIxOjU5OjIyIDE5OTUgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KCgkqIHRleGluZm8udGV4IChcYWZvdXJ3aWRlKTogTmV3IGNvbW1hbmQuCgpNb24gSmFuIDE2IDA5OjI5OjM4IDE5OTUgIFN0ZXBoZW4gR2lsZGVhICA8Z2lsZGVhQHgub3JnPgoKCSogdGV4aW5mby50ZXg6IEluaXRpYWxseSBtYWtlICsgYW5kIF8gIm90aGVyIiBjaGFyYWN0ZXJzLgoJKFxmaXhiYWNrc2xhc2gsIFxldmVyeWpvYik6IE1ha2UgKyBhbmQgXyBhY3RpdmUgY2hhcmFjdGVycy4KClR1ZSBKYW4gMTAgMTk6MTY6MDkgMTk5NSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgoKCSogdGV4aW5mby50ZXg6IEF0IGJlZ2lubmluZywgXGlucHV0IHBsYWluIGlmIG5lY2Vzc2FyeS4KCShcZGVmdHlwZWZ1bmFyZ3MpOiBVc2UgXGJvbGRicmF4LCBub3QgXGZ1bmN0aW9ucGFyZW5zLgoKU3VuIERlYyAxOCAxNjo0MDoxMSAxOTk0ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+CgoJKiB0ZXhpbmZvLnRleCAoXGluZHNjKTogVXNlIGNzYzEwIChhdCA5cHQpLCBub3QgaW5kcm0uCgpNb24gT2N0IDMxIDAwOjUxOjIwIDE5OTQgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAcG9nby5nbnUuYWkubWl0LmVkdT4KCgkqIHRleGluZm8udGV4IChcY2hhbmdlcGFwZXJzaXplcyk6IEZpeCBkZWZpbml0aW9uIHN5bnRheC4KCShcZm9udHByZWZpeCk6IERlZmluZSBvbmx5IGlmIG5vdCB5ZXQgZGVmaW5lZC4KCgkqIHRleGluZm8udGV4IChcbWFyZ2luKTogRGVmaW5lIGEgbmV3IGluc2VydC4KCShcU0VUbWFyZ2luaW5kZXgpOiBJbml0aWFsaXplIHRvIFxyZWxheC4KCShcZG9pbmRleCk6IE9wdGlvbmFsbHkgcHV0IHRoZSBlbnRyeSBpbiB0aGUgbWFyZ2luLgoJKFxwYWdlY29udGVudHMpOiBQcmludCB0aGUgaW5kZXggZW50cmllcyBwdXQgaW4gdGhlIG1hcmdpbi4KClNhdCBPY3QgMjkgMTk6NTA6MTAgMTk5NCAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgoKCSogdGV4aW5mby50ZXggKFxhdXhoYXQpOiBOZXcgbWFjcm8uCgkoXGRvc2V0cSk6IFVzZSBcYXV4aGF0LgoJKHJlYWRpbmcgdGhlIGF1eCBmaWxlKTogR2l2ZSBeIGNhdGNvZGUgNy4KCldlZCBPY3QgMjYgMDM6Mjg6MDQgMTk5NCAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgoKCSogdGV4aW5mby50ZXggKFxzZXRmb250KTogTmV3IG1hY3JvLiAgVXNlIGl0IGZvciBzcGVjaWZ5aW5nCgltb3N0IG9mIHRoZSBmb250cyB0aGF0IGFyZSBub3JtYWxseSBjbSBmb250cy4KCShcZm9udHByZWZpeCk6IE5ldyBtYWNybywgbm9ybWFsbHkgYGNtJy4KCk1vbiBPY3QgMjQgMDE6Mjc6MDkgMTk5NCAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgoKCSogdGV4aW5mby50ZXggKFxzdGFydGNvbnRlbnRzKTogU2V0IGNhdGNvZGUgb2YgXi4KClRodSBPY3QgMTMgMDI6MTk6NDMgMTk5NCAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgoKCSogdGV4aW5mby50ZXggKFxpZmh0bWwsIFxodG1sLCBcZW5kZG90cywgXD8sIFwhKTogTmV3IGNvbW1hbmRzLgoKRnJpIFNlcCAxNiAxNjozMDo1MiAxOTk0ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+CgoJKiB0ZXhpbmZvLnRleCAoXGRlZmhlYWRlcnhjb25kKTogTmV3IG1hY3JvLgoJKFxkZWZ0eXBlZm5oZWFkZXJ4KTogVXNlIGRlZmhlYWRlcnhjb25kIHdoZW4gY2FsbGluZyBkZWZuYW1lLgoJKFxkZWZ0eXBlZnVuaGVhZGVyeCwgXGRlZnR5cGV2YXJoZWFkZXIsIFxkZWZ0eXBldnJoZWFkZXIpOiBMaWtld2lzZS4KCkZyaSBBdWcgMjYgMDM6MDg6MDggMTk5NCAgQW15IEhlbmRpY2tzb24gIDxhbXloQGFpLm1pdC5lZHU+CgoJKiB0ZXhpbmZvLnRleCAoXG11bHRpdGFibGUpOiBOZXcgY29tbWFuZC4KCk1vbiBBdWcgIDEgMTQ6Mjg6NTcgMTk5NCAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgoKCSogdGV4aW5mby50ZXggKFxjaGFuZ2VwYWdlc2l6ZXMsIFxhZm91cmxhdGV4KTogTmV3IG1hY3Jvcy4KClR1ZSBKdWwgMTIgMTE6NDU6NTggMTk5NCAgS2FybCBCZXJyeSAgKGthcmxAY3MudW1iLmVkdSkKCiAgICAgICAgKiB0ZXhpbmZvLnRleCAoXHF1b3RhdGlvbik6IFNldCBccGFyc2tpcCB0byB6ZXJvIHRvIGF2b2lkIGV4dHJhCiAgICAgICAgc3BhY2UgYmVsb3cgdGhlIGVudmlyb25tZW50LgoJKFxxdW90YXRpb24pOiBDbGVhbiB1cCBjb21tZW50cyBhbmQgaW5kZW50YXRpb24uCgpXZWQgSnVsIDEzIDA1OjM2OjQwIDE5OTQgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKCgkqIHRleGluZm8udGV4IChceHJlZlgpOiBQdXQgYmFjaywgYW5kIGNvcnJlY3QsIHRoZSB0ZXN0IG9mCglTRVR4cmVmLWF1dG9tYXRpYy1zZWN0aW9uLXRpdGxlLgoKVGh1IEp1bCAgNyAxNTo1Nzo1MiAxOTk0ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCgoJKiBTZXQgY2F0Y29kZXMgb2YgY2hhcnMgMTI4LTI1NSB0byBcb3RoZXIuCgpNb24gSnVsICA0IDE1OjMyOjQxIDE5OTQgIEthcmwgQmVycnkgIChrYXJsQGNzLnVtYi5lZHUpCgogICAgICAgICogdGV4aW5mby50ZXggKFx0aWUpOiBTZXQgXGNhdGNvZGUgb2YgQCB0byAxMSBiZWZvcmUgdXNpbmcgXEBNLgoKICAgICAgICAqIHRleGluZm8udGV4IChceHJlZlgpOiBVbmRvIFx0dXJub2ZmYWN0aXZlIHdoaWxlIHByaW50aW5nIHRoZSBub2RlCiAgICAgICAgbmFtZSwgc28gXyBpbiBub2RlIG5hbWVzIGRvZXNuJ3QgY29tZSBvdXQgYXMgdGhlIGRvdCBhY2NlbnQuCgpTYXQgSnVsICAyIDE0OjQ5OjI2IDE5OTQgIEthcmwgQmVycnkgIChrYXJsQGNzLnVtYi5lZHUpCgogICAgICAgICogdGV4aW5mby50ZXggKFx0aWUpOiBFbnN1cmUgd2UncmUgaW4gaG9yaXpvbnRhbCBtb2RlIGJlZm9yZSB0aGUKICAgICAgICBccGVuYWx0eS4KClR1ZSBNYXkgMTAgMDE6MjE6MjggMTk5NCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQoKCSogdGV4aW5mby50ZXggKFxkb25vZGVyZWYsIFx1bm51bWJub2RlcmVmLCBcYXBwZW5kaXhub2RlcmVmKToKCVNldCBcbGFzdG5vZGUgZ2xvYmFsbHkuCgpTdW4gQXByIDE3IDE1OjM1OjQzIDE5OTQgIEthcmwgQmVycnkgIChrYXJsQHJhLmNzLnVtYi5lZHUpCgogICAgICAgICogdGV4aW5mby50ZXggKFx+KTogRGVmaW5lIHRvIGJlIGEgdGllLgogICAgICAgIChccHRleHRpbGRlKTogTmV3IGRlZm4gdG8gc2F2ZSB0aGUgcGxhaW4ncyB0aWxkZSBhY2NlbnQuCiAgICAgICAgKFx0ZXgpOiBSZXN0b3JlIHBsYWluIHRpbGRlLgoKU3VuIE1hciAyNyAyMzozNToxNyAxOTk0ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCgoJKiB0ZXhpbmZvLnRleCAoXHNtYWxsYm9vayk6IFNldCBcZGVmYm9keWluZGVudCBhbmQgXGRlZnR5cGVtYXJnaW4uCgpTdW4gTWFyIDIwIDE5OjQ3OjU5IDE5OTQgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKCgkqIHRleGluZm8udGV4IChceHJlZlgpOiBEZWZpbmUgYW5kIHVzZSBcY29ycmVjdG5vZGVuYW1lLgoJKEB0dXJub2ZmYWN0aXZlKTogTW92ZSBhZnRlciBAIGJlY29tZXMgYXZhaWxhYmxlCglhbmQgdHVybiBvZmYgYmFja3NsYXNoIGFzIHdlbGwgYXMgb3RoZXIgY2hhcnMuICBVc2UgQHJlYWxiYWNrc2xhc2guCgkoQG5vcm1hbHR1cm5vZmZhY3RpdmUpOiBMaWtlIEB0dXJub2ZmYWN0aXZlIGJ1dCB1c2UgQG5vcm1hbGJhY2tzbGFzaC4KClNhdCBNYXIgMTkgMTI6MjY6MjUgMTk5NCAgS2FybCBCZXJyeSAgKGthcmxAY3MudW1iLmVkdSkKCiAgICAgICAgKiB0ZXhpbmZvLnRleCAoXHNpbmdsZXNwYWNlc2tpcCk6IEluY3JlYXNlIHRvIDEyLjVwdC4KICAgICAgICAoXHNpbmdsZXNwYWNlKTogQ2FsbCBcc2V0bGVhZGluZyBpbnN0ZWFkIG9mIGp1c3QgYXNzaWduaW5nIHRvCiAgICAgICAgXGJhc2VsaW5lc2tpcCwgc28gdGhlIHN0cnV0IGJveCB3aWxsIGJlIHJlc2V0LgogICAgICAgIChcc21hbGxsaXNweCk6IExpa2V3aXNlLgoKU3VuIE1hciAxMyAyMDozMjoyOCAxOTk0ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCgoJKiB0ZXhpbmZvLnRleCAoXGRvdHMpOiBDaGFuZ2UgYmFjayB0byBcbGRvdHMuCgpTYXQgTWFyIDEyIDIyOjM0OjEwIDE5OTQgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKCgkqIHRleGluZm8udGV4IChcaW5kZXhub2ZvbnRzKTogQWRkICUncyB0byBzdXBwcmVzcyBuZXdsaW5lcyBhZnRlciBcZGVmLgoKU2F0IEZlYiAyNiAxNTo1MTozNyAxOTk0ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCgoJKiB0ZXhpbmZvLnRleCAoXGRlZnRleGluZm92ZXJzaW9uKTogTmV3IG1hY3JvLgoJKFx0ZXhpbmZvdmVyc2lvbik6IERlZmluZSB1c2luZyBcZGVmdGV4aW5mb3ZlcnNpb24uCgpXZWQgSmFuIDI2IDEyOjQwOjUyIDE5OTQgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKCgkqIHRleGluZm8udGV4IChccHV0d29yZFNlZSwgXHB1dHdvcmRJbmZvLCBccHV0d29yZGZpbGUpCgkoXHB1dHdvcmRDaGFwdGVyLCBccHV0d29yZEFwcGVuZGl4LCBccHV0d29yZFNlY3Rpb24pCgkoXHB1dHdvcmRzZWN0aW9uLCBccHV0d29yZHBhZ2UpCgkoXHB1dHdvcmRUYWJsZW9mQ29udGVudHMsIFxwdXR3b3JkU2hvcnRDb250ZW50cyk6IE5ldyBtYWNyb3MuCglVc2VkIGluIHZhcmlvdXMgcGxhY2VzIGluc3RlYWQgb2YgZml4ZWQgd29yZHMuCgpNb24gSmFuIDI0IDIyOjUxOjM2IDE5OTQgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKCgkqIHRleGluZm8udGV4IChcaWdub3JlbW9yZWNvbW1hbmRzKTogVHVybiBvZmYgQGl0ZW0gYW5kIEBtZXNzYWdlLgoKVGh1IEphbiAyMCAxNzowMTo1MyAxOTk0ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCgoJKiB0ZXhpbmZvLnRleCAoXGluZGV4bm9mb250cyk6IFRyZWF0IGFjY2VudHMgYXMgZHVtbWllcy4KCVR1cm4gbW9kaWZpZWQgRXVyb3BlYW4gbGV0dGVycyBpbnRvIG9uZSBvciBtb3JlIG9yZGluYXJ5IGxldHRlcnMuCgpUdWUgSmFuIDE4IDE0OjU0OjMyIDE5OTQgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKCgkqIHRleGluZm8udGV4IChcaW5kZXhkdW1taWVzKTogSGFuZGxlIHRleCBhY2NlbnRzIGFuZCBFdXJvcGVhbiBsZXR0ZXJzLgoKV2VkIE5vdiAyNCAxNjoxMTo1MSAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCgoJKiB0ZXhpbmZvLnRleCAoXGRvdHMpOiBVc2UgJFwsJCBmb3Igc3BhY2luZy4KClN1biBOb3YgMjEgMjI6MTY6MjEgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQoKCSogdGV4aW5mby50ZXggKFxkb3RzKTogQXZvaWQgdXNpbmcgXGxkb3RzOyB1c2UgcGVyaW9kcyBhbmQga2Vybi4KCShcaW5kZXhkb3RmaWxsKTogVXNlIGl0YWxpYyBwZXJpb2RzLgoKRnJpIE5vdiAxOSAyMDo1MDozMSAxOTkzICBSb2xhbmQgSC4gUGVzY2ggIChwZXNjaEBhcHBsZS1ndW5raWVzLmdudS5haS5taXQuZWR1KQoKICAgICAgICAqIHRleGluZm8udGV4IChcZGVmdHlwZWZ1bmFyZ3MpOiB1c2UgXHRjbG9zZSByYXRoZXIgdGhhbiBcY29kZSB0bwogICAgICAgIGF2b2lkIHNpZGUgZWZmZWN0cyBvbiBhY3RpdmUgY2hhcnMKClR1ZSBTZXAgMjggMTY6MDE6NTggMTk5MyAgUm9sYW5kIEguIFBlc2NoICAocGVzY2hAYXBwbGUtZ3Vua2llcy5nbnUuYWkubWl0LmVkdSkKCgkqIHRleGluZm8udGV4IChcb2JleWVkc3BhY2UgZGVmbik6IHJlbW92ZSBibGFuayBhZnRlciBcc2Vwc3BhY2VzCgkobGVmdCBkZXN0cnVjdGl2ZSBwZW5hbHR5IGluIHZlcnRpY2FsIGxpc3QpCgpNb24gQXVnIDMwIDE0OjE3OjI3IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiB0ZXhpbmZvLnRleCAoXHNldHJlZiwgXHVubnVtYnNldHJlZiwgXGFwcGVuZGl4c2V0cmVmKTogVW5jb21tZW50CglcZG9zZXRxIGZvciB0aXRsZS4KCShcWXRpdGxlKTogRGVmaW5lIGFzIFx0aGlzc2VjdGlvbiBpbnN0ZWFkIG9mIFx0aGlzY2hhcHRlci4KCShceHJlZlgpOiBJZiB0aGVyZSBpcyBubyBwcmludGVkLXRpdGxlIGFyZyBnaXZlbiwgYW5kIEBpZnNldAoJeHJlZi1hdXRvbWF0aWMtc2VjdGlvbi10aXRsZSwgdHJ5IHRvIHVzZSB0aGUgcmVhbCBzZWN0aW9uIHRpdGxlLgoKVHVlIEp1bCAyNyAxMjo0NzoyNCAxOTkzICBDaGFybGVzIEhhbm55bSAgKG15Y3JvZnRAdHJpbml0eS5nbnUuYWkubWl0LmVkdSkKCgkqIHRleGluZm8udGV4IChcaWZpdGVteG5lZWRzbmVnYXRpdmV2c2tpcCk6IE5ldyBcaWY7IHNldCBpbW1lZGlhdGVseQoJZm9sbG93aW5nIGEgc2hvcnQgXGl0ZW0uCgkoXGl0ZW14cGFyKTogXHBhciBhbmQgdGhlbiBpZiBcaWZpdGVteG5lZWRzbmVnYXRpdmV2c2tpcCBpcyBzZXQsIGRvCglhIFx2c2tpcC1ccGFyc2tpcC4KCShcaW50ZXJuYWxCaXRlbXgsIFxpbnRlcm5hbEJ4aXRlbXgsIFxpbnRlcm5hbEJraXRlbXgpOiBVc2UgXGl0ZW14cGFyCglyYXRoZXIgdGhhbiBccGFyLgoJKFxpdGVtenp6KTogU2V0IFxpZml0ZW14bmVlZHNuZWdhdGl2ZXZza2lwIGFzIGFwcHJvcHJpYXRlLgoKVGh1IEp1bCAyMiAxNjowODozMyAxOTkzICBDaGFybGVzIEhhbm51bSAgKG15Y3JvZnRAdHJpbml0eS5nbnUuYWkubWl0LmVkdSkKCgkqIHRleGluZm8udGV4IChcdGl0bGV6enosIFxmaW5pc2h0aXRsZXBhZ2UpOiBFeHBsaWNpdGx5IG1ha2UgaHJ1bGVzCgloYXZlIGEgd2lkdGggb2YgXGhzaXplIHNvIHRoZXkgYXJlbid0IHRvbyBsb25nIGluIHNtYWxsYm9vayBmb3JtYXQuCgpUdWUgSnVuIDI5IDE1OjU2OjE5IDE5OTMgIFJvbGFuZCBILiBQZXNjaCAgKHBlc2NoQGZvd2FudG9uLmN5Z251cy5jb20pCgoJKiB0ZXhpbmZvLnRleCAoXGRlZnR5cGVmbmhlYWRlcngpOiBjYWxsIFxub3JtYWxwYXJlbnMgdG8gcGVybWl0Cglub3JtYWwgdHlwZXNldHRpbmcgb2Ygc3RyaW5ncyAoZS5nLiBmb3IgQysrIGRvY24pIGNvbnRhaW5pbmcgYCYnCgpGcmkgSnVuIDI1IDE0OjA4OjQ0IDE5OTMgIFJvbGFuZCBILiBQZXNjaCAgKHBlc2NoQGZvd2FudG9uLmN5Z251cy5jb20pCgoJKiB0ZXhpbmZvLnRleCAoXG5lc3RlZGlnbm9yZSk6IHR1cm4gb2ZmIFxpbmQuLi4gZm9udHMgdG9vCgkocHJpbWFyaWx5IGZvciB1c2Ugd2l0aGluIEBzbWFsbGV4YW1wbGUpCgpXZWQgSnVuIDIzIDExOjU4OjQ4IDE5OTMgIEppbSBLaW5nZG9uICAoa2luZ2RvbkB3b21iYXQuZ251LmFpLm1pdC5lZHUpCgoJKiBsb25nb3B0cy50YWJsZTogVXBkYXRlIEdEQiBvcHRpb25zLgoKU3VuIEp1biAyMCAyMjowMDoxMSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogbGdwbC50ZXhpbmZvOiBVc2UgQHNtYWxsZXhhbXBsZSBpbnN0ZWFkIG9mIEBleGFtcGxlLiAgUmVmb3JtYXQKCWV4YW1wbGUgZGlzY2xhaW1lciB0byBhdm9pZCBvdmVyZnVsbCBcaGJveC4KCk1vbiBKdW4gMTQgMDQ6MDk6NDcgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQoKCSogdGV4aW5mby50ZXggKFxlbnRyeSk6IERvbid0IG1ha2UgYSBsaW5lIG9mIGRvdHMKCWlmIHRoZXJlIGFyZSBubyBwYWdlIG51bWJlcnMuCgpGcmkgSnVuIDExIDE2OjM1OjIzIDE5OTMgIEthcmwgQmVycnkgIChrYXJsQGNzLnVtYi5lZHUpCgoJKiB0ZXhpbmZvLnRleCAoXGRlZnBhcnNlYm9keWNvbW1vbik6IE5ldyBtYWNybyBmcm9tIFxkZWZ2cnBhcnNlYm9keS4KCShcZGVmdHBwYXJzZWJvZHkpOiBDYWxsIGl0OyBjYW4ndCB1c2UgXGRlZnZycGFyc2Vib2R5LgoJKFxkZWZ0cGhlYWRlcmxpbmUsIFxyZW1vdmVlbXB0eWJyYWNlcyk6IE5ldyBtYWNyb3MuCgpTYXQgTWF5ICA4IDEwOjQ5OjI1IDE5OTMgIEthcmwgQmVycnkgIChrYXJsQGNzLnVtYi5lZHUpCgoJKiB0ZXhpbmZvLnRleCAoXGl0ZW16enopOiBPbmx5IGNoYW5nZSBccGFyc2tpcCB0ZW1wb3JhcmlseSwgYW5kCgl1bnNraXAgYnkgaXQgbGF0ZXIgaWYgdGhlIGl0ZW0gdGV4dCBpcyBvbiBpdHMgb3duIGxpbmUuCgoJKiB0ZXhpbmZvLnRleCAoXHRhYmxleik6IERvIFxhZnRlcmVudmJyZWFrIGJlZm9yZSB0aGUgXGVuZGdyb3VwLAoJc28gdGhlIFxwYXJza2lwIHZhbHVlIGlzIHRoZSB0YWJsZSdzLCBub3QgdGhlIHN1cnJvdW5kaW5nIHRleHQncy4KCShcdnRhYmxlLCBcZnRhYmxlLCBcaXRlbWl6ZXkpOiBMaWtld2lzZS4KCU5vdGU6IGZvciBtb3N0IGVudmlyb25tZW50cywgXG5vbmZpbGxmaW5pc2ggZGVhbHMgd2l0aCB0aGlzLgoKCSogdGV4aW5mby50ZXggKFxzbWFsbGxpc3ApOiBOZXcgZGVmaW5pdGlvbiBmb3Igbm9uLXNtYWxsIGNhc2UsIGEKCWxhIEBzbWFsbGV4YW1wbGUuCgoJKiB0ZXhpbmZvLnRleDogRGVsZXRlIFxtZXNzYWdle30gYXQgYmVnaW5uaW5nOyBpdCBkb2VzIG5vdGhpbmcuCgoJKFRoZXNlIGNoYW5nZXMgYXJlIGFsbCB0cnlpbmcgdG8gbWFrZSBzcGFjZSBhYm92ZSBhbmQgYmVsb3cKCWVudmlyb25tZW50cyBtb3JlIGVxdWFsLikKCSogdGV4aW5mby50ZXggKFxzaW5nbGVzcGFjZSk6IERvbid0IGluc2VydCBhIGtlcm4uCgkoXGdyb3VwKTogRG8gXG9mZmludGVybGluZXNraXAsIGFuZCByZXNldCBccGFyIHRvIGluc2VydCBhIGJsYW5rCglsaW5lJ3Mgd29ydGggb2Ygc3BhY2UuCgkoXGxpc3BwYXIpOiBEZWxldGUgbWVhbmluZ2xlc3MgY2FsbCB0byBcb2JleXNwYWNlcyBiZWZvcmUgbWFraW5nCgl0aGUgZGVmaW5pdGlvbi4KCShcRWxpc3AgW3RoZSBvdXRlciBvbmVdKTogUmVuYW1lIHRvIFxub25maWxsZmluaXNoLCBhbmQgZW5kIHRoZQoJcGFyYWdyYXBoIGJlZm9yZSB0aGUgZ3JvdXAuCgkoXGxpc3ApOiBTZXQgXEVsaXNwICh0aGUgaW5uZXIgb25lKSB0byBcbm9uZmlsbGZpbmlzaAoJKFxleGFtcGxlLCBcc21hbGxleGFtcGxlLCBcZGlzcGxheSwgXGZvcm1hdCwgXGZsdXNobGVmdCwKCVxmbHVzaHJpZ2h0LCBccXVvdGF0aW9uKTogVXNlIFxub25maWxsZmluaXNoLgoJKFxsaW5lc2tpcGZhY3RvciwgXHN0cnV0e2hlaWdodCxkZXB0aH1wZXJjZW50KTogU2V0IHRvIG1vcmUgZXhhY3QKCXZhbHVlcy4KCShcc2V0bGVhZGluZyk6IFNldCBcbm9ybWFsbGluZXNraXAgYW5kIGNhbGwgXG5vcm1hbGJhc2VsaW5lcywgZm9yCgljbGVhbmxpbmVzcy4KClRodSBNYXkgIDYgMTY6MDA6NTkgMTk5MyAgSmVmZnJleSBPc2llciAgKGplZmZyZXlAZGVuZWIuY3lnbnVzLmNvbSkKCgkqIHRleGluZm8udGV4IChcaWdub3JlbW9yZWNvbW1hbmRzKTogVHVybiBvZmYgXHNldCBhbmQgXGNsZWFyLgoKVHVlIEFwciAyMCAxNzowMjozNCAxOTkzICBSb2xhbmQgSC4gUGVzY2ggIChwZXNjaEBhcHBsZS1ndW5raWVzLmdudS5haS5taXQuZWR1KQoKCSogdGV4aW5mby50ZXggKFxjb2RleCk6IERlbGV0ZSBzcGFjZS4KClRodSBBcHIgMTUgMTQ6NTk6MDQgMTk5MyAgUm9sYW5kIEguIFBlc2NoICAocGVzY2hAZm93YW50b24uY3lnbnVzLmNvbSkKCgkqIHRleGluZm8udGV4IChcaWdub3JlbW9yZWNvbW1hbmRzKTogVHVybiBvZmYgQHJhaXNlc2VjdGlvbnMsIEB1cCwKCUBsb3dlcnNlY3Rpb25zLCBAZG93biB3aXRoaW4gZmFsc2UgY29uZGl0aW9uYWxzLgoKU3VuIEFwciAxOCAwNDozMzoxMyAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCgoJKiB0ZXhpbmZvLnRleCAoXGNvZGUpOiBEZWZpbmUgLSBhbmQgXyB0byBwZXJtaXQgbGluZS1icmVha2luZwoJZGVzcGl0ZSB0aGUgZmFjdCB0aGF0IGh5cGhlbmF0aW9uIGlzIGRpc2FibGVkLgoJKFxjb2RleCwgXGNvZGVkYXNoLCBcY29kZXVuZGVyKTogTmV3IG1hY3Jvcy4KClR1ZSBNYXIgMTYgMTg6MTk6MTYgMTk5MyAgUm9sYW5kIEguIFBlc2NoICAocGVzY2hAZm93YW50b24uY3lnbnVzLmNvbSkKCgkqIHRleGluZm8udGV4IChcaWdub3JlbW9yZWNvbW1hbmRzKTogVHVybiBvZmYgQHByaW50aW5kZXggd2l0aGluCglmYWxzZSBjb25kaXRpb25hbHMuCgpTdW4gTWFyIDE0IDEwOjQ3OjM2IDE5OTMgIEthcmwgQmVycnkgIChrYXJsQGNzLnVtYi5lZHUpCgoJKiB0ZXhpbmZvLnRleCAoXGZvb3Rub3RlKTogRG9uJ3QgYm90aGVyIHRvIHRha2UgdGhlIGZvb3Rub3RlIHRleHQKCWFzIGFuIGFyZ3VtZW50LCBhbmQgaGVuY2UgZG9uJ3QgZGVmaW5lIGFzIFxsb25nLgogICAgICAgIChcZm9vdG5vdGV6enopOiBEbyBcZm9vdHN0cnV0IGFmdGVyIHdlIHN0YXJ0IHRoZSBwYXJhZ3JhcGguCiAgICAgICAgKEFsc28gcmVmb3JtYXQgdGhlc2UgbWFjcm9zIHRvIG1ha2UgdGhlbSBlYXNpZXIgdG8gcmVhZC4pCgpGcmkgRmViIDI2IDEzOjAyOjQ0IDE5OTMgIFJvbGFuZCBILiBQZXNjaCAgKHBlc2NoQGZvd2FudG9uLmN5Z251cy5jb20pCgoJKiB0ZXhpbmZvLnRleCAoQGluY2x1ZGUpOiBVc2UgXHRoaXNmaWxlIHJhdGhlciB0aGFuICMxIGFzIFxpbnB1dCBhcmcuCgoJKiB0ZXhpbmZvLnRleCAoXHJlYWRhdXhmaWxlKTogQ2FsbCBcd2FybmVkb2JzdHJ1ZSB0byB0dXJuIG9mZiB3YXJuaW5nCgkJICAgICAgcmUgVGVYIDMuMCBvbiBzZWNvbmQgYW5kIHN1YnNlcXVlbnQgcnVucy4KClRodSBGZWIgMjUgMTg6MDM6MzggMTk5MyAgS2FybCBCZXJyeSAgKGthcmxAY3MudW1iLmVkdSkKCgkqIHRleGluZm8udGV4IChccmVhbGV2ZXJ5cGFyKTogRGVsZXRlLCBhcyBpdCB3YXMgdW51c2VkLgoKCSogdGV4aW5mby50ZXggKFxncm91cCk6IERvIGEgXHN0cnV0IGluIFxldmVyeXBhci4KCk1vbiBGZWIgMjIgMTc6MTA6MDYgMTk5MyAgS2FybCBCZXJyeSAgKGthcmxAY2xhdWRlLmNzLnVtYi5lZHUpCgoJKiB0ZXhpbmZvLnRleCAoXG9iZXllZHNwYWNlKTogRGVmaW5lIHRvIGJlIHdoYXRldmVyIFxzZXBzcGFjZXMKCWRvZXMgKGFuZCBtb3ZlIHRoZSBkZWZpbml0aW9uIHRvIGFmdGVyIFxzZXBzcGFjZXMpLgoKV2VkIEZlYiAxNyAwMTo1NToyMCAxOTkzICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCgoJKiB0ZXhpbmZvLnRleCAoXG5vbmZpbGxzdGFydCk6IERvIFxzaW5nbGVzcGFjZXMgYW5kIFxsZXRccGFyCgliZWZvcmUgXG9iZXlsaW5lcy4KCkZyaSBGZWIgMTIgMTI6MzI6NTYgMTk5MyAgUm9sYW5kIEguIFBlc2NoICAocGVzY2ggYXQgZWxfYm9zcXVlLmN5Z251cy5jb20pCgoJKiB0ZXhpbmZvLnRleCAoXG9ic3RleHdhcm4pOiBpc3N1ZSBtZXNzYWdlIHJlIGJ1ZyBpbiBUZVggMy4wLgogICAgICAgICAgKFxudWxsZm9udCk6IGNvbW1lbnRlZC1vdXQgcmVkZWZpbml0aW9uLCB0byBlbmFibGUgdy9UZVggMy4wLgogICAgICAgICAgKFxuZXN0ZWRpZ25vcmUpOiBjYWxsIFxvYnN0ZXh3YXJuIGZvciBtYW51YWxzIHRoYXQgbWF5IHRyaXAgYnVnCgoJKiB0ZXhpbmZvLnRleCAoXG5lc3RlZGlnbm9yZSk6IGF2b2lkIEB0ZXggY29udGVudHMgd2l0aCBcZG9pZ25vcmUKClRodSBGZWIgMTEgMTU6NDE6MDYgMTk5MyAgUm9sYW5kIEguIFBlc2NoICAocGVzY2hAZm93YW50b24uY3lnbnVzLmNvbSkKCgkqIHRleGluZm8udGV4IChcaW5kZXhkdW1taWVzKTogZW5hYmxlIEBkZm4gYW5kIEBlbXBoIGluIGluZGV4IGVudHJpZXMKClRodSBGZWIgMTEgMTM6MzI6MzIgMTk5MyAgUm9sYW5kIEguIFBlc2NoICAocGVzY2hAZm93YW50b24uY3lnbnVzLmNvbSkKCgkqIHRleGluZm8udGV4IChcaWdub3JlbW9yZWNvbW1hbmRzKTogaWdub3JlIEBpbmNsdWRlIHdpdGhpbgogICAgICAgICAgZmFpbGluZyBjb25kaXRpb25hbHMKClNhdCBGZWIgIDYgMTk6NDQ6MjggMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQoKCSogdGV4aW5mby50ZXggKFxuZXN0ZWRpZ25vcmUpOiBTZXQgXGdsb2JhbGRlZnMtLW1ha2UgYWxsIGRlZnMgbG9jYWwuCgpUdWUgRmViICAyIDE1OjU3OjM3IDE5OTMgIFJvbGFuZCBILiBQZXNjaCAgKHBlc2NoQGZvd2FudG9uLmN5Z251cy5jb20pCgoJKiB0ZXhpbmZvLnRleCAoQHJhaXNlc2VjdGlvbnMsIEBsb3dlcnNlY3Rpb25zKTogbmV3IGNvbW1hbmRzLgoJKiAoQHVwLCBkb3duKTogb3JpZ2luYWwgQkZveCBzeW5vbnltcyBmb3IgYWJvdmUuCiAgICAgICAgKiAoXG51bWhlYWQsIFxhcHBoZWFkLCBcdW5ubWhlYWQpOiBpbnRlcm5hbCBtYWNyb3MgdG8gbWFwIGhlYWRpbmdzCgl0byBhcHByb3ByaWF0ZSBsZXZlbAoJKiAoQG53bm9kZSk6IG5ldyBzeW5vbnltIGZvciBAbm9kZSwgdXNlZCBpbiBuZXdlc3QKCW1ha2VpbmZvCgpUdWUgSmFuIDI2IDE3OjA1OjAyIDE5OTMgIFJvbGFuZCBILiBQZXNjaCAgKHBlc2NoQGZvd2FudG9uLmN5Z251cy5jb20pCgoJKiB0ZXhpbmZvLnRleCAoXGluY2x1ZGUpOiBhdm9pZCBncm91cCBhcm91bmQgZmlsZSBjb250ZW50cwoKVHVlIEphbiAxOSAxODo1ODo1NiAxOTkzICBSb2xhbmQgSC4gUGVzY2ggIChwZXNjaEBmb3dhbnRvbi5jeWdudXMuY29tKQoKCSogdGV4aW5mby50ZXggKFxpZ25vcmVtb3JlY29tbWFuZHMsIHVzZWQgaW4gXG5lc3RlZGlnbm9yZSk6IGFsc28KCWlnbm9yZSBjcm9zcy1yZWYgY29tbWFuZHMgYW5kIFxzZXR0aXRsZQogICAgICAgIChcc2V0eXl5LCB1c2VkIGluIEBzZXQpOiBtYWtlIGRlZmluaXRpb25zIGdsb2JhbAogICAgICAgIChcY2xlYXJ4eHgsIHVzZWQgaW4gQGNsZWFyKTogY2xlYXIgZGVmaW5pdGlvbnMgZ2xvYmFsbHkKClRodSBKYW4gMTQgMTc6NDM6MzIgMTk5MyAgTWljaGFlbCBJIEJ1c2huZWxsICAobWliQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogdGV4aW5mby50ZXg6IEFkZGVkIFxzaG9ydHRpdGxlcGFnZS4KClNhdCBKYW4gIDIgMTU6MDE6NDUgMTk5MyAgS2FybCBCZXJyeSAgKGthcmxAY3MudW1iLmVkdSkKCgkqIHRleGluZm8udGV4IChcdGNsb3NlKTogVXNlIFxzcGFjZXNraXAgaW5zdGVhZCBvZiBtb2RpZnlpbmcKCVxmb250ZGltZW4ncyB0byBub3JtYWxpemUgdGhlIGludGVyd29yZCBzcGFjZS4KCgkqIHRleGluZm8udGV4IChcdCwgXGtleSwgXHRjbG9zZSk6IFVzZSBcaHlwaGVuY2hhciBpbnN0ZWFkIG9mCglcZXhoeXBoZW5wZW5hbHR5LCB0byB0dXJuIG9mZiBoeXBoZW5hdGlvbiBmb3IgcmVhbC4KICAgICAgICAoXHtubyxyZXN0b3JlfWh5cGhlbmF0aW9uKTogTmV3IG1hY3Jvcy4KClNhdCBKYW4gIDIgMTU6MDE6NDUgMTk5MyAgS2FybCBCZXJyeSAgKGthcmxAY3MudW1iLmVkdSkKCgkqIHRleGluZm8udGV4IChcdCwgXGtleSwgXHRjbG9zZSk6IFVzZSBcaHlwaGVuY2hhciBpbnN0ZWFkIG9mCglcZXhoeXBoZW5wZW5hbHR5LCB0byB0dXJuIG9mZiBoeXBoZW5hdGlvbiBmb3IgcmVhbC4KICAgICAgICAoXHtubyxyZXN0b3JlfWh5cGhlbmF0aW9uKTogTmV3IG1hY3Jvcy4KClR1ZSBKYW4gIDUgMTk6MTU6NDYgMTk5MyAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQoKCSogdGV4aW5mby50ZXggKFxkZWZ0cHBhcnNlYm9keSk6IE1ha2Ugc3lub255bW91cyB3aXRoIFxkZWZ2cnBhcnNlYm9keS4KClN1biBEZWMgMjcgMDk6NDA6MDggMTk5MiAgS2FybCBCZXJyeSAgKGthcmxAY3MudW1iLmVkdSkKCgkqIHRleGluZm8udGV4IChcaW5mb3JlZiwgXGluZm9yZWZ6enopOiBVc2UgdGhlIFxpZ25vcmVzcGFjZXMKCXByaW1pdGl2ZSBpbnN0ZWFkIG9mIFxsb3Nlc3BhY2UuCiAgICAgICAgKFxsb3Nlc3BhY2UpOiBEZWxldGUuCgoJKiB0ZXhpbmZvLnRleCAoXG1lbnUsIFxkaXJlbnRyeSk6IEhhbmRsZSBsaWtlIFxpZmluZm8uCgoJKiB0ZXhpbmZvLnRleCAoXHVubWF0Y2hlZGVuZGVycm9yLCBcZGVmaW5ldW5tYXRjaGVkZW5kKTogTmV3IG1hY3Jvcy4KICAgICAgICAoXGVuZHh4eCk6IENhbGwgaXQsIGluc3RlYWQgb2YganVzdCBkb2luZyBpdCBpbmxpbmUuCiAgICAgICAgKFxjb25kaXRpb25hbHN1Y2NlZWQsIFxuZWNlKTogTW9yZSBuZXcgbWFjcm9zLgogICAgICAgIChcaWZ0ZXgpOiBDYWxsIFxjb25kaXRpb25hbHN1Y2NlZWQuCiAgICAgICAgKFxFaWZ0ZXgpOiBEZWZpbmUgdG8gZ2l2ZSBhbiBlcnJvciBhdCB0aGUgb3V0ZXIgbGV2ZWwuCgoJKiB0ZXhpbmZvLnRleCAoXGlnbm9yZW1vcmVjb21tYW5kcywgXG5lc3RlZGlnbm9yZSk6IE5ldyBtYWNyb3MuCiAgICAgICAgKFxpZnNldCwgXGlmY2xlYXIpOiBFeHBhbmQgYSBtYWNybyBvbiBzdWNjZXNzIGFzIHdlbGwgYXMgZmFpbHVyZTsKICAgICAgICBhbHNvIHN3aXRjaCB0byB1c2luZyBleHBhbnNpb24gaW5zdGVhZCBvZiBhc3NpZ25tZW50cyB0byBhY3QgYWZ0ZXIKICAgICAgICB0aGUgY29uZGl0aW9uYWwuCiAgICAgICAgKFxpZntzZXQsY2xlYXJ9c3VjY2VlZCk6IENhbGwgXGNvbmRpdGlvbmFsc3VjY2VlZC4KICAgICAgICAoXGlme3NldCxjbGVhcn1mYWlsKTogQ2FsbCBcbmVzdGVkaWdub3JlIGluc3RlYWQgb2YgXGRvaWdub3JlLgoKCSogdGV4aW5mby50ZXggKFxjbGVhcik6IERvbid0IGluc2VydCBhIHNwdXJpb3VzIHNwYWNlLgoKCSogdGV4aW5mby50ZXggKFx2YWx1ZSk6IFB1dCBjb21tZW50IG5leHQgdG8gZGVmaW5pdGlvbi4KCgkqIHRleGluZm8udGV4IChcc2V0eXl5KTogQ2FsbCBcc2V0enp6LCBhbmQgZGVmaW5lIHRoZSB2YXJpYWJsZSBhcwoJc2ltcGx5IHRoZSBwYXJhbWV0ZXIsIG5vIFx1bnNraXAuCiAgICAgICAgKFxzZXR6enopOiBOZXcgbWFjcm87IGRvIG5vdCBnbG9iYWxseSBkZWZpbmUgdGhlIHZhcmlhYmxlLgoKVGh1IERlYyAgMyAxNzoyNDowNSAxOTkyICBSb2xhbmQgSC4gUGVzY2ggIChwZXNjaEBmb3dhbnRvbi5jeWdudXMuY29tKQoKCSogdGV4aW5mby50ZXggKGNyb3BwYWdlb3V0KTogdXNlIHNhbWUgZXNjYXBlLWNoYXIgc3dpdGNoaW5nIGFzCglkZWZhdWx0IG91dHB1dCByb3V0aW5lLiAgUGVybWl0cyB1c2luZyBfIGluIFRPQyBlbnRyaWVzLgoKRnJpIE5vdiAxMyAxNzozNTozOCAxOTkyICBDaGFybGVzIEhhbm51bSAgKG15Y3JvZnRAZ251LmFpLm1pdC5lZHUpCgoJKiB0ZXhpbmZvLnRleCAoaW5kZXhpbmcpOiBSZXdyb3RlIGRvdWJsZS1jb2x1bW4gbW9kZSB0byBmaXggYQoJcmFyZSBicmVha2FnZS4KClN1biBPY3QgMjUgMDc6MTM6MzEgMTk5MiAgS2FybCBCZXJyeSAgKGthcmxAY3MudW1iLmVkdSkKCgkqIHRleGluZm8udGV4IChcb2JleWVkc3BhY2UpOiBObyBuZWVkIHRvIGRlZmluZSB3aXRoIFxnZGVmLCB3ZSdyZQoJYXQgdGhlIG91dGVyIGxldmVsLgoKRnJpIE9jdCAxNiAxODowNDo0MCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIGxncGwudGV4aW5mbzogQ2hhbmdlICJUaGlzIHByb2dyYW0iIHRvICJUaGlzIGxpYnJhcnkiIGluIGV4YW1wbGUKCWNvcHlpbmcgbm90aWNlLgoKU2F0IE9jdCAxMCAwOTo0Mzo0NSAxOTkyICBLYXJsIEJlcnJ5ICAoa2FybEBjcy51bWIuZWR1KQoKCSogdGV4aW5mby50ZXggKFxidWxsZXQsIFxtaW51cyk6IFVzZSBcaW1wbGljaXRtYXRoIGluc3RlYWQgb2YgJC4KCkZyaSBPY3QgIDIgMDg6MzU6NTEgMTk5MiAgS2FybCBCZXJyeSAgKGthcmxAY3MudW1iLmVkdSkKCgkqIHRleGluZm8udGV4IChcRWdyb3VwKTogRG9uJ3QgZG8gdGhlIFxzdHJ1dCBhbmQgXG5vaW50ZXJsaW5lc2tpcC4KClNhdCBTZXAgMjYgMDk6MDg6NTkgMTk5MiAgS2FybCBCZXJyeSAgKGthcmxAY3MudW1iLmVkdSkKCiAgICAgICAgKiB0ZXhpbmZvLnRleCAoXGRvaWdub3JlLCBcZW5kZG9pZ25vcmUpOiBOZXcgbWFjcm9zLgogICAgICAgIChcaWZpbmZvKTogQ2FsbCBcZG9pZ25vcmUuCiAgICAgICAgKFxpZnhpbmZveHh4KTogRGVsZXRlZC4KCShcaWdub3JlLCBcaWZzZXRmYWlsLCBcaWZjbGVhcmZhaWwpOiB1c2UgXGRvaWdub3JlLgoKICAgICAgICAqIHRleGluZm8udGV4IChcdW5udW1iZXJlZCk6IEV4cGFuZCB0aGUgYXJnIG9ubHkgb25jZSBmb3IgdGhlIFxtZXNzYWdlLgoKICAgICAgICAqIHRleGluZm8udGV4IChcZGVmdHBwYXJzZWJvZHksIFxwYXJzZXRwaGVhZGVybGluZSk6IE5ldyBtYWNyb3MuCiAgICAgICAgKFxkZWZ0cCk6IENhbGwgXGRlZnRwcGFyc2Vib2R5LgoKVGh1IFNlcCAyNCAxMDoxMjo0NSAxOTkyICBLYXJsIEJlcnJ5ICAoa2FybEBjcy51bWIuZWR1KQoKICAgICAgICAqIHRleGluZm8udGV4IChcZW50cnkpOiBEbyBccGFyIGZpcnN0OyBhZGQgY29tbWVudHMuCiAgICAgICAgKFxzaG9ydHtjaGFwLHVubnVtYmVyZWR9ZW50cnksXGRve2NoYXAsc2VjLHN1YnNlYyxzdWJzdWJzZWN9ZW50cnkpOgogICAgICAgICAgQ2FsbCBcdG9jZW50cnksIGluc3RlYWQgb2YgdXNpbmcgXHZib3guCiAgICAgICAgKFx0b2NlbnRyeSk6IE5ldyBtYWNyby4KClNhdCBTZXAgMTkgMTQ6MzY6MTEgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQoKCSogdGV4aW5mby50ZXggKFxgLCBcJyk6IERlZmluaXRpb25zIGRlbGV0ZWQuCgpGcmkgU2VwIDE4IDE0OjMzOjA5IDE5OTIgIFJvbGFuZCBILiBQZXNjaCAgKHBlc2NoQGN5Z251cy5jb20pCgoJKiB0ZXhpbmZvLnRleCAoXGlmc2V0LCBcaWZjbGVhcik6IFN0YW5kYXJkaXplIGNhdGNvZGUgb2Ygc3BhY2UgYXMKCWZvciBcaWdub3JlLgoKRnJpIFNlcCAxMSAxNToyNTowMSAxOTkyICBLYXJsIEJlcnJ5ICAoa2FybEBoYXlsZXkpCgogICAgICAgICogdGV4aW5mby50ZXggKFxmaW5hbG91dCk6IE1vdmUgb3V0IG9mIGZpbmFsIHNlY3Rpb24gb2YgZmlsZSwKICAgICAgICAgIHdoaWNoIGNsYWltcyBub3QgdG8gZGVmaW5lIG5ldyBjb250cm9sIHdvcmRzLgoKICAgICAgICAqIHRleGluZm8udGV4IChcc2V0bGVhZGluZyk6IE5ldyBtYWNyby4KICAgICAgICAob3V0ZXIgbGV2ZWwsIEBzbWFsbGJvb2ssIEBhZm91cnBhcGVyKTogQ2FsbCBpdCwgaW5zdGVhZCBvZgogICAgICAgIHNldHRpbmcgXGJhc2VsaW5lc2tpcCBkaXJlY3RseS4KCiAgICAgICAgKiB0ZXhpbmZvLnRleCAoXHwpOiBOZXcgZGVmaW5pdGlvbiBmb3IgY2hhbmdlYmFycy4KClR1ZSBTZXAgIDEgMTc6MzI6NDggMTk5MiAgS2FybCBCZXJyeSAgKGthcmxAaGF5bGV5KQoKICAgICAgICAqIHRleGluZm8udGV4IChcYmVnaW5kb3VibGVjb2x1bW5zKTogRXhhY3RseSBkb3VibGUgXHZzaXplLgoKU2F0IEF1ZyAyOSAxMDoxMjoxNiAxOTkyICBLYXJsIEJlcnJ5ICAoa2FybEBoYXlsZXkpCgogICAgICAgICogdGV4aW5mby50ZXggKFxncm91cCk6IERlZmluZSBcRWdyb3VwIHRvIHVzZSBzdHJ1dHMgaW5zdGVhZCBvZgogICAgICAgICAgbGV0dGluZyBUZVggZG8gaXRzIG93biBpbnRlcmxpbmUgc3BhY2luZy4KCiAgICAgICAgKiB0ZXhpbmZvLnRleCAoXHtyZW1vdmUsaWdub3JlfWFjdGl2ZXNwYWNlcyk6IE5ldyBtYWNyb3MuCiAgICAgICAgKFxlbmQpOiBDYWxsIFxyZW1vdmVhY3RpdmVzcGFjZXM7IGdpdmUgdGhlIGNvcnJlY3QgZXJyb3IgbWVzc2FnZXM7CiAgICAgICAgICBkb24ndCB0cnkgdG8gZXhwYW5kIGEgbm9uZXhpc3RlbnQgXEUuLi4gbWFjcm8uCgogICAgICAgICogdGV4aW5mby50ZXggKFxFTXNpbXBsZSk6IEVuZCB0aGUgaGVscCBtZXNzYWdlIHdpdGggYSBwZXJpb2QuCgogICAgICAgICogdGV4aW5mby50ZXggKFxnb2JibGUpOiBOZXcgbWFjcm8uCiAgICAgICAgKFxsaXNwKTogQ2FsbCBpdCAoaW5zdGVhZCBvZiBkZWZpbmluZyBpdCBldmVyeSB0aW1lKS4KICAgICAgICAoXGV4YW1wbGUsIFxzbWFsbGV4YW1wbGUpOiBEZWZpbmUgXEUuLi4gd2l0aGluIHRoZSBtYWNyby4KClR1ZSBBdWcgMjUgMTE6NTY6MjYgMTk5MiAgUm9sYW5kIEguIFBlc2NoICAocGVzY2hAZm93YW50b24uY3lnbnVzLmNvbSkKCgkqIHRleGluZm8udGV4IChccmVhZGF1eGZpbGUpOiBNYWtlICsgbm9ybWFsIHdoaWxlIHJlYWRpbmcgYXV4IGZpbGUuCgpUaHUgQXVnIDIwIDIxOjMyOjM0IDE5OTIgIEthcmwgQmVycnkgIChrYXJsQGhheWxleSkKCiAgICAgICAgKiB0ZXhpbmZvLnRleCAoXGRvdWJsZWNvbHVtbmhzaXplKTogQ29tcHV0ZSB2YWx1ZSBpbgogICAgICAgICAgXGJlZ2luZG91YmxlY29sdW1ucy4KICAgICAgICAoXGFmb3VycGFwZXIsIFxzbWFsbGJvb2ssIDxvdXRlciBsZXZlbD4pOiBSZW1vdmUgdGhlc2UgKHZpcnR1YWxseQogICAgICAgICAgaWRlbnRpY2FsKSBjb21wdXRhdGlvbnMuCgogICAgICAgICogdGV4aW5mby50ZXggKFxkb3VibGVjb2x1bW52c2l6ZSk6IERlbGV0ZWQuCiAgICAgICAgKFxhZm91cnBhcGVyLCBcc21hbGxib29rKTogRG9uJ3QgY29tcHV0ZSBpdC4KICAgICAgICAoXGJlZ2luZG91YmxlY29sdW1ucyk6IEp1c3QgZG91YmxlIFx2c2l6ZSBoZXJlICh0aHVzIGRlY3JlYXNpbmcKICAgICAgICAgIHRoZSB2YWx1ZSBjb25zaWRlcmFibHkgZnJvbSB0aGUgb2xkIHZhbHVlIG9mIDE5LjFpbiwgd2hpY2ggd2FzIGZhcgogICAgICAgICAgdG9vIGxhcmdlLikKCkZyaSBBdWcgMTQgMTA6MTY6NDIgMTk5MiAgS2FybCBCZXJyeSAgKGthcmxAaGF5bGV5KQoKICAgICAgICAqIHRleGluZm8udGV4IChccGFyc2Vhcmd4KTogVXNlIFxleHBhbmRhZnRlciBpbnN0ZWFkIG9mCiAgICAgICAgXGFmdGVyZ3JvdXAgdG8gY29udGludWUgdGhlIHByb2Nlc3NpbmcuCiAgICAgICAgKFxwYXJzZWFyZ2xpbmV4KTogUmVuYW1lZCB0byBccGFyc2VhcmdsaW5lLCBzaW5jZSB0aGUgZm9ybWVyCiAgICAgICAgXHBhcnNlYXJnbGluZSBpcyBubyBsb25nZXIgbmVlZGVkLgoKCSogdGV4aW5mby50ZXggKFxwYXJzZWFyZ2xpbmUpIFJlbW92ZSBhIHRyYWlsaW5nIEBjIG9yIEBjb21tZW50LgogICAgICAgIChcYXJncmVtb3ZlYywgXGFyZ3JlbW92ZWNvbW1lbnQpOiBOZXcgbWFjcm9zLgoKVGh1IEF1ZyAgNiAxMToyODo1NSAxOTkyICBSb2xhbmQgSC4gUGVzY2ggIChwZXNjaEBmb3dhbnRvbi5jeWdudXMuY29tKQoKCSogdGV4aW5mby50ZXg6IGV4dGVuZGVkIEBzZXQgdG8gZGVmaW5lIGV4cGFuZGFibGUgdmFyczsKCSAgQHZhbHVlIGV4cGFuZHMgc2FtZS4gIEF1eGlsaWFyeSBtYWNyb3MgXHNldHh4eCwgXHNldHl5eQoJICB1c2VkIGZvciBAc2V0LgoKU3VuIEF1ZyAgMiAxNDozNDo0OCAxOTkyICBLYXJsIEJlcnJ5ICAoa2FybEBoYXlsZXkpCgogICAgICAgICogdGV4aW5mby50ZXggKFxlbnRyeSk6IGRvIGxpbmUtYnJlYWtpbmcgb24gdGhlIGluZGV4IGVudHJ5LgoKV2VkIEp1bCAgMSAxNzowNToyNiAxOTkyICBLYXJsIEJlcnJ5ICAoa2FybEBjbGF1ZGUuY3MudW1iLmVkdSkKCiAgICAgICAgKiB0ZXhpbmZvLnRleCAoXGxwYXJlbiwgXHJwYXJlbik6IG5ldyBkZWZpbml0aW9ucy4KICAgICAgICAoKCxbLF0sKSk6IG5ldyBnbG9iYWwgZGVmaW5pdGlvbnMgZm9yIHRoZXNlIGZvdXIgYWN0aXZlCiAgICAgICAgICBjaGFyYWN0ZXJzLCBzbyBwYXJlbnMgYW5kIGJyYWNrZXRzIGNhbiBiZSB1c2VkIGluIEBkZWZmbiBuYW1lcy4KClNhdCBKdW4gMjcgMTE6MzI6NTggMTk5MiAgS2FybCBCZXJyeSAgKGthcmxAaGF5bGV5KQoKICAgICAgICAqIHRleGluZm8udGV4IChcc2hvcnRjaGFwbGFiZWwpOiBuZXcgbWFjcm8gdG8gYWxpZ24gY2hhcHRlciBhbmQKICAgICAgICAgIGFwcGVuZGl4IGxhYmVscy4KICAgICAgICAoXHNob3J0Y2hhcGVudHJ5KTogY2FsbCBpdC4KICAgICAgICAoXHNob3J0YXBwZW5kaXh3aWR0aCk6IG5ldyBkaW1lbiByZWdpc3Rlci4KCldlZCBKdW4gMjQgMDk6NDU6MzQgMTk5MiAgS2FybCBCZXJyeSAgKGthcmxAaGF5bGV5KQoKICAgICAgICAqIHRleGluZm8udGV4IChcYWZ0ZXJlbnZicmVhayk6IG1ha2UgdGhlIHNhbWUgYXMgXGFib3ZlZW52YnJlYWssCiAgICAgICAgICBzbyBzcGFjZSBiZWxvdyBlbnZpcm9ubWVudHMgZG9lc24ndCBnZXQgbG9zdC4KICAgICAgICAoXGFib3ZlZW52c2tpcGFtb3VudCk6IHJlbmFtZSB0byBcZW52c2tpcGFtb3VudCwgc2luY2UgaXQncyB1c2VkCiAgICAgICAgICBib3RoIGFib3ZlIGFuZCBiZWxvdy4KCldlZCBKdW4gMjQgMDk6NDU6MzQgMTk5MiAgS2FybCBCZXJyeSAgKGthcmxAaGF5bGV5KQoKICAgICAgICAqIHRleGluZm8udGV4IChcZ3JvdXApOiBkbyBAY29tbWVudCBhdCB0aGUgZW5kLCB0byBhdm9pZCBleGNlc3NpdmUKICAgICAgICAgIHdoaXRlIHNwYWNlIHdoZW4gY2FsbGVkIGluc2lkZSBAZ3JvdXAuCgpXZWQgSnVuIDI0IDE2OjM2OjA0IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKCgkqIHRleGluZm8udGV4IChcc3RhcnRjb250ZW50cyk6IEVuZCBwYWdlIGJlZm9yZSBzZXR0aW5nIHBhZ2Vuby4KClRodSBNYXkgMjggMjA6Mjc6MjUgMTk5MiAgUm9iZXJ0IEouIENoYXNzZWxsICAoYm9iQGhpbGwuZ251LmFpLm1pdC5lZHUpCgogICAgICAgICogdGV4aW5mby50ZXggKFx2dGFibGUpOiBMaWtlIEBmdGFibGUsIGJ1dCBmb3IgdmFyaWFibGVzLgoKRnJpIE1heSAyMiAwNzowNDozMiAxOTkyICBLYXJsIEJlcnJ5ICAoa2FybEBoYXlsZXkpCgogICAgICAgICogdGV4aW5mby50ZXggKFx3KTogZG8gXGxlYXZldm1vZGUgYmVmb3JlIHRoZSBcaGJveC4KClNhdCBNYXkgMTYgMTE6MTY6MjcgMTk5MiAgS2FybCBCZXJyeSAgKGthcmxAaGF5bGV5KQoKICAgICAgICAqIHRleGluZm8udGV4IChcc21hbGxib29rKTogZGVjcmVhc2UgXHRvcHNraXAgc29tZXdoYXQuCgogICAgICAgICogdGV4aW5mby50ZXggKFxncm91cCk6IHVzZSBcdnRvcCBpbnN0ZWFkIG9mIFx2Ym94LgoKICAgICAgICAqIHRleGluZm8udGV4IChcbmV3bGluZWNoYXIpOiBkZWZpbmUgZm9yIHVzZSBpbiBoZWxwIHN0cmluZ3MuCiAgICAgICAgKFxncm91cGludmFsaWRoZWxwKTogZGVmaW5lIHRoaXMgZm9yIHVzZSB3aXRoIFxlcnJoZWxwLgogICAgICAgIChcZ3JvdXApOiBzZXQgXGVycmhlbHAgdG8gYWJvdmUuCgpUaHUgQXByIDMwIDE2OjE5OjE3IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKCgkqIHRleGluZm8udGV4IChcbmVlZCk6IFJld3JpdHRlbiBieSBrYXJsLgoKU2F0IEFwciAxOCAxNjoyNDowMCAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCgoJKiB0ZXhpbmZvLnRleCAoXGV4ZGVudGFtb3VudCk6IE5ldyB2YXIsIHNldCBieSBlbnZpcm9ubWVudHMuCgkoXGV4ZGVudCwgXGV4ZGVudHl5eSk6IERlZmluZSBzdWl0YWJseSBmb3IgZmlsbGVkIGVudmlyb25tZW50cy4KCUFsd2F5cyBleGRlbnQgYnkgaW5uZXJtb3N0IGluZGVudGF0aW9uIHN0ZXAuCgkoXG5vZmlsbGV4ZGVudCwgXG5vZmlsbGV4ZGVudHl5eSk6IEFsdGVybmF0ZXMgZm9yIG5vZmlsbCBlbnZzLgoJKFxsaXNwLCBcc21hbGxsaXNweCwgXGRpc3BsYXkpOiBTZXQgXGV4ZGVudCB0byBcbm9maWxsZXhkZW50LgoKVGh1IEFwciAgMiAxNTowNDoxNSAxOTkyICBSb2JlcnQgSi4gQ2hhc3NlbGwgIChib2JAa3JvcG90a2luLmdudS5haS5taXQuZWR1KQoKICAgICAgICAqIHRleGluZm8udGV4IChcRXNtYWxsbGlzcCk6IFNtYWxsZXIgYmFzZWxpbmUgc2tpcCBmb3Igc21hbGxleGFtcGxlcy4KClN1biBNYXIgMjkgMjA6NDQ6NDkgMTk5MiAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AY3Mud2lkZW5lci5lZHUpCgoJKiB0ZXhpbmZvLnRleCAoXHN0YXJ0Y29udGVudHMpOiBBbHdheXMgY2xvc2UgY29udGVudHNmaWxlIGFuZAoJYWRqdXN0IHRoZSBwYWdlLgoKRnJpIE1hciAyNyAxNzo0MTo1MiAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCgoJKiB0ZXhpbmZvLnRleCAoXGNoYXB0ZXJub2ZvbnRzKTogRGVhbCB3aXRoIFxyZXN1bHQsIFxlcXVpdiwgZXRjLgoKU2F0IE1hciAyMSAwODoyMjoyOSAxOTkyICBLYXJsIEJlcnJ5ICAoa2FybCBhdCBoYXlsZXkpCgogICAgICAgICogdGV4aW5mby50ZXggKFxlbnRyeSk6IGZvcm1hdCBlbnRyaWVzIGJldHRlciBpZiB0aGUgcGFnZSBudW1iZXIKICAgICAgICAgIGFuZCBlbnRyeSB0ZXh0IGRvbid0IGZpdCBvbiBvbmUgbGluZS4KCiAgICAgICAgKiB0ZXhpbmZvLnRleCAoXGxvZ2dpbmdhbGwsIFxnbG9nZ2luZ2FsbCk6IG5ldyBtYWNyb3MgdG8gaGVscCB3aXRoCiAgICAgICAgICBkZWJ1Z2dpbmcuCgpGcmkgTWFyIDIwIDE1OjM1OjQyIDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKCgkqIHRleGluZm8udGV4IChccmVzdWx0LCBcZXhwYW5zaW9uLCBccHJpbnQsIFxlcXVpdik6CglEb24ndCBjb3B5IHByZWZhYnJpY2F0ZWQgYm94ZXM7IG11c3QgYWRhcHQgdG8gY3VycmVudCBmb250LgoJKFxkYmxhcnJvd2JveCwgXGxvbmdkYmxhcnJvd2JveCwgXHB1c2hjaGFyYm94LCBcZXF1aXZib3gpOiBEZWxldGVkLgoJKFxidWxsYm94KTogRGVsZXRlZC4KClRodSBNYXIgMTkgMjI6MTc6MTQgMTk5MiAgUm9iZXJ0IEouIENoYXNzZWxsICAoYm9iQGtyb3BvdGtpbi5nbnUuYWkubWl0LmVkdSkKCgkqIHRleGluZm8udGV4IChcd2lkb3dwZW5hbHR5LCBcY2x1YnBlbmFsdHkpOiBTZXQgdGhlbSB0byAxMDAwMCwgc2luY2UKICAgICAgICAgIDgwMDAgZGlkIG5vdCB3b3JrLgoKRnJpIE1hciAgNiAxMzoyNjozNiAxOTkyICBSb2JlcnQgSi4gQ2hhc3NlbGwgIChib2JAa3JvcG90a2luLmdudS5haS5taXQuZWR1KQoKCSogdGV4aW5mby50ZXggKFx3aWRvd3BlbmFsdHksIFxjbHVicGVuYWx0eSk6IFNldCB0aGVtIHRvIDgwMDAsIHNpbmNlCiAgICAgICAgICAyMDAwIGRpZCBub3Qgd29yayAoYnV0IFx3aWRvd3BlbmFsdHkgYXQgMjAwMDAgZGlkIHdvcmspLgoKVGh1IEZlYiAyNyAxMjoyNzoxNCAxOTkyICBLYXJsIEJlcnJ5ICAoa2FybEB3b21iYXQuZ251LmFpLm1pdC5lZHUpCgogICAgICAgICogdGV4aW5mby50ZXggKFx3aWRvd3BlbmFsdHkpOiBzZXQgdG8gMjAwMCwgbm90IDIwMDAwLgoKU2F0IEZlYiAgOCAxNDozNDo0NSAxOTkyICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCgoJKiB0ZXhpbmZvLnRleCAoXHdpZG93cGVuYWx0eSwgXGNsdWJwZW5hbHR5KTogU2V0IHRoZW0gdG8gMjAwMC4KCShcaXRlbWl6ZWl0ZW0pOiBVc2UgcGVuYWx0eSAxMjAwLgoJKFxpdGVtenp6KTogQWRkIFxub2JyZWFrIG5lYXIgYmVnaW5uaW5nLgoKCSogdGV4aW5mby50ZXggKFxxdW90YXRpb24pOiBJbmNyZWFzZSByaWdodCBtYXJnaW4sIGluc3RlYWQgb2YKCWxlZnQgbWFyZ2luIHR3aWNlLgoKV2VkIEZlYiAgNSAxMjowODozMCAxOTkyICBLYXJsIEJlcnJ5ICAoa2FybCBhdCBoYXlsZXkpCgogICAgICAgICogdGV4aW5mby50ZXggKFxhbHBoYWVudW1lcmF0ZSwgXGNhcHNlbnVtZXJhdGUpOiByZWRlZmluZSBhcyBhIGNhbGwKICAgICAgICAgIHRvIFxlbnVtZXJhdGUuCiAgICAgICAgKFx7bG93ZXIsdXBwZXJ9Y2FzZWVudW1lcmF0ZSk6IFJlbmFtZSBmcm9tIFx7YWxwaGEsY2Fwc31lbnVtZXJhdGUuCgpTdW4gRmViICAyIDIxOjA3OjE5IDE5OTIgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKCgkqIHRleGluZm8udGV4IChcaXRlbXp6eik6IENvbXBlbnNhdGUgaW4gbGluZS1ieS1pdHNlbGYgY2FzZSBmb3IKCWEgdGFibGUgdGhhdCBpcyBpbmRlbnRlZC4KCk1vbiBKYW4gMTMgMjE6MDQ6MDcgMTk5MiAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQoKCSogdGV4aW5mby50ZXg6IFVzZSAyNiBpbnN0ZWFkIG9mIGNvbnRyb2wteiBhcyBjaGFyYWN0ZXIgY29uc3RhbnQuCgpTYXQgSmFuIDExIDAyOjIwOjU4IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGFsYmVydC5nbnUuYWkubWl0LmVkdSkKCgkqIGdwbC50ZXhpbmZvOiBVbmZpbGxlZCBZb3lvZHluZSBleGFtcGxlLgoKU2F0IERlYyAgNyAxNjoxNjo1NCAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCgoJKiB0ZXhpbmZvLnRleCAoXGNhcnRvdWNoZSk6IFNldCBcbm9uYXJyb3dpbmcuCgkoXGxpc3AsIFxzbWFsbGxpc3AsIFxxdW90YXRpb24sIFxkaXNwbGF5KTogSWYgc2V0LCBkb24ndCBuYXJyb3cuCgpNb24gRGVjICAyIDA4OjE1OjA4IDE5OTEgIEthcmwgQmVycnkgIChrYXJsIGF0IGhheWxleSkKCiAgICAgICAgKiB0ZXhpbmZvLnRleCAoXGl0ZW16enopOiBkb24ndCBzdGFydCBhIHBhcmFncmFwaCBpZiB0aGUgaXRlbSB0ZXh0CiAgICAgICAgICBpcyBvbiBhIGxpbmUgYnkgaXRzZWxmOyBkb24ndCBhbGxvdyBhIHBhZ2UgYnJlYWsgYWZ0ZXIgdGhhdAogICAgICAgICAgbGluZTsgYWx3YXlzIGRvIFxwYXIgYmVmb3JlIHR5cGVzZXR0aW5nIGFueXRoaW5nLgoKVHVlIE5vdiAyNiAxNToxMzoxMyAxOTkxICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBhbGJlcnQuZ251LmFpLm1pdC5lZHUpCgoJKiBsZ3BsLnRleGluZm86IEBpZnNldCBsZ3BsLWFwcGVuZGl4LCB1c2UgQGFwcGVuZGl4IGluc3RlYWQgb2YKCUB1bm51bWJlcmVkLgoKU3VuIE5vdiAxMCAxMjowMDowNiAxOTkxICBLYXJsIEJlcnJ5ICAoa2FybCBhdCBoYXlsZXkpCgogICAgICAgICogdGV4aW5mby50ZXggKFxkb3ByaW50aW5kZXgpOiBvbmx5IFxyZWFkIGlmIHRoZSBmaWxlIGV4aXN0ZWQ7CiAgICAgICAgICBcY2xvc2VpbiB0aGUgdGVzdCBzdHJlYW0gaW4gYWxsIGNhc2VzLgogICAgICAgIChcaW5pdGlhbCwgXGVudHJ5KTogZG8gbm90IFxvdXRlciwgc28gdGhhdCBccmVhZCBkb2VzIG5vdCBnZXQgYW4KICAgICAgICAgIGVycm9yIGlmIHRoZSBpbmRleCBleGlzdHMuCgpGcmkgTm92ICA4IDE4OjEzOjI4IDE5OTEgIE1pY2hhZWwgQnVzaG5lbGwgIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHRleGluZm8udGV4IChcaXRlbWl6ZXkpOiBtaXNzaW5nICUncyBpbiBtYWNybyBkZWZuLgoJICBBbHNvLCBhZGQgXGJlZ2luZ3JvdXA7IGFjY2lkZW50YWxseSBkZWxldGVkIGJ5IEthcmwgQmVycnkuCgpUaHUgTm92ICA3IDExOjQxOjI1IDE5OTEgIEthcmwgQmVycnkgIChrYXJsIGF0IGhheWxleSkKCiAgICAgICAgKiB0ZXhpbmZvLnRleCAoXGRvcHJpbnRpbmRleCk6IFxyZWFkIGZyb20gdGhlIGluZGV4IGZpbGUgdG8gbWFrZQogICAgICAgICAgXGlmZW9mIHRydWUgd2hlbiB0aGUgZmlsZSBleGlzdHMgYnV0IGlzIGVtcHR5LgoKVHVlIE5vdiAgNSAwODoyOToxMyAxOTkxICBSb2JlcnQgSi4gQ2hhc3NlbGwgIChib2IgYXQgZ3JhY2tsZSkKCiAgICAgICAgKiB0ZXhpbmZvLnRleCAoQHRoaXNjaGFwdGVybmFtZSk6IFByb3ZpZGUgZGVmYXVsdCB2YWx1ZSBmb3Igd2hlbgogICAgICAgICAgQGNoYXB0ZXIgbm90IGRlZmluZWQuCgpTYXQgTm92ICAyIDE3OjU5OjAyIDE5OTEgIEthcmwgQmVycnkgIChrYXJsIGF0IGhheWxleSkKCiAgICAgICAgKiB0ZXhpbmZvLnRleCAoXGl0ZW1pemV6enopOiBkbyBcYmVnaW5ncm91cCBoZXJlLCBzaW5jZSBcaXRlbWl6ZXkKICAgICAgICAgIGNhbid0IGFueSBsb25nZXIuCgpUdWUgT2N0IDI5IDEyOjE3OjQxIDE5OTEgIFJvYmVydCBKLiBDaGFzc2VsbCAgKGJvYiBhdCBncmFja2xlKQoKICAgICAgICAqIHRleGluZm8udGV4OiBAcGFyYWdyYXBoaW5kZW50IGRlZmluZWQgYXMgYSBubyBvcC4KCkZyaSBPY3QgMjUgMTU6MTk6NDcgMTk5MSAgS2FybCBCZXJyeSAgKGthcmwgYXQgaGF5bGV5KQoKICAgICAgICAqIHRleGluZm8udGV4IChcZW51bWVyYXRleSk6IGFsbG93IGFueSBsb3dlcmNhc2UgbGV0dGVyLCB1cHBlcmNhc2UKICAgICAgICAgIGxldHRlciwgb3IgbnVtYmVyIGFzIGFyZ3VtZW50OyBpbml0aWFsaXplIFxpdGVtbm8gYW5kIGJlZ2luIHRoZQogICAgICAgICAgZW52aXJvbm1lbnQncyBncm91cCBoZXJlLgogICAgICAgICAgKFxpdGVtaXpleSk6IGRvbid0IGluaXRpYWxpemUgXGl0ZW1ubyBoZXJlLgogICAgICAgICAgKFxudW1lcmljZW51bWVyYXRlLCBcc3RhcnRlbnVtZXJhdGlvbik6IG5ldyBtYWNyby4KCldlZCBPY3QgMjMgMTY6MjY6MzAgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQoKCSogdGV4aW5mby50ZXggKFxpZmNsZWFyLCBcaWZzZXQpOiBSZW1vdmUgXG91dGVyLgoKCSogdGV4aW5mby50ZXggKFxhZm91cnBhcGVyKTogU2V0IHZhcmlvdXMgcGFyYW1ldGVycy4KClR1ZSBPY3QgMjIgMTg6NDI6MzEgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQoKCSogdGV4aW5mby50ZXggKFxhbHBoYWVudW1lcmF0ZSwgXGNhcHNlbnVtZXJhdGUpOgoJTGV0IEBlbmQgZW51bWVyYXRlIGVuZCB0aGVzZS4KCShcRWFscGhhZW51bWVyYXRlLCBcRWNhcHNlbnVtZXJhdGUpOiBBbGlhc2VzIGZvciBcRWVudW1lcmF0ZS4KClN1biBPY3QgMjAgMTg6MjM6MTggMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQoKCSogdGV4aW5mby50ZXggKFxtYWlubWFnc3RlcCk6IE5ldyBwYXJhbWV0ZXIgbWFjcm8uCgkoRGVmaW5pbmcgZm9udHMpOiBVc2UgdGhhdCBwYXJhbWV0ZXIgdG8gc2NhbGUgdGhlbS4KCUlmIFxiaWdnZXIgaXMgZGVmaW5lZCwgdXNlIDEyIHBvaW50IGZvbnRzLgoKVHVlIFNlcCAyNCAwMDozMDowNyAxOTkxICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogdGV4aTJkdmk6IEl0ZXJhdGUgb3ZlciB0aGUgcmlnaHQgdmFyaWFibGUgdG8gbG9vayBmb3IgbmV3IGlkeCBmaWxlcy4KCgkqIHRleGkyZHZpOiBHUEwgMi4KCgkqIHRleGkyZHZpOiBGaXggMm5kIGludm9jYXRpb24gb2YgdGV4aW5kZXggdG8gcGFzcyByaWdodCBhcmdzLgoKV2VkIFNlcCAxMSAyMDo1Mjo0MiAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCgoJKiB0ZXhpbmZvLnRleCAoXGNhcnRvdWNoZSk6IE5ldyBtYWNyby4KCkZyaSBBdWcgMjMgMTY6MTM6NDYgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQoKCSogdGV4aW5mby50ZXggKFxzZWN0aW9uLCBcc3Vic2VjdGlvbiwgXHN1YnN1YnNlY3Rpb24pOgoJSW5pdGlhbGx5IGRlZmluZSBmb3IgbnVtYmVyZWQgY2hhcHRlcnMuCgpGcmkgQXVnICAyIDAxOjQ2OjA5IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKCgkqIHRleGluZm8udGV4IChcZm9vdG5vdGUpOiBVc2UgXHVuc2tpcCBpbnN0ZWFkIG9mIFxyZW1vdmVsYXN0c2tpcC4KCk1vbiBKdWwgMjkgMTQ6MDY6NTQgMTk5MSAgUm9sYW5kIEguIFBlc2NoICAocGVzY2ggYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiB0ZXhpbmZvLnRleCAoXG1ham9yaGVhZGluZ3p6eiwgXGNoYXBoZWFkaW5nenp6LCBcY2hmcGxhaW4sCglcdW5uY2hmcGxhaW4sIFx1bm5jaGZvcGVuLCBcc2VjaGVhZGluZ2ksIFxzdWJzZWNoZWFkaW5naSwKCVxzdWJzdWJzZWNoZWFkaW5naSk6IGFsbG93IGxpbmUgYnJlYWtzIGluIGhlYWRpbmdzLgoJKFxzaG9ydGNoYXBlbnRyeSwgXHNob3J0dW5udW1iZXJlZGVudHJ5LCBcZG9jaGFwZW50cnksIFxkb3NlY2VudHJ5LAoJXGRvc3Vic2VjZW50cnksIFxkb3N1YnN1YnNlY2VudHJ5KTogYWxsb3cgbGluZSBicmVha3MgaW4gdGFibGUgb2YKCWNvbnRlbnRzIGVudHJpZXMuCgpUaHUgSnVsIDE4IDE5OjAxOjUzIDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKCgkqIHRleGluZm8udGV4IChcc2VjZm9udHMsIFxpbmRleGZvbnRzKTogRml4IHR5cG9zLgoKU3VuIEp1bCAgNyAxNjozNjoyOCAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCgoJKiB0ZXhpbmZvLnRleCAoXGFmb3VycGFwZXIpOiBOZXcgY29tbWFuZC4KCgkqIHRleGluZm8udGV4IChcbnVtYmVyZWRzZWMpOiBSZW5hbWVkIGZyb20gXHNlY3Rpb24uCgkoXG51bWJlcmVkc3Vic2VjKTogUmVuYW1lZCBmcm9tIFxzdWJzZWN0aW9uLgoJKFxudW1iZXJlZHN1YnN1YnNlYyk6IFJlbmFtZWQgZnJvbSBcc3Vic3Vic2VjdGlvbi4KCShcY2hhcHRlciwgXGFwcGVuZGl4LCBcdW5udW1iZXJlZCk6IERlZmluZSBcc2VjdGlvbiwgXHN1YnNlY3Rpb24sCglhbmQgXHN1YnN1YnNlY3Rpb24gaGVyZSBhY2NvcmRpbmcgdG8gdHlwZSBvZiBjaGFwdGVyLgoKVGh1IEp1bCAgNCAxNDoxOTozMiAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCgoJKiB0ZXhpbmZvLnRleCAoXGRlZnZhcnBhcnNlYm9keSwgXGRlZnZycGFyc2Vib2R5LCBcZGVmb3B2YXJwYXJzZWJvZHkpOgoJTmV3IGZ1bmN0aW9ucy4KCShcZGVmdmFyLCBcZGVmdnIsIFxkZWZvcHQsIFxkZWZjdiwgXGRlZml2YXIpOiBVc2UgdGhlbS4KCShcZGVmdHlwZXZhciwgXGRlZnR5cGV2cik6IExpa2V3aXNlLgoKTW9uIEp1bCAgMSAxMzo0OToyNSAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCgoJKiB0ZXhpbmZvLnRleCAoXGdyb3VwKTogUmVwb3J0IGVycm9yIGlmIHVzZWQgb3V0c2lkZSBAZXhhbXBsZSwgZXRjLgoKCSogdGV4aW5mby50ZXggKFxkZWZuYW1lKTogUmVkdWNlIFxsZWZ0c2tpcAoJdG8gY2FuY2VsIHRlbXBvcmFyaWx5IHRoZSBpbmNyZWFzZSBtYWRlIGluIFxkZWZwYXJzZWJvZHkuCgoJKiB0ZXhpbmZvLnRleCAoXGVudW1lcmF0ZSk6IEFsbG93IG9wdGlvbmFsIGFyZyB0byBzcGVjaWZ5IHR5cGUKCW9mIGNvdW50aW5nLgoKCSogdGV4aW5mby50ZXggKFxzZXQsIFxjbGVhcik6IE5ldyBjb21tYW5kcy4KCk1vbiBKdW4gMjQgMTI6MjI6NDQgMTk5MSAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAYWxiZXJ0LmdudS5haS5taXQuZWR1KQoKCSogdGV4aW5mby50ZXggKFxlbGV0ZXJhdGUpOiBSZW5hbWVkIHRvIFxhbHBoYWVudW1lcmF0ZS4gIFNpZ2guCgkoXGVjYXBpdGF0ZSk6IExpa2V3aXNlIFxjYXBzZW51bWVyYXRlLgoKVGh1IEp1biAgNiAyMDowMjo0OCAxOTkxICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIGxncGwudGV4aW5mbzogQ3JlYXRlZCBmcm9tIC9mc2Yvcm1zL2dudW9yZy9sZ3BsLnRleHQuCgoJKiBncGwudGV4aW5mbzogQ3JlYXRlZCBmcm9tIC9mc2Yvcm1zL2dudW9yZy9ncGwudGV4dCAoR1BMIHYyKS4KCgkqIHRleGluZm8udGV4IChcZWxldGVyYXRlLCBcZWNhcGl0YXRlKTogTmV3IGNvbW1hbmRzLCBsaWtlIEBpdGVtaXplLAoJYnV0IHdpdGggW2EuLnpdIG9yIFtBLi5aXSBpbnN0ZWFkIG9mIFsxLi5uXS4KClR1ZSBNYXkgMjEgMTU6NDY6MzIgMTk5MSAgS2FybCBCZXJyeSAgKGthcmwgYXQgaGF5bGV5KQoKICAgICAgICAqIHRleGluZm8udGV4IChcZG1uKTogbmV3IGNvbW1hbmQgdG8gdHlwZXNldCBhIGRpbWVuc2lvbi4KClR1ZSBNYXkgMjEgMjA6NTg6MjIgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQoKCSogdGV4aW5mby50ZXggKFxkb2luZCwgXGRvc3ViaW5kKTogTWFrZSBuZXcgZ3JvdXAgYXJvdW5kIFxpbmRleGR1bW1pZXMKCWFuZCBtb3N0IG9mIGJvZHksIGV4Y2x1ZGluZyB0aGUgXHBlbmFsdHkgY29tbWFuZHMuCgpNb24gTWF5IDIwIDIxOjE2OjMyIDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKCgkqIHRleGluZm8udGV4IChcdGV4KTogVHlwbyBpbiByZWRlZmluaW5nIFxALgoKCSogdGV4aW5mby50ZXggKFxfKTogVXNlIFxsdnZtb2RlLCBub3QgXGxlYXZldm1vZGUuCgkoXGx2dm1vZGUpOiBOZXcgbWFjcm8uCgoJKiB0ZXhpbmZvLnRleCAoXGF1dGhvcnJtLCBcdGl0bGVybSk6IE1vdmUgdG8gYWZ0ZXIgc2VjdGlvbiBmb250cy4KClR1ZSBNYXkgMTQgMjE6MTM6MjkgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQoKCSogdGV4aW5mby50ZXggKFxkZWZ1bmFyZ3MpOiBTZXQgXGh5cGhlbmNoYXIgaW4gXHRlbnNsLCBub3QgXHNsLgoKVGh1IE1heSAgOSAxNzowNzowOCAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCgoJKiB0ZXhpbmZvLnRleCAoXGlnbm9yZSk6IFN0YW5kYXJkaXplIGNhdGNvZGUgb2Ygc3BhY2UuCgpXZWQgTWF5ICA4IDEzOjQ5OjQ1IDE5OTEgIEthcmwgQmVycnkgIChrYXJsIGF0IGhheWxleSkKCiAgICAgICAgKiB0ZXhpbmZvLnRleCAoXHNmZmFtLCBcc2YpOiBOZXcgbWFjcm9zOyBzdXBwb3J0IHNhbnMgc2VyaWYKCXR5cGUgc3R5bGUgaW4gbWF0aC4KICAgICAgICAodG9wIGxldmVsKTogU2V0IHVwIFx0ZXh0Zm9udHMgZWFybHkgb24sIHNvIHdlIGNhbiBjcmVhdGUgYm94ZXMgdy8gaXQuCiAgICAgICAgKFx0ZW5ybS4uLlx0ZW5zZik6IERlZmluZSB0aGVzZSB0byBiZSBcdGV4dHJtLi4uXHRleHRzZiBpbnN0ZWFkLgogICAgICAgIChcZGYsIFx0ZXh0Zm9udHMsIFxjaGFwZm9udHMsIFxzZWNmb250cywgXHN1YnNlY2ZvbnRzKToKICAgICAgICAoXGluZGV4Zm9udHMpOiBSZWRlZmluZSBcdGVucm0gKGV0Yy4pIGluc3RlYWQgb2YganVzdCBccm0sIHNvIHRoYXQKCXRoZSBtYXRoIGZhbWlseSBhc3NpZ25tZW50IGRvZXNuJ3QgZ2V0IGxvc3Q7IGNhbGwgXHJlc2V0bWF0aGZvbnRzLgogICAgICAgIChccmVzZXRtYXRoZm9udHMpOiBOZXcgbWFjcm87IHJlZGVmaW5lcyBcdGV4dGZvbnQgb2YgZWFjaCBtYXRoIGZhbWlseS4KICAgICAgICAoXGluZHNjLCBcaW5kaSwgXGluZHN5IFxjaGFwc2MsIFxjaGFwaSwgXGNoYXBzeSwgXHNlY3NjLCBcc2VjaSk6CiAgICAgICAgKFxzZWNzeSwgXHNzZWNzYywgXHNzZWNpLCBcc3NlY3N5KTogTmV3IGZvbnQgZGVmaW5pdGlvbnMuCgpNb24gTWF5ICA2IDIxOjMwOjE5IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKCgkqIHRleGluZm8udGV4IChcaW5kZXhkdW1taWVzKTogV3JpdGUgXF8gd2hlbiBhbiBfIGlzIHNlZW4uCgpNb24gQXByIDI5IDAxOjQxOjQ0IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKCgkqIHRleGluZm8udGV4IChcZGVmbmFtZSk6IFVzZSBcZGltZW4yLCBcZGltZW4zIGZvciBvdXRlciBtYXJnaW5zLgoJVXNlIG91dGVyIG1hcmdpbnMgZm9yIGluZmx1ZW5jaW5nIFxyaWdodGxpbmUuCgkoXHRjbG9zZSwgXGtleSwgXHQpOiBUdXJuIG9mZiBsaW5lIGJyZWFrcyBhdCBoeXBoZW5zLgoKRnJpIEFwciAxMiAwMzoxMjoxNCAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuZ251LmFpLm1pdC5lZHUpCgoJKiB0ZXhpbmZvLnRleCAoXGF1dGhvcnJtKTogTW92ZSBkZWZpbml0aW9uIHRvIHRvcCBsZXZlbDsgY29weSBcc2Vjcm0uCgpUdWUgQXByICAyIDIyOjQ4OjM5IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKCgkqIHRleGluZm8udGV4IChcZGVmbmFtZSk6IEFkanVzdCBzaXplIG9mIFxybGFwIGJveCwgbm90IFxkaW1lbjAKCW9yIFxkaW1lbjEsIGZvciBjdXJyZW50IHdpZHRoLgoKCSogdGV4aW5mby50ZXggKFxZYXBwZW5kaXhsZXR0ZXJhbmR0eXBlKTogRW5kIHdpdGgge30uCgpTYXQgTWFyIDMwIDE2OjEzOjI1IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKCgkqIHRleGluZm8udGV4IChceHJlZlgpOiBSZWFsbHkgdXNlIFxjaXRlLgoJKFxpbmZvcmVmenp6KTogVXNlIFxzYW1wIGZvciBub2RlIG5hbWUuCgoJKiB0ZXhpbmZvLnRleCAoXGRlZm5hbWUpOiBVc2UgY3VycmVudCB3aWR0aCBmb3IgXGRpbWVuMCwgXGRpbWVuMS4KCgkqIHRleGluZm8udGV4IChcZG9wcmludGluZGV4KTogUHV0IGxvdHMgb2Ygd2hpdGVzcGFjZSBiZWZvcmUgaW5kZXguCgpGcmkgTWFyIDI5IDE3OjAwOjU4IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5nbnUuYWkubWl0LmVkdSkKCgkqIHRleGluZm8udGV4IChceHJkZWYpOiBUYWtlIG91dCBsYXN0IGNoYW5nZS4KCgkqIHRleGluZm8udGV4IChcbmVlZHgpOiBUdXJuIG9mZiBcYmFzZWxpbmVza2lwLiAgVXNlIGtlcm4sIGFuZCBubyBnbHVlLgoKCSogdGV4aW5mby50ZXggKFxzaG9ydGNvbnRybSk6IFJlbmFtZWQgZnJvbSBcdHJ1ZXNlY3JtLgoJKFxzaG9ydGNvbnRiZiwgXHNob3J0Y29udHNsKTogTmV3IGZvbnRzIGZvciBzaG9ydCBjb250ZW50cyBsaW5lcy4KCShcc3VtbWFyeWNvbnRlbnRzKTogVXNlIHRoZW0uCgoJKiB0ZXhpbmZvLnRleCAoXGRlZm5hbWUpOiBEb24ndCBzZXQgXGxlZnRza2lwIHRvIDA7IGp1c3QgZGVjcmVhc2UgYnkKCW9uZSBpbmRlbnQgbGV2ZWwuCgkoXGRlZnBhcnNlYm9keSwgXGRlZipwYXJzZWJvZHkpOiBJbmNyZW1lbnQgYm90aCBtYXJnaW5zIGJ5IG9uZSBsZXZlbC4KClR1ZSBNYXIgMjYgMjI6NDE6MzggMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmdudS5haS5taXQuZWR1KQoKCSogdGV4aW5mby50ZXggKFx4cmRlZik6IENoYW5nZSBjYXRjb2RlIGJlZm9yZSByZWFkaW5nIGFyZ3MuCgpXZWQgTWFyIDIwIDE0OjIxOjU3IDE5OTEgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kIGF0IGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogdGV4aTJkdmk6IFVzZSBwIG1vZGlmaWVyIGluIHNlZCAtbiBjb21tYW5kLCBzbyBpdCB3b3Jrcy4KCUR1cGxpY2F0ZSBjb2RlIHRvIGZpbmQgdGhlIGluZGV4IGZpbGVzLCBpbnN0ZWFkIG9mIGJlaW5nIHNtYXJ0IGluCglvbmUgcGxhY2UgYW5kIGR1bWIgaW4gYW5vdGhlci4KClRodSBNYXIgIDcgMTc6MDg6MzIgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCgoJKiB0ZXhpbmZvLnRleCAoXGRlZmF1bHRwYXJpbmRlbnQpOiBOZXcgdmFyaWFibGUuCgkoXGZvb3Rub3Rlenp6KTogUmVzZXQgXHBhcmluZGVudCB0byBkZWZhdWx0LgoJKFx4cmVmWCk6IFVzZSBcY2l0ZSBmb3IgcHJpbnRlZCBtYW51YWwgYW5kIG5vZGUgbmFtZXMuCgpUdWUgTWFyICA1IDEzOjM5OjM0IDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQoKCSogdGV4aW5mby50ZXggKFxlbWVyZ2VuY3lzdHJldGNoIGZlYXR1cmUpOiBVc2UgXHRoaXNpc3VuZGVmaW5lZC4KCk1vbiBNYXIgIDQgMDA6MzU6NTcgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCgoJKiB0ZXhpbmZvLnRleCAoXGZ0YWJsZXgpOiBEZWZpbmUgXEVmdGFibGU7IHVuZGVmaW5lIFxFdGFibGUuCgoJKiB0ZXhpbmZvLnRleCAoXGZvb3Rub3RlKTogRGlzY2FyZCBwcmVjZWRpbmcgd2hpdGVzcGFjZS4KCgkqIHRleGluZm8udGV4OiBVc2UgdGhlIFxlbWVyZ2VuY3lzdHJldGNoIGZlYXR1cmUgaWYgYXZhaWxhYmxlLgoKRnJpIEZlYiAyMiAwMzo1MDo1OCAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKCgkqIHRleGluZm8udGV4IChcdGV4KTogTWFrZSArIG5vdCBhY3RpdmUuCgpGcmkgRmViIDE1IDEwOjA1OjI0IDE5OTEgIFJvbGFuZCBNY0dyYXRoICAobWNncmF0aCBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCgkqIHRleGkyZHZpOiBVc2UgJFRFWElORk8gaW4gcGxhY2Ugb2YgJFRFWCAoZmFsbGluZyBiYWNrIHRvICRURVgKCWlmICRURVhJTkZPIGlzIHVuZGVmaW5lZCkuCgoJKiB0ZXhpMmR2aTogUmVuYW1lZCBmcm9tIHRleGluZm8uICBCb2IgKEkgYmVsaWV2ZSkgZGlkIHRoaXMgYXQgc29tZQoJcG9pbnQgYXQgYW5kIGRpZG4ndCBtYWtlIGEgQ2hhbmdlTG9nIGVudHJ5LiAgSSdkIHNob290IGhpbSBteXNlbGYgaWYKCWhlIHdlcmVuJ3QgdGhlIHBlcnNvbiB3aG8gc2lnbnMgbXkgcGF5Y2hlY2tzLgoKU3VuIEZlYiAxMCAyMjo1MTo1MiAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKCgkqIHRleGluZm8udGV4IChcZG9wcmludGluZGV4KTogSWYgaW5kZXggaXMgZW1wdHksIHByaW50IGEgZHVtbXkuCgkoXG5lZWQpOiBVc2UgdnNraXBzIGFuZCBwZW5hbHRpZXM7IGRvbid0IHVzZSBccGFnZXRvdGFsLgoKRnJpIEZlYiAgOCAxNzozNjo1MyAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKCgkqIHRleGluZm8udGV4IChcaWdub3Jlc2VjdGlvbnMpOgoJVHVybiBvZmYgXGNvbnRlbnRzLCBcc21hbGxib29rIGFuZCBcdGl0bGVwYWdlLgoKCSogdGV4aW5mby50ZXggKFxFdGl0bGVwYWdlKTogRG8gYSBwYWdlIGJyZWFrIGJlZm9yZSBlbmRpbmcgdGhlIGdyb3VwLgoKCSogdGV4aW5mby50ZXggKFxzZXRyZWYsIFx1bm51bWJzZXRyZWYsIFxhcHBlbmRpeHNldHJlZik6CglDb21tZW50IG91dCByZWNvcmRpbmcgdGhlIGNoYXB0ZXIgdGl0bGUuCgpUaHUgSmFuIDI0IDIzOjI4OjQxIDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQoKCSogdGV4aW5mby50ZXggKFx0b3ApOiBTeW5vbnltIGZvciBcdW5udW1iZXJlZC4KCShcaW5mb3RvcCk6IFN5bm9ueW0gZm9yIFxpbmZvdW5udW1iZXJlZC4KCShcaWdub3Jlc2VjdGlvbnMpOiBIYW5kbGUgXHRvcC4KClRodSBKYW4gMjQgMTI6NDE6MzMgMTk5MSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCgoJKiB0ZXhpbmZvLnRleDogRGVsZXRlIHNwdXJpb3VzIGNoYXJhY3RlciBhdCBiZWdpbm5pbmcuCgpUaHUgSmFuIDE3IDE2OjM0OjI1IDE5OTEgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kIGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCSogdGV4aW5mbzogQ2hlY2sgdGhlIGV4aXQgc3RhdHVzIG9mIHRleCBhbmQgdGV4aW5kZXguICBEb24ndCBwcm9jZWRlCglhZnRlciBhIGZhaWxpbmcgcnVuLgoKVGh1IEphbiAxMCAxNToxNjo0NyAxOTkxICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKCgkqIHRleGluZm8udGV4IChceHJlZlgpOiBHZXQgcmlkIG9mIGJsYW5rIGxpbmUuCgpXZWQgSmFuICA5IDE4OjA2OjIwIDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQoKCSogdGV4aW5mby50ZXggKFxlbnRyeSwgXHNlY29uZGFyeSk6IFVzZSBcaW5kZXhkb3RmaWxsLgoJKFxpbmRleGRvdGZpbGwpOiBOZXcgbWFjcm8uCgpUdWUgSmFuICA4IDE3OjQ0OjAxIDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQoKCSogdGV4aW5mby50ZXggKFxkb25vZGVyZWYpOiBEZWZpbmUgYSAuLi4tdGl0bGUgY3Jvc3MtcmVmZXJlbmNlLgoJKFl0aXRsZSk6IFN1YnJvdXRpbmUgZm9yIHRoYXQuCgkoeHJlZlgpOiBVc2UgdGhlIHJlYWwgdGl0bGUgYnkgZGVmYXVsdCAoYnV0IHRoaXMgaXMgY29tbWVudGVkIG91dCkuCgpUdWUgSmFuICAxIDIzOjE4OjIxIDE5OTEgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQoKCSogdGV4aW5mby50ZXggKFxpbmRleG5vZm9udHMpOiBEZWxldGUgdHJvdWJsZW1ha2luZyBibGFuayBsaW5lLgoKU2F0IERlYyAyMiAwMDo0NzoyMSAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKCgkqIHRleGluZm8udGV4IChceHJlZlgpOiBQcmV2ZW50IGV4dHJhIHNwYWNlLgoKRnJpIERlYyAyMSAyMToxNDo1MCAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKCgkqIHRleGluZm8udGV4IChcY29tbWVudCwgXGNvbW1lbnR4eHgpOiBJZ25vcmUgQCBpbiBjb21tZW50LgoKVGh1IERlYyAxMyAyMjozODozMSAxOTkwICBDaHJpcyBIYW5zb24gIChjcGggYXQga2xlcGgpCgoJKiB0ZXhpbmZvLnRleCAoXGRlZml2YXJoZWFkZXIpOiBDYXBpdGFsaXplICJWYXJpYWJsZSIuCgpTdW4gRGVjICAyIDAxOjQ2OjA0IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQoKCSogdGV4aW5mby50ZXggKFxpbmRleGR1bW1pZXMsIFxpbmRleG5vZm9udHMpOiBIYW5kbGUgXHQgbGlrZSBcci4KCgkqIHRleGluZm8udGV4IChoZWFkaW5nIGZvbnRzKTogTmV3IGZvbnRzIGJhc2VkIG9uIGNtLi4uMTIuCgpUdWUgTm92IDI3IDE2OjU5OjM1IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQoKCSogdGV4aW5mby50ZXggKFxpbmRleG5vZm9udHMpOiBBbHNvIHN1cGVyc2VkZSBcVGVYIGFuZCBcZG90cy4KClN1biBOb3YgMTggMTY6MTg6MTQgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCgoJKiB0ZXhpbmZvLnRleCAoXCopOiBFbmQgd2l0aCBcaWdub3Jlc3BhY2VzLgoKRnJpIE5vdiAgMiAxNzo0MTo0OCAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKCgkqIHRleGluZm8udGV4IChcKik6IE91dHB1dCBlbXB0eSBoYm94IHRvIGF2b2lkIGxvc2luZyB3aGl0ZXNwYWNlLgoJKFxkZWZ0eXBldmFyaGVhZGVyLCBcZGVmdHlwZXZyaGVhZGVyKTogRW5kIHRoZSBwYXJhZ3JhcGgKCXdpdGggc3VpdGFibGUgcGVuYWx0aWVzLgoJKFxkZWZ0eXBldnJoZWFkZXIpOiBEbyBwcmludCB0aGUgZGF0YSB0eXBlLgoKVGh1IE5vdiAgMSAxMjowNDo1MiAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKCgkqIHRleGluZm8udGV4IChcZGVmbWV0aG9kaGVhZGVyKTogUHJpbnQgYG1ldGhvZCcsIG5vdCBgb3BlcmF0aW9uJy4KCkZyaSBPY3QgMjYgMTc6MTE6MDggMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCgoJKiB0ZXhpbmZvLnRleCAoXGluZGV4ZHVtbWllcyk6IFRlbXBvcmFyaWx5IHJlZGVmaW5lIFxfLgoJKFxwdGV4ZG90cyk6IENvcHkgb2YgcGxhaW4gdGV4IFxkb3RzLgoJKFx0ZXgpOiBUZW1wb3JhcmlseSByZWluc3RhbGwgdGhhdC4KCkZyaSBPY3QgMTkgMTY6NTc6NDggMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBtb2xlLmFpLm1pdC5lZHUpCgoJKiB0ZXhpbmZvLnRleCAoXHN1YnN1YnNlY2hlYWRpbmdpLCBcc3Vic2VjaGVhZGluZ2kpOiBOZXcgc3Vicm91dGluZXMuCgpNb24gT2N0ICA4IDEzOjM0OjE5IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQoKCSogdGV4aW5mby50ZXggKGFjdGl2ZSBfKTogVXNlIFxub3JtYWx1bmRlcnNjb3JlLgoKVHVlIFNlcCAyNSAyMjozMjo1NSAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKCgkqIHRleGluZm8udGV4IChcZGVmdHlwZWZuLCBcZGVmdHlwZXZhciwgXGRlZnR5cGV2cik6IE5ldyBtYWNyb3MuCglUaGVpciBzdWJyb3V0aW5lcyBhbHNvIG5ldy4KClR1ZSBTZXAgMjUgMTY6NDI6NTIgMTk5MCAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmQgYXQgZ2VlY2guYWkubWl0LmVkdSkKCgkqIHRleGluZm86IFJlY29nbml6ZSBgLnRleCcgYXMgYSBzdWZmaXguCgpUdWUgU2VwIDI1IDAxOjQ2OjU0IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgbW9sZS5haS5taXQuZWR1KQoKCSogdGV4aW5mby50ZXggKFxkZWZ0eXBlZnVuKTogTmV3IG1hY3JvLgoJKFxkZWZ0eXBlZnVuaGVhZGVyLCBcZGVmdHlwZWZ1bmhlYWRlcngsIFxkZWZ0eXBlZnVuYXJncyk6IEFsc28gbmV3LgoKRnJpIFNlcCAxNCAwMDozODoyOCAxOTkwICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZCBhdCBjaHVyY2h5LmFpLm1pdC5lZHUpCgoJKiB0ZXhpbmZvOiBXZWVkIG91dCBmaWxlcyB0aGF0IGhhdmUgdHdvLWxldHRlciBleHRlbnNpb25zIGJ1dCBkb24ndAoJc3RhcnQgd2l0aCBhIGJhY2tzbGFzaCwgYW5kIHRoZXJlZm9yZSBhcmVuJ3QgaW5kZXggZmlsZXMuCgoJKiB0ZXhpbmZvOiBIYW5kbGUgaW5kZXggZmlsZXMgdGhhdCBoYXZlIGFueSB0d28tbGV0dGVyIGV4dGVuc2lvbiwKCXJhdGhlciB0aGFuIHVzaW5nIGEgc3RhdGljIGxpc3Qgb2YgZXh0ZW5zaW9ucy4KCgkqIHRleGluZm86IEhhbmRsZSAudGV4aSBleHRlbnNpb24gYXMgd2VsbCBhcyAudGV4aW5mby4KCgkqIHRleGluZm86IE5ldyBmaWxlLCBhIHNoIHNjcmlwdCB0byBkbyAudGV4aW5mbyAtPiAuZHZpLgoKTW9uIFNlcCAxMCAxMzoxNDozOSAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IG1vbGUuYWkubWl0LmVkdSkKCgkqIHRleGluZm8udGV4IChcbWF0aCk6IE5ldyBtYWNyby4KClR1ZSBTZXAgIDQgMDc6NDM6MzMgMTk5MCAgS2FybCBCZXJyeSAgKGthcmwgYXQgaGF5bGV5KQoKICAgICAgICAqIHRleGluZm8udGV4IChcY2hmcGxhaW4pOiBEbyBub3QgcHJpbnQgYSBwZXJpb2QgYWZ0ZXIgdGhlIGNoYXB0ZXIKICAgICAgICBudW1iZXIsIGZvciBjb25zaXN0ZW5jeSB3aXRoIHNlY3Rpb25zIGV0IGFsLgoKICAgICAgICAqIHRleGluZm8udGV4IChccmVmWCk6IGh5cGhlbmF0ZSBgdW5kZWZpbmVkJyBzbyB0aGF0IHRoZSBsaWdhdHVyZQogICAgICAgIGlzIG5vdCBsb3N0LgoKICAgICAgICAqIHRleGluZm8udGV4IChfKTogdXNlIFxfIHVubGVzcyB3ZSdyZSBpbiB0dC4KICAgICAgICAoXGlmdXNpbmd0dCk6IG5ldyBtYWNybyBmb3Igc3VjaCBjb25kaXRpb25hbGl6YXRpb24uCgogICAgICAgICogdGV4aW5mby50ZXggKFx4cmVmWCk6IGRvbid0IHVzZSBcdW5oYm94IHRvIHByaW50IHRoZSBub2RlIG5hbWVzLAogICAgICAgIHNpbmNlIHRoYXQgbG9zZXMgb24gaHlwaGVucy4KCVVzZSBcaWdub3Jlc3BhY2VzIHJhdGhlciB0aGFuIFxsb3Nlc3BhY2UuCgpUaHUgQXVnICAyIDA3OjAzOjI2IDE5OTAgIEthcmwgQmVycnkgIChrYXJsIGF0IGhheWxleSkKCiAgICAgICAgKiB0ZXhpbmZvLnRleCAoXGxpbmVudW1iZXIpOiBuZXcgbWFjcm8uCiAgICAgICAgKFxyZWZ4KTogZ2l2ZSB0aGUgbGluZSBudW1iZXIgaW4gdGhlIG1lc3NhZ2UuCgpUdWUgSnVsIDMxIDA5OjEzOjMyIDE5OTAgIEthcmwgQmVycnkgIChrYXJsIGF0IGhheWxleSkKCiAgICAgICAgKiB0ZXhpbmZvLnRleCAoXHJlZngpOiBpbXByb3ZlIHdhcm5pbmcgbWVzc2FnZXMsIHJlbW92ZQogICAgICAgIHVubmVjZXNzYXJ5IGdyb3VwcywgYW5kIGltcHJvdmUgbG9naWMuCgpUaHUgSnVsIDI2IDIwOjUzOjM4IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKCgkqIHRleGluZm8udGV4IChcc3ViaGVhZGluZywgXHN1YnN1YmhlYWRpbmcpOiBNaXNzaW5nIG1hY3JvcyBkZWZpbmVkLgoKVGh1IEp1bCAxOSAyMjo0ODoyNiAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCgoJKiB0ZXhpbmZvLnRleCAoXHRpdGxlcGFnZSk6IERvbid0IHByaW50IHJ1bGUgZm9yIFxwYWdlIHVubGVzcyBhbHJlYWR5CglwcmludGVkIGEgcnVsZS4KCShcYWJzdHJhY3QpOiBEZWxldGVkLgoJKFxkaXJlbnRyeSk6IE5ldyBjb21tYW5kLCBtdWNoIGxpa2UgXGlnbm9yZS4KClN1biBKdWwgMTUgMTY6Mjg6NDIgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQoKCSogdGV4aW5mby50ZXggKFxhYnN0cmFjdCk6IE5ldyBjb25zdHJ1Y3Q7IHRyaXZpYWwgaW4gdGV4LgoKU3VuIEp1biAxNyAwMTowMzoxNiAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCgoJKiB0ZXhpbmZvLnRleCAoXGRlZmN2KTogUHJvdGVjdCBzcGFjZSBiZWZvcmUgYG9mJy4KCShcZGVmc3BlYyk6IENhcGl0YWxpemUgYEZvcm0nLgoKU2F0IEp1biAxNiAxOTozNjo1NiAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCgoJKiB0ZXhpbmZvLnRleCAoXGtiZCwgXGtiZGZvbyk6IFVzZSBccGFyIHRvIHRlcm0uIGFyZyB0byBca2JkZm9vLgoKRnJpIEp1biAxNSAxMDo0NzoxMiAxOTkwICBSb2JlcnQgSi4gQ2hhc3NlbGwgIChib2IgYXQgcG9nby5haS5taXQuZWR1KQoKCSogdGV4aW5mby50ZXggKFxkZWZjdik6IFVzZSBcZGVmY3ZhcmhlYWRlciBpbnN0ZWFkIG9mICh1bmRlZmluZWQpCglcZGVmY3ZoZWFkZXIuCgpGcmkgTWF5IDI1IDE4OjA0OjMxIDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKCgkqIHRleGluZm8udGV4IChceHJlZlgpOiBVc2UgXHR1cm5vZmZhY3RpdmUuCgpNb24gTWF5IDIxIDIxOjE3OjM0IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKCgkqIHRleGluZm8udGV4IChcdHVybm9mZmFjdGl2ZSk6IE5ldyBjb21tYW5kLgoJKFxub3JtYWxkb3VibGVxdW90ZSwgLi4uKTogTmV3IGNvbW1hbmRzLgoJKFxkb3NldHEpOiBVc2UgXHR1cm5vZmZhY3RpdmUuCgpTYXQgTWF5IDE5IDEyOjMxOjE3IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKCgkqIHRleGluZm8udGV4IChcaW5kaXQpOiBVc2Ugc2xhbnRlZCBmb250LCBub3QgaXRhbGljLgoJKFxzbWFsbGxpc3B4KTogRG8gXGluZGV4Zm9udHMuCgpGcmkgTWF5CSA0IDE3OjM1OjA0IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKCgkqIHRleGluZm8udGV4IChcZm9vdG5vdGUsIFxmb290bm90ZXp6eik6IE1ha2UgaXQgXGxvbmcuCgpXZWQgTWF5CSAyIDAxOjE5OjU1IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKCgkqIHRleGluZm8udGV4IChcdGl0bGVybSk6IEdvIGJhY2sgdG8gY21ieDEwIHNjYWxlZCBcbWFnc3RlcDUuCgkoXGhzaXplKTogRG9uJ3Qgc2V0IGl0LCB1c2UgdGhlIGRlZmF1bHQuCgpGcmkgTWFyIDIzIDIxOjA3OjAyIDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKCgkqIHRleGluZm8udGV4IChcZm9vdG5vdGUpOiBSZWFkIGFyZyBpbiBicmFjZXMsIG5vdCBhcyBhIGxpbmUuCgpNb24gTWFyIDE5IDE5OjMwOjA4IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKCgkqIHRleGluZm8udGV4IChcdW5udW1ic3Vic3Vic2VjZW50cnkpOiBUeXBvIGluIG5hbWUgYmVpbmcgZGVmaW5lZC4KClR1ZSBNYXIgMTMgMTg6NDk6MjcgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQoKCSogdGV4aW5mby50ZXggKFxkZWZ2YXJhcmdzKTogQWRkIHBlbmFsdHkgYXQgZW5kLgoKCSogdGV4aW5mby50ZXggKFxzeW5pbmRleCwgXHN5bmNvZGVpbmRleCk6IENvcHkgb25lIGluZGV4IGZpbGUgbmFtZQoJaW50byB0aGUgb3RoZXIuCgpUdWUgTWFyCSA2IDE2OjU4OjU0IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKCgkqIHRleGluZm8udGV4IChcZGVmdHQpOiBNYWtlIHRoaXMgYSBkaXN0aW5jdCBmb250LgoKCSogdGV4aW5mby50ZXggKFxpbml0aWFsKTogRGVmaW5lIFx0dCBsaWtlIFx0ZW50dC4KCgkqIHRleGluZm8udGV4IChcaWZpbmZvKTogRW5kIHdpdGggXGxvc2VzcGFjZS4KCShcaWdub3JlLCBcaWZzZXRmYWlseHh4LCBcaWZjbGVhcmZhaWx4eHgpOiBMaWtld2lzZS4KClN1biBNYXIJIDQgMTk6NTU6NTcgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQoKCSogdGV4aW5mby50ZXggKFxsYnJiLCBccmJyYik6IFVzZSBcYmYuCgpTYXQgTWFyCSAzIDE3OjUzOjIyIDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgZ2VlY2gpCgoJKiB0ZXhpbmZvLnRleCAoXG9uZXBhZ2VvdXQpOiBTZXQgXGVzY2FwZWNoYXIgaGVyZS4KCgkqIHRleGluZm8udGV4IChccmF3YmFja3NsYXNoKTogRGVmaW5lIHVzaW5nIFxjaGFyZGVmLgoKCSogdGV4aW5mby50ZXggKFxAKTogVXNlIHR0Zm9udC4KClRodSBNYXIJIDEgMTY6Mzc6NDYgMTk5MCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQoKCSogdGV4aW5mby50ZXggKFlzZWN0aW9ubnVtYmVyYW5kdHlwZSwgWWFwcGVuZGl4bGV0dGVyYW5kdHlwZSk6CglDYXBpdGFsaXplICJjaGFwdGVyIiwgImFwcGVuZGl4IiBhbmQgInNlY3Rpb24iLgoKTW9uIEZlYiAxOSAyMDoyNjoyMiAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCgoJKiB0ZXhpbmZvLnRleCAoXHhrZXkpOiBBdHRlbXB0IHRvIGVsaW1pbmF0ZSBzcHVyaW91cyBzcGFjZSBmcm9tCglvdXRwdXQuCSBMb29rIGF0IHktb3Itbi1wLgoKTW9uIEZlYiAxMiAxNjozNDowMCAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCgoJKiB0ZXhpbmZvLnRleCAoXGVycm9yYm94KTogR2V0IFxkaW1lbjAgZnJvbSBcdGVudHQuCgpTdW4gRmViIDExIDE1OjExOjU3IDE5OTAgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKCgkqIHRleGluZm8udGV4IChcZGVmdW5hcmdzKTogVXNlIHJhZ2dlZCByaWdodCBmb3IgYXJncy4KCUFkZCBsYXJnZSBwZW5hbHR5IGF0IGVuZC4KCgkqIHRleGluZm8udGV4OiBNYWtlIGFjdGl2ZSBkZWZpbml0aW9uIGZvciA9IHVzaW5nIFx0dCwgYnV0IGRpc2FibGUuCgkoXGRlZnBhcnNlYm9keSk6IE1ha2UgPSBhY3RpdmUuCgkoXGRlZnVuaGVhZGVyLCBldGMuKTogTWFrZSBpbmFjdGl2ZSBhZ2Fpbi4KCgkqIHRleGluZm8udGV4IChcZXJyb3Jib3gpOiBUcnkgdG8gZXF1YWxpemUgb3V0c2lkZSBzcGFjZSB0byBib3RoIHNpZGVzLgoKRnJpIEZlYgkgMiAxNDo0NzoyMSAxOTkwICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCgoJKiB0ZXhpbmZvLnRleCAoXGFwcGVuZGl4KTogRG9uJ3QgdXNlIFx0aGUgYmVmb3JlIFxhcHBlbmRpeGxldHRlci4KClNhdCBEZWMgMTYgMTQ6MDI6NTYgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQoKCSogdGV4aW5mby50ZXggKFxjaGFwdGVyLCBcYXBwZW5kaXgpOiBNYWtlIGRlZm4gb2YgXHRoaXNjaGFwdGVyCglyZWZlciB0byBcdGhpc2NoYXB0ZXJuYW1lLCBhbmQgc3RvcmUgYWN0dWFsIG5hbWUgdGhlcmUuCgkoXGNoYXB0ZXJub2ZvbnRzKTogVHVybiBvZmYgbW9yZSBtYWNyb3MuCgkoXGluZGV4ZHVtbWllcyk6IExpa2V3aXNlLgoKU3VuIE5vdiAxOSAxNToyOTo0NyAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCgoJKiB0ZXhpbmZvLnRleCAoXHRpdGxlcm0pOiBUaGVyZSB3ZXJlIHR3byBkZWZpbml0aW9ucyBvZiB0aGlzIGNvbW1hbmQuCglQdXQgdGhlbSB0b2dldGhlciBhbmQgY29tbWVudGVkIG91dCBvbmUgb2YgdGhlbS4KCShcc3VidGl0bGVybSk6IFdhcyBzYW1lIGFzIFx0ZW5ybSwgc28ganVzdCBjb3B5IHRoYXQuCgkoXG5pbmV0dCk6IEFsd2F5cyBkZWZpbmUgdGhpcy4KCShcaW5kdHQpOiBDb3B5IGZyb20gXG5pbmV0dC4KClNhdCBOb3YgMTggMjI6NTc6MzcgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQoKCSogdGV4aW5mby50ZXggKFxzc2Vjcm0sIGV0Yy4pOiBTY2FsZSBieSAxMzE1LCByYXRoZXIgdGhhbiB0byAxM3B0LgoKV2VkIE5vdgkgOCAxODozODozMyAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCgoJKiB0ZXhpbmZvLnRleCAoXHRpdGxlcGFnZSk6IFR1cm4gb24gaWZmaW5pc2hlZHRpdGxlcGFnZSBzbwoJYm90dG9tIHJ1bGUgaXMgbm90IHByaW50ZWQuCgkoXHRpdGxlenp6KTogVHVybiBpdCBvZmYsIHNvIGJvdHRvbSBydWxlIGlzIHByaW50ZWQuCgpNb24gTm92CSA2IDA5OjIzOjI5IDE5ODkgIEthcmwgQmVycnkgIChrYXJsIGF0IGhheWxleSkKCgkqIHRleGluZm8udGV4IChcY2hhcHRlcnp6eiwgXGFwcGVuZGl4enp6KTogaW5jbHVkZSBgQ2hhcHRlcgoJXHRoZVxjaGFwbm8nIGFuZCBgQXBwZW5kaXggXGFwcGVuZGl4bGV0dGVyJyBpbiBcdGhpc2NoYXB0ZXI7IHVzZQoJXHhkZWYgaW5zdGVhZCBvZiBcZ2RlZiB0byBkZWZpbmUgXHRoaXNjaGFwdGVyLCB0byBhdm9pZCB0aW1pbmcKCXByb2JsZW1zIHdpdGggXGNoYXBubyBvciBcYXBwZW5kaXhsZXR0ZXIuCgkoXHN0YXJ0Y29udGVudHMpOiBkb24ndCBib3RoZXIgcHV0dGluZyBgVGFibGUgb2YgQ29udGVudHMnIG9yCglgU2hvcnQgQ29udGVudHMnIGluIHRoZSBoZWFkbGluZS4KCkZyaSBPY3QgMjAgMDk6MTE6MzUgMTk4OSAgS2FybCBCZXJyeSAgKGthcmwgYXQgaGF5bGV5KQoKCSogdGV4aW5mby50ZXggKFx0aXRsZXBhZ2UpOiByZW1vdmUgb2Jzb2xldGUgY29kZSBmb3Igc3VidGl0bGVzLgoJKFx0aXRsZXp6eik6IGVuZCB3aXRoIFxyZWxheCwgdG8gYXZvaWQgbWlzaW50ZXJwcmV0YXRpb24gb2YgYQoJZm9sbG93aW5nIGBwbHVzJyBvciBgbWludXMnCgkoXHBhZ2UgKGluc2lkZSBcdGl0bGVwYWdlKSk6IGNhbGwgXGZpbmlzaHRpdGxlcGFnZS4KCShcRXRpdGxlcGFnZSk6IGNhbGwgXGZpbmlzaHRpdGxlcGFnZSwgaWYgaXQgaGFzbid0IGJlZW4uCgkoXGZpbmlzaHRpdGxlcGFnZSk6IG5ldyBtYWNybyB0byBwcmludCBhIHJ1bGUgYW5kIGxlYXZlIHNvbWUgc3BhY2UKCWF0IHRoZSBib3R0b20gb2YgdGhlIHRpdGxlIHBhZ2UuCgkoXGlmZmluaXNoZWR0aXRsZXBhZ2UpOiBuZXc7IHNheXMgd2hldGhlciBcZmluaXNodGl0bGVwYWdlIGhhcyBiZWVuCgljYWxsZWQuCgpNb24gTm92CSA2IDIxOjM1OjM0IDE5ODkgIFJvYmVydCBKLiBDaGFzc2VsbCAgKGJvYiBhdCByaWNlLWNoZXgpCgoJKiB0ZXhpbmZvLnRleDogUmVwbGFjZWQgYEdOVSBDQycgaW4gdGhlIGNvcHlsZWZ0IG9mIHRoaXMgZmlsZSB3aXRoCgkgIHRoZSBwaHJhc2UgYHRoaXMgdGV4aW5mby50ZXggZmlsZScuCgpGcmkgT2N0IDI3IDEwOjM2OjMyIDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKCgkqIHRleGluZm8udGV4IChcc2V0ZmlsZW5hbWUpOiBEbyBub3RoaW5nIGV4Y2VwdCAxc3QgdGltZSB1c2VkLgoJKFx0aXRsZXBhZ2UpOiBCcmFjZSBtaXNwbGFjZWQgaW4gXHRpdGxlenp6LgoJKFxpbmRleGR1bW1pZXMsIFxpbmRleG5vZm9udHMpOiBIYW5kbGUgQHcuCgoJKFxyZWFkYXV4ZmlsZSk6IFNldCBcaWZoYXZleHJlZnMgdHJ1ZS4KCShccmVmWCk6IFdhcm4gZm9yIGV2ZXJ5IHVzZSBvZiBhbiB1bmRlZmluZWQgeHJlZiwKCWJ1dCBpZiBubyB4cmVmIHZhbHVlcyBhcmUga25vd24sIHdhcm4ganVzdCBvbmNlIHRoYXQgbm9uZSBhcmUga25vd24uCgpUdWUgU2VwIDE5IDA0OjEyOjUxIDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKCgkqIHRleGluZm8udGV4IChceHJlZlgpOiBHbyBiYWNrIHRvIGBzZWN0aW9uIE4gW0Zvb10sIHBhZ2UgTScuCgkoXGV4cCk6IERlbGV0ZSBpdC4KCk1vbiBTZXAgMTggMTU6Mjk6MzAgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQoKCSogdGV4aW5mby50ZXggKFxjaGFwZW50cnlmb250cyk6IFRyeSB1c2luZyBccm0gZm9yIGNoYXAgdGl0bGUuCgpUdWUgU2VwIDEyIDAzOjQxOjEwIDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKCgkqIHRleGluZm8udGV4IChcdGl0bGVwYWdlKTogTWlzc2luZyBjbG9zZXBhcmVuIGFmdGVyIFx0aXRsZS4KCURlbGV0ZSBleGNlc3MgcGFyZW4gYWZ0ZXIgXHBhZ2UuCgoJKiB0ZXhpbmZvLnRleCAoXHNhbXApOiBVc2UgXHRjbG9zZS4KCk1vbiBTZXAgMTEgMjM6Mjg6MDQgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQoKCSogdGV4aW5mby50ZXggKFx0Y2xvc2UpOiBNYWtlIGBAICcgYSBmdWxsLXdpZHRoIHNwYWNlLgoKU2F0IFNlcAkgOSAyMDoxMToyOSAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCgoJKiB0ZXhpbmZvLnRleCAoXGJhbGFuY2Vjb2x1bW5zKTogSGFuZGxlIHByb3Blcmx5IHRoZSBjYXNlIHdoZXJlCgl0aGUgaW5kZXggZW5kcyBiZWZvcmUgb25lIHBhZ2UgaXMgb3V0cHV0LCBzbyBccGFydGlhbHBhZ2UgaXMgbm9uZW1wdHkuCglJbiB0aGlzIGNhc2Ugd2UgbWF5IG5lZWQgdG8gb3V0cHV0IHR3byBwYWdlcyBpZiB0aGUgZGF0YQoJd291bGQganVzdCBiYXJlbHkgZml0IGlmIG5vdCBmb3IgXHBhcnRpYWxwYWdlLgoKV2VkIEF1ZyAzMCAyMjo0NTozMSAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCgoJKiB0ZXhpbmZvLnRleCAoXHJlZngpOiBOZXcgMm5kIG9wZXJhbmQsIG91dHB1dCBpZiB4cmVmIGlzIG5vbi1udWxsLgoJKFx4cmVmWCk6IFVzZSB0aGF0IHRvIG91dHB1dCB0aGUgY29tbWEgYWZ0ZXIgdGhlIHNlY3Rpb24gbnVtYmVyLgoJKFxhcHBlbmRpeG5vZGVyZWYsIFxhcHBlbmRpeHNldHJlZiwgXFlhcHBlbmRpeGxldHRlcmFuZHR5cGUpOgoJRGVmaW5lIHhyZWZzIGZvciBhcHBlbmRpY2VzIHRoYXQgc2F5ICJBcHBlbmRpeCBOIi4KCVVzZWQgaW4gXGFwcGVuZGl4LCBcYXBwZW5kaXhzZWMsIGV0Yy4KCgkqIHRleGluZm8udGV4IChcc21hcnRpdGFsaWMpOiBUaGUgYWN0dWFsIGl0YWxpYyBjb3JyZWN0aW9uIHdhcyBvbWl0dGVkLgoKTW9uIEF1ZyAyOCAwMDoyMTozMyAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IGFwcGxlLWd1bmtpZXMuYWkubWl0LmVkdSkKCgkqIHRleGluZm8udGV4IChccmVmKTogTmV3IGtpbmQgb2YgY3Jvc3MtcmVmZXJlbmNlLgoJKFx4cmVmWCk6IFB1dCBzaW5nbGUgcXVvdGVzIGFyb3VuZCBzZWN0aW9uIG5hbWUuCgkoXHJlZngpOiBBbGxvdyBoeXBoZW5hdGlvbiBpbiBgdW5kZWZpbmVkJy4KCgkqIHRleGluZm8udGV4ICgrKTogTWFrZSBpdCBhY3RpdmUuCgkoQWx0bW9kZSk6IERlbGV0ZSBhY3RpdmUgZGVmbi4KCgkqIHRleGluZm8udGV4IChcZGVmdW5hcmdzKTogUHJldmVudCBoeXBoZW5hdGlvbiBhdCBgLScgaW4gYXJncy4KCU1vdmUgdGhlIHBlbmFsdHkgYXQgdGhlIGVuZCBzbyB0aGF0IGl0IHdvcmtzLgoJKFxkZWZ2YXJhcmdzKTogTW92ZSB0aGUgcGVuYWx0eSBhdCB0aGUgZW5kIHNvIHRoYXQgaXQgd29ya3MuCgoJKiB0ZXhpbmZvLnRleCAoXGRlZnBhcnNlYm9keSk6IERvIGluY3JlYXNlIHJpZ2h0IG1hcmdpbi4KCgkqIHRleGluZm8udGV4IChcZGVmYm9keWluZGVudCk6IE5vdyAuNCBpbmNoLgoKCSogdGV4aW5mby50ZXggKFxwb2ludCwgXHJlc3VsdCwgXGV4cGFuc2lvbiwgXHByaW50LCBcZXF1aXYsIFxlcnJvcik6CglOZXcgbWFjcm9zIGZvciBMaXNwIG1hbnVhbC4KCgkqIHRleGluZm8udGV4IChcdGV4KTogU2V0ID0gdG8gY29kZSAxMi4KCgkqIHRleGluZm8udGV4IChcZW50cnkpOiBIYWlyaWVyIHdheSB0byBvdXRwdXQgZG90cy4KCgkqIHRleGluZm8udGV4IChca2JkKTogSWYgYXJnIGNvbnNpc3RzIG9mIG9uZSBca2V5IGNvbW1hbmQsIGJlIGEgbm8gb3AuCgoJKiB0ZXhpbmZvLnRleCAoXHNjKTogRGVsZXRlIHNwdXJpb3VzIFwuCgoJKiB0ZXhpbmZvLnRleCAoXHNtYXJ0aXRhbGljKTogTmV3IG1hY3JvLCBkb2VzIGl0YWxpYyBjb3JyZWN0aW9uIGF0IGVuZC4KCShcaSwgXHZhciwgXGRmbiwgXGVtcGgsIFxjaXRlKTogVXNlIHRoYXQuCgoJKiB0ZXhpbmZvLnRleCAoXG5vZGUpOiBEbyBcRU5WY2hlY2suCgoJKiB0ZXhpbmZvLnRleCAoXGluaXRpYWwpOiBJbmZpbml0ZSBwZW5hbHR5IGF0IGVuZC4KCgkqIHRleGluZm8udGV4IChcY2hhcHRlcm5vZm9udHMpOiBOZXcgbWFjcm8sIHNldHMgXGNvZGUsIGV0Yy4gdG8KCW91dHB1dCBzZWx2ZXMgaW50byBmaWxlLiAgQWxzbyB1bmRlZiBcZnJlbmNoc3BhY2luZyBhbmQgXHJhd2JhY2tzbGFzaC4KCShceGhhcHRlcnp6eiwgZXRjLik6IENhbGwgdGhhdC4JIE1ha2UgYSBncm91cCB0byB1bmRvIGl0LgoJKFxpbmRleGR1bW1pZXMpOiBEbyBsaWtlIFxjaGFwdGVybm9mb250cy4KClN1biBBdWcgMjcgMTY6MDU6MjMgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBhcHBsZS1ndW5raWVzLmFpLm1pdC5lZHUpCgoJKiB0ZXhpbmZvLnRleCAoXGZyZW5jaHNwYWNpbmcpOiBPdXIgb3duIGRlZmluaXRpb24sIHVzaW5nCglkZWNpbWFsIG51bWJlcnMgZm9yIGFsbCBjaGFyYWN0ZXIgY29kZXMuICBUaGUgc3RhbmRhcmQgb25lIGZhaWxzLgoKCSogdGV4aW5mby50ZXggKFxpbmRleG5vZm9udHMpOiBIYW5kbGUgXGZpbGUsIFx0dCwgYW5kIG1hbnkgbW9yZS4KCkZyaSBBdWcgMjUgMjI6MDU6MjQgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBhcHBsZS1ndW5raWVzLmFpLm1pdC5lZHUpCgoJKiB0ZXhpbmZvLnRleCAoXGNoYXB0ZXIsIGV0Yy4pOiBVbmRlZmluZSBcdGNsb3NlIGFyb3VuZCBcZWRlZlx0ZW1wLgoKTW9uIEF1ZyAyMSAxNTo0Mjo0NyAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IGFwcGxlLWd1bmtpZXMuYWkubWl0LmVkdSkKCgkqIHRleGluZm8udGV4IChcdGNsb3NlKTogTGlrZSBcdCBidXQgbWFrZSBzcGFjZSBzYW1lIHdpZHRoCglhcyBpbiBzdXJyb3VuZGluZyB0ZXh0LgoJKFxjb2RlLCBca2JkKTogVXNlIFx0Y2xvc2UuCgpUdWUgSnVsCSA0IDIwOjUzOjUyIDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKCgkqIHRleGluZm8udGV4ICh0aXRsZXBhZ2UpOiBEb24ndCBzZXQgXGV2ZXJ5cGFyOyBzdGFydCBqdXN0IG9uZSBncm91cC4KCVNlZSBjb21tZW50cyBpbiB0aGUgY29kZS4KCgkqIHRleGluZm8udGV4IChkZWZvcCxkZWZjdik6IFVzZSBkZWZvcHBhcnNlYm9keS4KCSogdGV4aW5mby50ZXggKGRlZm9wcGFyc2Vib2R5KTogTGlrZSBkZWZtZXRocGFyc2Vib2R5IGJ1dCBkZWZpbmVzCglkZWYuLi54IGZvciBtb3JlIGFyZ3VtZW50cy4KClNhdCBKdW4gMTcgMTM6NDk6MTMgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQoKCSogdGV4aW5mby50ZXggKFx0aXRsZXBhZ2UpOiBSZW5hbWUgQHN1YnRleHQsIGV0Yy4sIHRvIEBzdWJ0aXRsZSwgZXRjLgoKCSogdGV4aW5mby50ZXggKFx0aXRsZXBhZ2UpOiBEb24ndCBwcmludCB0aGUgdGl0bGUgYXV0b21hdGljYWxseS4KCURlZmluZSBAdGl0bGUgdG8gcHJpbnQgaXQsIGFuZCB0aGUgcnVsZSB1bmRlcm5lYXRoIGl0LgoJVGhpcyBzaG91bGQgbWFrZSBAdGl0bGVwYWdlIHVwd2FyZCBjb21wYXRpYmxlIHdpdGggdGhlIG9sZCBvbmUuCgoJKiB0ZXhpbmZvLnRleCAoXHRpdGxlcGFnZSk6IFJldmVydCBsb2NhbCBkZWZpbml0aW9uIG9mIEBwYWdlCgl0byBwcmV2aW91cy4gIERvbid0IHByaW50IGEgcnVsZS4KCk1vbiBKdW4gMTIgMjA6NDk6MTcgMTk4OSAgS2FybCBCZXJyeS4gIChrYXJsIGF0IG1vdGUpCgoJKiB0ZXhpbmZvLnRleCAoXHRpdGxlcGFnZSk6IGFsbG93IGludGVuc2lvbmFsIGRlZmluaXRpb24gb2YgdGhlCglpdGVtcyBvbiB0aGUgdGl0bGUgcGFnZS4gIE5ldyBjb250cm9sIHNlcXVlbmNlcyAoYWxsb3dlZCBvbmx5Cgl3aXRoaW4gdGhlIHRpdGxlcGFnZSBlbnZpcm9ubWVudDopCgkgKEBzdWJ0ZXh0KTogbWF5IHRha2UgZWl0aGVyIGEgcGFyYWdyYXBoIChlLmcuLCBhIGJyaWVmCgkgZGVzY3JpcHRpb24gb2YgdGhlIHByb2dyYW0pIG9yIGp1c3QgYSBsaW5lIChlLmcuLCB0aGUgZGF0ZSkuCgkgTWF5IGFwcGVhciBtb3JlIHRoYW4gb25jZS4KCSAoQGF1dGhvcik6IG11c3QgY29tZSBhZnRlciBhbGwgdGhlIEBzdWJ0ZXh0J3MuCSBDYW4gYXBwZWFyIG1vcmUKCSB0aGFuIG9uY2UsIGFsc28uCgkgQWxzbywgdXNlIHRoZSB0aXRsZSBkZWZpbmVkIGJ5IEBzZXR0aXRsZS4KCSAoXHN1YnRleHRmb250LCBcYXV0aG9yZm9udCk6IHN3aXRjaCB0byB1c2luZyB0aGUgYXBwcm9wcmlhdGUKCSBmb250cyB3aXRoIGFwcHJvcHJpYXRlIGxlYWRpbmcuCgkgKFx0aXRsZXBhZ2V0b3BnbHVlLCBcdGl0bGVwYWdlYm90dG9tZ2x1ZSk6IGRlZmluZSBzcGFjZSB0aGF0CgkgbmV2ZXIgc3RyZXRjaGVzIG9yIHNocmlua3MuCgkgKFxyZWFsZXZlcnlwYXIpOiBmb3JtYXR0aW5nIGZvciB0aGUgQHN1YnRleHQncy4KClN1biBKdW4JIDQgMTU6MDQ6NTkgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQoKCSogdGV4aW5mby50ZXggKFxzaG9ydGNoYXBlbnRyeSwgXHNob3J0dW5udW1iZXJlZGVudHJ5KToKCVVzZSBkb3RzLCByaWdodCBqdXN0aWZ5IHBhZ2UgbnVtYmVycy4gIERvbid0IHVzZSBpdGFsaWNzLgoKRnJpIEp1bgkgMiAxNDo0MDoyOCAxOTg5ICBLYXJsIEJlcnJ5LiAgKGthcmwgYXQgbW90ZSkKCgkqIHRleGluZm8udGV4IChcZW50cnksIFxzZWNvbmRhcnkpOiB1c2UgcGxhaW4gVGVYIFxkb3RmaWxsIGZvcgoJYmV0dGVyIGxlYWRlcnMgdGhhbiB0aGUgaG9tZWdyb3duIG9uZS4KCShcRG90c2JveCk6IERlbGV0ZWQuCgkoXGRvdGZpbGwpOiBEZWxldGVkOyB1c2UgUGxhaW4gVGVYIGRlZmluaXRpb24uCgpXZWQgTWF5IDMxIDE3OjE5OjMwIDE5ODkgIFJpY2hhcmQgU3RhbGxtYW4gIChybXMgYXQgc3VnYXItYm9tYnMuYWkubWl0LmVkdSkKCgkqIHRleGluZm8udGV4IChpZ25vcmUpOiBVbmRlZmluZSB0aGUgY2hhcHRlci9zZWN0aW9uIG1hY3JvcwoJd2hpbGUgcmVhZGluZyB0aGUgYXJncywgc2luY2UgdGhleSBhcmUgXG91dGVyLgoJKGlmaW5mbyk6IExpa2V3aXNlCgkoaWZzZXR4eHgsIGlmY2xlYXJ4eHgpOiBDYWxsIGFub3RoZXIgbWFjcm8gdG8gcGFyc2UgdGhlCgljb25kaXRpb25hbGl6ZWQgdGV4dCwgYW5kIGRvIHRvIHRoYXQgbWFjcm8gYXMgd2l0aCBcaWdub3JlLgoKVHVlIE1heSAzMCAxNTowNDozNyAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCgoJKiB0ZXhpbmZvLnRleCAodW5udW1iZXJlZCk6IENoYW5nZSBiYWNrIGZyb20gXGxvbmcgdG8gXG91dGVyLgoKCSogdGV4aW5mby50ZXg6IENoYW5nZXMgYnkgS2FybCBCZXJyeSBmb3IgdG9jIGZvcm1hdC4KCVJld3JpdGUgdGhlIHRhYmxlIG9mIGNvbnRlbnRzIGZvciBhcHBlYXJhbmNlJ3Mgc2FrZS4gIEFkZCBhCglzeW5vbnltIGZvciBcc3VtbWFyeWNvbnRlbnRzLCBcc2hvcnRjb250ZW50cywgc2luY2UgdGhhdCBpcyB0aGUKCXRyYWRpdGlvbmFsIG5hbWUuICBUd28gc3Vicm91dGluZXMgYXJlIG5vdyBzaGFyZWQgYnkgXGNvbnRlbnRzIGFuZAoJXHN1bW1hcnljb250ZW50czogXHByZXBhcmVmb3Jjb250ZW50cywgdG8gcmVzZXQgdGhlIHBhZ2UgbnVtYmVyCglhbmQgc3VjaDsgYW5kIFxzdGFydGNvbnRlbnRzLCB3aGljaCBiZWdpbnMgdGhlIFx1bm51bWJlcmVkIGFuZAoJcmVzZXRzIGNhdGNvZGVzIGJlZm9yZSBcaW5wdXQgXGpvYm5hbWUudG9jLiAgU29tZSBvdGhlciBtYWNyb3MgLS0KCVxsYWJlbHNwYWNlLCBcZG9wYWdlbm8sIFxzaG9ydHBhZ2VubyAtLSBhcmUgc2hhcmVkIGJ5IHRoZSBwcmludGluZwoJbWFjcm9zLgoKCSogdGV4aW5mby50ZXggKFx0cnVlc2Vjcm0pOiBOZXcgZm9udCwgc2VjdGlvbi1zaXplIHJvbWFuLCB1c2VkIGluIHRoZQoJbmV3IHRvYy4gKGNtcjEyKQoKU3VuIE1heSAyOCAwNzoyNTo0MiAxOTg5ICBLYXJsIEJlcnJ5LiAgKGthcmwgYXQgbW90ZSkKCgkqIHRleGluZm8udGV4IChcZWF0aW5wdXQpOiBEbyBub3QgcHJpbnQgdGhlIGBcaW5wdXQgdGV4aW5mbycgaWYgYQoJLmZtdCBmaWxlIGlzIGJlaW5nIHVzZWQ7IGlnbm9yZSBpdCwgaW5zdGVhZC4gIFRoaXMgaXMgdGhlIGluaXRpYWwKCWRlZmluaXRpb24gZm9yIGBcJyBub3cuCgkoXGZpeGJhY2tzbGFzaCk6IG9uIHRoZSBvdGhlciBoYW5kLCBzdWJzZXF1ZW50IGJhY2tzbGFzaGVzIHNob3VsZAoJYmUgcHJpbnRlZCwgYW5kIGlmIHRoZSBmaWxlIGRvZXMgbm90IGhhdmUgYW4gYFxpbnB1dCB0ZXhpbmZvJywgdGhlCglmaXJzdCBvbmUgc2hvdWxkIGJlIHByaW50ZWQuICBUaGlzIG5ldyBtYWNybyBtYWtlcyB0aGUgZGVmaW5pdGlvbgoJZm9yIGBcJyBiZSBcbm9ybWFsYmFja3NsYXNoLCBpZiBpdCBpcyBcZWF0aW5wdXQuCgkoXHNldGZpbGVuYW1lKTogdXNlIFxmaXhiYWNrc2xhc2guCgpXZWQgTWF5IDI0IDE1OjM0OjU5IDE5ODkgIEpvc2VwaCBBcmNlbmVhdXggIChqbGEgYXQgYXBwbGUtZ3Vua2llcy5haS5taXQuZWR1KQoKCSogdGV4aW5mby50ZXg6IENoYW5nZWQgZGVmIG9mIHVubnVtYmVyZWQgZnJvbSBcb3V0ZXIgdG8gXGxvbmcuCgpUdWUgTWF5IDIzIDEyOjI3OjU5IDE5ODkgIEthcmwgQmVycnkuICAoa2FybCBhdCBtb3RlKQoKCSogdGV4aW5mby50ZXg6IEFsbG93IG9uZSB0byBtYWtlIGEgdGV4aW5mby5mbXQgZmlsZSAod2l0aCB0aGUKCWludm9jYXRpb246CgkgICBpbml0ZXggXCZwbGFpbiB0ZXhpbmZvCglhbmQgdGhlbiBzYXlpbmcKCSAgIEBkdW1wCglhZnRlciB0ZXhpbmZvLnRleCBoYXMgYmVlbiByZWFkLgoJQ2hhbmdlczoKCShcc2V0ZmlsZW5hbWUpOiBJbnN0ZWFkIG9mIGJlaW5nIGEgbm8tb3AsIHJlYWQgdGhlIHhyZWYgaW5mbywgYW5kCglvcGVuIHRoZSBjb250ZW50cyBhbmQgaW5kZXggZmlsZXMuICBUaGVzZSBhY3Rpb25zIHdlcmUgZG9uZSBhcwoJdGV4aW5mby50ZXggd2FzIHJlYWQgYmVmb3JlLgoJKFxvcGVuY29udGVudHMsIFxvcGVuaW5kaWNlcyk6IG5ldyBtYWNyb3MgdG8gb3BlbiB0aG9zZSBmaWxlcy4KCShccmVhZGF1eGZpbGUpOiBhbmQgb25lIHRvIHJlYWQgdGhlIGF1eCBmaWxlLgoKU2F0IEFwciAyOSAyMjoyODowMiAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCgoJKiB0ZXhpbmZvLnRleDogYEBoZWFkaW5ncyBvbicgbm8gbG9uZ2VyIGRvZXMgYSBwYWdlIGJyZWFrLgoKU3VuIEFwcgkgMiAxMToyMjoyOSAxOTg5ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zIGF0IHN1Z2FyLWJvbWJzLmFpLm1pdC5lZHUpCgoJKiB0ZXhpbmZvLnRleDogRGVmaW5lZCBgQGhlYWRpbmdzIHNpbmdsZScgYW5kIGBAaGVhZGluZ3MgZG91YmxlJy4KCWBAaGVhZGluZ3Mgb24nIHBpY2tzIG9uZSBvZiB0aGVtOiBgQHNldGNoYXB0ZXJuZXdwYWdlIG9kZCcKCXNheXMgYEBoZWFkaW5ncwlvbicgbWVhbnMgZG91YmxlOyBvdGhlcndpc2UgaXQgbWVhbnMgc2luZ2xlLgoKTW9uIEphbiAzMCAyMjowMDozNSAxOTg5ICBSb2JlcnQgSi4gQ2hhc3NlbGwgIChib2IgYXQgcmljZS1rcmlzcGllcy5haS5taXQuZWR1KQoKCSogdGV4aW5mby50ZXg6IENoYW5nZWQgdGhlIHNpemUgb2YgdGhlIHN1YnNlY3Rpb24gZm9udHMgc28gdGhleQoJYXJlIHNjYWxlZCBhdDEzcHQgcmF0aGVyIHRoYW4gYXQgbWFnc3RlcCAyLiBUaGlzIG1ha2VzIHRoZW0KCXNtYWxsZXIgdGhhbiB0aGUgc2VjdGlvbiBmb250cywgd2hpY2ggYXJlIHNjYWxlZCBhdCBtYWdzdGVwIDIuCglJbiBhZGRpdGlvbiwgY2hhbmdlZCB0aGUgc3NlY3JtIGZvbnQgZnJvbSBjbWJ4IHRvIGNtYi4KCkZyaSBKYW4JIDYgMTU6MDA6NDQgMTk4OSAgUmljaGFyZCBTdGFsbG1hbiAgKHJtcyBhdCBzdWdhci1ib21icy5haS5taXQuZWR1KQoKCSogdGV4aW5mby50ZXg6IENoYW5nZWQgQGxpc3AsIEBzbWFsbGxpc3AsIEBkaXNwbGF5IG5vdCB0byBjaGFuZ2UKCXRoZSByaWdodCBtYXJnaW4uCgpNb24gRGVjCSA1IDIyOjAxOjQ5IDE5ODggIFJvYmVydCBKLiBDaGFzc2VsbCAgKGJvYiBhdCByaWNlLWtyaXNwaWVzLmFpLm1pdC5lZHUpCgoJKiB0ZXhpbmZvLnRleDogVGVzdGVkIHRoZSB1c2Ugb2YgYGNtYngxMCcgdnJzIGBjbWIxMCcgZm9udCBhbmQKCXN0YXllZCB3aXRoIGNtYjEwIGZvbnQgc2luY2UgY21iMTAgbG9va3MgYmV0dGVyIHdoZW4gdGhlIGJvbGQgZmFjZQoJaXMgcGFydCBvZiBhIHNlbnRlbmNlIGFsdGhvdWdoIHRoZSBjbWJ4MTAgZm9udCBsb29rcyBiZXR0ZXIgb24gaXRzIG93bi4KCk1vbiBBdWcgMTUgMTQ6MzM6NTEgMTk4OCAgUm9iZXJ0IEouIENoYXNzZWxsICAoYm9iIGF0IHNwaWZmKQoKCSogdGV4aW5mby50ZXg6CUNoYW5nZWQgdGhlICh1bmRvY3VtZW50ZWQpIEB0b2RheSBjb21tYW5kIGZyb20gYQoJTW9udGggRGF5LCBZZWFyIGZvcm1hdCB0byBhIERheSBNb250aCBZZWFyIGZvcm1hdC4gIExlZnQgb2xkCgl2ZXJzaW9uIGNvbW1lbnRlZCBvdXQuCgoKQ29weXJpZ2h0IChDKSAxOTg4LCAxOTg5LCAxOTkwLCAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LAoxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgoKQ29weWluZyBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlsZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKYXJlIHBlcm1pdHRlZCBpbiBhbnkgbWVkaXVtIHdpdGhvdXQgcm95YWx0eSBwcm92aWRlZCB0aGUgY29weXJpZ2h0Cm5vdGljZSBhbmQgdGhpcyBub3RpY2UgYXJlIHByZXNlcnZlZC4KCgwKTG9jYWwgVmFyaWFibGVzOgptb2RlOiBpbmRlbnRlZC10ZXh0CmxlZnQtbWFyZ2luOiA4CmZpbGwtY29sdW1uOiA3Ngp2ZXJzaW9uLWNvbnRyb2w6IG5ldmVyCkVuZDoK