function multipart(sServiceBase, sBody) {
				var sBoundary;

				// skip preamble consisting of whitespace (as sent by datajs)
				sBody = sBody.replace(/^\s+/, "");
				sBoundary = firstLine(sBody);
				return {
					boundary : firstLine(sBody).slice(2),
					parts : sBody.split(sBoundary).slice(1, -1).map(function (sRequestPart) {
						var aFailures, sFirstLine, aMatch, oMultipart, oRequest, iRequestStart;

						sRequestPart = sRequestPart.slice(2);
						sFirstLine = firstLine(sRequestPart);
						if (rMultipartHeader.test(sFirstLine)) {
							oMultipart = multipart(sServiceBase,
								sRequestPart.slice(sFirstLine.length + 4));
							aFailures = oMultipart.parts.filter(function (oPart) {
								return oPart.code >= 300;
							});
							return aFailures.length ? aFailures[0] : oMultipart;
						}
						iRequestStart = sRequestPart.indexOf("\r\n\r\n") + 4;
						oRequest = parseRequest(sServiceBase, sRequestPart.slice(iRequestStart));
						aMatch = rContentId.exec(sRequestPart.slice(0, iRequestStart));
						return getResponseFromFixture(oRequest, aMatch && aMatch[1]);
					})
				};
			}
/*
			 * Processes a multipart message (body or change set)
			 *
			 * @param {string} sServiceBase The service base URL
			 * @param {string} sBody The body
			 * @returns {object} An object with the properties boundary and parts
			 */
Processes a multipart message (body or change set)
@param {string} sServiceBase The service base URL
@param {string} sBody The body
@returns {object} An object with the properties boundary and parts
Processes a multipart message ( body or change set ) @param { string } sServiceBase The service base URL @param { string } sBody The body @returns { object } An object with the properties boundary and parts
function multipart(sServiceBase, sBody) {
				var sBoundary;
				sBody = sBody.replace(/^\s+/, "");
				sBoundary = firstLine(sBody);
				return {
					boundary : firstLine(sBody).slice(2),
					parts : sBody.split(sBoundary).slice(1, -1).map(function (sRequestPart) {
						var aFailures, sFirstLine, aMatch, oMultipart, oRequest, iRequestStart;
						sRequestPart = sRequestPart.slice(2);
						sFirstLine = firstLine(sRequestPart);
						if (rMultipartHeader.test(sFirstLine)) {
							oMultipart = multipart(sServiceBase,
								sRequestPart.slice(sFirstLine.length + 4));
							aFailures = oMultipart.parts.filter(function (oPart) {
								return oPart.code >= 300;
							});
							return aFailures.length ? aFailures[0] : oMultipart;
						}
						iRequestStart = sRequestPart.indexOf("\r\n\r\n") + 4;
						oRequest = parseRequest(sServiceBase, sRequestPart.slice(iRequestStart));
						aMatch = rContentId.exec(sRequestPart.slice(0, iRequestStart));
						return getResponseFromFixture(oRequest, aMatch && aMatch[1]);
					})
				};
			}
function multipart ( sServiceBase , sBody ) { var sBoundary ; sBody = sBody . replace ( / ^\s+ / , "" ) ; sBoundary = firstLine ( sBody ) ; return { boundary : firstLine ( sBody ) . slice ( 2 ) , parts : sBody . split ( sBoundary ) . slice ( 1 , - 1 ) . map ( function ( sRequestPart ) { var aFailures , sFirstLine , aMatch , oMultipart , oRequest , iRequestStart ; sRequestPart = sRequestPart . slice ( 2 ) ; sFirstLine = firstLine ( sRequestPart ) ; if ( rMultipartHeader . test ( sFirstLine ) ) { oMultipart = multipart ( sServiceBase , sRequestPart . slice ( sFirstLine . length + 4 ) ) ; aFailures = oMultipart . parts . filter ( function ( oPart ) { return oPart . code >= 300 ; } ) ; return aFailures . length ? aFailures [ 0 ] : oMultipart ; } iRequestStart = sRequestPart . indexOf ( "\r\n\r\n" ) + 4 ; oRequest = parseRequest ( sServiceBase , sRequestPart . slice ( iRequestStart ) ) ; aMatch = rContentId . exec ( sRequestPart . slice ( 0 , iRequestStart ) ) ; return getResponseFromFixture ( oRequest , aMatch && aMatch [ 1 ] ) ; } ) } ; }
Processes a multipart message (body or change set)
 @param {string} sServiceBase The service base URL
 @param {string} sBody The body
 @returns {object} An object with the properties boundary and parts
Processes a multipart message ( body or change set ) @param { string } sServiceBase The service base URL @param { string } sBody The body @returns { object } An object with the properties boundary and parts
// skip preamble consisting of whitespace (as sent by datajs)