From mboxrd@z Thu Jan 1 00:00:00 1970 From: Kenneth Lee Subject: Re: [RFC PATCH 1/7] vfio/spimdev: Add documents for WarpDrive framework Date: Thu, 2 Aug 2018 12:22:35 +0800 Message-ID: <20180802042235.GN160746@Turing-Arch-b> References: <20180801102221.5308-1-nek.in.cn@gmail.com> <20180801102221.5308-2-nek.in.cn@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: Kenneth Lee , Herbert Xu , "kvm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org" , Jonathan Corbet , Greg Kroah-Hartman , "linux-doc-u79uwXL29TY76Z2rM5mHXA@public.gmane.org" , "Kumar, Sanjay K" , Hao Fang , "iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org" , "linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org" , "linuxarm-hv44wF8Li93QT0dZR+AlfA@public.gmane.org" , Alex Williamson , Thomas Gleixner , "linux-crypto-u79uwXL29TY76Z2rM5mHXA@public.gmane.org" , Philippe Ombredanne , Zaibo Xu , "David S . Miller" , "linux-accelerators-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org" To: "Tian, Kevin" Return-path: Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: iommu-bounces-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org Errors-To: iommu-bounces-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org List-Id: linux-crypto.vger.kernel.org T24gVGh1LCBBdWcgMDIsIDIwMTggYXQgMDM6MTQ6MzhBTSArMDAwMCwgVGlhbiwgS2V2aW4gd3Jv dGU6Cj4gRGF0ZTogVGh1LCAyIEF1ZyAyMDE4IDAzOjE0OjM4ICswMDAwCj4gRnJvbTogIlRpYW4s IEtldmluIiA8a2V2aW4udGlhbkBpbnRlbC5jb20+Cj4gVG86IEtlbm5ldGggTGVlIDxuZWsuaW4u Y25AZ21haWwuY29tPiwgSm9uYXRoYW4gQ29yYmV0IDxjb3JiZXRAbHduLm5ldD4sCj4gIEhlcmJl cnQgWHUgPGhlcmJlcnRAZ29uZG9yLmFwYW5hLm9yZy5hdT4sICJEYXZpZCBTIC4gTWlsbGVyIgo+ ICA8ZGF2ZW1AZGF2ZW1sb2Z0Lm5ldD4sIEpvZXJnIFJvZWRlbCA8am9yb0A4Ynl0ZXMub3JnPiwg QWxleCBXaWxsaWFtc29uCj4gIDxhbGV4LndpbGxpYW1zb25AcmVkaGF0LmNvbT4sIEtlbm5ldGgg TGVlIDxsaWd1b3podUBoaXNpbGljb24uY29tPiwgSGFvCj4gIEZhbmcgPGZhbmdoYW8xMUBodWF3 ZWkuY29tPiwgWmhvdSBXYW5nIDx3YW5nemhvdTFAaGlzaWxpY29uLmNvbT4sIFphaWJvIFh1Cj4g IDx4dXphaWJvQGh1YXdlaS5jb20+LCBQaGlsaXBwZSBPbWJyZWRhbm5lIDxwb21icmVkYW5uZUBu ZXhiLmNvbT4sIEdyZWcKPiAgS3JvYWgtSGFydG1hbiA8Z3JlZ2toQGxpbnV4Zm91bmRhdGlvbi5v cmc+LCBUaG9tYXMgR2xlaXhuZXIKPiAgPHRnbHhAbGludXRyb25peC5kZT4sICJsaW51eC1kb2NA dmdlci5rZXJuZWwub3JnIgo+ICA8bGludXgtZG9jQHZnZXIua2VybmVsLm9yZz4sICJsaW51eC1r ZXJuZWxAdmdlci5rZXJuZWwub3JnIgo+ICA8bGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZz4s ICJsaW51eC1jcnlwdG9Admdlci5rZXJuZWwub3JnIgo+ICA8bGludXgtY3J5cHRvQHZnZXIua2Vy bmVsLm9yZz4sICJpb21tdUBsaXN0cy5saW51eC1mb3VuZGF0aW9uLm9yZyIKPiAgPGlvbW11QGxp c3RzLmxpbnV4LWZvdW5kYXRpb24ub3JnPiwgImt2bUB2Z2VyLmtlcm5lbC5vcmciCj4gIDxrdm1A dmdlci5rZXJuZWwub3JnPiwgImxpbnV4LWFjY2VsZXJhdG9yc0BsaXN0cy5vemxhYnMub3JnIgo+ ICA8bGludXgtYWNjZWxlcmF0b3JzQGxpc3RzLm96bGFicy5vcmc+LCBMdSBCYW9sdQo+ICA8YmFv bHUubHVAbGludXguaW50ZWwuY29tPiwgIkt1bWFyLCBTYW5qYXkgSyIgPHNhbmpheS5rLmt1bWFy QGludGVsLmNvbT4KPiBDQzogImxpbnV4YXJtQGh1YXdlaS5jb20iIDxsaW51eGFybUBodWF3ZWku Y29tPgo+IFN1YmplY3Q6IFJFOiBbUkZDIFBBVENIIDEvN10gdmZpby9zcGltZGV2OiBBZGQgZG9j dW1lbnRzIGZvciBXYXJwRHJpdmUKPiAgZnJhbWV3b3JrCj4gTWVzc2FnZS1JRDogPEFBREZDNDFB RkU1NDY4NEFCOUVFNkNCQzAyNzRBNUQxOTEyOTBGMDRAU0hTTVNYMTAxLmNjci5jb3JwLmludGVs LmNvbT4KPiAKPiA+IEZyb206IEtlbm5ldGggTGVlCj4gPiBTZW50OiBXZWRuZXNkYXksIEF1Z3Vz dCAxLCAyMDE4IDY6MjIgUE0KPiA+IAo+ID4gRnJvbTogS2VubmV0aCBMZWUgPGxpZ3Vvemh1QGhp c2lsaWNvbi5jb20+Cj4gPiAKPiA+IFdhcnBEcml2ZSBpcyBhIGNvbW1vbiB1c2VyIHNwYWNlIGFj Y2VsZXJhdG9yIGZyYW1ld29yay4gIEl0cyBtYWluCj4gPiBjb21wb25lbnQKPiA+IGluIEtlcm5l bCBpcyBjYWxsZWQgc3BpbWRldiwgU2hhcmUgUGFyZW50IElPTU1VIE1lZGlhdGVkIERldmljZS4g SXQKPiAKPiBOb3Qgc3VyZSB3aGV0aGVyICJzaGFyZSBwYXJlbnQgSU9NTVUiIGlzIGEgZ29vZCB0 ZXJtIGhlcmUuIGJldHRlcgo+IHN0aWNrIHRvIHdoYXQgY2FwYWJpdHkgeW91IGJyaW5nIHRvIHVz ZXIgc3BhY2UsIGluc3RlYWQgb2YgZGVzY3JpYmluZwo+IGludGVybmFsIHRyaWNrLi4uCkFncmVl LiBUaGUgIlNQSSIgaXMgYWxzbyBzdHJvbmdseSBoaW50IHRvICJTaGFyZSBQZXJpcGhlcmFsIElu dGVycnVwdCIgb3IgIlNlcmlhbApQZXJpcGhlcmFsIEludGVyZmFjZSIuIFBlcnNvbmFsbHkgSSBo YXRlIHRoaXMgbmFtZS4gQnV0IEkgY2Fubm90IGZpbmQgYSBiZXR0ZXIKb25lLiBJbiB0aGUgdXNl ciBzcGFjZSwgd2UgY2FuIHVzZSBhIGltcGFzc2libGUgbmFtZSAoV2FycERyaXZlKS4gQnV0IGtl cm5lbApyZXF1aXJlIGEgbmFtZSBwb2ludCB0byBpdHMgZmVhdHVyZS4uLiBtYXliZSBJIHNob3Vs ZCB1c2UgIlByb2Nlc3MtU2hhcmVkIE1kZXYiCmluIG5leHQgdmVyc2lvbj8KPiAKPiA+IGV4cG9z ZXMKPiA+IHRoZSBoYXJkd2FyZSBjYXBhYmlsaXRpZXMgdG8gdGhlIHVzZXIgc3BhY2UgdmlhIHZm aW8tbWRldi4gU28gcHJvY2Vzc2VzIGluCj4gPiB1c2VyIGxhbmQgY2FuIG9idGFpbiBhICJxdWV1 ZSIgYnkgb3BlbiB0aGUgZGV2aWNlIGFuZCBkaXJlY3QgYWNjZXNzIHRoZQo+ID4gaGFyZHdhcmUg TU1JTyBzcGFjZSBvciBkbyBETUEgb3BlcmF0aW9uIHZpYSBWRklPIGludGVyZmFjZS4KPiA+IAo+ ID4gV2FycERyaXZlIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgd2l0aCBKZWFuIFBoaWxpcHBlIEJy dWNrZXIncyBTVkEgcGF0Y2hzZXQKPiA+IChpdCBpcyBzdGlsbCBpbiBSRkMgc3RhZ2UpIHRvIHN1 cHBvcnQgbXVsdGktcHJvY2Vzcy4gQnV0IFRoaXMgaXMgbm90IGEgbXVzdC4KPiA+IFdpdGhvdXQg dGhlIFNWQSBwYXRjaGVzLCBXYXJwRHJpdmUgY2FuIHN0aWxsIHdvcmsgZm9yIG9uZSBwcm9jZXNz IGZvcgo+ID4gZXZlcnkKPiA+IGhhcmR3YXJlIGRldmljZS4KPiA+IAo+ID4gVGhpcyBwYXRjaCBh ZGQgZGV0YWlsIGRvY3VtZW50cyBmb3IgdGhlIGZyYW1ld29yay4KPiA+IAo+ID4gU2lnbmVkLW9m Zi1ieTogS2VubmV0aCBMZWUgPGxpZ3Vvemh1QGhpc2lsaWNvbi5jb20+Cj4gPiAtLS0KPiA+ICBE b2N1bWVudGF0aW9uLzAwLUlOREVYICAgICAgICAgICAgICAgIHwgICAyICsKPiA+ICBEb2N1bWVu dGF0aW9uL3dhcnBkcml2ZS93YXJwZHJpdmUucnN0IHwgMTUzICsrKysrKwo+ID4gIERvY3VtZW50 YXRpb24vd2FycGRyaXZlL3dkLWFyY2guc3ZnICAgfCA3MzIKPiA+ICsrKysrKysrKysrKysrKysr KysrKysrKysrCj4gPiAgRG9jdW1lbnRhdGlvbi93YXJwZHJpdmUvd2Quc3ZnICAgICAgICB8IDUy NiArKysrKysrKysrKysrKysrKysKPiA+ICA0IGZpbGVzIGNoYW5nZWQsIDE0MTMgaW5zZXJ0aW9u cygrKQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBEb2N1bWVudGF0aW9uL3dhcnBkcml2ZS93YXJw ZHJpdmUucnN0Cj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IERvY3VtZW50YXRpb24vd2FycGRyaXZl L3dkLWFyY2guc3ZnCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IERvY3VtZW50YXRpb24vd2FycGRy aXZlL3dkLnN2Zwo+ID4gCj4gPiBkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi8wMC1JTkRFWCBi L0RvY3VtZW50YXRpb24vMDAtSU5ERVgKPiA+IGluZGV4IDI3NTRmZTgzZjBkNC4uOTk1OWFmZmFi NTk5IDEwMDY0NAo+ID4gLS0tIGEvRG9jdW1lbnRhdGlvbi8wMC1JTkRFWAo+ID4gKysrIGIvRG9j dW1lbnRhdGlvbi8wMC1JTkRFWAo+ID4gQEAgLTQxMCw2ICs0MTAsOCBAQCB2bS8KPiA+ICAJLSBk aXJlY3Rvcnkgd2l0aCBpbmZvIG9uIHRoZSBMaW51eCB2bSBjb2RlLgo+ID4gIHcxLwo+ID4gIAkt IGRpcmVjdG9yeSB3aXRoIGRvY3VtZW50cyByZWdhcmRpbmcgdGhlIDEtd2lyZSAodzEpIHN1YnN5 c3RlbS4KPiA+ICt3YXJwZHJpdmUvCj4gPiArCS0gZGlyZWN0b3J5IHdpdGggZG9jdW1lbnRzIGFi b3V0IFdhcnBEcml2ZSBhY2NlbGVyYXRvcgo+ID4gZnJhbWV3b3JrLgo+ID4gIHdhdGNoZG9nLwo+ ID4gIAktIGhvdyB0byBhdXRvLXJlYm9vdCBMaW51eCBpZiBpdCBoYXMgImZhbGxlbiBhbmQgY2Fu J3QgZ2V0IHVwIi4gOy0pCj4gPiAgd2ltYXgvCj4gPiBkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlv bi93YXJwZHJpdmUvd2FycGRyaXZlLnJzdAo+ID4gYi9Eb2N1bWVudGF0aW9uL3dhcnBkcml2ZS93 YXJwZHJpdmUucnN0Cj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwMDAw MDAwLi4zNzkyYjI3ODBlYTYKPiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBiL0RvY3VtZW50YXRp b24vd2FycGRyaXZlL3dhcnBkcml2ZS5yc3QKPiA+IEBAIC0wLDAgKzEsMTUzIEBACj4gPiArSW50 cm9kdWN0aW9uIG9mIFdhcnBEcml2ZQo+ID4gKz09PT09PT09PT09PT09PT09PT09PT09PT0KPiA+ ICsKPiA+ICsqV2FycERyaXZlKiBpcyBhIGdlbmVyYWwgYWNjZWxlcmF0b3IgZnJhbWV3b3JrIGJ1 aWx0IG9uIHRvcCBvZiB2ZmlvLgo+ID4gK0l0IGNhbiBiZSB0YWtlbiBhcyBhIGxpZ2h0IHdlaWdo dCB2aXJ0dWFsIGZ1bmN0aW9uLCB3aGljaCB5b3UgY2FuIHVzZQo+ID4gd2l0aG91dAo+ID4gKypT Ui1JT1YqIGxpa2UgZmFjaWxpdHkgYW5kIGNhbiBiZSBzaGFyZWQgYW1vbmcgbXVsdGlwbGUgcHJv Y2Vzc2VzLgo+ID4gKwo+ID4gK0l0IGNhbiBiZSB1c2VkIGFzIHRoZSBxdWljayBjaGFubmVsIGZv ciBhY2NlbGVyYXRvcnMsIG5ldHdvcmsgYWRhcHRvcnMgb3IKPiA+ICtvdGhlciBoYXJkd2FyZSBp biB1c2VyIHNwYWNlLiBJdCBjYW4gbWFrZSBzb21lIGltcGxlbWVudGF0aW9uIHNpbXBsZXIuCj4g PiBFLmcuCj4gPiAreW91IGNhbiByZXVzZSBtb3N0IG9mIHRoZSAqbmV0ZGV2KiBkcml2ZXIgYW5k IGp1c3Qgc2hhcmUgc29tZSByaW5nIGJ1ZmZlcgo+ID4gdG8KPiA+ICt0aGUgdXNlciBzcGFjZSBk cml2ZXIgZm9yICpEUERLKiBvciAqT0RQKi4gT3IgeW91IGNhbiBjb21iaW5lIHRoZSBSU0EKPiA+ ICthY2NlbGVyYXRvciB3aXRoIHRoZSAqbmV0ZGV2KiBpbiB0aGUgdXNlciBzcGFjZSBhcyBhIFdl YiByZXZlcnNlZCBwcm94eSwKPiA+IGV0Yy4KPiA+ICsKPiA+ICtUaGUgbmFtZSAqV2FycERyaXZl KiBpcyBzaW1wbHkgYSBjb29sIGFuZCBnZW5lcmFsIG5hbWUgbWVhbmluZyB0aGUKPiA+IGZyYW1l d29yawo+ID4gK21ha2VzIHRoZSBhcHBsaWNhdGlvbiBmYXN0ZXIuIEluIGtlcm5lbCwgdGhlIGZy YW1ld29yayBpcyBjYWxsZWQgU1BJTURFViwKPiA+ICtuYW1lbHkgIlNoYXJlIFBhcmVudCBJT01N VSBNZWRpYXRlZCBEZXZpY2UiLgo+ID4gKwo+ID4gKwo+ID4gK0hvdyBkb2VzIGl0IHdvcmsKPiA+ ICs9PT09PT09PT09PT09PT09Cj4gPiArCj4gPiArKldhcnBEcml2ZSogdGFrZXMgdGhlIEhhcmR3 YXJlIEFjY2VsZXJhdG9yIGFzIGEgaGV0ZXJvZ2VuZW91cwo+ID4gcHJvY2Vzc29yIHdoaWNoCj4g PiArY2FuIHNoYXJlIHNvbWUgbG9hZCBmb3IgdGhlIENQVToKPiA+ICsKPiA+ICsuLiBpbWFnZTo6 IHdkLnN2Zwo+ID4gKyAgICAgICAgOmFsdDogVGhpcyBpcyBhIC5zdmcgaW1hZ2UsIGlmIHlvdXIg YnJvd3NlciBjYW5ub3Qgc2hvdyBpdCwKPiA+ICsgICAgICAgICAgICAgICAgdHJ5IHRvIGRvd25s b2FkIGFuZCB2aWV3IGl0IGxvY2FsbHkKPiA+ICsKPiA+ICtTbyBpdCBwcm92aWRlcyB0aGUgY2Fw YWJpbGl0eSB0byB0aGUgdXNlciBhcHBsaWNhdGlvbiB0bzoKPiA+ICsKPiA+ICsxLiBTZW5kIHJl cXVlc3QgdG8gdGhlIGhhcmR3YXJlCj4gPiArMi4gU2hhcmUgbWVtb3J5IHdpdGggdGhlIGFwcGxp Y2F0aW9uIGFuZCBvdGhlciBhY2NlbGVyYXRvcnMKPiA+ICsKPiA+ICtUaGVzZSByZXF1aXJlbWVu dHMgY2FuIGJlIGZ1bGZpbGxlZCBieSBWRklPIGlmIHRoZSBhY2NlbGVyYXRvciBjYW4gc2VydmUK PiA+IGVhY2gKPiA+ICthcHBsaWNhdGlvbiB3aXRoIGEgc2VwYXJhdGVkIFZpcnR1YWwgRnVuY3Rp b24uIEJ1dCBhICpTUi1JT1YqIGxpa2UgVkYgKHdlCj4gPiB3aWxsCj4gPiArY2FsbCBpdCAqSFZG KiBoZXJlaW5hZnRlcikgZGVzaWduIGlzIHRvbyBoZWF2eSBmb3IgdGhlIGFjY2VsZXJhdG9yIHdo aWNoCj4gPiArc2VydmljZSB0aG91c2FuZHMgb2YgcHJvY2Vzc2VzLgo+ID4gKwo+ID4gK0FuZCB0 aGUgKkhWRiogaXMgbm90IGdvb2QgZm9yIHRoZSBzY2VuYXJpbyB0aGF0IGEgZGV2aWNlIGtlZXAg bW9zdCBvZiBpdHMKPiA+ICtyZXNvdXJjZSBidXQgc2hhcmUgcGFydGlhbCBvZiB0aGUgZnVuY3Rp b24gdG8gdGhlIHVzZXIgc3BhY2UuIEUuZy4gYSAqTklDKgo+ID4gK3dvcmtzIGFzIGEgKm5ldGRl diogYnV0IHNoYXJlIHNvbWUgaGFyZHdhcmUgcXVldWVzIHRvIHRoZSB1c2VyCj4gPiBhcHBsaWNh dGlvbiB0bwo+ID4gK3NlbmQgcGFja2V0cyBkaXJlY3QgdG8gdGhlIGhhcmR3YXJlLgo+ID4gKwo+ ID4gKypWRklPLW1kZXYqIGNhbiBzb2x2ZSBzb21lIG9mIHRoZSBwcm9ibGVtIGhlcmUuIEJ1dCAq VkZJTy1tZGV2KiBoYXMKPiA+IHR3byBwcm9ibGVtOgo+ID4gKwo+ID4gKzEuIGl0IGNhbm5vdCBt YWtlIHVzZSBvZiBpdHMgcGFyZW50IGRldmljZSdzIElPTU1VLgo+ID4gKzIuIGl0IGlzIGFzc3Vt ZWQgdG8gYmUgb3Blbm5lZCBvbmx5IG9uY2UuCj4gPiArCj4gPiArU28gaXQgd2lsbCBuZWVkIHNv bWUgYWRkLW9uIGZvciBiZXR0ZXIgcmVzb3VyY2UgY29udHJvbCBhbmQgbGV0IHRoZSBWRklPCj4g PiArZHJpdmVyIGJlIGF3YXJlIG9mIHRoaXMuCj4gPiArCj4gPiArCj4gPiArQXJjaGl0ZWN0dXJl Cj4gPiArLS0tLS0tLS0tLS0tCj4gPiArCj4gPiArVGhlIGZ1bGwgKldhcnBEcml2ZSogYXJjaGl0 ZWN0dXJlIGlzIHJlcHJlc2VudGVkIGluIHRoZSBmb2xsb3dpbmcgY2xhc3MKPiA+ICtkaWFncmFt Ogo+ID4gKwo+ID4gKy4uIGltYWdlOjogd2QtYXJjaC5zdmcKPiA+ICsgICAgICAgIDphbHQ6IFRo aXMgaXMgYSAuc3ZnIGltYWdlLCBpZiB5b3VyIGJyb3dzZXIgY2Fubm90IHNob3cgaXQsCj4gPiAr ICAgICAgICAgICAgICAgIHRyeSB0byBkb3dubG9hZCBhbmQgdmlldyBpdCBsb2NhbGx5Cj4gPiAr Cj4gPiArVGhlIGlkZWEgaXM6IHdoZW4gYSBkZXZpY2UgaXMgcHJvYmVkLCBpdCBjYW4gYmUgcmVn aXN0ZXJlZCB0byB0aGUgZ2VuZXJhbAo+ID4gK2ZyYW1ld29yaywgZS5nLiAqbmV0ZGV2KiBvciAq Y3J5cHRvKiwgYW5kIHRoZSAqU1BJTURFViogYXQgdGhlIHNhbWUKPiA+IHRpbWUuCj4gPiArCj4g PiArSWYgKlNQSU1ERVYqIGlzIHJlZ2lzdGVyZWQuIEEgKm1kZXYqIGNyZWF0aW9uIGludGVyZmFj ZSBpcyBjcmVhdGVkLiBUaGVuCj4gPiB0aGUKPiA+ICtzeXN0ZW0gYWRtaW5pc3RyYXRvciBjYW4g Y3JlYXRlIGEgKm1kZXYqIGluIHRoZSB1c2VyIHNwYWNlIGFuZCBzZXQgaXRzCj4gPiArcGFyYW1l dGVycyB2aWEgaXRzIHN5c2ZzIGludGVyZmFjZXYuIEJ1dCBub3QgbGlrZSB0aGUgb3RoZXIgbWRl dgo+ID4gK2ltcGxlbWVudGF0aW9uLCBoYXJkd2FyZSByZXNvdXJjZSB3aWxsIG5vdCBiZSBhbGxv Y2F0ZWQgdW50aWwgaXQgaXMgb3BlbmVkCj4gPiBieQo+ID4gK2FuIGFwcGxpY2F0aW9uLgo+ID4g Kwo+ID4gK1dpdGggdGhpcyBzdHJhdGVneSwgdGhlIGhhcmR3YXJlIHJlc291cmNlIGNhbiBiZSBl YXNpbHkgc2NoZWR1bGVkIGFtb25nCj4gPiArbXVsdGlwbGUgcHJvY2Vzc2VzLgo+ID4gKwo+ID4g Kwo+ID4gK1RoZSB1c2VyIEFQSQo+ID4gKy0tLS0tLS0tLS0tLQo+ID4gKwo+ID4gK1dlIGFkb3B0 IGEgcG9sbGluZyBzdHlsZSBpbnRlcmZhY2UgaW4gdGhlIHVzZXIgc3BhY2U6IDo6Cj4gPiArCj4g PiArICAgICAgICBpbnQgd2RfcmVxdWVzdF9xdWV1ZShpbnQgY29udGFpbmVyLCBzdHJ1Y3Qgd2Rf cXVldWUgKnEsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpt ZGV2KQo+ID4gKyAgICAgICAgdm9pZCB3ZF9yZWxlYXNlX3F1ZXVlKHN0cnVjdCB3ZF9xdWV1ZSAq cSk7Cj4gPiArCj4gPiArICAgICAgICBpbnQgd2Rfc2VuZChzdHJ1Y3Qgd2RfcXVldWUgKnEsIHZv aWQgKnJlcSk7Cj4gPiArICAgICAgICBpbnQgd2RfcmVjdihzdHJ1Y3Qgd2RfcXVldWUgKnEsIHZv aWQgKipyZXEpOwo+ID4gKyAgICAgICAgaW50IHdkX3JlY3Zfc3luYyhzdHJ1Y3Qgd2RfcXVldWUg KnEsIHZvaWQgKipyZXEpOwo+ID4gKwo+ID4gK3RoZSAuLi5fc3luYygpIGludGVyZmFjZSBpcyBh IHdyYXBwZXIgdG8gdGhlIG5vbiBzeW5jIHZlcnNpb24uIFRoZXkgd2FpdCBvbgo+ID4gdGhlCj4g PiArZGV2aWNlIHVudGlsIHRoZSBxdWV1ZSBiZWNvbWUgYXZhaWxhYmxlLgo+ID4gKwo+ID4gK01l bW9yeSBjYW4gYmUgZG9uZSBieSBWRklPIERNQSBBUEkuIE9yIHRoZSBmb2xsb3dpbmcgaGVscGVy IGZ1bmN0aW9uCj4gPiBjYW4gYmUKPiA+ICthZG9wdGVkOiA6Ogo+ID4gKwo+ID4gKyAgICAgICAg aW50IHdkX21lbV9zaGFyZShzdHJ1Y3Qgd2RfcXVldWUgKnEsIGNvbnN0IHZvaWQgKmFkZHIsCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpOwo+ID4g KyAgICAgICAgdm9pZCB3ZF9tZW1fdW5zaGFyZShzdHJ1Y3Qgd2RfcXVldWUgKnEsIGNvbnN0IHZv aWQgKmFkZHIsIHNpemVfdAo+ID4gc2l6ZSk7Cj4gPiArCj4gPiArVG9kbzogaWYgdGhlIElPTU1V IHN1cHBvcnQgKkFUUyogb3IgKlNNTVUqIHN0YWxsIG1vZGUuIG1lbSBzaGFyZSBpcwo+ID4gbm90 Cj4gPiArbmVjZXNzYXJ5LiBUaGlzIGNhbiBiZSBjaGVjayB3aXRoIFNQSW1kZXYgc3lzZnMgaW50 ZXJmYWNlLgo+ID4gKwo+ID4gK1RoZSB1c2VyIEFQSSBpcyBub3QgbWFuZGF0b3J5LiBJdCBpcyBz aW1wbHkgYSBzdWdnZXN0aW9uIGFuZCBoaW50IHdoYXQgdGhlCj4gPiAra2VybmVsIGludGVyZmFj ZSBpcyBzdXBwb3NlZCB0byBzdXBwb3J0Lgo+ID4gKwo+ID4gKwo+ID4gK1RoZSB1c2VyIGRyaXZl cgo+ID4gKy0tLS0tLS0tLS0tLS0tLQo+ID4gKwo+ID4gKypXYXJwRHJpdmUqIGV4cG9zZSB0aGUg aGFyZHdhcmUgSU8gc3BhY2UgdG8gdGhlIHVzZXIgcHJvY2VzcyAodmlhCj4gPiAqbW1hcCopLiBT bwo+ID4gK2l0IHdpbGwgcmVxdWlyZSB1c2VyIGRyaXZlciBmb3IgaW1wbGVtZW50aW5nIHRoZSB1 c2VyIEFQSS4gVGhlIGZvbGxvd2luZyBBUEkKPiA+ICtpcyBzdWdnZXN0ZWQgZm9yIGEgdXNlciBk cml2ZXI6IDo6Cj4gPiArCj4gPiArICAgICAgICBpbnQgb3BlbihzdHJ1Y3Qgd2RfcXVldWUgKnEp Owo+ID4gKyAgICAgICAgaW50IGNsb3NlKHN0cnVjdCB3ZF9xdWV1ZSAqcSk7Cj4gPiArICAgICAg ICBpbnQgc2VuZChzdHJ1Y3Qgd2RfcXVldWUgKnEsIHZvaWQgKnJlcSk7Cj4gPiArICAgICAgICBp bnQgcmVjdihzdHJ1Y3Qgd2RfcXVldWUgKnEsIHZvaWQgKipyZXEpOwo+ID4gKwo+ID4gK1RoZXNl IGNhbGxiYWNrIGVuYWJsZSB0aGUgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHRoZSB1c2VyIGFwcGxp Y2F0aW9uCj4gPiBhbmQgdGhlCj4gPiArZGV2aWNlLiBZb3Ugd2lsbCBzdGlsbCBuZWVkIHRoZSBo YXJkd2FyZS1kZXBlbmQgYWxnb3JpdGhtIGRyaXZlciB0byBhY2Nlc3MKPiA+IHRoZQo+ID4gK2Fs Z29yaXRobSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBhY2NlbGVyYXRvciBpdHNlbGYuCj4gPiArCj4g PiArCj4gPiArTXVsdGlwbGUgcHJvY2Vzc2VzIHN1cHBvcnQKPiA+ICs9PT09PT09PT09PT09PT09 PT09PT09PT09PQo+ID4gKwo+ID4gK0luIHRoZSBsYXRlc3QgbWFpbmxpbmUga2VybmVsICg0LjE4 KSB3aGVuIHRoaXMgZG9jdW1lbnQgaXMgd3JpdHRlbi4KPiA+ICtNdWx0aS1wcm9jZXNzIGlzIG5v dCBzdXBwb3J0ZWQgaW4gVkZJTyB5ZXQuCj4gPiArCj4gPiArKkpQQiogaGFzIGEgcGF0Y2hzZXQg dG8gZW5hYmxlIHRoaXNbMl1fLiBXZSBoYXZlIHRlc3RlZCBpdCB3aXRoIG91cgo+ID4gaGFyZHdh cmUKPiA+ICsod2hpY2ggaXMga25vd24gYXMgKkQwNiopLiBJdCB3b3JrcyB3ZWxsLiAqV2FycERy aXZlKiByZWx5IG9uIHRoZW0gdG8KPiA+IHN1cHBvcnQKPiA+ICttdWx0aXBsZSBwcm9jZXNzZXMu IElmIGl0IGlzIG5vdCBlbmFibGVkLCAqV2FycERyaXZlKiBjYW4gc3RpbGwgd29yaywgYnV0IGl0 Cj4gPiArc3VwcG9ydCBvbmx5IG9uZSBwcm9jZXNzLCB3aGljaCB3aWxsIHNoYXJlIHRoZSBzYW1l IGlvIG1hcCB0YWJsZSB3aXRoCj4gPiBrZXJuZWwKPiA+ICsoYnV0IHRoZSB1c2VyIGFwcGxpY2F0 aW9uIGNhbm5vdCBhY2Nlc3MgdGhlIGtlcm5lbCBhZGRyZXNzLCBTbyBpdCBpcyBub3QKPiA+IGdv aW5nCj4gPiArdG8gYmUgYSBzZWN1cml0eSBwcm9ibGVtKQo+ID4gKwo+ID4gKwo+ID4gK0xlZ2Fj eSBNb2RlIFN1cHBvcnQKPiA+ICs9PT09PT09PT09PT09PT09PT09Cj4gPiArRm9yIHRoZSBoYXJk d2FyZSBvbiB3aGljaCBJT01NVSBpcyBub3Qgc3VwcG9ydCwgV2FycERyaXZlIGNhbiBydW4gb24K PiA+ICpOT0lPTU1VKgo+ID4gK21vZGUuCj4gPiArCj4gPiArCj4gPiArUmVmZXJlbmNlcwo+ID4g Kz09PT09PT09PT0KPiA+ICsuLiBbMV0gQWNjcm9kaW5nIHRvIHRoZSBjb21tZW50IGluIGluIG1t L2d1cC5jLCBUaGUgKmd1cCogaXMgb25seSBzYWZlCj4gPiB3aXRoaW4KPiA+ICsgICAgICAgYSBz eXNjYWxsLiAgQmVjYXVzZSBpdCBjYW4gb25seSBrZWVwIHRoZSBwaHlzaWNhbCBtZW1vcnkgaW4g cGxhY2UKPiA+ICsgICAgICAgd2l0aG91dCBtYWtpbmcgc3VyZSB0aGUgVk1BIHdpbGwgYWx3YXlz IHBvaW50IHRvIGl0LiBNYXliZSB3ZSBzaG91bGQKPiA+ICsgICAgICAgcmFpc2UgdGhlIFZNX1BJ Tk5FRCBwYXRjaHNldCAoc2VlCj4gPiArICAgICAgIGh0dHBzOi8vbGlzdHMuZ3QubmV0L2xpbnV4 L2tlcm5lbC8xOTMxOTkzKSBhZ2FpbiB0byBzb2x2ZSB0aGlzIHByb2JsZW0uCj4gPiArLi4gWzJd IGh0dHBzOi8vcGF0Y2h3b3JrLmtlcm5lbC5vcmcvcGF0Y2gvMTAzOTQ4NTEvCj4gPiArLi4gWzNd IGh0dHBzOi8vemh1YW5sYW4uemhpaHUuY29tL3AvMzU0ODkwMzUKPiA+ICsKPiA+ICsuLiB2aW06 IHR3PTc4Cj4gPiBkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi93YXJwZHJpdmUvd2QtYXJjaC5z dmcKPiA+IGIvRG9jdW1lbnRhdGlvbi93YXJwZHJpdmUvd2QtYXJjaC5zdmcKPiA+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLjFiM2QxODE3YzRiYQo+ID4gLS0t IC9kZXYvbnVsbAo+ID4gKysrIGIvRG9jdW1lbnRhdGlvbi93YXJwZHJpdmUvd2QtYXJjaC5zdmcK PiA+IEBAIC0wLDAgKzEsNzMyIEBACj4gPiArPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0i VVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cj4gPiArPCEtLSBDcmVhdGVkIHdpdGggSW5rc2NhcGUg KGh0dHA6Ly93d3cuaW5rc2NhcGUub3JnLykgLS0+Cj4gPiArCj4gPiArPHN2Zwo+ID4gKyAgIHht bG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKPiA+ICsgICB4bWxuczpj Yz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgo+ID4gKyAgIHhtbG5zOnJkZj0iaHR0 cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKPiA+ICsgICB4bWxuczpz dmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgo+ID4gKyAgIHhtbG5zPSJodHRwOi8vd3d3 LnczLm9yZy8yMDAwL3N2ZyIKPiA+ICsgICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcv MTk5OS94bGluayIKPiA+ICsgICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJj ZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCj4gPiArICAgeG1sbnM6aW5rc2NhcGU9Imh0 dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCj4gPiArICAgd2lkdGg9 IjIxMG1tIgo+ID4gKyAgIGhlaWdodD0iMTkzbW0iCj4gPiArICAgdmlld0JveD0iMCAwIDc0NC4w OTQ0OSA2ODMuODU4MjMiCj4gPiArICAgaWQ9InN2ZzIiCj4gPiArICAgdmVyc2lvbj0iMS4xIgo+ ID4gKyAgIGlua3NjYXBlOnZlcnNpb249IjAuOTIuMyAoMjQwNTU0NiwgMjAxOC0wMy0xMSkiCj4g PiArICAgc29kaXBvZGk6ZG9jbmFtZT0id2QtYXJjaC5zdmciPgo+ID4gKyAgPGRlZnMKPiA+ICsg ICAgIGlkPSJkZWZzNCI+Cj4gPiArICAgIDxsaW5lYXJHcmFkaWVudAo+ID4gKyAgICAgICBpbmtz Y2FwZTpjb2xsZWN0PSJhbHdheXMiCj4gPiArICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDY4MzAi Pgo+ID4gKyAgICAgIDxzdG9wCj4gPiArICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzAwMDAw MDtzdG9wLW9wYWNpdHk6MTsiCj4gPiArICAgICAgICAgb2Zmc2V0PSIwIgo+ID4gKyAgICAgICAg IGlkPSJzdG9wNjgzMiIgLz4KPiA+ICsgICAgICA8c3RvcAo+ID4gKyAgICAgICAgIHN0eWxlPSJz dG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjA7Igo+ID4gKyAgICAgICAgIG9mZnNldD0i MSIKPiA+ICsgICAgICAgICBpZD0ic3RvcDY4MzQiIC8+Cj4gPiArICAgIDwvbGluZWFyR3JhZGll bnQ+Cj4gPiArICAgIDxsaW5lYXJHcmFkaWVudAo+ID4gKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0 PSJhbHdheXMiCj4gPiArICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDUwMjYiCj4g PiArICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDUwMzIiCj4gPiArICAgICAgIHgxPSIzNTMiCj4g PiArICAgICAgIHkxPSIyMTEuMzYyMiIKPiA+ICsgICAgICAgeDI9IjU2NS41Igo+ID4gKyAgICAg ICB5Mj0iMTc0Ljg2MjIiCj4gPiArICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNl Igo+ID4gKyAgICAgICBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKC04OS45NDk2MTQsNDA1 Ljk0NTk0KSIgLz4KPiA+ICsgICAgPGxpbmVhckdyYWRpZW50Cj4gPiArICAgICAgIGlua3NjYXBl OmNvbGxlY3Q9ImFsd2F5cyIKPiA+ICsgICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NTAyNiI+Cj4g PiArICAgICAgPHN0b3AKPiA+ICsgICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZjJmMmYyO3N0 b3Atb3BhY2l0eToxOyIKPiA+ICsgICAgICAgICBvZmZzZXQ9IjAiCj4gPiArICAgICAgICAgaWQ9 InN0b3A1MDI4IiAvPgo+ID4gKyAgICAgIDxzdG9wCj4gPiArICAgICAgICAgc3R5bGU9InN0b3At Y29sb3I6I2YyZjJmMjtzdG9wLW9wYWNpdHk6MDsiCj4gPiArICAgICAgICAgb2Zmc2V0PSIxIgo+ ID4gKyAgICAgICAgIGlkPSJzdG9wNTAzMCIgLz4KPiA+ICsgICAgPC9saW5lYXJHcmFkaWVudD4K PiA+ICsgICAgPGZpbHRlcgo+ID4gKyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCj4g PiArICAgICAgIHN0eWxlPSJjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM6c1JHQiIKPiA+ICsg ICAgICAgaWQ9ImZpbHRlcjQxNjktMyIKPiA+ICsgICAgICAgeD0iLTAuMDMxNTk3NjY2Igo+ID4g KyAgICAgICB3aWR0aD0iMS4wNjMxOTUzIgo+ID4gKyAgICAgICB5PSItMC4wOTk4MTI3NjgiCj4g PiArICAgICAgIGhlaWdodD0iMS4xOTk2MjU1Ij4KPiA+ICsgICAgICA8ZmVHYXVzc2lhbkJsdXIK PiA+ICsgICAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCj4gPiArICAgICAgICAgc3Rk RGV2aWF0aW9uPSIxLjMzMDc1OTkiCj4gPiArICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyNDE3 MS02IiAvPgo+ID4gKyAgICA8L2ZpbHRlcj4KPiA+ICsgICAgPGxpbmVhckdyYWRpZW50Cj4gPiAr ICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKPiA+ICsgICAgICAgeGxpbms6aHJlZj0i I2xpbmVhckdyYWRpZW50NTAyNiIKPiA+ICsgICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NTAzMi0x Igo+ID4gKyAgICAgICB4MT0iMzUzIgo+ID4gKyAgICAgICB5MT0iMjExLjM2MjIiCj4gPiArICAg ICAgIHgyPSI1NjUuNSIKPiA+ICsgICAgICAgeTI9IjE3NC44NjIyIgo+ID4gKyAgICAgICBncmFk aWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKPiA+ICsgICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09 InRyYW5zbGF0ZSgxNzUuNzc4NDIsNDAwLjI5MTExKSIgLz4KPiA+ICsgICAgPGZpbHRlcgo+ID4g KyAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCj4gPiArICAgICAgIHN0eWxlPSJjb2xv ci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM6c1JHQiIKPiA+ICsgICAgICAgaWQ9ImZpbHRlcjQxNjkt My0wIgo+ID4gKyAgICAgICB4PSItMC4wMzE1OTc2NjYiCj4gPiArICAgICAgIHdpZHRoPSIxLjA2 MzE5NTMiCj4gPiArICAgICAgIHk9Ii0wLjA5OTgxMjc2OCIKPiA+ICsgICAgICAgaGVpZ2h0PSIx LjE5OTYyNTUiPgo+ID4gKyAgICAgIDxmZUdhdXNzaWFuQmx1cgo+ID4gKyAgICAgICAgIGlua3Nj YXBlOmNvbGxlY3Q9ImFsd2F5cyIKPiA+ICsgICAgICAgICBzdGREZXZpYXRpb249IjEuMzMwNzU5 OSIKPiA+ICsgICAgICAgICBpZD0iZmVHYXVzc2lhbkJsdXI0MTcxLTYtOSIgLz4KPiA+ICsgICAg PC9maWx0ZXI+Cj4gPiArICAgIDxtYXJrZXIKPiA+ICsgICAgICAgbWFya2VyV2lkdGg9IjE4Ljk2 MDY1MyIKPiA+ICsgICAgICAgbWFya2VySGVpZ2h0PSIxMS4xOTQ2NTgiCj4gPiArICAgICAgIHJl Zlg9IjkuNDgwMzI2NyIKPiA+ICsgICAgICAgcmVmWT0iNS41OTczMjg3Igo+ID4gKyAgICAgICBv cmllbnQ9ImF1dG8iCj4gPiArICAgICAgIGlkPSJtYXJrZXI0NjEzIj4KPiA+ICsgICAgICA8cmVj dAo+ID4gKyAgICAgICAgIHk9Ii01LjE1ODk3ODUiCj4gPiArICAgICAgICAgeD0iNS44NTA0MTE5 Igo+ID4gKyAgICAgICAgIGhlaWdodD0iMTAuMzE3OTU3Igo+ID4gKyAgICAgICAgIHdpZHRoPSIx MC4zMTc5NTciCj4gPiArICAgICAgICAgaWQ9InJlY3Q0MjEyIgo+ID4gKyAgICAgICAgIHN0eWxl PSJmaWxsOiNmZmZmZmY7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjAuNjkxNDMzNjc7c3Ry b2tlLQo+ID4gbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZSIKPiA+ICsgICAgICAg ICB0cmFuc2Zvcm09Im1hdHJpeCgwLjg2MTExMjc0LDAuNTA4NDE0MDUsLQo+ID4gMC44NjExMTI3 NCwwLjUwODQxNDA1LDAsMCkiPgo+ID4gKyAgICAgICAgPHRpdGxlCj4gPiArICAgICAgICAgICBp ZD0idGl0bGU0MjYyIj5nZW5lcmF0aW9uPC90aXRsZT4KPiA+ICsgICAgICA8L3JlY3Q+Cj4gPiAr ICAgIDwvbWFya2VyPgo+ID4gKyAgICA8bWFya2VyCj4gPiArICAgICAgIG1hcmtlcldpZHRoPSIx MS4yMjczNTgiCj4gPiArICAgICAgIG1hcmtlckhlaWdodD0iMTIuMzU1MjU4Igo+ID4gKyAgICAg ICByZWZYPSIxMCIKPiA+ICsgICAgICAgcmVmWT0iNi4xNzc2MjkiCj4gPiArICAgICAgIG9yaWVu dD0iYXV0byIKPiA+ICsgICAgICAgaWQ9Im1hcmtlcjQ4MjUiPgo+ID4gKyAgICAgIDxwYXRoCj4g PiArICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKPiA+ICsgICAgICAg ICBpZD0icGF0aDQ3NTciCj4gPiArICAgICAgICAgZD0iTSAwLjQyMDI0NzMzLDAuNDI4MDY0NDQg MTAuMjMxMzU3LDYuMzUwMDg0NAo+ID4gMC4yNDM0NzczMywxMS45MTg1NDQiCj4gPiArICAgICAg ICAgc3R5bGU9ImZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJv a2UtCj4gPiB3aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0 ZXI7c3Ryb2tlLW9wYWNpdHk6MSIgLz4KPiA+ICsgICAgPC9tYXJrZXI+Cj4gPiArICAgIDxtYXJr ZXIKPiA+ICsgICAgICAgbWFya2VyV2lkdGg9IjExLjIyNzM1OCIKPiA+ICsgICAgICAgbWFya2Vy SGVpZ2h0PSIxMi4zNTUyNTgiCj4gPiArICAgICAgIHJlZlg9IjEwIgo+ID4gKyAgICAgICByZWZZ PSI2LjE3NzYyOSIKPiA+ICsgICAgICAgb3JpZW50PSJhdXRvIgo+ID4gKyAgICAgICBpZD0ibWFy a2VyNDgyNS02Ij4KPiA+ICsgICAgICA8cGF0aAo+ID4gKyAgICAgICAgIGlua3NjYXBlOmNvbm5l Y3Rvci1jdXJ2YXR1cmU9IjAiCj4gPiArICAgICAgICAgaWQ9InBhdGg0NzU3LTEiCj4gPiArICAg ICAgICAgZD0iTSAwLjQyMDI0NzMzLDAuNDI4MDY0NDQgMTAuMjMxMzU3LDYuMzUwMDg0NAo+ID4g MC4yNDM0NzczMywxMS45MTg1NDQiCj4gPiArICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtmaWxs LXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2UtCj4gPiB3aWR0aDoxcHg7c3Ryb2tl LWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIgLz4K PiA+ICsgICAgPC9tYXJrZXI+Cj4gPiArICAgIDxsaW5lYXJHcmFkaWVudAo+ID4gKyAgICAgICBp bmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCj4gPiArICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJH cmFkaWVudDUwMjYiCj4gPiArICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDUwMzItMy05Igo+ID4g KyAgICAgICB4MT0iMzUzIgo+ID4gKyAgICAgICB5MT0iMjExLjM2MjIiCj4gPiArICAgICAgIHgy PSI1NjUuNSIKPiA+ICsgICAgICAgeTI9IjE3NC44NjIyIgo+ID4gKyAgICAgICBncmFkaWVudFVu aXRzPSJ1c2VyU3BhY2VPblVzZSIKPiA+ICsgICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJp eCgxLjI0NTI1MTEsMCwwLDAuOTg1MTMwMTYsLQo+ID4gMTkwLjk1NjMyLDU0MC4zMzE1NikiIC8+ Cj4gPiArICAgIDxmaWx0ZXIKPiA+ICsgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgo+ ID4gKyAgICAgICBzdHlsZT0iY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzOnNSR0IiCj4gPiAr ICAgICAgIGlkPSJmaWx0ZXI0MTY5LTMtNS04Igo+ID4gKyAgICAgICB4PSItMC4wMzE1OTc2NjYi Cj4gPiArICAgICAgIHdpZHRoPSIxLjA2MzE5NTMiCj4gPiArICAgICAgIHk9Ii0wLjA5OTgxMjc2 OCIKPiA+ICsgICAgICAgaGVpZ2h0PSIxLjE5OTYyNTUiPgo+ID4gKyAgICAgIDxmZUdhdXNzaWFu Qmx1cgo+ID4gKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKPiA+ICsgICAgICAg ICBzdGREZXZpYXRpb249IjEuMzMwNzU5OSIKPiA+ICsgICAgICAgICBpZD0iZmVHYXVzc2lhbkJs dXI0MTcxLTYtMy05IiAvPgo+ID4gKyAgICA8L2ZpbHRlcj4KPiA+ICsgICAgPG1hcmtlcgo+ID4g KyAgICAgICBtYXJrZXJXaWR0aD0iMTEuMjI3MzU4Igo+ID4gKyAgICAgICBtYXJrZXJIZWlnaHQ9 IjEyLjM1NTI1OCIKPiA+ICsgICAgICAgcmVmWD0iMTAiCj4gPiArICAgICAgIHJlZlk9IjYuMTc3 NjI5Igo+ID4gKyAgICAgICBvcmllbnQ9ImF1dG8iCj4gPiArICAgICAgIGlkPSJtYXJrZXI0ODI1 LTYtMiI+Cj4gPiArICAgICAgPHBhdGgKPiA+ICsgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3It Y3VydmF0dXJlPSIwIgo+ID4gKyAgICAgICAgIGlkPSJwYXRoNDc1Ny0xLTkiCj4gPiArICAgICAg ICAgZD0iTSAwLjQyMDI0NzMzLDAuNDI4MDY0NDQgMTAuMjMxMzU3LDYuMzUwMDg0NAo+ID4gMC4y NDM0NzczMywxMS45MTg1NDQiCj4gPiArICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtmaWxsLXJ1 bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2UtCj4gPiB3aWR0aDoxcHg7c3Ryb2tlLWxp bmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIgLz4KPiA+ ICsgICAgPC9tYXJrZXI+Cj4gPiArICAgIDxtYXJrZXIKPiA+ICsgICAgICAgbWFya2VyV2lkdGg9 IjExLjIyNzM1OCIKPiA+ICsgICAgICAgbWFya2VySGVpZ2h0PSIxMi4zNTUyNTgiCj4gPiArICAg ICAgIHJlZlg9IjEwIgo+ID4gKyAgICAgICByZWZZPSI2LjE3NzYyOSIKPiA+ICsgICAgICAgb3Jp ZW50PSJhdXRvIgo+ID4gKyAgICAgICBpZD0ibWFya2VyNDgyNS02LTItMSI+Cj4gPiArICAgICAg PHBhdGgKPiA+ICsgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgo+ID4g KyAgICAgICAgIGlkPSJwYXRoNDc1Ny0xLTktOSIKPiA+ICsgICAgICAgICBkPSJNIDAuNDIwMjQ3 MzMsMC40MjgwNjQ0NCAxMC4yMzEzNTcsNi4zNTAwODQ0Cj4gPiAwLjI0MzQ3NzMzLDExLjkxODU0 NCIKPiA+ICsgICAgICAgICBzdHlsZT0iZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9r ZTojMDAwMDAwO3N0cm9rZS0KPiA+IHdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9r ZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIiAvPgo+ID4gKyAgICA8L21hcmtlcj4K PiA+ICsgICAgPGxpbmVhckdyYWRpZW50Cj4gPiArICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFs d2F5cyIKPiA+ICsgICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NTAyNiIKPiA+ICsg ICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NTAzMi0zLTktNyIKPiA+ICsgICAgICAgeDE9IjM1MyIK PiA+ICsgICAgICAgeTE9IjIxMS4zNjIyIgo+ID4gKyAgICAgICB4Mj0iNTY1LjUiCj4gPiArICAg ICAgIHkyPSIxNzQuODYyMiIKPiA+ICsgICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25V c2UiCj4gPiArICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS4zNzQyNzQyLDAsMCww Ljk3Nzg2Mzk4LC0KPiA+IDIzNC41MjYxNyw2NTQuNjMzNjcpIiAvPgo+ID4gKyAgICA8ZmlsdGVy Cj4gPiArICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKPiA+ICsgICAgICAgc3R5bGU9 ImNvbG9yLWludGVycG9sYXRpb24tZmlsdGVyczpzUkdCIgo+ID4gKyAgICAgICBpZD0iZmlsdGVy NDE2OS0zLTUtOC01Igo+ID4gKyAgICAgICB4PSItMC4wMzE1OTc2NjYiCj4gPiArICAgICAgIHdp ZHRoPSIxLjA2MzE5NTMiCj4gPiArICAgICAgIHk9Ii0wLjA5OTgxMjc2OCIKPiA+ICsgICAgICAg aGVpZ2h0PSIxLjE5OTYyNTUiPgo+ID4gKyAgICAgIDxmZUdhdXNzaWFuQmx1cgo+ID4gKyAgICAg ICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKPiA+ICsgICAgICAgICBzdGREZXZpYXRpb249 IjEuMzMwNzU5OSIKPiA+ICsgICAgICAgICBpZD0iZmVHYXVzc2lhbkJsdXI0MTcxLTYtMy05LTAi IC8+Cj4gPiArICAgIDwvZmlsdGVyPgo+ID4gKyAgICA8bWFya2VyCj4gPiArICAgICAgIG1hcmtl cldpZHRoPSIxMS4yMjczNTgiCj4gPiArICAgICAgIG1hcmtlckhlaWdodD0iMTIuMzU1MjU4Igo+ ID4gKyAgICAgICByZWZYPSIxMCIKPiA+ICsgICAgICAgcmVmWT0iNi4xNzc2MjkiCj4gPiArICAg ICAgIG9yaWVudD0iYXV0byIKPiA+ICsgICAgICAgaWQ9Im1hcmtlcjQ4MjUtNi0yLTYiPgo+ID4g KyAgICAgIDxwYXRoCj4gPiArICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0i MCIKPiA+ICsgICAgICAgICBpZD0icGF0aDQ3NTctMS05LTEiCj4gPiArICAgICAgICAgZD0iTSAw LjQyMDI0NzMzLDAuNDI4MDY0NDQgMTAuMjMxMzU3LDYuMzUwMDg0NAo+ID4gMC4yNDM0NzczMywx MS45MTg1NDQiCj4gPiArICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9k ZDtzdHJva2U6IzAwMDAwMDtzdHJva2UtCj4gPiB3aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0 dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIgLz4KPiA+ICsgICAgPC9t YXJrZXI+Cj4gPiArICAgIDxsaW5lYXJHcmFkaWVudAo+ID4gKyAgICAgICBpbmtzY2FwZTpjb2xs ZWN0PSJhbHdheXMiCj4gPiArICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDUwMjYi Cj4gPiArICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDUwMzItMy05LTQiCj4gPiArICAgICAgIHgx PSIzNTMiCj4gPiArICAgICAgIHkxPSIyMTEuMzYyMiIKPiA+ICsgICAgICAgeDI9IjU2NS41Igo+ ID4gKyAgICAgICB5Mj0iMTc0Ljg2MjIiCj4gPiArICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJT cGFjZU9uVXNlIgo+ID4gKyAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuMzc0Mjkx MiwwLDAsMi4wMDM1ODQ1LC0KPiA+IDQ2OC4zNDQyOCwzNDIuNTY2MDMpIiAvPgo+ID4gKyAgICA8 ZmlsdGVyCj4gPiArICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKPiA+ICsgICAgICAg c3R5bGU9ImNvbG9yLWludGVycG9sYXRpb24tZmlsdGVyczpzUkdCIgo+ID4gKyAgICAgICBpZD0i ZmlsdGVyNDE2OS0zLTUtOC01NCIKPiA+ICsgICAgICAgeD0iLTAuMDMxNTk3NjY2Igo+ID4gKyAg ICAgICB3aWR0aD0iMS4wNjMxOTUzIgo+ID4gKyAgICAgICB5PSItMC4wOTk4MTI3NjgiCj4gPiAr ICAgICAgIGhlaWdodD0iMS4xOTk2MjU1Ij4KPiA+ICsgICAgICA8ZmVHYXVzc2lhbkJsdXIKPiA+ ICsgICAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCj4gPiArICAgICAgICAgc3RkRGV2 aWF0aW9uPSIxLjMzMDc1OTkiCj4gPiArICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyNDE3MS02 LTMtOS03IiAvPgo+ID4gKyAgICA8L2ZpbHRlcj4KPiA+ICsgICAgPG1hcmtlcgo+ID4gKyAgICAg ICBtYXJrZXJXaWR0aD0iMTEuMjI3MzU4Igo+ID4gKyAgICAgICBtYXJrZXJIZWlnaHQ9IjEyLjM1 NTI1OCIKPiA+ICsgICAgICAgcmVmWD0iMTAiCj4gPiArICAgICAgIHJlZlk9IjYuMTc3NjI5Igo+ ID4gKyAgICAgICBvcmllbnQ9ImF1dG8iCj4gPiArICAgICAgIGlkPSJtYXJrZXI0ODI1LTYtMi0x LTgiPgo+ID4gKyAgICAgIDxwYXRoCj4gPiArICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1 cnZhdHVyZT0iMCIKPiA+ICsgICAgICAgICBpZD0icGF0aDQ3NTctMS05LTktNiIKPiA+ICsgICAg ICAgICBkPSJNIDAuNDIwMjQ3MzMsMC40MjgwNjQ0NCAxMC4yMzEzNTcsNi4zNTAwODQ0Cj4gPiAw LjI0MzQ3NzMzLDExLjkxODU0NCIKPiA+ICsgICAgICAgICBzdHlsZT0iZmlsbDpub25lO2ZpbGwt cnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS0KPiA+IHdpZHRoOjFweDtzdHJva2Ut bGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIiAvPgo+ ID4gKyAgICA8L21hcmtlcj4KPiA+ICsgICAgPG1hcmtlcgo+ID4gKyAgICAgICBtYXJrZXJXaWR0 aD0iMTEuMjI3MzU4Igo+ID4gKyAgICAgICBtYXJrZXJIZWlnaHQ9IjEyLjM1NTI1OCIKPiA+ICsg ICAgICAgcmVmWD0iMTAiCj4gPiArICAgICAgIHJlZlk9IjYuMTc3NjI5Igo+ID4gKyAgICAgICBv cmllbnQ9ImF1dG8iCj4gPiArICAgICAgIGlkPSJtYXJrZXI0ODI1LTYtMi0xLTgtOCI+Cj4gPiAr ICAgICAgPHBhdGgKPiA+ICsgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIw Igo+ID4gKyAgICAgICAgIGlkPSJwYXRoNDc1Ny0xLTktOS02LTkiCj4gPiArICAgICAgICAgZD0i TSAwLjQyMDI0NzMzLDAuNDI4MDY0NDQgMTAuMjMxMzU3LDYuMzUwMDg0NAo+ID4gMC4yNDM0Nzcz MywxMS45MTg1NDQiCj4gPiArICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZl bm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2UtCj4gPiB3aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6 YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIgLz4KPiA+ICsgICAg PC9tYXJrZXI+Cj4gPiArICAgIDxtYXJrZXIKPiA+ICsgICAgICAgbWFya2VyV2lkdGg9IjExLjIy NzM1OCIKPiA+ICsgICAgICAgbWFya2VySGVpZ2h0PSIxMi4zNTUyNTgiCj4gPiArICAgICAgIHJl Zlg9IjEwIgo+ID4gKyAgICAgICByZWZZPSI2LjE3NzYyOSIKPiA+ICsgICAgICAgb3JpZW50PSJh dXRvIgo+ID4gKyAgICAgICBpZD0ibWFya2VyNDgyNS02LTAiPgo+ID4gKyAgICAgIDxwYXRoCj4g PiArICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKPiA+ICsgICAgICAg ICBpZD0icGF0aDQ3NTctMS05MyIKPiA+ICsgICAgICAgICBkPSJNIDAuNDIwMjQ3MzMsMC40Mjgw NjQ0NCAxMC4yMzEzNTcsNi4zNTAwODQ0Cj4gPiAwLjI0MzQ3NzMzLDExLjkxODU0NCIKPiA+ICsg ICAgICAgICBzdHlsZT0iZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAw O3N0cm9rZS0KPiA+IHdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9p bjptaXRlcjtzdHJva2Utb3BhY2l0eToxIiAvPgo+ID4gKyAgICA8L21hcmtlcj4KPiA+ICsgICAg PG1hcmtlcgo+ID4gKyAgICAgICBtYXJrZXJXaWR0aD0iMTEuMjI3MzU4Igo+ID4gKyAgICAgICBt YXJrZXJIZWlnaHQ9IjEyLjM1NTI1OCIKPiA+ICsgICAgICAgcmVmWD0iMTAiCj4gPiArICAgICAg IHJlZlk9IjYuMTc3NjI5Igo+ID4gKyAgICAgICBvcmllbnQ9ImF1dG8iCj4gPiArICAgICAgIGlk PSJtYXJrZXI0ODI1LTYtMC0yIj4KPiA+ICsgICAgICA8cGF0aAo+ID4gKyAgICAgICAgIGlua3Nj YXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCj4gPiArICAgICAgICAgaWQ9InBhdGg0NzU3LTEt OTMtNiIKPiA+ICsgICAgICAgICBkPSJNIDAuNDIwMjQ3MzMsMC40MjgwNjQ0NCAxMC4yMzEzNTcs Ni4zNTAwODQ0Cj4gPiAwLjI0MzQ3NzMzLDExLjkxODU0NCIKPiA+ICsgICAgICAgICBzdHlsZT0i ZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS0KPiA+IHdp ZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Ut b3BhY2l0eToxIiAvPgo+ID4gKyAgICA8L21hcmtlcj4KPiA+ICsgICAgPGZpbHRlcgo+ID4gKyAg ICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCj4gPiArICAgICAgIHN0eWxlPSJjb2xvci1p bnRlcnBvbGF0aW9uLWZpbHRlcnM6c1JHQiIKPiA+ICsgICAgICAgaWQ9ImZpbHRlcjUzODIiCj4g PiArICAgICAgIHg9Ii0wLjA4OTY5NTM4NyIKPiA+ICsgICAgICAgd2lkdGg9IjEuMTc5MzkwOCIK PiA+ICsgICAgICAgeT0iLTAuMTAwNTIwNjkiCj4gPiArICAgICAgIGhlaWdodD0iMS4yMDEwNDEz Ij4KPiA+ICsgICAgICA8ZmVHYXVzc2lhbkJsdXIKPiA+ICsgICAgICAgICBpbmtzY2FwZTpjb2xs ZWN0PSJhbHdheXMiCj4gPiArICAgICAgICAgc3RkRGV2aWF0aW9uPSIwLjg2NzU4OTI1Igo+ID4g KyAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjUzODQiIC8+Cj4gPiArICAgIDwvZmlsdGVyPgo+ ID4gKyAgICA8bGluZWFyR3JhZGllbnQKPiA+ICsgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3 YXlzIgo+ID4gKyAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ2ODMwIgo+ID4gKyAg ICAgICBpZD0ibGluZWFyR3JhZGllbnQ2ODM2Igo+ID4gKyAgICAgICB4MT0iMzYyLjczOTIzIgo+ ID4gKyAgICAgICB5MT0iNzAwLjA0MDU5Igo+ID4gKyAgICAgICB4Mj0iMzQwLjQ3NTEiCj4gPiAr ICAgICAgIHkyPSI2NzguMjU0ODgiCj4gPiArICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFj ZU9uVXNlIgo+ID4gKyAgICAgICBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMy43NzEw MjYsLTEzNS43NjgzNSkiIC8+Cj4gPiArICAgIDxtYXJrZXIKPiA+ICsgICAgICAgbWFya2VyV2lk dGg9IjExLjIyNzM1OCIKPiA+ICsgICAgICAgbWFya2VySGVpZ2h0PSIxMi4zNTUyNTgiCj4gPiAr ICAgICAgIHJlZlg9IjEwIgo+ID4gKyAgICAgICByZWZZPSI2LjE3NzYyOSIKPiA+ICsgICAgICAg b3JpZW50PSJhdXRvIgo+ID4gKyAgICAgICBpZD0ibWFya2VyNDgyNS02LTItNi0yIj4KPiA+ICsg ICAgICA8cGF0aAo+ID4gKyAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAi Cj4gPiArICAgICAgICAgaWQ9InBhdGg0NzU3LTEtOS0xLTkiCj4gPiArICAgICAgICAgZD0iTSAw LjQyMDI0NzMzLDAuNDI4MDY0NDQgMTAuMjMxMzU3LDYuMzUwMDg0NAo+ID4gMC4yNDM0NzczMywx MS45MTg1NDQiCj4gPiArICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9k ZDtzdHJva2U6IzAwMDAwMDtzdHJva2UtCj4gPiB3aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0 dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIgLz4KPiA+ICsgICAgPC9t YXJrZXI+Cj4gPiArICA8L2RlZnM+Cj4gPiArICA8c29kaXBvZGk6bmFtZWR2aWV3Cj4gPiArICAg ICBpZD0iYmFzZSIKPiA+ICsgICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKPiA+ICsgICAgIGJvcmRl cmNvbG9yPSIjNjY2NjY2Igo+ID4gKyAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIgo+ID4gKyAgICAg aW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKPiA+ICsgICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9 IjIiCj4gPiArICAgICBpbmtzY2FwZTp6b29tPSIwLjk4OTk0OTQ5Igo+ID4gKyAgICAgaW5rc2Nh cGU6Y3g9IjIyMi4zMjg2OCIKPiA+ICsgICAgIGlua3NjYXBlOmN5PSIzNzAuNDQ0OTIiCj4gPiAr ICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHgiCj4gPiArICAgICBpbmtzY2FwZTpjdXJy ZW50LWxheWVyPSJsYXllcjEiCj4gPiArICAgICBzaG93Z3JpZD0iZmFsc2UiCj4gPiArICAgICBp bmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5MTYiCj4gPiArICAgICBpbmtzY2FwZTp3aW5kb3ctaGVp Z2h0PSIxMDMzIgo+ID4gKyAgICAgaW5rc2NhcGU6d2luZG93LXg9IjAiCj4gPiArICAgICBpbmtz Y2FwZTp3aW5kb3cteT0iMjIiCj4gPiArICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIw Igo+ID4gKyAgICAgZml0LW1hcmdpbi1yaWdodD0iMC4zIgo+ID4gKyAgICAgaW5rc2NhcGU6c25h cC1nbG9iYWw9ImZhbHNlIiAvPgo+ID4gKyAgPG1ldGFkYXRhCj4gPiArICAgICBpZD0ibWV0YWRh dGE3Ij4KPiA+ICsgICAgPHJkZjpSREY+Cj4gPiArICAgICAgPGNjOldvcmsKPiA+ICsgICAgICAg ICByZGY6YWJvdXQ9IiI+Cj4gPiArICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2Rj OmZvcm1hdD4KPiA+ICsgICAgICAgIDxkYzp0eXBlCj4gPiArICAgICAgICAgICByZGY6cmVzb3Vy Y2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgo+ID4gKyAgICAg ICAgPGRjOnRpdGxlIC8+Cj4gPiArICAgICAgPC9jYzpXb3JrPgo+ID4gKyAgICA8L3JkZjpSREY+ Cj4gPiArICA8L21ldGFkYXRhPgo+ID4gKyAgPGcKPiA+ICsgICAgIGlua3NjYXBlOmxhYmVsPSJM YXllciAxIgo+ID4gKyAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKPiA+ICsgICAgIGlk PSJsYXllcjEiCj4gPiArICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLC0zNjguNTAzNzQpIj4K PiA+ICsgICAgPHJlY3QKPiA+ICsgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtzdHJva2U6IzAw MDAwMDtzdHJva2UtCj4gPiB3aWR0aDowLjY0NjUxMTI7ZmlsdGVyOnVybCgjZmlsdGVyNDE2OS0z KSIKPiA+ICsgICAgICAgaWQ9InJlY3Q0MTM2LTMtNiIKPiA+ICsgICAgICAgd2lkdGg9IjEwMS4w Nzc4NCIKPiA+ICsgICAgICAgaGVpZ2h0PSIzMS45OTgxNDgiCj4gPiArICAgICAgIHg9IjI4My4w MTE0NCIKPiA+ICsgICAgICAgeT0iNTg4LjgwODk2IiAvPgo+ID4gKyAgICA8cmVjdAo+ID4gKyAg ICAgICBzdHlsZT0iZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50NTAzMik7ZmlsbC0KPiA+IG9wYWNp dHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MC42NDY1MTEyIgo+ID4gKyAgICAgICBp ZD0icmVjdDQxMzYtMiIKPiA+ICsgICAgICAgd2lkdGg9IjEwMS4wNzc4NCIKPiA+ICsgICAgICAg aGVpZ2h0PSIzMS45OTgxNDgiCj4gPiArICAgICAgIHg9IjI4MS42MzQ5OCIKPiA+ICsgICAgICAg eT0iNTg2Ljc1NzM5IiAvPgo+ID4gKyAgICA8dGV4dAo+ID4gKyAgICAgICB4bWw6c3BhY2U9InBy ZXNlcnZlIgo+ID4gKyAgICAgICBzdHlsZT0iZm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6 bm9ybWFsO2xpbmUtaGVpZ2h0OjAlO2ZvbnQtCj4gPiBmYW1pbHk6c2Fucy1zZXJpZjtsZXR0ZXIt c3BhY2luZzowcHg7d29yZC1zcGFjaW5nOjBweDtmaWxsOiMwMDAwMDA7ZmlsbC0KPiA+IG9wYWNp dHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ry b2tlLQo+ID4gbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKPiA+ICsgICAgICAgeD0i Mjk0LjIxNzQ3Igo+ID4gKyAgICAgICB5PSI2MTIuNTAwNzMiCj4gPiArICAgICAgIGlkPSJ0ZXh0 NDEzOC02Ij48dHNwYW4KPiA+ICsgICAgICAgICBzb2RpcG9kaTpyb2xlPSJsaW5lIgo+ID4gKyAg ICAgICAgIGlkPSJ0c3BhbjQxNDAtMSIKPiA+ICsgICAgICAgICB4PSIyOTQuMjE3NDciCj4gPiAr ICAgICAgICAgeT0iNjEyLjUwMDczIgo+ID4gKyAgICAgICAgIHN0eWxlPSJmb250LXNpemU6MTVw eDtsaW5lLWhlaWdodDoxLjI1Ij5XYXJwRHJpdmU8L3RzcGFuPjwvdGV4dD4KPiA+ICsgICAgPHJl Y3QKPiA+ICsgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtzdHJva2U6IzAwMDAwMDtzdHJva2Ut Cj4gPiB3aWR0aDowLjY0NjUxMTI7ZmlsdGVyOnVybCgjZmlsdGVyNDE2OS0zLTApIgo+ID4gKyAg ICAgICBpZD0icmVjdDQxMzYtMy02LTMiCj4gPiArICAgICAgIHdpZHRoPSIxMDEuMDc3ODQiCj4g PiArICAgICAgIGhlaWdodD0iMzEuOTk4MTQ4Igo+ID4gKyAgICAgICB4PSI1NDguNzM5NSIKPiA+ ICsgICAgICAgeT0iNTgzLjE1NDE3IiAvPgo+ID4gKyAgICA8cmVjdAo+ID4gKyAgICAgICBzdHls ZT0iZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50NTAzMi0xKTtmaWxsLQo+ID4gb3BhY2l0eToxO3N0 cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowLjY0NjUxMTIiCj4gPiArICAgICAgIGlkPSJyZWN0 NDEzNi0yLTYwIgo+ID4gKyAgICAgICB3aWR0aD0iMTAxLjA3Nzg0Igo+ID4gKyAgICAgICBoZWln aHQ9IjMxLjk5ODE0OCIKPiA+ICsgICAgICAgeD0iNTQ3LjM2MzA0Igo+ID4gKyAgICAgICB5PSI1 ODEuMTAyNiIgLz4KPiA+ICsgICAgPHRleHQKPiA+ICsgICAgICAgeG1sOnNwYWNlPSJwcmVzZXJ2 ZSIKPiA+ICsgICAgICAgc3R5bGU9ImZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1h bDtsaW5lLWhlaWdodDowJTtmb250LQo+ID4gZmFtaWx5OnNhbnMtc2VyaWY7bGV0dGVyLXNwYWNp bmc6MHB4O3dvcmQtc3BhY2luZzowcHg7ZmlsbDojMDAwMDAwO2ZpbGwtCj4gPiBvcGFjaXR5OjE7 c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS0K PiA+IGxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCj4gPiArICAgICAgIHg9IjU1Ny44 MzQ4NCIKPiA+ICsgICAgICAgeT0iNjAyLjMyNzQ1Igo+ID4gKyAgICAgICBpZD0idGV4dDQxMzgt Ni02Ij48dHNwYW4KPiA+ICsgICAgICAgICBzb2RpcG9kaTpyb2xlPSJsaW5lIgo+ID4gKyAgICAg ICAgIGlkPSJ0c3BhbjQxNDAtMS0yIgo+ID4gKyAgICAgICAgIHg9IjU1Ny44MzQ4NCIKPiA+ICsg ICAgICAgICB5PSI2MDIuMzI3NDUiCj4gPiArICAgICAgICAgc3R5bGU9ImZvbnQtc2l6ZToxNXB4 O2xpbmUtaGVpZ2h0OjEuMjUiPnVzZXJfZHJpdmVyPC90c3Bhbj48L3RleHQ+Cj4gPiArICAgIDxw YXRoCj4gPiArICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tl OiMwMDAwMDA7c3Ryb2tlLQo+ID4gd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tl LWxpbmVqb2luOm1pdGVyO3N0cm9rZS0KPiA+IG9wYWNpdHk6MTttYXJrZXItZW5kOnVybCgjbWFy a2VyNDYxMykiCj4gPiArICAgICAgIGQ9Im0gNTQ3LjM2MzA0LDYwMC43ODk1NCAtMTU2LjU4MjAz LDAuMDY5MSIKPiA+ICsgICAgICAgaWQ9InBhdGg0ODU1Igo+ID4gKyAgICAgICBpbmtzY2FwZTpj b25uZWN0b3ItY3VydmF0dXJlPSIwIgo+ID4gKyAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNj IiAvPgo+ID4gKyAgICA8cmVjdAo+ID4gKyAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO3N0cm9r ZTojMDAwMDAwO3N0cm9rZS0KPiA+IHdpZHRoOjAuNjQ2NTExMjtmaWx0ZXI6dXJsKCNmaWx0ZXI0 MTY5LTMtNS04KSIKPiA+ICsgICAgICAgaWQ9InJlY3Q0MTM2LTMtNi01LTciCj4gPiArICAgICAg IHdpZHRoPSIxMDEuMDc3ODQiCj4gPiArICAgICAgIGhlaWdodD0iMzEuOTk4MTQ4Igo+ID4gKyAg ICAgICB4PSIxMjguNzQ2NzgiCj4gPiArICAgICAgIHk9IjgwLjY0ODg0MiIKPiA+ICsgICAgICAg dHJhbnNmb3JtPSJtYXRyaXgoMS4yNDUyNTExLDAsMCwwLjk4NTEzMDE2LDExMy4xNTE4Miw2NDEu MDI1OTQpIgo+ID4gLz4KPiA+ICsgICAgPHJlY3QKPiA+ICsgICAgICAgc3R5bGU9ImZpbGw6dXJs KCNsaW5lYXJHcmFkaWVudDUwMzItMy05KTtmaWxsLQo+ID4gb3BhY2l0eToxO3N0cm9rZTojMDAw MDAwO3N0cm9rZS13aWR0aDowLjcxNjA2MzE0Igo+ID4gKyAgICAgICBpZD0icmVjdDQxMzYtMi02 LTMiCj4gPiArICAgICAgIHdpZHRoPSIxMjUuODY3MjkiCj4gPiArICAgICAgIGhlaWdodD0iMzEu NTIyMzQxIgo+ID4gKyAgICAgICB4PSIyNzEuNzU5ODMiCj4gPiArICAgICAgIHk9IjcxOC40NTQz NSIgLz4KPiA+ICsgICAgPHRleHQKPiA+ICsgICAgICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIKPiA+ ICsgICAgICAgc3R5bGU9ImZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtsaW5l LWhlaWdodDowJTtmb250LQo+ID4gZmFtaWx5OnNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6MHB4 O3dvcmQtc3BhY2luZzowcHg7ZmlsbDojMDAwMDAwO2ZpbGwtCj4gPiBvcGFjaXR5OjE7c3Ryb2tl Om5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS0KPiA+IGxp bmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCj4gPiArICAgICAgIHg9IjMwNi4yOTU5OSIK PiA+ICsgICAgICAgeT0iNzQ2LjUwMDczIgo+ID4gKyAgICAgICBpZD0idGV4dDQxMzgtNi0yLTYi Pjx0c3Bhbgo+ID4gKyAgICAgICAgIHNvZGlwb2RpOnJvbGU9ImxpbmUiCj4gPiArICAgICAgICAg aWQ9InRzcGFuNDE0MC0xLTktMSIKPiA+ICsgICAgICAgICB4PSIzMDYuMjk1OTkiCj4gPiArICAg ICAgICAgeT0iNzQ2LjUwMDczIgo+ID4gKyAgICAgICAgIHN0eWxlPSJmb250LXNpemU6MTVweDts aW5lLWhlaWdodDoxLjI1Ij5zcGltZGV2PC90c3Bhbj48L3RleHQ+Cj4gPiArICAgIDxwYXRoCj4g PiArICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAw MDA7c3Ryb2tlLQo+ID4gd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVq b2luOm1pdGVyO3N0cm9rZS0KPiA+IG9wYWNpdHk6MTttYXJrZXItZW5kOnVybCgjbWFya2VyNDgy NS02LTIpIgo+ID4gKyAgICAgICBkPSJtIDMyOS41NzMwOSw2MTkuNzI0NTMgNS4wMzczLDk3LjE0 NDQ3Igo+ID4gKyAgICAgICBpZD0icGF0aDQ2NjEtMyIKPiA+ICsgICAgICAgaW5rc2NhcGU6Y29u bmVjdG9yLWN1cnZhdHVyZT0iMCIKPiA+ICsgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIg Lz4KPiA+ICsgICAgPHBhdGgKPiA+ICsgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtmaWxsLXJ1bGU6 ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2UtCj4gPiB3aWR0aDoxcHg7c3Ryb2tlLWxpbmVj YXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLQo+ID4gb3BhY2l0eToxO21hcmtl ci1lbmQ6dXJsKCNtYXJrZXI0ODI1LTYtMi0xKSIKPiA+ICsgICAgICAgZD0ibSAzNDIuNTcyMTks ODMwLjYzMTA4IC01LjY3Njk5LC03OS4yODQxIgo+ID4gKyAgICAgICBpZD0icGF0aDQ2NjEtMy00 Igo+ID4gKyAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgo+ID4gKyAgICAg ICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPgo+ID4gKyAgICA8cmVjdAo+ID4gKyAgICAgICBz dHlsZT0iZmlsbDojMDAwMDAwO3N0cm9rZTojMDAwMDAwO3N0cm9rZS0KPiA+IHdpZHRoOjAuNjQ2 NTExMjtmaWx0ZXI6dXJsKCNmaWx0ZXI0MTY5LTMtNS04LTUpIgo+ID4gKyAgICAgICBpZD0icmVj dDQxMzYtMy02LTUtNy0zIgo+ID4gKyAgICAgICB3aWR0aD0iMTAxLjA3Nzg0Igo+ID4gKyAgICAg ICBoZWlnaHQ9IjMxLjk5ODE0OCIKPiA+ICsgICAgICAgeD0iMTI4Ljc0Njc4Igo+ID4gKyAgICAg ICB5PSI4MC42NDg4NDIiCj4gPiArICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDEuMzc0Mjc0Miww LDAsMC45Nzc4NjM5OCwxMDEuMDkxMjYsNzU0LjU4NTM0KSIKPiA+IC8+Cj4gPiArICAgIDxyZWN0 Cj4gPiArICAgICAgIHN0eWxlPSJmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ1MDMyLTMtOS03KTtm aWxsLQo+ID4gb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowLjc0OTQ2NjA2 Igo+ID4gKyAgICAgICBpZD0icmVjdDQxMzYtMi02LTMtNiIKPiA+ICsgICAgICAgd2lkdGg9IjEz OC45MDg2NiIKPiA+ICsgICAgICAgaGVpZ2h0PSIzMS4yODk4MzciCj4gPiArICAgICAgIHg9IjI3 Ni4xMzI5NyIKPiA+ICsgICAgICAgeT0iODMxLjQ0MjYzIiAvPgo+ID4gKyAgICA8dGV4dAo+ID4g KyAgICAgICB4bWw6c3BhY2U9InByZXNlcnZlIgo+ID4gKyAgICAgICBzdHlsZT0iZm9udC1zdHls ZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2xpbmUtaGVpZ2h0OjAlO2ZvbnQtCj4gPiBmYW1p bHk6c2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzowcHg7d29yZC1zcGFjaW5nOjBweDtmaWxsOiMw MDAwMDA7ZmlsbC0KPiA+IG9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0 cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLQo+ID4gbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNp dHk6MSIKPiA+ICsgICAgICAgeD0iMjk1LjY3ODE5Igo+ID4gKyAgICAgICB5PSI4NTIuOTgyMjQi Cj4gPiArICAgICAgIGlkPSJ0ZXh0NDEzOC02LTItNi0xIj48dHNwYW4KPiA+ICsgICAgICAgICBz b2RpcG9kaTpyb2xlPSJsaW5lIgo+ID4gKyAgICAgICAgIGlkPSJ0c3BhbjQxNDAtMS05LTEtMCIK PiA+ICsgICAgICAgICB4PSIyOTUuNjc4MTkiCj4gPiArICAgICAgICAgeT0iODUyLjk4MjI0Igo+ ID4gKyAgICAgICAgIHN0eWxlPSJmb250LXNpemU6MTVweDtsaW5lLWhlaWdodDoxLjI1Ij5EZXZp Y2UgRHJpdmVyPC90c3Bhbj48L3RleHQ+Cj4gPiArICAgIDx0ZXh0Cj4gPiArICAgICAgIHhtbDpz cGFjZT0icHJlc2VydmUiCj4gPiArICAgICAgIHN0eWxlPSJmb250LXN0eWxlOm5vcm1hbDtmb250 LXdlaWdodDpub3JtYWw7bGluZS1oZWlnaHQ6MCU7Zm9udC0KPiA+IGZhbWlseTpzYW5zLXNlcmlm O2xldHRlci1zcGFjaW5nOjBweDt3b3JkLXNwYWNpbmc6MHB4O2ZpbGw6IzAwMDAwMDtmaWxsLQo+ ID4gb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6 YnV0dDtzdHJva2UtCj4gPiBsaW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgo+ID4gKyAg ICAgICB4PSIzNDkuMzExOTgiCj4gPiArICAgICAgIHk9IjgyOS40NjExOCIKPiA+ICsgICAgICAg aWQ9InRleHQ0MTM4LTYtMi02LTEtNiI+PHRzcGFuCj4gPiArICAgICAgICAgc29kaXBvZGk6cm9s ZT0ibGluZSIKPiA+ICsgICAgICAgICBpZD0idHNwYW40MTQwLTEtOS0xLTAtMyIKPiA+ICsgICAg ICAgICB4PSIzNDkuMzExOTgiCj4gPiArICAgICAgICAgeT0iODI5LjQ2MTE4Igo+ID4gKyAgICAg ICAgIHN0eWxlPSJmb250LXNpemU6MTVweDtsaW5lLWhlaWdodDoxLjI1Ij4qPC90c3Bhbj48L3Rl eHQ+Cj4gPiArICAgIDx0ZXh0Cj4gPiArICAgICAgIHhtbDpzcGFjZT0icHJlc2VydmUiCj4gPiAr ICAgICAgIHN0eWxlPSJmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7bGluZS1o ZWlnaHQ6MCU7Zm9udC0KPiA+IGZhbWlseTpzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOjBweDt3 b3JkLXNwYWNpbmc6MHB4O2ZpbGw6IzAwMDAwMDtmaWxsLQo+ID4gb3BhY2l0eToxO3N0cm9rZTpu b25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtCj4gPiBsaW5l am9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgo+ID4gKyAgICAgICB4PSIzNDkuOTgyODIiCj4g PiArICAgICAgIHk9Ijc2OC42OTgiCj4gPiArICAgICAgIGlkPSJ0ZXh0NDEzOC02LTItNi0xLTYt MiI+PHRzcGFuCj4gPiArICAgICAgICAgc29kaXBvZGk6cm9sZT0ibGluZSIKPiA+ICsgICAgICAg ICBpZD0idHNwYW40MTQwLTEtOS0xLTAtMy0wIgo+ID4gKyAgICAgICAgIHg9IjM0OS45ODI4MiIK PiA+ICsgICAgICAgICB5PSI3NjguNjk4Igo+ID4gKyAgICAgICAgIHN0eWxlPSJmb250LXNpemU6 MTVweDtsaW5lLWhlaWdodDoxLjI1Ij4xPC90c3Bhbj48L3RleHQ+Cj4gPiArICAgIDxwYXRoCj4g PiArICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAw MDA7c3Ryb2tlLQo+ID4gd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVq b2luOm1pdGVyO3N0cm9rZS0KPiA+IG9wYWNpdHk6MTttYXJrZXItZW5kOnVybCgjbWFya2VyNDgy NS02LTItNikiCj4gPiArICAgICAgIGQ9Im0gNTY4LjEyMzgsNjE0LjA1NDAyIDAuNTEzNjksMzMz LjgwMjE5Igo+ID4gKyAgICAgICBpZD0icGF0aDQ2NjEtMy01Igo+ID4gKyAgICAgICBpbmtzY2Fw ZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgo+ID4gKyAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9 ImNjIiAvPgo+ID4gKyAgICA8dGV4dAo+ID4gKyAgICAgICB4bWw6c3BhY2U9InByZXNlcnZlIgo+ ID4gKyAgICAgICBzdHlsZT0iZm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2xp bmUtaGVpZ2h0OjAlO2ZvbnQtCj4gPiBmYW1pbHk6c2Fucy1zZXJpZjt0ZXh0LWFsaWduOmNlbnRl cjtsZXR0ZXItc3BhY2luZzowcHg7d29yZC1zcGFjaW5nOjBweDt0ZXh0LQo+ID4gYW5jaG9yOm1p ZGRsZTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLQo+ID4g d2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9r ZS1vcGFjaXR5OjEiCj4gPiArICAgICAgIHg9IjM3MS44MDEzIgo+ID4gKyAgICAgICB5PSI2NjQu NjI0NzYiCj4gPiArICAgICAgIGlkPSJ0ZXh0NDEzOC02LTItNi0xLTYtMi01Ij48dHNwYW4KPiA+ ICsgICAgICAgICBzb2RpcG9kaTpyb2xlPSJsaW5lIgo+ID4gKyAgICAgICAgIHg9IjM3MS44MDEz Igo+ID4gKyAgICAgICAgIHk9IjY2NC42MjQ3NiIKPiA+ICsgICAgICAgICBpZD0idHNwYW40Mjc0 Igo+ID4gKyAgICAgICAgIHN0eWxlPSJmb250LXNpemU6MTVweDtsaW5lLQo+ID4gaGVpZ2h0OjEu MjUiPiZsdDsmbHQ7dmZpbyZndDsmZ3Q7PC90c3Bhbj48dHNwYW4KPiA+ICsgICAgICAgICBzb2Rp cG9kaTpyb2xlPSJsaW5lIgo+ID4gKyAgICAgICAgIHg9IjM3MS44MDEzIgo+ID4gKyAgICAgICAg IHk9IjY4My4zNzQ3NiIKPiA+ICsgICAgICAgICBpZD0idHNwYW40MzA1Igo+ID4gKyAgICAgICAg IHN0eWxlPSJmb250LXNpemU6MTVweDtsaW5lLWhlaWdodDoxLjI1Ij5yZXNvdXJjZQo+ID4gbWFu YWdlbWVudDwvdHNwYW4+PC90ZXh0Pgo+ID4gKyAgICA8dGV4dAo+ID4gKyAgICAgICB4bWw6c3Bh Y2U9InByZXNlcnZlIgo+ID4gKyAgICAgICBzdHlsZT0iZm9udC1zdHlsZTpub3JtYWw7Zm9udC13 ZWlnaHQ6bm9ybWFsO2xpbmUtaGVpZ2h0OjAlO2ZvbnQtCj4gPiBmYW1pbHk6c2Fucy1zZXJpZjts ZXR0ZXItc3BhY2luZzowcHg7d29yZC1zcGFjaW5nOjBweDtmaWxsOiMwMDAwMDA7ZmlsbC0KPiA+ IG9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1 dHQ7c3Ryb2tlLQo+ID4gbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKPiA+ICsgICAg ICAgeD0iMzg5LjkyOTY5Igo+ID4gKyAgICAgICB5PSI1ODcuNDQ4MzYiCj4gPiArICAgICAgIGlk PSJ0ZXh0NDEzOC02LTItNi0xLTYtMi01NiI+PHRzcGFuCj4gPiArICAgICAgICAgc29kaXBvZGk6 cm9sZT0ibGluZSIKPiA+ICsgICAgICAgICBpZD0idHNwYW40MTQwLTEtOS0xLTAtMy0wLTkiCj4g PiArICAgICAgICAgeD0iMzg5LjkyOTY5Igo+ID4gKyAgICAgICAgIHk9IjU4Ny40NDgzNiIKPiA+ ICsgICAgICAgICBzdHlsZT0iZm9udC1zaXplOjE1cHg7bGluZS1oZWlnaHQ6MS4yNSI+MTwvdHNw YW4+PC90ZXh0Pgo+ID4gKyAgICA8dGV4dAo+ID4gKyAgICAgICB4bWw6c3BhY2U9InByZXNlcnZl Igo+ID4gKyAgICAgICBzdHlsZT0iZm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFs O2xpbmUtaGVpZ2h0OjAlO2ZvbnQtCj4gPiBmYW1pbHk6c2Fucy1zZXJpZjtsZXR0ZXItc3BhY2lu ZzowcHg7d29yZC1zcGFjaW5nOjBweDtmaWxsOiMwMDAwMDA7ZmlsbC0KPiA+IG9wYWNpdHk6MTtz dHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLQo+ ID4gbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKPiA+ICsgICAgICAgeD0iNTI4LjY0 ODEzIgo+ID4gKyAgICAgICB5PSI2MDAuMDg0MjkiCj4gPiArICAgICAgIGlkPSJ0ZXh0NDEzOC02 LTItNi0xLTYtMyI+PHRzcGFuCj4gPiArICAgICAgICAgc29kaXBvZGk6cm9sZT0ibGluZSIKPiA+ ICsgICAgICAgICBpZD0idHNwYW40MTQwLTEtOS0xLTAtMy03Igo+ID4gKyAgICAgICAgIHg9IjUy OC42NDgxMyIKPiA+ICsgICAgICAgICB5PSI2MDAuMDg0MjkiCj4gPiArICAgICAgICAgc3R5bGU9 ImZvbnQtc2l6ZToxNXB4O2xpbmUtaGVpZ2h0OjEuMjUiPio8L3RzcGFuPjwvdGV4dD4KPiA+ICsg ICAgPHJlY3QKPiA+ICsgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtzdHJva2U6IzAwMDAwMDtz dHJva2UtCj4gPiB3aWR0aDowLjY0NjUxMTI7ZmlsdGVyOnVybCgjZmlsdGVyNDE2OS0zLTUtOC01 NCkiCj4gPiArICAgICAgIGlkPSJyZWN0NDEzNi0zLTYtNS03LTQiCj4gPiArICAgICAgIHdpZHRo PSIxMDEuMDc3ODQiCj4gPiArICAgICAgIGhlaWdodD0iMzEuOTk4MTQ4Igo+ID4gKyAgICAgICB4 PSIxMjguNzQ2NzgiCj4gPiArICAgICAgIHk9IjgwLjY0ODg0MiIKPiA+ICsgICAgICAgdHJhbnNm b3JtPSJtYXRyaXgoMS4zNzQ1ODc0LDAsMCwxLjg5MjkwNjYsLTEzMi43NzU0LDU1Ni4wNDUwNSki IC8+Cj4gPiArICAgIDxyZWN0Cj4gPiArICAgICAgIHN0eWxlPSJmaWxsOnVybCgjbGluZWFyR3Jh ZGllbnQ1MDMyLTMtOS00KTtmaWxsLQo+ID4gb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9r ZS13aWR0aDoxLjA3MjgwMTIzIgo+ID4gKyAgICAgICBpZD0icmVjdDQxMzYtMi02LTMtNCIKPiA+ ICsgICAgICAgd2lkdGg9IjEzOC45MTAzOSIKPiA+ICsgICAgICAgaGVpZ2h0PSI2NC4xMTEiCj4g PiArICAgICAgIHg9IjQyLjMyMTMxMiIKPiA+ICsgICAgICAgeT0iNzA0LjgzNzEiIC8+Cj4gPiAr ICAgIDx0ZXh0Cj4gPiArICAgICAgIHhtbDpzcGFjZT0icHJlc2VydmUiCj4gPiArICAgICAgIHN0 eWxlPSJmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7bGluZS1oZWlnaHQ6MCU7 Zm9udC0KPiA+IGZhbWlseTpzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOjBweDt3b3JkLXNwYWNp bmc6MHB4O2ZpbGw6IzAwMDAwMDtmaWxsLQo+ID4gb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9r ZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtCj4gPiBsaW5lam9pbjptaXRl cjtzdHJva2Utb3BhY2l0eToxIgo+ID4gKyAgICAgICB4PSIxMTAuMzA3NDUiCj4gPiArICAgICAg IHk9IjcyMi45NDAyNSIKPiA+ICsgICAgICAgaWQ9InRleHQ0MTM4LTYtMi02LTMiPjx0c3Bhbgo+ ID4gKyAgICAgICAgIHNvZGlwb2RpOnJvbGU9ImxpbmUiCj4gPiArICAgICAgICAgeD0iMTExLjk5 MjAyIgo+ID4gKyAgICAgICAgIHk9IjcyMi45NDAyNSIKPiA+ICsgICAgICAgICBpZD0idHNwYW40 MzY2Igo+ID4gKyAgICAgICAgIHN0eWxlPSJmb250LXNpemU6MTVweDtsaW5lLWhlaWdodDoxLjI1 O3RleHQtYWxpZ246Y2VudGVyO3RleHQtCj4gPiBhbmNob3I6bWlkZGxlIj5vdGhlciBzdGFuZGFy ZCA8L3RzcGFuPjx0c3Bhbgo+ID4gKyAgICAgICAgIHNvZGlwb2RpOnJvbGU9ImxpbmUiCj4gPiAr ICAgICAgICAgeD0iMTEwLjMwNzQ1Igo+ID4gKyAgICAgICAgIHk9Ijc0MS42OTAyNSIKPiA+ICsg ICAgICAgICBpZD0idHNwYW40MzY4Igo+ID4gKyAgICAgICAgIHN0eWxlPSJmb250LXNpemU6MTVw eDtsaW5lLWhlaWdodDoxLjI1O3RleHQtYWxpZ246Y2VudGVyO3RleHQtCj4gPiBhbmNob3I6bWlk ZGxlIj5mcmFtZXdvcms8L3RzcGFuPjx0c3Bhbgo+ID4gKyAgICAgICAgIHNvZGlwb2RpOnJvbGU9 ImxpbmUiCj4gPiArICAgICAgICAgeD0iMTEwLjMwNzQ1Igo+ID4gKyAgICAgICAgIHk9Ijc2MC40 NDAyNSIKPiA+ICsgICAgICAgICBzdHlsZT0iZm9udC1zaXplOjE1cHg7bGluZS1oZWlnaHQ6MS4y NTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LQo+ID4gYW5jaG9yOm1pZGRsZSIKPiA+ICsgICAgICAg ICBpZD0idHNwYW42ODQwIj4oY3J5cHRvL25pYy9vdGhlcnMpPC90c3Bhbj48L3RleHQ+Cj4gPiAr ICAgIDxwYXRoCj4gPiArICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7 c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLQo+ID4gd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7 c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS0KPiA+IG9wYWNpdHk6MTttYXJrZXItZW5kOnVy bCgjbWFya2VyNDgyNS02LTItMS04KSIKPiA+ICsgICAgICAgZD0iTSAyNzYuMjk2NjEsODQ5LjA0 MTA5IDEzNC4wNDQ0OSw3NzEuOTA4NTMiCj4gPiArICAgICAgIGlkPSJwYXRoNDY2MS0zLTQtOCIK PiA+ICsgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKPiA+ICsgICAgICAg c29kaXBvZGk6bm9kZXR5cGVzPSJjYyIgLz4KPiA+ICsgICAgPHRleHQKPiA+ICsgICAgICAgeG1s OnNwYWNlPSJwcmVzZXJ2ZSIKPiA+ICsgICAgICAgc3R5bGU9ImZvbnQtc3R5bGU6bm9ybWFsO2Zv bnQtd2VpZ2h0Om5vcm1hbDtsaW5lLWhlaWdodDowJTtmb250LQo+ID4gZmFtaWx5OnNhbnMtc2Vy aWY7bGV0dGVyLXNwYWNpbmc6MHB4O3dvcmQtc3BhY2luZzowcHg7ZmlsbDojMDAwMDAwO2ZpbGwt Cj4gPiBvcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNh cDpidXR0O3N0cm9rZS0KPiA+IGxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCj4gPiAr ICAgICAgIHg9IjMxMy43MDgxMyIKPiA+ICsgICAgICAgeT0iNzMwLjA2MzY2Igo+ID4gKyAgICAg ICBpZD0idGV4dDQxMzgtNi0yLTYtMzYiPjx0c3Bhbgo+ID4gKyAgICAgICAgIHNvZGlwb2RpOnJv bGU9ImxpbmUiCj4gPiArICAgICAgICAgaWQ9InRzcGFuNDE0MC0xLTktMS03Igo+ID4gKyAgICAg ICAgIHg9IjMxMy43MDgxMyIKPiA+ICsgICAgICAgICB5PSI3MzAuMDYzNjYiCj4gPiArICAgICAg ICAgc3R5bGU9ImZvbnQtc2l6ZToxMHB4O2xpbmUtCj4gPiBoZWlnaHQ6MS4yNSI+Jmx0OyZsdDts a20mZ3Q7Jmd0OzwvdHNwYW4+PC90ZXh0Pgo+ID4gKyAgICA8dGV4dAo+ID4gKyAgICAgICB4bWw6 c3BhY2U9InByZXNlcnZlIgo+ID4gKyAgICAgICBzdHlsZT0iZm9udC1zdHlsZTpub3JtYWw7Zm9u dC13ZWlnaHQ6bm9ybWFsO2xpbmUtaGVpZ2h0OjAlO2ZvbnQtCj4gPiBmYW1pbHk6c2Fucy1zZXJp Zjt0ZXh0LWFsaWduOnN0YXJ0O2xldHRlci1zcGFjaW5nOjBweDt3b3JkLXNwYWNpbmc6MHB4O3Rl eHQtCj4gPiBhbmNob3I6c3RhcnQ7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpu b25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLQo+ID4gbGluZWNhcDpidXR0O3N0cm9rZS1saW5l am9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgo+ID4gKyAgICAgICB4PSIzNDMuODE2MjUiCj4g PiArICAgICAgIHk9Ijc4Ni40NDE0MSIKPiA+ICsgICAgICAgaWQ9InRleHQ0MTM4LTYtMi02LTEt Ni0yLTUtNy01Ij48dHNwYW4KPiA+ICsgICAgICAgICBzb2RpcG9kaTpyb2xlPSJsaW5lIgo+ID4g KyAgICAgICAgIHg9IjM0My44MTYyNSIKPiA+ICsgICAgICAgICB5PSI3ODYuNDQxNDEiCj4gPiAr ICAgICAgICAgc3R5bGU9ImZvbnQtc2l6ZToxNXB4O2xpbmUtaGVpZ2h0OjEuMjU7dGV4dC1hbGln bjpzdGFydDt0ZXh0LQo+ID4gYW5jaG9yOnN0YXJ0Igo+ID4gKyAgICAgICAgIGlkPSJ0c3BhbjIy NzgiPnJlZ2lzdDx0c3Bhbgo+ID4gKyAgIHN0eWxlPSJ0ZXh0LWFsaWduOnN0YXJ0O3RleHQtYW5j aG9yOnN0YXJ0Igo+ID4gKyAgIGlkPSJ0c3BhbjIyODAiPmVyIGFzIG1kZXYgd2l0aCAmcXVvdDtz aGFyZSA8L3RzcGFuPjwvdHNwYW4+PHRzcGFuCj4gPiArICAgICAgICAgc29kaXBvZGk6cm9sZT0i bGluZSIKPiA+ICsgICAgICAgICB4PSIzNDMuODE2MjUiCj4gPiArICAgICAgICAgeT0iODA1LjE5 MTQxIgo+ID4gKyAgICAgICAgIHN0eWxlPSJmb250LXNpemU6MTVweDtsaW5lLWhlaWdodDoxLjI1 O3RleHQtYWxpZ246c3RhcnQ7dGV4dC0KPiA+IGFuY2hvcjpzdGFydCIKPiA+ICsgICAgICAgICBp ZD0idHNwYW4yMzU3Ij48dHNwYW4KPiA+ICsgICBzdHlsZT0idGV4dC1hbGlnbjpzdGFydDt0ZXh0 LWFuY2hvcjpzdGFydCIKPiA+ICsgICBpZD0idHNwYW4yMzU5Ij5wYXJlbnQgaW9tbXUmcXVvdDsg YXR0cmlidTwvdHNwYW4+dGU8L3RzcGFuPjwvdGV4dD4KPiA+ICsgICAgPHRleHQKPiA+ICsgICAg ICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIKPiA+ICsgICAgICAgc3R5bGU9ImZvbnQtc3R5bGU6bm9y bWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtsaW5lLWhlaWdodDowJTtmb250LQo+ID4gZmFtaWx5OnNh bnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6MHB4O3dvcmQtc3BhY2luZzowcHg7ZmlsbDojMDAwMDAw O2ZpbGwtCj4gPiBvcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2Ut bGluZWNhcDpidXR0O3N0cm9rZS0KPiA+IGxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEi Cj4gPiArICAgICAgIHg9IjI5LjE0NTgxOSIKPiA+ICsgICAgICAgeT0iODMzLjQ0MjQ0Igo+ID4g KyAgICAgICBpZD0idGV4dDQxMzgtNi0yLTYtMS02LTItNS03LTUtMiI+PHRzcGFuCj4gPiArICAg ICAgICAgc29kaXBvZGk6cm9sZT0ibGluZSIKPiA+ICsgICAgICAgICB4PSIyOS4xNDU4MTkiCj4g PiArICAgICAgICAgeT0iODMzLjQ0MjQ0Igo+ID4gKyAgICAgICAgIGlkPSJ0c3BhbjQzMDEiCj4g PiArICAgICAgICAgc3R5bGU9ImZvbnQtc2l6ZToxNXB4O2xpbmUtaGVpZ2h0OjEuMjUiPnJlZ2lz dGVyIHRvIG90aGVyCj4gPiBzdWJzeXN0ZW08L3RzcGFuPjwvdGV4dD4KPiA+ICsgICAgPHRleHQK PiA+ICsgICAgICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIKPiA+ICsgICAgICAgc3R5bGU9ImZvbnQt c3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtsaW5lLWhlaWdodDowJTtmb250LQo+ID4g ZmFtaWx5OnNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6MHB4O3dvcmQtc3BhY2luZzowcHg7Zmls bDojMDAwMDAwO2ZpbGwtCj4gPiBvcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFw eDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS0KPiA+IGxpbmVqb2luOm1pdGVyO3N0cm9rZS1v cGFjaXR5OjEiCj4gPiArICAgICAgIHg9IjMwMS4yMDgxMyIKPiA+ICsgICAgICAgeT0iNTk3LjI5 NDM3Igo+ID4gKyAgICAgICBpZD0idGV4dDQxMzgtNi0yLTYtMzYtMSI+PHRzcGFuCj4gPiArICAg ICAgICAgc29kaXBvZGk6cm9sZT0ibGluZSIKPiA+ICsgICAgICAgICBpZD0idHNwYW40MTQwLTEt OS0xLTctMiIKPiA+ICsgICAgICAgICB4PSIzMDEuMjA4MTMiCj4gPiArICAgICAgICAgeT0iNTk3 LjI5NDM3Igo+ID4gKyAgICAgICAgIHN0eWxlPSJmb250LXNpemU6MTBweDtsaW5lLQo+ID4gaGVp Z2h0OjEuMjUiPiZsdDsmbHQ7dXNlcl9saWImZ3Q7Jmd0OzwvdHNwYW4+PC90ZXh0Pgo+ID4gKyAg ICA8dGV4dAo+ID4gKyAgICAgICB4bWw6c3BhY2U9InByZXNlcnZlIgo+ID4gKyAgICAgICBzdHls ZT0iZm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2xpbmUtaGVpZ2h0OjAlO2Zv bnQtCj4gPiBmYW1pbHk6c2Fucy1zZXJpZjt0ZXh0LWFsaWduOmNlbnRlcjtsZXR0ZXItc3BhY2lu ZzowcHg7d29yZC1zcGFjaW5nOjBweDt0ZXh0LQo+ID4gYW5jaG9yOm1pZGRsZTtmaWxsOiMwMDAw MDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLQo+ID4gd2lkdGg6MXB4O3N0cm9r ZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCj4g PiArICAgICAgIHg9IjY0OS4wOTYxMyIKPiA+ICsgICAgICAgeT0iNzc0LjQ3OTgiCj4gPiArICAg ICAgIGlkPSJ0ZXh0NDEzOC02LTItNi0xLTYtMi01LTMiPjx0c3Bhbgo+ID4gKyAgICAgICAgIHNv ZGlwb2RpOnJvbGU9ImxpbmUiCj4gPiArICAgICAgICAgaWQ9InRzcGFuNDE0MC0xLTktMS0wLTMt MC00LTYiCj4gPiArICAgICAgICAgeD0iNjQ5LjA5NjEzIgo+ID4gKyAgICAgICAgIHk9Ijc3NC40 Nzk4Igo+ID4gKyAgICAgICAgIHN0eWxlPSJmb250LXNpemU6MTVweDtsaW5lLQo+ID4gaGVpZ2h0 OjEuMjUiPiZsdDsmbHQ7dmZpbyZndDsmZ3Q7PC90c3Bhbj48dHNwYW4KPiA+ICsgICAgICAgICBz b2RpcG9kaTpyb2xlPSJsaW5lIgo+ID4gKyAgICAgICAgIHg9IjY0OS4wOTYxMyIKPiA+ICsgICAg ICAgICB5PSI3OTMuMjI5OCIKPiA+ICsgICAgICAgICBpZD0idHNwYW40Mjc0LTciCj4gPiArICAg ICAgICAgc3R5bGU9ImZvbnQtc2l6ZToxNXB4O2xpbmUtaGVpZ2h0OjEuMjUiPkhhcmR3YXJlCj4g PiBBY2Nlc3Npbmc8L3RzcGFuPjwvdGV4dD4KPiA+ICsgICAgPHRleHQKPiA+ICsgICAgICAgeG1s OnNwYWNlPSJwcmVzZXJ2ZSIKPiA+ICsgICAgICAgc3R5bGU9ImZvbnQtc3R5bGU6bm9ybWFsO2Zv bnQtd2VpZ2h0Om5vcm1hbDtsaW5lLWhlaWdodDowJTtmb250LQo+ID4gZmFtaWx5OnNhbnMtc2Vy aWY7dGV4dC1hbGlnbjpjZW50ZXI7bGV0dGVyLXNwYWNpbmc6MHB4O3dvcmQtc3BhY2luZzowcHg7 dGV4dC0KPiA+IGFuY2hvcjptaWRkbGU7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO3N0cm9r ZTpub25lO3N0cm9rZS0KPiA+IHdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1s aW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgo+ID4gKyAgICAgICB4PSIzNzEuMDEyOTEi Cj4gPiArICAgICAgIHk9IjUyOS4yMzY4MiIKPiA+ICsgICAgICAgaWQ9InRleHQ0MTM4LTYtMi02 LTEtNi0yLTUtMzYiPjx0c3Bhbgo+ID4gKyAgICAgICAgIHNvZGlwb2RpOnJvbGU9ImxpbmUiCj4g PiArICAgICAgICAgeD0iMzcxLjAxMjkxIgo+ID4gKyAgICAgICAgIHk9IjUyOS4yMzY4MiIKPiA+ ICsgICAgICAgICBpZD0idHNwYW40MzA1LTMiCj4gPiArICAgICAgICAgc3R5bGU9ImZvbnQtc2l6 ZToxNXB4O2xpbmUtaGVpZ2h0OjEuMjUiPndkIHVzZXIgYXBpPC90c3Bhbj48L3RleHQ+Cj4gPiAr ICAgIDxwYXRoCj4gPiArICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7 c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLQo+ID4gd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7 c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCj4gPiArICAgICAgIGQ9Im0g MzI4LjE5MzI1LDU4NS44Nzk0MyAwLC0yMy41NzE0MiIKPiA+ICsgICAgICAgaWQ9InBhdGg0MzQ4 Igo+ID4gKyAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgo+ID4gKyAg ICA8ZWxsaXBzZQo+ID4gKyAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6I2ZmZmZmZjtmaWxs LW9wYWNpdHk6MTtmaWxsLQo+ID4gcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13 aWR0aDoxO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLQo+ID4gZGFzaGFycmF5Om5vbmU7c3Ry b2tlLWRhc2hvZmZzZXQ6MCIKPiA+ICsgICAgICAgaWQ9InBhdGg0MzUwIgo+ID4gKyAgICAgICBj eD0iMzI4LjAxNDY4Igo+ID4gKyAgICAgICBjeT0iNTUxLjk1MDgxIgo+ID4gKyAgICAgICByeD0i MTEuNjA3MTQyIgo+ID4gKyAgICAgICByeT0iMTAuMzU3MTQyIiAvPgo+ID4gKyAgICA8cGF0aAo+ ID4gKyAgICAgICBzdHlsZT0ib3BhY2l0eTowLjQ0NDtmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ2 ODM2KTtmaWxsLW9wYWNpdHk6MTtmaWxsLQo+ID4gcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0 cm9rZS13aWR0aDoxO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLQo+ID4gZGFzaGFycmF5Om5v bmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtmaWx0ZXI6dXJsKCNmaWx0ZXI1MzgyKSIKPiA+ICsgICAg ICAgaWQ9InBhdGg0MzUwLTIiCj4gPiArICAgICAgIHNvZGlwb2RpOnR5cGU9ImFyYyIKPiA+ICsg ICAgICAgc29kaXBvZGk6Y3g9IjMyOS40NDMyNyIKPiA+ICsgICAgICAgc29kaXBvZGk6Y3k9IjU1 My4zNzkzMyIKPiA+ICsgICAgICAgc29kaXBvZGk6cng9IjExLjYwNzE0MiIKPiA+ICsgICAgICAg c29kaXBvZGk6cnk9IjEwLjM1NzE0MiIKPiA+ICsgICAgICAgc29kaXBvZGk6c3RhcnQ9IjAiCj4g PiArICAgICAgIHNvZGlwb2RpOmVuZD0iNi4yNTA5MDk4Igo+ID4gKyAgICAgICBkPSJtIDM0MS4w NTA0MSw1NTMuMzc5MzMgYSAxMS42MDcxNDIsMTAuMzU3MTQyIDAgMCAxIC0KPiA+IDExLjUxMzQ5 LDEwLjM1NjgxIDExLjYwNzE0MiwxMC4zNTcxNDIgMCAwIDEgLTExLjY5OTI4LC0xMC4xODk2Nwo+ ID4gMTEuNjA3MTQyLDEwLjM1NzE0MiAwIDAgMSAxMS4zMjQ2OSwtMTAuNTIxMjQgMTEuNjA3MTQy LDEwLjM1NzE0MiAwIDAgMQo+ID4gMTEuODgyMDQsMTAuMDE5ODgiCj4gPiArICAgICAgIHNvZGlw b2RpOm9wZW49InRydWUiIC8+Cj4gPiArICAgIDx0ZXh0Cj4gPiArICAgICAgIHhtbDpzcGFjZT0i cHJlc2VydmUiCj4gPiArICAgICAgIHN0eWxlPSJmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdo dDpub3JtYWw7bGluZS1oZWlnaHQ6MCU7Zm9udC0KPiA+IGZhbWlseTpzYW5zLXNlcmlmO3RleHQt YWxpZ246Y2VudGVyO2xldHRlci1zcGFjaW5nOjBweDt3b3JkLXNwYWNpbmc6MHB4O3RleHQtCj4g PiBhbmNob3I6bWlkZGxlO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtz dHJva2UtCj4gPiB3aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46 bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKPiA+ICsgICAgICAgeD0iNTQzLjkxNDU1Igo+ID4gKyAg ICAgICB5PSI5NzguMjIzNjMiCj4gPiArICAgICAgIGlkPSJ0ZXh0NDEzOC02LTItNi0xLTYtMi01 LTM2LTMiPjx0c3Bhbgo+ID4gKyAgICAgICAgIHNvZGlwb2RpOnJvbGU9ImxpbmUiCj4gPiArICAg ICAgICAgeD0iNTQzLjkxNDU1Igo+ID4gKyAgICAgICAgIHk9Ijk3OC4yMjM2MyIKPiA+ICsgICAg ICAgICBpZD0idHNwYW40MzA1LTMtNjciCj4gPiArICAgICAgICAgc3R5bGU9ImZvbnQtc2l6ZTox NXB4O2xpbmUtCj4gPiBoZWlnaHQ6MS4yNSI+RGV2aWNlKEhhcmR3YXJlKTwvdHNwYW4+PC90ZXh0 Pgo+ID4gKyAgICA8cGF0aAo+ID4gKyAgICAgICBzdHlsZT0iZmlsbDpub25lO2ZpbGwtcnVsZTpl dmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS0KPiA+IHdpZHRoOjFweDtzdHJva2UtbGluZWNh cDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtCj4gPiBvcGFjaXR5OjE7bWFya2Vy LWVuZDp1cmwoI21hcmtlcjQ4MjUtNi0yLTYtMikiCj4gPiArICAgICAgIGQ9Im0gMzQ3LjUxMTY0 LDg2NS40NTI3IDE1My4xOTc1Miw5MS41MjQzOSIKPiA+ICsgICAgICAgaWQ9InBhdGg0NjYxLTMt NS0xIgo+ID4gKyAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgo+ID4gKyAg ICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPgo+ID4gKyAgICA8dGV4dAo+ID4gKyAgICAg ICB4bWw6c3BhY2U9InByZXNlcnZlIgo+ID4gKyAgICAgICBzdHlsZT0iZm9udC1zdHlsZTpub3Jt YWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc2l6ZToxMnB4O2xpbmUtCj4gPiBoZWlnaHQ6MCU7 Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzowcHg7d29yZC0KPiA+IHNwYWNp bmc6MHB4O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lk dGg6MXB4O3N0cm9rZS0KPiA+IGxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ry b2tlLW9wYWNpdHk6MSIKPiA+ICsgICAgICAgeD0iMzQzLjYzOTgiCj4gPiArICAgICAgIHk9Ijcx Ni40Nzc1NCIKPiA+ICsgICAgICAgaWQ9InRleHQ0MTM4LTYtMi02LTEtNi0yLTUtNy01LTItNiI+ PHRzcGFuCj4gPiArICAgICAgICAgc29kaXBvZGk6cm9sZT0ibGluZSIKPiA+ICsgICAgICAgICB4 PSIzNDMuNjM5OCIKPiA+ICsgICAgICAgICB5PSI3MTYuNDc3NTQiCj4gPiArICAgICAgICAgaWQ9 InRzcGFuNDMwMS00Igo+ID4gKyAgICAgICAgIHN0eWxlPSJmb250LXN0eWxlOml0YWxpYztmb250 LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LQo+ID4gc3RyZXRjaDpub3Jt YWw7Zm9udC1zaXplOjE1cHg7bGluZS1oZWlnaHQ6MS4yNTtmb250LWZhbWlseTpzYW5zLXNlcmlm Oy0KPiA+IGlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjonc2Fucy1zZXJpZiBJdGFsaWMnO3N0 cm9rZS13aWR0aDoxcHgiPlNoYXJlCj4gPiBQYXJlbnQncyBJT01NVSBtZGV2PC90c3Bhbj48L3Rl eHQ+Cj4gPiArICA8L2c+Cj4gPiArPC9zdmc+Cj4gPiBkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlv bi93YXJwZHJpdmUvd2Quc3ZnCj4gPiBiL0RvY3VtZW50YXRpb24vd2FycGRyaXZlL3dkLnN2Zwo+ ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uODdhYjkyZWJm YmM2Cj4gPiAtLS0gL2Rldi9udWxsCj4gPiArKysgYi9Eb2N1bWVudGF0aW9uL3dhcnBkcml2ZS93 ZC5zdmcKPiA+IEBAIC0wLDAgKzEsNTI2IEBACj4gPiArPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNv ZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cj4gPiArPCEtLSBDcmVhdGVkIHdpdGggSW5r c2NhcGUgKGh0dHA6Ly93d3cuaW5rc2NhcGUub3JnLykgLS0+Cj4gPiArCj4gPiArPHN2Zwo+ID4g KyAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKPiA+ICsgICB4 bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgo+ID4gKyAgIHhtbG5zOnJk Zj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKPiA+ICsgICB4 bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgo+ID4gKyAgIHhtbG5zPSJodHRw Oi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKPiA+ICsgICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53 My5vcmcvMTk5OS94bGluayIKPiA+ICsgICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2Rp LnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCj4gPiArICAgeG1sbnM6aW5rc2Nh cGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCj4gPiArICAg d2lkdGg9IjIxMG1tIgo+ID4gKyAgIGhlaWdodD0iMTE2bW0iCj4gPiArICAgdmlld0JveD0iMCAw IDc0NC4wOTQ0OSA0MTEuMDIzMzgiCj4gPiArICAgaWQ9InN2ZzIiCj4gPiArICAgdmVyc2lvbj0i MS4xIgo+ID4gKyAgIGlua3NjYXBlOnZlcnNpb249IjAuOTIuMyAoMjQwNTU0NiwgMjAxOC0wMy0x MSkiCj4gPiArICAgc29kaXBvZGk6ZG9jbmFtZT0id2Quc3ZnIj4KPiA+ICsgIDxkZWZzCj4gPiAr ICAgICBpZD0iZGVmczQiPgo+ID4gKyAgICA8bGluZWFyR3JhZGllbnQKPiA+ICsgICAgICAgaW5r c2NhcGU6Y29sbGVjdD0iYWx3YXlzIgo+ID4gKyAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ1MDI2 Ij4KPiA+ICsgICAgICA8c3RvcAo+ID4gKyAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmMmYy ZjI7c3RvcC1vcGFjaXR5OjE7Igo+ID4gKyAgICAgICAgIG9mZnNldD0iMCIKPiA+ICsgICAgICAg ICBpZD0ic3RvcDUwMjgiIC8+Cj4gPiArICAgICAgPHN0b3AKPiA+ICsgICAgICAgICBzdHlsZT0i c3RvcC1jb2xvcjojZjJmMmYyO3N0b3Atb3BhY2l0eTowOyIKPiA+ICsgICAgICAgICBvZmZzZXQ9 IjEiCj4gPiArICAgICAgICAgaWQ9InN0b3A1MDMwIiAvPgo+ID4gKyAgICA8L2xpbmVhckdyYWRp ZW50Pgo+ID4gKyAgICA8bGluZWFyR3JhZGllbnQKPiA+ICsgICAgICAgaW5rc2NhcGU6Y29sbGVj dD0iYWx3YXlzIgo+ID4gKyAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ1MDI2Igo+ ID4gKyAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ1MDMyLTMiCj4gPiArICAgICAgIHgxPSIzNTMi Cj4gPiArICAgICAgIHkxPSIyMTEuMzYyMiIKPiA+ICsgICAgICAgeDI9IjU2NS41Igo+ID4gKyAg ICAgICB5Mj0iMTc0Ljg2MjIiCj4gPiArICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9u VXNlIgo+ID4gKyAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuNzM4NDExNywwLDAs MC45MTY2NjMyOSwtCj4gPiA5NTIuODI4Myw1NzEuMTAxNDMpIiAvPgo+ID4gKyAgICA8ZmlsdGVy Cj4gPiArICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKPiA+ICsgICAgICAgc3R5bGU9 ImNvbG9yLWludGVycG9sYXRpb24tZmlsdGVyczpzUkdCIgo+ID4gKyAgICAgICBpZD0iZmlsdGVy NDE2OS0zLTUiCj4gPiArICAgICAgIHg9Ii0wLjAzMTU5NzY2NiIKPiA+ICsgICAgICAgd2lkdGg9 IjEuMDYzMTk1MyIKPiA+ICsgICAgICAgeT0iLTAuMDk5ODEyNzY4Igo+ID4gKyAgICAgICBoZWln aHQ9IjEuMTk5NjI1NSI+Cj4gPiArICAgICAgPGZlR2F1c3NpYW5CbHVyCj4gPiArICAgICAgICAg aW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgo+ID4gKyAgICAgICAgIHN0ZERldmlhdGlvbj0iMS4z MzA3NTk5Igo+ID4gKyAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjQxNzEtNi0zIiAvPgo+ID4g KyAgICA8L2ZpbHRlcj4KPiA+ICsgICAgPG1hcmtlcgo+ID4gKyAgICAgICBtYXJrZXJXaWR0aD0i MTguOTYwNjUzIgo+ID4gKyAgICAgICBtYXJrZXJIZWlnaHQ9IjExLjE5NDY1OCIKPiA+ICsgICAg ICAgcmVmWD0iOS40ODAzMjY3Igo+ID4gKyAgICAgICByZWZZPSI1LjU5NzMyODciCj4gPiArICAg ICAgIG9yaWVudD0iYXV0byIKPiA+ICsgICAgICAgaWQ9Im1hcmtlcjQ2MTMiPgo+ID4gKyAgICAg IDxyZWN0Cj4gPiArICAgICAgICAgeT0iLTUuMTU4OTc4NSIKPiA+ICsgICAgICAgICB4PSI1Ljg1 MDQxMTkiCj4gPiArICAgICAgICAgaGVpZ2h0PSIxMC4zMTc5NTciCj4gPiArICAgICAgICAgd2lk dGg9IjEwLjMxNzk1NyIKPiA+ICsgICAgICAgICBpZD0icmVjdDQyMTIiCj4gPiArICAgICAgICAg c3R5bGU9ImZpbGw6I2ZmZmZmZjtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MC42OTE0MzM2 NztzdHJva2UtCj4gPiBtaXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lIgo+ID4gKyAg ICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuODYxMTEyNzQsMC41MDg0MTQwNSwtCj4gPiAwLjg2 MTExMjc0LDAuNTA4NDE0MDUsMCwwKSI+Cj4gPiArICAgICAgICA8dGl0bGUKPiA+ICsgICAgICAg ICAgIGlkPSJ0aXRsZTQyNjIiPmdlbmVyYXRpb248L3RpdGxlPgo+ID4gKyAgICAgIDwvcmVjdD4K PiA+ICsgICAgPC9tYXJrZXI+Cj4gPiArICAgIDxtYXJrZXIKPiA+ICsgICAgICAgbWFya2VyV2lk dGg9IjExLjIyNzM1OCIKPiA+ICsgICAgICAgbWFya2VySGVpZ2h0PSIxMi4zNTUyNTgiCj4gPiAr ICAgICAgIHJlZlg9IjEwIgo+ID4gKyAgICAgICByZWZZPSI2LjE3NzYyOSIKPiA+ICsgICAgICAg b3JpZW50PSJhdXRvIgo+ID4gKyAgICAgICBpZD0ibWFya2VyNDgyNSI+Cj4gPiArICAgICAgPHBh dGgKPiA+ICsgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgo+ID4gKyAg ICAgICAgIGlkPSJwYXRoNDc1NyIKPiA+ICsgICAgICAgICBkPSJNIDAuNDIwMjQ3MzMsMC40Mjgw NjQ0NCAxMC4yMzEzNTcsNi4zNTAwODQ0Cj4gPiAwLjI0MzQ3NzMzLDExLjkxODU0NCIKPiA+ICsg ICAgICAgICBzdHlsZT0iZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAw O3N0cm9rZS0KPiA+IHdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9p bjptaXRlcjtzdHJva2Utb3BhY2l0eToxIiAvPgo+ID4gKyAgICA8L21hcmtlcj4KPiA+ICsgICAg PG1hcmtlcgo+ID4gKyAgICAgICBtYXJrZXJXaWR0aD0iMTEuMjI3MzU4Igo+ID4gKyAgICAgICBt YXJrZXJIZWlnaHQ9IjEyLjM1NTI1OCIKPiA+ICsgICAgICAgcmVmWD0iMTAiCj4gPiArICAgICAg IHJlZlk9IjYuMTc3NjI5Igo+ID4gKyAgICAgICBvcmllbnQ9ImF1dG8iCj4gPiArICAgICAgIGlk PSJtYXJrZXI0ODI1LTYiPgo+ID4gKyAgICAgIDxwYXRoCj4gPiArICAgICAgICAgaW5rc2NhcGU6 Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKPiA+ICsgICAgICAgICBpZD0icGF0aDQ3NTctMSIKPiA+ ICsgICAgICAgICBkPSJNIDAuNDIwMjQ3MzMsMC40MjgwNjQ0NCAxMC4yMzEzNTcsNi4zNTAwODQ0 Cj4gPiAwLjI0MzQ3NzMzLDExLjkxODU0NCIKPiA+ICsgICAgICAgICBzdHlsZT0iZmlsbDpub25l O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS0KPiA+IHdpZHRoOjFweDtz dHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eTox IiAvPgo+ID4gKyAgICA8L21hcmtlcj4KPiA+ICsgICAgPGxpbmVhckdyYWRpZW50Cj4gPiArICAg ICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKPiA+ICsgICAgICAgeGxpbms6aHJlZj0iI2xp bmVhckdyYWRpZW50NTAyNiIKPiA+ICsgICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NTAzMi0zLTki Cj4gPiArICAgICAgIHgxPSIzNTMiCj4gPiArICAgICAgIHkxPSIyMTEuMzYyMiIKPiA+ICsgICAg ICAgeDI9IjU2NS41Igo+ID4gKyAgICAgICB5Mj0iMTc0Ljg2MjIiCj4gPiArICAgICAgIGdyYWRp ZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgo+ID4gKyAgICAgICBncmFkaWVudFRyYW5zZm9ybT0i bWF0cml4KDEuMjQ1MjUxMSwwLDAsMC45ODUxMzAxNiwtCj4gPiAxOTAuOTU2MzIsNTQwLjMzMTU2 KSIgLz4KPiA+ICsgICAgPG1hcmtlcgo+ID4gKyAgICAgICBtYXJrZXJXaWR0aD0iMTEuMjI3MzU4 Igo+ID4gKyAgICAgICBtYXJrZXJIZWlnaHQ9IjEyLjM1NTI1OCIKPiA+ICsgICAgICAgcmVmWD0i MTAiCj4gPiArICAgICAgIHJlZlk9IjYuMTc3NjI5Igo+ID4gKyAgICAgICBvcmllbnQ9ImF1dG8i Cj4gPiArICAgICAgIGlkPSJtYXJrZXI0ODI1LTYtMiI+Cj4gPiArICAgICAgPHBhdGgKPiA+ICsg ICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgo+ID4gKyAgICAgICAgIGlk PSJwYXRoNDc1Ny0xLTkiCj4gPiArICAgICAgICAgZD0iTSAwLjQyMDI0NzMzLDAuNDI4MDY0NDQg MTAuMjMxMzU3LDYuMzUwMDg0NAo+ID4gMC4yNDM0NzczMywxMS45MTg1NDQiCj4gPiArICAgICAg ICAgc3R5bGU9ImZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJv a2UtCj4gPiB3aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0 ZXI7c3Ryb2tlLW9wYWNpdHk6MSIgLz4KPiA+ICsgICAgPC9tYXJrZXI+Cj4gPiArICAgIDxtYXJr ZXIKPiA+ICsgICAgICAgbWFya2VyV2lkdGg9IjExLjIyNzM1OCIKPiA+ICsgICAgICAgbWFya2Vy SGVpZ2h0PSIxMi4zNTUyNTgiCj4gPiArICAgICAgIHJlZlg9IjEwIgo+ID4gKyAgICAgICByZWZZ PSI2LjE3NzYyOSIKPiA+ICsgICAgICAgb3JpZW50PSJhdXRvIgo+ID4gKyAgICAgICBpZD0ibWFy a2VyNDgyNS02LTItMSI+Cj4gPiArICAgICAgPHBhdGgKPiA+ICsgICAgICAgICBpbmtzY2FwZTpj b25uZWN0b3ItY3VydmF0dXJlPSIwIgo+ID4gKyAgICAgICAgIGlkPSJwYXRoNDc1Ny0xLTktOSIK PiA+ICsgICAgICAgICBkPSJNIDAuNDIwMjQ3MzMsMC40MjgwNjQ0NCAxMC4yMzEzNTcsNi4zNTAw ODQ0Cj4gPiAwLjI0MzQ3NzMzLDExLjkxODU0NCIKPiA+ICsgICAgICAgICBzdHlsZT0iZmlsbDpu b25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS0KPiA+IHdpZHRoOjFw eDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0 eToxIiAvPgo+ID4gKyAgICA8L21hcmtlcj4KPiA+ICsgICAgPG1hcmtlcgo+ID4gKyAgICAgICBt YXJrZXJXaWR0aD0iMTEuMjI3MzU4Igo+ID4gKyAgICAgICBtYXJrZXJIZWlnaHQ9IjEyLjM1NTI1 OCIKPiA+ICsgICAgICAgcmVmWD0iMTAiCj4gPiArICAgICAgIHJlZlk9IjYuMTc3NjI5Igo+ID4g KyAgICAgICBvcmllbnQ9ImF1dG8iCj4gPiArICAgICAgIGlkPSJtYXJrZXI0ODI1LTYtMi02Ij4K PiA+ICsgICAgICA8cGF0aAo+ID4gKyAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1 cmU9IjAiCj4gPiArICAgICAgICAgaWQ9InBhdGg0NzU3LTEtOS0xIgo+ID4gKyAgICAgICAgIGQ9 Ik0gMC40MjAyNDczMywwLjQyODA2NDQ0IDEwLjIzMTM1Nyw2LjM1MDA4NDQKPiA+IDAuMjQzNDc3 MzMsMTEuOTE4NTQ0Igo+ID4gKyAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2 ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLQo+ID4gd2lkdGg6MXB4O3N0cm9rZS1saW5lY2Fw OmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiIC8+Cj4gPiArICAg IDwvbWFya2VyPgo+ID4gKyAgICA8bWFya2VyCj4gPiArICAgICAgIG1hcmtlcldpZHRoPSIxMS4y MjczNTgiCj4gPiArICAgICAgIG1hcmtlckhlaWdodD0iMTIuMzU1MjU4Igo+ID4gKyAgICAgICBy ZWZYPSIxMCIKPiA+ICsgICAgICAgcmVmWT0iNi4xNzc2MjkiCj4gPiArICAgICAgIG9yaWVudD0i YXV0byIKPiA+ICsgICAgICAgaWQ9Im1hcmtlcjQ4MjUtNi0yLTEtOCI+Cj4gPiArICAgICAgPHBh dGgKPiA+ICsgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgo+ID4gKyAg ICAgICAgIGlkPSJwYXRoNDc1Ny0xLTktOS02Igo+ID4gKyAgICAgICAgIGQ9Ik0gMC40MjAyNDcz MywwLjQyODA2NDQ0IDEwLjIzMTM1Nyw2LjM1MDA4NDQKPiA+IDAuMjQzNDc3MzMsMTEuOTE4NTQ0 Igo+ID4gKyAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tl OiMwMDAwMDA7c3Ryb2tlLQo+ID4gd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tl LWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiIC8+Cj4gPiArICAgIDwvbWFya2VyPgo+ ID4gKyAgICA8bWFya2VyCj4gPiArICAgICAgIG1hcmtlcldpZHRoPSIxMS4yMjczNTgiCj4gPiAr ICAgICAgIG1hcmtlckhlaWdodD0iMTIuMzU1MjU4Igo+ID4gKyAgICAgICByZWZYPSIxMCIKPiA+ ICsgICAgICAgcmVmWT0iNi4xNzc2MjkiCj4gPiArICAgICAgIG9yaWVudD0iYXV0byIKPiA+ICsg ICAgICAgaWQ9Im1hcmtlcjQ4MjUtNi0yLTEtOC04Ij4KPiA+ICsgICAgICA8cGF0aAo+ID4gKyAg ICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCj4gPiArICAgICAgICAgaWQ9 InBhdGg0NzU3LTEtOS05LTYtOSIKPiA+ICsgICAgICAgICBkPSJNIDAuNDIwMjQ3MzMsMC40Mjgw NjQ0NCAxMC4yMzEzNTcsNi4zNTAwODQ0Cj4gPiAwLjI0MzQ3NzMzLDExLjkxODU0NCIKPiA+ICsg ICAgICAgICBzdHlsZT0iZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAw O3N0cm9rZS0KPiA+IHdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9p bjptaXRlcjtzdHJva2Utb3BhY2l0eToxIiAvPgo+ID4gKyAgICA8L21hcmtlcj4KPiA+ICsgICAg PG1hcmtlcgo+ID4gKyAgICAgICBtYXJrZXJXaWR0aD0iMTEuMjI3MzU4Igo+ID4gKyAgICAgICBt YXJrZXJIZWlnaHQ9IjEyLjM1NTI1OCIKPiA+ICsgICAgICAgcmVmWD0iMTAiCj4gPiArICAgICAg IHJlZlk9IjYuMTc3NjI5Igo+ID4gKyAgICAgICBvcmllbnQ9ImF1dG8iCj4gPiArICAgICAgIGlk PSJtYXJrZXI0ODI1LTYtMCI+Cj4gPiArICAgICAgPHBhdGgKPiA+ICsgICAgICAgICBpbmtzY2Fw ZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgo+ID4gKyAgICAgICAgIGlkPSJwYXRoNDc1Ny0xLTkz Igo+ID4gKyAgICAgICAgIGQ9Ik0gMC40MjAyNDczMywwLjQyODA2NDQ0IDEwLjIzMTM1Nyw2LjM1 MDA4NDQKPiA+IDAuMjQzNDc3MzMsMTEuOTE4NTQ0Igo+ID4gKyAgICAgICAgIHN0eWxlPSJmaWxs Om5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLQo+ID4gd2lkdGg6 MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFj aXR5OjEiIC8+Cj4gPiArICAgIDwvbWFya2VyPgo+ID4gKyAgICA8bWFya2VyCj4gPiArICAgICAg IG1hcmtlcldpZHRoPSIxMS4yMjczNTgiCj4gPiArICAgICAgIG1hcmtlckhlaWdodD0iMTIuMzU1 MjU4Igo+ID4gKyAgICAgICByZWZYPSIxMCIKPiA+ICsgICAgICAgcmVmWT0iNi4xNzc2MjkiCj4g PiArICAgICAgIG9yaWVudD0iYXV0byIKPiA+ICsgICAgICAgaWQ9Im1hcmtlcjQ4MjUtNi0wLTIi Pgo+ID4gKyAgICAgIDxwYXRoCj4gPiArICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZh dHVyZT0iMCIKPiA+ICsgICAgICAgICBpZD0icGF0aDQ3NTctMS05My02Igo+ID4gKyAgICAgICAg IGQ9Ik0gMC40MjAyNDczMywwLjQyODA2NDQ0IDEwLjIzMTM1Nyw2LjM1MDA4NDQKPiA+IDAuMjQz NDc3MzMsMTEuOTE4NTQ0Igo+ID4gKyAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7ZmlsbC1ydWxl OmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLQo+ID4gd2lkdGg6MXB4O3N0cm9rZS1saW5l Y2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiIC8+Cj4gPiAr ICAgIDwvbWFya2VyPgo+ID4gKyAgICA8bWFya2VyCj4gPiArICAgICAgIG1hcmtlcldpZHRoPSIx MS4yMjczNTgiCj4gPiArICAgICAgIG1hcmtlckhlaWdodD0iMTIuMzU1MjU4Igo+ID4gKyAgICAg ICByZWZYPSIxMCIKPiA+ICsgICAgICAgcmVmWT0iNi4xNzc2MjkiCj4gPiArICAgICAgIG9yaWVu dD0iYXV0byIKPiA+ICsgICAgICAgaWQ9Im1hcmtlcjQ4MjUtNi0yLTYtMiI+Cj4gPiArICAgICAg PHBhdGgKPiA+ICsgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgo+ID4g KyAgICAgICAgIGlkPSJwYXRoNDc1Ny0xLTktMS05Igo+ID4gKyAgICAgICAgIGQ9Ik0gMC40MjAy NDczMywwLjQyODA2NDQ0IDEwLjIzMTM1Nyw2LjM1MDA4NDQKPiA+IDAuMjQzNDc3MzMsMTEuOTE4 NTQ0Igo+ID4gKyAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ry b2tlOiMwMDAwMDA7c3Ryb2tlLQo+ID4gd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ry b2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiIC8+Cj4gPiArICAgIDwvbWFya2Vy Pgo+ID4gKyAgICA8bGluZWFyR3JhZGllbnQKPiA+ICsgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0i YWx3YXlzIgo+ID4gKyAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ1MDI2Igo+ID4g KyAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ1MDMyLTMtOCIKPiA+ICsgICAgICAgeDE9IjM1MyIK PiA+ICsgICAgICAgeTE9IjIxMS4zNjIyIgo+ID4gKyAgICAgICB4Mj0iNTY1LjUiCj4gPiArICAg ICAgIHkyPSIxNzQuODYyMiIKPiA+ICsgICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25V c2UiCj4gPiArICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS4wMTA0Njc0LDAsMCwx LjAwNTI2NzksLQo+ID4gMjE4LjY0Miw2NjEuMTU0NDgpIiAvPgo+ID4gKyAgICA8ZmlsdGVyCj4g PiArICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKPiA+ICsgICAgICAgc3R5bGU9ImNv bG9yLWludGVycG9sYXRpb24tZmlsdGVyczpzUkdCIgo+ID4gKyAgICAgICBpZD0iZmlsdGVyNDE2 OS0zLTUtOCIKPiA+ICsgICAgICAgeD0iLTAuMDMxNTk3NjY2Igo+ID4gKyAgICAgICB3aWR0aD0i MS4wNjMxOTUzIgo+ID4gKyAgICAgICB5PSItMC4wOTk4MTI3NjgiCj4gPiArICAgICAgIGhlaWdo dD0iMS4xOTk2MjU1Ij4KPiA+ICsgICAgICA8ZmVHYXVzc2lhbkJsdXIKPiA+ICsgICAgICAgICBp bmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCj4gPiArICAgICAgICAgc3RkRGV2aWF0aW9uPSIxLjMz MDc1OTkiCj4gPiArICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyNDE3MS02LTMtOSIgLz4KPiA+ ICsgICAgPC9maWx0ZXI+Cj4gPiArICAgIDxsaW5lYXJHcmFkaWVudAo+ID4gKyAgICAgICBpbmtz Y2FwZTpjb2xsZWN0PSJhbHdheXMiCj4gPiArICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFk aWVudDUwMjYiCj4gPiArICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDUwMzItMy04LTIiCj4gPiAr ICAgICAgIHgxPSIzNTMiCj4gPiArICAgICAgIHkxPSIyMTEuMzYyMiIKPiA+ICsgICAgICAgeDI9 IjU2NS41Igo+ID4gKyAgICAgICB5Mj0iMTc0Ljg2MjIiCj4gPiArICAgICAgIGdyYWRpZW50VW5p dHM9InVzZXJTcGFjZU9uVXNlIgo+ID4gKyAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4 KDIuMTQ1MDU1OSwwLDAsMS4wMDUyNjc5LC0KPiA+IDUyMS45NzcwNCw3NDAuNzY0MjIpIiAvPgo+ ID4gKyAgICA8ZmlsdGVyCj4gPiArICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKPiA+ ICsgICAgICAgc3R5bGU9ImNvbG9yLWludGVycG9sYXRpb24tZmlsdGVyczpzUkdCIgo+ID4gKyAg ICAgICBpZD0iZmlsdGVyNDE2OS0zLTUtOC01Igo+ID4gKyAgICAgICB4PSItMC4wMzE1OTc2NjYi Cj4gPiArICAgICAgIHdpZHRoPSIxLjA2MzE5NTMiCj4gPiArICAgICAgIHk9Ii0wLjA5OTgxMjc2 OCIKPiA+ICsgICAgICAgaGVpZ2h0PSIxLjE5OTYyNTUiPgo+ID4gKyAgICAgIDxmZUdhdXNzaWFu Qmx1cgo+ID4gKyAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKPiA+ICsgICAgICAg ICBzdGREZXZpYXRpb249IjEuMzMwNzU5OSIKPiA+ICsgICAgICAgICBpZD0iZmVHYXVzc2lhbkJs dXI0MTcxLTYtMy05LTEiIC8+Cj4gPiArICAgIDwvZmlsdGVyPgo+ID4gKyAgICA8bGluZWFyR3Jh ZGllbnQKPiA+ICsgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgo+ID4gKyAgICAgICB4 bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ1MDI2Igo+ID4gKyAgICAgICBpZD0ibGluZWFyR3Jh ZGllbnQ1MDMyLTMtOC0wIgo+ID4gKyAgICAgICB4MT0iMzUzIgo+ID4gKyAgICAgICB5MT0iMjEx LjM2MjIiCj4gPiArICAgICAgIHgyPSI1NjUuNSIKPiA+ICsgICAgICAgeTI9IjE3NC44NjIyIgo+ ID4gKyAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKPiA+ICsKPiA+IGdyYWRp ZW50VHJhbnNmb3JtPSJtYXRyaXgoMS4wMTA0Njc0LDAsMCwxLjAwNTI2NzksODMuNDU2NzQ4LDY2 MC4yMDc0Nwo+ID4gKSIgLz4KPiA+ICsgICAgPGZpbHRlcgo+ID4gKyAgICAgICBpbmtzY2FwZTpj b2xsZWN0PSJhbHdheXMiCj4gPiArICAgICAgIHN0eWxlPSJjb2xvci1pbnRlcnBvbGF0aW9uLWZp bHRlcnM6c1JHQiIKPiA+ICsgICAgICAgaWQ9ImZpbHRlcjQxNjktMy01LTgtNiIKPiA+ICsgICAg ICAgeD0iLTAuMDMxNTk3NjY2Igo+ID4gKyAgICAgICB3aWR0aD0iMS4wNjMxOTUzIgo+ID4gKyAg ICAgICB5PSItMC4wOTk4MTI3NjgiCj4gPiArICAgICAgIGhlaWdodD0iMS4xOTk2MjU1Ij4KPiA+ ICsgICAgICA8ZmVHYXVzc2lhbkJsdXIKPiA+ICsgICAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJh bHdheXMiCj4gPiArICAgICAgICAgc3RkRGV2aWF0aW9uPSIxLjMzMDc1OTkiCj4gPiArICAgICAg ICAgaWQ9ImZlR2F1c3NpYW5CbHVyNDE3MS02LTMtOS0yIiAvPgo+ID4gKyAgICA8L2ZpbHRlcj4K PiA+ICsgICAgPGxpbmVhckdyYWRpZW50Cj4gPiArICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFs d2F5cyIKPiA+ICsgICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NTAyNiIKPiA+ICsg ICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NTAzMi0zLTg0Igo+ID4gKyAgICAgICB4MT0iMzUzIgo+ ID4gKyAgICAgICB5MT0iMjExLjM2MjIiCj4gPiArICAgICAgIHgyPSI1NjUuNSIKPiA+ICsgICAg ICAgeTI9IjE3NC44NjIyIgo+ID4gKyAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVz ZSIKPiA+ICsgICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjk4ODQ5NDgsMCwwLDAu OTQ5MDM1MzYsLQo+ID4gMzE4LjQyNjY1LDU2NC4zNzY5NikiIC8+Cj4gPiArICAgIDxmaWx0ZXIK PiA+ICsgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgo+ID4gKyAgICAgICBzdHlsZT0i Y29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzOnNSR0IiCj4gPiArICAgICAgIGlkPSJmaWx0ZXI0 MTY5LTMtNS00Igo+ID4gKyAgICAgICB4PSItMC4wMzE1OTc2NjYiCj4gPiArICAgICAgIHdpZHRo PSIxLjA2MzE5NTMiCj4gPiArICAgICAgIHk9Ii0wLjA5OTgxMjc2OCIKPiA+ICsgICAgICAgaGVp Z2h0PSIxLjE5OTYyNTUiPgo+ID4gKyAgICAgIDxmZUdhdXNzaWFuQmx1cgo+ID4gKyAgICAgICAg IGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKPiA+ICsgICAgICAgICBzdGREZXZpYXRpb249IjEu MzMwNzU5OSIKPiA+ICsgICAgICAgICBpZD0iZmVHYXVzc2lhbkJsdXI0MTcxLTYtMy0wIiAvPgo+ ID4gKyAgICA8L2ZpbHRlcj4KPiA+ICsgICAgPG1hcmtlcgo+ID4gKyAgICAgICBtYXJrZXJXaWR0 aD0iMTEuMjI3MzU4Igo+ID4gKyAgICAgICBtYXJrZXJIZWlnaHQ9IjEyLjM1NTI1OCIKPiA+ICsg ICAgICAgcmVmWD0iMTAiCj4gPiArICAgICAgIHJlZlk9IjYuMTc3NjI5Igo+ID4gKyAgICAgICBv cmllbnQ9ImF1dG8iCj4gPiArICAgICAgIGlkPSJtYXJrZXI0ODI1LTYtMC0wIj4KPiA+ICsgICAg ICA8cGF0aAo+ID4gKyAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCj4g PiArICAgICAgICAgaWQ9InBhdGg0NzU3LTEtOTMtOCIKPiA+ICsgICAgICAgICBkPSJNIDAuNDIw MjQ3MzMsMC40MjgwNjQ0NCAxMC4yMzEzNTcsNi4zNTAwODQ0Cj4gPiAwLjI0MzQ3NzMzLDExLjkx ODU0NCIKPiA+ICsgICAgICAgICBzdHlsZT0iZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0 cm9rZTojMDAwMDAwO3N0cm9rZS0KPiA+IHdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0 cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIiAvPgo+ID4gKyAgICA8L21hcmtl cj4KPiA+ICsgICAgPG1hcmtlcgo+ID4gKyAgICAgICBtYXJrZXJXaWR0aD0iMTEuMjI3MzU4Igo+ ID4gKyAgICAgICBtYXJrZXJIZWlnaHQ9IjEyLjM1NTI1OCIKPiA+ICsgICAgICAgcmVmWD0iMTAi Cj4gPiArICAgICAgIHJlZlk9IjYuMTc3NjI5Igo+ID4gKyAgICAgICBvcmllbnQ9ImF1dG8iCj4g PiArICAgICAgIGlkPSJtYXJrZXI0ODI1LTYtMyI+Cj4gPiArICAgICAgPHBhdGgKPiA+ICsgICAg ICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgo+ID4gKyAgICAgICAgIGlkPSJw YXRoNDc1Ny0xLTEiCj4gPiArICAgICAgICAgZD0iTSAwLjQyMDI0NzMzLDAuNDI4MDY0NDQgMTAu MjMxMzU3LDYuMzUwMDg0NAo+ID4gMC4yNDM0NzczMywxMS45MTg1NDQiCj4gPiArICAgICAgICAg c3R5bGU9ImZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Ut Cj4gPiB3aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7 c3Ryb2tlLW9wYWNpdHk6MSIgLz4KPiA+ICsgICAgPC9tYXJrZXI+Cj4gPiArICA8L2RlZnM+Cj4g PiArICA8c29kaXBvZGk6bmFtZWR2aWV3Cj4gPiArICAgICBpZD0iYmFzZSIKPiA+ICsgICAgIHBh Z2Vjb2xvcj0iI2ZmZmZmZiIKPiA+ICsgICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2Igo+ID4gKyAg ICAgYm9yZGVyb3BhY2l0eT0iMS4wIgo+ID4gKyAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAu MCIKPiA+ICsgICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCj4gPiArICAgICBpbmtzY2FwZTp6 b29tPSIwLjk4OTk0OTQ5Igo+ID4gKyAgICAgaW5rc2NhcGU6Y3g9IjQ1Ny40NzMzOSIKPiA+ICsg ICAgIGlua3NjYXBlOmN5PSIyNTAuMTQ3ODEiCj4gPiArICAgICBpbmtzY2FwZTpkb2N1bWVudC11 bml0cz0icHgiCj4gPiArICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCj4gPiAr ICAgICBzaG93Z3JpZD0iZmFsc2UiCj4gPiArICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5 MTYiCj4gPiArICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMDMzIgo+ID4gKyAgICAgaW5r c2NhcGU6d2luZG93LXg9IjAiCj4gPiArICAgICBpbmtzY2FwZTp3aW5kb3cteT0iMjIiCj4gPiAr ICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIwIgo+ID4gKyAgICAgZml0LW1hcmdpbi1y aWdodD0iMC4zIiAvPgo+ID4gKyAgPG1ldGFkYXRhCj4gPiArICAgICBpZD0ibWV0YWRhdGE3Ij4K PiA+ICsgICAgPHJkZjpSREY+Cj4gPiArICAgICAgPGNjOldvcmsKPiA+ICsgICAgICAgICByZGY6 YWJvdXQ9IiI+Cj4gPiArICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1h dD4KPiA+ICsgICAgICAgIDxkYzp0eXBlCj4gPiArICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0 dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgo+ID4gKyAgICAgICAgPGRj OnRpdGxlPjwvZGM6dGl0bGU+Cj4gPiArICAgICAgPC9jYzpXb3JrPgo+ID4gKyAgICA8L3JkZjpS REY+Cj4gPiArICA8L21ldGFkYXRhPgo+ID4gKyAgPGcKPiA+ICsgICAgIGlua3NjYXBlOmxhYmVs PSJMYXllciAxIgo+ID4gKyAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKPiA+ICsgICAg IGlkPSJsYXllcjEiCj4gPiArICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLC02NDEuMzM4NjEp Ij4KPiA+ICsgICAgPHJlY3QKPiA+ICsgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtzdHJva2U6 IzAwMDAwMDtzdHJva2UtCj4gPiB3aWR0aDowLjY0NjUxMTI7ZmlsdGVyOnVybCgjZmlsdGVyNDE2 OS0zLTUpIgo+ID4gKyAgICAgICBpZD0icmVjdDQxMzYtMy02LTUiCj4gPiArICAgICAgIHdpZHRo PSIxMDEuMDc3ODQiCj4gPiArICAgICAgIGhlaWdodD0iMzEuOTk4MTQ4Igo+ID4gKyAgICAgICB4 PSIxMjguNzQ2NzgiCj4gPiArICAgICAgIHk9IjgwLjY0ODg0MiIKPiA+ICsgICAgICAgdHJhbnNm b3JtPSJtYXRyaXgoMi43Mzg0MTE2LDAsMCwwLjkxNjY2MzI4LC0yODQuMDY4OTUsNjY0Ljc5NzUx KSIKPiA+IC8+Cj4gPiArICAgIDxyZWN0Cj4gPiArICAgICAgIHN0eWxlPSJmaWxsOnVybCgjbGlu ZWFyR3JhZGllbnQ1MDMyLTMpO2ZpbGwtCj4gPiBvcGFjaXR5OjE7c3Ryb2tlOiMwMDAwMDA7c3Ry b2tlLXdpZHRoOjEuMDI0MzA3NDkiCj4gPiArICAgICAgIGlkPSJyZWN0NDEzNi0yLTYiCj4gPiAr ICAgICAgIHdpZHRoPSIyNzYuNzkyNzIiCj4gPiArICAgICAgIGhlaWdodD0iMjkuMzMxNTI4Igo+ ID4gKyAgICAgICB4PSI2NC43MjM0MTkiCj4gPiArICAgICAgIHk9IjczNi44NDQ3MyIgLz4KPiA+ ICsgICAgPHRleHQKPiA+ICsgICAgICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIKPiA+ICsgICAgICAg c3R5bGU9ImZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtsaW5lLWhlaWdodDow JTtmb250LQo+ID4gZmFtaWx5OnNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6MHB4O3dvcmQtc3Bh Y2luZzowcHg7ZmlsbDojMDAwMDAwO2ZpbGwtCj4gPiBvcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ry b2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS0KPiA+IGxpbmVqb2luOm1p dGVyO3N0cm9rZS1vcGFjaXR5OjEiCj4gPiArICAgICAgIHg9Ijc4LjIyMzI4MiIKPiA+ICsgICAg ICAgeT0iNzU2Ljc5ODAzIgo+ID4gKyAgICAgICBpZD0idGV4dDQxMzgtNi0yIj48dHNwYW4KPiA+ ICsgICAgICAgICBzb2RpcG9kaTpyb2xlPSJsaW5lIgo+ID4gKyAgICAgICAgIGlkPSJ0c3BhbjQx NDAtMS05Igo+ID4gKyAgICAgICAgIHg9Ijc4LjIyMzI4MiIKPiA+ICsgICAgICAgICB5PSI3NTYu Nzk4MDMiCj4gPiArICAgICAgICAgc3R5bGU9ImZvbnQtc2l6ZToxNXB4O2xpbmUtaGVpZ2h0OjEu MjUiPnVzZXIgYXBwbGljYXRpb24gKHJ1bm5pbmcgYnkKPiA+IHRoZSBDUFU8L3RzcGFuPjwvdGV4 dD4KPiA+ICsgICAgPHBhdGgKPiA+ICsgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtmaWxsLXJ1bGU6 ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2UtCj4gPiB3aWR0aDoxcHg7c3Ryb2tlLWxpbmVj YXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLQo+ID4gb3BhY2l0eToxO21hcmtl ci1lbmQ6dXJsKCNtYXJrZXI0ODI1LTYpIgo+ID4gKyAgICAgICBkPSJtIDIxNy42NzUwNyw4NzYu NjczOCAxMTMuNDAzMzEsNDUuMDc1OCIKPiA+ICsgICAgICAgaWQ9InBhdGg0NjYxIgo+ID4gKyAg ICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgo+ID4gKyAgICAgICBzb2RpcG9k aTpub2RldHlwZXM9ImNjIiAvPgo+ID4gKyAgICA8cGF0aAo+ID4gKyAgICAgICBzdHlsZT0iZmls bDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS0KPiA+IHdpZHRo OjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtCj4g PiBvcGFjaXR5OjE7bWFya2VyLWVuZDp1cmwoI21hcmtlcjQ4MjUtNi0wKSIKPiA+ICsgICAgICAg ZD0ibSAyMDguMTAxOTcsNzY3LjY5ODExIDAuMjkzNjIsNzYuMDM2NTYiCj4gPiArICAgICAgIGlk PSJwYXRoNDY2MS02Igo+ID4gKyAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIw Igo+ID4gKyAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPgo+ID4gKyAgICA8cmVjdAo+ ID4gKyAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO3N0cm9rZTojMDAwMDAwO3N0cm9rZS0KPiA+ IHdpZHRoOjAuNjQ2NTExMjtmaWx0ZXI6dXJsKCNmaWx0ZXI0MTY5LTMtNS04KSIKPiA+ICsgICAg ICAgaWQ9InJlY3Q0MTM2LTMtNi01LTMiCj4gPiArICAgICAgIHdpZHRoPSIxMDEuMDc3ODQiCj4g PiArICAgICAgIGhlaWdodD0iMzEuOTk4MTQ4Igo+ID4gKyAgICAgICB4PSIxMjguNzQ2NzgiCj4g PiArICAgICAgIHk9IjgwLjY0ODg0MiIKPiA+ICsgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMS4w MTA0NjczLDAsMCwxLjAwNTI2NzksMjguMTI4NjI4LDc2My45MDcyMikiIC8+Cj4gPiArICAgIDxy ZWN0Cj4gPiArICAgICAgIHN0eWxlPSJmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ1MDMyLTMtOCk7 ZmlsbC0KPiA+IG9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MC42NTE1OTU2 NSIKPiA+ICsgICAgICAgaWQ9InJlY3Q0MTM2LTItNi02Igo+ID4gKyAgICAgICB3aWR0aD0iMTAy LjEzNTg2Igo+ID4gKyAgICAgICBoZWlnaHQ9IjMyLjE2NjcxIgo+ID4gKyAgICAgICB4PSIxNTYu ODMyMTciCj4gPiArICAgICAgIHk9Ijg0Mi45MTg1MiIgLz4KPiA+ICsgICAgPHRleHQKPiA+ICsg ICAgICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIKPiA+ICsgICAgICAgc3R5bGU9ImZvbnQtc3R5bGU6 bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXNpemU6MTJweDtsaW5lLQo+ID4gaGVpZ2h0 OjAlO2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6MHB4O3dvcmQtCj4gPiBz cGFjaW5nOjBweDtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tl LXdpZHRoOjFweDtzdHJva2UtCj4gPiBsaW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVy O3N0cm9rZS1vcGFjaXR5OjEiCj4gPiArICAgICAgIHg9IjE4OC41ODUxOSIKPiA+ICsgICAgICAg eT0iODY0LjQ3MTI1Igo+ID4gKyAgICAgICBpZD0idGV4dDQxMzgtNi0yLTgiPjx0c3Bhbgo+ID4g KyAgICAgICAgIHNvZGlwb2RpOnJvbGU9ImxpbmUiCj4gPiArICAgICAgICAgaWQ9InRzcGFuNDE0 MC0xLTktMCIKPiA+ICsgICAgICAgICB4PSIxODguNTg1MTkiCj4gPiArICAgICAgICAgeT0iODY0 LjQ3MTI1Igo+ID4gKyAgICAgICAgIHN0eWxlPSJmb250LXNpemU6MTVweDtsaW5lLWhlaWdodDox LjI1O3N0cm9rZS0KPiA+IHdpZHRoOjFweCI+TU1VPC90c3Bhbj48L3RleHQ+Cj4gPiArICAgIDxy ZWN0Cj4gPiArICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tl LQo+ID4gd2lkdGg6MC42NDY1MTEyO2ZpbHRlcjp1cmwoI2ZpbHRlcjQxNjktMy01LTgtNSkiCj4g PiArICAgICAgIGlkPSJyZWN0NDEzNi0zLTYtNS0zLTEiCj4gPiArICAgICAgIHdpZHRoPSIxMDEu MDc3ODQiCj4gPiArICAgICAgIGhlaWdodD0iMzEuOTk4MTQ4Igo+ID4gKyAgICAgICB4PSIxMjgu NzQ2NzgiCj4gPiArICAgICAgIHk9IjgwLjY0ODg0MiIKPiA+ICsgICAgICAgdHJhbnNmb3JtPSJt YXRyaXgoMi4xNDUwNTU2LDAsMCwxLjAwNTI2NzksMS44NzYzNyw4NDMuNTE2OTYpIiAvPgo+ID4g KyAgICA8cmVjdAo+ID4gKyAgICAgICBzdHlsZT0iZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50NTAz Mi0zLTgtMik7ZmlsbC0KPiA+IG9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6 MC45NDkzNzE4MSIKPiA+ICsgICAgICAgaWQ9InJlY3Q0MTM2LTItNi02LTAiCj4gPiArICAgICAg IHdpZHRoPSIyMTYuODE3NiIKPiA+ICsgICAgICAgaGVpZ2h0PSIzMi4xNjY3MSIKPiA+ICsgICAg ICAgeD0iMjc1LjA5MjgzIgo+ID4gKyAgICAgICB5PSI5MjIuNTI4MiIgLz4KPiA+ICsgICAgPHRl eHQKPiA+ICsgICAgICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIKPiA+ICsgICAgICAgc3R5bGU9ImZv bnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXNpemU6MTJweDtsaW5lLQo+ ID4gaGVpZ2h0OjAlO2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6MHB4O3dv cmQtCj4gPiBzcGFjaW5nOjBweDtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5v bmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtCj4gPiBsaW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVq b2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCj4gPiArICAgICAgIHg9IjM0Ny44MTQ4MiIKPiA+ ICsgICAgICAgeT0iOTQzLjIzMjkxIgo+ID4gKyAgICAgICBpZD0idGV4dDQxMzgtNi0yLTgtOCI+ PHRzcGFuCj4gPiArICAgICAgICAgc29kaXBvZGk6cm9sZT0ibGluZSIKPiA+ICsgICAgICAgICBp ZD0idHNwYW40MTQwLTEtOS0wLTUiCj4gPiArICAgICAgICAgeD0iMzQ3LjgxNDgyIgo+ID4gKyAg ICAgICAgIHk9Ijk0My4yMzI5MSIKPiA+ICsgICAgICAgICBzdHlsZT0iZm9udC1zaXplOjE1cHg7 bGluZS1oZWlnaHQ6MS4yNTtzdHJva2UtCj4gPiB3aWR0aDoxcHgiPk1lbW9yeTwvdHNwYW4+PC90 ZXh0Pgo+ID4gKyAgICA8cmVjdAo+ID4gKyAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO3N0cm9r ZTojMDAwMDAwO3N0cm9rZS0KPiA+IHdpZHRoOjAuNjQ2NTExMjtmaWx0ZXI6dXJsKCNmaWx0ZXI0 MTY5LTMtNS04LTYpIgo+ID4gKyAgICAgICBpZD0icmVjdDQxMzYtMy02LTUtMy01Igo+ID4gKyAg ICAgICB3aWR0aD0iMTAxLjA3Nzg0Igo+ID4gKyAgICAgICBoZWlnaHQ9IjMxLjk5ODE0OCIKPiA+ ICsgICAgICAgeD0iMTI4Ljc0Njc4Igo+ID4gKyAgICAgICB5PSI4MC42NDg4NDIiCj4gPiArICAg ICAgIHRyYW5zZm9ybT0ibWF0cml4KDEuMDEwNDY3MywwLDAsMS4wMDUyNjc5LDMzMC4yMjczNyw3 NjIuOTYwMikiIC8+Cj4gPiArICAgIDxyZWN0Cj4gPiArICAgICAgIHN0eWxlPSJmaWxsOnVybCgj bGluZWFyR3JhZGllbnQ1MDMyLTMtOC0wKTtmaWxsLQo+ID4gb3BhY2l0eToxO3N0cm9rZTojMDAw MDAwO3N0cm9rZS13aWR0aDowLjY1MTU5NTY1Igo+ID4gKyAgICAgICBpZD0icmVjdDQxMzYtMi02 LTYtOCIKPiA+ICsgICAgICAgd2lkdGg9IjEwMi4xMzU4NiIKPiA+ICsgICAgICAgaGVpZ2h0PSIz Mi4xNjY3MSIKPiA+ICsgICAgICAgeD0iNDU4LjkzMDkxIgo+ID4gKyAgICAgICB5PSI4NDEuOTcx NSIgLz4KPiA+ICsgICAgPHRleHQKPiA+ICsgICAgICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIKPiA+ ICsgICAgICAgc3R5bGU9ImZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250 LXNpemU6MTJweDtsaW5lLQo+ID4gaGVpZ2h0OjAlO2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7bGV0 dGVyLXNwYWNpbmc6MHB4O3dvcmQtCj4gPiBzcGFjaW5nOjBweDtmaWxsOiMwMDAwMDA7ZmlsbC1v cGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtCj4gPiBsaW5lY2Fw OmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCj4gPiArICAgICAg IHg9IjQ5MC42ODM5MyIKPiA+ICsgICAgICAgeT0iODYzLjUyNDIzIgo+ID4gKyAgICAgICBpZD0i dGV4dDQxMzgtNi0yLTgtNiI+PHRzcGFuCj4gPiArICAgICAgICAgc29kaXBvZGk6cm9sZT0ibGlu ZSIKPiA+ICsgICAgICAgICBpZD0idHNwYW40MTQwLTEtOS0wLTIiCj4gPiArICAgICAgICAgeD0i NDkwLjY4MzkzIgo+ID4gKyAgICAgICAgIHk9Ijg2My41MjQyMyIKPiA+ICsgICAgICAgICBzdHls ZT0iZm9udC1zaXplOjE1cHg7bGluZS1oZWlnaHQ6MS4yNTtzdHJva2UtCj4gPiB3aWR0aDoxcHgi PklPTU1VPC90c3Bhbj48L3RleHQ+Cj4gPiArICAgIDxyZWN0Cj4gPiArICAgICAgIHN0eWxlPSJm aWxsOiMwMDAwMDA7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLQo+ID4gd2lkdGg6MC42NDY1MTEyO2Zp bHRlcjp1cmwoI2ZpbHRlcjQxNjktMy01LTQpIgo+ID4gKyAgICAgICBpZD0icmVjdDQxMzYtMy02 LTUtNiIKPiA+ICsgICAgICAgd2lkdGg9IjEwMS4wNzc4NCIKPiA+ICsgICAgICAgaGVpZ2h0PSIz MS45OTgxNDgiCj4gPiArICAgICAgIHg9IjEyOC43NDY3OCIKPiA+ICsgICAgICAgeT0iODAuNjQ4 ODQyIgo+ID4gKyAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLjk4ODQ5NDcsMCwwLDAuOTQ5MDM1 MzcsMTY3LjE5MjI5LDY2MS4zODE5MykiCj4gPiAvPgo+ID4gKyAgICA8cmVjdAo+ID4gKyAgICAg ICBzdHlsZT0iZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50NTAzMi0zLTg0KTtmaWxsLQo+ID4gb3Bh Y2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowLjg4ODEzNjA5Igo+ID4gKyAgICAg ICBpZD0icmVjdDQxMzYtMi02LTIiCj4gPiArICAgICAgIHdpZHRoPSIyMDAuOTkyNzQiCj4gPiAr ICAgICAgIGhlaWdodD0iMzAuMzY3Mzc0Igo+ID4gKyAgICAgICB4PSI0MjAuNDY3NSIKPiA+ICsg ICAgICAgeT0iNzM1Ljk3MzUxIiAvPgo+ID4gKyAgICA8dGV4dAo+ID4gKyAgICAgICB4bWw6c3Bh Y2U9InByZXNlcnZlIgo+ID4gKyAgICAgICBzdHlsZT0iZm9udC1zdHlsZTpub3JtYWw7Zm9udC13 ZWlnaHQ6bm9ybWFsO2ZvbnQtc2l6ZToxMnB4O2xpbmUtCj4gPiBoZWlnaHQ6MCU7Zm9udC1mYW1p bHk6c2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzowcHg7d29yZC0KPiA+IHNwYWNpbmc6MHB4O2Zp bGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0 cm9rZS0KPiA+IGxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNp dHk6MSIKPiA+ICsgICAgICAgeD0iNDQxLjk1Mjk3Igo+ID4gKyAgICAgICB5PSI3NTUuOTA2OCIK PiA+ICsgICAgICAgaWQ9InRleHQ0MTM4LTYtMi05Ij48dHNwYW4KPiA+ICsgICAgICAgICBzb2Rp cG9kaTpyb2xlPSJsaW5lIgo+ID4gKyAgICAgICAgIGlkPSJ0c3BhbjQxNDAtMS05LTkiCj4gPiAr ICAgICAgICAgeD0iNDQxLjk1Mjk3Igo+ID4gKyAgICAgICAgIHk9Ijc1NS45MDY4Igo+ID4gKyAg ICAgICAgIHN0eWxlPSJmb250LXNpemU6MTVweDtsaW5lLWhlaWdodDoxLjI1O3N0cm9rZS13aWR0 aDoxcHgiPkhhcmR3YXJlCj4gPiBBY2NlbGVyYXRvcjwvdHNwYW4+PC90ZXh0Pgo+ID4gKyAgICA8 cGF0aAo+ID4gKyAgICAgICBzdHlsZT0iZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9r ZTojMDAwMDAwO3N0cm9rZS0KPiA+IHdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9r ZS1saW5lam9pbjptaXRlcjtzdHJva2UtCj4gPiBvcGFjaXR5OjE7bWFya2VyLWVuZDp1cmwoI21h cmtlcjQ4MjUtNi0wLTApIgo+ID4gKyAgICAgICBkPSJtIDUwOC4yOTE0LDc2Ni41NTg4NSAwLjI5 MzYyLDc2LjAzNjU2Igo+ID4gKyAgICAgICBpZD0icGF0aDQ2NjEtNi0xIgo+ID4gKyAgICAgICBp bmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgo+ID4gKyAgICAgICBzb2RpcG9kaTpub2Rl dHlwZXM9ImNjIiAvPgo+ID4gKyAgICA8cGF0aAo+ID4gKyAgICAgICBzdHlsZT0iZmlsbDpub25l O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS0KPiA+IHdpZHRoOjFweDtz dHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtCj4gPiBvcGFj aXR5OjE7bWFya2VyLWVuZDp1cmwoI21hcmtlcjQ4MjUtNi0zKSIKPiA+ICsgICAgICAgZD0iTSA0 OTkuNzAyMDEsODc2LjQ3Mjk3IDM2MS4zODI5Niw5MjAuODAyNTgiCj4gPiArICAgICAgIGlkPSJw YXRoNDY2MS0xIgo+ID4gKyAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgo+ ID4gKyAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPgo+ID4gKyAgPC9nPgo+ID4gKzwv c3ZnPgo+ID4gLS0KPiA+IDIuMTcuMQoKLS0gCgkJCS1LZW5uZXRoKEhpc2lsaWNvbikKCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CuacrOmCruS7tuWPiuWFtumZhOS7tuWQq+acieWNjuS4uuWFrOWP uOeahOS/neWvhuS/oeaBr++8jOS7hemZkOS6juWPkemAgee7meS4iumdouWcsOWdgOS4reWIl+WH uueahOS4quS6uuaIlue+pOe7hOOAguemgQrmraLku7vkvZXlhbbku5bkurrku6Xku7vkvZXlvaLl vI/kvb/nlKjvvIjljIXmi6zkvYbkuI3pmZDkuo7lhajpg6jmiJbpg6jliIblnLDms4TpnLLjgIHl pI3liLbjgIHmiJbmlaPlj5HvvInmnKzpgq7ku7bkuK0K55qE5L+h5oGv44CC5aaC5p6c5oKo6ZSZ 5pS25LqG5pys6YKu5Lu277yM6K+35oKo56uL5Y2z55S16K+d5oiW6YKu5Lu26YCa55+l5Y+R5Lu2 5Lq65bm25Yig6Zmk5pys6YKu5Lu277yBClRoaXMgZS1tYWlsIGFuZCBpdHMgYXR0YWNobWVudHMg Y29udGFpbiBjb25maWRlbnRpYWwgaW5mb3JtYXRpb24gZnJvbSBIVUFXRUksCndoaWNoIGlzIGlu dGVuZGVkIG9ubHkgZm9yIHRoZSBwZXJzb24gb3IgZW50aXR5IHdob3NlIGFkZHJlc3MgaXMgbGlz dGVkIGFib3ZlLgpBbnkgdXNlIG9mIHRoZSAKaW5mb3JtYXRpb24gY29udGFpbmVkIGhlcmVpbiBp biBhbnkgd2F5IChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywgdG90YWwgb3IKcGFydGlh bCBkaXNjbG9zdXJlLCByZXByb2R1Y3Rpb24sIG9yIGRpc3NlbWluYXRpb24pIGJ5IHBlcnNvbnMg b3RoZXIgdGhhbiB0aGUKaW50ZW5kZWQgCnJlY2lwaWVudChzKSBpcyBwcm9oaWJpdGVkLiBJZiB5 b3UgcmVjZWl2ZSB0aGlzIGUtbWFpbCBpbiBlcnJvciwgcGxlYXNlIG5vdGlmeQp0aGUgc2VuZGVy IGJ5IHBob25lIG9yIGVtYWlsIGltbWVkaWF0ZWx5IGFuZCBkZWxldGUgaXQhCgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwppb21tdSBtYWlsaW5nIGxpc3QK aW9tbXVAbGlzdHMubGludXgtZm91bmRhdGlvbi5vcmcKaHR0cHM6Ly9saXN0cy5saW51eGZvdW5k YXRpb24ub3JnL21haWxtYW4vbGlzdGluZm8vaW9tbXU= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on archive.lwn.net X-Spam-Level: X-Spam-Status: No, score=-6.0 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=unavailable autolearn_force=no version=3.4.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by archive.lwn.net (Postfix) with ESMTP id EDAE77E3B2 for ; Thu, 2 Aug 2018 04:24:08 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726229AbeHBGNT (ORCPT ); Thu, 2 Aug 2018 02:13:19 -0400 Received: from szxga06-in.huawei.com ([45.249.212.32]:49343 "EHLO huawei.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1725765AbeHBGNT (ORCPT ); Thu, 2 Aug 2018 02:13:19 -0400 Received: from DGGEMS403-HUB.china.huawei.com (unknown [172.30.72.60]) by Forcepoint Email with ESMTP id 1D771C19DBFB6; Thu, 2 Aug 2018 12:24:02 +0800 (CST) Received: from localhost (10.67.212.75) by DGGEMS403-HUB.china.huawei.com (10.3.19.203) with Microsoft SMTP Server (TLS) id 14.3.399.0; Thu, 2 Aug 2018 12:23:53 +0800 Date: Thu, 2 Aug 2018 12:22:35 +0800 From: Kenneth Lee To: "Tian, Kevin" CC: Kenneth Lee , Jonathan Corbet , Herbert Xu , "David S . Miller" , Joerg Roedel , Alex Williamson , Hao Fang , Zhou Wang , Zaibo Xu , Philippe Ombredanne , Greg Kroah-Hartman , Thomas Gleixner , "linux-doc@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "linux-crypto@vger.kernel.org" , "iommu@lists.linux-foundation.org" , "kvm@vger.kernel.org" , "linux-accelerators@lists.ozlabs.org" , Lu Baolu , "Kumar, Sanjay K" , "linuxarm@huawei.com" Subject: Re: [RFC PATCH 1/7] vfio/spimdev: Add documents for WarpDrive framework Message-ID: <20180802042235.GN160746@Turing-Arch-b> References: <20180801102221.5308-1-nek.in.cn@gmail.com> <20180801102221.5308-2-nek.in.cn@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) X-Originating-IP: [10.67.212.75] X-CFilter-Loop: Reflected Sender: linux-doc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-doc@vger.kernel.org On Thu, Aug 02, 2018 at 03:14:38AM +0000, Tian, Kevin wrote: > Date: Thu, 2 Aug 2018 03:14:38 +0000 > From: "Tian, Kevin" > To: Kenneth Lee , Jonathan Corbet , > Herbert Xu , "David S . Miller" > , Joerg Roedel , Alex Williamson > , Kenneth Lee , Hao > Fang , Zhou Wang , Zaibo Xu > , Philippe Ombredanne , Greg > Kroah-Hartman , Thomas Gleixner > , "linux-doc@vger.kernel.org" > , "linux-kernel@vger.kernel.org" > , "linux-crypto@vger.kernel.org" > , "iommu@lists.linux-foundation.org" > , "kvm@vger.kernel.org" > , "linux-accelerators@lists.ozlabs.org" > , Lu Baolu > , "Kumar, Sanjay K" > CC: "linuxarm@huawei.com" > Subject: RE: [RFC PATCH 1/7] vfio/spimdev: Add documents for WarpDrive > framework > Message-ID: > > > From: Kenneth Lee > > Sent: Wednesday, August 1, 2018 6:22 PM > > > > From: Kenneth Lee > > > > WarpDrive is a common user space accelerator framework. Its main > > component > > in Kernel is called spimdev, Share Parent IOMMU Mediated Device. It > > Not sure whether "share parent IOMMU" is a good term here. better > stick to what capabity you bring to user space, instead of describing > internal trick... Agree. The "SPI" is also strongly hint to "Share Peripheral Interrupt" or "Serial Peripheral Interface". Personally I hate this name. But I cannot find a better one. In the user space, we can use a impassible name (WarpDrive). But kernel require a name point to its feature... maybe I should use "Process-Shared Mdev" in next version? > > > exposes > > the hardware capabilities to the user space via vfio-mdev. So processes in > > user land can obtain a "queue" by open the device and direct access the > > hardware MMIO space or do DMA operation via VFIO interface. > > > > WarpDrive is intended to be used with Jean Philippe Brucker's SVA patchset > > (it is still in RFC stage) to support multi-process. But This is not a must. > > Without the SVA patches, WarpDrive can still work for one process for > > every > > hardware device. > > > > This patch add detail documents for the framework. > > > > Signed-off-by: Kenneth Lee > > --- > > Documentation/00-INDEX | 2 + > > Documentation/warpdrive/warpdrive.rst | 153 ++++++ > > Documentation/warpdrive/wd-arch.svg | 732 > > ++++++++++++++++++++++++++ > > Documentation/warpdrive/wd.svg | 526 ++++++++++++++++++ > > 4 files changed, 1413 insertions(+) > > create mode 100644 Documentation/warpdrive/warpdrive.rst > > create mode 100644 Documentation/warpdrive/wd-arch.svg > > create mode 100644 Documentation/warpdrive/wd.svg > > > > diff --git a/Documentation/00-INDEX b/Documentation/00-INDEX > > index 2754fe83f0d4..9959affab599 100644 > > --- a/Documentation/00-INDEX > > +++ b/Documentation/00-INDEX > > @@ -410,6 +410,8 @@ vm/ > > - directory with info on the Linux vm code. > > w1/ > > - directory with documents regarding the 1-wire (w1) subsystem. > > +warpdrive/ > > + - directory with documents about WarpDrive accelerator > > framework. > > watchdog/ > > - how to auto-reboot Linux if it has "fallen and can't get up". ;-) > > wimax/ > > diff --git a/Documentation/warpdrive/warpdrive.rst > > b/Documentation/warpdrive/warpdrive.rst > > new file mode 100644 > > index 000000000000..3792b2780ea6 > > --- /dev/null > > +++ b/Documentation/warpdrive/warpdrive.rst > > @@ -0,0 +1,153 @@ > > +Introduction of WarpDrive > > +========================= > > + > > +*WarpDrive* is a general accelerator framework built on top of vfio. > > +It can be taken as a light weight virtual function, which you can use > > without > > +*SR-IOV* like facility and can be shared among multiple processes. > > + > > +It can be used as the quick channel for accelerators, network adaptors or > > +other hardware in user space. It can make some implementation simpler. > > E.g. > > +you can reuse most of the *netdev* driver and just share some ring buffer > > to > > +the user space driver for *DPDK* or *ODP*. Or you can combine the RSA > > +accelerator with the *netdev* in the user space as a Web reversed proxy, > > etc. > > + > > +The name *WarpDrive* is simply a cool and general name meaning the > > framework > > +makes the application faster. In kernel, the framework is called SPIMDEV, > > +namely "Share Parent IOMMU Mediated Device". > > + > > + > > +How does it work > > +================ > > + > > +*WarpDrive* takes the Hardware Accelerator as a heterogeneous > > processor which > > +can share some load for the CPU: > > + > > +.. image:: wd.svg > > + :alt: This is a .svg image, if your browser cannot show it, > > + try to download and view it locally > > + > > +So it provides the capability to the user application to: > > + > > +1. Send request to the hardware > > +2. Share memory with the application and other accelerators > > + > > +These requirements can be fulfilled by VFIO if the accelerator can serve > > each > > +application with a separated Virtual Function. But a *SR-IOV* like VF (we > > will > > +call it *HVF* hereinafter) design is too heavy for the accelerator which > > +service thousands of processes. > > + > > +And the *HVF* is not good for the scenario that a device keep most of its > > +resource but share partial of the function to the user space. E.g. a *NIC* > > +works as a *netdev* but share some hardware queues to the user > > application to > > +send packets direct to the hardware. > > + > > +*VFIO-mdev* can solve some of the problem here. But *VFIO-mdev* has > > two problem: > > + > > +1. it cannot make use of its parent device's IOMMU. > > +2. it is assumed to be openned only once. > > + > > +So it will need some add-on for better resource control and let the VFIO > > +driver be aware of this. > > + > > + > > +Architecture > > +------------ > > + > > +The full *WarpDrive* architecture is represented in the following class > > +diagram: > > + > > +.. image:: wd-arch.svg > > + :alt: This is a .svg image, if your browser cannot show it, > > + try to download and view it locally > > + > > +The idea is: when a device is probed, it can be registered to the general > > +framework, e.g. *netdev* or *crypto*, and the *SPIMDEV* at the same > > time. > > + > > +If *SPIMDEV* is registered. A *mdev* creation interface is created. Then > > the > > +system administrator can create a *mdev* in the user space and set its > > +parameters via its sysfs interfacev. But not like the other mdev > > +implementation, hardware resource will not be allocated until it is opened > > by > > +an application. > > + > > +With this strategy, the hardware resource can be easily scheduled among > > +multiple processes. > > + > > + > > +The user API > > +------------ > > + > > +We adopt a polling style interface in the user space: :: > > + > > + int wd_request_queue(int container, struct wd_queue *q, > > + const char *mdev) > > + void wd_release_queue(struct wd_queue *q); > > + > > + int wd_send(struct wd_queue *q, void *req); > > + int wd_recv(struct wd_queue *q, void **req); > > + int wd_recv_sync(struct wd_queue *q, void **req); > > + > > +the ..._sync() interface is a wrapper to the non sync version. They wait on > > the > > +device until the queue become available. > > + > > +Memory can be done by VFIO DMA API. Or the following helper function > > can be > > +adopted: :: > > + > > + int wd_mem_share(struct wd_queue *q, const void *addr, > > + size_t size, int flags); > > + void wd_mem_unshare(struct wd_queue *q, const void *addr, size_t > > size); > > + > > +Todo: if the IOMMU support *ATS* or *SMMU* stall mode. mem share is > > not > > +necessary. This can be check with SPImdev sysfs interface. > > + > > +The user API is not mandatory. It is simply a suggestion and hint what the > > +kernel interface is supposed to support. > > + > > + > > +The user driver > > +--------------- > > + > > +*WarpDrive* expose the hardware IO space to the user process (via > > *mmap*). So > > +it will require user driver for implementing the user API. The following API > > +is suggested for a user driver: :: > > + > > + int open(struct wd_queue *q); > > + int close(struct wd_queue *q); > > + int send(struct wd_queue *q, void *req); > > + int recv(struct wd_queue *q, void **req); > > + > > +These callback enable the communication between the user application > > and the > > +device. You will still need the hardware-depend algorithm driver to access > > the > > +algorithm functionality of the accelerator itself. > > + > > + > > +Multiple processes support > > +========================== > > + > > +In the latest mainline kernel (4.18) when this document is written. > > +Multi-process is not supported in VFIO yet. > > + > > +*JPB* has a patchset to enable this[2]_. We have tested it with our > > hardware > > +(which is known as *D06*). It works well. *WarpDrive* rely on them to > > support > > +multiple processes. If it is not enabled, *WarpDrive* can still work, but it > > +support only one process, which will share the same io map table with > > kernel > > +(but the user application cannot access the kernel address, So it is not > > going > > +to be a security problem) > > + > > + > > +Legacy Mode Support > > +=================== > > +For the hardware on which IOMMU is not support, WarpDrive can run on > > *NOIOMMU* > > +mode. > > + > > + > > +References > > +========== > > +.. [1] Accroding to the comment in in mm/gup.c, The *gup* is only safe > > within > > + a syscall. Because it can only keep the physical memory in place > > + without making sure the VMA will always point to it. Maybe we should > > + raise the VM_PINNED patchset (see > > + https://lists.gt.net/linux/kernel/1931993) again to solve this problem. > > +.. [2] https://patchwork.kernel.org/patch/10394851/ > > +.. [3] https://zhuanlan.zhihu.com/p/35489035 > > + > > +.. vim: tw=78 > > diff --git a/Documentation/warpdrive/wd-arch.svg > > b/Documentation/warpdrive/wd-arch.svg > > new file mode 100644 > > index 000000000000..1b3d1817c4ba > > --- /dev/null > > +++ b/Documentation/warpdrive/wd-arch.svg > > @@ -0,0 +1,732 @@ > > + > > + > > + > > + > + xmlns:dc="http://purl.org/dc/elements/1.1/" > > + xmlns:cc="http://creativecommons.org/ns#" > > + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" > > + xmlns:svg="http://www.w3.org/2000/svg" > > + xmlns="http://www.w3.org/2000/svg" > > + xmlns:xlink="http://www.w3.org/1999/xlink" > > + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" > > + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" > > + width="210mm" > > + height="193mm" > > + viewBox="0 0 744.09449 683.85823" > > + id="svg2" > > + version="1.1" > > + inkscape:version="0.92.3 (2405546, 2018-03-11)" > > + sodipodi:docname="wd-arch.svg"> > > + > + id="defs4"> > > + > + inkscape:collect="always" > > + id="linearGradient6830"> > > + > + style="stop-color:#000000;stop-opacity:1;" > > + offset="0" > > + id="stop6832" /> > > + > + style="stop-color:#000000;stop-opacity:0;" > > + offset="1" > > + id="stop6834" /> > > + > > + > + inkscape:collect="always" > > + xlink:href="#linearGradient5026" > > + id="linearGradient5032" > > + x1="353" > > + y1="211.3622" > > + x2="565.5" > > + y2="174.8622" > > + gradientUnits="userSpaceOnUse" > > + gradientTransform="translate(-89.949614,405.94594)" /> > > + > + inkscape:collect="always" > > + id="linearGradient5026"> > > + > + style="stop-color:#f2f2f2;stop-opacity:1;" > > + offset="0" > > + id="stop5028" /> > > + > + style="stop-color:#f2f2f2;stop-opacity:0;" > > + offset="1" > > + id="stop5030" /> > > + > > + > + inkscape:collect="always" > > + style="color-interpolation-filters:sRGB" > > + id="filter4169-3" > > + x="-0.031597666" > > + width="1.0631953" > > + y="-0.099812768" > > + height="1.1996255"> > > + > + inkscape:collect="always" > > + stdDeviation="1.3307599" > > + id="feGaussianBlur4171-6" /> > > + > > + > + inkscape:collect="always" > > + xlink:href="#linearGradient5026" > > + id="linearGradient5032-1" > > + x1="353" > > + y1="211.3622" > > + x2="565.5" > > + y2="174.8622" > > + gradientUnits="userSpaceOnUse" > > + gradientTransform="translate(175.77842,400.29111)" /> > > + > + inkscape:collect="always" > > + style="color-interpolation-filters:sRGB" > > + id="filter4169-3-0" > > + x="-0.031597666" > > + width="1.0631953" > > + y="-0.099812768" > > + height="1.1996255"> > > + > + inkscape:collect="always" > > + stdDeviation="1.3307599" > > + id="feGaussianBlur4171-6-9" /> > > + > > + > + markerWidth="18.960653" > > + markerHeight="11.194658" > > + refX="9.4803267" > > + refY="5.5973287" > > + orient="auto" > > + id="marker4613"> > > + > + y="-5.1589785" > > + x="5.8504119" > > + height="10.317957" > > + width="10.317957" > > + id="rect4212" > > + style="fill:#ffffff;stroke:#000000;stroke-width:0.69143367;stroke- > > miterlimit:4;stroke-dasharray:none" > > + transform="matrix(0.86111274,0.50841405,- > > 0.86111274,0.50841405,0,0)"> > > + > + id="title4262">generation > > + > > + > > + > + markerWidth="11.227358" > > + markerHeight="12.355258" > > + refX="10" > > + refY="6.177629" > > + orient="auto" > > + id="marker4825"> > > + > + inkscape:connector-curvature="0" > > + id="path4757" > > + d="M 0.42024733,0.42806444 10.231357,6.3500844 > > 0.24347733,11.918544" > > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> > > + > > + > + markerWidth="11.227358" > > + markerHeight="12.355258" > > + refX="10" > > + refY="6.177629" > > + orient="auto" > > + id="marker4825-6"> > > + > + inkscape:connector-curvature="0" > > + id="path4757-1" > > + d="M 0.42024733,0.42806444 10.231357,6.3500844 > > 0.24347733,11.918544" > > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> > > + > > + > + inkscape:collect="always" > > + xlink:href="#linearGradient5026" > > + id="linearGradient5032-3-9" > > + x1="353" > > + y1="211.3622" > > + x2="565.5" > > + y2="174.8622" > > + gradientUnits="userSpaceOnUse" > > + gradientTransform="matrix(1.2452511,0,0,0.98513016,- > > 190.95632,540.33156)" /> > > + > + inkscape:collect="always" > > + style="color-interpolation-filters:sRGB" > > + id="filter4169-3-5-8" > > + x="-0.031597666" > > + width="1.0631953" > > + y="-0.099812768" > > + height="1.1996255"> > > + > + inkscape:collect="always" > > + stdDeviation="1.3307599" > > + id="feGaussianBlur4171-6-3-9" /> > > + > > + > + markerWidth="11.227358" > > + markerHeight="12.355258" > > + refX="10" > > + refY="6.177629" > > + orient="auto" > > + id="marker4825-6-2"> > > + > + inkscape:connector-curvature="0" > > + id="path4757-1-9" > > + d="M 0.42024733,0.42806444 10.231357,6.3500844 > > 0.24347733,11.918544" > > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> > > + > > + > + markerWidth="11.227358" > > + markerHeight="12.355258" > > + refX="10" > > + refY="6.177629" > > + orient="auto" > > + id="marker4825-6-2-1"> > > + > + inkscape:connector-curvature="0" > > + id="path4757-1-9-9" > > + d="M 0.42024733,0.42806444 10.231357,6.3500844 > > 0.24347733,11.918544" > > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> > > + > > + > + inkscape:collect="always" > > + xlink:href="#linearGradient5026" > > + id="linearGradient5032-3-9-7" > > + x1="353" > > + y1="211.3622" > > + x2="565.5" > > + y2="174.8622" > > + gradientUnits="userSpaceOnUse" > > + gradientTransform="matrix(1.3742742,0,0,0.97786398,- > > 234.52617,654.63367)" /> > > + > + inkscape:collect="always" > > + style="color-interpolation-filters:sRGB" > > + id="filter4169-3-5-8-5" > > + x="-0.031597666" > > + width="1.0631953" > > + y="-0.099812768" > > + height="1.1996255"> > > + > + inkscape:collect="always" > > + stdDeviation="1.3307599" > > + id="feGaussianBlur4171-6-3-9-0" /> > > + > > + > + markerWidth="11.227358" > > + markerHeight="12.355258" > > + refX="10" > > + refY="6.177629" > > + orient="auto" > > + id="marker4825-6-2-6"> > > + > + inkscape:connector-curvature="0" > > + id="path4757-1-9-1" > > + d="M 0.42024733,0.42806444 10.231357,6.3500844 > > 0.24347733,11.918544" > > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> > > + > > + > + inkscape:collect="always" > > + xlink:href="#linearGradient5026" > > + id="linearGradient5032-3-9-4" > > + x1="353" > > + y1="211.3622" > > + x2="565.5" > > + y2="174.8622" > > + gradientUnits="userSpaceOnUse" > > + gradientTransform="matrix(1.3742912,0,0,2.0035845,- > > 468.34428,342.56603)" /> > > + > + inkscape:collect="always" > > + style="color-interpolation-filters:sRGB" > > + id="filter4169-3-5-8-54" > > + x="-0.031597666" > > + width="1.0631953" > > + y="-0.099812768" > > + height="1.1996255"> > > + > + inkscape:collect="always" > > + stdDeviation="1.3307599" > > + id="feGaussianBlur4171-6-3-9-7" /> > > + > > + > + markerWidth="11.227358" > > + markerHeight="12.355258" > > + refX="10" > > + refY="6.177629" > > + orient="auto" > > + id="marker4825-6-2-1-8"> > > + > + inkscape:connector-curvature="0" > > + id="path4757-1-9-9-6" > > + d="M 0.42024733,0.42806444 10.231357,6.3500844 > > 0.24347733,11.918544" > > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> > > + > > + > + markerWidth="11.227358" > > + markerHeight="12.355258" > > + refX="10" > > + refY="6.177629" > > + orient="auto" > > + id="marker4825-6-2-1-8-8"> > > + > + inkscape:connector-curvature="0" > > + id="path4757-1-9-9-6-9" > > + d="M 0.42024733,0.42806444 10.231357,6.3500844 > > 0.24347733,11.918544" > > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> > > + > > + > + markerWidth="11.227358" > > + markerHeight="12.355258" > > + refX="10" > > + refY="6.177629" > > + orient="auto" > > + id="marker4825-6-0"> > > + > + inkscape:connector-curvature="0" > > + id="path4757-1-93" > > + d="M 0.42024733,0.42806444 10.231357,6.3500844 > > 0.24347733,11.918544" > > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> > > + > > + > + markerWidth="11.227358" > > + markerHeight="12.355258" > > + refX="10" > > + refY="6.177629" > > + orient="auto" > > + id="marker4825-6-0-2"> > > + > + inkscape:connector-curvature="0" > > + id="path4757-1-93-6" > > + d="M 0.42024733,0.42806444 10.231357,6.3500844 > > 0.24347733,11.918544" > > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> > > + > > + > + inkscape:collect="always" > > + style="color-interpolation-filters:sRGB" > > + id="filter5382" > > + x="-0.089695387" > > + width="1.1793908" > > + y="-0.10052069" > > + height="1.2010413"> > > + > + inkscape:collect="always" > > + stdDeviation="0.86758925" > > + id="feGaussianBlur5384" /> > > + > > + > + inkscape:collect="always" > > + xlink:href="#linearGradient6830" > > + id="linearGradient6836" > > + x1="362.73923" > > + y1="700.04059" > > + x2="340.4751" > > + y2="678.25488" > > + gradientUnits="userSpaceOnUse" > > + gradientTransform="translate(-23.771026,-135.76835)" /> > > + > + markerWidth="11.227358" > > + markerHeight="12.355258" > > + refX="10" > > + refY="6.177629" > > + orient="auto" > > + id="marker4825-6-2-6-2"> > > + > + inkscape:connector-curvature="0" > > + id="path4757-1-9-1-9" > > + d="M 0.42024733,0.42806444 10.231357,6.3500844 > > 0.24347733,11.918544" > > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> > > + > > + > > + > + id="base" > > + pagecolor="#ffffff" > > + bordercolor="#666666" > > + borderopacity="1.0" > > + inkscape:pageopacity="0.0" > > + inkscape:pageshadow="2" > > + inkscape:zoom="0.98994949" > > + inkscape:cx="222.32868" > > + inkscape:cy="370.44492" > > + inkscape:document-units="px" > > + inkscape:current-layer="layer1" > > + showgrid="false" > > + inkscape:window-width="1916" > > + inkscape:window-height="1033" > > + inkscape:window-x="0" > > + inkscape:window-y="22" > > + inkscape:window-maximized="0" > > + fit-margin-right="0.3" > > + inkscape:snap-global="false" /> > > + > + id="metadata7"> > > + > > + > + rdf:about=""> > > + image/svg+xml > > + > + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> > > + > > + > > + > > + > > + > + inkscape:label="Layer 1" > > + inkscape:groupmode="layer" > > + id="layer1" > > + transform="translate(0,-368.50374)"> > > + > + style="fill:#000000;stroke:#000000;stroke- > > width:0.6465112;filter:url(#filter4169-3)" > > + id="rect4136-3-6" > > + width="101.07784" > > + height="31.998148" > > + x="283.01144" > > + y="588.80896" /> > > + > + style="fill:url(#linearGradient5032);fill- > > opacity:1;stroke:#000000;stroke-width:0.6465112" > > + id="rect4136-2" > > + width="101.07784" > > + height="31.998148" > > + x="281.63498" > > + y="586.75739" /> > > + > + xml:space="preserve" > > + style="font-style:normal;font-weight:normal;line-height:0%;font- > > family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill- > > opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke- > > linejoin:miter;stroke-opacity:1" > > + x="294.21747" > > + y="612.50073" > > + id="text4138-6"> > + sodipodi:role="line" > > + id="tspan4140-1" > > + x="294.21747" > > + y="612.50073" > > + style="font-size:15px;line-height:1.25">WarpDrive > > + > + style="fill:#000000;stroke:#000000;stroke- > > width:0.6465112;filter:url(#filter4169-3-0)" > > + id="rect4136-3-6-3" > > + width="101.07784" > > + height="31.998148" > > + x="548.7395" > > + y="583.15417" /> > > + > + style="fill:url(#linearGradient5032-1);fill- > > opacity:1;stroke:#000000;stroke-width:0.6465112" > > + id="rect4136-2-60" > > + width="101.07784" > > + height="31.998148" > > + x="547.36304" > > + y="581.1026" /> > > + > + xml:space="preserve" > > + style="font-style:normal;font-weight:normal;line-height:0%;font- > > family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill- > > opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke- > > linejoin:miter;stroke-opacity:1" > > + x="557.83484" > > + y="602.32745" > > + id="text4138-6-6"> > + sodipodi:role="line" > > + id="tspan4140-1-2" > > + x="557.83484" > > + y="602.32745" > > + style="font-size:15px;line-height:1.25">user_driver > > + > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke- > > opacity:1;marker-end:url(#marker4613)" > > + d="m 547.36304,600.78954 -156.58203,0.0691" > > + id="path4855" > > + inkscape:connector-curvature="0" > > + sodipodi:nodetypes="cc" /> > > + > + style="fill:#000000;stroke:#000000;stroke- > > width:0.6465112;filter:url(#filter4169-3-5-8)" > > + id="rect4136-3-6-5-7" > > + width="101.07784" > > + height="31.998148" > > + x="128.74678" > > + y="80.648842" > > + transform="matrix(1.2452511,0,0,0.98513016,113.15182,641.02594)" > > /> > > + > + style="fill:url(#linearGradient5032-3-9);fill- > > opacity:1;stroke:#000000;stroke-width:0.71606314" > > + id="rect4136-2-6-3" > > + width="125.86729" > > + height="31.522341" > > + x="271.75983" > > + y="718.45435" /> > > + > + xml:space="preserve" > > + style="font-style:normal;font-weight:normal;line-height:0%;font- > > family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill- > > opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke- > > linejoin:miter;stroke-opacity:1" > > + x="306.29599" > > + y="746.50073" > > + id="text4138-6-2-6"> > + sodipodi:role="line" > > + id="tspan4140-1-9-1" > > + x="306.29599" > > + y="746.50073" > > + style="font-size:15px;line-height:1.25">spimdev > > + > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke- > > opacity:1;marker-end:url(#marker4825-6-2)" > > + d="m 329.57309,619.72453 5.0373,97.14447" > > + id="path4661-3" > > + inkscape:connector-curvature="0" > > + sodipodi:nodetypes="cc" /> > > + > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke- > > opacity:1;marker-end:url(#marker4825-6-2-1)" > > + d="m 342.57219,830.63108 -5.67699,-79.2841" > > + id="path4661-3-4" > > + inkscape:connector-curvature="0" > > + sodipodi:nodetypes="cc" /> > > + > + style="fill:#000000;stroke:#000000;stroke- > > width:0.6465112;filter:url(#filter4169-3-5-8-5)" > > + id="rect4136-3-6-5-7-3" > > + width="101.07784" > > + height="31.998148" > > + x="128.74678" > > + y="80.648842" > > + transform="matrix(1.3742742,0,0,0.97786398,101.09126,754.58534)" > > /> > > + > + style="fill:url(#linearGradient5032-3-9-7);fill- > > opacity:1;stroke:#000000;stroke-width:0.74946606" > > + id="rect4136-2-6-3-6" > > + width="138.90866" > > + height="31.289837" > > + x="276.13297" > > + y="831.44263" /> > > + > + xml:space="preserve" > > + style="font-style:normal;font-weight:normal;line-height:0%;font- > > family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill- > > opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke- > > linejoin:miter;stroke-opacity:1" > > + x="295.67819" > > + y="852.98224" > > + id="text4138-6-2-6-1"> > + sodipodi:role="line" > > + id="tspan4140-1-9-1-0" > > + x="295.67819" > > + y="852.98224" > > + style="font-size:15px;line-height:1.25">Device Driver > > + > + xml:space="preserve" > > + style="font-style:normal;font-weight:normal;line-height:0%;font- > > family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill- > > opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke- > > linejoin:miter;stroke-opacity:1" > > + x="349.31198" > > + y="829.46118" > > + id="text4138-6-2-6-1-6"> > + sodipodi:role="line" > > + id="tspan4140-1-9-1-0-3" > > + x="349.31198" > > + y="829.46118" > > + style="font-size:15px;line-height:1.25">* > > + > + xml:space="preserve" > > + style="font-style:normal;font-weight:normal;line-height:0%;font- > > family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill- > > opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke- > > linejoin:miter;stroke-opacity:1" > > + x="349.98282" > > + y="768.698" > > + id="text4138-6-2-6-1-6-2"> > + sodipodi:role="line" > > + id="tspan4140-1-9-1-0-3-0" > > + x="349.98282" > > + y="768.698" > > + style="font-size:15px;line-height:1.25">1 > > + > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke- > > opacity:1;marker-end:url(#marker4825-6-2-6)" > > + d="m 568.1238,614.05402 0.51369,333.80219" > > + id="path4661-3-5" > > + inkscape:connector-curvature="0" > > + sodipodi:nodetypes="cc" /> > > + > + xml:space="preserve" > > + style="font-style:normal;font-weight:normal;line-height:0%;font- > > family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text- > > anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" > > + x="371.8013" > > + y="664.62476" > > + id="text4138-6-2-6-1-6-2-5"> > + sodipodi:role="line" > > + x="371.8013" > > + y="664.62476" > > + id="tspan4274" > > + style="font-size:15px;line- > > height:1.25"><<vfio>> > + sodipodi:role="line" > > + x="371.8013" > > + y="683.37476" > > + id="tspan4305" > > + style="font-size:15px;line-height:1.25">resource > > management > > + > + xml:space="preserve" > > + style="font-style:normal;font-weight:normal;line-height:0%;font- > > family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill- > > opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke- > > linejoin:miter;stroke-opacity:1" > > + x="389.92969" > > + y="587.44836" > > + id="text4138-6-2-6-1-6-2-56"> > + sodipodi:role="line" > > + id="tspan4140-1-9-1-0-3-0-9" > > + x="389.92969" > > + y="587.44836" > > + style="font-size:15px;line-height:1.25">1 > > + > + xml:space="preserve" > > + style="font-style:normal;font-weight:normal;line-height:0%;font- > > family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill- > > opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke- > > linejoin:miter;stroke-opacity:1" > > + x="528.64813" > > + y="600.08429" > > + id="text4138-6-2-6-1-6-3"> > + sodipodi:role="line" > > + id="tspan4140-1-9-1-0-3-7" > > + x="528.64813" > > + y="600.08429" > > + style="font-size:15px;line-height:1.25">* > > + > + style="fill:#000000;stroke:#000000;stroke- > > width:0.6465112;filter:url(#filter4169-3-5-8-54)" > > + id="rect4136-3-6-5-7-4" > > + width="101.07784" > > + height="31.998148" > > + x="128.74678" > > + y="80.648842" > > + transform="matrix(1.3745874,0,0,1.8929066,-132.7754,556.04505)" /> > > + > + style="fill:url(#linearGradient5032-3-9-4);fill- > > opacity:1;stroke:#000000;stroke-width:1.07280123" > > + id="rect4136-2-6-3-4" > > + width="138.91039" > > + height="64.111" > > + x="42.321312" > > + y="704.8371" /> > > + > + xml:space="preserve" > > + style="font-style:normal;font-weight:normal;line-height:0%;font- > > family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill- > > opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke- > > linejoin:miter;stroke-opacity:1" > > + x="110.30745" > > + y="722.94025" > > + id="text4138-6-2-6-3"> > + sodipodi:role="line" > > + x="111.99202" > > + y="722.94025" > > + id="tspan4366" > > + style="font-size:15px;line-height:1.25;text-align:center;text- > > anchor:middle">other standard > + sodipodi:role="line" > > + x="110.30745" > > + y="741.69025" > > + id="tspan4368" > > + style="font-size:15px;line-height:1.25;text-align:center;text- > > anchor:middle">framework > + sodipodi:role="line" > > + x="110.30745" > > + y="760.44025" > > + style="font-size:15px;line-height:1.25;text-align:center;text- > > anchor:middle" > > + id="tspan6840">(crypto/nic/others) > > + > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke- > > opacity:1;marker-end:url(#marker4825-6-2-1-8)" > > + d="M 276.29661,849.04109 134.04449,771.90853" > > + id="path4661-3-4-8" > > + inkscape:connector-curvature="0" > > + sodipodi:nodetypes="cc" /> > > + > + xml:space="preserve" > > + style="font-style:normal;font-weight:normal;line-height:0%;font- > > family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill- > > opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke- > > linejoin:miter;stroke-opacity:1" > > + x="313.70813" > > + y="730.06366" > > + id="text4138-6-2-6-36"> > + sodipodi:role="line" > > + id="tspan4140-1-9-1-7" > > + x="313.70813" > > + y="730.06366" > > + style="font-size:10px;line- > > height:1.25"><<lkm>> > > + > + xml:space="preserve" > > + style="font-style:normal;font-weight:normal;line-height:0%;font- > > family:sans-serif;text-align:start;letter-spacing:0px;word-spacing:0px;text- > > anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke- > > linecap:butt;stroke-linejoin:miter;stroke-opacity:1" > > + x="343.81625" > > + y="786.44141" > > + id="text4138-6-2-6-1-6-2-5-7-5"> > + sodipodi:role="line" > > + x="343.81625" > > + y="786.44141" > > + style="font-size:15px;line-height:1.25;text-align:start;text- > > anchor:start" > > + id="tspan2278">regist > + style="text-align:start;text-anchor:start" > > + id="tspan2280">er as mdev with "share > + sodipodi:role="line" > > + x="343.81625" > > + y="805.19141" > > + style="font-size:15px;line-height:1.25;text-align:start;text- > > anchor:start" > > + id="tspan2357"> > + style="text-align:start;text-anchor:start" > > + id="tspan2359">parent iommu" attribute > > + > + xml:space="preserve" > > + style="font-style:normal;font-weight:normal;line-height:0%;font- > > family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill- > > opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke- > > linejoin:miter;stroke-opacity:1" > > + x="29.145819" > > + y="833.44244" > > + id="text4138-6-2-6-1-6-2-5-7-5-2"> > + sodipodi:role="line" > > + x="29.145819" > > + y="833.44244" > > + id="tspan4301" > > + style="font-size:15px;line-height:1.25">register to other > > subsystem > > + > + xml:space="preserve" > > + style="font-style:normal;font-weight:normal;line-height:0%;font- > > family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill- > > opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke- > > linejoin:miter;stroke-opacity:1" > > + x="301.20813" > > + y="597.29437" > > + id="text4138-6-2-6-36-1"> > + sodipodi:role="line" > > + id="tspan4140-1-9-1-7-2" > > + x="301.20813" > > + y="597.29437" > > + style="font-size:10px;line- > > height:1.25"><<user_lib>> > > + > + xml:space="preserve" > > + style="font-style:normal;font-weight:normal;line-height:0%;font- > > family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text- > > anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" > > + x="649.09613" > > + y="774.4798" > > + id="text4138-6-2-6-1-6-2-5-3"> > + sodipodi:role="line" > > + id="tspan4140-1-9-1-0-3-0-4-6" > > + x="649.09613" > > + y="774.4798" > > + style="font-size:15px;line- > > height:1.25"><<vfio>> > + sodipodi:role="line" > > + x="649.09613" > > + y="793.2298" > > + id="tspan4274-7" > > + style="font-size:15px;line-height:1.25">Hardware > > Accessing > > + > + xml:space="preserve" > > + style="font-style:normal;font-weight:normal;line-height:0%;font- > > family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text- > > anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" > > + x="371.01291" > > + y="529.23682" > > + id="text4138-6-2-6-1-6-2-5-36"> > + sodipodi:role="line" > > + x="371.01291" > > + y="529.23682" > > + id="tspan4305-3" > > + style="font-size:15px;line-height:1.25">wd user api > > + > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" > > + d="m 328.19325,585.87943 0,-23.57142" > > + id="path4348" > > + inkscape:connector-curvature="0" /> > > + > + style="opacity:1;fill:#ffffff;fill-opacity:1;fill- > > rule:evenodd;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke- > > dasharray:none;stroke-dashoffset:0" > > + id="path4350" > > + cx="328.01468" > > + cy="551.95081" > > + rx="11.607142" > > + ry="10.357142" /> > > + > + style="opacity:0.444;fill:url(#linearGradient6836);fill-opacity:1;fill- > > rule:evenodd;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke- > > dasharray:none;stroke-dashoffset:0;filter:url(#filter5382)" > > + id="path4350-2" > > + sodipodi:type="arc" > > + sodipodi:cx="329.44327" > > + sodipodi:cy="553.37933" > > + sodipodi:rx="11.607142" > > + sodipodi:ry="10.357142" > > + sodipodi:start="0" > > + sodipodi:end="6.2509098" > > + d="m 341.05041,553.37933 a 11.607142,10.357142 0 0 1 - > > 11.51349,10.35681 11.607142,10.357142 0 0 1 -11.69928,-10.18967 > > 11.607142,10.357142 0 0 1 11.32469,-10.52124 11.607142,10.357142 0 0 1 > > 11.88204,10.01988" > > + sodipodi:open="true" /> > > + > + xml:space="preserve" > > + style="font-style:normal;font-weight:normal;line-height:0%;font- > > family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text- > > anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" > > + x="543.91455" > > + y="978.22363" > > + id="text4138-6-2-6-1-6-2-5-36-3"> > + sodipodi:role="line" > > + x="543.91455" > > + y="978.22363" > > + id="tspan4305-3-67" > > + style="font-size:15px;line- > > height:1.25">Device(Hardware) > > + > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke- > > opacity:1;marker-end:url(#marker4825-6-2-6-2)" > > + d="m 347.51164,865.4527 153.19752,91.52439" > > + id="path4661-3-5-1" > > + inkscape:connector-curvature="0" > > + sodipodi:nodetypes="cc" /> > > + > + xml:space="preserve" > > + style="font-style:normal;font-weight:normal;font-size:12px;line- > > height:0%;font-family:sans-serif;letter-spacing:0px;word- > > spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke- > > linecap:butt;stroke-linejoin:miter;stroke-opacity:1" > > + x="343.6398" > > + y="716.47754" > > + id="text4138-6-2-6-1-6-2-5-7-5-2-6"> > + sodipodi:role="line" > > + x="343.6398" > > + y="716.47754" > > + id="tspan4301-4" > > + style="font-style:italic;font-variant:normal;font-weight:normal;font- > > stretch:normal;font-size:15px;line-height:1.25;font-family:sans-serif;- > > inkscape-font-specification:'sans-serif Italic';stroke-width:1px">Share > > Parent's IOMMU mdev > > + > > + > > diff --git a/Documentation/warpdrive/wd.svg > > b/Documentation/warpdrive/wd.svg > > new file mode 100644 > > index 000000000000..87ab92ebfbc6 > > --- /dev/null > > +++ b/Documentation/warpdrive/wd.svg > > @@ -0,0 +1,526 @@ > > + > > + > > + > > + > + xmlns:dc="http://purl.org/dc/elements/1.1/" > > + xmlns:cc="http://creativecommons.org/ns#" > > + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" > > + xmlns:svg="http://www.w3.org/2000/svg" > > + xmlns="http://www.w3.org/2000/svg" > > + xmlns:xlink="http://www.w3.org/1999/xlink" > > + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" > > + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" > > + width="210mm" > > + height="116mm" > > + viewBox="0 0 744.09449 411.02338" > > + id="svg2" > > + version="1.1" > > + inkscape:version="0.92.3 (2405546, 2018-03-11)" > > + sodipodi:docname="wd.svg"> > > + > + id="defs4"> > > + > + inkscape:collect="always" > > + id="linearGradient5026"> > > + > + style="stop-color:#f2f2f2;stop-opacity:1;" > > + offset="0" > > + id="stop5028" /> > > + > + style="stop-color:#f2f2f2;stop-opacity:0;" > > + offset="1" > > + id="stop5030" /> > > + > > + > + inkscape:collect="always" > > + xlink:href="#linearGradient5026" > > + id="linearGradient5032-3" > > + x1="353" > > + y1="211.3622" > > + x2="565.5" > > + y2="174.8622" > > + gradientUnits="userSpaceOnUse" > > + gradientTransform="matrix(2.7384117,0,0,0.91666329,- > > 952.8283,571.10143)" /> > > + > + inkscape:collect="always" > > + style="color-interpolation-filters:sRGB" > > + id="filter4169-3-5" > > + x="-0.031597666" > > + width="1.0631953" > > + y="-0.099812768" > > + height="1.1996255"> > > + > + inkscape:collect="always" > > + stdDeviation="1.3307599" > > + id="feGaussianBlur4171-6-3" /> > > + > > + > + markerWidth="18.960653" > > + markerHeight="11.194658" > > + refX="9.4803267" > > + refY="5.5973287" > > + orient="auto" > > + id="marker4613"> > > + > + y="-5.1589785" > > + x="5.8504119" > > + height="10.317957" > > + width="10.317957" > > + id="rect4212" > > + style="fill:#ffffff;stroke:#000000;stroke-width:0.69143367;stroke- > > miterlimit:4;stroke-dasharray:none" > > + transform="matrix(0.86111274,0.50841405,- > > 0.86111274,0.50841405,0,0)"> > > + > + id="title4262">generation > > + > > + > > + > + markerWidth="11.227358" > > + markerHeight="12.355258" > > + refX="10" > > + refY="6.177629" > > + orient="auto" > > + id="marker4825"> > > + > + inkscape:connector-curvature="0" > > + id="path4757" > > + d="M 0.42024733,0.42806444 10.231357,6.3500844 > > 0.24347733,11.918544" > > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> > > + > > + > + markerWidth="11.227358" > > + markerHeight="12.355258" > > + refX="10" > > + refY="6.177629" > > + orient="auto" > > + id="marker4825-6"> > > + > + inkscape:connector-curvature="0" > > + id="path4757-1" > > + d="M 0.42024733,0.42806444 10.231357,6.3500844 > > 0.24347733,11.918544" > > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> > > + > > + > + inkscape:collect="always" > > + xlink:href="#linearGradient5026" > > + id="linearGradient5032-3-9" > > + x1="353" > > + y1="211.3622" > > + x2="565.5" > > + y2="174.8622" > > + gradientUnits="userSpaceOnUse" > > + gradientTransform="matrix(1.2452511,0,0,0.98513016,- > > 190.95632,540.33156)" /> > > + > + markerWidth="11.227358" > > + markerHeight="12.355258" > > + refX="10" > > + refY="6.177629" > > + orient="auto" > > + id="marker4825-6-2"> > > + > + inkscape:connector-curvature="0" > > + id="path4757-1-9" > > + d="M 0.42024733,0.42806444 10.231357,6.3500844 > > 0.24347733,11.918544" > > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> > > + > > + > + markerWidth="11.227358" > > + markerHeight="12.355258" > > + refX="10" > > + refY="6.177629" > > + orient="auto" > > + id="marker4825-6-2-1"> > > + > + inkscape:connector-curvature="0" > > + id="path4757-1-9-9" > > + d="M 0.42024733,0.42806444 10.231357,6.3500844 > > 0.24347733,11.918544" > > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> > > + > > + > + markerWidth="11.227358" > > + markerHeight="12.355258" > > + refX="10" > > + refY="6.177629" > > + orient="auto" > > + id="marker4825-6-2-6"> > > + > + inkscape:connector-curvature="0" > > + id="path4757-1-9-1" > > + d="M 0.42024733,0.42806444 10.231357,6.3500844 > > 0.24347733,11.918544" > > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> > > + > > + > + markerWidth="11.227358" > > + markerHeight="12.355258" > > + refX="10" > > + refY="6.177629" > > + orient="auto" > > + id="marker4825-6-2-1-8"> > > + > + inkscape:connector-curvature="0" > > + id="path4757-1-9-9-6" > > + d="M 0.42024733,0.42806444 10.231357,6.3500844 > > 0.24347733,11.918544" > > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> > > + > > + > + markerWidth="11.227358" > > + markerHeight="12.355258" > > + refX="10" > > + refY="6.177629" > > + orient="auto" > > + id="marker4825-6-2-1-8-8"> > > + > + inkscape:connector-curvature="0" > > + id="path4757-1-9-9-6-9" > > + d="M 0.42024733,0.42806444 10.231357,6.3500844 > > 0.24347733,11.918544" > > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> > > + > > + > + markerWidth="11.227358" > > + markerHeight="12.355258" > > + refX="10" > > + refY="6.177629" > > + orient="auto" > > + id="marker4825-6-0"> > > + > + inkscape:connector-curvature="0" > > + id="path4757-1-93" > > + d="M 0.42024733,0.42806444 10.231357,6.3500844 > > 0.24347733,11.918544" > > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> > > + > > + > + markerWidth="11.227358" > > + markerHeight="12.355258" > > + refX="10" > > + refY="6.177629" > > + orient="auto" > > + id="marker4825-6-0-2"> > > + > + inkscape:connector-curvature="0" > > + id="path4757-1-93-6" > > + d="M 0.42024733,0.42806444 10.231357,6.3500844 > > 0.24347733,11.918544" > > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> > > + > > + > + markerWidth="11.227358" > > + markerHeight="12.355258" > > + refX="10" > > + refY="6.177629" > > + orient="auto" > > + id="marker4825-6-2-6-2"> > > + > + inkscape:connector-curvature="0" > > + id="path4757-1-9-1-9" > > + d="M 0.42024733,0.42806444 10.231357,6.3500844 > > 0.24347733,11.918544" > > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> > > + > > + > + inkscape:collect="always" > > + xlink:href="#linearGradient5026" > > + id="linearGradient5032-3-8" > > + x1="353" > > + y1="211.3622" > > + x2="565.5" > > + y2="174.8622" > > + gradientUnits="userSpaceOnUse" > > + gradientTransform="matrix(1.0104674,0,0,1.0052679,- > > 218.642,661.15448)" /> > > + > + inkscape:collect="always" > > + style="color-interpolation-filters:sRGB" > > + id="filter4169-3-5-8" > > + x="-0.031597666" > > + width="1.0631953" > > + y="-0.099812768" > > + height="1.1996255"> > > + > + inkscape:collect="always" > > + stdDeviation="1.3307599" > > + id="feGaussianBlur4171-6-3-9" /> > > + > > + > + inkscape:collect="always" > > + xlink:href="#linearGradient5026" > > + id="linearGradient5032-3-8-2" > > + x1="353" > > + y1="211.3622" > > + x2="565.5" > > + y2="174.8622" > > + gradientUnits="userSpaceOnUse" > > + gradientTransform="matrix(2.1450559,0,0,1.0052679,- > > 521.97704,740.76422)" /> > > + > + inkscape:collect="always" > > + style="color-interpolation-filters:sRGB" > > + id="filter4169-3-5-8-5" > > + x="-0.031597666" > > + width="1.0631953" > > + y="-0.099812768" > > + height="1.1996255"> > > + > + inkscape:collect="always" > > + stdDeviation="1.3307599" > > + id="feGaussianBlur4171-6-3-9-1" /> > > + > > + > + inkscape:collect="always" > > + xlink:href="#linearGradient5026" > > + id="linearGradient5032-3-8-0" > > + x1="353" > > + y1="211.3622" > > + x2="565.5" > > + y2="174.8622" > > + gradientUnits="userSpaceOnUse" > > + > > gradientTransform="matrix(1.0104674,0,0,1.0052679,83.456748,660.20747 > > )" /> > > + > + inkscape:collect="always" > > + style="color-interpolation-filters:sRGB" > > + id="filter4169-3-5-8-6" > > + x="-0.031597666" > > + width="1.0631953" > > + y="-0.099812768" > > + height="1.1996255"> > > + > + inkscape:collect="always" > > + stdDeviation="1.3307599" > > + id="feGaussianBlur4171-6-3-9-2" /> > > + > > + > + inkscape:collect="always" > > + xlink:href="#linearGradient5026" > > + id="linearGradient5032-3-84" > > + x1="353" > > + y1="211.3622" > > + x2="565.5" > > + y2="174.8622" > > + gradientUnits="userSpaceOnUse" > > + gradientTransform="matrix(1.9884948,0,0,0.94903536,- > > 318.42665,564.37696)" /> > > + > + inkscape:collect="always" > > + style="color-interpolation-filters:sRGB" > > + id="filter4169-3-5-4" > > + x="-0.031597666" > > + width="1.0631953" > > + y="-0.099812768" > > + height="1.1996255"> > > + > + inkscape:collect="always" > > + stdDeviation="1.3307599" > > + id="feGaussianBlur4171-6-3-0" /> > > + > > + > + markerWidth="11.227358" > > + markerHeight="12.355258" > > + refX="10" > > + refY="6.177629" > > + orient="auto" > > + id="marker4825-6-0-0"> > > + > + inkscape:connector-curvature="0" > > + id="path4757-1-93-8" > > + d="M 0.42024733,0.42806444 10.231357,6.3500844 > > 0.24347733,11.918544" > > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> > > + > > + > + markerWidth="11.227358" > > + markerHeight="12.355258" > > + refX="10" > > + refY="6.177629" > > + orient="auto" > > + id="marker4825-6-3"> > > + > + inkscape:connector-curvature="0" > > + id="path4757-1-1" > > + d="M 0.42024733,0.42806444 10.231357,6.3500844 > > 0.24347733,11.918544" > > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> > > + > > + > > + > + id="base" > > + pagecolor="#ffffff" > > + bordercolor="#666666" > > + borderopacity="1.0" > > + inkscape:pageopacity="0.0" > > + inkscape:pageshadow="2" > > + inkscape:zoom="0.98994949" > > + inkscape:cx="457.47339" > > + inkscape:cy="250.14781" > > + inkscape:document-units="px" > > + inkscape:current-layer="layer1" > > + showgrid="false" > > + inkscape:window-width="1916" > > + inkscape:window-height="1033" > > + inkscape:window-x="0" > > + inkscape:window-y="22" > > + inkscape:window-maximized="0" > > + fit-margin-right="0.3" /> > > + > + id="metadata7"> > > + > > + > + rdf:about=""> > > + image/svg+xml > > + > + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> > > + > > + > > + > > + > > + > + inkscape:label="Layer 1" > > + inkscape:groupmode="layer" > > + id="layer1" > > + transform="translate(0,-641.33861)"> > > + > + style="fill:#000000;stroke:#000000;stroke- > > width:0.6465112;filter:url(#filter4169-3-5)" > > + id="rect4136-3-6-5" > > + width="101.07784" > > + height="31.998148" > > + x="128.74678" > > + y="80.648842" > > + transform="matrix(2.7384116,0,0,0.91666328,-284.06895,664.79751)" > > /> > > + > + style="fill:url(#linearGradient5032-3);fill- > > opacity:1;stroke:#000000;stroke-width:1.02430749" > > + id="rect4136-2-6" > > + width="276.79272" > > + height="29.331528" > > + x="64.723419" > > + y="736.84473" /> > > + > + xml:space="preserve" > > + style="font-style:normal;font-weight:normal;line-height:0%;font- > > family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill- > > opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke- > > linejoin:miter;stroke-opacity:1" > > + x="78.223282" > > + y="756.79803" > > + id="text4138-6-2"> > + sodipodi:role="line" > > + id="tspan4140-1-9" > > + x="78.223282" > > + y="756.79803" > > + style="font-size:15px;line-height:1.25">user application (running by > > the CPU > > + > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke- > > opacity:1;marker-end:url(#marker4825-6)" > > + d="m 217.67507,876.6738 113.40331,45.0758" > > + id="path4661" > > + inkscape:connector-curvature="0" > > + sodipodi:nodetypes="cc" /> > > + > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke- > > opacity:1;marker-end:url(#marker4825-6-0)" > > + d="m 208.10197,767.69811 0.29362,76.03656" > > + id="path4661-6" > > + inkscape:connector-curvature="0" > > + sodipodi:nodetypes="cc" /> > > + > + style="fill:#000000;stroke:#000000;stroke- > > width:0.6465112;filter:url(#filter4169-3-5-8)" > > + id="rect4136-3-6-5-3" > > + width="101.07784" > > + height="31.998148" > > + x="128.74678" > > + y="80.648842" > > + transform="matrix(1.0104673,0,0,1.0052679,28.128628,763.90722)" /> > > + > + style="fill:url(#linearGradient5032-3-8);fill- > > opacity:1;stroke:#000000;stroke-width:0.65159565" > > + id="rect4136-2-6-6" > > + width="102.13586" > > + height="32.16671" > > + x="156.83217" > > + y="842.91852" /> > > + > + xml:space="preserve" > > + style="font-style:normal;font-weight:normal;font-size:12px;line- > > height:0%;font-family:sans-serif;letter-spacing:0px;word- > > spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke- > > linecap:butt;stroke-linejoin:miter;stroke-opacity:1" > > + x="188.58519" > > + y="864.47125" > > + id="text4138-6-2-8"> > + sodipodi:role="line" > > + id="tspan4140-1-9-0" > > + x="188.58519" > > + y="864.47125" > > + style="font-size:15px;line-height:1.25;stroke- > > width:1px">MMU > > + > + style="fill:#000000;stroke:#000000;stroke- > > width:0.6465112;filter:url(#filter4169-3-5-8-5)" > > + id="rect4136-3-6-5-3-1" > > + width="101.07784" > > + height="31.998148" > > + x="128.74678" > > + y="80.648842" > > + transform="matrix(2.1450556,0,0,1.0052679,1.87637,843.51696)" /> > > + > + style="fill:url(#linearGradient5032-3-8-2);fill- > > opacity:1;stroke:#000000;stroke-width:0.94937181" > > + id="rect4136-2-6-6-0" > > + width="216.8176" > > + height="32.16671" > > + x="275.09283" > > + y="922.5282" /> > > + > + xml:space="preserve" > > + style="font-style:normal;font-weight:normal;font-size:12px;line- > > height:0%;font-family:sans-serif;letter-spacing:0px;word- > > spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke- > > linecap:butt;stroke-linejoin:miter;stroke-opacity:1" > > + x="347.81482" > > + y="943.23291" > > + id="text4138-6-2-8-8"> > + sodipodi:role="line" > > + id="tspan4140-1-9-0-5" > > + x="347.81482" > > + y="943.23291" > > + style="font-size:15px;line-height:1.25;stroke- > > width:1px">Memory > > + > + style="fill:#000000;stroke:#000000;stroke- > > width:0.6465112;filter:url(#filter4169-3-5-8-6)" > > + id="rect4136-3-6-5-3-5" > > + width="101.07784" > > + height="31.998148" > > + x="128.74678" > > + y="80.648842" > > + transform="matrix(1.0104673,0,0,1.0052679,330.22737,762.9602)" /> > > + > + style="fill:url(#linearGradient5032-3-8-0);fill- > > opacity:1;stroke:#000000;stroke-width:0.65159565" > > + id="rect4136-2-6-6-8" > > + width="102.13586" > > + height="32.16671" > > + x="458.93091" > > + y="841.9715" /> > > + > + xml:space="preserve" > > + style="font-style:normal;font-weight:normal;font-size:12px;line- > > height:0%;font-family:sans-serif;letter-spacing:0px;word- > > spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke- > > linecap:butt;stroke-linejoin:miter;stroke-opacity:1" > > + x="490.68393" > > + y="863.52423" > > + id="text4138-6-2-8-6"> > + sodipodi:role="line" > > + id="tspan4140-1-9-0-2" > > + x="490.68393" > > + y="863.52423" > > + style="font-size:15px;line-height:1.25;stroke- > > width:1px">IOMMU > > + > + style="fill:#000000;stroke:#000000;stroke- > > width:0.6465112;filter:url(#filter4169-3-5-4)" > > + id="rect4136-3-6-5-6" > > + width="101.07784" > > + height="31.998148" > > + x="128.74678" > > + y="80.648842" > > + transform="matrix(1.9884947,0,0,0.94903537,167.19229,661.38193)" > > /> > > + > + style="fill:url(#linearGradient5032-3-84);fill- > > opacity:1;stroke:#000000;stroke-width:0.88813609" > > + id="rect4136-2-6-2" > > + width="200.99274" > > + height="30.367374" > > + x="420.4675" > > + y="735.97351" /> > > + > + xml:space="preserve" > > + style="font-style:normal;font-weight:normal;font-size:12px;line- > > height:0%;font-family:sans-serif;letter-spacing:0px;word- > > spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke- > > linecap:butt;stroke-linejoin:miter;stroke-opacity:1" > > + x="441.95297" > > + y="755.9068" > > + id="text4138-6-2-9"> > + sodipodi:role="line" > > + id="tspan4140-1-9-9" > > + x="441.95297" > > + y="755.9068" > > + style="font-size:15px;line-height:1.25;stroke-width:1px">Hardware > > Accelerator > > + > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke- > > opacity:1;marker-end:url(#marker4825-6-0-0)" > > + d="m 508.2914,766.55885 0.29362,76.03656" > > + id="path4661-6-1" > > + inkscape:connector-curvature="0" > > + sodipodi:nodetypes="cc" /> > > + > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke- > > opacity:1;marker-end:url(#marker4825-6-3)" > > + d="M 499.70201,876.47297 361.38296,920.80258" > > + id="path4661-1" > > + inkscape:connector-curvature="0" > > + sodipodi:nodetypes="cc" /> > > + > > + > > -- > > 2.17.1 -- -Kenneth(Hisilicon) ================================================================================ 本邮件及其附件含有华为公司的保密信息,仅限于发送给上面地址中列出的个人或群组。禁 止任何其他人以任何形式使用(包括但不限于全部或部分地泄露、复制、或散发)本邮件中 的信息。如果您错收了本邮件,请您立即电话或邮件通知发件人并删除本邮件! This e-mail and its attachments contain confidential information from HUAWEI, which is intended only for the person or entity whose address is listed above. Any use of the information contained herein in any way (including, but not limited to, total or partial disclosure, reproduction, or dissemination) by persons other than the intended recipient(s) is prohibited. If you receive this e-mail in error, please notify the sender by phone or email immediately and delete it! -- To unsubscribe from this list: send the line "unsubscribe linux-doc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.5 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_PASS,URIBL_BLOCKED,USER_AGENT_MUTT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id DA428C43142 for ; Thu, 2 Aug 2018 04:24:10 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 62F49208D5 for ; Thu, 2 Aug 2018 04:24:10 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 62F49208D5 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=hisilicon.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727034AbeHBGNT (ORCPT ); Thu, 2 Aug 2018 02:13:19 -0400 Received: from szxga06-in.huawei.com ([45.249.212.32]:49343 "EHLO huawei.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1725765AbeHBGNT (ORCPT ); Thu, 2 Aug 2018 02:13:19 -0400 Received: from DGGEMS403-HUB.china.huawei.com (unknown [172.30.72.60]) by Forcepoint Email with ESMTP id 1D771C19DBFB6; Thu, 2 Aug 2018 12:24:02 +0800 (CST) Received: from localhost (10.67.212.75) by DGGEMS403-HUB.china.huawei.com (10.3.19.203) with Microsoft SMTP Server (TLS) id 14.3.399.0; Thu, 2 Aug 2018 12:23:53 +0800 Date: Thu, 2 Aug 2018 12:22:35 +0800 From: Kenneth Lee To: "Tian, Kevin" CC: Kenneth Lee , Jonathan Corbet , Herbert Xu , "David S . Miller" , Joerg Roedel , Alex Williamson , Hao Fang , Zhou Wang , Zaibo Xu , Philippe Ombredanne , Greg Kroah-Hartman , Thomas Gleixner , "linux-doc@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "linux-crypto@vger.kernel.org" , "iommu@lists.linux-foundation.org" , "kvm@vger.kernel.org" , "linux-accelerators@lists.ozlabs.org" , Lu Baolu , "Kumar, Sanjay K" , "linuxarm@huawei.com" Subject: Re: [RFC PATCH 1/7] vfio/spimdev: Add documents for WarpDrive framework Message-ID: <20180802042235.GN160746@Turing-Arch-b> References: <20180801102221.5308-1-nek.in.cn@gmail.com> <20180801102221.5308-2-nek.in.cn@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) X-Originating-IP: [10.67.212.75] X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Aug 02, 2018 at 03:14:38AM +0000, Tian, Kevin wrote: > Date: Thu, 2 Aug 2018 03:14:38 +0000 > From: "Tian, Kevin" > To: Kenneth Lee , Jonathan Corbet , > Herbert Xu , "David S . Miller" > , Joerg Roedel , Alex Williamson > , Kenneth Lee , Hao > Fang , Zhou Wang , Zaibo Xu > , Philippe Ombredanne , Greg > Kroah-Hartman , Thomas Gleixner > , "linux-doc@vger.kernel.org" > , "linux-kernel@vger.kernel.org" > , "linux-crypto@vger.kernel.org" > , "iommu@lists.linux-foundation.org" > , "kvm@vger.kernel.org" > , "linux-accelerators@lists.ozlabs.org" > , Lu Baolu > , "Kumar, Sanjay K" > CC: "linuxarm@huawei.com" > Subject: RE: [RFC PATCH 1/7] vfio/spimdev: Add documents for WarpDrive > framework > Message-ID: > > > From: Kenneth Lee > > Sent: Wednesday, August 1, 2018 6:22 PM > > > > From: Kenneth Lee > > > > WarpDrive is a common user space accelerator framework. Its main > > component > > in Kernel is called spimdev, Share Parent IOMMU Mediated Device. It > > Not sure whether "share parent IOMMU" is a good term here. better > stick to what capabity you bring to user space, instead of describing > internal trick... Agree. The "SPI" is also strongly hint to "Share Peripheral Interrupt" or "Serial Peripheral Interface". Personally I hate this name. But I cannot find a better one. In the user space, we can use a impassible name (WarpDrive). But kernel require a name point to its feature... maybe I should use "Process-Shared Mdev" in next version? > > > exposes > > the hardware capabilities to the user space via vfio-mdev. So processes in > > user land can obtain a "queue" by open the device and direct access the > > hardware MMIO space or do DMA operation via VFIO interface. > > > > WarpDrive is intended to be used with Jean Philippe Brucker's SVA patchset > > (it is still in RFC stage) to support multi-process. But This is not a must. > > Without the SVA patches, WarpDrive can still work for one process for > > every > > hardware device. > > > > This patch add detail documents for the framework. > > > > Signed-off-by: Kenneth Lee > > --- > > Documentation/00-INDEX | 2 + > > Documentation/warpdrive/warpdrive.rst | 153 ++++++ > > Documentation/warpdrive/wd-arch.svg | 732 > > ++++++++++++++++++++++++++ > > Documentation/warpdrive/wd.svg | 526 ++++++++++++++++++ > > 4 files changed, 1413 insertions(+) > > create mode 100644 Documentation/warpdrive/warpdrive.rst > > create mode 100644 Documentation/warpdrive/wd-arch.svg > > create mode 100644 Documentation/warpdrive/wd.svg > > > > diff --git a/Documentation/00-INDEX b/Documentation/00-INDEX > > index 2754fe83f0d4..9959affab599 100644 > > --- a/Documentation/00-INDEX > > +++ b/Documentation/00-INDEX > > @@ -410,6 +410,8 @@ vm/ > > - directory with info on the Linux vm code. > > w1/ > > - directory with documents regarding the 1-wire (w1) subsystem. > > +warpdrive/ > > + - directory with documents about WarpDrive accelerator > > framework. > > watchdog/ > > - how to auto-reboot Linux if it has "fallen and can't get up". ;-) > > wimax/ > > diff --git a/Documentation/warpdrive/warpdrive.rst > > b/Documentation/warpdrive/warpdrive.rst > > new file mode 100644 > > index 000000000000..3792b2780ea6 > > --- /dev/null > > +++ b/Documentation/warpdrive/warpdrive.rst > > @@ -0,0 +1,153 @@ > > +Introduction of WarpDrive > > +========================= > > + > > +*WarpDrive* is a general accelerator framework built on top of vfio. > > +It can be taken as a light weight virtual function, which you can use > > without > > +*SR-IOV* like facility and can be shared among multiple processes. > > + > > +It can be used as the quick channel for accelerators, network adaptors or > > +other hardware in user space. It can make some implementation simpler. > > E.g. > > +you can reuse most of the *netdev* driver and just share some ring buffer > > to > > +the user space driver for *DPDK* or *ODP*. Or you can combine the RSA > > +accelerator with the *netdev* in the user space as a Web reversed proxy, > > etc. > > + > > +The name *WarpDrive* is simply a cool and general name meaning the > > framework > > +makes the application faster. In kernel, the framework is called SPIMDEV, > > +namely "Share Parent IOMMU Mediated Device". > > + > > + > > +How does it work > > +================ > > + > > +*WarpDrive* takes the Hardware Accelerator as a heterogeneous > > processor which > > +can share some load for the CPU: > > + > > +.. image:: wd.svg > > + :alt: This is a .svg image, if your browser cannot show it, > > + try to download and view it locally > > + > > +So it provides the capability to the user application to: > > + > > +1. Send request to the hardware > > +2. Share memory with the application and other accelerators > > + > > +These requirements can be fulfilled by VFIO if the accelerator can serve > > each > > +application with a separated Virtual Function. But a *SR-IOV* like VF (we > > will > > +call it *HVF* hereinafter) design is too heavy for the accelerator which > > +service thousands of processes. > > + > > +And the *HVF* is not good for the scenario that a device keep most of its > > +resource but share partial of the function to the user space. E.g. a *NIC* > > +works as a *netdev* but share some hardware queues to the user > > application to > > +send packets direct to the hardware. > > + > > +*VFIO-mdev* can solve some of the problem here. But *VFIO-mdev* has > > two problem: > > + > > +1. it cannot make use of its parent device's IOMMU. > > +2. it is assumed to be openned only once. > > + > > +So it will need some add-on for better resource control and let the VFIO > > +driver be aware of this. > > + > > + > > +Architecture > > +------------ > > + > > +The full *WarpDrive* architecture is represented in the following class > > +diagram: > > + > > +.. image:: wd-arch.svg > > + :alt: This is a .svg image, if your browser cannot show it, > > + try to download and view it locally > > + > > +The idea is: when a device is probed, it can be registered to the general > > +framework, e.g. *netdev* or *crypto*, and the *SPIMDEV* at the same > > time. > > + > > +If *SPIMDEV* is registered. A *mdev* creation interface is created. Then > > the > > +system administrator can create a *mdev* in the user space and set its > > +parameters via its sysfs interfacev. But not like the other mdev > > +implementation, hardware resource will not be allocated until it is opened > > by > > +an application. > > + > > +With this strategy, the hardware resource can be easily scheduled among > > +multiple processes. > > + > > + > > +The user API > > +------------ > > + > > +We adopt a polling style interface in the user space: :: > > + > > + int wd_request_queue(int container, struct wd_queue *q, > > + const char *mdev) > > + void wd_release_queue(struct wd_queue *q); > > + > > + int wd_send(struct wd_queue *q, void *req); > > + int wd_recv(struct wd_queue *q, void **req); > > + int wd_recv_sync(struct wd_queue *q, void **req); > > + > > +the ..._sync() interface is a wrapper to the non sync version. They wait on > > the > > +device until the queue become available. > > + > > +Memory can be done by VFIO DMA API. Or the following helper function > > can be > > +adopted: :: > > + > > + int wd_mem_share(struct wd_queue *q, const void *addr, > > + size_t size, int flags); > > + void wd_mem_unshare(struct wd_queue *q, const void *addr, size_t > > size); > > + > > +Todo: if the IOMMU support *ATS* or *SMMU* stall mode. mem share is > > not > > +necessary. This can be check with SPImdev sysfs interface. > > + > > +The user API is not mandatory. It is simply a suggestion and hint what the > > +kernel interface is supposed to support. > > + > > + > > +The user driver > > +--------------- > > + > > +*WarpDrive* expose the hardware IO space to the user process (via > > *mmap*). So > > +it will require user driver for implementing the user API. The following API > > +is suggested for a user driver: :: > > + > > + int open(struct wd_queue *q); > > + int close(struct wd_queue *q); > > + int send(struct wd_queue *q, void *req); > > + int recv(struct wd_queue *q, void **req); > > + > > +These callback enable the communication between the user application > > and the > > +device. You will still need the hardware-depend algorithm driver to access > > the > > +algorithm functionality of the accelerator itself. > > + > > + > > +Multiple processes support > > +========================== > > + > > +In the latest mainline kernel (4.18) when this document is written. > > +Multi-process is not supported in VFIO yet. > > + > > +*JPB* has a patchset to enable this[2]_. We have tested it with our > > hardware > > +(which is known as *D06*). It works well. *WarpDrive* rely on them to > > support > > +multiple processes. If it is not enabled, *WarpDrive* can still work, but it > > +support only one process, which will share the same io map table with > > kernel > > +(but the user application cannot access the kernel address, So it is not > > going > > +to be a security problem) > > + > > + > > +Legacy Mode Support > > +=================== > > +For the hardware on which IOMMU is not support, WarpDrive can run on > > *NOIOMMU* > > +mode. > > + > > + > > +References > > +========== > > +.. [1] Accroding to the comment in in mm/gup.c, The *gup* is only safe > > within > > + a syscall. Because it can only keep the physical memory in place > > + without making sure the VMA will always point to it. Maybe we should > > + raise the VM_PINNED patchset (see > > + https://lists.gt.net/linux/kernel/1931993) again to solve this problem. > > +.. [2] https://patchwork.kernel.org/patch/10394851/ > > +.. [3] https://zhuanlan.zhihu.com/p/35489035 > > + > > +.. vim: tw=78 > > diff --git a/Documentation/warpdrive/wd-arch.svg > > b/Documentation/warpdrive/wd-arch.svg > > new file mode 100644 > > index 000000000000..1b3d1817c4ba > > --- /dev/null > > +++ b/Documentation/warpdrive/wd-arch.svg > > @@ -0,0 +1,732 @@ > > + > > + > > + > > + > + xmlns:dc="http://purl.org/dc/elements/1.1/" > > + xmlns:cc="http://creativecommons.org/ns#" > > + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" > > + xmlns:svg="http://www.w3.org/2000/svg" > > + xmlns="http://www.w3.org/2000/svg" > > + xmlns:xlink="http://www.w3.org/1999/xlink" > > + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" > > + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" > > + width="210mm" > > + height="193mm" > > + viewBox="0 0 744.09449 683.85823" > > + id="svg2" > > + version="1.1" > > + inkscape:version="0.92.3 (2405546, 2018-03-11)" > > + sodipodi:docname="wd-arch.svg"> > > + > + id="defs4"> > > + > + inkscape:collect="always" > > + id="linearGradient6830"> > > + > + style="stop-color:#000000;stop-opacity:1;" > > + offset="0" > > + id="stop6832" /> > > + > + style="stop-color:#000000;stop-opacity:0;" > > + offset="1" > > + id="stop6834" /> > > + > > + > + inkscape:collect="always" > > + xlink:href="#linearGradient5026" > > + id="linearGradient5032" > > + x1="353" > > + y1="211.3622" > > + x2="565.5" > > + y2="174.8622" > > + gradientUnits="userSpaceOnUse" > > + gradientTransform="translate(-89.949614,405.94594)" /> > > + > + inkscape:collect="always" > > + id="linearGradient5026"> > > + > + style="stop-color:#f2f2f2;stop-opacity:1;" > > + offset="0" > > + id="stop5028" /> > > + > + style="stop-color:#f2f2f2;stop-opacity:0;" > > + offset="1" > > + id="stop5030" /> > > + > > + > + inkscape:collect="always" > > + style="color-interpolation-filters:sRGB" > > + id="filter4169-3" > > + x="-0.031597666" > > + width="1.0631953" > > + y="-0.099812768" > > + height="1.1996255"> > > + > + inkscape:collect="always" > > + stdDeviation="1.3307599" > > + id="feGaussianBlur4171-6" /> > > + > > + > + inkscape:collect="always" > > + xlink:href="#linearGradient5026" > > + id="linearGradient5032-1" > > + x1="353" > > + y1="211.3622" > > + x2="565.5" > > + y2="174.8622" > > + gradientUnits="userSpaceOnUse" > > + gradientTransform="translate(175.77842,400.29111)" /> > > + > + inkscape:collect="always" > > + style="color-interpolation-filters:sRGB" > > + id="filter4169-3-0" > > + x="-0.031597666" > > + width="1.0631953" > > + y="-0.099812768" > > + height="1.1996255"> > > + > + inkscape:collect="always" > > + stdDeviation="1.3307599" > > + id="feGaussianBlur4171-6-9" /> > > + > > + > + markerWidth="18.960653" > > + markerHeight="11.194658" > > + refX="9.4803267" > > + refY="5.5973287" > > + orient="auto" > > + id="marker4613"> > > + > + y="-5.1589785" > > + x="5.8504119" > > + height="10.317957" > > + width="10.317957" > > + id="rect4212" > > + style="fill:#ffffff;stroke:#000000;stroke-width:0.69143367;stroke- > > miterlimit:4;stroke-dasharray:none" > > + transform="matrix(0.86111274,0.50841405,- > > 0.86111274,0.50841405,0,0)"> > > + > + id="title4262">generation > > + > > + > > + > + markerWidth="11.227358" > > + markerHeight="12.355258" > > + refX="10" > > + refY="6.177629" > > + orient="auto" > > + id="marker4825"> > > + > + inkscape:connector-curvature="0" > > + id="path4757" > > + d="M 0.42024733,0.42806444 10.231357,6.3500844 > > 0.24347733,11.918544" > > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> > > + > > + > + markerWidth="11.227358" > > + markerHeight="12.355258" > > + refX="10" > > + refY="6.177629" > > + orient="auto" > > + id="marker4825-6"> > > + > + inkscape:connector-curvature="0" > > + id="path4757-1" > > + d="M 0.42024733,0.42806444 10.231357,6.3500844 > > 0.24347733,11.918544" > > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> > > + > > + > + inkscape:collect="always" > > + xlink:href="#linearGradient5026" > > + id="linearGradient5032-3-9" > > + x1="353" > > + y1="211.3622" > > + x2="565.5" > > + y2="174.8622" > > + gradientUnits="userSpaceOnUse" > > + gradientTransform="matrix(1.2452511,0,0,0.98513016,- > > 190.95632,540.33156)" /> > > + > + inkscape:collect="always" > > + style="color-interpolation-filters:sRGB" > > + id="filter4169-3-5-8" > > + x="-0.031597666" > > + width="1.0631953" > > + y="-0.099812768" > > + height="1.1996255"> > > + > + inkscape:collect="always" > > + stdDeviation="1.3307599" > > + id="feGaussianBlur4171-6-3-9" /> > > + > > + > + markerWidth="11.227358" > > + markerHeight="12.355258" > > + refX="10" > > + refY="6.177629" > > + orient="auto" > > + id="marker4825-6-2"> > > + > + inkscape:connector-curvature="0" > > + id="path4757-1-9" > > + d="M 0.42024733,0.42806444 10.231357,6.3500844 > > 0.24347733,11.918544" > > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> > > + > > + > + markerWidth="11.227358" > > + markerHeight="12.355258" > > + refX="10" > > + refY="6.177629" > > + orient="auto" > > + id="marker4825-6-2-1"> > > + > + inkscape:connector-curvature="0" > > + id="path4757-1-9-9" > > + d="M 0.42024733,0.42806444 10.231357,6.3500844 > > 0.24347733,11.918544" > > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> > > + > > + > + inkscape:collect="always" > > + xlink:href="#linearGradient5026" > > + id="linearGradient5032-3-9-7" > > + x1="353" > > + y1="211.3622" > > + x2="565.5" > > + y2="174.8622" > > + gradientUnits="userSpaceOnUse" > > + gradientTransform="matrix(1.3742742,0,0,0.97786398,- > > 234.52617,654.63367)" /> > > + > + inkscape:collect="always" > > + style="color-interpolation-filters:sRGB" > > + id="filter4169-3-5-8-5" > > + x="-0.031597666" > > + width="1.0631953" > > + y="-0.099812768" > > + height="1.1996255"> > > + > + inkscape:collect="always" > > + stdDeviation="1.3307599" > > + id="feGaussianBlur4171-6-3-9-0" /> > > + > > + > + markerWidth="11.227358" > > + markerHeight="12.355258" > > + refX="10" > > + refY="6.177629" > > + orient="auto" > > + id="marker4825-6-2-6"> > > + > + inkscape:connector-curvature="0" > > + id="path4757-1-9-1" > > + d="M 0.42024733,0.42806444 10.231357,6.3500844 > > 0.24347733,11.918544" > > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> > > + > > + > + inkscape:collect="always" > > + xlink:href="#linearGradient5026" > > + id="linearGradient5032-3-9-4" > > + x1="353" > > + y1="211.3622" > > + x2="565.5" > > + y2="174.8622" > > + gradientUnits="userSpaceOnUse" > > + gradientTransform="matrix(1.3742912,0,0,2.0035845,- > > 468.34428,342.56603)" /> > > + > + inkscape:collect="always" > > + style="color-interpolation-filters:sRGB" > > + id="filter4169-3-5-8-54" > > + x="-0.031597666" > > + width="1.0631953" > > + y="-0.099812768" > > + height="1.1996255"> > > + > + inkscape:collect="always" > > + stdDeviation="1.3307599" > > + id="feGaussianBlur4171-6-3-9-7" /> > > + > > + > + markerWidth="11.227358" > > + markerHeight="12.355258" > > + refX="10" > > + refY="6.177629" > > + orient="auto" > > + id="marker4825-6-2-1-8"> > > + > + inkscape:connector-curvature="0" > > + id="path4757-1-9-9-6" > > + d="M 0.42024733,0.42806444 10.231357,6.3500844 > > 0.24347733,11.918544" > > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> > > + > > + > + markerWidth="11.227358" > > + markerHeight="12.355258" > > + refX="10" > > + refY="6.177629" > > + orient="auto" > > + id="marker4825-6-2-1-8-8"> > > + > + inkscape:connector-curvature="0" > > + id="path4757-1-9-9-6-9" > > + d="M 0.42024733,0.42806444 10.231357,6.3500844 > > 0.24347733,11.918544" > > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> > > + > > + > + markerWidth="11.227358" > > + markerHeight="12.355258" > > + refX="10" > > + refY="6.177629" > > + orient="auto" > > + id="marker4825-6-0"> > > + > + inkscape:connector-curvature="0" > > + id="path4757-1-93" > > + d="M 0.42024733,0.42806444 10.231357,6.3500844 > > 0.24347733,11.918544" > > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> > > + > > + > + markerWidth="11.227358" > > + markerHeight="12.355258" > > + refX="10" > > + refY="6.177629" > > + orient="auto" > > + id="marker4825-6-0-2"> > > + > + inkscape:connector-curvature="0" > > + id="path4757-1-93-6" > > + d="M 0.42024733,0.42806444 10.231357,6.3500844 > > 0.24347733,11.918544" > > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> > > + > > + > + inkscape:collect="always" > > + style="color-interpolation-filters:sRGB" > > + id="filter5382" > > + x="-0.089695387" > > + width="1.1793908" > > + y="-0.10052069" > > + height="1.2010413"> > > + > + inkscape:collect="always" > > + stdDeviation="0.86758925" > > + id="feGaussianBlur5384" /> > > + > > + > + inkscape:collect="always" > > + xlink:href="#linearGradient6830" > > + id="linearGradient6836" > > + x1="362.73923" > > + y1="700.04059" > > + x2="340.4751" > > + y2="678.25488" > > + gradientUnits="userSpaceOnUse" > > + gradientTransform="translate(-23.771026,-135.76835)" /> > > + > + markerWidth="11.227358" > > + markerHeight="12.355258" > > + refX="10" > > + refY="6.177629" > > + orient="auto" > > + id="marker4825-6-2-6-2"> > > + > + inkscape:connector-curvature="0" > > + id="path4757-1-9-1-9" > > + d="M 0.42024733,0.42806444 10.231357,6.3500844 > > 0.24347733,11.918544" > > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> > > + > > + > > + > + id="base" > > + pagecolor="#ffffff" > > + bordercolor="#666666" > > + borderopacity="1.0" > > + inkscape:pageopacity="0.0" > > + inkscape:pageshadow="2" > > + inkscape:zoom="0.98994949" > > + inkscape:cx="222.32868" > > + inkscape:cy="370.44492" > > + inkscape:document-units="px" > > + inkscape:current-layer="layer1" > > + showgrid="false" > > + inkscape:window-width="1916" > > + inkscape:window-height="1033" > > + inkscape:window-x="0" > > + inkscape:window-y="22" > > + inkscape:window-maximized="0" > > + fit-margin-right="0.3" > > + inkscape:snap-global="false" /> > > + > + id="metadata7"> > > + > > + > + rdf:about=""> > > + image/svg+xml > > + > + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> > > + > > + > > + > > + > > + > + inkscape:label="Layer 1" > > + inkscape:groupmode="layer" > > + id="layer1" > > + transform="translate(0,-368.50374)"> > > + > + style="fill:#000000;stroke:#000000;stroke- > > width:0.6465112;filter:url(#filter4169-3)" > > + id="rect4136-3-6" > > + width="101.07784" > > + height="31.998148" > > + x="283.01144" > > + y="588.80896" /> > > + > + style="fill:url(#linearGradient5032);fill- > > opacity:1;stroke:#000000;stroke-width:0.6465112" > > + id="rect4136-2" > > + width="101.07784" > > + height="31.998148" > > + x="281.63498" > > + y="586.75739" /> > > + > + xml:space="preserve" > > + style="font-style:normal;font-weight:normal;line-height:0%;font- > > family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill- > > opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke- > > linejoin:miter;stroke-opacity:1" > > + x="294.21747" > > + y="612.50073" > > + id="text4138-6"> > + sodipodi:role="line" > > + id="tspan4140-1" > > + x="294.21747" > > + y="612.50073" > > + style="font-size:15px;line-height:1.25">WarpDrive > > + > + style="fill:#000000;stroke:#000000;stroke- > > width:0.6465112;filter:url(#filter4169-3-0)" > > + id="rect4136-3-6-3" > > + width="101.07784" > > + height="31.998148" > > + x="548.7395" > > + y="583.15417" /> > > + > + style="fill:url(#linearGradient5032-1);fill- > > opacity:1;stroke:#000000;stroke-width:0.6465112" > > + id="rect4136-2-60" > > + width="101.07784" > > + height="31.998148" > > + x="547.36304" > > + y="581.1026" /> > > + > + xml:space="preserve" > > + style="font-style:normal;font-weight:normal;line-height:0%;font- > > family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill- > > opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke- > > linejoin:miter;stroke-opacity:1" > > + x="557.83484" > > + y="602.32745" > > + id="text4138-6-6"> > + sodipodi:role="line" > > + id="tspan4140-1-2" > > + x="557.83484" > > + y="602.32745" > > + style="font-size:15px;line-height:1.25">user_driver > > + > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke- > > opacity:1;marker-end:url(#marker4613)" > > + d="m 547.36304,600.78954 -156.58203,0.0691" > > + id="path4855" > > + inkscape:connector-curvature="0" > > + sodipodi:nodetypes="cc" /> > > + > + style="fill:#000000;stroke:#000000;stroke- > > width:0.6465112;filter:url(#filter4169-3-5-8)" > > + id="rect4136-3-6-5-7" > > + width="101.07784" > > + height="31.998148" > > + x="128.74678" > > + y="80.648842" > > + transform="matrix(1.2452511,0,0,0.98513016,113.15182,641.02594)" > > /> > > + > + style="fill:url(#linearGradient5032-3-9);fill- > > opacity:1;stroke:#000000;stroke-width:0.71606314" > > + id="rect4136-2-6-3" > > + width="125.86729" > > + height="31.522341" > > + x="271.75983" > > + y="718.45435" /> > > + > + xml:space="preserve" > > + style="font-style:normal;font-weight:normal;line-height:0%;font- > > family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill- > > opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke- > > linejoin:miter;stroke-opacity:1" > > + x="306.29599" > > + y="746.50073" > > + id="text4138-6-2-6"> > + sodipodi:role="line" > > + id="tspan4140-1-9-1" > > + x="306.29599" > > + y="746.50073" > > + style="font-size:15px;line-height:1.25">spimdev > > + > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke- > > opacity:1;marker-end:url(#marker4825-6-2)" > > + d="m 329.57309,619.72453 5.0373,97.14447" > > + id="path4661-3" > > + inkscape:connector-curvature="0" > > + sodipodi:nodetypes="cc" /> > > + > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke- > > opacity:1;marker-end:url(#marker4825-6-2-1)" > > + d="m 342.57219,830.63108 -5.67699,-79.2841" > > + id="path4661-3-4" > > + inkscape:connector-curvature="0" > > + sodipodi:nodetypes="cc" /> > > + > + style="fill:#000000;stroke:#000000;stroke- > > width:0.6465112;filter:url(#filter4169-3-5-8-5)" > > + id="rect4136-3-6-5-7-3" > > + width="101.07784" > > + height="31.998148" > > + x="128.74678" > > + y="80.648842" > > + transform="matrix(1.3742742,0,0,0.97786398,101.09126,754.58534)" > > /> > > + > + style="fill:url(#linearGradient5032-3-9-7);fill- > > opacity:1;stroke:#000000;stroke-width:0.74946606" > > + id="rect4136-2-6-3-6" > > + width="138.90866" > > + height="31.289837" > > + x="276.13297" > > + y="831.44263" /> > > + > + xml:space="preserve" > > + style="font-style:normal;font-weight:normal;line-height:0%;font- > > family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill- > > opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke- > > linejoin:miter;stroke-opacity:1" > > + x="295.67819" > > + y="852.98224" > > + id="text4138-6-2-6-1"> > + sodipodi:role="line" > > + id="tspan4140-1-9-1-0" > > + x="295.67819" > > + y="852.98224" > > + style="font-size:15px;line-height:1.25">Device Driver > > + > + xml:space="preserve" > > + style="font-style:normal;font-weight:normal;line-height:0%;font- > > family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill- > > opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke- > > linejoin:miter;stroke-opacity:1" > > + x="349.31198" > > + y="829.46118" > > + id="text4138-6-2-6-1-6"> > + sodipodi:role="line" > > + id="tspan4140-1-9-1-0-3" > > + x="349.31198" > > + y="829.46118" > > + style="font-size:15px;line-height:1.25">* > > + > + xml:space="preserve" > > + style="font-style:normal;font-weight:normal;line-height:0%;font- > > family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill- > > opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke- > > linejoin:miter;stroke-opacity:1" > > + x="349.98282" > > + y="768.698" > > + id="text4138-6-2-6-1-6-2"> > + sodipodi:role="line" > > + id="tspan4140-1-9-1-0-3-0" > > + x="349.98282" > > + y="768.698" > > + style="font-size:15px;line-height:1.25">1 > > + > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke- > > opacity:1;marker-end:url(#marker4825-6-2-6)" > > + d="m 568.1238,614.05402 0.51369,333.80219" > > + id="path4661-3-5" > > + inkscape:connector-curvature="0" > > + sodipodi:nodetypes="cc" /> > > + > + xml:space="preserve" > > + style="font-style:normal;font-weight:normal;line-height:0%;font- > > family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text- > > anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" > > + x="371.8013" > > + y="664.62476" > > + id="text4138-6-2-6-1-6-2-5"> > + sodipodi:role="line" > > + x="371.8013" > > + y="664.62476" > > + id="tspan4274" > > + style="font-size:15px;line- > > height:1.25"><<vfio>> > + sodipodi:role="line" > > + x="371.8013" > > + y="683.37476" > > + id="tspan4305" > > + style="font-size:15px;line-height:1.25">resource > > management > > + > + xml:space="preserve" > > + style="font-style:normal;font-weight:normal;line-height:0%;font- > > family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill- > > opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke- > > linejoin:miter;stroke-opacity:1" > > + x="389.92969" > > + y="587.44836" > > + id="text4138-6-2-6-1-6-2-56"> > + sodipodi:role="line" > > + id="tspan4140-1-9-1-0-3-0-9" > > + x="389.92969" > > + y="587.44836" > > + style="font-size:15px;line-height:1.25">1 > > + > + xml:space="preserve" > > + style="font-style:normal;font-weight:normal;line-height:0%;font- > > family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill- > > opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke- > > linejoin:miter;stroke-opacity:1" > > + x="528.64813" > > + y="600.08429" > > + id="text4138-6-2-6-1-6-3"> > + sodipodi:role="line" > > + id="tspan4140-1-9-1-0-3-7" > > + x="528.64813" > > + y="600.08429" > > + style="font-size:15px;line-height:1.25">* > > + > + style="fill:#000000;stroke:#000000;stroke- > > width:0.6465112;filter:url(#filter4169-3-5-8-54)" > > + id="rect4136-3-6-5-7-4" > > + width="101.07784" > > + height="31.998148" > > + x="128.74678" > > + y="80.648842" > > + transform="matrix(1.3745874,0,0,1.8929066,-132.7754,556.04505)" /> > > + > + style="fill:url(#linearGradient5032-3-9-4);fill- > > opacity:1;stroke:#000000;stroke-width:1.07280123" > > + id="rect4136-2-6-3-4" > > + width="138.91039" > > + height="64.111" > > + x="42.321312" > > + y="704.8371" /> > > + > + xml:space="preserve" > > + style="font-style:normal;font-weight:normal;line-height:0%;font- > > family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill- > > opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke- > > linejoin:miter;stroke-opacity:1" > > + x="110.30745" > > + y="722.94025" > > + id="text4138-6-2-6-3"> > + sodipodi:role="line" > > + x="111.99202" > > + y="722.94025" > > + id="tspan4366" > > + style="font-size:15px;line-height:1.25;text-align:center;text- > > anchor:middle">other standard > + sodipodi:role="line" > > + x="110.30745" > > + y="741.69025" > > + id="tspan4368" > > + style="font-size:15px;line-height:1.25;text-align:center;text- > > anchor:middle">framework > + sodipodi:role="line" > > + x="110.30745" > > + y="760.44025" > > + style="font-size:15px;line-height:1.25;text-align:center;text- > > anchor:middle" > > + id="tspan6840">(crypto/nic/others) > > + > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke- > > opacity:1;marker-end:url(#marker4825-6-2-1-8)" > > + d="M 276.29661,849.04109 134.04449,771.90853" > > + id="path4661-3-4-8" > > + inkscape:connector-curvature="0" > > + sodipodi:nodetypes="cc" /> > > + > + xml:space="preserve" > > + style="font-style:normal;font-weight:normal;line-height:0%;font- > > family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill- > > opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke- > > linejoin:miter;stroke-opacity:1" > > + x="313.70813" > > + y="730.06366" > > + id="text4138-6-2-6-36"> > + sodipodi:role="line" > > + id="tspan4140-1-9-1-7" > > + x="313.70813" > > + y="730.06366" > > + style="font-size:10px;line- > > height:1.25"><<lkm>> > > + > + xml:space="preserve" > > + style="font-style:normal;font-weight:normal;line-height:0%;font- > > family:sans-serif;text-align:start;letter-spacing:0px;word-spacing:0px;text- > > anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke- > > linecap:butt;stroke-linejoin:miter;stroke-opacity:1" > > + x="343.81625" > > + y="786.44141" > > + id="text4138-6-2-6-1-6-2-5-7-5"> > + sodipodi:role="line" > > + x="343.81625" > > + y="786.44141" > > + style="font-size:15px;line-height:1.25;text-align:start;text- > > anchor:start" > > + id="tspan2278">regist > + style="text-align:start;text-anchor:start" > > + id="tspan2280">er as mdev with "share > + sodipodi:role="line" > > + x="343.81625" > > + y="805.19141" > > + style="font-size:15px;line-height:1.25;text-align:start;text- > > anchor:start" > > + id="tspan2357"> > + style="text-align:start;text-anchor:start" > > + id="tspan2359">parent iommu" attribute > > + > + xml:space="preserve" > > + style="font-style:normal;font-weight:normal;line-height:0%;font- > > family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill- > > opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke- > > linejoin:miter;stroke-opacity:1" > > + x="29.145819" > > + y="833.44244" > > + id="text4138-6-2-6-1-6-2-5-7-5-2"> > + sodipodi:role="line" > > + x="29.145819" > > + y="833.44244" > > + id="tspan4301" > > + style="font-size:15px;line-height:1.25">register to other > > subsystem > > + > + xml:space="preserve" > > + style="font-style:normal;font-weight:normal;line-height:0%;font- > > family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill- > > opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke- > > linejoin:miter;stroke-opacity:1" > > + x="301.20813" > > + y="597.29437" > > + id="text4138-6-2-6-36-1"> > + sodipodi:role="line" > > + id="tspan4140-1-9-1-7-2" > > + x="301.20813" > > + y="597.29437" > > + style="font-size:10px;line- > > height:1.25"><<user_lib>> > > + > + xml:space="preserve" > > + style="font-style:normal;font-weight:normal;line-height:0%;font- > > family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text- > > anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" > > + x="649.09613" > > + y="774.4798" > > + id="text4138-6-2-6-1-6-2-5-3"> > + sodipodi:role="line" > > + id="tspan4140-1-9-1-0-3-0-4-6" > > + x="649.09613" > > + y="774.4798" > > + style="font-size:15px;line- > > height:1.25"><<vfio>> > + sodipodi:role="line" > > + x="649.09613" > > + y="793.2298" > > + id="tspan4274-7" > > + style="font-size:15px;line-height:1.25">Hardware > > Accessing > > + > + xml:space="preserve" > > + style="font-style:normal;font-weight:normal;line-height:0%;font- > > family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text- > > anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" > > + x="371.01291" > > + y="529.23682" > > + id="text4138-6-2-6-1-6-2-5-36"> > + sodipodi:role="line" > > + x="371.01291" > > + y="529.23682" > > + id="tspan4305-3" > > + style="font-size:15px;line-height:1.25">wd user api > > + > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" > > + d="m 328.19325,585.87943 0,-23.57142" > > + id="path4348" > > + inkscape:connector-curvature="0" /> > > + > + style="opacity:1;fill:#ffffff;fill-opacity:1;fill- > > rule:evenodd;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke- > > dasharray:none;stroke-dashoffset:0" > > + id="path4350" > > + cx="328.01468" > > + cy="551.95081" > > + rx="11.607142" > > + ry="10.357142" /> > > + > + style="opacity:0.444;fill:url(#linearGradient6836);fill-opacity:1;fill- > > rule:evenodd;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke- > > dasharray:none;stroke-dashoffset:0;filter:url(#filter5382)" > > + id="path4350-2" > > + sodipodi:type="arc" > > + sodipodi:cx="329.44327" > > + sodipodi:cy="553.37933" > > + sodipodi:rx="11.607142" > > + sodipodi:ry="10.357142" > > + sodipodi:start="0" > > + sodipodi:end="6.2509098" > > + d="m 341.05041,553.37933 a 11.607142,10.357142 0 0 1 - > > 11.51349,10.35681 11.607142,10.357142 0 0 1 -11.69928,-10.18967 > > 11.607142,10.357142 0 0 1 11.32469,-10.52124 11.607142,10.357142 0 0 1 > > 11.88204,10.01988" > > + sodipodi:open="true" /> > > + > + xml:space="preserve" > > + style="font-style:normal;font-weight:normal;line-height:0%;font- > > family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text- > > anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" > > + x="543.91455" > > + y="978.22363" > > + id="text4138-6-2-6-1-6-2-5-36-3"> > + sodipodi:role="line" > > + x="543.91455" > > + y="978.22363" > > + id="tspan4305-3-67" > > + style="font-size:15px;line- > > height:1.25">Device(Hardware) > > + > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke- > > opacity:1;marker-end:url(#marker4825-6-2-6-2)" > > + d="m 347.51164,865.4527 153.19752,91.52439" > > + id="path4661-3-5-1" > > + inkscape:connector-curvature="0" > > + sodipodi:nodetypes="cc" /> > > + > + xml:space="preserve" > > + style="font-style:normal;font-weight:normal;font-size:12px;line- > > height:0%;font-family:sans-serif;letter-spacing:0px;word- > > spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke- > > linecap:butt;stroke-linejoin:miter;stroke-opacity:1" > > + x="343.6398" > > + y="716.47754" > > + id="text4138-6-2-6-1-6-2-5-7-5-2-6"> > + sodipodi:role="line" > > + x="343.6398" > > + y="716.47754" > > + id="tspan4301-4" > > + style="font-style:italic;font-variant:normal;font-weight:normal;font- > > stretch:normal;font-size:15px;line-height:1.25;font-family:sans-serif;- > > inkscape-font-specification:'sans-serif Italic';stroke-width:1px">Share > > Parent's IOMMU mdev > > + > > + > > diff --git a/Documentation/warpdrive/wd.svg > > b/Documentation/warpdrive/wd.svg > > new file mode 100644 > > index 000000000000..87ab92ebfbc6 > > --- /dev/null > > +++ b/Documentation/warpdrive/wd.svg > > @@ -0,0 +1,526 @@ > > + > > + > > + > > + > + xmlns:dc="http://purl.org/dc/elements/1.1/" > > + xmlns:cc="http://creativecommons.org/ns#" > > + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" > > + xmlns:svg="http://www.w3.org/2000/svg" > > + xmlns="http://www.w3.org/2000/svg" > > + xmlns:xlink="http://www.w3.org/1999/xlink" > > + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" > > + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" > > + width="210mm" > > + height="116mm" > > + viewBox="0 0 744.09449 411.02338" > > + id="svg2" > > + version="1.1" > > + inkscape:version="0.92.3 (2405546, 2018-03-11)" > > + sodipodi:docname="wd.svg"> > > + > + id="defs4"> > > + > + inkscape:collect="always" > > + id="linearGradient5026"> > > + > + style="stop-color:#f2f2f2;stop-opacity:1;" > > + offset="0" > > + id="stop5028" /> > > + > + style="stop-color:#f2f2f2;stop-opacity:0;" > > + offset="1" > > + id="stop5030" /> > > + > > + > + inkscape:collect="always" > > + xlink:href="#linearGradient5026" > > + id="linearGradient5032-3" > > + x1="353" > > + y1="211.3622" > > + x2="565.5" > > + y2="174.8622" > > + gradientUnits="userSpaceOnUse" > > + gradientTransform="matrix(2.7384117,0,0,0.91666329,- > > 952.8283,571.10143)" /> > > + > + inkscape:collect="always" > > + style="color-interpolation-filters:sRGB" > > + id="filter4169-3-5" > > + x="-0.031597666" > > + width="1.0631953" > > + y="-0.099812768" > > + height="1.1996255"> > > + > + inkscape:collect="always" > > + stdDeviation="1.3307599" > > + id="feGaussianBlur4171-6-3" /> > > + > > + > + markerWidth="18.960653" > > + markerHeight="11.194658" > > + refX="9.4803267" > > + refY="5.5973287" > > + orient="auto" > > + id="marker4613"> > > + > + y="-5.1589785" > > + x="5.8504119" > > + height="10.317957" > > + width="10.317957" > > + id="rect4212" > > + style="fill:#ffffff;stroke:#000000;stroke-width:0.69143367;stroke- > > miterlimit:4;stroke-dasharray:none" > > + transform="matrix(0.86111274,0.50841405,- > > 0.86111274,0.50841405,0,0)"> > > + > + id="title4262">generation > > + > > + > > + > + markerWidth="11.227358" > > + markerHeight="12.355258" > > + refX="10" > > + refY="6.177629" > > + orient="auto" > > + id="marker4825"> > > + > + inkscape:connector-curvature="0" > > + id="path4757" > > + d="M 0.42024733,0.42806444 10.231357,6.3500844 > > 0.24347733,11.918544" > > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> > > + > > + > + markerWidth="11.227358" > > + markerHeight="12.355258" > > + refX="10" > > + refY="6.177629" > > + orient="auto" > > + id="marker4825-6"> > > + > + inkscape:connector-curvature="0" > > + id="path4757-1" > > + d="M 0.42024733,0.42806444 10.231357,6.3500844 > > 0.24347733,11.918544" > > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> > > + > > + > + inkscape:collect="always" > > + xlink:href="#linearGradient5026" > > + id="linearGradient5032-3-9" > > + x1="353" > > + y1="211.3622" > > + x2="565.5" > > + y2="174.8622" > > + gradientUnits="userSpaceOnUse" > > + gradientTransform="matrix(1.2452511,0,0,0.98513016,- > > 190.95632,540.33156)" /> > > + > + markerWidth="11.227358" > > + markerHeight="12.355258" > > + refX="10" > > + refY="6.177629" > > + orient="auto" > > + id="marker4825-6-2"> > > + > + inkscape:connector-curvature="0" > > + id="path4757-1-9" > > + d="M 0.42024733,0.42806444 10.231357,6.3500844 > > 0.24347733,11.918544" > > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> > > + > > + > + markerWidth="11.227358" > > + markerHeight="12.355258" > > + refX="10" > > + refY="6.177629" > > + orient="auto" > > + id="marker4825-6-2-1"> > > + > + inkscape:connector-curvature="0" > > + id="path4757-1-9-9" > > + d="M 0.42024733,0.42806444 10.231357,6.3500844 > > 0.24347733,11.918544" > > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> > > + > > + > + markerWidth="11.227358" > > + markerHeight="12.355258" > > + refX="10" > > + refY="6.177629" > > + orient="auto" > > + id="marker4825-6-2-6"> > > + > + inkscape:connector-curvature="0" > > + id="path4757-1-9-1" > > + d="M 0.42024733,0.42806444 10.231357,6.3500844 > > 0.24347733,11.918544" > > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> > > + > > + > + markerWidth="11.227358" > > + markerHeight="12.355258" > > + refX="10" > > + refY="6.177629" > > + orient="auto" > > + id="marker4825-6-2-1-8"> > > + > + inkscape:connector-curvature="0" > > + id="path4757-1-9-9-6" > > + d="M 0.42024733,0.42806444 10.231357,6.3500844 > > 0.24347733,11.918544" > > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> > > + > > + > + markerWidth="11.227358" > > + markerHeight="12.355258" > > + refX="10" > > + refY="6.177629" > > + orient="auto" > > + id="marker4825-6-2-1-8-8"> > > + > + inkscape:connector-curvature="0" > > + id="path4757-1-9-9-6-9" > > + d="M 0.42024733,0.42806444 10.231357,6.3500844 > > 0.24347733,11.918544" > > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> > > + > > + > + markerWidth="11.227358" > > + markerHeight="12.355258" > > + refX="10" > > + refY="6.177629" > > + orient="auto" > > + id="marker4825-6-0"> > > + > + inkscape:connector-curvature="0" > > + id="path4757-1-93" > > + d="M 0.42024733,0.42806444 10.231357,6.3500844 > > 0.24347733,11.918544" > > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> > > + > > + > + markerWidth="11.227358" > > + markerHeight="12.355258" > > + refX="10" > > + refY="6.177629" > > + orient="auto" > > + id="marker4825-6-0-2"> > > + > + inkscape:connector-curvature="0" > > + id="path4757-1-93-6" > > + d="M 0.42024733,0.42806444 10.231357,6.3500844 > > 0.24347733,11.918544" > > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> > > + > > + > + markerWidth="11.227358" > > + markerHeight="12.355258" > > + refX="10" > > + refY="6.177629" > > + orient="auto" > > + id="marker4825-6-2-6-2"> > > + > + inkscape:connector-curvature="0" > > + id="path4757-1-9-1-9" > > + d="M 0.42024733,0.42806444 10.231357,6.3500844 > > 0.24347733,11.918544" > > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> > > + > > + > + inkscape:collect="always" > > + xlink:href="#linearGradient5026" > > + id="linearGradient5032-3-8" > > + x1="353" > > + y1="211.3622" > > + x2="565.5" > > + y2="174.8622" > > + gradientUnits="userSpaceOnUse" > > + gradientTransform="matrix(1.0104674,0,0,1.0052679,- > > 218.642,661.15448)" /> > > + > + inkscape:collect="always" > > + style="color-interpolation-filters:sRGB" > > + id="filter4169-3-5-8" > > + x="-0.031597666" > > + width="1.0631953" > > + y="-0.099812768" > > + height="1.1996255"> > > + > + inkscape:collect="always" > > + stdDeviation="1.3307599" > > + id="feGaussianBlur4171-6-3-9" /> > > + > > + > + inkscape:collect="always" > > + xlink:href="#linearGradient5026" > > + id="linearGradient5032-3-8-2" > > + x1="353" > > + y1="211.3622" > > + x2="565.5" > > + y2="174.8622" > > + gradientUnits="userSpaceOnUse" > > + gradientTransform="matrix(2.1450559,0,0,1.0052679,- > > 521.97704,740.76422)" /> > > + > + inkscape:collect="always" > > + style="color-interpolation-filters:sRGB" > > + id="filter4169-3-5-8-5" > > + x="-0.031597666" > > + width="1.0631953" > > + y="-0.099812768" > > + height="1.1996255"> > > + > + inkscape:collect="always" > > + stdDeviation="1.3307599" > > + id="feGaussianBlur4171-6-3-9-1" /> > > + > > + > + inkscape:collect="always" > > + xlink:href="#linearGradient5026" > > + id="linearGradient5032-3-8-0" > > + x1="353" > > + y1="211.3622" > > + x2="565.5" > > + y2="174.8622" > > + gradientUnits="userSpaceOnUse" > > + > > gradientTransform="matrix(1.0104674,0,0,1.0052679,83.456748,660.20747 > > )" /> > > + > + inkscape:collect="always" > > + style="color-interpolation-filters:sRGB" > > + id="filter4169-3-5-8-6" > > + x="-0.031597666" > > + width="1.0631953" > > + y="-0.099812768" > > + height="1.1996255"> > > + > + inkscape:collect="always" > > + stdDeviation="1.3307599" > > + id="feGaussianBlur4171-6-3-9-2" /> > > + > > + > + inkscape:collect="always" > > + xlink:href="#linearGradient5026" > > + id="linearGradient5032-3-84" > > + x1="353" > > + y1="211.3622" > > + x2="565.5" > > + y2="174.8622" > > + gradientUnits="userSpaceOnUse" > > + gradientTransform="matrix(1.9884948,0,0,0.94903536,- > > 318.42665,564.37696)" /> > > + > + inkscape:collect="always" > > + style="color-interpolation-filters:sRGB" > > + id="filter4169-3-5-4" > > + x="-0.031597666" > > + width="1.0631953" > > + y="-0.099812768" > > + height="1.1996255"> > > + > + inkscape:collect="always" > > + stdDeviation="1.3307599" > > + id="feGaussianBlur4171-6-3-0" /> > > + > > + > + markerWidth="11.227358" > > + markerHeight="12.355258" > > + refX="10" > > + refY="6.177629" > > + orient="auto" > > + id="marker4825-6-0-0"> > > + > + inkscape:connector-curvature="0" > > + id="path4757-1-93-8" > > + d="M 0.42024733,0.42806444 10.231357,6.3500844 > > 0.24347733,11.918544" > > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> > > + > > + > + markerWidth="11.227358" > > + markerHeight="12.355258" > > + refX="10" > > + refY="6.177629" > > + orient="auto" > > + id="marker4825-6-3"> > > + > + inkscape:connector-curvature="0" > > + id="path4757-1-1" > > + d="M 0.42024733,0.42806444 10.231357,6.3500844 > > 0.24347733,11.918544" > > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> > > + > > + > > + > + id="base" > > + pagecolor="#ffffff" > > + bordercolor="#666666" > > + borderopacity="1.0" > > + inkscape:pageopacity="0.0" > > + inkscape:pageshadow="2" > > + inkscape:zoom="0.98994949" > > + inkscape:cx="457.47339" > > + inkscape:cy="250.14781" > > + inkscape:document-units="px" > > + inkscape:current-layer="layer1" > > + showgrid="false" > > + inkscape:window-width="1916" > > + inkscape:window-height="1033" > > + inkscape:window-x="0" > > + inkscape:window-y="22" > > + inkscape:window-maximized="0" > > + fit-margin-right="0.3" /> > > + > + id="metadata7"> > > + > > + > + rdf:about=""> > > + image/svg+xml > > + > + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> > > + > > + > > + > > + > > + > + inkscape:label="Layer 1" > > + inkscape:groupmode="layer" > > + id="layer1" > > + transform="translate(0,-641.33861)"> > > + > + style="fill:#000000;stroke:#000000;stroke- > > width:0.6465112;filter:url(#filter4169-3-5)" > > + id="rect4136-3-6-5" > > + width="101.07784" > > + height="31.998148" > > + x="128.74678" > > + y="80.648842" > > + transform="matrix(2.7384116,0,0,0.91666328,-284.06895,664.79751)" > > /> > > + > + style="fill:url(#linearGradient5032-3);fill- > > opacity:1;stroke:#000000;stroke-width:1.02430749" > > + id="rect4136-2-6" > > + width="276.79272" > > + height="29.331528" > > + x="64.723419" > > + y="736.84473" /> > > + > + xml:space="preserve" > > + style="font-style:normal;font-weight:normal;line-height:0%;font- > > family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill- > > opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke- > > linejoin:miter;stroke-opacity:1" > > + x="78.223282" > > + y="756.79803" > > + id="text4138-6-2"> > + sodipodi:role="line" > > + id="tspan4140-1-9" > > + x="78.223282" > > + y="756.79803" > > + style="font-size:15px;line-height:1.25">user application (running by > > the CPU > > + > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke- > > opacity:1;marker-end:url(#marker4825-6)" > > + d="m 217.67507,876.6738 113.40331,45.0758" > > + id="path4661" > > + inkscape:connector-curvature="0" > > + sodipodi:nodetypes="cc" /> > > + > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke- > > opacity:1;marker-end:url(#marker4825-6-0)" > > + d="m 208.10197,767.69811 0.29362,76.03656" > > + id="path4661-6" > > + inkscape:connector-curvature="0" > > + sodipodi:nodetypes="cc" /> > > + > + style="fill:#000000;stroke:#000000;stroke- > > width:0.6465112;filter:url(#filter4169-3-5-8)" > > + id="rect4136-3-6-5-3" > > + width="101.07784" > > + height="31.998148" > > + x="128.74678" > > + y="80.648842" > > + transform="matrix(1.0104673,0,0,1.0052679,28.128628,763.90722)" /> > > + > + style="fill:url(#linearGradient5032-3-8);fill- > > opacity:1;stroke:#000000;stroke-width:0.65159565" > > + id="rect4136-2-6-6" > > + width="102.13586" > > + height="32.16671" > > + x="156.83217" > > + y="842.91852" /> > > + > + xml:space="preserve" > > + style="font-style:normal;font-weight:normal;font-size:12px;line- > > height:0%;font-family:sans-serif;letter-spacing:0px;word- > > spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke- > > linecap:butt;stroke-linejoin:miter;stroke-opacity:1" > > + x="188.58519" > > + y="864.47125" > > + id="text4138-6-2-8"> > + sodipodi:role="line" > > + id="tspan4140-1-9-0" > > + x="188.58519" > > + y="864.47125" > > + style="font-size:15px;line-height:1.25;stroke- > > width:1px">MMU > > + > + style="fill:#000000;stroke:#000000;stroke- > > width:0.6465112;filter:url(#filter4169-3-5-8-5)" > > + id="rect4136-3-6-5-3-1" > > + width="101.07784" > > + height="31.998148" > > + x="128.74678" > > + y="80.648842" > > + transform="matrix(2.1450556,0,0,1.0052679,1.87637,843.51696)" /> > > + > + style="fill:url(#linearGradient5032-3-8-2);fill- > > opacity:1;stroke:#000000;stroke-width:0.94937181" > > + id="rect4136-2-6-6-0" > > + width="216.8176" > > + height="32.16671" > > + x="275.09283" > > + y="922.5282" /> > > + > + xml:space="preserve" > > + style="font-style:normal;font-weight:normal;font-size:12px;line- > > height:0%;font-family:sans-serif;letter-spacing:0px;word- > > spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke- > > linecap:butt;stroke-linejoin:miter;stroke-opacity:1" > > + x="347.81482" > > + y="943.23291" > > + id="text4138-6-2-8-8"> > + sodipodi:role="line" > > + id="tspan4140-1-9-0-5" > > + x="347.81482" > > + y="943.23291" > > + style="font-size:15px;line-height:1.25;stroke- > > width:1px">Memory > > + > + style="fill:#000000;stroke:#000000;stroke- > > width:0.6465112;filter:url(#filter4169-3-5-8-6)" > > + id="rect4136-3-6-5-3-5" > > + width="101.07784" > > + height="31.998148" > > + x="128.74678" > > + y="80.648842" > > + transform="matrix(1.0104673,0,0,1.0052679,330.22737,762.9602)" /> > > + > + style="fill:url(#linearGradient5032-3-8-0);fill- > > opacity:1;stroke:#000000;stroke-width:0.65159565" > > + id="rect4136-2-6-6-8" > > + width="102.13586" > > + height="32.16671" > > + x="458.93091" > > + y="841.9715" /> > > + > + xml:space="preserve" > > + style="font-style:normal;font-weight:normal;font-size:12px;line- > > height:0%;font-family:sans-serif;letter-spacing:0px;word- > > spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke- > > linecap:butt;stroke-linejoin:miter;stroke-opacity:1" > > + x="490.68393" > > + y="863.52423" > > + id="text4138-6-2-8-6"> > + sodipodi:role="line" > > + id="tspan4140-1-9-0-2" > > + x="490.68393" > > + y="863.52423" > > + style="font-size:15px;line-height:1.25;stroke- > > width:1px">IOMMU > > + > + style="fill:#000000;stroke:#000000;stroke- > > width:0.6465112;filter:url(#filter4169-3-5-4)" > > + id="rect4136-3-6-5-6" > > + width="101.07784" > > + height="31.998148" > > + x="128.74678" > > + y="80.648842" > > + transform="matrix(1.9884947,0,0,0.94903537,167.19229,661.38193)" > > /> > > + > + style="fill:url(#linearGradient5032-3-84);fill- > > opacity:1;stroke:#000000;stroke-width:0.88813609" > > + id="rect4136-2-6-2" > > + width="200.99274" > > + height="30.367374" > > + x="420.4675" > > + y="735.97351" /> > > + > + xml:space="preserve" > > + style="font-style:normal;font-weight:normal;font-size:12px;line- > > height:0%;font-family:sans-serif;letter-spacing:0px;word- > > spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke- > > linecap:butt;stroke-linejoin:miter;stroke-opacity:1" > > + x="441.95297" > > + y="755.9068" > > + id="text4138-6-2-9"> > + sodipodi:role="line" > > + id="tspan4140-1-9-9" > > + x="441.95297" > > + y="755.9068" > > + style="font-size:15px;line-height:1.25;stroke-width:1px">Hardware > > Accelerator > > + > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke- > > opacity:1;marker-end:url(#marker4825-6-0-0)" > > + d="m 508.2914,766.55885 0.29362,76.03656" > > + id="path4661-6-1" > > + inkscape:connector-curvature="0" > > + sodipodi:nodetypes="cc" /> > > + > + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke- > > width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke- > > opacity:1;marker-end:url(#marker4825-6-3)" > > + d="M 499.70201,876.47297 361.38296,920.80258" > > + id="path4661-1" > > + inkscape:connector-curvature="0" > > + sodipodi:nodetypes="cc" /> > > + > > + > > -- > > 2.17.1 -- -Kenneth(Hisilicon) ================================================================================ 本邮件及其附件含有华为公司的保密信息,仅限于发送给上面地址中列出的个人或群组。禁 止任何其他人以任何形式使用(包括但不限于全部或部分地泄露、复制、或散发)本邮件中 的信息。如果您错收了本邮件,请您立即电话或邮件通知发件人并删除本邮件! This e-mail and its attachments contain confidential information from HUAWEI, which is intended only for the person or entity whose address is listed above. Any use of the information contained herein in any way (including, but not limited to, total or partial disclosure, reproduction, or dissemination) by persons other than the intended recipient(s) is prohibited. If you receive this e-mail in error, please notify the sender by phone or email immediately and delete it!