Bug 709391 - initial import of Android Sync code (Git tag: v0.1.2-fixes). a=java-only, a=akeybl
authorRichard Newman <rnewman@mozilla.com>
Wed, 21 Dec 2011 08:44:08 -0800
changeset 84216 4c20c43a09a002f9e23e0329c7c70af0de72fc0d
parent 84215 50911c719782a59d4d8c1b72ae29c071425ec2fe
child 84217 62cdb08ef4d31013f0535289930fd6f119bd03e3
push id775
push userrnewman@mozilla.com
push dateThu, 26 Jan 2012 04:30:14 +0000
treeherdermozilla-aurora@b310cea4258c [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersjava-only, akeybl
bugs709391
milestone11.0a2
Bug 709391 - initial import of Android Sync code (Git tag: v0.1.2-fixes). a=java-only, a=akeybl
mobile/android/base/apache/commons/codec/BinaryDecoder.java
mobile/android/base/apache/commons/codec/BinaryEncoder.java
mobile/android/base/apache/commons/codec/CharEncoding.java
mobile/android/base/apache/commons/codec/Decoder.java
mobile/android/base/apache/commons/codec/DecoderException.java
mobile/android/base/apache/commons/codec/Encoder.java
mobile/android/base/apache/commons/codec/EncoderException.java
mobile/android/base/apache/commons/codec/StringDecoder.java
mobile/android/base/apache/commons/codec/StringEncoder.java
mobile/android/base/apache/commons/codec/StringEncoderComparator.java
mobile/android/base/apache/commons/codec/binary/Base32.java
mobile/android/base/apache/commons/codec/binary/Base32InputStream.java
mobile/android/base/apache/commons/codec/binary/Base32OutputStream.java
mobile/android/base/apache/commons/codec/binary/Base64.java
mobile/android/base/apache/commons/codec/binary/Base64InputStream.java
mobile/android/base/apache/commons/codec/binary/Base64OutputStream.java
mobile/android/base/apache/commons/codec/binary/BaseNCodec.java
mobile/android/base/apache/commons/codec/binary/BaseNCodecInputStream.java
mobile/android/base/apache/commons/codec/binary/BaseNCodecOutputStream.java
mobile/android/base/apache/commons/codec/binary/BinaryCodec.java
mobile/android/base/apache/commons/codec/binary/Hex.java
mobile/android/base/apache/commons/codec/binary/StringUtils.java
mobile/android/base/apache/commons/codec/binary/package.html
mobile/android/base/apache/commons/codec/digest/DigestUtils.java
mobile/android/base/apache/commons/codec/digest/package.html
mobile/android/base/apache/commons/codec/language/AbstractCaverphone.java
mobile/android/base/apache/commons/codec/language/Caverphone.java
mobile/android/base/apache/commons/codec/language/Caverphone1.java
mobile/android/base/apache/commons/codec/language/Caverphone2.java
mobile/android/base/apache/commons/codec/language/ColognePhonetic.java
mobile/android/base/apache/commons/codec/language/DoubleMetaphone.java
mobile/android/base/apache/commons/codec/language/Metaphone.java
mobile/android/base/apache/commons/codec/language/RefinedSoundex.java
mobile/android/base/apache/commons/codec/language/Soundex.java
mobile/android/base/apache/commons/codec/language/SoundexUtils.java
mobile/android/base/apache/commons/codec/language/package.html
mobile/android/base/apache/commons/codec/net/BCodec.java
mobile/android/base/apache/commons/codec/net/QCodec.java
mobile/android/base/apache/commons/codec/net/QuotedPrintableCodec.java
mobile/android/base/apache/commons/codec/net/RFC1522Codec.java
mobile/android/base/apache/commons/codec/net/URLCodec.java
mobile/android/base/apache/commons/codec/net/Utils.java
mobile/android/base/apache/commons/codec/net/package.html
mobile/android/base/apache/commons/codec/overview.html
mobile/android/base/apache/commons/codec/package.html
mobile/android/base/httpclientandroidlib/ConnectionClosedException.java
mobile/android/base/httpclientandroidlib/ConnectionReuseStrategy.java
mobile/android/base/httpclientandroidlib/FormattedHeader.java
mobile/android/base/httpclientandroidlib/Header.java
mobile/android/base/httpclientandroidlib/HeaderElement.java
mobile/android/base/httpclientandroidlib/HeaderElementIterator.java
mobile/android/base/httpclientandroidlib/HeaderIterator.java
mobile/android/base/httpclientandroidlib/HttpClientConnection.java
mobile/android/base/httpclientandroidlib/HttpConnection.java
mobile/android/base/httpclientandroidlib/HttpConnectionMetrics.java
mobile/android/base/httpclientandroidlib/HttpEntity.java
mobile/android/base/httpclientandroidlib/HttpEntityEnclosingRequest.java
mobile/android/base/httpclientandroidlib/HttpException.java
mobile/android/base/httpclientandroidlib/HttpHeaders.java
mobile/android/base/httpclientandroidlib/HttpHost.java
mobile/android/base/httpclientandroidlib/HttpInetConnection.java
mobile/android/base/httpclientandroidlib/HttpMessage.java
mobile/android/base/httpclientandroidlib/HttpRequest.java
mobile/android/base/httpclientandroidlib/HttpRequestFactory.java
mobile/android/base/httpclientandroidlib/HttpRequestInterceptor.java
mobile/android/base/httpclientandroidlib/HttpResponse.java
mobile/android/base/httpclientandroidlib/HttpResponseFactory.java
mobile/android/base/httpclientandroidlib/HttpResponseInterceptor.java
mobile/android/base/httpclientandroidlib/HttpServerConnection.java
mobile/android/base/httpclientandroidlib/HttpStatus.java
mobile/android/base/httpclientandroidlib/HttpVersion.java
mobile/android/base/httpclientandroidlib/MalformedChunkCodingException.java
mobile/android/base/httpclientandroidlib/MethodNotSupportedException.java
mobile/android/base/httpclientandroidlib/NameValuePair.java
mobile/android/base/httpclientandroidlib/NoHttpResponseException.java
mobile/android/base/httpclientandroidlib/ParseException.java
mobile/android/base/httpclientandroidlib/ProtocolException.java
mobile/android/base/httpclientandroidlib/ProtocolVersion.java
mobile/android/base/httpclientandroidlib/README.txt
mobile/android/base/httpclientandroidlib/ReasonPhraseCatalog.java
mobile/android/base/httpclientandroidlib/RequestLine.java
mobile/android/base/httpclientandroidlib/StatusLine.java
mobile/android/base/httpclientandroidlib/TokenIterator.java
mobile/android/base/httpclientandroidlib/TruncatedChunkException.java
mobile/android/base/httpclientandroidlib/UnsupportedHttpVersionException.java
mobile/android/base/httpclientandroidlib/androidextra/HttpClientAndroidLog.java
mobile/android/base/httpclientandroidlib/annotation/GuardedBy.java
mobile/android/base/httpclientandroidlib/annotation/Immutable.java
mobile/android/base/httpclientandroidlib/annotation/NotThreadSafe.java
mobile/android/base/httpclientandroidlib/annotation/ThreadSafe.java
mobile/android/base/httpclientandroidlib/auth/AUTH.java
mobile/android/base/httpclientandroidlib/auth/AuthScheme.java
mobile/android/base/httpclientandroidlib/auth/AuthSchemeFactory.java
mobile/android/base/httpclientandroidlib/auth/AuthSchemeRegistry.java
mobile/android/base/httpclientandroidlib/auth/AuthScope.java
mobile/android/base/httpclientandroidlib/auth/AuthState.java
mobile/android/base/httpclientandroidlib/auth/AuthenticationException.java
mobile/android/base/httpclientandroidlib/auth/BasicUserPrincipal.java
mobile/android/base/httpclientandroidlib/auth/ContextAwareAuthScheme.java
mobile/android/base/httpclientandroidlib/auth/Credentials.java
mobile/android/base/httpclientandroidlib/auth/InvalidCredentialsException.java
mobile/android/base/httpclientandroidlib/auth/MalformedChallengeException.java
mobile/android/base/httpclientandroidlib/auth/NTCredentials.java
mobile/android/base/httpclientandroidlib/auth/NTUserPrincipal.java
mobile/android/base/httpclientandroidlib/auth/UsernamePasswordCredentials.java
mobile/android/base/httpclientandroidlib/auth/package.html
mobile/android/base/httpclientandroidlib/auth/params/AuthPNames.java
mobile/android/base/httpclientandroidlib/auth/params/AuthParamBean.java
mobile/android/base/httpclientandroidlib/auth/params/AuthParams.java
mobile/android/base/httpclientandroidlib/auth/params/package.html
mobile/android/base/httpclientandroidlib/client/AuthCache.java
mobile/android/base/httpclientandroidlib/client/AuthenticationHandler.java
mobile/android/base/httpclientandroidlib/client/CircularRedirectException.java
mobile/android/base/httpclientandroidlib/client/ClientProtocolException.java
mobile/android/base/httpclientandroidlib/client/CookieStore.java
mobile/android/base/httpclientandroidlib/client/CredentialsProvider.java
mobile/android/base/httpclientandroidlib/client/HttpClient.java
mobile/android/base/httpclientandroidlib/client/HttpRequestRetryHandler.java
mobile/android/base/httpclientandroidlib/client/HttpResponseException.java
mobile/android/base/httpclientandroidlib/client/NonRepeatableRequestException.java
mobile/android/base/httpclientandroidlib/client/RedirectException.java
mobile/android/base/httpclientandroidlib/client/RedirectHandler.java
mobile/android/base/httpclientandroidlib/client/RedirectStrategy.java
mobile/android/base/httpclientandroidlib/client/RequestDirector.java
mobile/android/base/httpclientandroidlib/client/ResponseHandler.java
mobile/android/base/httpclientandroidlib/client/UserTokenHandler.java
mobile/android/base/httpclientandroidlib/client/entity/DecompressingEntity.java
mobile/android/base/httpclientandroidlib/client/entity/DeflateDecompressingEntity.java
mobile/android/base/httpclientandroidlib/client/entity/GzipDecompressingEntity.java
mobile/android/base/httpclientandroidlib/client/entity/UrlEncodedFormEntity.java
mobile/android/base/httpclientandroidlib/client/entity/package.html
mobile/android/base/httpclientandroidlib/client/methods/AbortableHttpRequest.java
mobile/android/base/httpclientandroidlib/client/methods/HttpDelete.java
mobile/android/base/httpclientandroidlib/client/methods/HttpEntityEnclosingRequestBase.java
mobile/android/base/httpclientandroidlib/client/methods/HttpGet.java
mobile/android/base/httpclientandroidlib/client/methods/HttpHead.java
mobile/android/base/httpclientandroidlib/client/methods/HttpOptions.java
mobile/android/base/httpclientandroidlib/client/methods/HttpPost.java
mobile/android/base/httpclientandroidlib/client/methods/HttpPut.java
mobile/android/base/httpclientandroidlib/client/methods/HttpRequestBase.java
mobile/android/base/httpclientandroidlib/client/methods/HttpTrace.java
mobile/android/base/httpclientandroidlib/client/methods/HttpUriRequest.java
mobile/android/base/httpclientandroidlib/client/methods/package.html
mobile/android/base/httpclientandroidlib/client/package.html
mobile/android/base/httpclientandroidlib/client/params/AllClientPNames.java
mobile/android/base/httpclientandroidlib/client/params/AuthPolicy.java
mobile/android/base/httpclientandroidlib/client/params/ClientPNames.java
mobile/android/base/httpclientandroidlib/client/params/ClientParamBean.java
mobile/android/base/httpclientandroidlib/client/params/CookiePolicy.java
mobile/android/base/httpclientandroidlib/client/params/HttpClientParams.java
mobile/android/base/httpclientandroidlib/client/params/package.html
mobile/android/base/httpclientandroidlib/client/protocol/ClientContext.java
mobile/android/base/httpclientandroidlib/client/protocol/ClientContextConfigurer.java
mobile/android/base/httpclientandroidlib/client/protocol/RequestAcceptEncoding.java
mobile/android/base/httpclientandroidlib/client/protocol/RequestAddCookies.java
mobile/android/base/httpclientandroidlib/client/protocol/RequestAuthCache.java
mobile/android/base/httpclientandroidlib/client/protocol/RequestClientConnControl.java
mobile/android/base/httpclientandroidlib/client/protocol/RequestDefaultHeaders.java
mobile/android/base/httpclientandroidlib/client/protocol/RequestProxyAuthentication.java
mobile/android/base/httpclientandroidlib/client/protocol/RequestTargetAuthentication.java
mobile/android/base/httpclientandroidlib/client/protocol/ResponseAuthCache.java
mobile/android/base/httpclientandroidlib/client/protocol/ResponseContentEncoding.java
mobile/android/base/httpclientandroidlib/client/protocol/ResponseProcessCookies.java
mobile/android/base/httpclientandroidlib/client/protocol/package.html
mobile/android/base/httpclientandroidlib/client/utils/CloneUtils.java
mobile/android/base/httpclientandroidlib/client/utils/Idn.java
mobile/android/base/httpclientandroidlib/client/utils/JdkIdn.java
mobile/android/base/httpclientandroidlib/client/utils/Punycode.java
mobile/android/base/httpclientandroidlib/client/utils/Rfc3492Idn.java
mobile/android/base/httpclientandroidlib/client/utils/URIUtils.java
mobile/android/base/httpclientandroidlib/client/utils/URLEncodedUtils.java
mobile/android/base/httpclientandroidlib/client/utils/package.html
mobile/android/base/httpclientandroidlib/conn/BasicEofSensorWatcher.java
mobile/android/base/httpclientandroidlib/conn/BasicManagedEntity.java
mobile/android/base/httpclientandroidlib/conn/ClientConnectionManager.java
mobile/android/base/httpclientandroidlib/conn/ClientConnectionManagerFactory.java
mobile/android/base/httpclientandroidlib/conn/ClientConnectionOperator.java
mobile/android/base/httpclientandroidlib/conn/ClientConnectionRequest.java
mobile/android/base/httpclientandroidlib/conn/ConnectTimeoutException.java
mobile/android/base/httpclientandroidlib/conn/ConnectionKeepAliveStrategy.java
mobile/android/base/httpclientandroidlib/conn/ConnectionPoolTimeoutException.java
mobile/android/base/httpclientandroidlib/conn/ConnectionReleaseTrigger.java
mobile/android/base/httpclientandroidlib/conn/EofSensorInputStream.java
mobile/android/base/httpclientandroidlib/conn/EofSensorWatcher.java
mobile/android/base/httpclientandroidlib/conn/HttpHostConnectException.java
mobile/android/base/httpclientandroidlib/conn/HttpRoutedConnection.java
mobile/android/base/httpclientandroidlib/conn/ManagedClientConnection.java
mobile/android/base/httpclientandroidlib/conn/MultihomePlainSocketFactory.java
mobile/android/base/httpclientandroidlib/conn/OperatedClientConnection.java
mobile/android/base/httpclientandroidlib/conn/package.html
mobile/android/base/httpclientandroidlib/conn/params/ConnConnectionPNames.java
mobile/android/base/httpclientandroidlib/conn/params/ConnConnectionParamBean.java
mobile/android/base/httpclientandroidlib/conn/params/ConnManagerPNames.java
mobile/android/base/httpclientandroidlib/conn/params/ConnManagerParamBean.java
mobile/android/base/httpclientandroidlib/conn/params/ConnManagerParams.java
mobile/android/base/httpclientandroidlib/conn/params/ConnPerRoute.java
mobile/android/base/httpclientandroidlib/conn/params/ConnPerRouteBean.java
mobile/android/base/httpclientandroidlib/conn/params/ConnRoutePNames.java
mobile/android/base/httpclientandroidlib/conn/params/ConnRouteParamBean.java
mobile/android/base/httpclientandroidlib/conn/params/ConnRouteParams.java
mobile/android/base/httpclientandroidlib/conn/params/package.html
mobile/android/base/httpclientandroidlib/conn/routing/BasicRouteDirector.java
mobile/android/base/httpclientandroidlib/conn/routing/HttpRoute.java
mobile/android/base/httpclientandroidlib/conn/routing/HttpRouteDirector.java
mobile/android/base/httpclientandroidlib/conn/routing/HttpRoutePlanner.java
mobile/android/base/httpclientandroidlib/conn/routing/RouteInfo.java
mobile/android/base/httpclientandroidlib/conn/routing/RouteTracker.java
mobile/android/base/httpclientandroidlib/conn/routing/package.html
mobile/android/base/httpclientandroidlib/conn/scheme/HostNameResolver.java
mobile/android/base/httpclientandroidlib/conn/scheme/LayeredSchemeSocketFactory.java
mobile/android/base/httpclientandroidlib/conn/scheme/LayeredSchemeSocketFactoryAdaptor.java
mobile/android/base/httpclientandroidlib/conn/scheme/LayeredSocketFactory.java
mobile/android/base/httpclientandroidlib/conn/scheme/LayeredSocketFactoryAdaptor.java
mobile/android/base/httpclientandroidlib/conn/scheme/PlainSocketFactory.java
mobile/android/base/httpclientandroidlib/conn/scheme/Scheme.java
mobile/android/base/httpclientandroidlib/conn/scheme/SchemeRegistry.java
mobile/android/base/httpclientandroidlib/conn/scheme/SchemeSocketFactory.java
mobile/android/base/httpclientandroidlib/conn/scheme/SchemeSocketFactoryAdaptor.java
mobile/android/base/httpclientandroidlib/conn/scheme/SocketFactory.java
mobile/android/base/httpclientandroidlib/conn/scheme/SocketFactoryAdaptor.java
mobile/android/base/httpclientandroidlib/conn/scheme/package.html
mobile/android/base/httpclientandroidlib/conn/ssl/AbstractVerifier.java
mobile/android/base/httpclientandroidlib/conn/ssl/AllowAllHostnameVerifier.java
mobile/android/base/httpclientandroidlib/conn/ssl/BrowserCompatHostnameVerifier.java
mobile/android/base/httpclientandroidlib/conn/ssl/SSLSocketFactory.java
mobile/android/base/httpclientandroidlib/conn/ssl/StrictHostnameVerifier.java
mobile/android/base/httpclientandroidlib/conn/ssl/TrustManagerDecorator.java
mobile/android/base/httpclientandroidlib/conn/ssl/TrustSelfSignedStrategy.java
mobile/android/base/httpclientandroidlib/conn/ssl/TrustStrategy.java
mobile/android/base/httpclientandroidlib/conn/ssl/X509HostnameVerifier.java
mobile/android/base/httpclientandroidlib/conn/ssl/package.html
mobile/android/base/httpclientandroidlib/conn/util/InetAddressUtils.java
mobile/android/base/httpclientandroidlib/conn/util/package.html
mobile/android/base/httpclientandroidlib/cookie/ClientCookie.java
mobile/android/base/httpclientandroidlib/cookie/Cookie.java
mobile/android/base/httpclientandroidlib/cookie/CookieAttributeHandler.java
mobile/android/base/httpclientandroidlib/cookie/CookieIdentityComparator.java
mobile/android/base/httpclientandroidlib/cookie/CookieOrigin.java
mobile/android/base/httpclientandroidlib/cookie/CookiePathComparator.java
mobile/android/base/httpclientandroidlib/cookie/CookieRestrictionViolationException.java
mobile/android/base/httpclientandroidlib/cookie/CookieSpec.java
mobile/android/base/httpclientandroidlib/cookie/CookieSpecFactory.java
mobile/android/base/httpclientandroidlib/cookie/CookieSpecRegistry.java
mobile/android/base/httpclientandroidlib/cookie/MalformedCookieException.java
mobile/android/base/httpclientandroidlib/cookie/SM.java
mobile/android/base/httpclientandroidlib/cookie/SetCookie.java
mobile/android/base/httpclientandroidlib/cookie/SetCookie2.java
mobile/android/base/httpclientandroidlib/cookie/package.html
mobile/android/base/httpclientandroidlib/cookie/params/CookieSpecPNames.java
mobile/android/base/httpclientandroidlib/cookie/params/CookieSpecParamBean.java
mobile/android/base/httpclientandroidlib/cookie/params/package.html
mobile/android/base/httpclientandroidlib/entity/AbstractHttpEntity.java
mobile/android/base/httpclientandroidlib/entity/BasicHttpEntity.java
mobile/android/base/httpclientandroidlib/entity/BufferedHttpEntity.java
mobile/android/base/httpclientandroidlib/entity/ByteArrayEntity.java
mobile/android/base/httpclientandroidlib/entity/ContentLengthStrategy.java
mobile/android/base/httpclientandroidlib/entity/ContentProducer.java
mobile/android/base/httpclientandroidlib/entity/EntityTemplate.java
mobile/android/base/httpclientandroidlib/entity/FileEntity.java
mobile/android/base/httpclientandroidlib/entity/HttpEntityWrapper.java
mobile/android/base/httpclientandroidlib/entity/InputStreamEntity.java
mobile/android/base/httpclientandroidlib/entity/SerializableEntity.java
mobile/android/base/httpclientandroidlib/entity/StringEntity.java
mobile/android/base/httpclientandroidlib/entity/package.html
mobile/android/base/httpclientandroidlib/impl/AbstractHttpClientConnection.java
mobile/android/base/httpclientandroidlib/impl/AbstractHttpServerConnection.java
mobile/android/base/httpclientandroidlib/impl/DefaultConnectionReuseStrategy.java
mobile/android/base/httpclientandroidlib/impl/DefaultHttpClientConnection.java
mobile/android/base/httpclientandroidlib/impl/DefaultHttpRequestFactory.java
mobile/android/base/httpclientandroidlib/impl/DefaultHttpResponseFactory.java
mobile/android/base/httpclientandroidlib/impl/DefaultHttpServerConnection.java
mobile/android/base/httpclientandroidlib/impl/EnglishReasonPhraseCatalog.java
mobile/android/base/httpclientandroidlib/impl/HttpConnectionMetricsImpl.java
mobile/android/base/httpclientandroidlib/impl/NoConnectionReuseStrategy.java
mobile/android/base/httpclientandroidlib/impl/SocketHttpClientConnection.java
mobile/android/base/httpclientandroidlib/impl/SocketHttpServerConnection.java
mobile/android/base/httpclientandroidlib/impl/auth/AuthSchemeBase.java
mobile/android/base/httpclientandroidlib/impl/auth/BasicScheme.java
mobile/android/base/httpclientandroidlib/impl/auth/BasicSchemeFactory.java
mobile/android/base/httpclientandroidlib/impl/auth/DigestScheme.java
mobile/android/base/httpclientandroidlib/impl/auth/DigestSchemeFactory.java
mobile/android/base/httpclientandroidlib/impl/auth/NTLMEngine.java
mobile/android/base/httpclientandroidlib/impl/auth/NTLMEngineException.java
mobile/android/base/httpclientandroidlib/impl/auth/NTLMEngineImpl.java
mobile/android/base/httpclientandroidlib/impl/auth/NTLMScheme.java
mobile/android/base/httpclientandroidlib/impl/auth/NTLMSchemeFactory.java
mobile/android/base/httpclientandroidlib/impl/auth/RFC2617Scheme.java
mobile/android/base/httpclientandroidlib/impl/auth/SpnegoTokenGenerator.java
mobile/android/base/httpclientandroidlib/impl/auth/UnsupportedDigestAlgorithmException.java
mobile/android/base/httpclientandroidlib/impl/auth/package.html
mobile/android/base/httpclientandroidlib/impl/client/AbstractAuthenticationHandler.java
mobile/android/base/httpclientandroidlib/impl/client/AbstractHttpClient.java
mobile/android/base/httpclientandroidlib/impl/client/BasicAuthCache.java
mobile/android/base/httpclientandroidlib/impl/client/BasicCookieStore.java
mobile/android/base/httpclientandroidlib/impl/client/BasicCredentialsProvider.java
mobile/android/base/httpclientandroidlib/impl/client/BasicResponseHandler.java
mobile/android/base/httpclientandroidlib/impl/client/ClientParamsStack.java
mobile/android/base/httpclientandroidlib/impl/client/ContentEncodingHttpClient.java
mobile/android/base/httpclientandroidlib/impl/client/DefaultConnectionKeepAliveStrategy.java
mobile/android/base/httpclientandroidlib/impl/client/DefaultHttpClient.java
mobile/android/base/httpclientandroidlib/impl/client/DefaultHttpRequestRetryHandler.java
mobile/android/base/httpclientandroidlib/impl/client/DefaultProxyAuthenticationHandler.java
mobile/android/base/httpclientandroidlib/impl/client/DefaultRedirectHandler.java
mobile/android/base/httpclientandroidlib/impl/client/DefaultRedirectStrategy.java
mobile/android/base/httpclientandroidlib/impl/client/DefaultRedirectStrategyAdaptor.java
mobile/android/base/httpclientandroidlib/impl/client/DefaultRequestDirector.java
mobile/android/base/httpclientandroidlib/impl/client/DefaultTargetAuthenticationHandler.java
mobile/android/base/httpclientandroidlib/impl/client/DefaultUserTokenHandler.java
mobile/android/base/httpclientandroidlib/impl/client/EntityEnclosingRequestWrapper.java
mobile/android/base/httpclientandroidlib/impl/client/RedirectLocations.java
mobile/android/base/httpclientandroidlib/impl/client/RequestWrapper.java
mobile/android/base/httpclientandroidlib/impl/client/RoutedRequest.java
mobile/android/base/httpclientandroidlib/impl/client/TunnelRefusedException.java
mobile/android/base/httpclientandroidlib/impl/client/package.html
mobile/android/base/httpclientandroidlib/impl/conn/AbstractClientConnAdapter.java
mobile/android/base/httpclientandroidlib/impl/conn/AbstractPoolEntry.java
mobile/android/base/httpclientandroidlib/impl/conn/AbstractPooledConnAdapter.java
mobile/android/base/httpclientandroidlib/impl/conn/ConnectionShutdownException.java
mobile/android/base/httpclientandroidlib/impl/conn/DefaultClientConnection.java
mobile/android/base/httpclientandroidlib/impl/conn/DefaultClientConnectionOperator.java
mobile/android/base/httpclientandroidlib/impl/conn/DefaultHttpRoutePlanner.java
mobile/android/base/httpclientandroidlib/impl/conn/DefaultResponseParser.java
mobile/android/base/httpclientandroidlib/impl/conn/HttpInetSocketAddress.java
mobile/android/base/httpclientandroidlib/impl/conn/IdleConnectionHandler.java
mobile/android/base/httpclientandroidlib/impl/conn/LoggingSessionInputBuffer.java
mobile/android/base/httpclientandroidlib/impl/conn/LoggingSessionOutputBuffer.java
mobile/android/base/httpclientandroidlib/impl/conn/ProxySelectorRoutePlanner.java
mobile/android/base/httpclientandroidlib/impl/conn/SchemeRegistryFactory.java
mobile/android/base/httpclientandroidlib/impl/conn/SingleClientConnManager.java
mobile/android/base/httpclientandroidlib/impl/conn/Wire.java
mobile/android/base/httpclientandroidlib/impl/conn/package.html
mobile/android/base/httpclientandroidlib/impl/conn/tsccm/AbstractConnPool.java
mobile/android/base/httpclientandroidlib/impl/conn/tsccm/BasicPoolEntry.java
mobile/android/base/httpclientandroidlib/impl/conn/tsccm/BasicPoolEntryRef.java
mobile/android/base/httpclientandroidlib/impl/conn/tsccm/BasicPooledConnAdapter.java
mobile/android/base/httpclientandroidlib/impl/conn/tsccm/ConnPoolByRoute.java
mobile/android/base/httpclientandroidlib/impl/conn/tsccm/PoolEntryRequest.java
mobile/android/base/httpclientandroidlib/impl/conn/tsccm/RefQueueHandler.java
mobile/android/base/httpclientandroidlib/impl/conn/tsccm/RefQueueWorker.java
mobile/android/base/httpclientandroidlib/impl/conn/tsccm/RouteSpecificPool.java
mobile/android/base/httpclientandroidlib/impl/conn/tsccm/ThreadSafeClientConnManager.java
mobile/android/base/httpclientandroidlib/impl/conn/tsccm/WaitingThread.java
mobile/android/base/httpclientandroidlib/impl/conn/tsccm/WaitingThreadAborter.java
mobile/android/base/httpclientandroidlib/impl/conn/tsccm/doc-files/tsccm-structure.png
mobile/android/base/httpclientandroidlib/impl/conn/tsccm/package.html
mobile/android/base/httpclientandroidlib/impl/cookie/AbstractCookieAttributeHandler.java
mobile/android/base/httpclientandroidlib/impl/cookie/AbstractCookieSpec.java
mobile/android/base/httpclientandroidlib/impl/cookie/BasicClientCookie.java
mobile/android/base/httpclientandroidlib/impl/cookie/BasicClientCookie2.java
mobile/android/base/httpclientandroidlib/impl/cookie/BasicCommentHandler.java
mobile/android/base/httpclientandroidlib/impl/cookie/BasicDomainHandler.java
mobile/android/base/httpclientandroidlib/impl/cookie/BasicExpiresHandler.java
mobile/android/base/httpclientandroidlib/impl/cookie/BasicMaxAgeHandler.java
mobile/android/base/httpclientandroidlib/impl/cookie/BasicPathHandler.java
mobile/android/base/httpclientandroidlib/impl/cookie/BasicSecureHandler.java
mobile/android/base/httpclientandroidlib/impl/cookie/BestMatchSpec.java
mobile/android/base/httpclientandroidlib/impl/cookie/BestMatchSpecFactory.java
mobile/android/base/httpclientandroidlib/impl/cookie/BrowserCompatSpec.java
mobile/android/base/httpclientandroidlib/impl/cookie/BrowserCompatSpecFactory.java
mobile/android/base/httpclientandroidlib/impl/cookie/CookieSpecBase.java
mobile/android/base/httpclientandroidlib/impl/cookie/DateParseException.java
mobile/android/base/httpclientandroidlib/impl/cookie/DateUtils.java
mobile/android/base/httpclientandroidlib/impl/cookie/IgnoreSpec.java
mobile/android/base/httpclientandroidlib/impl/cookie/IgnoreSpecFactory.java
mobile/android/base/httpclientandroidlib/impl/cookie/NetscapeDomainHandler.java
mobile/android/base/httpclientandroidlib/impl/cookie/NetscapeDraftHeaderParser.java
mobile/android/base/httpclientandroidlib/impl/cookie/NetscapeDraftSpec.java
mobile/android/base/httpclientandroidlib/impl/cookie/NetscapeDraftSpecFactory.java
mobile/android/base/httpclientandroidlib/impl/cookie/PublicSuffixFilter.java
mobile/android/base/httpclientandroidlib/impl/cookie/PublicSuffixListParser.java
mobile/android/base/httpclientandroidlib/impl/cookie/RFC2109DomainHandler.java
mobile/android/base/httpclientandroidlib/impl/cookie/RFC2109Spec.java
mobile/android/base/httpclientandroidlib/impl/cookie/RFC2109SpecFactory.java
mobile/android/base/httpclientandroidlib/impl/cookie/RFC2109VersionHandler.java
mobile/android/base/httpclientandroidlib/impl/cookie/RFC2965CommentUrlAttributeHandler.java
mobile/android/base/httpclientandroidlib/impl/cookie/RFC2965DiscardAttributeHandler.java
mobile/android/base/httpclientandroidlib/impl/cookie/RFC2965DomainAttributeHandler.java
mobile/android/base/httpclientandroidlib/impl/cookie/RFC2965PortAttributeHandler.java
mobile/android/base/httpclientandroidlib/impl/cookie/RFC2965Spec.java
mobile/android/base/httpclientandroidlib/impl/cookie/RFC2965SpecFactory.java
mobile/android/base/httpclientandroidlib/impl/cookie/RFC2965VersionAttributeHandler.java
mobile/android/base/httpclientandroidlib/impl/cookie/package.html
mobile/android/base/httpclientandroidlib/impl/entity/EntityDeserializer.java
mobile/android/base/httpclientandroidlib/impl/entity/EntitySerializer.java
mobile/android/base/httpclientandroidlib/impl/entity/LaxContentLengthStrategy.java
mobile/android/base/httpclientandroidlib/impl/entity/StrictContentLengthStrategy.java
mobile/android/base/httpclientandroidlib/impl/entity/package.html
mobile/android/base/httpclientandroidlib/impl/io/AbstractMessageParser.java
mobile/android/base/httpclientandroidlib/impl/io/AbstractMessageWriter.java
mobile/android/base/httpclientandroidlib/impl/io/AbstractSessionInputBuffer.java
mobile/android/base/httpclientandroidlib/impl/io/AbstractSessionOutputBuffer.java
mobile/android/base/httpclientandroidlib/impl/io/ChunkedInputStream.java
mobile/android/base/httpclientandroidlib/impl/io/ChunkedOutputStream.java
mobile/android/base/httpclientandroidlib/impl/io/ContentLengthInputStream.java
mobile/android/base/httpclientandroidlib/impl/io/ContentLengthOutputStream.java
mobile/android/base/httpclientandroidlib/impl/io/HttpRequestParser.java
mobile/android/base/httpclientandroidlib/impl/io/HttpRequestWriter.java
mobile/android/base/httpclientandroidlib/impl/io/HttpResponseParser.java
mobile/android/base/httpclientandroidlib/impl/io/HttpResponseWriter.java
mobile/android/base/httpclientandroidlib/impl/io/HttpTransportMetricsImpl.java
mobile/android/base/httpclientandroidlib/impl/io/IdentityInputStream.java
mobile/android/base/httpclientandroidlib/impl/io/IdentityOutputStream.java
mobile/android/base/httpclientandroidlib/impl/io/SocketInputBuffer.java
mobile/android/base/httpclientandroidlib/impl/io/SocketOutputBuffer.java
mobile/android/base/httpclientandroidlib/impl/io/package.html
mobile/android/base/httpclientandroidlib/impl/package.html
mobile/android/base/httpclientandroidlib/io/BufferInfo.java
mobile/android/base/httpclientandroidlib/io/EofSensor.java
mobile/android/base/httpclientandroidlib/io/HttpMessageParser.java
mobile/android/base/httpclientandroidlib/io/HttpMessageWriter.java
mobile/android/base/httpclientandroidlib/io/HttpTransportMetrics.java
mobile/android/base/httpclientandroidlib/io/SessionInputBuffer.java
mobile/android/base/httpclientandroidlib/io/SessionOutputBuffer.java
mobile/android/base/httpclientandroidlib/io/package.html
mobile/android/base/httpclientandroidlib/message/AbstractHttpMessage.java
mobile/android/base/httpclientandroidlib/message/BasicHeader.java
mobile/android/base/httpclientandroidlib/message/BasicHeaderElement.java
mobile/android/base/httpclientandroidlib/message/BasicHeaderElementIterator.java
mobile/android/base/httpclientandroidlib/message/BasicHeaderIterator.java
mobile/android/base/httpclientandroidlib/message/BasicHeaderValueFormatter.java
mobile/android/base/httpclientandroidlib/message/BasicHeaderValueParser.java
mobile/android/base/httpclientandroidlib/message/BasicHttpEntityEnclosingRequest.java
mobile/android/base/httpclientandroidlib/message/BasicHttpRequest.java
mobile/android/base/httpclientandroidlib/message/BasicHttpResponse.java
mobile/android/base/httpclientandroidlib/message/BasicLineFormatter.java
mobile/android/base/httpclientandroidlib/message/BasicLineParser.java
mobile/android/base/httpclientandroidlib/message/BasicListHeaderIterator.java
mobile/android/base/httpclientandroidlib/message/BasicNameValuePair.java
mobile/android/base/httpclientandroidlib/message/BasicRequestLine.java
mobile/android/base/httpclientandroidlib/message/BasicStatusLine.java
mobile/android/base/httpclientandroidlib/message/BasicTokenIterator.java
mobile/android/base/httpclientandroidlib/message/BufferedHeader.java
mobile/android/base/httpclientandroidlib/message/HeaderGroup.java
mobile/android/base/httpclientandroidlib/message/HeaderValueFormatter.java
mobile/android/base/httpclientandroidlib/message/HeaderValueParser.java
mobile/android/base/httpclientandroidlib/message/LineFormatter.java
mobile/android/base/httpclientandroidlib/message/LineParser.java
mobile/android/base/httpclientandroidlib/message/ParserCursor.java
mobile/android/base/httpclientandroidlib/message/package.html
mobile/android/base/httpclientandroidlib/package.html
mobile/android/base/httpclientandroidlib/params/AbstractHttpParams.java
mobile/android/base/httpclientandroidlib/params/BasicHttpParams.java
mobile/android/base/httpclientandroidlib/params/CoreConnectionPNames.java
mobile/android/base/httpclientandroidlib/params/CoreProtocolPNames.java
mobile/android/base/httpclientandroidlib/params/DefaultedHttpParams.java
mobile/android/base/httpclientandroidlib/params/HttpAbstractParamBean.java
mobile/android/base/httpclientandroidlib/params/HttpConnectionParamBean.java
mobile/android/base/httpclientandroidlib/params/HttpConnectionParams.java
mobile/android/base/httpclientandroidlib/params/HttpParams.java
mobile/android/base/httpclientandroidlib/params/HttpProtocolParamBean.java
mobile/android/base/httpclientandroidlib/params/HttpProtocolParams.java
mobile/android/base/httpclientandroidlib/params/SyncBasicHttpParams.java
mobile/android/base/httpclientandroidlib/params/package.html
mobile/android/base/httpclientandroidlib/protocol/BasicHttpContext.java
mobile/android/base/httpclientandroidlib/protocol/BasicHttpProcessor.java
mobile/android/base/httpclientandroidlib/protocol/DefaultedHttpContext.java
mobile/android/base/httpclientandroidlib/protocol/ExecutionContext.java
mobile/android/base/httpclientandroidlib/protocol/HTTP.java
mobile/android/base/httpclientandroidlib/protocol/HttpContext.java
mobile/android/base/httpclientandroidlib/protocol/HttpDateGenerator.java
mobile/android/base/httpclientandroidlib/protocol/HttpExpectationVerifier.java
mobile/android/base/httpclientandroidlib/protocol/HttpProcessor.java
mobile/android/base/httpclientandroidlib/protocol/HttpRequestExecutor.java
mobile/android/base/httpclientandroidlib/protocol/HttpRequestHandler.java
mobile/android/base/httpclientandroidlib/protocol/HttpRequestHandlerRegistry.java
mobile/android/base/httpclientandroidlib/protocol/HttpRequestHandlerResolver.java
mobile/android/base/httpclientandroidlib/protocol/HttpRequestInterceptorList.java
mobile/android/base/httpclientandroidlib/protocol/HttpResponseInterceptorList.java
mobile/android/base/httpclientandroidlib/protocol/HttpService.java
mobile/android/base/httpclientandroidlib/protocol/ImmutableHttpProcessor.java
mobile/android/base/httpclientandroidlib/protocol/RequestConnControl.java
mobile/android/base/httpclientandroidlib/protocol/RequestContent.java
mobile/android/base/httpclientandroidlib/protocol/RequestDate.java
mobile/android/base/httpclientandroidlib/protocol/RequestExpectContinue.java
mobile/android/base/httpclientandroidlib/protocol/RequestTargetHost.java
mobile/android/base/httpclientandroidlib/protocol/RequestUserAgent.java
mobile/android/base/httpclientandroidlib/protocol/ResponseConnControl.java
mobile/android/base/httpclientandroidlib/protocol/ResponseContent.java
mobile/android/base/httpclientandroidlib/protocol/ResponseDate.java
mobile/android/base/httpclientandroidlib/protocol/ResponseServer.java
mobile/android/base/httpclientandroidlib/protocol/SyncBasicHttpContext.java
mobile/android/base/httpclientandroidlib/protocol/UriPatternMatcher.java
mobile/android/base/httpclientandroidlib/protocol/package.html
mobile/android/base/httpclientandroidlib/util/ByteArrayBuffer.java
mobile/android/base/httpclientandroidlib/util/CharArrayBuffer.java
mobile/android/base/httpclientandroidlib/util/EncodingUtils.java
mobile/android/base/httpclientandroidlib/util/EntityUtils.java
mobile/android/base/httpclientandroidlib/util/ExceptionUtils.java
mobile/android/base/httpclientandroidlib/util/LangUtils.java
mobile/android/base/httpclientandroidlib/util/VersionInfo.java
mobile/android/base/httpclientandroidlib/util/package.html
mobile/android/base/json-simple/ItemList.java
mobile/android/base/json-simple/JSONArray.java
mobile/android/base/json-simple/JSONAware.java
mobile/android/base/json-simple/JSONObject.java
mobile/android/base/json-simple/JSONStreamAware.java
mobile/android/base/json-simple/JSONValue.java
mobile/android/base/json-simple/parser/ContainerFactory.java
mobile/android/base/json-simple/parser/ContentHandler.java
mobile/android/base/json-simple/parser/JSONParser.java
mobile/android/base/json-simple/parser/ParseException.java
mobile/android/base/json-simple/parser/Yylex.java
mobile/android/base/json-simple/parser/Yytoken.java
mobile/android/base/locales/en-US/sync_strings.dtd
mobile/android/base/resources/drawable-hdpi/sync_ic_launcher.png
mobile/android/base/resources/drawable-ldpi/sync_ic_launcher.png
mobile/android/base/resources/drawable-mdpi/sync_ic_launcher.png
mobile/android/base/resources/drawable/sync_icon.png
mobile/android/base/resources/layout/sync_account.xml
mobile/android/base/resources/layout/sync_setup.xml
mobile/android/base/resources/layout/sync_setup_failure.xml
mobile/android/base/resources/layout/sync_setup_jpake_waiting.xml
mobile/android/base/resources/layout/sync_setup_success.xml
mobile/android/base/resources/layout/sync_stub.xml
mobile/android/base/resources/values/sync_styles.xml
mobile/android/base/resources/xml/sync_authenticator.xml
mobile/android/base/resources/xml/sync_syncadapter.xml.in
mobile/android/base/sync/AlreadySyncingException.java
mobile/android/base/sync/CollectionKeys.java
mobile/android/base/sync/CredentialsSource.java
mobile/android/base/sync/CryptoRecord.java
mobile/android/base/sync/DelayedWorkTracker.java
mobile/android/base/sync/ExtendedJSONObject.java
mobile/android/base/sync/GlobalSession.java
mobile/android/base/sync/HTTPFailureException.java
mobile/android/base/sync/InfoCollections.java
mobile/android/base/sync/MetaGlobal.java
mobile/android/base/sync/MetaGlobalException.java
mobile/android/base/sync/MetaGlobalMissingEnginesException.java
mobile/android/base/sync/MetaGlobalNotSetException.java
mobile/android/base/sync/NoCollectionKeysSetException.java
mobile/android/base/sync/NonObjectJSONException.java
mobile/android/base/sync/README.txt
mobile/android/base/sync/StubActivity.java
mobile/android/base/sync/SyncConfiguration.java
mobile/android/base/sync/SyncConfigurationException.java
mobile/android/base/sync/SyncException.java
mobile/android/base/sync/SynchronizerConfiguration.java
mobile/android/base/sync/SynchronizerConfigurations.java
mobile/android/base/sync/ThreadPool.java
mobile/android/base/sync/UnknownSynchronizerConfigurationVersionException.java
mobile/android/base/sync/Utils.java
mobile/android/base/sync/crypto/CryptoException.java
mobile/android/base/sync/crypto/CryptoInfo.java
mobile/android/base/sync/crypto/Cryptographer.java
mobile/android/base/sync/crypto/HKDF.java
mobile/android/base/sync/crypto/HMACVerificationException.java
mobile/android/base/sync/crypto/KeyBundle.java
mobile/android/base/sync/crypto/MissingCryptoInputException.java
mobile/android/base/sync/crypto/NoKeyBundleException.java
mobile/android/base/sync/crypto/Utils.java
mobile/android/base/sync/cryptographer/CryptoStatusBundle.java
mobile/android/base/sync/cryptographer/SyncCryptographer.java
mobile/android/base/sync/delegates/FreshStartDelegate.java
mobile/android/base/sync/delegates/GlobalSessionCallback.java
mobile/android/base/sync/delegates/InfoCollectionsDelegate.java
mobile/android/base/sync/delegates/KeyUploadDelegate.java
mobile/android/base/sync/delegates/MetaGlobalDelegate.java
mobile/android/base/sync/delegates/WipeServerDelegate.java
mobile/android/base/sync/jpake/BigIntegerHelper.java
mobile/android/base/sync/jpake/Gx4IsOneException.java
mobile/android/base/sync/jpake/IncorrectZkpException.java
mobile/android/base/sync/jpake/JPakeClient.java
mobile/android/base/sync/jpake/JPakeCrypto.java
mobile/android/base/sync/jpake/JPakeNoActivePairingException.java
mobile/android/base/sync/jpake/JPakeNumGenerator.java
mobile/android/base/sync/jpake/JPakeNumGeneratorRandom.java
mobile/android/base/sync/jpake/JPakeParty.java
mobile/android/base/sync/jpake/JPakeRequest.java
mobile/android/base/sync/jpake/JPakeRequestDelegate.java
mobile/android/base/sync/jpake/JPakeResponse.java
mobile/android/base/sync/jpake/JPakeUtils.java
mobile/android/base/sync/jpake/Zkp.java
mobile/android/base/sync/middleware/Crypto5MiddlewareRepository.java
mobile/android/base/sync/middleware/Crypto5MiddlewareRepositorySession.java
mobile/android/base/sync/middleware/MiddlewareRepository.java
mobile/android/base/sync/net/BaseResource.java
mobile/android/base/sync/net/CompletedEntity.java
mobile/android/base/sync/net/HandleProgressException.java
mobile/android/base/sync/net/Resource.java
mobile/android/base/sync/net/ResourceDelegate.java
mobile/android/base/sync/net/SyncResourceDelegate.java
mobile/android/base/sync/net/SyncResponse.java
mobile/android/base/sync/net/SyncStorageCollectionRequest.java
mobile/android/base/sync/net/SyncStorageCollectionRequestDelegate.java
mobile/android/base/sync/net/SyncStorageRecordRequest.java
mobile/android/base/sync/net/SyncStorageRequest.java
mobile/android/base/sync/net/SyncStorageRequestDelegate.java
mobile/android/base/sync/net/SyncStorageRequestIncrementalDelegate.java
mobile/android/base/sync/net/SyncStorageResponse.java
mobile/android/base/sync/net/TLSSocketFactory.java
mobile/android/base/sync/net/WBOCollectionRequestDelegate.java
mobile/android/base/sync/repositories/BookmarkNeedsReparentingException.java
mobile/android/base/sync/repositories/BookmarksRepository.java
mobile/android/base/sync/repositories/HistoryRepository.java
mobile/android/base/sync/repositories/IdentityRecordFactory.java
mobile/android/base/sync/repositories/InactiveSessionException.java
mobile/android/base/sync/repositories/InvalidBookmarkTypeException.java
mobile/android/base/sync/repositories/InvalidRequestException.java
mobile/android/base/sync/repositories/InvalidSessionTransitionException.java
mobile/android/base/sync/repositories/MultipleRecordsForGuidException.java
mobile/android/base/sync/repositories/NoGuidForIdException.java
mobile/android/base/sync/repositories/NullCursorException.java
mobile/android/base/sync/repositories/ParentNotFoundException.java
mobile/android/base/sync/repositories/ProfileDatabaseException.java
mobile/android/base/sync/repositories/RecordFactory.java
mobile/android/base/sync/repositories/Repository.java
mobile/android/base/sync/repositories/RepositorySession.java
mobile/android/base/sync/repositories/RepositorySessionBundle.java
mobile/android/base/sync/repositories/Server11Repository.java
mobile/android/base/sync/repositories/Server11RepositorySession.java
mobile/android/base/sync/repositories/android/AndroidBrowserBookmarksDataAccessor.java
mobile/android/base/sync/repositories/android/AndroidBrowserBookmarksRepository.java
mobile/android/base/sync/repositories/android/AndroidBrowserBookmarksRepositorySession.java
mobile/android/base/sync/repositories/android/AndroidBrowserHistoryDataAccessor.java
mobile/android/base/sync/repositories/android/AndroidBrowserHistoryDataExtender.java
mobile/android/base/sync/repositories/android/AndroidBrowserHistoryRepository.java
mobile/android/base/sync/repositories/android/AndroidBrowserHistoryRepositorySession.java
mobile/android/base/sync/repositories/android/AndroidBrowserPasswordsDataAccessor.java
mobile/android/base/sync/repositories/android/AndroidBrowserPasswordsRepository.java
mobile/android/base/sync/repositories/android/AndroidBrowserPasswordsRepositorySession.java
mobile/android/base/sync/repositories/android/AndroidBrowserRepository.java
mobile/android/base/sync/repositories/android/AndroidBrowserRepositoryDataAccessor.java
mobile/android/base/sync/repositories/android/AndroidBrowserRepositorySession.java
mobile/android/base/sync/repositories/android/Authorities.java.in
mobile/android/base/sync/repositories/android/BrowserContract.java
mobile/android/base/sync/repositories/android/PasswordColumns.java
mobile/android/base/sync/repositories/android/RepoUtils.java
mobile/android/base/sync/repositories/delegates/DeferrableRepositorySessionCreationDelegate.java
mobile/android/base/sync/repositories/delegates/RepositorySessionBeginDelegate.java
mobile/android/base/sync/repositories/delegates/RepositorySessionCleanDelegate.java
mobile/android/base/sync/repositories/delegates/RepositorySessionCreationDelegate.java
mobile/android/base/sync/repositories/delegates/RepositorySessionFetchRecordsDelegate.java
mobile/android/base/sync/repositories/delegates/RepositorySessionFinishDelegate.java
mobile/android/base/sync/repositories/delegates/RepositorySessionGuidsSinceDelegate.java
mobile/android/base/sync/repositories/delegates/RepositorySessionStoreDelegate.java
mobile/android/base/sync/repositories/delegates/RepositorySessionWipeDelegate.java
mobile/android/base/sync/repositories/domain/BookmarkRecord.java
mobile/android/base/sync/repositories/domain/BookmarkRecordFactory.java
mobile/android/base/sync/repositories/domain/HistoryRecord.java
mobile/android/base/sync/repositories/domain/HistoryRecordFactory.java
mobile/android/base/sync/repositories/domain/PasswordRecord.java
mobile/android/base/sync/repositories/domain/Record.java
mobile/android/base/sync/setup/Constants.java
mobile/android/base/sync/setup/SyncAuthenticatorService.java
mobile/android/base/sync/setup/activities/AccountActivity.java
mobile/android/base/sync/setup/activities/SetupFailureActivity.java
mobile/android/base/sync/setup/activities/SetupSuccessActivity.java
mobile/android/base/sync/setup/activities/SetupSyncActivity.java
mobile/android/base/sync/setup/activities/SetupWaitingActivity.java
mobile/android/base/sync/stage/AndroidBrowserBookmarksServerSyncStage.java
mobile/android/base/sync/stage/AndroidBrowserHistoryServerSyncStage.java
mobile/android/base/sync/stage/CheckPreconditionsStage.java
mobile/android/base/sync/stage/CompletedStage.java
mobile/android/base/sync/stage/EnsureClusterURLStage.java
mobile/android/base/sync/stage/EnsureKeysStage.java
mobile/android/base/sync/stage/FetchInfoCollectionsStage.java
mobile/android/base/sync/stage/FetchMetaGlobalStage.java
mobile/android/base/sync/stage/GlobalSyncStage.java
mobile/android/base/sync/stage/NoSuchStageException.java
mobile/android/base/sync/stage/NoSyncIDException.java
mobile/android/base/sync/stage/ServerSyncStage.java
mobile/android/base/sync/syncadapter/SyncAdapter.java
mobile/android/base/sync/syncadapter/SyncService.java
mobile/android/base/sync/synchronizer/RecordConsumer.java
mobile/android/base/sync/synchronizer/RecordsChannel.java
mobile/android/base/sync/synchronizer/RecordsChannelDelegate.java
mobile/android/base/sync/synchronizer/RecordsConsumerDelegate.java
mobile/android/base/sync/synchronizer/SessionNotBegunException.java
mobile/android/base/sync/synchronizer/Synchronizer.java
mobile/android/base/sync/synchronizer/SynchronizerDelegate.java
mobile/android/base/sync/synchronizer/SynchronizerSession.java
mobile/android/base/sync/synchronizer/SynchronizerSessionDelegate.java
mobile/android/base/sync/synchronizer/UnbundleError.java
mobile/android/base/sync/synchronizer/UnexpectedSessionException.java
mobile/android/sync/README.txt
mobile/android/sync/android-drawable-resources.mn
mobile/android/sync/android-layout-resources.mn
mobile/android/sync/android-values-resources.mn
mobile/android/sync/android-xml-resources.mn
mobile/android/sync/java-sources.mn
mobile/android/sync/manifests/SyncAndroidManifest_activities.xml.in
mobile/android/sync/manifests/SyncAndroidManifest_permissions.xml.in
mobile/android/sync/manifests/SyncAndroidManifest_services.xml.in
mobile/android/sync/preprocess-sources.mn
mobile/android/sync/strings.xml.in
new file mode 100644
--- /dev/null
+++ b/mobile/android/base/apache/commons/codec/BinaryDecoder.java
@@ -0,0 +1,43 @@
+// Mozilla has modified this file - see http://hg.mozilla.org/ for details.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.mozilla.apache.commons.codec;
+
+/**
+ * Defines common decoding methods for byte array decoders.
+ *
+ * @author Apache Software Foundation
+ * @version $Id: BinaryDecoder.java 1075406 2011-02-28 16:18:26Z ggregory $
+ */
+public interface BinaryDecoder extends Decoder {
+
+    /**
+     * Decodes a byte array and returns the results as a byte array. 
+     *
+     * @param source A byte array which has been encoded with the
+     *      appropriate encoder
+     * 
+     * @return a byte array that contains decoded content
+     * 
+     * @throws DecoderException A decoder exception is thrown
+     *          if a Decoder encounters a failure condition during
+     *          the decode process.
+     */
+    byte[] decode(byte[] source) throws DecoderException;
+}  
+
new file mode 100644
--- /dev/null
+++ b/mobile/android/base/apache/commons/codec/BinaryEncoder.java
@@ -0,0 +1,43 @@
+// Mozilla has modified this file - see http://hg.mozilla.org/ for details.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.mozilla.apache.commons.codec;
+
+/**
+ * Defines common encoding methods for byte array encoders.
+ * 
+ * @author Apache Software Foundation
+ * @version $Id: BinaryEncoder.java 1075406 2011-02-28 16:18:26Z ggregory $
+ */
+public interface BinaryEncoder extends Encoder {
+    
+    /**
+     * Encodes a byte array and return the encoded data
+     * as a byte array.
+     * 
+     * @param source Data to be encoded
+     *
+     * @return A byte array containing the encoded data
+     * 
+     * @throws EncoderException thrown if the Encoder
+     *      encounters a failure condition during the
+     *      encoding process.
+     */
+    byte[] encode(byte[] source) throws EncoderException;
+}  
+
new file mode 100644
--- /dev/null
+++ b/mobile/android/base/apache/commons/codec/CharEncoding.java
@@ -0,0 +1,127 @@
+// Mozilla has modified this file - see http://hg.mozilla.org/ for details.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.mozilla.apache.commons.codec;
+
+/**
+ * Character encoding names required of every implementation of the Java platform.
+ * 
+ * From the Java documentation <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/nio/charset/Charset.html">Standard
+ * charsets</a>:
+ * <p>
+ * <cite>Every implementation of the Java platform is required to support the following character encodings. Consult the
+ * release documentation for your implementation to see if any other encodings are supported. Consult the release
+ * documentation for your implementation to see if any other encodings are supported. </cite>
+ * </p>
+ * 
+ * <ul>
+ * <li><code>US-ASCII</code><br/>
+ * Seven-bit ASCII, a.k.a. ISO646-US, a.k.a. the Basic Latin block of the Unicode character set.</li>
+ * <li><code>ISO-8859-1</code><br/>
+ * ISO Latin Alphabet No. 1, a.k.a. ISO-LATIN-1.</li>
+ * <li><code>UTF-8</code><br/>
+ * Eight-bit Unicode Transformation Format.</li>
+ * <li><code>UTF-16BE</code><br/>
+ * Sixteen-bit Unicode Transformation Format, big-endian byte order.</li>
+ * <li><code>UTF-16LE</code><br/>
+ * Sixteen-bit Unicode Transformation Format, little-endian byte order.</li>
+ * <li><code>UTF-16</code><br/>
+ * Sixteen-bit Unicode Transformation Format, byte order specified by a mandatory initial byte-order mark (either order
+ * accepted on input, big-endian used on output.)</li>
+ * </ul>
+ * 
+ * This perhaps would best belong in the [lang] project. Even if a similar interface is defined in [lang], it is not
+ * forseen that [codec] would be made to depend on [lang].
+ * 
+ * @see <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/nio/charset/Charset.html">Standard charsets</a>
+ * @author Apache Software Foundation
+ * @since 1.4
+ * @version $Id: CharEncoding.java 797857 2009-07-25 23:43:33Z ggregory $
+ */
+public class CharEncoding {
+    /**
+     * CharEncodingISO Latin Alphabet No. 1, a.k.a. ISO-LATIN-1. </p>
+     * <p>
+     * Every implementation of the Java platform is required to support this character encoding.
+     * </p>
+     * 
+     * @see <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/nio/charset/Charset.html">Standard charsets</a>
+     */
+    public static final String ISO_8859_1 = "ISO-8859-1";
+
+    /**
+     * <p>
+     * Seven-bit ASCII, also known as ISO646-US, also known as the Basic Latin block of the Unicode character set.
+     * </p>
+     * <p>
+     * Every implementation of the Java platform is required to support this character encoding.
+     * </p>
+     * 
+     * @see <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/nio/charset/Charset.html">Standard charsets</a>
+     */
+    public static final String US_ASCII = "US-ASCII";
+
+    /**
+     * <p>
+     * Sixteen-bit Unicode Transformation Format, The byte order specified by a mandatory initial byte-order mark
+     * (either order accepted on input, big-endian used on output)
+     * </p>
+     * <p>
+     * Every implementation of the Java platform is required to support this character encoding.
+     * </p>
+     * 
+     * @see <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/nio/charset/Charset.html">Standard charsets</a>
+     */
+    public static final String UTF_16 = "UTF-16";
+
+    /**
+     * <p>
+     * Sixteen-bit Unicode Transformation Format, big-endian byte order.
+     * </p>
+     * <p>
+     * Every implementation of the Java platform is required to support this character encoding.
+     * </p>
+     * 
+     * @see <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/nio/charset/Charset.html">Standard charsets</a>
+     */
+    public static final String UTF_16BE = "UTF-16BE";
+
+    /**
+     * <p>
+     * Sixteen-bit Unicode Transformation Format, little-endian byte order.
+     * </p>
+     * <p>
+     * Every implementation of the Java platform is required to support this character encoding.
+     * </p>
+     * 
+     * @see <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/nio/charset/Charset.html">Standard charsets</a>
+     */
+    public static final String UTF_16LE = "UTF-16LE";
+
+    /**
+     * <p>
+     * Eight-bit Unicode Transformation Format.
+     * </p>
+     * <p>
+     * Every implementation of the Java platform is required to support this character encoding.
+     * </p>
+     * 
+     * @see <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/nio/charset/Charset.html">Standard charsets</a>
+     */
+    public static final String UTF_8 = "UTF-8";
+}
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/mobile/android/base/apache/commons/codec/Decoder.java
@@ -0,0 +1,56 @@
+// Mozilla has modified this file - see http://hg.mozilla.org/ for details.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.mozilla.apache.commons.codec;
+
+/**
+ * <p>Provides the highest level of abstraction for Decoders.
+ * This is the sister interface of {@link Encoder}.  All
+ * Decoders implement this common generic interface.</p>
+ * 
+ * <p>Allows a user to pass a generic Object to any Decoder 
+ * implementation in the codec package.</p>
+ * 
+ * <p>One of the two interfaces at the center of the codec package.</p>
+ * 
+ * @author Apache Software Foundation
+ * @version $Id: Decoder.java 1075404 2011-02-28 16:17:29Z ggregory $
+ */
+public interface Decoder {
+
+    /**
+     * Decodes an "encoded" Object and returns a "decoded"
+     * Object.  Note that the implementation of this
+     * interface will try to cast the Object parameter
+     * to the specific type expected by a particular Decoder
+     * implementation.  If a {@link ClassCastException} occurs
+     * this decode method will throw a DecoderException.
+     * 
+     * @param source the object to decode
+     * 
+     * @return a 'decoded" object
+     * 
+     * @throws DecoderException a decoder exception can
+     * be thrown for any number of reasons.  Some good
+     * candidates are that the parameter passed to this
+     * method is null, a param cannot be cast to the
+     * appropriate type for a specific encoder.
+     */
+    Object decode(Object source) throws DecoderException;
+}  
+
new file mode 100644
--- /dev/null
+++ b/mobile/android/base/apache/commons/codec/DecoderException.java
@@ -0,0 +1,90 @@
+// Mozilla has modified this file - see http://hg.mozilla.org/ for details.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.mozilla.apache.commons.codec;
+
+/**
+ * Thrown when there is a failure condition during the decoding process. This exception is thrown when a {@link Decoder}
+ * encounters a decoding specific exception such as invalid data, or characters outside of the expected range.
+ * 
+ * @author Apache Software Foundation
+ * @version $Id: DecoderException.java 1080701 2011-03-11 17:52:27Z ggregory $
+ */
+public class DecoderException extends Exception {
+
+    /**
+     * Declares the Serial Version Uid.
+     * 
+     * @see <a href="http://c2.com/cgi/wiki?AlwaysDeclareSerialVersionUid">Always Declare Serial Version Uid</a>
+     */
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * Constructs a new exception with <code>null</code> as its detail message. The cause is not initialized, and may
+     * subsequently be initialized by a call to {@link #initCause}.
+     * 
+     * @since 1.4
+     */
+    public DecoderException() {
+        super();
+    }
+
+    /**
+     * Constructs a new exception with the specified detail message. The cause is not initialized, and may subsequently
+     * be initialized by a call to {@link #initCause}.
+     * 
+     * @param message
+     *            The detail message which is saved for later retrieval by the {@link #getMessage()} method.
+     */
+    public DecoderException(String message) {
+        super(message);
+    }
+
+    /**
+     * Constructsa new exception with the specified detail message and cause.
+     * 
+     * <p>
+     * Note that the detail message associated with <code>cause</code> is not automatically incorporated into this
+     * exception's detail message.
+     * </p>
+     * 
+     * @param message
+     *            The detail message which is saved for later retrieval by the {@link #getMessage()} method.
+     * @param cause
+     *            The cause which is saved for later retrieval by the {@link #getCause()} method. A <code>null</code>
+     *            value is permitted, and indicates that the cause is nonexistent or unknown.
+     * @since 1.4
+     */
+    public DecoderException(String message, Throwable cause) {
+        super(message, cause);
+    }
+
+    /**
+     * Constructs a new exception with the specified cause and a detail message of <code>(cause==null ?
+     * null : cause.toString())</code> (which typically contains the class and detail message of <code>cause</code>).
+     * This constructor is useful for exceptions that are little more than wrappers for other throwables.
+     * 
+     * @param cause
+     *            The cause which is saved for later retrieval by the {@link #getCause()} method. A <code>null</code>
+     *            value is permitted, and indicates that the cause is nonexistent or unknown.
+     * @since 1.4
+     */
+    public DecoderException(Throwable cause) {
+        super(cause);
+    }
+}
new file mode 100644
--- /dev/null
+++ b/mobile/android/base/apache/commons/codec/Encoder.java
@@ -0,0 +1,47 @@
+// Mozilla has modified this file - see http://hg.mozilla.org/ for details.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.mozilla.apache.commons.codec;
+
+/**
+ * <p>Provides the highest level of abstraction for Encoders.
+ * This is the sister interface of {@link Decoder}.  Every implementation of
+ * Encoder provides this common generic interface whic allows a user to pass a 
+ * generic Object to any Encoder implementation in the codec package.</p>
+ *
+ * @author Apache Software Foundation
+ * @version $Id: Encoder.java 1075406 2011-02-28 16:18:26Z ggregory $
+ */
+public interface Encoder {
+    
+    /**
+     * Encodes an "Object" and returns the encoded content 
+     * as an Object.  The Objects here may just be <code>byte[]</code>
+     * or <code>String</code>s depending on the implementation used.
+     *   
+     * @param source An object ot encode
+     * 
+     * @return An "encoded" Object
+     * 
+     * @throws EncoderException an encoder exception is
+     *  thrown if the encoder experiences a failure
+     *  condition during the encoding process.
+     */
+    Object encode(Object source) throws EncoderException;
+}  
+
new file mode 100644
--- /dev/null
+++ b/mobile/android/base/apache/commons/codec/EncoderException.java
@@ -0,0 +1,91 @@
+// Mozilla has modified this file - see http://hg.mozilla.org/ for details.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.mozilla.apache.commons.codec;
+
+/**
+ * Thrown when there is a failure condition during the encoding process. This exception is thrown when an
+ * {@link Encoder} encounters a encoding specific exception such as invalid data, inability to calculate a checksum,
+ * characters outside of the expected range.
+ * 
+ * @author Apache Software Foundation
+ * @version $Id: EncoderException.java 1080701 2011-03-11 17:52:27Z ggregory $
+ */
+public class EncoderException extends Exception {
+
+    /**
+     * Declares the Serial Version Uid.
+     * 
+     * @see <a href="http://c2.com/cgi/wiki?AlwaysDeclareSerialVersionUid">Always Declare Serial Version Uid</a>
+     */
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * Constructs a new exception with <code>null</code> as its detail message. The cause is not initialized, and may
+     * subsequently be initialized by a call to {@link #initCause}.
+     * 
+     * @since 1.4
+     */
+    public EncoderException() {
+        super();
+    }
+
+    /**
+     * Constructs a new exception with the specified detail message. The cause is not initialized, and may subsequently
+     * be initialized by a call to {@link #initCause}.
+     * 
+     * @param message
+     *            a useful message relating to the encoder specific error.
+     */
+    public EncoderException(String message) {
+        super(message);
+    }
+
+    /**
+     * Constructs a new exception with the specified detail message and cause.
+     * 
+     * <p>
+     * Note that the detail message associated with <code>cause</code> is not automatically incorporated into this
+     * exception's detail message.
+     * </p>
+     * 
+     * @param message
+     *            The detail message which is saved for later retrieval by the {@link #getMessage()} method.
+     * @param cause
+     *            The cause which is saved for later retrieval by the {@link #getCause()} method. A <code>null</code>
+     *            value is permitted, and indicates that the cause is nonexistent or unknown.
+     * @since 1.4
+     */
+    public EncoderException(String message, Throwable cause) {
+        super(message, cause);
+    }
+
+    /**
+     * Constructs a new exception with the specified cause and a detail message of <code>(cause==null ?
+     * null : cause.toString())</code> (which typically contains the class and detail message of <code>cause</code>).
+     * This constructor is useful for exceptions that are little more than wrappers for other throwables.
+     * 
+     * @param cause
+     *            The cause which is saved for later retrieval by the {@link #getCause()} method. A <code>null</code>
+     *            value is permitted, and indicates that the cause is nonexistent or unknown.
+     * @since 1.4
+     */
+    public EncoderException(Throwable cause) {
+        super(cause);
+    }
+}
new file mode 100644
--- /dev/null
+++ b/mobile/android/base/apache/commons/codec/StringDecoder.java
@@ -0,0 +1,41 @@
+// Mozilla has modified this file - see http://hg.mozilla.org/ for details.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.mozilla.apache.commons.codec;
+
+/**
+ * Defines common decoding methods for String decoders.
+ *
+ * @author Apache Software Foundation
+ * @version $Id: StringDecoder.java 1080701 2011-03-11 17:52:27Z ggregory $
+ */
+public interface StringDecoder extends Decoder {
+    
+    /**
+     * Decodes a String and returns a String.
+     * 
+     * @param source the String to decode
+     * 
+     * @return the encoded String
+     * 
+     * @throws DecoderException thrown if there is
+     *  an error condition during the Encoding process.
+     */
+    String decode(String source) throws DecoderException;
+}  
+
new file mode 100644
--- /dev/null
+++ b/mobile/android/base/apache/commons/codec/StringEncoder.java
@@ -0,0 +1,41 @@
+// Mozilla has modified this file - see http://hg.mozilla.org/ for details.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.mozilla.apache.commons.codec;
+
+/**
+ * Defines common encoding methods for String encoders.
+ *
+ * @author Apache Software Foundation
+ * @version $Id: StringEncoder.java 1080701 2011-03-11 17:52:27Z ggregory $
+ */
+public interface StringEncoder extends Encoder {
+    
+    /**
+     * Encodes a String and returns a String.
+     * 
+     * @param source the String to encode
+     * 
+     * @return the encoded String
+     * 
+     * @throws EncoderException thrown if there is
+     *  an error conidition during the Encoding process.
+     */
+    String encode(String source) throws EncoderException;
+}  
+
new file mode 100644
--- /dev/null
+++ b/mobile/android/base/apache/commons/codec/StringEncoderComparator.java
@@ -0,0 +1,85 @@
+// Mozilla has modified this file - see http://hg.mozilla.org/ for details.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.mozilla.apache.commons.codec;
+
+import java.util.Comparator;
+
+/**
+ * Compares Strings using a {@link StringEncoder}. This comparator is used to sort Strings by an encoding scheme such as
+ * Soundex, Metaphone, etc. This class can come in handy if one need to sort Strings by an encoded form of a name such
+ * as Soundex.
+ * 
+ * @author Apache Software Foundation
+ * @version $Id: StringEncoderComparator.java 1080701 2011-03-11 17:52:27Z ggregory $
+ */
+public class StringEncoderComparator implements Comparator {
+
+    /**
+     * Internal encoder instance.
+     */
+    private final StringEncoder stringEncoder;
+
+    /**
+     * Constructs a new instance.
+     * 
+     * @deprecated Creating an instance without a {@link StringEncoder} leads to a {@link NullPointerException}. Will be
+     *             removed in 2.0.
+     */
+    public StringEncoderComparator() {
+        this.stringEncoder = null; // Trying to use this will cause things to break
+    }
+
+    /**
+     * Constructs a new instance with the given algorithm.
+     * 
+     * @param stringEncoder
+     *            the StringEncoder used for comparisons.
+     */
+    public StringEncoderComparator(StringEncoder stringEncoder) {
+        this.stringEncoder = stringEncoder;
+    }
+
+    /**
+     * Compares two strings based not on the strings themselves, but on an encoding of the two strings using the
+     * StringEncoder this Comparator was created with.
+     * 
+     * If an {@link EncoderException} is encountered, return <code>0</code>.
+     * 
+     * @param o1
+     *            the object to compare
+     * @param o2
+     *            the object to compare to
+     * @return the Comparable.compareTo() return code or 0 if an encoding error was caught.
+     * @see Comparable
+     */
+    public int compare(Object o1, Object o2) {
+
+        int compareCode = 0;
+
+        try {
+            Comparable s1 = (Comparable) this.stringEncoder.encode(o1);
+            Comparable s2 = (Comparable) this.stringEncoder.encode(o2);
+            compareCode = s1.compareTo(s2);
+        } catch (EncoderException ee) {
+            compareCode = 0;
+        }
+        return compareCode;
+    }
+
+}
new file mode 100644
--- /dev/null
+++ b/mobile/android/base/apache/commons/codec/binary/Base32.java
@@ -0,0 +1,471 @@
+// Mozilla has modified this file - see http://hg.mozilla.org/ for details.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.mozilla.apache.commons.codec.binary;
+
+/**
+ * Provides Base32 encoding and decoding as defined by <a href="http://www.ietf.org/rfc/rfc4648.txt">RFC 4648</a>.
+ * 
+ * <p>
+ * The class can be parameterized in the following manner with various constructors:
+ * <ul>
+ * <li>Whether to use the "base32hex" variant instead of the default "base32"</li>
+ * <li>Line length: Default 76. Line length that aren't multiples of 8 will still essentially end up being multiples of
+ * 8 in the encoded data.
+ * <li>Line separator: Default is CRLF ("\r\n")</li>
+ * </ul>
+ * </p>
+ * <p>
+ * This class operates directly on byte streams, and not character streams.
+ * </p>
+ * <p>
+ * This class is not thread-safe. Each thread should use its own instance.
+ * </p>
+ * 
+ * @see <a href="http://www.ietf.org/rfc/rfc4648.txt">RFC 4648</a>
+ * 
+ * @since 1.5
+ * @version $Revision: 1080712 $
+ */
+public class Base32 extends BaseNCodec {
+
+    /**
+     * BASE32 characters are 5 bits in length. 
+     * They are formed by taking a block of five octets to form a 40-bit string, 
+     * which is converted into eight BASE32 characters.
+     */
+    private static final int BITS_PER_ENCODED_BYTE = 5;
+    private static final int BYTES_PER_ENCODED_BLOCK = 8;
+    private static final int BYTES_PER_UNENCODED_BLOCK = 5;
+
+    /**
+     * Chunk separator per RFC 2045 section 2.1.
+     *
+     * @see <a href="http://www.ietf.org/rfc/rfc2045.txt">RFC 2045 section 2.1</a>
+     */
+    private static final byte[] CHUNK_SEPARATOR = {'\r', '\n'};
+
+    /**
+     * This array is a lookup table that translates Unicode characters drawn from the "Base32 Alphabet" (as specified in
+     * Table 3 of RFC 2045) into their 5-bit positive integer equivalents. Characters that are not in the Base32
+     * alphabet but fall within the bounds of the array are translated to -1.
+     * 
+     */
+    private static final byte[] DECODE_TABLE = {
+         //  0   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F
+            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 00-0f
+            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 10-1f
+            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 63, // 20-2f
+            -1, -1, 26, 27, 28, 29, 30, 31, -1, -1, -1, -1, -1, -1, -1, -1, // 30-3f 2-7
+            -1,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, // 40-4f A-N
+            15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,                     // 50-5a O-Z
+    };
+
+    /**
+     * This array is a lookup table that translates 5-bit positive integer index values into their "Base32 Alphabet"
+     * equivalents as specified in Table 3 of RFC 2045.
+     */
+    private static final byte[] ENCODE_TABLE = {
+            'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
+            'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
+            '2', '3', '4', '5', '6', '7',
+    };
+
+    /**
+     * This array is a lookup table that translates Unicode characters drawn from the "Base32 |Hex Alphabet" (as specified in
+     * Table 3 of RFC 2045) into their 5-bit positive integer equivalents. Characters that are not in the Base32 Hex
+     * alphabet but fall within the bounds of the array are translated to -1.
+     * 
+     */
+    private static final byte[] HEX_DECODE_TABLE = {
+         //  0   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F
+            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 00-0f
+            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 10-1f
+            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 63, // 20-2f
+             0,  1,  2,  3,  4,  5,  6,  7,  8,  9, -1, -1, -1, -1, -1, -1, // 30-3f 2-7
+            -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, // 40-4f A-N
+            25, 26, 27, 28, 29, 30, 31, 32,                                 // 50-57 O-V
+    };
+
+    /**
+     * This array is a lookup table that translates 5-bit positive integer index values into their "Base32 Hex Alphabet"
+     * equivalents as specified in Table 3 of RFC 2045.
+     */
+    private static final byte[] HEX_ENCODE_TABLE = {
+            '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 
+            'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
+            'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V',
+    };
+
+    /** Mask used to extract 5 bits, used when encoding Base32 bytes */
+    private static final int MASK_5BITS = 0x1f;
+
+    // The static final fields above are used for the original static byte[] methods on Base32.
+    // The private member fields below are used with the new streaming approach, which requires
+    // some state be preserved between calls of encode() and decode().
+
+    /**
+     * Place holder for the bytes we're dealing with for our based logic. 
+     * Bitwise operations store and extract the encoding or decoding from this variable.
+     */
+    private long bitWorkArea;
+
+    /**
+     * Convenience variable to help us determine when our buffer is going to run out of room and needs resizing.
+     * <code>decodeSize = {@link BYTES_PER_ENCODED_BLOCK} - 1 + lineSeparator.length;</code>
+     */
+    private final int decodeSize;
+
+    /**
+     * Decode table to use.
+     */
+    private final byte[] decodeTable;
+
+    /**
+     * Convenience variable to help us determine when our buffer is going to run out of room and needs resizing.
+     * <code>encodeSize = {@link BYTES_PER_ENCODED_BLOCK} + lineSeparator.length;</code>
+     */
+    private final int encodeSize;
+
+    /**
+     * Encode table to use.
+     */
+    private final byte[] encodeTable;
+
+    /**
+     * Line separator for encoding. Not used when decoding. Only used if lineLength > 0.
+     */
+    private final byte[] lineSeparator;
+
+    /**
+     * Creates a Base32 codec used for decoding and encoding.
+     * <p>
+     * When encoding the line length is 0 (no chunking).
+     * </p>
+     * 
+     */
+    public Base32() {
+        this(false);
+    }
+
+    /**
+     * Creates a Base32 codec used for decoding and encoding.
+     * <p>
+     * When encoding the line length is 0 (no chunking).
+     * </p>
+     * @param useHex if <code>true</code> then use Base32 Hex alphabet
+     */
+    public Base32(boolean useHex) {
+        this(0, null, useHex);
+    }
+
+    /**
+     * Creates a Base32 codec used for decoding and encoding.
+     * <p>
+     * When encoding the line length is given in the constructor, the line separator is CRLF.
+     * </p>
+     * 
+     * @param lineLength
+     *            Each line of encoded data will be at most of the given length (rounded down to nearest multiple of 8).
+     *            If lineLength <= 0, then the output will not be divided into lines (chunks). Ignored when decoding.
+     */
+    public Base32(int lineLength) {
+        this(lineLength, CHUNK_SEPARATOR);
+    }
+
+    /**
+     * Creates a Base32 codec used for decoding and encoding.
+     * <p>
+     * When encoding the line length and line separator are given in the constructor.
+     * </p>
+     * <p>
+     * Line lengths that aren't multiples of 8 will still essentially end up being multiples of 8 in the encoded data.
+     * </p>
+     * 
+     * @param lineLength
+     *            Each line of encoded data will be at most of the given length (rounded down to nearest multiple of 8).
+     *            If lineLength <= 0, then the output will not be divided into lines (chunks). Ignored when decoding.
+     * @param lineSeparator
+     *            Each line of encoded data will end with this sequence of bytes.
+     * @throws IllegalArgumentException
+     *             The provided lineSeparator included some Base32 characters. That's not going to work!
+     */
+    public Base32(int lineLength, byte[] lineSeparator) {
+        this(lineLength, lineSeparator, false);
+    }
+    
+    /**
+     * Creates a Base32 / Base32 Hex codec used for decoding and encoding.
+     * <p>
+     * When encoding the line length and line separator are given in the constructor.
+     * </p>
+     * <p>
+     * Line lengths that aren't multiples of 8 will still essentially end up being multiples of 8 in the encoded data.
+     * </p>
+     * 
+     * @param lineLength
+     *            Each line of encoded data will be at most of the given length (rounded down to nearest multiple of 8).
+     *            If lineLength <= 0, then the output will not be divided into lines (chunks). Ignored when decoding.
+     * @param lineSeparator
+     *            Each line of encoded data will end with this sequence of bytes.
+     * @param useHex if <code>true</code>, then use Base32 Hex alphabet, otherwise use Base32 alphabet
+     * @throws IllegalArgumentException
+     *             The provided lineSeparator included some Base32 characters. That's not going to work!
+     *             Or the lineLength > 0 and lineSeparator is null.
+     */
+    public Base32(int lineLength, byte[] lineSeparator, boolean useHex) {
+        super(BYTES_PER_UNENCODED_BLOCK, BYTES_PER_ENCODED_BLOCK, 
+                lineLength, 
+                lineSeparator == null ? 0 : lineSeparator.length);
+        if (useHex){
+            this.encodeTable = HEX_ENCODE_TABLE;
+            this.decodeTable = HEX_DECODE_TABLE;            
+        } else {
+            this.encodeTable = ENCODE_TABLE;
+            this.decodeTable = DECODE_TABLE;            
+        }
+        if (lineLength > 0) {
+            if (lineSeparator == null) {
+                throw new IllegalArgumentException("lineLength "+lineLength+" > 0, but lineSeparator is null");
+            }
+            // Must be done after initializing the tables
+            if (containsAlphabetOrPad(lineSeparator)) {
+                String sep = StringUtils.newStringUtf8(lineSeparator);
+                throw new IllegalArgumentException("lineSeparator must not contain Base32 characters: [" + sep + "]");
+            }
+            this.encodeSize = BYTES_PER_ENCODED_BLOCK + lineSeparator.length;
+            this.lineSeparator = new byte[lineSeparator.length];
+            System.arraycopy(lineSeparator, 0, this.lineSeparator, 0, lineSeparator.length);
+        } else {
+            this.encodeSize = BYTES_PER_ENCODED_BLOCK;
+            this.lineSeparator = null;
+        }
+        this.decodeSize = this.encodeSize - 1;
+    }
+
+    /**
+     * <p>
+     * Decodes all of the provided data, starting at inPos, for inAvail bytes. Should be called at least twice: once
+     * with the data to decode, and once with inAvail set to "-1" to alert decoder that EOF has been reached. The "-1"
+     * call is not necessary when decoding, but it doesn't hurt, either.
+     * </p>
+     * <p>
+     * Ignores all non-Base32 characters. This is how chunked (e.g. 76 character) data is handled, since CR and LF are
+     * silently ignored, but has implications for other bytes, too. This method subscribes to the garbage-in,
+     * garbage-out philosophy: it will not check the provided data for validity.
+     * </p>
+     * 
+     * @param in
+     *            byte[] array of ascii data to Base32 decode.
+     * @param inPos
+     *            Position to start reading data from.
+     * @param inAvail
+     *            Amount of bytes available from input for encoding.
+     *
+     * Output is written to {@link #buffer} as 8-bit octets, using {@link pos} as the buffer position
+     */
+    void decode(byte[] in, int inPos, int inAvail) { // package protected for access from I/O streams
+        if (eof) {
+            return;
+        }
+        if (inAvail < 0) {
+            eof = true;
+        }
+        for (int i = 0; i < inAvail; i++) {
+            byte b = in[inPos++];
+            if (b == PAD) {
+                // We're done.
+                eof = true;
+                break;
+            } else {
+                ensureBufferSize(decodeSize);
+                if (b >= 0 && b < this.decodeTable.length) {
+                    int result = this.decodeTable[b];
+                    if (result >= 0) {
+                        modulus = (modulus+1) % BYTES_PER_ENCODED_BLOCK;
+                        bitWorkArea = (bitWorkArea << BITS_PER_ENCODED_BYTE) + result; // collect decoded bytes
+                        if (modulus == 0) { // we can output the 5 bytes
+                            buffer[pos++] = (byte) ((bitWorkArea >> 32) & MASK_8BITS);
+                            buffer[pos++] = (byte) ((bitWorkArea >> 24) & MASK_8BITS);
+                            buffer[pos++] = (byte) ((bitWorkArea >> 16) & MASK_8BITS);
+                            buffer[pos++] = (byte) ((bitWorkArea >> 8) & MASK_8BITS);
+                            buffer[pos++] = (byte) (bitWorkArea & MASK_8BITS);
+                        }
+                    }
+                }
+            }
+        }
+    
+        // Two forms of EOF as far as Base32 decoder is concerned: actual
+        // EOF (-1) and first time '=' character is encountered in stream.
+        // This approach makes the '=' padding characters completely optional.
+        if (eof && modulus >= 2) { // if modulus < 2, nothing to do
+            ensureBufferSize(decodeSize);
+    
+            //  we ignore partial bytes, i.e. only multiples of 8 count
+            switch (modulus) {
+                case 2 : // 10 bits, drop 2 and output one byte
+                    buffer[pos++] = (byte) ((bitWorkArea >> 2) & MASK_8BITS);
+                    break;
+                case 3 : // 15 bits, drop 7 and output 1 byte
+                    buffer[pos++] = (byte) ((bitWorkArea >> 7) & MASK_8BITS);
+                    break;
+                case 4 : // 20 bits = 2*8 + 4
+                    bitWorkArea = bitWorkArea >> 4; // drop 4 bits
+                    buffer[pos++] = (byte) ((bitWorkArea >> 8) & MASK_8BITS);
+                    buffer[pos++] = (byte) ((bitWorkArea) & MASK_8BITS);
+                    break;
+                case 5 : // 25bits = 3*8 + 1
+                    bitWorkArea = bitWorkArea >> 1;
+                    buffer[pos++] = (byte) ((bitWorkArea >> 16) & MASK_8BITS);
+                    buffer[pos++] = (byte) ((bitWorkArea >> 8) & MASK_8BITS);
+                    buffer[pos++] = (byte) ((bitWorkArea) & MASK_8BITS);
+                    break;
+                case 6 : // 30bits = 3*8 + 6
+                    bitWorkArea = bitWorkArea >> 6;
+                    buffer[pos++] = (byte) ((bitWorkArea >> 16) & MASK_8BITS);
+                    buffer[pos++] = (byte) ((bitWorkArea >> 8) & MASK_8BITS);
+                    buffer[pos++] = (byte) ((bitWorkArea) & MASK_8BITS);
+                    break;
+                case 7 : // 35 = 4*8 +3
+                    bitWorkArea = bitWorkArea >> 3;
+                    buffer[pos++] = (byte) ((bitWorkArea >> 24) & MASK_8BITS);
+                    buffer[pos++] = (byte) ((bitWorkArea >> 16) & MASK_8BITS);
+                    buffer[pos++] = (byte) ((bitWorkArea >> 8) & MASK_8BITS);
+                    buffer[pos++] = (byte) ((bitWorkArea) & MASK_8BITS);
+                    break;
+            }
+        }
+    }
+
+    /**
+     * <p>
+     * Encodes all of the provided data, starting at inPos, for inAvail bytes. Must be called at least twice: once with
+     * the data to encode, and once with inAvail set to "-1" to alert encoder that EOF has been reached, so flush last
+     * remaining bytes (if not multiple of 5).
+     * </p>
+     * 
+     * @param in
+     *            byte[] array of binary data to Base32 encode.
+     * @param inPos
+     *            Position to start reading data from.
+     * @param inAvail
+     *            Amount of bytes available from input for encoding.
+     */
+    void encode(byte[] in, int inPos, int inAvail) { // package protected for access from I/O streams
+        if (eof) {
+            return;
+        }
+        // inAvail < 0 is how we're informed of EOF in the underlying data we're
+        // encoding.
+        if (inAvail < 0) {
+            eof = true;
+            if (0 == modulus && lineLength == 0) {
+                return; // no leftovers to process and not using chunking
+            }
+            ensureBufferSize(encodeSize);
+            int savedPos = pos;
+            switch (modulus) { // % 5
+                case 1 : // Only 1 octet; take top 5 bits then remainder
+                    buffer[pos++] = encodeTable[(int)(bitWorkArea >> 3) & MASK_5BITS]; // 8-1*5 = 3
+                    buffer[pos++] = encodeTable[(int)(bitWorkArea << 2) & MASK_5BITS]; // 5-3=2
+                    buffer[pos++] = PAD;
+                    buffer[pos++] = PAD;
+                    buffer[pos++] = PAD;
+                    buffer[pos++] = PAD;
+                    buffer[pos++] = PAD;
+                    buffer[pos++] = PAD;
+                    break;
+    
+                case 2 : // 2 octets = 16 bits to use
+                    buffer[pos++] = encodeTable[(int)(bitWorkArea >> 11) & MASK_5BITS]; // 16-1*5 = 11
+                    buffer[pos++] = encodeTable[(int)(bitWorkArea >>  6) & MASK_5BITS]; // 16-2*5 = 6
+                    buffer[pos++] = encodeTable[(int)(bitWorkArea >>  1) & MASK_5BITS]; // 16-3*5 = 1
+                    buffer[pos++] = encodeTable[(int)(bitWorkArea <<  4) & MASK_5BITS]; // 5-1 = 4
+                    buffer[pos++] = PAD;
+                    buffer[pos++] = PAD;
+                    buffer[pos++] = PAD;
+                    buffer[pos++] = PAD;
+                    break;
+                case 3 : // 3 octets = 24 bits to use
+                    buffer[pos++] = encodeTable[(int)(bitWorkArea >> 19) & MASK_5BITS]; // 24-1*5 = 19
+                    buffer[pos++] = encodeTable[(int)(bitWorkArea >> 14) & MASK_5BITS]; // 24-2*5 = 14
+                    buffer[pos++] = encodeTable[(int)(bitWorkArea >>  9) & MASK_5BITS]; // 24-3*5 = 9
+                    buffer[pos++] = encodeTable[(int)(bitWorkArea >>  4) & MASK_5BITS]; // 24-4*5 = 4
+                    buffer[pos++] = encodeTable[(int)(bitWorkArea <<  1) & MASK_5BITS]; // 5-4 = 1
+                    buffer[pos++] = PAD;
+                    buffer[pos++] = PAD;
+                    buffer[pos++] = PAD;
+                    break;
+                case 4 : // 4 octets = 32 bits to use
+                    buffer[pos++] = encodeTable[(int)(bitWorkArea >> 27) & MASK_5BITS]; // 32-1*5 = 27
+                    buffer[pos++] = encodeTable[(int)(bitWorkArea >> 22) & MASK_5BITS]; // 32-2*5 = 22
+                    buffer[pos++] = encodeTable[(int)(bitWorkArea >> 17) & MASK_5BITS]; // 32-3*5 = 17
+                    buffer[pos++] = encodeTable[(int)(bitWorkArea >> 12) & MASK_5BITS]; // 32-4*5 = 12
+                    buffer[pos++] = encodeTable[(int)(bitWorkArea >>  7) & MASK_5BITS]; // 32-5*5 =  7
+                    buffer[pos++] = encodeTable[(int)(bitWorkArea >>  2) & MASK_5BITS]; // 32-6*5 =  2
+                    buffer[pos++] = encodeTable[(int)(bitWorkArea <<  3) & MASK_5BITS]; // 5-2 = 3
+                    buffer[pos++] = PAD;
+                    break;
+            }
+            currentLinePos += pos - savedPos; // keep track of current line position
+            // if currentPos == 0 we are at the start of a line, so don't add CRLF
+            if (lineLength > 0 && currentLinePos > 0){ // add chunk separator if required
+                System.arraycopy(lineSeparator, 0, buffer, pos, lineSeparator.length);
+                pos += lineSeparator.length;
+            }            
+        } else {
+            for (int i = 0; i < inAvail; i++) {
+                ensureBufferSize(encodeSize);
+                modulus = (modulus+1) % BYTES_PER_UNENCODED_BLOCK;
+                int b = in[inPos++];
+                if (b < 0) {
+                    b += 256;
+                }
+                bitWorkArea = (bitWorkArea << 8) + b; // BITS_PER_BYTE
+                if (0 == modulus) { // we have enough bytes to create our output 
+                    buffer[pos++] = encodeTable[(int)(bitWorkArea >> 35) & MASK_5BITS];
+                    buffer[pos++] = encodeTable[(int)(bitWorkArea >> 30) & MASK_5BITS];
+                    buffer[pos++] = encodeTable[(int)(bitWorkArea >> 25) & MASK_5BITS];
+                    buffer[pos++] = encodeTable[(int)(bitWorkArea >> 20) & MASK_5BITS];
+                    buffer[pos++] = encodeTable[(int)(bitWorkArea >> 15) & MASK_5BITS];
+                    buffer[pos++] = encodeTable[(int)(bitWorkArea >> 10) & MASK_5BITS];
+                    buffer[pos++] = encodeTable[(int)(bitWorkArea >> 5) & MASK_5BITS];
+                    buffer[pos++] = encodeTable[(int)bitWorkArea & MASK_5BITS];
+                    currentLinePos += BYTES_PER_ENCODED_BLOCK;
+                    if (lineLength > 0 && lineLength <= currentLinePos) {
+                        System.arraycopy(lineSeparator, 0, buffer, pos, lineSeparator.length);
+                        pos += lineSeparator.length;
+                        currentLinePos = 0;
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * Returns whether or not the <code>octet</code> is in the Base32 alphabet.
+     * 
+     * @param octet
+     *            The value to test
+     * @return <code>true</code> if the value is defined in the the Base32 alphabet <code>false</code> otherwise.
+     */
+    public boolean isInAlphabet(byte octet) {
+        return octet >= 0 && octet < decodeTable.length && decodeTable[octet] != -1;
+    }
+}
new file mode 100644
--- /dev/null
+++ b/mobile/android/base/apache/commons/codec/binary/Base32InputStream.java
@@ -0,0 +1,85 @@
+// Mozilla has modified this file - see http://hg.mozilla.org/ for details.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.mozilla.apache.commons.codec.binary;
+
+import java.io.InputStream;
+
+/**
+ * Provides Base32 encoding and decoding in a streaming fashion (unlimited size). When encoding the default lineLength
+ * is 76 characters and the default lineEnding is CRLF, but these can be overridden by using the appropriate
+ * constructor.
+ * <p>
+ * The default behaviour of the Base32InputStream is to DECODE, whereas the default behaviour of the Base32OutputStream
+ * is to ENCODE, but this behaviour can be overridden by using a different constructor.
+ * </p>
+ * <p>
+ * Since this class operates directly on byte streams, and not character streams, it is hard-coded to only encode/decode
+ * character encodings which are compatible with the lower 127 ASCII chart (ISO-8859-1, Windows-1252, UTF-8, etc).
+ * </p>
+ * 
+ * @version $Revision: 1063784 $
+ * @see <a href="http://www.ietf.org/rfc/rfc4648.txt">RFC 4648</a>
+ * @since 1.5
+ */
+public class Base32InputStream extends BaseNCodecInputStream {
+
+    /**
+     * Creates a Base32InputStream such that all data read is Base32-decoded from the original provided InputStream.
+     * 
+     * @param in
+     *            InputStream to wrap.
+     */
+    public Base32InputStream(InputStream in) {
+        this(in, false);
+    }
+
+    /**
+     * Creates a Base32InputStream such that all data read is either Base32-encoded or Base32-decoded from the original
+     * provided InputStream.
+     * 
+     * @param in
+     *            InputStream to wrap.
+     * @param doEncode
+     *            true if we should encode all data read from us, false if we should decode.
+     */
+    public Base32InputStream(InputStream in, boolean doEncode) {
+        super(in, new Base32(false), doEncode);
+    }
+
+    /**
+     * Creates a Base32InputStream such that all data read is either Base32-encoded or Base32-decoded from the original
+     * provided InputStream.
+     * 
+     * @param in
+     *            InputStream to wrap.
+     * @param doEncode
+     *            true if we should encode all data read from us, false if we should decode.
+     * @param lineLength
+     *            If doEncode is true, each line of encoded data will contain lineLength characters (rounded down to
+     *            nearest multiple of 4). If lineLength <=0, the encoded data is not divided into lines. If doEncode is
+     *            false, lineLength is ignored.
+     * @param lineSeparator
+     *            If doEncode is true, each line of encoded data will be terminated with this byte sequence (e.g. \r\n).
+     *            If lineLength <= 0, the lineSeparator is not used. If doEncode is false lineSeparator is ignored.
+     */
+    public Base32InputStream(InputStream in, boolean doEncode, int lineLength, byte[] lineSeparator) {
+        super(in, new Base32(lineLength, lineSeparator), doEncode);
+    }
+
+}
new file mode 100644
--- /dev/null
+++ b/mobile/android/base/apache/commons/codec/binary/Base32OutputStream.java
@@ -0,0 +1,85 @@
+// Mozilla has modified this file - see http://hg.mozilla.org/ for details.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.mozilla.apache.commons.codec.binary;
+
+import java.io.OutputStream;
+
+/**
+ * Provides Base32 encoding and decoding in a streaming fashion (unlimited size). When encoding the default lineLength
+ * is 76 characters and the default lineEnding is CRLF, but these can be overridden by using the appropriate
+ * constructor.
+ * <p>
+ * The default behaviour of the Base32OutputStream is to ENCODE, whereas the default behaviour of the Base32InputStream
+ * is to DECODE. But this behaviour can be overridden by using a different constructor.
+ * </p>
+ * <p>
+ * Since this class operates directly on byte streams, and not character streams, it is hard-coded to only encode/decode
+ * character encodings which are compatible with the lower 127 ASCII chart (ISO-8859-1, Windows-1252, UTF-8, etc).
+ * </p>
+ * 
+ * @version $Revision: 1064132 $
+ * @see <a href="http://www.ietf.org/rfc/rfc4648.txt">RFC 4648</a>
+ * @since 1.5
+ */
+public class Base32OutputStream extends BaseNCodecOutputStream {
+
+    /**
+     * Creates a Base32OutputStream such that all data written is Base32-encoded to the original provided OutputStream.
+     * 
+     * @param out
+     *            OutputStream to wrap.
+     */
+    public Base32OutputStream(OutputStream out) {
+        this(out, true);
+    }
+
+    /**
+     * Creates a Base32OutputStream such that all data written is either Base32-encoded or Base32-decoded to the
+     * original provided OutputStream.
+     * 
+     * @param out
+     *            OutputStream to wrap.
+     * @param doEncode
+     *            true if we should encode all data written to us, false if we should decode.
+     */
+    public Base32OutputStream(OutputStream out, boolean doEncode) {
+        super(out, new Base32(false), doEncode);
+    }
+
+    /**
+     * Creates a Base32OutputStream such that all data written is either Base32-encoded or Base32-decoded to the
+     * original provided OutputStream.
+     * 
+     * @param out
+     *            OutputStream to wrap.
+     * @param doEncode
+     *            true if we should encode all data written to us, false if we should decode.
+     * @param lineLength
+     *            If doEncode is true, each line of encoded data will contain lineLength characters (rounded down to
+     *            nearest multiple of 4). If lineLength <=0, the encoded data is not divided into lines. If doEncode is
+     *            false, lineLength is ignored.
+     * @param lineSeparator
+     *            If doEncode is true, each line of encoded data will be terminated with this byte sequence (e.g. \r\n).
+     *            If lineLength <= 0, the lineSeparator is not used. If doEncode is false lineSeparator is ignored.
+     */
+    public Base32OutputStream(OutputStream out, boolean doEncode, int lineLength, byte[] lineSeparator) {
+        super(out, new Base32(lineLength, lineSeparator), doEncode);
+    }
+
+}
new file mode 100644
--- /dev/null
+++ b/mobile/android/base/apache/commons/codec/binary/Base64.java
@@ -0,0 +1,756 @@
+// Mozilla has modified this file - see http://hg.mozilla.org/ for details.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.mozilla.apache.commons.codec.binary;
+
+import java.math.BigInteger;
+
+/**
+ * Provides Base64 encoding and decoding as defined by <a href="http://www.ietf.org/rfc/rfc2045.txt">RFC 2045</a>.
+ * 
+ * <p>
+ * This class implements section <cite>6.8. Base64 Content-Transfer-Encoding</cite> from RFC 2045 <cite>Multipurpose
+ * Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies</cite> by Freed and Borenstein.
+ * </p>
+ * <p>
+ * The class can be parameterized in the following manner with various constructors:
+ * <ul>
+ * <li>URL-safe mode: Default off.</li>
+ * <li>Line length: Default 76. Line length that aren't multiples of 4 will still essentially end up being multiples of
+ * 4 in the encoded data.
+ * <li>Line separator: Default is CRLF ("\r\n")</li>
+ * </ul>
+ * </p>
+ * <p>
+ * Since this class operates directly on byte streams, and not character streams, it is hard-coded to only encode/decode
+ * character encodings which are compatible with the lower 127 ASCII chart (ISO-8859-1, Windows-1252, UTF-8, etc).
+ * </p>
+ * <p>
+ * This class is not thread-safe. Each thread should use its own instance.
+ * </p>
+ * 
+ * @see <a href="http://www.ietf.org/rfc/rfc2045.txt">RFC 2045</a>
+ * @author Apache Software Foundation
+ * @since 1.0
+ * @version $Revision: 1080712 $
+ */
+public class Base64 extends BaseNCodec {
+
+    /**
+     * BASE32 characters are 6 bits in length. 
+     * They are formed by taking a block of 3 octets to form a 24-bit string, 
+     * which is converted into 4 BASE64 characters.
+     */
+    private static final int BITS_PER_ENCODED_BYTE = 6;
+    private static final int BYTES_PER_UNENCODED_BLOCK = 3;
+    private static final int BYTES_PER_ENCODED_BLOCK = 4;
+
+    /**
+     * Chunk separator per RFC 2045 section 2.1.
+     *
+     * <p>
+     * N.B. The next major release may break compatibility and make this field private.
+     * </p>
+     * 
+     * @see <a href="http://www.ietf.org/rfc/rfc2045.txt">RFC 2045 section 2.1</a>
+     */
+    static final byte[] CHUNK_SEPARATOR = {'\r', '\n'};
+
+    /**
+     * This array is a lookup table that translates 6-bit positive integer index values into their "Base64 Alphabet"
+     * equivalents as specified in Table 1 of RFC 2045.
+     * 
+     * Thanks to "commons" project in ws.apache.org for this code.
+     * http://svn.apache.org/repos/asf/webservices/commons/trunk/modules/util/
+     */
+    private static final byte[] STANDARD_ENCODE_TABLE = {
+            'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
+            'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
+            'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
+            'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
+            '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/'
+    };
+
+    /**
+     * This is a copy of the STANDARD_ENCODE_TABLE above, but with + and /
+     * changed to - and _ to make the encoded Base64 results more URL-SAFE.
+     * This table is only used when the Base64's mode is set to URL-SAFE.
+     */    
+    private static final byte[] URL_SAFE_ENCODE_TABLE = {
+            'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
+            'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
+            'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
+            'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
+            '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '-', '_'
+    };
+
+    /**
+     * This array is a lookup table that translates Unicode characters drawn from the "Base64 Alphabet" (as specified in
+     * Table 1 of RFC 2045) into their 6-bit positive integer equivalents. Characters that are not in the Base64
+     * alphabet but fall within the bounds of the array are translated to -1.
+     * 
+     * Note: '+' and '-' both decode to 62. '/' and '_' both decode to 63. This means decoder seamlessly handles both
+     * URL_SAFE and STANDARD base64. (The encoder, on the other hand, needs to know ahead of time what to emit).
+     * 
+     * Thanks to "commons" project in ws.apache.org for this code.
+     * http://svn.apache.org/repos/asf/webservices/commons/trunk/modules/util/
+     */
+    private static final byte[] DECODE_TABLE = {
+            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+            -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, 62, -1, 63, 52, 53, 54,
+            55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4,
+            5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
+            24, 25, -1, -1, -1, -1, 63, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34,
+            35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51
+    };
+
+    /**
+     * Base64 uses 6-bit fields. 
+     */
+    /** Mask used to extract 6 bits, used when encoding */
+    private static final int MASK_6BITS = 0x3f;
+
+    // The static final fields above are used for the original static byte[] methods on Base64.
+    // The private member fields below are used with the new streaming approach, which requires
+    // some state be preserved between calls of encode() and decode().
+
+    /**
+     * Encode table to use: either STANDARD or URL_SAFE. Note: the DECODE_TABLE above remains static because it is able
+     * to decode both STANDARD and URL_SAFE streams, but the encodeTable must be a member variable so we can switch
+     * between the two modes.
+     */
+    private final byte[] encodeTable;
+
+    // Only one decode table currently; keep for consistency with Base32 code
+    private final byte[] decodeTable = DECODE_TABLE;
+
+    /**
+     * Line separator for encoding. Not used when decoding. Only used if lineLength > 0.
+     */
+    private final byte[] lineSeparator;
+
+    /**
+     * Convenience variable to help us determine when our buffer is going to run out of room and needs resizing.
+     * <code>decodeSize = 3 + lineSeparator.length;</code>
+     */
+    private final int decodeSize;
+
+    /**
+     * Convenience variable to help us determine when our buffer is going to run out of room and needs resizing.
+     * <code>encodeSize = 4 + lineSeparator.length;</code>
+     */
+    private final int encodeSize;
+
+    /**
+     * Place holder for the bytes we're dealing with for our based logic. 
+     * Bitwise operations store and extract the encoding or decoding from this variable.
+     */
+    private int bitWorkArea;
+
+    /**
+     * Creates a Base64 codec used for decoding (all modes) and encoding in URL-unsafe mode.
+     * <p>
+     * When encoding the line length is 0 (no chunking), and the encoding table is STANDARD_ENCODE_TABLE.
+     * </p>
+     * 
+     * <p>
+     * When decoding all variants are supported.
+     * </p>
+     */
+    public Base64() {
+        this(0);
+    }
+
+    /**
+     * Creates a Base64 codec used for decoding (all modes) and encoding in the given URL-safe mode.
+     * <p>
+     * When encoding the line length is 76, the line separator is CRLF, and the encoding table is STANDARD_ENCODE_TABLE.
+     * </p>
+     * 
+     * <p>
+     * When decoding all variants are supported.
+     * </p>
+     * 
+     * @param urlSafe
+     *            if <code>true</code>, URL-safe encoding is used. In most cases this should be set to
+     *            <code>false</code>.
+     * @since 1.4
+     */
+    public Base64(boolean urlSafe) {
+        this(MIME_CHUNK_SIZE, CHUNK_SEPARATOR, urlSafe);
+    }
+
+    /**
+     * Creates a Base64 codec used for decoding (all modes) and encoding in URL-unsafe mode.
+     * <p>
+     * When encoding the line length is given in the constructor, the line separator is CRLF, and the encoding table is
+     * STANDARD_ENCODE_TABLE.
+     * </p>
+     * <p>
+     * Line lengths that aren't multiples of 4 will still essentially end up being multiples of 4 in the encoded data.
+     * </p>
+     * <p>
+     * When decoding all variants are supported.
+     * </p>
+     * 
+     * @param lineLength
+     *            Each line of encoded data will be at most of the given length (rounded down to nearest multiple of 4).
+     *            If lineLength <= 0, then the output will not be divided into lines (chunks). Ignored when decoding.
+     * @since 1.4
+     */
+    public Base64(int lineLength) {
+        this(lineLength, CHUNK_SEPARATOR);
+    }
+
+    /**
+     * Creates a Base64 codec used for decoding (all modes) and encoding in URL-unsafe mode.
+     * <p>
+     * When encoding the line length and line separator are given in the constructor, and the encoding table is
+     * STANDARD_ENCODE_TABLE.
+     * </p>
+     * <p>
+     * Line lengths that aren't multiples of 4 will still essentially end up being multiples of 4 in the encoded data.
+     * </p>
+     * <p>
+     * When decoding all variants are supported.
+     * </p>
+     * 
+     * @param lineLength
+     *            Each line of encoded data will be at most of the given length (rounded down to nearest multiple of 4).
+     *            If lineLength <= 0, then the output will not be divided into lines (chunks). Ignored when decoding.
+     * @param lineSeparator
+     *            Each line of encoded data will end with this sequence of bytes.
+     * @throws IllegalArgumentException
+     *             Thrown when the provided lineSeparator included some base64 characters.
+     * @since 1.4
+     */
+    public Base64(int lineLength, byte[] lineSeparator) {
+        this(lineLength, lineSeparator, false);
+    }
+
+    /**
+     * Creates a Base64 codec used for decoding (all modes) and encoding in URL-unsafe mode.
+     * <p>
+     * When encoding the line length and line separator are given in the constructor, and the encoding table is
+     * STANDARD_ENCODE_TABLE.
+     * </p>
+     * <p>
+     * Line lengths that aren't multiples of 4 will still essentially end up being multiples of 4 in the encoded data.
+     * </p>
+     * <p>
+     * When decoding all variants are supported.
+     * </p>
+     * 
+     * @param lineLength
+     *            Each line of encoded data will be at most of the given length (rounded down to nearest multiple of 4).
+     *            If lineLength <= 0, then the output will not be divided into lines (chunks). Ignored when decoding.
+     * @param lineSeparator
+     *            Each line of encoded data will end with this sequence of bytes.
+     * @param urlSafe
+     *            Instead of emitting '+' and '/' we emit '-' and '_' respectively. urlSafe is only applied to encode
+     *            operations. Decoding seamlessly handles both modes.
+     * @throws IllegalArgumentException
+     *             The provided lineSeparator included some base64 characters. That's not going to work!
+     * @since 1.4
+     */
+    public Base64(int lineLength, byte[] lineSeparator, boolean urlSafe) {
+        super(BYTES_PER_UNENCODED_BLOCK, BYTES_PER_ENCODED_BLOCK, 
+                lineLength,
+                lineSeparator == null ? 0 : lineSeparator.length);
+        // TODO could be simplified if there is no requirement to reject invalid line sep when length <=0
+        // @see test case Base64Test.testConstructors() 
+        if (lineSeparator != null) {
+            if (containsAlphabetOrPad(lineSeparator)) {
+                String sep = StringUtils.newStringUtf8(lineSeparator);
+                throw new IllegalArgumentException("lineSeparator must not contain base64 characters: [" + sep + "]");
+            }            
+            if (lineLength > 0){ // null line-sep forces no chunking rather than throwing IAE
+                this.encodeSize = BYTES_PER_ENCODED_BLOCK + lineSeparator.length;
+                this.lineSeparator = new byte[lineSeparator.length];
+                System.arraycopy(lineSeparator, 0, this.lineSeparator, 0, lineSeparator.length);
+            } else {
+                this.encodeSize = BYTES_PER_ENCODED_BLOCK;
+                this.lineSeparator = null;
+            }
+        } else {
+            this.encodeSize = BYTES_PER_ENCODED_BLOCK;
+            this.lineSeparator = null;
+        }
+        this.decodeSize = this.encodeSize - 1;
+        this.encodeTable = urlSafe ? URL_SAFE_ENCODE_TABLE : STANDARD_ENCODE_TABLE;
+    }
+
+    /**
+     * Returns our current encode mode. True if we're URL-SAFE, false otherwise.
+     * 
+     * @return true if we're in URL-SAFE mode, false otherwise.
+     * @since 1.4
+     */
+    public boolean isUrlSafe() {
+        return this.encodeTable == URL_SAFE_ENCODE_TABLE;
+    }
+
+    /**
+     * <p>
+     * Encodes all of the provided data, starting at inPos, for inAvail bytes. Must be called at least twice: once with
+     * the data to encode, and once with inAvail set to "-1" to alert encoder that EOF has been reached, so flush last
+     * remaining bytes (if not multiple of 3).
+     * </p>
+     * <p>
+     * Thanks to "commons" project in ws.apache.org for the bitwise operations, and general approach.
+     * http://svn.apache.org/repos/asf/webservices/commons/trunk/modules/util/
+     * </p>
+     * 
+     * @param in
+     *            byte[] array of binary data to base64 encode.
+     * @param inPos
+     *            Position to start reading data from.
+     * @param inAvail
+     *            Amount of bytes available from input for encoding.
+     */
+    void encode(byte[] in, int inPos, int inAvail) {
+        if (eof) {
+            return;
+        }
+        // inAvail < 0 is how we're informed of EOF in the underlying data we're
+        // encoding.
+        if (inAvail < 0) {
+            eof = true;
+            if (0 == modulus && lineLength == 0) {
+                return; // no leftovers to process and not using chunking
+            }
+            ensureBufferSize(encodeSize);
+            int savedPos = pos;
+            switch (modulus) { // 0-2
+                case 1 : // 8 bits = 6 + 2
+                    buffer[pos++] = encodeTable[(bitWorkArea >> 2) & MASK_6BITS]; // top 6 bits
+                    buffer[pos++] = encodeTable[(bitWorkArea << 4) & MASK_6BITS]; // remaining 2 
+                    // URL-SAFE skips the padding to further reduce size.
+                    if (encodeTable == STANDARD_ENCODE_TABLE) {
+                        buffer[pos++] = PAD;
+                        buffer[pos++] = PAD;
+                    }
+                    break;
+
+                case 2 : // 16 bits = 6 + 6 + 4
+                    buffer[pos++] = encodeTable[(bitWorkArea >> 10) & MASK_6BITS];
+                    buffer[pos++] = encodeTable[(bitWorkArea >> 4) & MASK_6BITS];
+                    buffer[pos++] = encodeTable[(bitWorkArea << 2) & MASK_6BITS];
+                    // URL-SAFE skips the padding to further reduce size.
+                    if (encodeTable == STANDARD_ENCODE_TABLE) {
+                        buffer[pos++] = PAD;
+                    }
+                    break;
+            }
+            currentLinePos += pos - savedPos; // keep track of current line position
+            // if currentPos == 0 we are at the start of a line, so don't add CRLF
+            if (lineLength > 0 && currentLinePos > 0) { 
+                System.arraycopy(lineSeparator, 0, buffer, pos, lineSeparator.length);
+                pos += lineSeparator.length;
+            }
+        } else {
+            for (int i = 0; i < inAvail; i++) {
+                ensureBufferSize(encodeSize);
+                modulus = (modulus+1) % BYTES_PER_UNENCODED_BLOCK;
+                int b = in[inPos++];
+                if (b < 0) {
+                    b += 256;
+                }
+                bitWorkArea = (bitWorkArea << 8) + b; //  BITS_PER_BYTE
+                if (0 == modulus) { // 3 bytes = 24 bits = 4 * 6 bits to extract
+                    buffer[pos++] = encodeTable[(bitWorkArea >> 18) & MASK_6BITS];
+                    buffer[pos++] = encodeTable[(bitWorkArea >> 12) & MASK_6BITS];
+                    buffer[pos++] = encodeTable[(bitWorkArea >> 6) & MASK_6BITS];
+                    buffer[pos++] = encodeTable[bitWorkArea & MASK_6BITS];
+                    currentLinePos += BYTES_PER_ENCODED_BLOCK;
+                    if (lineLength > 0 && lineLength <= currentLinePos) {
+                        System.arraycopy(lineSeparator, 0, buffer, pos, lineSeparator.length);
+                        pos += lineSeparator.length;
+                        currentLinePos = 0;
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * <p>
+     * Decodes all of the provided data, starting at inPos, for inAvail bytes. Should be called at least twice: once
+     * with the data to decode, and once with inAvail set to "-1" to alert decoder that EOF has been reached. The "-1"
+     * call is not necessary when decoding, but it doesn't hurt, either.
+     * </p>
+     * <p>
+     * Ignores all non-base64 characters. This is how chunked (e.g. 76 character) data is handled, since CR and LF are
+     * silently ignored, but has implications for other bytes, too. This method subscribes to the garbage-in,
+     * garbage-out philosophy: it will not check the provided data for validity.
+     * </p>
+     * <p>
+     * Thanks to "commons" project in ws.apache.org for the bitwise operations, and general approach.
+     * http://svn.apache.org/repos/asf/webservices/commons/trunk/modules/util/
+     * </p>
+     * 
+     * @param in
+     *            byte[] array of ascii data to base64 decode.
+     * @param inPos
+     *            Position to start reading data from.
+     * @param inAvail
+     *            Amount of bytes available from input for encoding.
+     */
+    void decode(byte[] in, int inPos, int inAvail) {
+        if (eof) {
+            return;
+        }
+        if (inAvail < 0) {
+            eof = true;
+        }
+        for (int i = 0; i < inAvail; i++) {
+            ensureBufferSize(decodeSize);
+            byte b = in[inPos++];
+            if (b == PAD) {
+                // We're done.
+                eof = true;
+                break;
+            } else {
+                if (b >= 0 && b < DECODE_TABLE.length) {
+                    int result = DECODE_TABLE[b];
+                    if (result >= 0) {
+                        modulus = (modulus+1) % BYTES_PER_ENCODED_BLOCK;
+                        bitWorkArea = (bitWorkArea << BITS_PER_ENCODED_BYTE) + result;
+                        if (modulus == 0) {
+                            buffer[pos++] = (byte) ((bitWorkArea >> 16) & MASK_8BITS);
+                            buffer[pos++] = (byte) ((bitWorkArea >> 8) & MASK_8BITS);
+                            buffer[pos++] = (byte) (bitWorkArea & MASK_8BITS);
+                        }
+                    }
+                }
+            }
+        }
+
+        // Two forms of EOF as far as base64 decoder is concerned: actual
+        // EOF (-1) and first time '=' character is encountered in stream.
+        // This approach makes the '=' padding characters completely optional.
+        if (eof && modulus != 0) {
+            ensureBufferSize(decodeSize);
+            
+            // We have some spare bits remaining
+            // Output all whole multiples of 8 bits and ignore the rest
+            switch (modulus) {
+           //   case 1: // 6 bits - ignore entirely
+           //       break;
+                case 2 : // 12 bits = 8 + 4
+                    bitWorkArea = bitWorkArea >> 4; // dump the extra 4 bits
+                    buffer[pos++] = (byte) ((bitWorkArea) & MASK_8BITS);
+                    break;
+                case 3 : // 18 bits = 8 + 8 + 2
+                    bitWorkArea = bitWorkArea >> 2; // dump 2 bits
+                    buffer[pos++] = (byte) ((bitWorkArea >> 8) & MASK_8BITS);
+                    buffer[pos++] = (byte) ((bitWorkArea) & MASK_8BITS);
+                    break;
+            }
+        }
+    }
+
+    /**
+     * Returns whether or not the <code>octet</code> is in the base 64 alphabet.
+     * 
+     * @param octet
+     *            The value to test
+     * @return <code>true</code> if the value is defined in the the base 64 alphabet, <code>false</code> otherwise.
+     * @since 1.4
+     */
+    public static boolean isBase64(byte octet) {
+        return octet == PAD_DEFAULT || (octet >= 0 && octet < DECODE_TABLE.length && DECODE_TABLE[octet] != -1);
+    }
+
+    /**
+     * Tests a given String to see if it contains only valid characters within the Base64 alphabet. Currently the
+     * method treats whitespace as valid.
+     * 
+     * @param base64
+     *            String to test
+     * @return <code>true</code> if all characters in the String are valid characters in the Base64 alphabet or if
+     *         the String is empty; <code>false</code>, otherwise
+     *  @since 1.5
+     */
+    public static boolean isBase64(String base64) {
+        return isBase64(StringUtils.getBytesUtf8(base64));
+    }
+
+    /**
+     * Tests a given byte array to see if it contains only valid characters within the Base64 alphabet. Currently the
+     * method treats whitespace as valid.
+     * 
+     * @param arrayOctet
+     *            byte array to test
+     * @return <code>true</code> if all bytes are valid characters in the Base64 alphabet or if the byte array is empty;
+     *         <code>false</code>, otherwise
+     * @deprecated 1.5 Use {@link #isBase64(byte[])}, will be removed in 2.0.
+     */
+    public static boolean isArrayByteBase64(byte[] arrayOctet) {
+        return isBase64(arrayOctet);
+    }
+    
+    /**
+     * Tests a given byte array to see if it contains only valid characters within the Base64 alphabet. Currently the
+     * method treats whitespace as valid.
+     * 
+     * @param arrayOctet
+     *            byte array to test
+     * @return <code>true</code> if all bytes are valid characters in the Base64 alphabet or if the byte array is empty;
+     *         <code>false</code>, otherwise
+     * @since 1.5
+     */    
+    public static boolean isBase64(byte[] arrayOctet) {
+        for (int i = 0; i < arrayOctet.length; i++) {
+            if (!isBase64(arrayOctet[i]) && !isWhiteSpace(arrayOctet[i])) {
+                return false;
+            }
+        }
+        return true;
+    }
+    
+    /**
+     * Encodes binary data using the base64 algorithm but does not chunk the output.
+     * 
+     * @param binaryData
+     *            binary data to encode
+     * @return byte[] containing Base64 characters in their UTF-8 representation.
+     */
+    public static byte[] encodeBase64(byte[] binaryData) {
+        return encodeBase64(binaryData, false);
+    }
+
+    /**
+     * Encodes binary data using the base64 algorithm but does not chunk the output.
+     *
+     * NOTE:  We changed the behaviour of this method from multi-line chunking (commons-codec-1.4) to
+     * single-line non-chunking (commons-codec-1.5). 
+     * 
+     * @param binaryData
+     *            binary data to encode
+     * @return String containing Base64 characters.
+     * @since 1.4 (NOTE:  1.4 chunked the output, whereas 1.5 does not).
+     */    
+    public static String encodeBase64String(byte[] binaryData) {
+        return StringUtils.newStringUtf8(encodeBase64(binaryData, false));
+    }
+    
+    /**
+     * Encodes binary data using a URL-safe variation of the base64 algorithm but does not chunk the output. The
+     * url-safe variation emits - and _ instead of + and / characters.
+     * 
+     * @param binaryData
+     *            binary data to encode
+     * @return byte[] containing Base64 characters in their UTF-8 representation.
+     * @since 1.4
+     */
+    public static byte[] encodeBase64URLSafe(byte[] binaryData) {
+        return encodeBase64(binaryData, false, true);
+    }
+
+    /**
+     * Encodes binary data using a URL-safe variation of the base64 algorithm but does not chunk the output. The
+     * url-safe variation emits - and _ instead of + and / characters.
+     *
+     * @param binaryData
+     *            binary data to encode
+     * @return String containing Base64 characters
+     * @since 1.4
+     */    
+    public static String encodeBase64URLSafeString(byte[] binaryData) {
+        return StringUtils.newStringUtf8(encodeBase64(binaryData, false, true));
+    }    
+
+    /**
+     * Encodes binary data using the base64 algorithm and chunks the encoded output into 76 character blocks
+     * 
+     * @param binaryData
+     *            binary data to encode
+     * @return Base64 characters chunked in 76 character blocks
+     */
+    public static byte[] encodeBase64Chunked(byte[] binaryData) {
+        return encodeBase64(binaryData, true);
+    }
+
+    /**
+     * Encodes binary data using the base64 algorithm, optionally chunking the output into 76 character blocks.
+     * 
+     * @param binaryData
+     *            Array containing binary data to encode.
+     * @param isChunked
+     *            if <code>true</code> this encoder will chunk the base64 output into 76 character blocks
+     * @return Base64-encoded data.
+     * @throws IllegalArgumentException
+     *             Thrown when the input array needs an output array bigger than {@link Integer#MAX_VALUE}
+     */
+    public static byte[] encodeBase64(byte[] binaryData, boolean isChunked) {
+        return encodeBase64(binaryData, isChunked, false);
+    }
+
+    /**
+     * Encodes binary data using the base64 algorithm, optionally chunking the output into 76 character blocks.
+     * 
+     * @param binaryData
+     *            Array containing binary data to encode.
+     * @param isChunked
+     *            if <code>true</code> this encoder will chunk the base64 output into 76 character blocks
+     * @param urlSafe
+     *            if <code>true</code> this encoder will emit - and _ instead of the usual + and / characters.
+     * @return Base64-encoded data.
+     * @throws IllegalArgumentException
+     *             Thrown when the input array needs an output array bigger than {@link Integer#MAX_VALUE}
+     * @since 1.4
+     */
+    public static byte[] encodeBase64(byte[] binaryData, boolean isChunked, boolean urlSafe) {
+        return encodeBase64(binaryData, isChunked, urlSafe, Integer.MAX_VALUE);
+    }
+
+    /**
+     * Encodes binary data using the base64 algorithm, optionally chunking the output into 76 character blocks.
+     * 
+     * @param binaryData
+     *            Array containing binary data to encode.
+     * @param isChunked
+     *            if <code>true</code> this encoder will chunk the base64 output into 76 character blocks
+     * @param urlSafe
+     *            if <code>true</code> this encoder will emit - and _ instead of the usual + and / characters.
+     * @param maxResultSize
+     *            The maximum result size to accept.
+     * @return Base64-encoded data.
+     * @throws IllegalArgumentException
+     *             Thrown when the input array needs an output array bigger than maxResultSize
+     * @since 1.4
+     */
+    public static byte[] encodeBase64(byte[] binaryData, boolean isChunked, boolean urlSafe, int maxResultSize) {
+        if (binaryData == null || binaryData.length == 0) {
+            return binaryData;
+        }
+
+        // Create this so can use the super-class method
+        // Also ensures that the same roundings are performed by the ctor and the code
+        Base64 b64 = isChunked ? new Base64(urlSafe) : new Base64(0, CHUNK_SEPARATOR, urlSafe);
+        long len = b64.getEncodedLength(binaryData);
+        if (len > maxResultSize) {
+            throw new IllegalArgumentException("Input array too big, the output array would be bigger (" +
+                len +
+                ") than the specified maximum size of " +
+                maxResultSize);
+        }
+                
+        return b64.encode(binaryData);
+    }
+
+    /**
+     * Decodes a Base64 String into octets
+     *
+     * @param base64String
+     *            String containing Base64 data
+     * @return Array containing decoded data.
+     * @since 1.4
+     */
+    public static byte[] decodeBase64(String base64String) {
+        return new Base64().decode(base64String);
+    }
+
+    /**
+     * Decodes Base64 data into octets
+     * 
+     * @param base64Data
+     *            Byte array containing Base64 data
+     * @return Array containing decoded data.
+     */
+    public static byte[] decodeBase64(byte[] base64Data) {
+        return new Base64().decode(base64Data);
+    }
+
+    // Implementation of the Encoder Interface
+
+    // Implementation of integer encoding used for crypto
+    /**
+     * Decodes a byte64-encoded integer according to crypto standards such as W3C's XML-Signature
+     * 
+     * @param pArray
+     *            a byte array containing base64 character data
+     * @return A BigInteger
+     * @since 1.4
+     */
+    public static BigInteger decodeInteger(byte[] pArray) {
+        return new BigInteger(1, decodeBase64(pArray));
+    }
+
+    /**
+     * Encodes to a byte64-encoded integer according to crypto standards such as W3C's XML-Signature
+     * 
+     * @param bigInt
+     *            a BigInteger
+     * @return A byte array containing base64 character data
+     * @throws NullPointerException
+     *             if null is passed in
+     * @since 1.4
+     */
+    public static byte[] encodeInteger(BigInteger bigInt) {
+        if (bigInt == null) {
+            throw new NullPointerException("encodeInteger called with null parameter");
+        }
+        return encodeBase64(toIntegerBytes(bigInt), false);
+    }
+
+    /**
+     * Returns a byte-array representation of a <code>BigInteger</code> without sign bit.
+     * 
+     * @param bigInt
+     *            <code>BigInteger</code> to be converted
+     * @return a byte array representation of the BigInteger parameter
+     */
+    static byte[] toIntegerBytes(BigInteger bigInt) {
+        int bitlen = bigInt.bitLength();
+        // round bitlen
+        bitlen = ((bitlen + 7) >> 3) << 3;
+        byte[] bigBytes = bigInt.toByteArray();
+
+        if (((bigInt.bitLength() % 8) != 0) && (((bigInt.bitLength() / 8) + 1) == (bitlen / 8))) {
+            return bigBytes;
+        }
+        // set up params for copying everything but sign bit
+        int startSrc = 0;
+        int len = bigBytes.length;
+
+        // if bigInt is exactly byte-aligned, just skip signbit in copy
+        if ((bigInt.bitLength() % 8) == 0) {
+            startSrc = 1;
+            len--;
+        }
+        int startDst = bitlen / 8 - len; // to pad w/ nulls as per spec
+        byte[] resizedBytes = new byte[bitlen / 8];
+        System.arraycopy(bigBytes, startSrc, resizedBytes, startDst, len);
+        return resizedBytes;
+    }
+
+    /**
+     * Returns whether or not the <code>octet</code> is in the Base32 alphabet.
+     * 
+     * @param octet
+     *            The value to test
+     * @return <code>true</code> if the value is defined in the the Base32 alphabet <code>false</code> otherwise.
+     */
+    protected boolean isInAlphabet(byte octet) {
+        return octet >= 0 && octet < decodeTable.length && decodeTable[octet] != -1;
+    }
+
+}
new file mode 100644
--- /dev/null
+++ b/mobile/android/base/apache/commons/codec/binary/Base64InputStream.java
@@ -0,0 +1,89 @@
+// Mozilla has modified this file - see http://hg.mozilla.org/ for details.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.mozilla.apache.commons.codec.binary;
+
+import java.io.InputStream;
+
+/**
+ * Provides Base64 encoding and decoding in a streaming fashion (unlimited size). When encoding the default lineLength
+ * is 76 characters and the default lineEnding is CRLF, but these can be overridden by using the appropriate
+ * constructor.
+ * <p>
+ * The default behaviour of the Base64InputStream is to DECODE, whereas the default behaviour of the Base64OutputStream
+ * is to ENCODE, but this behaviour can be overridden by using a different constructor.
+ * </p>
+ * <p>
+ * This class implements section <cite>6.8. Base64 Content-Transfer-Encoding</cite> from RFC 2045 <cite>Multipurpose
+ * Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies</cite> by Freed and Borenstein.
+ * </p>
+ * <p>
+ * Since this class operates directly on byte streams, and not character streams, it is hard-coded to only encode/decode
+ * character encodings which are compatible with the lower 127 ASCII chart (ISO-8859-1, Windows-1252, UTF-8, etc).
+ * </p>
+ * 
+ * @author Apache Software Foundation 
+ * @version $Id: Base64InputStream.java 1064424 2011-01-28 02:02:46Z sebb $
+ * @see <a href="http://www.ietf.org/rfc/rfc2045.txt">RFC 2045</a>
+ * @since 1.4
+ */
+public class Base64InputStream extends BaseNCodecInputStream {
+
+    /**
+     * Creates a Base64InputStream such that all data read is Base64-decoded from the original provided InputStream.
+     * 
+     * @param in
+     *            InputStream to wrap.
+     */
+    public Base64InputStream(InputStream in) {
+        this(in, false);
+    }
+
+    /**
+     * Creates a Base64InputStream such that all data read is either Base64-encoded or Base64-decoded from the original
+     * provided InputStream.
+     * 
+     * @param in
+     *            InputStream to wrap.
+     * @param doEncode
+     *            true if we should encode all data read from us, false if we should decode.
+     */
+    public Base64InputStream(InputStream in, boolean doEncode) {
+        super(in, new Base64(false), doEncode);
+    }
+
+    /**
+     * Creates a Base64InputStream such that all data read is either Base64-encoded or Base64-decoded from the original
+     * provided InputStream.
+     * 
+     * @param in
+     *            InputStream to wrap.
+     * @param doEncode
+     *            true if we should encode all data read from us, false if we should decode.
+     * @param lineLength
+     *            If doEncode is true, each line of encoded data will contain lineLength characters (rounded down to
+     *            nearest multiple of 4). If lineLength <=0, the encoded data is not divided into lines. If doEncode is
+     *            false, lineLength is ignored.
+     * @param lineSeparator
+     *            If doEncode is true, each line of encoded data will be terminated with this byte sequence (e.g. \r\n).
+     *            If lineLength <= 0, the lineSeparator is not used. If doEncode is false lineSeparator is ignored.
+     */
+    public Base64InputStream(InputStream in, boolean doEncode, int lineLength, byte[] lineSeparator) {
+        super(in, new Base64(lineLength, lineSeparator), doEncode);
+    }
+}
new file mode 100644
--- /dev/null
+++ b/mobile/android/base/apache/commons/codec/binary/Base64OutputStream.java
@@ -0,0 +1,89 @@
+// Mozilla has modified this file - see http://hg.mozilla.org/ for details.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.mozilla.apache.commons.codec.binary;
+
+import java.io.OutputStream;
+
+/**
+ * Provides Base64 encoding and decoding in a streaming fashion (unlimited size). When encoding the default lineLength
+ * is 76 characters and the default lineEnding is CRLF, but these can be overridden by using the appropriate
+ * constructor.
+ * <p>
+ * The default behaviour of the Base64OutputStream is to ENCODE, whereas the default behaviour of the Base64InputStream
+ * is to DECODE. But this behaviour can be overridden by using a different constructor.
+ * </p>
+ * <p>
+ * This class implements section <cite>6.8. Base64 Content-Transfer-Encoding</cite> from RFC 2045 <cite>Multipurpose
+ * Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies</cite> by Freed and Borenstein.
+ * </p>
+ * <p>
+ * Since this class operates directly on byte streams, and not character streams, it is hard-coded to only encode/decode
+ * character encodings which are compatible with the lower 127 ASCII chart (ISO-8859-1, Windows-1252, UTF-8, etc).
+ * </p>
+ * 
+ * @author Apache Software Foundation
+ * @version $Id: Base64OutputStream.java 1064424 2011-01-28 02:02:46Z sebb $
+ * @see <a href="http://www.ietf.org/rfc/rfc2045.txt">RFC 2045</a>
+ * @since 1.4
+ */
+public class Base64OutputStream extends BaseNCodecOutputStream {
+
+    /**
+     * Creates a Base64OutputStream such that all data written is Base64-encoded to the original provided OutputStream.
+     * 
+     * @param out
+     *            OutputStream to wrap.
+     */
+    public Base64OutputStream(OutputStream out) {
+        this(out, true);
+    }
+
+    /**
+     * Creates a Base64OutputStream such that all data written is either Base64-encoded or Base64-decoded to the
+     * original provided OutputStream.
+     * 
+     * @param out
+     *            OutputStream to wrap.
+     * @param doEncode
+     *            true if we should encode all data written to us, false if we should decode.
+     */
+    public Base64OutputStream(OutputStream out, boolean doEncode) {
+        super(out,new Base64(false), doEncode);
+    }
+
+    /**
+     * Creates a Base64OutputStream such that all data written is either Base64-encoded or Base64-decoded to the
+     * original provided OutputStream.
+     * 
+     * @param out
+     *            OutputStream to wrap.
+     * @param doEncode
+     *            true if we should encode all data written to us, false if we should decode.
+     * @param lineLength
+     *            If doEncode is true, each line of encoded data will contain lineLength characters (rounded down to
+     *            nearest multiple of 4). If lineLength <=0, the encoded data is not divided into lines. If doEncode is
+     *            false, lineLength is ignored.
+     * @param lineSeparator
+     *            If doEncode is true, each line of encoded data will be terminated with this byte sequence (e.g. \r\n).
+     *            If lineLength <= 0, the lineSeparator is not used. If doEncode is false lineSeparator is ignored.
+     */
+    public Base64OutputStream(OutputStream out, boolean doEncode, int lineLength, byte[] lineSeparator) {
+        super(out, new Base64(lineLength, lineSeparator), doEncode);
+    }
+}
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/mobile/android/base/apache/commons/codec/binary/BaseNCodec.java
@@ -0,0 +1,445 @@
+// Mozilla has modified this file - see http://hg.mozilla.org/ for details.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.mozilla.apache.commons.codec.binary;
+
+import org.mozilla.apache.commons.codec.BinaryDecoder;
+import org.mozilla.apache.commons.codec.BinaryEncoder;
+import org.mozilla.apache.commons.codec.DecoderException;
+import org.mozilla.apache.commons.codec.EncoderException;