Geolocation/E911

Home » Asterisk Users » Geolocation/E911
Asterisk Users 8 Comments

T3V0IG9mIGN1cmlvc2l0eSwgaXMgdGhlcmUgYW55IGRvY3VtZW50YXRpb24gb24gd2hhdCBpcyBw bGFubmVkIGZvciB0aGUgR2VvbG9jYXRpb24vRTkxMT8NCg0KSXMgdGhlIHBsYW4gZm9yIEFzdGVy aXNrIHRvIGV4cG9zZSB0aGUgU0lQIGJvZHkgYW5kIGxlYXZlIGl0IHRvIGRpYWwgcGxhbiwgQVJJ
LCBBTUkgdG8gcHJvY2VzcyB0aGUgZGF0YT8NCkZvciBleGFtcGxlLCBtaW1lIHBpZGYreG1sIHNl Y3Rpb24/DQoNCk9yIGlzIHRoZXJlIGEgZGlmZmVyZW50IGFwcHJvYWNoIGJlaW5nIHdvcmtlZCBv biAob3IgcGxhbm5lZCB0byBiZSB3b3JrZWQgb24pPw0KDQpEYW4NCg=

8 thoughts on - Geolocation/E911

  • What are you talking about exactly?

    What I have understand, E911 geo information is sent “out of band” when 911 is called.

    So the question is, is you operating a 911 call centre – then you should have this information at hand already how to access this information.

    Or are it the opposite, you want to send geocoded information about SIP handset location to a E911 service when 911 is called? (that you want to embed in the outgoing body when 911 is called)?

    I think gaining access to these types of E911 API’s requires you being a SIP operator – and if you are a SIP operator with a number plan already, you should already have access to these types of API from the beginning and how to use them.

    Från: asterisk-users-bounces@lists.digium.com För Dan Cropp Skickat: den 23 maj 2022 22:01
    Till: Asterisk Users Mailing List – Non-Commercial Discussion
    Ämne: [asterisk-users] Geolocation/E911

    Out of curiosity, is there any documentation on what is planned for the Geolocation/E911?

    Is the plan for Asterisk to expose the SIP body and leave it to dial plan, ARI, AMI to process the data?

    For example, mime pidf+xml section?

    Or is there a different approach being worked on (or planned to be worked on)?

    Dan

  • There is a review up on Gerrit[1] with the documentation in markdown. There’s also a branch in Gerrit with the work. We are planning to do interop testing, so it hasn’t been merged into main and may change.

    No. It will be modules for Geolocation/E911 that understand the XML, with configuration as well as by reference. The PIDF+XML won’t be exposed, the code handles it. You create profiles and tell the PJSIP endpoint to use it, and that’s that. Can also be dynamically done in the dialplan.

  • There are specifications for conveying location information dynamically in the SIP INVITE to an upstream provider, which uses pidf+xml alongside SDP
    in the INVITE. This allows you to provide the address, floor, room, longitude/latitude dynamically with the call. You can see what it looks like on the Bandwidth site[1]. It is a standard though, not specific to them.

    [1]
    https://support.bandwidth.com/hc/en-us/articles/360006080074-E911-Dynamic-Location-Routing-integration-and-testing-guide

  • V2UgaGF2ZSBhIGN1c3RvbWVyIHdobyB3YW50cyB0byBwZXJmb3JtIGJvdGggZGlyZWN0aW9ucy4N
    Cg0KRm9yIGluYm91bmQgY2FsbHMsIHRoZXkgaGF2ZSBpbmRpY2F0ZWQgdGhlaXIgc3dpdGNoIHdp bGwgcHJvdmlkZSBHZW9sb2NhdGlvbi9FOTExIGluZm9ybWF0aW9uIHVzaW5nIHR3byBkaWZmZXJl bnQgd2F5cy4gIFNvdW5kcyBsaWtlIGl0IGRlcGVuZHMgb24gdGhlIGVxdWlwbWVudCBiZWZvcmUg dGhlIFNJUCBwcm94eS4NCkl0IHdpbGwgZWl0aGVyIGJlIGluIFNJUCBoZWFkZXJzICh3aGljaCB3
    ZSByZXRyaWV2ZSB0aHJvdWdoIFBKU0lQX0hFQURFUiBpbiB0aGUgZGlhbCBwbGFuKS4gIFRyaXZp YWwgZm9yIHVzIHRvIGRvIHRoaXMgYXBwcm9hY2guDQpTZWNvbmQgYXBwcm9hY3kgaXMgdGhlaXIg U0lQIHByb3h5IHdpbGwgYXBwZW5kIGluZm9ybWF0aW9uIHRvIHRoZSBib2R5IHdpdGggbWltZSBk ZWxpbWl0ZXJzIChpbmRpY2F0aW5nIGNvbnRlbnQgdHlwZSBvZiBwaWRmK3htbCkuDQoNClRoZXkg d2FudCB1cyB0byByZXRyaWV2ZSB0aGlzIGluZm9ybWF0aW9uICh2aWEgQXN0ZXJpc2spIGFuZCBz dG9yZSBpdCBpbnRvIHRoZWlyIGRhdGFiYXNlLiAgV2hlbiBhIDkxMSBhZ2VudCBhbnN3ZXJzIHRo ZSBjYWxsLCB0aGV5IHJldHJpZXZlIHRoZSBkYXRhIGZyb20gdGhlIGRhdGFiYXNlIGFuZCB1c2Ug aXQgYXMgbmVlZGVkIGZvciBhc3Npc3RpbmcgdGhlIGZpcnN0IHJlc3BvbmRlcnMuDQoNCklmIEFz dGVyaXNrIGNhbuKAmXQgZG8gdGhpcyBhbmQgaXNu4oCZdCBwbGFubmVkIHRvIGJlIGFibGUgdG8g c3VwcG9ydCB0aGlzLCB3ZeKAmXJlIGxvb2tpbmcgdG8gbWFrZSBLYW1haWxpbyBhYmxlIHRvIHBy b2Nlc3MgdGhlIElOVklURSBpbiBmcm9udCBvZiBBc3Rlcmlzay4gIElkZWEgYmVpbmcgS2FtYWls aW8gY291bGQgY29tbXVuaWNhdGUgdGhlIGluZm9ybWF0aW9uIG91ciBjdXN0b21lciByZXF1aXJl cyBhbmQgd2Ugc3RvcmUgaXQgaW4gdGhlIGRhdGFiYXNlLiAgV2hlbiBBZ2VudCBhbnN3ZXJzIHRo ZSBjYWxsLCB1c2UgdGhlIENhbGwtSUQgcHJvdmlkZWQgYnkgQXN0ZXJpc2sgdG8gbWF0Y2ggaXQg d2l0aCB0aGUgS2FtYWlsaW8gSU5WSVRFIGRhdGHigJlzIENhbGwtSUQuDQoNCg0KV2UgYXJlIHN0
    aWxsIHRyeWluZyB0byBnYXRoZXIgZGV0YWlscyBvbiBob3cgdGhlIGN1c3RvbWVyIHdhbnRzIHRo ZSBvdXRib3VuZCBjYWxscyB0byB3b3JrLg0KDQpEYW4NCg0KRnJvbTogYXN0ZXJpc2stdXNlcnMg PGFzdGVyaXNrLXVzZXJzLWJvdW5jZXNAbGlzdHMuZGlnaXVtLmNvbT4gT24gQmVoYWxmIE9mIFNl YmFzdGlhbiBOaWVsc2VuDQpTZW50OiBNb25kYXksIE1heSAyMywgMjAyMiAzOjE5IFBNDQpUbzog J01haWxpbmcgTGlzdCcgPGFzdGVyaXNrLXVzZXJzQGxpc3RzLmRpZ2l1bS5jb20+DQpTdWJqZWN0
    OiBSZTogW0V4dGVybmFsXSBbYXN0ZXJpc2stdXNlcnNdIEdlb2xvY2F0aW9uL0U5MTENCg0KV2hh dCBhcmUgeW91IHRhbGtpbmcgYWJvdXQgZXhhY3RseT8NCg0KV2hhdCBJIGhhdmUgdW5kZXJzdGFu ZCwgRTkxMSBnZW8gaW5mb3JtYXRpb24gaXMgc2VudCDigJxvdXQgb2YgYmFuZOKAnSB3aGVuIDkx MSBpcyBjYWxsZWQuDQoNClNvIHRoZSBxdWVzdGlvbiBpcywgaXMgeW91IG9wZXJhdGluZyBhIDkx MSBjYWxsIGNlbnRyZSDigJMgdGhlbiB5b3Ugc2hvdWxkIGhhdmUgdGhpcyBpbmZvcm1hdGlvbiBh dCBoYW5kIGFscmVhZHkgaG93IHRvIGFjY2VzcyB0aGlzIGluZm9ybWF0aW9uLg0KDQpPciBhcmUg aXQgdGhlIG9wcG9zaXRlLCB5b3Ugd2FudCB0byBzZW5kIGdlb2NvZGVkIGluZm9ybWF0aW9uIGFi b3V0IFNJUCBoYW5kc2V0IGxvY2F0aW9uIHRvIGEgRTkxMSBzZXJ2aWNlIHdoZW4gOTExIGlzIGNh bGxlZD8gKHRoYXQgeW91IHdhbnQgdG8gZW1iZWQgaW4gdGhlIG91dGdvaW5nIGJvZHkgd2hlbiA5
    MTEgaXMgY2FsbGVkKT8NCg0KSSB0aGluayBnYWluaW5nIGFjY2VzcyB0byB0aGVzZSB0eXBlcyBv ZiBFOTExIEFQSeKAmXMgcmVxdWlyZXMgeW91IGJlaW5nIGEgU0lQIG9wZXJhdG9yIOKAkyBhbmQg aWYgeW91IGFyZSBhIFNJUCBvcGVyYXRvciB3aXRoIGEgbnVtYmVyIHBsYW4gYWxyZWFkeSwgeW91
    IHNob3VsZCBhbHJlYWR5IGhhdmUgYWNjZXNzIHRvIHRoZXNlIHR5cGVzIG9mIEFQSSBmcm9tIHRo ZSBiZWdpbm5pbmcgYW5kIGhvdyB0byB1c2UgdGhlbS4NCg0KRnLDpW46IGFzdGVyaXNrLXVzZXJz LWJvdW5jZXNAbGlzdHMuZGlnaXVtLmNvbTxtYWlsdG86YXN0ZXJpc2stdXNlcnMtYm91bmNlc0Bs aXN0cy5kaWdpdW0uY29tPiA8YXN0ZXJpc2stdXNlcnMtYm91bmNlc0BsaXN0cy5kaWdpdW0uY29t PG1haWx0bzphc3Rlcmlzay11c2Vycy1ib3VuY2VzQGxpc3RzLmRpZ2l1bS5jb20+PiBGw7ZyIERh biBDcm9wcA0KU2tpY2thdDogZGVuIDIzIG1haiAyMDIyIDIyOjAxDQpUaWxsOiBBc3RlcmlzayBV
    c2VycyBNYWlsaW5nIExpc3QgLSBOb24tQ29tbWVyY2lhbCBEaXNjdXNzaW9uIDxhc3Rlcmlzay11
    c2Vyc0BsaXN0cy5kaWdpdW0uY29tPG1haWx0bzphc3Rlcmlzay11c2Vyc0BsaXN0cy5kaWdpdW0u Y29tPj4NCsOEbW5lOiBbYXN0ZXJpc2stdXNlcnNdIEdlb2xvY2F0aW9uL0U5MTENCg0KT3V0IG9m IGN1cmlvc2l0eSwgaXMgdGhlcmUgYW55IGRvY3VtZW50YXRpb24gb24gd2hhdCBpcyBwbGFubmVk IGZvciB0aGUgR2VvbG9jYXRpb24vRTkxMT8NCg0KSXMgdGhlIHBsYW4gZm9yIEFzdGVyaXNrIHRv IGV4cG9zZSB0aGUgU0lQIGJvZHkgYW5kIGxlYXZlIGl0IHRvIGRpYWwgcGxhbiwgQVJJLCBBTUkg dG8gcHJvY2VzcyB0aGUgZGF0YT8NCkZvciBleGFtcGxlLCBtaW1lIHBpZGYreG1sIHNlY3Rpb24/
    DQoNCk9yIGlzIHRoZXJlIGEgZGlmZmVyZW50IGFwcHJvYWNoIGJlaW5nIHdvcmtlZCBvbiAob3Ig cGxhbm5lZCB0byBiZSB3b3JrZWQgb24pPw0KDQpEYW4NCg=

  • Both directions will be supported according to the specification and standard. The information will be accessible from the dialplan using a dialplan function, but not the pidf+xml itself. If they’re doing something outside of the standard, then it likely wouldn’t work. The code is not written for 911 PSAPs/handlers specifically, it’s written for receiving the information from an endpoint, and for sending it out.

  • VGhhbmsgeW91IEpvc2h1YS4NCg0KSSB3aWxsIHJlYWQgYm90aCBsaW5rcyB5b3UgcHJvdmlkZWQu DQoNCkFzIG1lbnRpb25lZCBpbiBhbm90aGVyIHJlc3BvbnNlLiAgSWYgd2hhdCBvdXIgY3VzdG9t ZXIgcmVxdWlyZXMgZG9lc27igJl0IGZpdCB3ZWxsIHdpdGggQXN0ZXJpc2sgZGV2ZWxvcG1lbnQs IHdlIGJlbGlldmUgd2UgY2FuIGRvIHRoaXMgd29yayB3aXRoIEthbWFpbGlvIGZyb250IGVuZGlu ZyB0aGUgY2FsbHMuICBTb21ldGhpbmcgY3VzdG9tZXIgaXMgYWxyZWFkeSByZXF1aXJpbmcgdXMg dG8gZG8gZm9yIGhpZ2ggYXZhaWxhYmlsaXR5IHJlcXVpcmVtZW50cyAoOTExIGNhbGwgY2VudGVy KS4gIEFzdGVyaXNrIHdvdWxkIGJlIGZhciBjbGVhbmVyIHNpbmNlIHRoZXJlIHdvdWxkIGJlIG5v IHRpbWluZyBpc3N1ZXMgb2YgY2FsbCBpbmZvcm1hdGlvbiBmcm9tIDIgYm94ZXMuDQoNCkRhbg0K
    DQoNCkZyb206IGFzdGVyaXNrLXVzZXJzIDxhc3Rlcmlzay11c2Vycy1ib3VuY2VzQGxpc3RzLmRp Z2l1bS5jb20+IE9uIEJlaGFsZiBPZiBKb3NodWEgQy4gQ29scA0KU2VudDogTW9uZGF5LCBNYXkg MjMsIDIwMjIgMzoyNiBQTQ0KVG86IEFzdGVyaXNrIFVzZXJzIE1haWxpbmcgTGlzdCAtIE5vbi1D
    b21tZXJjaWFsIERpc2N1c3Npb24gPGFzdGVyaXNrLXVzZXJzQGxpc3RzLmRpZ2l1bS5jb20+DQpT
    dWJqZWN0OiBSZTogW0V4dGVybmFsXSBbYXN0ZXJpc2stdXNlcnNdIEdlb2xvY2F0aW9uL0U5MTEN
    Cg0KT24gTW9uLCBNYXkgMjMsIDIwMjIgYXQgNToxOCBQTSBTZWJhc3RpYW4gTmllbHNlbiA8c2Vi YXN0aWFuQHNlYmJlLmV1PG1haWx0bzpzZWJhc3RpYW5Ac2ViYmUuZXU+PiB3cm90ZToNCldoYXQg YXJlIHlvdSB0YWxraW5nIGFib3V0IGV4YWN0bHk/DQoNCldoYXQgSSBoYXZlIHVuZGVyc3RhbmQs IEU5MTEgZ2VvIGluZm9ybWF0aW9uIGlzIHNlbnQg4oCcb3V0IG9mIGJhbmTigJ0gd2hlbiA5MTEg aXMgY2FsbGVkLg0KDQpTbyB0aGUgcXVlc3Rpb24gaXMsIGlzIHlvdSBvcGVyYXRpbmcgYSA5MTEg Y2FsbCBjZW50cmUg4oCTIHRoZW4geW91IHNob3VsZCBoYXZlIHRoaXMgaW5mb3JtYXRpb24gYXQg aGFuZCBhbHJlYWR5IGhvdyB0byBhY2Nlc3MgdGhpcyBpbmZvcm1hdGlvbi4NCg0KT3IgYXJlIGl0
    IHRoZSBvcHBvc2l0ZSwgeW91IHdhbnQgdG8gc2VuZCBnZW9jb2RlZCBpbmZvcm1hdGlvbiBhYm91
    dCBTSVAgaGFuZHNldCBsb2NhdGlvbiB0byBhIEU5MTEgc2VydmljZSB3aGVuIDkxMSBpcyBjYWxs ZWQ/ICh0aGF0IHlvdSB3YW50IHRvIGVtYmVkIGluIHRoZSBvdXRnb2luZyBib2R5IHdoZW4gOTEx IGlzIGNhbGxlZCk/DQoNCkkgdGhpbmsgZ2FpbmluZyBhY2Nlc3MgdG8gdGhlc2UgdHlwZXMgb2Yg RTkxMSBBUEnigJlzIHJlcXVpcmVzIHlvdSBiZWluZyBhIFNJUCBvcGVyYXRvciDigJMgYW5kIGlm IHlvdSBhcmUgYSBTSVAgb3BlcmF0b3Igd2l0aCBhIG51bWJlciBwbGFuIGFscmVhZHksIHlvdSBz aG91bGQgYWxyZWFkeSBoYXZlIGFjY2VzcyB0byB0aGVzZSB0eXBlcyBvZiBBUEkgZnJvbSB0aGUg YmVnaW5uaW5nIGFuZCBob3cgdG8gdXNlIHRoZW0uDQoNClRoZXJlIGFyZSBzcGVjaWZpY2F0aW9u cyBmb3IgY29udmV5aW5nIGxvY2F0aW9uIGluZm9ybWF0aW9uIGR5bmFtaWNhbGx5IGluIHRoZSBT
    SVAgSU5WSVRFIHRvIGFuIHVwc3RyZWFtIHByb3ZpZGVyLCB3aGljaCB1c2VzIHBpZGYreG1sIGFs b25nc2lkZSBTRFAgaW4gdGhlIElOVklURS4gVGhpcyBhbGxvd3MgeW91IHRvIHByb3ZpZGUgdGhl IGFkZHJlc3MsIGZsb29yLCByb29tLCBsb25naXR1ZGUvbGF0aXR1ZGUgZHluYW1pY2FsbHkgd2l0
    aCB0aGUgY2FsbC4gWW91IGNhbiBzZWUgd2hhdCBpdCBsb29rcyBsaWtlIG9uIHRoZSBCYW5kd2lk dGggc2l0ZVsxXS4gSXQgaXMgYSBzdGFuZGFyZCB0aG91Z2gsIG5vdCBzcGVjaWZpYyB0byB0aGVt Lg0KDQpbMV0gaHR0cHM6Ly9zdXBwb3J0LmJhbmR3aWR0aC5jb20vaGMvZW4tdXMvYXJ0aWNsZXMv MzYwMDA2MDgwMDc0LUU5MTEtRHluYW1pYy1Mb2NhdGlvbi1Sb3V0aW5nLWludGVncmF0aW9uLWFu ZC10ZXN0aW5nLWd1aWRlDQoNCi0tDQpKb3NodWEgQy4gQ29scA0KQXN0ZXJpc2sgVGVjaG5pY2Fs IExlYWQNClNhbmdvbWEgVGVjaG5vbG9naWVzDQpDaGVjayB1cyBvdXQgYXQgd3d3LnNhbmdvbWEu Y29tPGh0dHA6Ly93d3cuc2FuZ29tYS5jb20+IGFuZCB3d3cuYXN0ZXJpc2sub3JnPGh0dHA6Ly93
    d3cuYXN0ZXJpc2sub3JnPg0K

  • VGhhbmsgeW91IEpvc2h1YS4NCg0KDQpGcm9tOiBhc3Rlcmlzay11c2VycyA8YXN0ZXJpc2stdXNl cnMtYm91bmNlc0BsaXN0cy5kaWdpdW0uY29tPiBPbiBCZWhhbGYgT2YgSm9zaHVhIEMuIENvbHAN
    ClNlbnQ6IE1vbmRheSwgTWF5IDIzLCAyMDIyIDM6NTggUE0NClRvOiBBc3RlcmlzayBVc2VycyBN
    YWlsaW5nIExpc3QgLSBOb24tQ29tbWVyY2lhbCBEaXNjdXNzaW9uIDxhc3Rlcmlzay11c2Vyc0Bs aXN0cy5kaWdpdW0uY29tPg0KU3ViamVjdDogUmU6IFtFeHRlcm5hbF0gW2FzdGVyaXNrLXVzZXJz XSBbRXh0ZXJuYWxdIEdlb2xvY2F0aW9uL0U5MTENCg0KT24gTW9uLCBNYXkgMjMsIDIwMjIgYXQg NTo1MiBQTSBEYW4gQ3JvcHAgPGRhbkBhbXRlbGNvLmNvbTxtYWlsdG86ZGFuQGFtdGVsY28uY29t Pj4gd3JvdGU6DQpXZSBoYXZlIGEgY3VzdG9tZXIgd2hvIHdhbnRzIHRvIHBlcmZvcm0gYm90aCBk aXJlY3Rpb25zLg0KDQpGb3IgaW5ib3VuZCBjYWxscywgdGhleSBoYXZlIGluZGljYXRlZCB0aGVp ciBzd2l0Y2ggd2lsbCBwcm92aWRlIEdlb2xvY2F0aW9uL0U5MTEgaW5mb3JtYXRpb24gdXNpbmcg dHdvIGRpZmZlcmVudCB3YXlzLiAgU291bmRzIGxpa2UgaXQgZGVwZW5kcyBvbiB0aGUgZXF1aXBt ZW50IGJlZm9yZSB0aGUgU0lQIHByb3h5Lg0KSXQgd2lsbCBlaXRoZXIgYmUgaW4gU0lQIGhlYWRl cnMgKHdoaWNoIHdlIHJldHJpZXZlIHRocm91Z2ggUEpTSVBfSEVBREVSIGluIHRoZSBkaWFsIHBs YW4pLiAgVHJpdmlhbCBmb3IgdXMgdG8gZG8gdGhpcyBhcHByb2FjaC4NClNlY29uZCBhcHByb2Fj eSBpcyB0aGVpciBTSVAgcHJveHkgd2lsbCBhcHBlbmQgaW5mb3JtYXRpb24gdG8gdGhlIGJvZHkg d2l0aCBtaW1lIGRlbGltaXRlcnMgKGluZGljYXRpbmcgY29udGVudCB0eXBlIG9mIHBpZGYreG1s KS4NCg0KVGhleSB3YW50IHVzIHRvIHJldHJpZXZlIHRoaXMgaW5mb3JtYXRpb24gKHZpYSBBc3Rl cmlzaykgYW5kIHN0b3JlIGl0IGludG8gdGhlaXIgZGF0YWJhc2UuICBXaGVuIGEgOTExIGFnZW50
    IGFuc3dlcnMgdGhlIGNhbGwsIHRoZXkgcmV0cmlldmUgdGhlIGRhdGEgZnJvbSB0aGUgZGF0YWJh c2UgYW5kIHVzZSBpdCBhcyBuZWVkZWQgZm9yIGFzc2lzdGluZyB0aGUgZmlyc3QgcmVzcG9uZGVy cy4NCg0KSWYgQXN0ZXJpc2sgY2Fu4oCZdCBkbyB0aGlzIGFuZCBpc27igJl0IHBsYW5uZWQgdG8g YmUgYWJsZSB0byBzdXBwb3J0IHRoaXMsIHdl4oCZcmUgbG9va2luZyB0byBtYWtlIEthbWFpbGlv IGFibGUgdG8gcHJvY2VzcyB0aGUgSU5WSVRFIGluIGZyb250IG9mIEFzdGVyaXNrLiAgSWRlYSBi ZWluZyBLYW1haWxpbyBjb3VsZCBjb21tdW5pY2F0ZSB0aGUgaW5mb3JtYXRpb24gb3VyIGN1c3Rv bWVyIHJlcXVpcmVzIGFuZCB3ZSBzdG9yZSBpdCBpbiB0aGUgZGF0YWJhc2UuICBXaGVuIEFnZW50
    IGFuc3dlcnMgdGhlIGNhbGwsIHVzZSB0aGUgQ2FsbC1JRCBwcm92aWRlZCBieSBBc3RlcmlzayB0
    byBtYXRjaCBpdCB3aXRoIHRoZSBLYW1haWxpbyBJTlZJVEUgZGF0YeKAmXMgQ2FsbC1JRC4NCg0K
    DQpXZSBhcmUgc3RpbGwgdHJ5aW5nIHRvIGdhdGhlciBkZXRhaWxzIG9uIGhvdyB0aGUgY3VzdG9t ZXIgd2FudHMgdGhlIG91dGJvdW5kIGNhbGxzIHRvIHdvcmsuDQoNCkJvdGggZGlyZWN0aW9ucyB3
    aWxsIGJlIHN1cHBvcnRlZCBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmljYXRpb24gYW5kIHN0YW5k YXJkLiBUaGUgaW5mb3JtYXRpb24gd2lsbCBiZSBhY2Nlc3NpYmxlIGZyb20gdGhlIGRpYWxwbGFu IHVzaW5nIGEgZGlhbHBsYW4gZnVuY3Rpb24sIGJ1dCBub3QgdGhlIHBpZGYreG1sIGl0c2VsZi4g SWYgdGhleSdyZSBkb2luZyBzb21ldGhpbmcgb3V0c2lkZSBvZiB0aGUgc3RhbmRhcmQsIHRoZW4g aXQgbGlrZWx5IHdvdWxkbid0IHdvcmsuIFRoZSBjb2RlIGlzIG5vdCB3cml0dGVuIGZvciA5MTEg UFNBUHMvaGFuZGxlcnMgc3BlY2lmaWNhbGx5LCBpdCdzIHdyaXR0ZW4gZm9yIHJlY2VpdmluZyB0
    aGUgaW5mb3JtYXRpb24gZnJvbSBhbiBlbmRwb2ludCwgYW5kIGZvciBzZW5kaW5nIGl0IG91dC4N
    Cg0KLS0NCkpvc2h1YSBDLiBDb2xwDQpBc3RlcmlzayBUZWNobmljYWwgTGVhZA0KU2FuZ29tYSBU
    ZWNobm9sb2dpZXMNCkNoZWNrIHVzIG91dCBhdCB3d3cuc2FuZ29tYS5jb208aHR0cDovL3d3dy5z YW5nb21hLmNvbT4gYW5kIHd3dy5hc3Rlcmlzay5vcmc8aHR0cDovL3d3dy5hc3Rlcmlzay5vcmc+
    DQo