From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dario Faggioli Subject: Re: [PATCH 3/3] tools: sched: add support for 'null' scheduler Date: Fri, 7 Apr 2017 12:05:01 +0200 Message-ID: <1491559501.3287.4.camel@citrix.com> References: <148977585611.29510.906390949919041674.stgit@Palanthas.fritz.box> <148977619315.29510.17519562424807312146.stgit@Palanthas.fritz.box> <8c57725d-4bb7-7bd2-c74f-24486531ce94@citrix.com> <1491475775.18721.14.camel@citrix.com> <7f8ce88d-6f0b-196b-b237-f4213d12a6cc@citrix.com> <1491491913.18721.22.camel@citrix.com> <20170407094212.obuxuv3dejrhb7vi@citrix.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="===============8479137435034599295==" Return-path: Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cwQlq-0000i7-6h for xen-devel@lists.xenproject.org; Fri, 07 Apr 2017 10:05:34 +0000 In-Reply-To: <20170407094212.obuxuv3dejrhb7vi@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Wei Liu Cc: Stefano Stabellini , xen-devel@lists.xenproject.org, Julien Grall , Ian Jackson , George Dunlap List-Id: xen-devel@lists.xenproject.org --===============8479137435034599295== Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="=-wvl67X7EJARrNB3u85CM" --=-wvl67X7EJARrNB3u85CM Content-Type: multipart/mixed; boundary="=-4js4Of3D1/Lzu6OW0S6T" --=-4js4Of3D1/Lzu6OW0S6T Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, 2017-04-07 at 10:42 +0100, Wei Liu wrote: > On Thu, Apr 06, 2017 at 05:18:33PM +0200, Dario Faggioli wrote: > >=20 > > Wei acked this patch in v1 (20170321170902.ndk6h5ylyfkk4coo@citrix. > > com) > > but that was before you raised this, so I'm happy to resend with > > this > > changed, and doing whatever he prefers with his ack. > >=20 > > Wei? >=20 > I don't feel strongly about this. But if you want to return success > in > the get function, please make sure you initialise output to a known > state, instead of returning random garbage. >=20 Sure. That should not be a problem, as libxl_domain_sched_params_get() calls, as the first thing it does, libxl_domain_sched_params_init(), which sets all scinfo fields to their default. Whatever I return, I won't touch scinfo at all, which means I'm just returning those defaults. So, can the below patch --which would make George much happier :-D --also have your Ack? Thanks and Regards, Dario --- tools: sched: add support for 'null' scheduler From: Dario Faggioli It being very very basic, also means this scheduler does not need much support at the tools level (for now). Basically, just the definition of the symbol of the scheduler itself and a couple of stubs. Signed-off-by: Dario Faggioli --- tools/libxl/libxl.h | 6 ++++++ tools/libxl/libxl_sched.c | 24 ++++++++++++++++++++++++ tools/libxl/libxl_types.idl | 1 + 3 files changed, 31 insertions(+) diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h index a402236..cf8687a 100644 --- a/tools/libxl/libxl.h +++ b/tools/libxl/libxl.h @@ -210,6 +210,12 @@ #define LIBXL_HAVE_SCHED_RTDS 1 =20 /* + * LIBXL_HAVE_SCHED_NULL indicates that the 'null' static scheduler + * is available. + */ +#define LIBXL_HAVE_SCHED_NULL 1 + +/* * libxl_domain_build_info has u.hvm.viridian_enable and _disable bitmaps * of the specified width. */ diff --git a/tools/libxl/libxl_sched.c b/tools/libxl/libxl_sched.c index 84d3837..d763b9a 100644 --- a/tools/libxl/libxl_sched.c +++ b/tools/libxl/libxl_sched.c @@ -178,6 +178,20 @@ static int sched_arinc653_domain_set(libxl__gc *gc, ui= nt32_t domid, return 0; } =20 +static int sched_null_domain_set(libxl__gc *gc, uint32_t domid, + const libxl_domain_sched_params *scinfo) +{ + /* There aren't any domain-specific parameters to be set. */ + return 0; +} + +static int sched_null_domain_get(libxl__gc *gc, uint32_t domid, + libxl_domain_sched_params *scinfo) +{ + /* There aren't any domain-specific parameters to return. */ + return 0; +} + static int sched_credit_domain_get(libxl__gc *gc, uint32_t domid, libxl_domain_sched_params *scinfo) { @@ -730,6 +744,9 @@ int libxl_domain_sched_params_set(libxl_ctx *ctx, uint3= 2_t domid, case LIBXL_SCHEDULER_RTDS: ret=3Dsched_rtds_domain_set(gc, domid, scinfo); break; + case LIBXL_SCHEDULER_NULL: + ret=3Dsched_null_domain_set(gc, domid, scinfo); + break; default: LOGD(ERROR, domid, "Unknown scheduler"); ret=3DERROR_INVAL; @@ -758,6 +775,7 @@ int libxl_vcpu_sched_params_set(libxl_ctx *ctx, uint32_= t domid, case LIBXL_SCHEDULER_CREDIT: case LIBXL_SCHEDULER_CREDIT2: case LIBXL_SCHEDULER_ARINC653: + case LIBXL_SCHEDULER_NULL: LOGD(ERROR, domid, "per-VCPU parameter setting not supported for t= his scheduler"); rc =3D ERROR_INVAL; break; @@ -792,6 +810,7 @@ int libxl_vcpu_sched_params_set_all(libxl_ctx *ctx, uin= t32_t domid, case LIBXL_SCHEDULER_CREDIT: case LIBXL_SCHEDULER_CREDIT2: case LIBXL_SCHEDULER_ARINC653: + case LIBXL_SCHEDULER_NULL: LOGD(ERROR, domid, "per-VCPU parameter setting not supported for t= his scheduler"); rc =3D ERROR_INVAL; break; @@ -832,6 +851,9 @@ int libxl_domain_sched_params_get(libxl_ctx *ctx, uint3= 2_t domid, case LIBXL_SCHEDULER_RTDS: ret=3Dsched_rtds_domain_get(gc, domid, scinfo); break; + case LIBXL_SCHEDULER_NULL: + ret=3Dsched_null_domain_get(gc, domid, scinfo); + break; default: LOGD(ERROR, domid, "Unknown scheduler"); ret=3DERROR_INVAL; @@ -858,6 +880,7 @@ int libxl_vcpu_sched_params_get(libxl_ctx *ctx, uint32_= t domid, case LIBXL_SCHEDULER_CREDIT: case LIBXL_SCHEDULER_CREDIT2: case LIBXL_SCHEDULER_ARINC653: + case LIBXL_SCHEDULER_NULL: LOGD(ERROR, domid, "per-VCPU parameter getting not supported for t= his scheduler"); rc =3D ERROR_INVAL; break; @@ -890,6 +913,7 @@ int libxl_vcpu_sched_params_get_all(libxl_ctx *ctx, uin= t32_t domid, case LIBXL_SCHEDULER_CREDIT: case LIBXL_SCHEDULER_CREDIT2: case LIBXL_SCHEDULER_ARINC653: + case LIBXL_SCHEDULER_NULL: LOGD(ERROR, domid, "per-VCPU parameter getting not supported for t= his scheduler"); rc =3D ERROR_INVAL; break; diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl index d970284..d42f6a1 100644 --- a/tools/libxl/libxl_types.idl +++ b/tools/libxl/libxl_types.idl @@ -191,6 +191,7 @@ libxl_scheduler =3D Enumeration("scheduler", [ (6, "credit2"), (7, "arinc653"), (8, "rtds"), + (9, "null"), ]) =20 # Consistent with SHUTDOWN_* in sched.h (apart from UNKNOWN) --=20 <> (Raistlin Majere) ----------------------------------------------------------------- Dario Faggioli, Ph.D, http://about.me/dario.faggioli Senior Software Engineer, Citrix Systems R&D Ltd., Cambridge (UK) --=-4js4Of3D1/Lzu6OW0S6T Content-Disposition: attachment; filename="tools-sched-add-support-for.patch" Content-Type: text/x-patch; name="tools-sched-add-support-for.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 dG9vbHM6IHNjaGVkOiBhZGQgc3VwcG9ydCBmb3IgJ251bGwnIHNjaGVkdWxlcgoKRnJvbTogRGFy aW8gRmFnZ2lvbGkgPGRhcmlvLmZhZ2dpb2xpQGNpdHJpeC5jb20+CgpJdCBiZWluZyB2ZXJ5IHZl cnkgYmFzaWMsIGFsc28gbWVhbnMgdGhpcyBzY2hlZHVsZXIgZG9lcwpub3QgbmVlZCBtdWNoIHN1 cHBvcnQgYXQgdGhlIHRvb2xzIGxldmVsIChmb3Igbm93KS4KCkJhc2ljYWxseSwganVzdCB0aGUg ZGVmaW5pdGlvbiBvZiB0aGUgc3ltYm9sIG9mIHRoZQpzY2hlZHVsZXIgaXRzZWxmIGFuZCBhIGNv dXBsZSBvZiBzdHVicy4KClNpZ25lZC1vZmYtYnk6IERhcmlvIEZhZ2dpb2xpIDxkYXJpby5mYWdn aW9saUBjaXRyaXguY29tPgpBY2tlZC1ieTogV2VpIExpdSA8d2VpLmxpdTJAY2l0cml4LmNvbT4K QWNrZWQtYnk6IFN0ZWZhbm8gU3RhYmVsbGluaSA8c3RlZmFub0BhcG9yZXRvLmNvbT4KLS0tCkNj OiBJYW4gSmFja3NvbiA8aWFuLmphY2tzb25AZXUuY2l0cml4LmNvbT4KQ2M6IEdlb3JnZSBEdW5s YXAgPGdlb3JnZS5kdW5sYXBAY2l0cml4LmNvbT4KQ2M6IEp1bGllbiBHcmFsbCA8anVsaWVuLmdy YWxsQGFybS5jb20+Ci0tLQogdG9vbHMvbGlieGwvbGlieGwuaCAgICAgICAgIHwgICAgNiArKysr KysKIHRvb2xzL2xpYnhsL2xpYnhsX3NjaGVkLmMgICB8ICAgMjQgKysrKysrKysrKysrKysrKysr KysrKysrCiB0b29scy9saWJ4bC9saWJ4bF90eXBlcy5pZGwgfCAgICAxICsKIDMgZmlsZXMgY2hh bmdlZCwgMzEgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL2xpYnhsLmgg Yi90b29scy9saWJ4bC9saWJ4bC5oCmluZGV4IGE0MDIyMzYuLmNmODY4N2EgMTAwNjQ0Ci0tLSBh L3Rvb2xzL2xpYnhsL2xpYnhsLmgKKysrIGIvdG9vbHMvbGlieGwvbGlieGwuaApAQCAtMjEwLDYg KzIxMCwxMiBAQAogI2RlZmluZSBMSUJYTF9IQVZFX1NDSEVEX1JURFMgMQogCiAvKgorICogTElC WExfSEFWRV9TQ0hFRF9OVUxMIGluZGljYXRlcyB0aGF0IHRoZSAnbnVsbCcgc3RhdGljIHNjaGVk dWxlcgorICogaXMgYXZhaWxhYmxlLgorICovCisjZGVmaW5lIExJQlhMX0hBVkVfU0NIRURfTlVM TCAxCisKKy8qCiAgKiBsaWJ4bF9kb21haW5fYnVpbGRfaW5mbyBoYXMgdS5odm0udmlyaWRpYW5f ZW5hYmxlIGFuZCBfZGlzYWJsZSBiaXRtYXBzCiAgKiBvZiB0aGUgc3BlY2lmaWVkIHdpZHRoLgog ICovCmRpZmYgLS1naXQgYS90b29scy9saWJ4bC9saWJ4bF9zY2hlZC5jIGIvdG9vbHMvbGlieGwv bGlieGxfc2NoZWQuYwppbmRleCA4NGQzODM3Li5kNzYzYjlhIDEwMDY0NAotLS0gYS90b29scy9s aWJ4bC9saWJ4bF9zY2hlZC5jCisrKyBiL3Rvb2xzL2xpYnhsL2xpYnhsX3NjaGVkLmMKQEAgLTE3 OCw2ICsxNzgsMjAgQEAgc3RhdGljIGludCBzY2hlZF9hcmluYzY1M19kb21haW5fc2V0KGxpYnhs X19nYyAqZ2MsIHVpbnQzMl90IGRvbWlkLAogICAgIHJldHVybiAwOwogfQogCitzdGF0aWMgaW50 IHNjaGVkX251bGxfZG9tYWluX3NldChsaWJ4bF9fZ2MgKmdjLCB1aW50MzJfdCBkb21pZCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpYnhsX2RvbWFpbl9zY2hlZF9w YXJhbXMgKnNjaW5mbykKK3sKKyAgICAvKiBUaGVyZSBhcmVuJ3QgYW55IGRvbWFpbi1zcGVjaWZp YyBwYXJhbWV0ZXJzIHRvIGJlIHNldC4gKi8KKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGlu dCBzY2hlZF9udWxsX2RvbWFpbl9nZXQobGlieGxfX2djICpnYywgdWludDMyX3QgZG9taWQsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZG9tYWluX3NjaGVkX3BhcmFtcyAq c2NpbmZvKQoreworICAgIC8qIFRoZXJlIGFyZW4ndCBhbnkgZG9tYWluLXNwZWNpZmljIHBhcmFt ZXRlcnMgdG8gcmV0dXJuLiAqLworICAgIHJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHNjaGVk X2NyZWRpdF9kb21haW5fZ2V0KGxpYnhsX19nYyAqZ2MsIHVpbnQzMl90IGRvbWlkLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kb21haW5fc2NoZWRfcGFyYW1zICpz Y2luZm8pCiB7CkBAIC03MzAsNiArNzQ0LDkgQEAgaW50IGxpYnhsX2RvbWFpbl9zY2hlZF9wYXJh bXNfc2V0KGxpYnhsX2N0eCAqY3R4LCB1aW50MzJfdCBkb21pZCwKICAgICBjYXNlIExJQlhMX1ND SEVEVUxFUl9SVERTOgogICAgICAgICByZXQ9c2NoZWRfcnRkc19kb21haW5fc2V0KGdjLCBkb21p ZCwgc2NpbmZvKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMSUJYTF9TQ0hFRFVMRVJfTlVM TDoKKyAgICAgICAgcmV0PXNjaGVkX251bGxfZG9tYWluX3NldChnYywgZG9taWQsIHNjaW5mbyk7 CisgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIExPR0QoRVJST1IsIGRvbWlk LCAiVW5rbm93biBzY2hlZHVsZXIiKTsKICAgICAgICAgcmV0PUVSUk9SX0lOVkFMOwpAQCAtNzU4 LDYgKzc3NSw3IEBAIGludCBsaWJ4bF92Y3B1X3NjaGVkX3BhcmFtc19zZXQobGlieGxfY3R4ICpj dHgsIHVpbnQzMl90IGRvbWlkLAogICAgIGNhc2UgTElCWExfU0NIRURVTEVSX0NSRURJVDoKICAg ICBjYXNlIExJQlhMX1NDSEVEVUxFUl9DUkVESVQyOgogICAgIGNhc2UgTElCWExfU0NIRURVTEVS X0FSSU5DNjUzOgorICAgIGNhc2UgTElCWExfU0NIRURVTEVSX05VTEw6CiAgICAgICAgIExPR0Qo RVJST1IsIGRvbWlkLCAicGVyLVZDUFUgcGFyYW1ldGVyIHNldHRpbmcgbm90IHN1cHBvcnRlZCBm b3IgdGhpcyBzY2hlZHVsZXIiKTsKICAgICAgICAgcmMgPSBFUlJPUl9JTlZBTDsKICAgICAgICAg YnJlYWs7CkBAIC03OTIsNiArODEwLDcgQEAgaW50IGxpYnhsX3ZjcHVfc2NoZWRfcGFyYW1zX3Nl dF9hbGwobGlieGxfY3R4ICpjdHgsIHVpbnQzMl90IGRvbWlkLAogICAgIGNhc2UgTElCWExfU0NI RURVTEVSX0NSRURJVDoKICAgICBjYXNlIExJQlhMX1NDSEVEVUxFUl9DUkVESVQyOgogICAgIGNh c2UgTElCWExfU0NIRURVTEVSX0FSSU5DNjUzOgorICAgIGNhc2UgTElCWExfU0NIRURVTEVSX05V TEw6CiAgICAgICAgIExPR0QoRVJST1IsIGRvbWlkLCAicGVyLVZDUFUgcGFyYW1ldGVyIHNldHRp bmcgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBzY2hlZHVsZXIiKTsKICAgICAgICAgcmMgPSBFUlJP Ul9JTlZBTDsKICAgICAgICAgYnJlYWs7CkBAIC04MzIsNiArODUxLDkgQEAgaW50IGxpYnhsX2Rv bWFpbl9zY2hlZF9wYXJhbXNfZ2V0KGxpYnhsX2N0eCAqY3R4LCB1aW50MzJfdCBkb21pZCwKICAg ICBjYXNlIExJQlhMX1NDSEVEVUxFUl9SVERTOgogICAgICAgICByZXQ9c2NoZWRfcnRkc19kb21h aW5fZ2V0KGdjLCBkb21pZCwgc2NpbmZvKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMSUJY TF9TQ0hFRFVMRVJfTlVMTDoKKyAgICAgICAgcmV0PXNjaGVkX251bGxfZG9tYWluX2dldChnYywg ZG9taWQsIHNjaW5mbyk7CisgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIExP R0QoRVJST1IsIGRvbWlkLCAiVW5rbm93biBzY2hlZHVsZXIiKTsKICAgICAgICAgcmV0PUVSUk9S X0lOVkFMOwpAQCAtODU4LDYgKzg4MCw3IEBAIGludCBsaWJ4bF92Y3B1X3NjaGVkX3BhcmFtc19n ZXQobGlieGxfY3R4ICpjdHgsIHVpbnQzMl90IGRvbWlkLAogICAgIGNhc2UgTElCWExfU0NIRURV TEVSX0NSRURJVDoKICAgICBjYXNlIExJQlhMX1NDSEVEVUxFUl9DUkVESVQyOgogICAgIGNhc2Ug TElCWExfU0NIRURVTEVSX0FSSU5DNjUzOgorICAgIGNhc2UgTElCWExfU0NIRURVTEVSX05VTEw6 CiAgICAgICAgIExPR0QoRVJST1IsIGRvbWlkLCAicGVyLVZDUFUgcGFyYW1ldGVyIGdldHRpbmcg bm90IHN1cHBvcnRlZCBmb3IgdGhpcyBzY2hlZHVsZXIiKTsKICAgICAgICAgcmMgPSBFUlJPUl9J TlZBTDsKICAgICAgICAgYnJlYWs7CkBAIC04OTAsNiArOTEzLDcgQEAgaW50IGxpYnhsX3ZjcHVf c2NoZWRfcGFyYW1zX2dldF9hbGwobGlieGxfY3R4ICpjdHgsIHVpbnQzMl90IGRvbWlkLAogICAg IGNhc2UgTElCWExfU0NIRURVTEVSX0NSRURJVDoKICAgICBjYXNlIExJQlhMX1NDSEVEVUxFUl9D UkVESVQyOgogICAgIGNhc2UgTElCWExfU0NIRURVTEVSX0FSSU5DNjUzOgorICAgIGNhc2UgTElC WExfU0NIRURVTEVSX05VTEw6CiAgICAgICAgIExPR0QoRVJST1IsIGRvbWlkLCAicGVyLVZDUFUg cGFyYW1ldGVyIGdldHRpbmcgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBzY2hlZHVsZXIiKTsKICAg ICAgICAgcmMgPSBFUlJPUl9JTlZBTDsKICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS90b29s cy9saWJ4bC9saWJ4bF90eXBlcy5pZGwgYi90b29scy9saWJ4bC9saWJ4bF90eXBlcy5pZGwKaW5k ZXggZDk3MDI4NC4uZDQyZjZhMSAxMDA2NDQKLS0tIGEvdG9vbHMvbGlieGwvbGlieGxfdHlwZXMu aWRsCisrKyBiL3Rvb2xzL2xpYnhsL2xpYnhsX3R5cGVzLmlkbApAQCAtMTkxLDYgKzE5MSw3IEBA IGxpYnhsX3NjaGVkdWxlciA9IEVudW1lcmF0aW9uKCJzY2hlZHVsZXIiLCBbCiAgICAgKDYsICJj cmVkaXQyIiksCiAgICAgKDcsICJhcmluYzY1MyIpLAogICAgICg4LCAicnRkcyIpLAorICAgICg5 LCAibnVsbCIpLAogICAgIF0pCiAKICMgQ29uc2lzdGVudCB3aXRoIFNIVVRET1dOXyogaW4gc2No ZWQuaCAoYXBhcnQgZnJvbSBVTktOT1dOKQo= --=-4js4Of3D1/Lzu6OW0S6T-- --=-wvl67X7EJARrNB3u85CM Content-Type: application/pgp-signature; name="signature.asc" Content-Description: This is a digitally signed message part Content-Transfer-Encoding: 7bit -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQIcBAABCAAGBQJY52RNAAoJEBZCeImluHPuqGMP/izH+t8SBjULqvuwaOSiJfiT Eb1DzAgIV5ytLDN158DRyl5NraSRSf4YGPcgY1eSbVvMYPHh3fjrTWdBtAaJrDXw wkKbpmfOydtrFvMIpriYFwPk80/imDk1j28jn7U09gnHONL9CqJssRC4wRkK/4mX adqvPJlwBv3eCUMfxBBrpy1FAJlZBNY9Q/UgluRYCy3tavcKAHu8uejP5enuIwQW 577Jmn08SP6uoIXIDzhnDeGI9DCalkd2b+/BHhX5A8j4co+w75vLj/C6ekurE2Qr Ql1kxG8bSJ+Blz4TNLju6AsDA4jhilxKkhJkX5sXwfWc/iIbcj1Lz6b5io5R1ZjY xGyx/vY+uMI6nptvKoQVcbEoc5c7a2lwW/+fMpLN3jnMXstyFEdV19uG6nHMaXcm /H0z9G1Uv/p1mQQRRcBEEAiD44Fd1LAYF0lvp5BNpQsOL33+k3oTggxwbrmolkep nSFKJtCGHs51S9WNQElnTnqboYnuKcFRrlxleWtnXaLohY7xXYY3arbfhz5Oe4V6 1zNxnEzvf0jiZBsuaDR2IO5gGlSDM5b1h2CJMuZ0MmNm6HfhEtIHdxc8krygSW5w JFhrLsoJdnKcGxnEmxeClUdSqwJzrQ1SpmSNzQti0l9G/fHGeGbx35F2G7sIfk1U 1LOIft081BYUJ1PQvM72 =3pIO -----END PGP SIGNATURE----- --=-wvl67X7EJARrNB3u85CM-- --===============8479137435034599295== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: inline X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVs IG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5v cmcveGVuLWRldmVsCg== --===============8479137435034599295==--